next up previous contents
Next: Wewnętrzne struktury jądra Up: Semafory Previous: Semafory   Contents

Podstawy

Semafory można opisać jako liczniki używane do kontroli dostępu do dzielonych zasobów przez różne procesy. Najczęściej używa się ich do blokowania dostępu do zasobu podczas gdy jakiś proces przeprowadza na nim operacje. Uważa się, iż najtrudniejszymi do zrozumienia wśród obiektów IPC są semafory. W celu pełnego zrozumienia ich działania zaczniemy od krótkiego opisu, dopiero po tym przejdziemy do wywołań systemowych i sposobu użycia.

Semafor - urządzenia sygnalizacyjne przy torze kolejowym, podające określone sygnały, zapewniajacę prawidłowość w ruchu pociągów. To samo możemy powiedzieć na temat prostego semafora. Jeżeli jest on włączony ( ramiona w górze ) zasób jest dostępny ( możemy przejechać ). Gdy semafor jest wyłączony ( ramiona w dole ) zasób jest niedostępny ( musimy czekać ).

Ten prosty przykład ukazyje jedynie podstawy, należy sobie zdać sprawę, iż semafory zaimplementowane są jako układy. Oczywiście układ może zawierać tylko jeden semafor, tak jak w naszym przykładzie.

Możemy również podejść do zagadnienia semaforów w inny sposób - jako liczniki zasobów. Wyobrażmy sobie inny rzeczywisty scenariusz. Wyobraż sobie zarządcę drukowania (spooler) obsługującego wiele drukarek, każda drukarka obsługuje wiele żądań wydruku. Nasz hipotetyczny zarządca drukowania będzie obsługiwał układ semaforów w celu monitorowania dostępu do każdej z drukarek.

Załużmy, że mamy 5 dostępnych drukarek. Nasz zarządca tworzy zestaw semaforów zawierający 5 semaforów, po jednym dla drukarki. Każda z drukarek jest zdolna do fizycznego drukowania jednego zadania, każdy z semaforów zainicjujemy wartością 1 oznaczającą, że drukarka jest podłączona i gotowa na żądanie.

Jaś wysyła żądanie wydruku do zarządcy. Zarządca spogląda na zestaw semaforów i wyszukuje pierwszego semafora, który równa się 1. Przed wysłaniem żądania do drukarki zarządca zmniejsza o jeden używany semafor. Teraz wartością semaforu jest 0. W świecie Systemu V semafor ustawiony na 0 oznacza 100% użycia. W naszym przykładzie żadne inne żądanie nie może zostać przesłane do tej drukarki aż do czasu zmiany wartości.

Kiedy zadanie Jasia zostanie wykonane zarządca zinkrementuje wartość semaforu odpowiadającego za użytą drukarkę. Wartościa semaforu staje się 1 - drukarka jest dostępna. Kiedy wszystkie semafory są ustawione na 1 oznacza to brak dostępnych drukarek.

Nie daj się zwieść inicjalizacji semaforu jedynką. Kiedy używamy semaforów jako liczników zasobów możemy je inicjować każdą dodatnią wartością . Gdyby każda z drukarek potrafiła obsłużyć 10 zadań wydruku jednocześnie, ustawilibyśmy semafory wartością 10. W następnym rozdziale odkryjesz powiązania semaforów z segmentami dzielonej pamięci, które będą działać jako wartownicy zapobiegający wielu zapisom jednocześnie.

Zanim sięgniemy do wywołań systemowych przyjżyjmy się strukturom wykorzystywanym podczas operowania semaforami.


next up previous contents
Next: Wewnętrzne struktury jądra Up: Semafory Previous: Semafory   Contents

2000-03-01


Poltronic