Programowanie współbieżne i rozproszone/PWR Ćwiczenia sem

Z Studia Informatyczne
Wersja z dnia 09:02, 17 paź 2006 autorstwa Mengel (dyskusja | edycje)
(różn.) ← poprzednia wersja | przejdź do aktualnej wersji (różn.) | następna wersja → (różn.)
Przejdź do nawigacjiPrzejdź do wyszukiwania

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.