1 SYSTEMY OPERACYJNE KOMUNIKACJA MIĘDZYPROCESOWA
2 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
3 KLASYCZNE PROBLEMY KOMUNIKACJI MIĘDZYPROCESOWEJProblem 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.
4 KLASYCZNE PROBLEMY KOMUNIKACJI MIĘDZYPROCESOWEJProblem 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.
5 KLASYCZNE PROBLEMY KOMUNIKACJI MIĘDZYPROCESOWEJProblem ś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.
6 KOMUNIKACJA MIĘDZYPROCESOWASygnał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ł.
7 KOMUNIKACJA MIĘDZYPROCESOWADział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.
8 KOMUNIKACJA MIĘDZYPROCESOWASchematy 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,
9 KOMUNIKACJA MIĘDZYPROCESOWAAby 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)?
10 KOMUNIKACJA MIĘDZYPROCESOWAMetody 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;
11 KOMUNIKACJA MIĘDZYPROCESOWAKomunikacja 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).
12 KOMUNIKACJA MIĘDZYPROCESOWAKomunikacja 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.
13 KOMUNIKACJA MIĘDZYPROCESOWAWł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.
14 KOMUNIKACJA MIĘDZYPROCESOWAWł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.
15 KOMUNIKACJA MIĘDZYPROCESOWABuforowanie: Łą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.
16 KOMUNIKACJA MIĘDZYPROCESOWAPojemność 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.
17 KOMUNIKACJA MIĘDZYPROCESOWAProblem 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.
18 KOMUNIKACJA MIĘDZYPROCESOWAProblem 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.
19 KOMUNIKACJA MIĘDZYPROCESOWASynchroniczna 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.
20 KOMUNIKACJA MIĘDZYPROCESOWAProblemy 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.
21 KOMUNIKACJA MIĘDZYPROCESOWAModel 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.
22 KOMUNIKACJA MIĘDZYPROCESOWAModel 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.