Programowanie współbieżne i rozproszone/PWR Ćwiczenia sem
Tematyka zajęć
Semafory uniksowe jako jeden z mechanizmów IPC.
Literatura
Scenariusz zajęć
Wstęp
Jak już wspomnieliśmy na wykładzie, semafory w systemie Unix dostarczają znacznie bogatszej funkcjonalności niż semafory klasyczne. Zapoznamy się teraz z funkcjami systemowymi umożliwiającymi wykonywanie operacji na tych semaforach i przeanalizujemy przykładowe programy wykorzystujące semafory.
Semafory uniksowe są dostępne jako jeden z zasobów IPC. Dlatego też wszystkie uwagi ogólne dotyczące mechanizmów IPC omówione przy okazji laboratorium dotyczącego kolejek komunikatów pozostają w mocy. W szczególności zasady tworzenia zasobu, zyskiwania dostępu do niego są takie same jak przy kolejkach komunikatów. Ze względu na specyfikę semaforów funkcja semget (odpowiednik msgget) ma inne parametry. Wiąże się do głównie z tym, że semafory w Uniksie nie występują pojedynczo, lecz są grupowane w tzw. ,,zestawy semaforów. Cały zestaw stanowi pojedynczy zasób IPC. Maksymalna liczba semaforów w jednym zestawie jest zależna od konfiguracji jądra. W obrębie zestawu poszczególne semafory są numerowane kolejnymi liczbami nieujemnymi, począwszy od zera.
Tworzenie (uzyskiwanie dostępu do) zestawu semaforów
Do tworzenia zestawu semaforów lub pozyskania dostępu do już istniejącego zestawu służy funkcja systemowa:
int semget (key_t klucz, int lsem, int flagi)
Funkcja ta działa analogicznie do funkcji msgget:
- parametr klucz jest kluczem identyfikującym zestaw
- parametr flagi ustala prawa dostępu do zestawu semaforów oraz tryb tworzenia (opcje IPC_CREAT oraz IPC_EXCL); można tu także użyć wartość IPC_PRIVATE
- wynikiem funkcji jest -1 w przypadku błędu lub wartość dodatnia identyfikująca zestaw w kolejnych operacjach na nim.
Ponadto w operacji semget występuje parametr lsem, który ustala liczbę semaforów w zestawie. Warto zauważyć, że parametry lsem oraz prawa dostępu ustanawiane w parametrze flagi mają znaczenie jedynie przy faktycznym tworzeniu zestawu. Jeśli skutkiem operacji jest uzystkanie dostępu do już istniejącego zestawu, to wartości te są ignorowane.