SYSTEMY OPERACYJNE KOMUNIKACJA MIĘDZYPROCESOWA
KLASYCZNE PROBLEMY KOMUNIKACJI MIĘDZYPROCESOWEJ problem ucztujących filozofów – symulacja procesów, które współzawodniczą w dostępie do ograniczonych zasobów, np.urządzeń we-wy problem pisarzy i czytelników – zagadnienie zapewnienia prawidłowego dostępu do bazy danych (w trybie odczytu i zapisu) problem śpiącego fryzjera – zagadnienie zsynchronizowanej obsługi procesów przez procesor
KLASYCZNE PROBLEMY KOMUNIKACJI MIĘDZYPROCESOWEJ Problem ucztujących filozofów: 5 filozofów dzieli wspólny okrągły stół, wokół stołu jest 5 krzeseł. Na środku stołu jest miska ryżu, a naokoło leży 5 pałeczek. Kiedy filozof myśli, nie kontaktuje się ze swoimi kolegami. Kiedy odczuwa głód, próbuje ująć w dłonie dwie pałeczki leżące najbliżej niego (po lewej i po prawej stronie). Jednorazowo może podnieść tylko jedną pałeczkę. Kiedy głodny filozof zdobędzie 2 pałeczki, rozpoczyna jedzenie. Po posiłku, odkłada pałeczki na stół i zatapia się ponownie w rozmyślaniach.
KLASYCZNE PROBLEMY KOMUNIKACJI MIĘDZYPROCESOWEJ Problem czytelników i pisarzy: Obiekt danych podlega dzieleniu między kilka procesów współbieżnych. Niektóre z nich mogą tylko czytać zawartość obiektu dzielonego (czytelnicy), inne procesy mogą uaktualniać (czytać i zapisywać) obiekt (pisarze). Jednoczesny dostęp do obiektu przez 2 czytelników nie powoduje żadnych szkodliwych skutków. Natomiast gdyby pisarz i jakiś inny proces (czytelnik lub pisarz) miały jednoczesny dostęp do dzielonego obiektu, to może dojść do konfliktu.
KLASYCZNE PROBLEMY KOMUNIKACJI MIĘDZYPROCESOWEJ Problem śpiącego fryzjera: W poczekalni zakładu fryzjerskiego jest n krzeseł a w salonie – jeden fotel. Jeśli brakuje klientów, to fryzjer zasypia. Jeżeli w poczekalni nie ma wolnych krzeseł, to nowy klient odchodzi. Gdy fryzjer jest zajęty, ale są wolne miejsca (krzesła), wówczas klient siada na jednym z nich. Jeśli fryzjer śpi, to klient go budzi.
KOMUNIKACJA MIĘDZYPROCESOWA Sygnały – krótkie wiadomości, które można wysyłać do procesu lub grupy procesów: zostały wprowadzone w celu ułatwienia komunikacji międzyprocesowej, są programowymi odpowiednikami przerwań sprzętowych; niektóre przerwania sprzętowe (np. nieprawidłowy adres pamięci) są zamieniane na odpowiednie sygnały, są dostępne dla procesów w trybie użytkownika, informują proces o wystąpieniu określonego zdarzenia, zmuszają proces do wykonania zawartej w kodzie procesu funkcji obsługującej sygnał.
KOMUNIKACJA MIĘDZYPROCESOWA Działania podejmowane przez proces po otrzymaniu sygnału: 1. zignorowanie sygnału; 2. podejmowanie działań domyślnych: a) przerwanie - proces jest niszczony, b) zrzut - tworzony jest plik core i proces jest niszczony, c) ignorowanie - sygnał jest pomijany, d) zatrzymanie - proces jest zatrzymywany (przechodzi w stan TASK_STOPPED), e) kontynuacja - proces ze stanu TASK_STOPPED przechodzi w stan TASK_RUNNING; 3. wyłapanie sygnału i obsłużenie go przez procedury obsługi sygnału.
KOMUNIKACJA MIĘDZYPROCESOWA Schematy komunikacji: - pamięć dzielona (shared memory); - system komunikatów (message passing). System komunikatów – umożliwia wzajemną komunikację bez zmiennych dzielonych; stosowany w sieciach komputerowych i systemach rozproszonych. Wykorzystywane 2 funkcje systemowe: send (destination, message)- wysłanie komunikatu, receive (destination, message)- odbiór komunikatu,
KOMUNIKACJA MIĘDZYPROCESOWA Aby była możliwa komunikacja pomiędzy procesami, musi istnieć łącze komunikacyjne. Problemy z implementacją łącza: Jak ustanawiać łącze? Czy łącze może być powiązane z więcej niż dwoma procesami? Ile może być łączy między parą procesów? Jaka jest pojemność łącza? Czy łącze ma jakiś obszar buforowy? Jaki jest rozmiar komunikatów? Czy łącze akceptuje komunikaty zmiennej, czy stałej długości? Czy łącze jest jednokierunkowe, czy dwukierunkowe (przepływ komunikatów w jedną stronę czy w obie)?
KOMUNIKACJA MIĘDZYPROCESOWA Metody logicznej implementacji łącza: komunikacja bezpośrednia lub pośrednia; komunikacja symetryczna lub asymetryczna; buforowanie automatyczne lub jawne; wysyłanie na zasadzie tworzenia kopii; komunikaty stałej lub zmiennej długości;
KOMUNIKACJA MIĘDZYPROCESOWA Komunikacja bezpośrednia: jawne określenie nadawcy i odbiorcy*), łącze jest ustanawiane automatycznie, procesy muszą znać swoje identyfikatory, pomiędzy parą procesów istnieje jedno łącze, łącze jest dwukierunkowe. *) Asymetryczne adresowanie – nie jest określany nadawca (zamiast source -> any).
KOMUNIKACJA MIĘDZYPROCESOWA Komunikacja pośrednia: Komunikaty są nadawane i odbierane przez skrzynki pocztowe – obiekty o jednoznacznej identyfikacji. Procesy muszą mieć wspólną skrzynkę pocztową. Operacje: nadaj (A, komunikat) – nadaj komunikat do skrzynki A; odbierz (A, komunikat) – odbierz komunikat ze skrzynki A; Właściwości łącza: - łącze między dwoma procesami jest ustanawiane tylko wówczas, gdy dzielą one skrzynkę pocztową; - łącze może być związane z więcej niż dwoma procesami; - każda para komunikujących się procesów może mieć klika różnych łączy, z których każde odpowiada jakiejś skrzynce pocztowej; - łącze może być jednokierunkowe lub dwukierunkowe.
KOMUNIKACJA MIĘDZYPROCESOWA Własność skrzynki: Skrzynka jest własnością procesu. Właściciel skrzynki może tylko odbierać komunikaty, a użytkownik może tylko nadawać. Proces, na którego zamówienie tworzona jest nowa skrzynka, staje się jej właścicielem na zasadzie domyślności. Gdy właściciel skrzynki kończy działanie to skrzynka znika. 2) Skrzynka nie jest własnością systemu. Skrzynka istnieje bez inicjatywy procesu, jest niezależna i nie przydziela się jej do żadnego konkretnego procesu. System operacyjny dostarcza mechanizmów pozwalających na tworzenie nowej skrzynki, nadawanie i odbieranie komunikatów za pośrednictwem skrzynki, likwidowanie skrzynki.
KOMUNIKACJA MIĘDZYPROCESOWA Właściwości skrzynki: Skrzynki pocztowe umożliwiają komunikację pośrednią z ograniczoną pojemnością bufora (liczbą komunikatów). Liczba komunikatów musi być wyspecyfikowana w momencie tworzenia skrzynki. Przy wykorzystywaniu skrzynek parametry adresowe w funkcjach send i receive są adresami skrzynek a nie procesów. Jeśli proces próbuje wysłać komunikat do pełnej skrzynki, to zostaje zawieszony aż do momentu, kiedy jakiś proces usunie komunikat ze skrzynki.
KOMUNIKACJA MIĘDZYPROCESOWA Buforowanie: Łącze ma pewną pojemność określającą liczbę komunikatów, które mogą w nim czasowo przebywać. Cecha ta może być postrzegana jako kolejka komunikatów przypisanych do łącza. Trzy podstawowe metody implementacji takiej kolejki: Pojemność zerowa. Jeśli zostanie wykonana funkcja send to proces wysyłający jest blokowany aż do chwili wykonania funkcji receive; w tym czasie komunikat może być skopiowany bezpośrednio do procesu adresata bez pośredniego buforowania. Jeśli receive zostanie wykonana jako pierwsza, to proces adresata jest blokowany aż do wykonania send. Procesy wymuszają wzajemną współpracę w tym mechanizmie, jest to rozwiązanie mniej elastyczne lecz nie występuje tu problem buforowania. Ta strategia nosi nazwę rendez-vous.
KOMUNIKACJA MIĘDZYPROCESOWA Pojemność ograniczona. Kolejka ma skończoną długość n. Jeśli w chwili nadania nowego komunikatu kolejka nie jest pełna, to nowy komunikat będzie w niej umieszczony (przez skopiowanie komunikatu lub przez zapamiętanie wskaźnika do niego). W przeciwnym razie nadawca będzie musiał być opóźniany, aż zwolni się miejsce w kolejce. Pojemność nieograniczona. Kolejka ma potencjalnie nieskończoną długość. Nadawca nigdy nie jest opóźniany.
KOMUNIKACJA MIĘDZYPROCESOWA Problem producenta - konsumenta z wykorzystaniem mechanizmu komunikatów. Zakładamy, że wszystkie komunikaty mają ten sam rozmiar a komunikaty wysyłane, ale jeszcze nie odebrane, są buforowane przez system operacyjny. Zakłada się wykorzystanie n komunikatów przy n szczelinach w pamięci buforowej. W tym rozwiązaniu konsument rozpoczyna pracę przez wysłanie n pustych komunikatów do producenta. Producent otrzymuje zestaw pustych komunikatów. Pobiera pusty komunikat od konsumenta, buduje jakiś komunikat i wysyła go do konsumenta. Komunikat jest umieszczany w buforze. W ten sposób ogólna liczba komunikatów pozostaje stała w czasie i mogą być one przechowy-wane w określonym, wydzielonym obszarze pamięci.
KOMUNIKACJA MIĘDZYPROCESOWA Problem producenta - konsumenta z wykorzystaniem mechanizmu komunikatów (cd) Konsument odbiera komunikat wysłany do niego przez producenta, odczytuje jego zawartość i wysyła do producenta pusty komunikat a następnie wykorzystuje zawartość otrzymanego komunikatu. Jeśli producent pracuje szybciej niż konsument, to wszystkie komunikaty zostaną zapełnione i będą czekać na konsumenta a producent zostanie zawieszony w oczekiwaniu na przysłanie pustych komunikatów (i odwrotnie). Możliwych jest wiele konkretnych rozwiązań tego mechanizmu np. każdy proces może mieć unikalny adres wykorzystywany w wysyłaniu komunikatu.
KOMUNIKACJA MIĘDZYPROCESOWA Synchroniczna metoda komunikacji zdalne wywołania procedur (Remote Procedure Call - RPC). Wywołanie procedury (funkcji) w systemie jednoprocesorowym działa tak samo jak system komunikatów, w którym nadawca ulega zablokowaniu do czasu otrzymania odpowiedzi. W systemie RPC komunikat przybiera postać zdalnego wywołania procedury, a odpowiedź zawiera wynik obliczeń wywołanej procedury. Komunikaty na pojedynczych maszynach są implementowane najczęściej w pamięci współdzielonej (wada: awaria maszyny awaria systemu). W systemie rozproszonym łączem jest sieć i załamanie jednej maszyny nie załamuje całego systemu.
KOMUNIKACJA MIĘDZYPROCESOWA Problemy wynikające z zastosowania sieci. Utrata komunikatu w sieci: rozwiązanie - wysyłanie potwierdzenia przez odbiorcę; jeśli w określonym przedziale czasu nadawca nie otrzyma potwierdzenia to komunikat zostanie wysłany ponownie (retransmisja). Identyfikacja i autoryzacja procesów w systemie rozproszonym: stosuje się identyfikatory zawierające m.in. identyfikator procesu, nazwę maszyny, nazwę domeny. Autoryzacja - procesy mogą wysyłać i otrzymywać komunikaty z tego samego poziomu lub poziomu bezpośrednio niższego (Unix), np. procesy użytkowników nie mogą się bezpośrednio komunikować z procesami we/wy.
KOMUNIKACJA MIĘDZYPROCESOWA Model klient-serwer. Siedmiowarstwowy model ISO/OSI jako podstawa oprogramowania zarządzającego siecią. Zadanie poszczególnych warstw: konwersja danych, sprawdzenie poprawności transmisji, sterowanie retransmisją, itp. Taki siedmiowarstwowy model powiększa jednak nakłady czasowe (wysyłany komunikat musi być za każdym razem przetworzony przez siedem warstw, z których każda dodaje swój nagłówek; przy odbieraniu komunikatu każda z warstw sprawdza i odłącza swój nagłówek). Na te operacje potrzeba czasu. W sieciach rozległych, gdzie liczba przesyłanych danych jest duża, nie stanowi to problemu nawet przy takich manipulacjach nagłówkami sieć może pracować z maksymalną szybkością. Natomiast w sieciach lokalnych ograniczenia czasowe, wynikające z obsługi siedmiowarstwowego modelu, mają charakter zasadniczy. Przetwarzanie nagłówków powoduje spadek efektywności sieci. W większości sieci lokalnych nie używa się protokołów warstwowych, a jeśli już, to z liczbą warstw ograniczoną do minimum. W tych środowiskach stosuje się model klient-serwer.
KOMUNIKACJA MIĘDZYPROCESOWA Model klient-serwer. Główna idea tego modelu – wydzielenie w ramach systemu operacyjnego grupy procesów (nazywanych serwerami), które oferują usługi procesom użytkowym (nazywanych klientami). Na danej maszynie może pracować kilka procesów serwerów, klientów bądź ich kombinacja. Aby zlikwidować narzut czasowy związany z protokołem siedmiowarstwowym, model klient-serwer bazuje na prostym protokole pytanie - odpowiedź. Pytanie jest zawarte w komunikacie wysyłanym do serwera, a odpowiedź - w komunikacie wysyłanym do klienta. Rozwiązanie proste duża jego efektywność. Najczęściej jest to protokół trzywarstwowy - najniższe warstwy z modelu siedmiowarstwowego: warstwy fizyczna i warstwa łącza (sprzęt) zajmują się przesyłaniem danych; warstwa trzecia to w zasadzie oprogramowanie.