Systemy Operacyjne - synchronizacja i komunikacja procesów
Transkrypt
Systemy Operacyjne - synchronizacja i komunikacja procesów
Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Systemy Operacyjne - synchronizacja i komunikacja procesów Arkadiusz Chrobot Zakład Informatyki, Politechnika Świętokrzyska w Kielcach Kielce, 15 listopada 2016 Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Plan wykładu 1 Synchronizacja 1 2 3 4 5 2 Środki synchronizacji 1 2 3 4 3 2 3 5 Niepodzielne rozkazy Semafory Regiony krytyczne Monitory Klasyczne problemy synchronizacji 1 4 Sytuacje hazardowe Problem sekcji krytycznej Warunki poprawności rozwiązania Rozwiązanie programowe dla dwóch procesów Rozwiązania programowe dla wielu procesów Problem ograniczonego buforowania Problem czytelników i pisarzy Problem ucztujących filozofów Sieci Petriego Komunikacja międzyprocesowa 1 2 3 Komunikacja pośrednia i bezpośrednia Buforowanie Obsługa wyjątków Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Plan wykładu 1 Synchronizacja 1 2 3 4 5 2 Środki synchronizacji 1 2 3 4 3 2 3 5 Niepodzielne rozkazy Semafory Regiony krytyczne Monitory Klasyczne problemy synchronizacji 1 4 Sytuacje hazardowe Problem sekcji krytycznej Warunki poprawności rozwiązania Rozwiązanie programowe dla dwóch procesów Rozwiązania programowe dla wielu procesów Problem ograniczonego buforowania Problem czytelników i pisarzy Problem ucztujących filozofów Sieci Petriego Komunikacja międzyprocesowa 1 2 3 Komunikacja pośrednia i bezpośrednia Buforowanie Obsługa wyjątków Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Plan wykładu 1 Synchronizacja 1 2 3 4 5 2 Środki synchronizacji 1 2 3 4 3 2 3 5 Niepodzielne rozkazy Semafory Regiony krytyczne Monitory Klasyczne problemy synchronizacji 1 4 Sytuacje hazardowe Problem sekcji krytycznej Warunki poprawności rozwiązania Rozwiązanie programowe dla dwóch procesów Rozwiązania programowe dla wielu procesów Problem ograniczonego buforowania Problem czytelników i pisarzy Problem ucztujących filozofów Sieci Petriego Komunikacja międzyprocesowa 1 2 3 Komunikacja pośrednia i bezpośrednia Buforowanie Obsługa wyjątków Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Plan wykładu 1 Synchronizacja 1 2 3 4 5 2 Środki synchronizacji 1 2 3 4 3 2 3 5 Niepodzielne rozkazy Semafory Regiony krytyczne Monitory Klasyczne problemy synchronizacji 1 4 Sytuacje hazardowe Problem sekcji krytycznej Warunki poprawności rozwiązania Rozwiązanie programowe dla dwóch procesów Rozwiązania programowe dla wielu procesów Problem ograniczonego buforowania Problem czytelników i pisarzy Problem ucztujących filozofów Sieci Petriego Komunikacja międzyprocesowa 1 2 3 Komunikacja pośrednia i bezpośrednia Buforowanie Obsługa wyjątków Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Plan wykładu 1 Synchronizacja 1 2 3 4 5 2 Środki synchronizacji 1 2 3 4 3 2 3 5 Niepodzielne rozkazy Semafory Regiony krytyczne Monitory Klasyczne problemy synchronizacji 1 4 Sytuacje hazardowe Problem sekcji krytycznej Warunki poprawności rozwiązania Rozwiązanie programowe dla dwóch procesów Rozwiązania programowe dla wielu procesów Problem ograniczonego buforowania Problem czytelników i pisarzy Problem ucztujących filozofów Sieci Petriego Komunikacja międzyprocesowa 1 2 3 Komunikacja pośrednia i bezpośrednia Buforowanie Obsługa wyjątków Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Plan wykładu 1 Synchronizacja 1 2 3 4 5 2 Środki synchronizacji 1 2 3 4 3 2 3 5 Niepodzielne rozkazy Semafory Regiony krytyczne Monitory Klasyczne problemy synchronizacji 1 4 Sytuacje hazardowe Problem sekcji krytycznej Warunki poprawności rozwiązania Rozwiązanie programowe dla dwóch procesów Rozwiązania programowe dla wielu procesów Problem ograniczonego buforowania Problem czytelników i pisarzy Problem ucztujących filozofów Sieci Petriego Komunikacja międzyprocesowa 1 2 3 Komunikacja pośrednia i bezpośrednia Buforowanie Obsługa wyjątków Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Plan wykładu 1 Synchronizacja 1 2 3 4 5 2 Środki synchronizacji 1 2 3 4 3 2 3 5 Niepodzielne rozkazy Semafory Regiony krytyczne Monitory Klasyczne problemy synchronizacji 1 4 Sytuacje hazardowe Problem sekcji krytycznej Warunki poprawności rozwiązania Rozwiązanie programowe dla dwóch procesów Rozwiązania programowe dla wielu procesów Problem ograniczonego buforowania Problem czytelników i pisarzy Problem ucztujących filozofów Sieci Petriego Komunikacja międzyprocesowa 1 2 3 Komunikacja pośrednia i bezpośrednia Buforowanie Obsługa wyjątków Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Plan wykładu 1 Synchronizacja 1 2 3 4 5 2 Środki synchronizacji 1 2 3 4 3 2 3 5 Niepodzielne rozkazy Semafory Regiony krytyczne Monitory Klasyczne problemy synchronizacji 1 4 Sytuacje hazardowe Problem sekcji krytycznej Warunki poprawności rozwiązania Rozwiązanie programowe dla dwóch procesów Rozwiązania programowe dla wielu procesów Problem ograniczonego buforowania Problem czytelników i pisarzy Problem ucztujących filozofów Sieci Petriego Komunikacja międzyprocesowa 1 2 3 Komunikacja pośrednia i bezpośrednia Buforowanie Obsługa wyjątków Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Plan wykładu 1 Synchronizacja 1 2 3 4 5 2 Środki synchronizacji 1 2 3 4 3 2 3 5 Niepodzielne rozkazy Semafory Regiony krytyczne Monitory Klasyczne problemy synchronizacji 1 4 Sytuacje hazardowe Problem sekcji krytycznej Warunki poprawności rozwiązania Rozwiązanie programowe dla dwóch procesów Rozwiązania programowe dla wielu procesów Problem ograniczonego buforowania Problem czytelników i pisarzy Problem ucztujących filozofów Sieci Petriego Komunikacja międzyprocesowa 1 2 3 Komunikacja pośrednia i bezpośrednia Buforowanie Obsługa wyjątków Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Plan wykładu 1 Synchronizacja 1 2 3 4 5 2 Środki synchronizacji 1 2 3 4 3 2 3 5 Niepodzielne rozkazy Semafory Regiony krytyczne Monitory Klasyczne problemy synchronizacji 1 4 Sytuacje hazardowe Problem sekcji krytycznej Warunki poprawności rozwiązania Rozwiązanie programowe dla dwóch procesów Rozwiązania programowe dla wielu procesów Problem ograniczonego buforowania Problem czytelników i pisarzy Problem ucztujących filozofów Sieci Petriego Komunikacja międzyprocesowa 1 2 3 Komunikacja pośrednia i bezpośrednia Buforowanie Obsługa wyjątków Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Plan wykładu 1 Synchronizacja 1 2 3 4 5 2 Środki synchronizacji 1 2 3 4 3 2 3 5 Niepodzielne rozkazy Semafory Regiony krytyczne Monitory Klasyczne problemy synchronizacji 1 4 Sytuacje hazardowe Problem sekcji krytycznej Warunki poprawności rozwiązania Rozwiązanie programowe dla dwóch procesów Rozwiązania programowe dla wielu procesów Problem ograniczonego buforowania Problem czytelników i pisarzy Problem ucztujących filozofów Sieci Petriego Komunikacja międzyprocesowa 1 2 3 Komunikacja pośrednia i bezpośrednia Buforowanie Obsługa wyjątków Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Plan wykładu 1 Synchronizacja 1 2 3 4 5 2 Środki synchronizacji 1 2 3 4 3 2 3 5 Niepodzielne rozkazy Semafory Regiony krytyczne Monitory Klasyczne problemy synchronizacji 1 4 Sytuacje hazardowe Problem sekcji krytycznej Warunki poprawności rozwiązania Rozwiązanie programowe dla dwóch procesów Rozwiązania programowe dla wielu procesów Problem ograniczonego buforowania Problem czytelników i pisarzy Problem ucztujących filozofów Sieci Petriego Komunikacja międzyprocesowa 1 2 3 Komunikacja pośrednia i bezpośrednia Buforowanie Obsługa wyjątków Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Plan wykładu 1 Synchronizacja 1 2 3 4 5 2 Środki synchronizacji 1 2 3 4 3 2 3 5 Niepodzielne rozkazy Semafory Regiony krytyczne Monitory Klasyczne problemy synchronizacji 1 4 Sytuacje hazardowe Problem sekcji krytycznej Warunki poprawności rozwiązania Rozwiązanie programowe dla dwóch procesów Rozwiązania programowe dla wielu procesów Problem ograniczonego buforowania Problem czytelników i pisarzy Problem ucztujących filozofów Sieci Petriego Komunikacja międzyprocesowa 1 2 3 Komunikacja pośrednia i bezpośrednia Buforowanie Obsługa wyjątków Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Plan wykładu 1 Synchronizacja 1 2 3 4 5 2 Środki synchronizacji 1 2 3 4 3 2 3 5 Niepodzielne rozkazy Semafory Regiony krytyczne Monitory Klasyczne problemy synchronizacji 1 4 Sytuacje hazardowe Problem sekcji krytycznej Warunki poprawności rozwiązania Rozwiązanie programowe dla dwóch procesów Rozwiązania programowe dla wielu procesów Problem ograniczonego buforowania Problem czytelników i pisarzy Problem ucztujących filozofów Sieci Petriego Komunikacja międzyprocesowa 1 2 3 Komunikacja pośrednia i bezpośrednia Buforowanie Obsługa wyjątków Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Plan wykładu 1 Synchronizacja 1 2 3 4 5 2 Środki synchronizacji 1 2 3 4 3 2 3 5 Niepodzielne rozkazy Semafory Regiony krytyczne Monitory Klasyczne problemy synchronizacji 1 4 Sytuacje hazardowe Problem sekcji krytycznej Warunki poprawności rozwiązania Rozwiązanie programowe dla dwóch procesów Rozwiązania programowe dla wielu procesów Problem ograniczonego buforowania Problem czytelników i pisarzy Problem ucztujących filozofów Sieci Petriego Komunikacja międzyprocesowa 1 2 3 Komunikacja pośrednia i bezpośrednia Buforowanie Obsługa wyjątków Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Plan wykładu 1 Synchronizacja 1 2 3 4 5 2 Środki synchronizacji 1 2 3 4 3 2 3 5 Niepodzielne rozkazy Semafory Regiony krytyczne Monitory Klasyczne problemy synchronizacji 1 4 Sytuacje hazardowe Problem sekcji krytycznej Warunki poprawności rozwiązania Rozwiązanie programowe dla dwóch procesów Rozwiązania programowe dla wielu procesów Problem ograniczonego buforowania Problem czytelników i pisarzy Problem ucztujących filozofów Sieci Petriego Komunikacja międzyprocesowa 1 2 3 Komunikacja pośrednia i bezpośrednia Buforowanie Obsługa wyjątków Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Plan wykładu 1 Synchronizacja 1 2 3 4 5 2 Środki synchronizacji 1 2 3 4 3 2 3 5 Niepodzielne rozkazy Semafory Regiony krytyczne Monitory Klasyczne problemy synchronizacji 1 4 Sytuacje hazardowe Problem sekcji krytycznej Warunki poprawności rozwiązania Rozwiązanie programowe dla dwóch procesów Rozwiązania programowe dla wielu procesów Problem ograniczonego buforowania Problem czytelników i pisarzy Problem ucztujących filozofów Sieci Petriego Komunikacja międzyprocesowa 1 2 3 Komunikacja pośrednia i bezpośrednia Buforowanie Obsługa wyjątków Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Plan wykładu 1 Synchronizacja 1 2 3 4 5 2 Środki synchronizacji 1 2 3 4 3 2 3 5 Niepodzielne rozkazy Semafory Regiony krytyczne Monitory Klasyczne problemy synchronizacji 1 4 Sytuacje hazardowe Problem sekcji krytycznej Warunki poprawności rozwiązania Rozwiązanie programowe dla dwóch procesów Rozwiązania programowe dla wielu procesów Problem ograniczonego buforowania Problem czytelników i pisarzy Problem ucztujących filozofów Sieci Petriego Komunikacja międzyprocesowa 1 2 3 Komunikacja pośrednia i bezpośrednia Buforowanie Obsługa wyjątków Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Plan wykładu 1 Synchronizacja 1 2 3 4 5 2 Środki synchronizacji 1 2 3 4 3 2 3 5 Niepodzielne rozkazy Semafory Regiony krytyczne Monitory Klasyczne problemy synchronizacji 1 4 Sytuacje hazardowe Problem sekcji krytycznej Warunki poprawności rozwiązania Rozwiązanie programowe dla dwóch procesów Rozwiązania programowe dla wielu procesów Problem ograniczonego buforowania Problem czytelników i pisarzy Problem ucztujących filozofów Sieci Petriego Komunikacja międzyprocesowa 1 2 3 Komunikacja pośrednia i bezpośrednia Buforowanie Obsługa wyjątków Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Plan wykładu 1 Synchronizacja 1 2 3 4 5 2 Środki synchronizacji 1 2 3 4 3 2 3 5 Niepodzielne rozkazy Semafory Regiony krytyczne Monitory Klasyczne problemy synchronizacji 1 4 Sytuacje hazardowe Problem sekcji krytycznej Warunki poprawności rozwiązania Rozwiązanie programowe dla dwóch procesów Rozwiązania programowe dla wielu procesów Problem ograniczonego buforowania Problem czytelników i pisarzy Problem ucztujących filozofów Sieci Petriego Komunikacja międzyprocesowa 1 2 3 Komunikacja pośrednia i bezpośrednia Buforowanie Obsługa wyjątków Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Plan wykładu 1 Synchronizacja 1 2 3 4 5 2 Środki synchronizacji 1 2 3 4 3 2 3 5 Niepodzielne rozkazy Semafory Regiony krytyczne Monitory Klasyczne problemy synchronizacji 1 4 Sytuacje hazardowe Problem sekcji krytycznej Warunki poprawności rozwiązania Rozwiązanie programowe dla dwóch procesów Rozwiązania programowe dla wielu procesów Problem ograniczonego buforowania Problem czytelników i pisarzy Problem ucztujących filozofów Sieci Petriego Komunikacja międzyprocesowa 1 2 3 Komunikacja pośrednia i bezpośrednia Buforowanie Obsługa wyjątków Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Sytuacje hazardowe Problem sekcji krytycznej Warunki poprawności rozwiązania Rozwiązanie programowe dla dwóch procesów Rozwiązania programowe dla wielu procesów Wprowadzenie W systemach wielozadaniowych, podczas realizacji przez ustaloną liczbę procesów dostępu współbieżnego do dzielonych zasobów może dojść do sytuacji hazardowych, nazywanych również wyścigiem (ang. race condition), które prowadzą do błędów przetwarzania. Zjawiska te pojawiają się, kiedy następuje przeplot operacji modyfikacji lub operacji modyfikacji i odczytu stanu współdzielonego zasobu, przy czym operacje te pochodzą od różnych procesów. Jeśli dostęp do zasobu ogranicza się wyłącznie do odczytu, to jest dostępem zawsze bezpiecznym, nawet jeśli dochodzi od przeplotu operacji. Sytuacje hazardowe występują zarówno w przypadku procesów, jak i wątków (choć w dalszej części wykładu będziemy posługiwać się głównie pojęciem procesu). Obojętnym jest również, czy system komputerowy, w którym są wykonywane procesy jest wyposażony w jeden, czy większą liczbę procesorów. Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Sytuacje hazardowe Problem sekcji krytycznej Warunki poprawności rozwiązania Rozwiązanie programowe dla dwóch procesów Rozwiązania programowe dla wielu procesów Przykład Rozważmy dwa procesy, które chcą zmodyfikować wartość współdzielonej zmiennej, przy czym pierwszy chce tę wartość zwiększyć o jeden, a drugi zmniejszyć o jeden. Przyjmijmy, że wartość początkowa zmiennej wynosi 5. Zakładamy, że pojedynczy proces, aby zmodyfikować wartość zmiennej musi ją najpierw pobrać z pamięci operacyjnej, zapisać w rejestrze 1 , wykonać właściwą operację, a następnie zapisać wynikową wartość do pamięci. Procesy wykonujące wspomniane operacje mogą utracić procesor w każdej chwili, w wyniku zadziałania mechanizmu wywłaszczającego. Następne plansze prezentują dwa z możliwych scenariuszy wykonania wcześniej opisanych modyfikacji wartości wspólnej zmiennej (kropki oznaczają, że proces jest w danej chwili nieczynny). 1 Proszę zauważyć, że ze względu na to iż w wyniku przełączenia kontekstu stany rejestrów są zapamiętywane, to procesy mogą posługiwać się tym samym rejestrem Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Sytuacje hazardowe Problem sekcji krytycznej Warunki poprawności rozwiązania Rozwiązanie programowe dla dwóch procesów Rozwiązania programowe dla wielu procesów Scenariusz pierwszy Proces drugi Proces pierwszy 1 Odczytaj wartość z pamięci (M=5) i umieść ją w rejestrze R1. (R1=5) 2 Zwiększ wartość rejestru R1 o jeden. (R1=6) 3 ... 4 ... 5 Zapisz zawartość rejestru R1 do pamięci. (M=6) 6 ... 1 ... 2 ... 3 Odczytaj wartość z pamięci (M=5) i umieść ją w rejestrze R1. (R1=5) 4 Zmniejsz zawartość rejestru R1 o jeden. (R1=4) 5 ... 6 Zapisz zawartość rejestru R1 do pamięci. (M=4) Wynik Wartość wynikowa wynosi 4 (jako ostatni swój wynik do pamięci zapisał proces drugi). Tymczasem prawidłowym wynikiem jest 5. Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Sytuacje hazardowe Problem sekcji krytycznej Warunki poprawności rozwiązania Rozwiązanie programowe dla dwóch procesów Rozwiązania programowe dla wielu procesów Scenariusz pierwszy Proces drugi Proces pierwszy 1 Odczytaj wartość z pamięci (M=5) i umieść ją w rejestrze R1. (R1=5) 2 Zwiększ wartość rejestru R1 o jeden. (R1=6) 3 ... 4 ... 5 Zapisz zawartość rejestru R1 do pamięci. (M=6) 6 ... 1 ... 2 ... 3 Odczytaj wartość z pamięci (M=5) i umieść ją w rejestrze R1. (R1=5) 4 Zmniejsz zawartość rejestru R1 o jeden. (R1=4) 5 ... 6 Zapisz zawartość rejestru R1 do pamięci. (M=4) Wynik Wartość wynikowa wynosi 4 (jako ostatni swój wynik do pamięci zapisał proces drugi). Tymczasem prawidłowym wynikiem jest 5. Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Sytuacje hazardowe Problem sekcji krytycznej Warunki poprawności rozwiązania Rozwiązanie programowe dla dwóch procesów Rozwiązania programowe dla wielu procesów Scenariusz pierwszy Proces drugi Proces pierwszy 1 Odczytaj wartość z pamięci (M=5) i umieść ją w rejestrze R1. (R1=5) 2 Zwiększ wartość rejestru R1 o jeden. (R1=6) 3 ... 4 ... 5 Zapisz zawartość rejestru R1 do pamięci. (M=6) 6 ... 1 ... 2 ... 3 Odczytaj wartość z pamięci (M=5) i umieść ją w rejestrze R1. (R1=5) 4 Zmniejsz zawartość rejestru R1 o jeden. (R1=4) 5 ... 6 Zapisz zawartość rejestru R1 do pamięci. (M=4) Wynik Wartość wynikowa wynosi 4 (jako ostatni swój wynik do pamięci zapisał proces drugi). Tymczasem prawidłowym wynikiem jest 5. Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Sytuacje hazardowe Problem sekcji krytycznej Warunki poprawności rozwiązania Rozwiązanie programowe dla dwóch procesów Rozwiązania programowe dla wielu procesów Scenariusz pierwszy Proces drugi Proces pierwszy 1 Odczytaj wartość z pamięci (M=5) i umieść ją w rejestrze R1. (R1=5) 2 Zwiększ wartość rejestru R1 o jeden. (R1=6) 3 ... 4 ... 5 Zapisz zawartość rejestru R1 do pamięci. (M=6) 6 ... 1 ... 2 ... 3 Odczytaj wartość z pamięci (M=5) i umieść ją w rejestrze R1. (R1=5) 4 Zmniejsz zawartość rejestru R1 o jeden. (R1=4) 5 ... 6 Zapisz zawartość rejestru R1 do pamięci. (M=4) Wynik Wartość wynikowa wynosi 4 (jako ostatni swój wynik do pamięci zapisał proces drugi). Tymczasem prawidłowym wynikiem jest 5. Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Sytuacje hazardowe Problem sekcji krytycznej Warunki poprawności rozwiązania Rozwiązanie programowe dla dwóch procesów Rozwiązania programowe dla wielu procesów Scenariusz pierwszy Proces drugi Proces pierwszy 1 Odczytaj wartość z pamięci (M=5) i umieść ją w rejestrze R1. (R1=5) 2 Zwiększ wartość rejestru R1 o jeden. (R1=6) 3 ... 4 ... 5 Zapisz zawartość rejestru R1 do pamięci. (M=6) 6 ... 1 ... 2 ... 3 Odczytaj wartość z pamięci (M=5) i umieść ją w rejestrze R1. (R1=5) 4 Zmniejsz zawartość rejestru R1 o jeden. (R1=4) 5 ... 6 Zapisz zawartość rejestru R1 do pamięci. (M=4) Wynik Wartość wynikowa wynosi 4 (jako ostatni swój wynik do pamięci zapisał proces drugi). Tymczasem prawidłowym wynikiem jest 5. Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Sytuacje hazardowe Problem sekcji krytycznej Warunki poprawności rozwiązania Rozwiązanie programowe dla dwóch procesów Rozwiązania programowe dla wielu procesów Scenariusz pierwszy Proces drugi Proces pierwszy 1 Odczytaj wartość z pamięci (M=5) i umieść ją w rejestrze R1. (R1=5) 2 Zwiększ wartość rejestru R1 o jeden. (R1=6) 3 ... 4 ... 5 Zapisz zawartość rejestru R1 do pamięci. (M=6) 6 ... 1 ... 2 ... 3 Odczytaj wartość z pamięci (M=5) i umieść ją w rejestrze R1. (R1=5) 4 Zmniejsz zawartość rejestru R1 o jeden. (R1=4) 5 ... 6 Zapisz zawartość rejestru R1 do pamięci. (M=4) Wynik Wartość wynikowa wynosi 4 (jako ostatni swój wynik do pamięci zapisał proces drugi). Tymczasem prawidłowym wynikiem jest 5. Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Sytuacje hazardowe Problem sekcji krytycznej Warunki poprawności rozwiązania Rozwiązanie programowe dla dwóch procesów Rozwiązania programowe dla wielu procesów Scenariusz pierwszy Proces drugi Proces pierwszy 1 Odczytaj wartość z pamięci (M=5) i umieść ją w rejestrze R1. (R1=5) 2 Zwiększ wartość rejestru R1 o jeden. (R1=6) 3 ... 4 ... 5 Zapisz zawartość rejestru R1 do pamięci. (M=6) 6 ... 1 ... 2 ... 3 Odczytaj wartość z pamięci (M=5) i umieść ją w rejestrze R1. (R1=5) 4 Zmniejsz zawartość rejestru R1 o jeden. (R1=4) 5 ... 6 Zapisz zawartość rejestru R1 do pamięci. (M=4) Wynik Wartość wynikowa wynosi 4 (jako ostatni swój wynik do pamięci zapisał proces drugi). Tymczasem prawidłowym wynikiem jest 5. Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Sytuacje hazardowe Problem sekcji krytycznej Warunki poprawności rozwiązania Rozwiązanie programowe dla dwóch procesów Rozwiązania programowe dla wielu procesów Scenariusz pierwszy Proces drugi Proces pierwszy 1 Odczytaj wartość z pamięci (M=5) i umieść ją w rejestrze R1. (R1=5) 2 Zwiększ wartość rejestru R1 o jeden. (R1=6) 3 ... 4 ... 5 Zapisz zawartość rejestru R1 do pamięci. (M=6) 6 ... 1 ... 2 ... 3 Odczytaj wartość z pamięci (M=5) i umieść ją w rejestrze R1. (R1=5) 4 Zmniejsz zawartość rejestru R1 o jeden. (R1=4) 5 ... 6 Zapisz zawartość rejestru R1 do pamięci. (M=4) Wynik Wartość wynikowa wynosi 4 (jako ostatni swój wynik do pamięci zapisał proces drugi). Tymczasem prawidłowym wynikiem jest 5. Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Sytuacje hazardowe Problem sekcji krytycznej Warunki poprawności rozwiązania Rozwiązanie programowe dla dwóch procesów Rozwiązania programowe dla wielu procesów Scenariusz drugi Proces pierwszy 1 Proces drugi Odczytaj wartość z pamięci (M=5) i umieść ją w rejestrze R1. (R1=5) 2 ... 3 Zwiększ zawartość rejestru R1 o jeden. (R1=6) 1 ... 2 Odczytaj wartość z pamięci (M=5) i umieść ją w rejestrze R1. (R1=5) 3 ... 4 Zmniejsz zawartość rejestru R1 o jeden. (R1=4) 4 ... 5 ... 5 6 Zapisz zawartość rejestru R1 do pamięci. (M=6) Zapisz zawartość rejestru R1 do pamięci. (M=4) 6 ... Wynik Wartość wynikowa wynosi tym razem 6 (jako ostatni swój wynik do pamięci zapisał proces pierwszy). Tak jak poprzednio prawidłowym wynikiem jest 5. Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Sytuacje hazardowe Problem sekcji krytycznej Warunki poprawności rozwiązania Rozwiązanie programowe dla dwóch procesów Rozwiązania programowe dla wielu procesów Scenariusz drugi Proces pierwszy 1 Proces drugi Odczytaj wartość z pamięci (M=5) i umieść ją w rejestrze R1. (R1=5) 2 ... 3 Zwiększ zawartość rejestru R1 o jeden. (R1=6) 1 ... 2 Odczytaj wartość z pamięci (M=5) i umieść ją w rejestrze R1. (R1=5) 3 ... 4 Zmniejsz zawartość rejestru R1 o jeden. (R1=4) 4 ... 5 ... 5 6 Zapisz zawartość rejestru R1 do pamięci. (M=6) Zapisz zawartość rejestru R1 do pamięci. (M=4) 6 ... Wynik Wartość wynikowa wynosi tym razem 6 (jako ostatni swój wynik do pamięci zapisał proces pierwszy). Tak jak poprzednio prawidłowym wynikiem jest 5. Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Sytuacje hazardowe Problem sekcji krytycznej Warunki poprawności rozwiązania Rozwiązanie programowe dla dwóch procesów Rozwiązania programowe dla wielu procesów Scenariusz drugi Proces pierwszy 1 Proces drugi Odczytaj wartość z pamięci (M=5) i umieść ją w rejestrze R1. (R1=5) 2 ... 3 Zwiększ zawartość rejestru R1 o jeden. (R1=6) 1 ... 2 Odczytaj wartość z pamięci (M=5) i umieść ją w rejestrze R1. (R1=5) 3 ... 4 Zmniejsz zawartość rejestru R1 o jeden. (R1=4) 4 ... 5 ... 5 6 Zapisz zawartość rejestru R1 do pamięci. (M=6) Zapisz zawartość rejestru R1 do pamięci. (M=4) 6 ... Wynik Wartość wynikowa wynosi tym razem 6 (jako ostatni swój wynik do pamięci zapisał proces pierwszy). Tak jak poprzednio prawidłowym wynikiem jest 5. Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Sytuacje hazardowe Problem sekcji krytycznej Warunki poprawności rozwiązania Rozwiązanie programowe dla dwóch procesów Rozwiązania programowe dla wielu procesów Scenariusz drugi Proces pierwszy 1 Proces drugi Odczytaj wartość z pamięci (M=5) i umieść ją w rejestrze R1. (R1=5) 2 ... 3 Zwiększ zawartość rejestru R1 o jeden. (R1=6) 1 ... 2 Odczytaj wartość z pamięci (M=5) i umieść ją w rejestrze R1. (R1=5) 3 ... 4 Zmniejsz zawartość rejestru R1 o jeden. (R1=4) 4 ... 5 ... 5 6 Zapisz zawartość rejestru R1 do pamięci. (M=6) Zapisz zawartość rejestru R1 do pamięci. (M=4) 6 ... Wynik Wartość wynikowa wynosi tym razem 6 (jako ostatni swój wynik do pamięci zapisał proces pierwszy). Tak jak poprzednio prawidłowym wynikiem jest 5. Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Sytuacje hazardowe Problem sekcji krytycznej Warunki poprawności rozwiązania Rozwiązanie programowe dla dwóch procesów Rozwiązania programowe dla wielu procesów Scenariusz drugi Proces pierwszy 1 Proces drugi Odczytaj wartość z pamięci (M=5) i umieść ją w rejestrze R1. (R1=5) 2 ... 3 Zwiększ zawartość rejestru R1 o jeden. (R1=6) 1 ... 2 Odczytaj wartość z pamięci (M=5) i umieść ją w rejestrze R1. (R1=5) 3 ... 4 Zmniejsz zawartość rejestru R1 o jeden. (R1=4) 4 ... 5 ... 5 6 Zapisz zawartość rejestru R1 do pamięci. (M=6) Zapisz zawartość rejestru R1 do pamięci. (M=4) 6 ... Wynik Wartość wynikowa wynosi tym razem 6 (jako ostatni swój wynik do pamięci zapisał proces pierwszy). Tak jak poprzednio prawidłowym wynikiem jest 5. Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Sytuacje hazardowe Problem sekcji krytycznej Warunki poprawności rozwiązania Rozwiązanie programowe dla dwóch procesów Rozwiązania programowe dla wielu procesów Scenariusz drugi Proces pierwszy 1 Proces drugi Odczytaj wartość z pamięci (M=5) i umieść ją w rejestrze R1. (R1=5) 2 ... 3 Zwiększ zawartość rejestru R1 o jeden. (R1=6) 1 ... 2 Odczytaj wartość z pamięci (M=5) i umieść ją w rejestrze R1. (R1=5) 3 ... 4 Zmniejsz zawartość rejestru R1 o jeden. (R1=4) 4 ... 5 ... 5 6 Zapisz zawartość rejestru R1 do pamięci. (M=6) Zapisz zawartość rejestru R1 do pamięci. (M=4) 6 ... Wynik Wartość wynikowa wynosi tym razem 6 (jako ostatni swój wynik do pamięci zapisał proces pierwszy). Tak jak poprzednio prawidłowym wynikiem jest 5. Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Sytuacje hazardowe Problem sekcji krytycznej Warunki poprawności rozwiązania Rozwiązanie programowe dla dwóch procesów Rozwiązania programowe dla wielu procesów Scenariusz drugi Proces pierwszy 1 Proces drugi Odczytaj wartość z pamięci (M=5) i umieść ją w rejestrze R1. (R1=5) 2 ... 3 Zwiększ zawartość rejestru R1 o jeden. (R1=6) 1 ... 2 Odczytaj wartość z pamięci (M=5) i umieść ją w rejestrze R1. (R1=5) 3 ... 4 Zmniejsz zawartość rejestru R1 o jeden. (R1=4) 4 ... 5 ... 5 6 Zapisz zawartość rejestru R1 do pamięci. (M=6) Zapisz zawartość rejestru R1 do pamięci. (M=4) 6 ... Wynik Wartość wynikowa wynosi tym razem 6 (jako ostatni swój wynik do pamięci zapisał proces pierwszy). Tak jak poprzednio prawidłowym wynikiem jest 5. Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Sytuacje hazardowe Problem sekcji krytycznej Warunki poprawności rozwiązania Rozwiązanie programowe dla dwóch procesów Rozwiązania programowe dla wielu procesów Scenariusz drugi Proces pierwszy 1 Proces drugi Odczytaj wartość z pamięci (M=5) i umieść ją w rejestrze R1. (R1=5) 2 ... 3 Zwiększ zawartość rejestru R1 o jeden. (R1=6) 1 ... 2 Odczytaj wartość z pamięci (M=5) i umieść ją w rejestrze R1. (R1=5) 3 ... 4 Zmniejsz zawartość rejestru R1 o jeden. (R1=4) 4 ... 5 ... 5 6 Zapisz zawartość rejestru R1 do pamięci. (M=6) Zapisz zawartość rejestru R1 do pamięci. (M=4) 6 ... Wynik Wartość wynikowa wynosi tym razem 6 (jako ostatni swój wynik do pamięci zapisał proces pierwszy). Tak jak poprzednio prawidłowym wynikiem jest 5. Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Sytuacje hazardowe Problem sekcji krytycznej Warunki poprawności rozwiązania Rozwiązanie programowe dla dwóch procesów Rozwiązania programowe dla wielu procesów Sekcja krytyczna Fragment kodu, podczas którego realizacji proces wykonuje dostęp do zasobów współdzielonych nazywamy sekcją krytyczną. Zasoby te mogą być zarówno zasobami fizycznymi, jak i logicznymi, mogą mieć prostą budowę (jak zmienne prostych typów) lub złożoną (jak struktury danych). Jak wynika ze wcześniejszych rozważań, aby dostęp do zasobu współdzielonego był bezpieczny musimy zagwarantować niepodzielność wykonania przez procesy sekcji krytycznych. Inaczej: jeśli jeden z procesów korzystających z zasobu dzielonego rozpoczął wykonywanie sekcji krytycznej, to żaden z pozostałych procesów nie może rozpocząć wykonywania sekcji krytycznej dotyczącej tego samego zasobu, dopóki ten pierwszy jej nie skończy. Rozpoczynanie sekcji krytycznej określamy mianem wchodzenia do sekcji krytycznej zaś jej kończenie wychodzeniem lub opuszczaniem sekcji krytycznej. Część kodu bezpośrednio poprzedzającą sekcję krytyczną nazywamy sekcją wejściową, natomiast część umieszczoną bezpośrednio za sekcją krytyczną określamy mianem sekcji wyjściowej. Pozostałą część kodu procesu będziemy nazywać resztą. Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Sytuacje hazardowe Problem sekcji krytycznej Warunki poprawności rozwiązania Rozwiązanie programowe dla dwóch procesów Rozwiązania programowe dla wielu procesów Warunki poprawności rozwiązania problemu sekcji krytycznej Każde rozwiązanie problemu sekcji krytycznej musi spełniać trzy warunki, aby być w pełni poprawnym: Wzajemne wykluczanie (ang. mutual exclusion) W danym czasie, w sekcji krytycznej może znajdować się tylko jeden proces. Postęp Jeśli nie wymaga tego warunek wzajemnego wykluczania, to proces nie powinien być wstrzymywany przed wejściem do sekcji krytycznej. Ograniczone czekanie Oczekiwanie każdego procesu na wejście do sekcji krytycznej powinno kiedyś się zakończyć. Inne procesy nie mogą wstrzymywać go w nieskończoność przed wejściem do sekcji krytycznej. Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Sytuacje hazardowe Problem sekcji krytycznej Warunki poprawności rozwiązania Rozwiązanie programowe dla dwóch procesów Rozwiązania programowe dla wielu procesów Poprawne rozwiązanie programowe dla dwóch procesów Pierwszym, który podał prawidłowe rozwiązanie problemu sekcji krytycznej dla dwóch procesów był holenderski matematyk T.J.Dekker. Zaprezentowane na następnej planszy rozwiązanie, w postaci fragmentu kodu w języku (pseudo)C jest modyfikacją algorytmu Dekkera i nosi nazwę algorytmu Petersona od nazwiska jego autora Gary’ego Petersona. Listing zawiera (oprócz zewnętrznej, nieskończonej pętli do. . . while) jedynie kod sekcji wejściowej i wyjściowej (w tym wypadku składa się ona z tylko jednego wiersza). Kod sekcji krytycznej i reszty procesu został zastąpiony ciągami znaków Sekcja Krytyczna i Reszta. Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Sytuacje hazardowe Problem sekcji krytycznej Warunki poprawności rozwiązania Rozwiązanie programowe dla dwóch procesów Rozwiązania programowe dla wielu procesów Kod rozwiązania Współdzielone zmienne wymagane przez algorytm bool flaga[2]; //tablica flag gotowości procesów do wejścia do s.k unsigned int numer ; //numer procesu (0 lub 1), któremu zezwolono wejść do s.k. Proces P0 Proces P1 do { flaga[0]=true; numer =1; while(flaga[1] && numer ==1) ; Sekcja Krytyczna flaga[0]=false; Reszta } while(1); do { flaga[1]=true; numer =0; while(flaga[0] && numer ==0) ; Sekcja Krytyczna flaga[1]=false; Reszta } while(1); Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Sytuacje hazardowe Problem sekcji krytycznej Warunki poprawności rozwiązania Rozwiązanie programowe dla dwóch procesów Rozwiązania programowe dla wielu procesów Dowód poprawności Wzajemne wykluczanie Jeden z dwóch procesów wchodzi do sekcji krytycznej wtedy i tylko wtedy, kiedy flaga procesu przeciwnego ma wartość false lub gdy zmienna numer zawiera jego identyfikator. Może zaistnieć sytuacja, w której oba procesy będą miały ustawione flagi, ale zmienna numer może przyjąć tylko jedną wartość, a więc jeden z nich będzie wykonywał pętlę while, a drugi wejdzie do sekcji krytycznej. Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Sytuacje hazardowe Problem sekcji krytycznej Warunki poprawności rozwiązania Rozwiązanie programowe dla dwóch procesów Rozwiązania programowe dla wielu procesów Dowód poprawności Wzajemne wykluczanie Jeden z dwóch procesów wchodzi do sekcji krytycznej wtedy i tylko wtedy, kiedy flaga procesu przeciwnego ma wartość false lub gdy zmienna numer zawiera jego identyfikator. Może zaistnieć sytuacja, w której oba procesy będą miały ustawione flagi, ale zmienna numer może przyjąć tylko jedną wartość, a więc jeden z nich będzie wykonywał pętlę while, a drugi wejdzie do sekcji krytycznej. Postęp Załóżmy, że proces o numerze 0 chce wejść do sekcji krytycznej, a proces o numerze 1 nie jest nią zainteresowany (bo wykonuje swoją resztę). Zmienna numer będzie miała wartość 1, ale flaga procesu o numerze 1 nie będzie ustawiona, a więc proces 0 nie zostanie powstrzymany przed wejściem do sekcji krytycznej. Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Sytuacje hazardowe Problem sekcji krytycznej Warunki poprawności rozwiązania Rozwiązanie programowe dla dwóch procesów Rozwiązania programowe dla wielu procesów Dowód poprawności Wzajemne wykluczanie Jeden z dwóch procesów wchodzi do sekcji krytycznej wtedy i tylko wtedy, kiedy flaga procesu przeciwnego ma wartość false lub gdy zmienna numer zawiera jego identyfikator. Może zaistnieć sytuacja, w której oba procesy będą miały ustawione flagi, ale zmienna numer może przyjąć tylko jedną wartość, a więc jeden z nich będzie wykonywał pętlę while, a drugi wejdzie do sekcji krytycznej. Postęp Załóżmy, że proces o numerze 0 chce wejść do sekcji krytycznej, a proces o numerze 1 nie jest nią zainteresowany (bo wykonuje swoją resztę). Zmienna numer będzie miała wartość 1, ale flaga procesu o numerze 1 nie będzie ustawiona, a więc proces 0 nie zostanie powstrzymany przed wejściem do sekcji krytycznej. Ograniczone oczekiwanie Instrukcja przypisania z sekcji wyjściowej gwarantuje, że proces będzie czekał na wejście do sekcji krytycznej tylko do momentu, gdy drugi z procesów zakończy swoją sekcję krytyczną i wykona sekcję wyjściową. Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Sytuacje hazardowe Problem sekcji krytycznej Warunki poprawności rozwiązania Rozwiązanie programowe dla dwóch procesów Rozwiązania programowe dla wielu procesów Poprawne rozwiązanie programowe dla wielu procesów Uogólnienie przedstawionego wcześniej rozwiązania na n procesów, nie jest proste, a otrzymany kod jest mniej czytelny niż w przypadku dwóch procesów. Zmianie ulega typ zmiennej współdzielonej, która jest tablicą flag. Każda flaga może przyjmować teraz trzy wartości: puste - proces jest poza sekcją krytyczną, gotowy - proces zgłasza swą gotowość do wejścia do sekcji krytycznej, w sekcji proces jest w sekcji krytycznej. Zmienna numer również przyjmuje większy zakres wartości (od 0 do n-1) niż poprzednio. Uwaga: Zmienna j jest zmienną lokalną procesu, tzn. nie jest współdzielona z innymi procesami (poza właścicielem tej zmiennej, żaden inny proces nie ma do niej dostępu). Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Sytuacje hazardowe Problem sekcji krytycznej Warunki poprawności rozwiązania Rozwiązanie programowe dla dwóch procesów Rozwiązania programowe dla wielu procesów Kod rozwiązania dla i–tego procesu Współdzielone zmienne wymagane przez algorytm enum stan {puste, gotowy, w sekcji}; enum stan flaga[n]; unsigned int numer ; //przyjmuje wartości od 0 do n-1 Proces Pi unsigned int j; // przyjmuje wartości od 0 do n do { do { flaga[i]=gotowy ; j=numer ; while(i!=j) if(flaga[j]!=puste) j=numer ; else j=(j+1) % n; flaga[i]=w sekcji; j= 0; while(j<n&&(j==i||flaga[j]!=w sekcji)) j++; } while(j<n&&(numer !=i||flaga[numer ]!=puste)); numer =i; Sekcja Krytyczna j=(numer +1) % n; while(flaga[j]==puste) j=(j+1) % n; numer =j; flaga[i]=puste; Reszta } while(1); Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Sytuacje hazardowe Problem sekcji krytycznej Warunki poprawności rozwiązania Rozwiązanie programowe dla dwóch procesów Rozwiązania programowe dla wielu procesów Dowód poprawności Wzajemne wykluczanie Proces z grupy procesów ubiegających się o dostęp do współdzielonego zasobu wchodzi do sekcji krytycznej wtedy i tylko wtedy, gdy jego flaga gotowości ma wartość w sekcji, a flagi pozostałych procesów mają inną wartość. Ponieważ tylko on może ustawić swoją flagę na wspomnianą wartość oraz dokonuje sprawdzenia flag pozostałych procesów po jej ustawieniu, to warunek wzajemnego wykluczania jest zachowany. Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Sytuacje hazardowe Problem sekcji krytycznej Warunki poprawności rozwiązania Rozwiązanie programowe dla dwóch procesów Rozwiązania programowe dla wielu procesów Dowód poprawności Wzajemne wykluczanie Proces z grupy procesów ubiegających się o dostęp do współdzielonego zasobu wchodzi do sekcji krytycznej wtedy i tylko wtedy, gdy jego flaga gotowości ma wartość w sekcji, a flagi pozostałych procesów mają inną wartość. Ponieważ tylko on może ustawić swoją flagę na wspomnianą wartość oraz dokonuje sprawdzenia flag pozostałych procesów po jej ustawieniu, to warunek wzajemnego wykluczania jest zachowany. Postęp Wartość zmiennej numer ulega zmianie tylko wtedy gdy proces wchodzi lub wychodzi z sekcji krytycznej. Jeśli tylko jeden proces jest zainteresowany wejściem do sekcji krytycznej, a żaden inny nie wykonuje jej, ani nie ubiega się o wejście do niej, to może on wykonać sekcję krytyczną poza kolejnością wyznaczaną przez zmienną numer. Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Sytuacje hazardowe Problem sekcji krytycznej Warunki poprawności rozwiązania Rozwiązanie programowe dla dwóch procesów Rozwiązania programowe dla wielu procesów Dowód poprawności Wzajemne wykluczanie Proces z grupy procesów ubiegających się o dostęp do współdzielonego zasobu wchodzi do sekcji krytycznej wtedy i tylko wtedy, gdy jego flaga gotowości ma wartość w sekcji, a flagi pozostałych procesów mają inną wartość. Ponieważ tylko on może ustawić swoją flagę na wspomnianą wartość oraz dokonuje sprawdzenia flag pozostałych procesów po jej ustawieniu, to warunek wzajemnego wykluczania jest zachowany. Postęp Wartość zmiennej numer ulega zmianie tylko wtedy gdy proces wchodzi lub wychodzi z sekcji krytycznej. Jeśli tylko jeden proces jest zainteresowany wejściem do sekcji krytycznej, a żaden inny nie wykonuje jej, ani nie ubiega się o wejście do niej, to może on wykonać sekcję krytyczną poza kolejnością wyznaczaną przez zmienną numer. Ograniczone oczekiwanie Każdy proces opuszczający sekcję krytyczną w sekcji wyjściowej wyznacza swojego następcę do wejścia do sekcji krytycznej. W ten sposób każdy proces, który ubiega się o wykonanie sekcji krytycznej dostanie pozwolenie po co najwyżej n-1 próbach. Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Sytuacje hazardowe Problem sekcji krytycznej Warunki poprawności rozwiązania Rozwiązanie programowe dla dwóch procesów Rozwiązania programowe dla wielu procesów Algorytm piekarni Innym rozwiązaniem problemu sekcji krytycznej dla n procesów jest algorytm piekarni, który został opracowany przez Lesliego Lamporta. Nazwa tego algorytmu wzięła się od sposobu w jaki piekarnie w Stanach Zjednoczonych sprzedają chleb. W polskich realiach odpowiada to sposobowi przyjmowania pacjentów przez lekarzy w przychodniach. Każdy pacjent musi się zarejestrować i otrzymać swój numer. Im niższa jest wartość tego numeru, tym szybciej jest jego właściciel obsługiwany. Podobne rozwiązanie można zastosować dla procesów ubiegających się o wejście do sekcji krytycznej. Jednakże w tym przypadku może zdarzyć się, że dwa procesy otrzymają ten sam numer. Taki konflikt rozstrzyga się porównując ich identyfikatory (PID), które też są numerami. Zanim zostanie przedstawiony kod rozwiązania musimy zdefiniować operację porównywania par liczb, oraz operację wybierania liczby maksymalnej ze zbioru liczb: (a, b) < (c, d) ⇐⇒ a < c ∪ (a = c ∩ b < d) max(a0 , a2 , . . . , an−1 ) jest taką liczbą k, że k ai dla i = 0, . . . , n − 1 Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Sytuacje hazardowe Problem sekcji krytycznej Warunki poprawności rozwiązania Rozwiązanie programowe dla dwóch procesów Rozwiązania programowe dla wielu procesów Pseudokod rozwiązania dla procesu Pi Współdzielone zmienne wymagane przez algorytm bool wybrane[n]; int numer [n]; Proces Pi do { wybrane[i]=true; numer [i]=max(numer [0],numer [1],. . . ,numer [n-1])+1; wybrane[i]=false; for(j=0;j<n;j++) { while(wybrane[j]) ; while(numer [j]!=0 && (numer [j],j)<(numer [i],i)) ; } Sekcja Krytyczna numer [i]=0; Reszta } while(1); Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Sytuacje hazardowe Problem sekcji krytycznej Warunki poprawności rozwiązania Rozwiązanie programowe dla dwóch procesów Rozwiązania programowe dla wielu procesów Dowód poprawności Wzajemne wykluczanie Zauważmy, że każdy proces, który wchodzi do sekcji krytycznej otrzymuje numer, który jest następnikiem największego z dotychczas wybranych numerów. Ponieważ operacja wybierania nie jest niepodzielna, to dodatkowo sprawdzane są unikatowe numery identyfikacyjne procesów, gdyby pojawiły się dwa lub większa liczba procesów o takich samych wybranych numerach. Operacja porównania numerów wstrzymywana jest do czasu zakończenia wybierania numeru przez nadchodzące procesy. To wszystko gwarantuje spełnienie warunku wzajemnego wykluczania. Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Sytuacje hazardowe Problem sekcji krytycznej Warunki poprawności rozwiązania Rozwiązanie programowe dla dwóch procesów Rozwiązania programowe dla wielu procesów Dowód poprawności Wzajemne wykluczanie Zauważmy, że każdy proces, który wchodzi do sekcji krytycznej otrzymuje numer, który jest następnikiem największego z dotychczas wybranych numerów. Ponieważ operacja wybierania nie jest niepodzielna, to dodatkowo sprawdzane są unikatowe numery identyfikacyjne procesów, gdyby pojawiły się dwa lub większa liczba procesów o takich samych wybranych numerach. Operacja porównania numerów wstrzymywana jest do czasu zakończenia wybierania numeru przez nadchodzące procesy. To wszystko gwarantuje spełnienie warunku wzajemnego wykluczania. Postęp Ponieważ tylko procesy gotowe do wejścia do sekcji krytycznej wybierają numery, to zapewniony jest warunek postępu. Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Sytuacje hazardowe Problem sekcji krytycznej Warunki poprawności rozwiązania Rozwiązanie programowe dla dwóch procesów Rozwiązania programowe dla wielu procesów Dowód poprawności Wzajemne wykluczanie Zauważmy, że każdy proces, który wchodzi do sekcji krytycznej otrzymuje numer, który jest następnikiem największego z dotychczas wybranych numerów. Ponieważ operacja wybierania nie jest niepodzielna, to dodatkowo sprawdzane są unikatowe numery identyfikacyjne procesów, gdyby pojawiły się dwa lub większa liczba procesów o takich samych wybranych numerach. Operacja porównania numerów wstrzymywana jest do czasu zakończenia wybierania numeru przez nadchodzące procesy. To wszystko gwarantuje spełnienie warunku wzajemnego wykluczania. Postęp Ponieważ tylko procesy gotowe do wejścia do sekcji krytycznej wybierają numery, to zapewniony jest warunek postępu. Ograniczone oczekiwanie Procesy wchodzą do sekcji krytycznej w takim porządku w jakim nadeszły, a więc spełnienie warunku ograniczonego czekania jest zapewnione. Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Sytuacje hazardowe Problem sekcji krytycznej Warunki poprawności rozwiązania Rozwiązanie programowe dla dwóch procesów Rozwiązania programowe dla wielu procesów Podsumowanie Wszystkie przedstawione tu rozwiązania programowe są z teoretycznego punktu widzenia poprawne. Niestety, w praktyce te rozwiązania mogą zawieść, jeśli program będzie wykonywany na procesorze stosującym wykonywanie instrukcji poza kolejnością (ang. out of order execution). Poprawność tych rozwiązań może również być naruszona podczas wykonywania przez kompilator optymalizacji kodu wynikowego. Stosując te rozwiązania należy pamiętać o dodatkowych środkach, które pozwalają uniknąć opisanych problemów. Innymi wadami przedstawionych algorytmów są problemy z zastosowaniem ich do bardziej skomplikowanych zadań oraz to, że wymagają one aktywnego oczekiwania. Ta ostatnia wada wiąże się z problemem nazywanym inwersją priorytetów. Występuje on w systemach stosujących szeregowania priorytetowe. Załóżmy, że w takim systemie pozwolenie na wejście do sekcji krytycznej uzyskuje proces niskopriorytetowy. Podczas jej wykonywania zostaje on wywłaszczony przez proces wysokopriorytetowy, który zaczyna ubiegać się od dostęp do tej samej sekcji. Ponieważ jest ona zajęta, to ten proces przechodzi w stan aktywnego oczekiwania, a ze względu na jego priorytet procesor nie zostanie przydzielony procesowi niskopriorytetowemu, który mógłby zakończyć to oczekiwanie wychodząc z sekcji. Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Niepodzielne rozkazy Semafory Regiony krytyczne Monitory Wprowadzenie Najprostszym sposobem zapewnienia wyłączności i niepodzielności wykonania sekcji krytycznej jest wyłącznie na czas, kiedy przebywa w niej proces, systemu przerwań. Niestety, to rozwiązanie może prowadzić do większych problemów, niż sytuacje hazardowe (Co jeśli któraś z instrukcji z sekcji krytycznej wygeneruje wyjątek?). Nie daje się ono również zastosować w systemach wieloprocesorowych. Zamiast tak radykalnego rozwiązania twórcy sprzętu, systemów operacyjnych i translatorów oferują szereg środków, które wspierają programistów w rozwiązywaniu problemu sekcji krytycznej. Dalej zostaną omówione najpopularniejsze z nich. Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Niepodzielne rozkazy Semafory Regiony krytyczne Monitory Niepodzielne rozkazy sprzętowe Większość współczesnych architektur sprzętowych oferuje rozkazy, które pozwalają wykonać w sposób niepodzielny, na prostych zmiennych takie operacje, jak dodawanie, odejmowanie, operacje binarne. Istnieją również rozkazy pomagające rozwiązać problem sekcji krytycznej dla operacji na strukturach danych. Są nimi rozkazy typu „testuj i ustaw” oraz „wymień”. Pierwszy z nich pozwala w sposób niepodzielny odczytać wartość zmiennej, a następnie ją zmodyfikować. Drugi z nich dokonuje zamiany wartości dwóch zmiennych, które pełnią rolę zamka i klucza. Oba rozkazy pozwalają zapewnić spełnienie warunku wzajemnego wykluczania i mogą posłużyć do implementowania opisanych wcześniej algorytmów rozwiązywania problemu sekcji krytycznej. Ponieważ blokują one magistralę pamięci, a w związku z tym także dostęp do określonej lokacji RAM innym rozkazom, to są one szczególnie przydatne w systemach wieloprocesorowych. Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Niepodzielne rozkazy Semafory Regiony krytyczne Monitory Semafor Semafor jest zmienną całkowitą, do której dostęp można uzyskać (poza inicjalizacją) jedynie za pomocą dwóch specjalnych operacji: czekaj i sygnalizuj. Pierwsza sprawdza, czy semafor ma wartość większą od zera. Jeśli tak, to zmniejsza ją o jeden, jeśli nie, to czeka aż tę wartość osiągnie i dopiero wtedy ją zmniejsza. Druga polega na zwiększeniu wartości semafora o jeden. Czynności sprawdzenia wartości semafora i zmniejszenia jego wartości w operacji czekaj są realizowane niepodzielnie. Operacja sygnalizuj jest w całości wykonywania niepodzielnie. Takie rozwiązanie pierwszy zaproponował Edsger Dijkstra, dlatego te operacje są oznaczane odpowiednio symbolami P (od proben) i V (od verhogen). Stosuje się również angielskie określenia up i down. Istnieją różne wersje semaforów, niektóre z nich mogą przyjmować różne wartości, inne tylko dwie. Te ostatnie nazywane są semaforami binarnymi lub muteksami. Istnieją również dwa sposoby implementacji operacji czekaj. Pierwszy z nich wymaga aktywnego oczekiwania na podniesienie semafora i został już opisany wyżej. Semafory posiadające tak zaimplementowaną operację oczekiwania nazywa się „wirującymi blokadami” (ang. spin-lock) i są one stosowane w systemach wieloprocesorowych, wtedy, kiedy istnieje pewność, że proces będzie krótko czekał na podniesienie semafora. Drugi sposób polega na umieszczeniu wszystkich procesów czekających na podniesienie semafora w kolejce oczekiwania na to zdarzenie. Kiedy semafor zostanie podniesiony uaktywniany jest jeden z tych procesów i on może kontynuować swoje działanie. O procesie, który oczekuje na podniesienie semafora w kolejce mówimy, że został uśpiony, a proces, który został wybrany z tej kolejki oczekiwania mówimy, że został obudzony. Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Niepodzielne rozkazy Semafory Regiony krytyczne Monitory Realizacja P i V Mutex Usypianie Aktywne oczekiwanie czekaj(S): while(S¬0); S−−; sygnalizuj(S): S++; czekaj(S): S−−; if(S<0) Uśpij(proces); sygnalizuj(S): S++; if(S¬0) Obudź(proces); Arkadiusz Chrobot czekaj(S): if(S==1) S=0; else Uśpij(proces); sygnalizuj(S): if(!Czeka(proces)) S=1; else Obudź(proces); Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Niepodzielne rozkazy Semafory Regiony krytyczne Monitory Regiony Choć semafory są skuteczne w rozwiązywaniu sekcji krytycznej i proste w zastosowaniu, to mogą być dosyć niewygodne w użyciu, tym samym prowadząc do powstania błędów logicznych w programach. Programista może np.: zapomnieć o umieszczeniu w programie instrukcji podnoszącej semafor. W takim wypadku może dojść do zablokowania działania wszystkich procesów czekających na podniesienie semafora. Aby zapobiec takim sytuacjom w językach programowania (głównie proceduralnych) wprowadzono instrukcje pozwalające tworzyć tzw. regiony krytyczne. Słowo kluczowe shared pozwala na określenie zmiennej, jako współdzielonej przez kilka procesów, natomiast instrukcja region zmienna współdzielona do operacja; gwarantuje, że operacja wykonana na zmiennej współdzielonej będzie niepodzielna. Kompilator do realizacji tej niepodzielności może użyć niejawnie semaforów. Do rozwiązywania zaawansowanych problemów synchronizacji przydaje się konstrukcja regionu warunkowego: region zmienna współdzielona when warunek do operacja;. Operacja zostanie wykonana, tylko wtedy, kiedy warunek będzie spełniony. Praktyczne problemy synchronizacji wymagają dosyć często, aby warunek był sprawdzany nie przed wejściem do sekcji krytycznej, ale w trakcie jej trwania, np.: przed wykonaniem jednej z kilku operacji. Do realizacji oczekiwania na spełnienie warunku służy instrukcja await(warunek). Regiony krytyczne można zagnieżdżać, ale należy robić to ostrożnie, gdyż może to prowadzić do problemów zwanych zakleszczeniami. Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Niepodzielne rozkazy Semafory Regiony krytyczne Monitory Słowo kluczowe volatile W językach C, C++ i Java, w deklaracjach zmiennych można użyć słowa kluczowego volatile, które jest informacją dla kompilatora, że nie powinien stosować optymalizacji w dostępie do tej zmiennej, polegającej na odczycie kopii jej wartości z rejestru procesora. Tym samym wszelkie operacje dokonywane na tej zmiennej, są dokonywane bezpośrednio na jej oryginalnej, aktualnej wartości umieszczonej w pamięci operacyjnej. Mimo, że w pewnych warunkach i językach programowania słowo kluczowe volatile może dać efekt niepodzielnego dostępu do zmiennej, to nie należy go traktować jako środka synchronizacji. Nieporozumienia co do sposobu działania tego słowa często prowadzą do powstania programów, które są nieodporne na sytuacje hazardowe. Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Niepodzielne rozkazy Semafory Regiony krytyczne Monitory Monitory Przykład w języku Java class Monitor { private int field; public void synchronized setField(int f ) { field = f ; } public int synchronized getField() { return field; } } Arkadiusz Chrobot Monitory są środkiem synchronizacji właściwym dla języków obiektowych, choć zostały opracowane niezależnie od techniki obiektowej. Konstrukcja ta jest autorstwa Per Brinch Hansena i C.A.R Hoare’a. Monitor można określić jako obiekt, którego wszystkie pola są prywatne, a ich wartości osiągalne tylko za pomocą metod obiektu, wykonywanych w sposób niepodzielny. Z obiektem monitora może być, podobnie jak z regionem, związany warunek. Monitory znalazły zastosowanie w języku Java, niestety ich realizacja nie jest do końca zgodna z intencjami twórców tego środka synchronizacji. Warunek w Javie jest związany z monitorem niejawnie i osiągalny za pomocą metod wait(), notify (), notifyAll(). Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Problem ograniczonego buforowania Problem czytelników i pisarzy Problem ucztujących filozofów Klasyczne problemy synchronizacji Opisane w dalszej części wykładu problemy stanowią ważne zagadnienia dotyczące współbieżności, bowiem większość rzeczywistych problemów synchronizacji daje się sprowadzić do któregoś z nich. Dzięki temu można zastosować do nich znane i sprawdzone rozwiązania. Problemy te stanowią również dobry zestaw testowy (ang. test suit) dla każdego nowego rozwiązania problemu synchronizacji. Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Problem ograniczonego buforowania Problem czytelników i pisarzy Problem ucztujących filozofów Problem ograniczonego buforowania Dane są dwa procesy. Jeden z nich jest producentem, który produkuje kolejne jednostki informacji, drugi z nich jest konsumentem, który zużywa te informacje. Żeby żadna z informacji wyprodukowanych przez producenta nie została stracona, są one buforowane. Jeśli konsument działa z taką samą lub większą prędkością niż producent, to zawsze będą wolne bufory i co najwyżej konsument będzie czekał na nowe jednostki informacji. Mamy wtedy do czynienia z problemem nieograniczonego buforowania. Jeśli jednak ten warunek nie jest spełniony, to może zabraknąć pustych buforów i producent będzie musiał zaczekać aż konsument opróżni któryś z zajętych buforów. Ten problem jest nazywany problemem ograniczonego buforowania. Na następnych planszach znajdują się dwa rozwiązania tego problemu. Pierwsze z nich pozwala zapełnić co najwyżej n-1 buforów, drugie wymaga z kolei niepodzielności operacji modyfikacji wartości zmiennej licznik. Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Problem ograniczonego buforowania Problem czytelników i pisarzy Problem ucztujących filozofów Pierwsze rozwiązanie Współdzielone elementy const int n = . . . ; typedef . . . jednostka; jednostka bufor [n]; unsigned int we,wy ; //przyjmują wartości od 0 do n-1 Producent Konsument do { ... Produkuj jednostkę w nastp ... while((we + 1) % n == wy ) ; bufor [we]=nastp; we=(we + 1) % n; } while(1); do { while(we == wy ) ; nastk= bufor [wy ]; wy =(wy + 1) % n; ... Konsumuj jednostkę z nastk ... } while(1); Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Problem ograniczonego buforowania Problem czytelników i pisarzy Problem ucztujących filozofów Drugie rozwiązanie Współdzielone elementy Te same co poprzednio oraz dodana jest zmienna całkowita licznik, a usunięte zostały zmienne we i wy (są teraz lokalne). Producent Konsument do { ... Produkuj jednostkę w nastp ... while(licznik == n) ; bufor [we]=nastp; we=(we + 1) % n; licznik++; } while(1); do { while(licznik == 0) ; nastk= bufor [wy ]; wy =(wy + 1) % n; licznik−−; ... Konsumuj jednostkę z nastk ... }while(1); Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Problem ograniczonego buforowania Problem czytelników i pisarzy Problem ucztujących filozofów Problem czytelników i pisarzy W problemie czytelników i pisarzy istnieją dwie grupy procesów, które mają dostęp do współdzielonego zasobu. Do pierwszej należą procesy, które wyłącznie odczytują stan współdzielonego zasobu i dlatego nazywamy je czytelnikami, do drugiej należą procesy, które mogą stan zasobu odczytywać lub zapisywać. Nazywamy je pisarzami. Jednoczesny dostęp kilku czytelników do zasobu jest możliwy, gdyż nie powoduje żadnych komplikacji, natomiast dostęp pisarzy musi odbywać się na zasadzie wyłączności i niepodzielności. Istnieje kilka wersji problemu czytelników i pisarzy, tu zostaną opisane tylko dwie. W pierwszym problemie czytelników i pisarzy, żaden czytelnik nie powinien czekać na dostęp do zasobu. Innymi słowy praca pisarzy może być wstrzymywana przez czytelników. W drugim problemie czytelników i pisarzy, jeśli któryś z pisarzy jest gotów do modyfikacji zasobu, to żaden czytelnik nie powinien uzyskać do niego dostępu. Innymi słowy, praca czytelników jest wstrzymywana przez pisarzy. Rozwiązania obu przypadków można uzyskać stosując dwa semafory, jeden zapewniający niepodzielność zliczania procesów pisarzy/czytelników czekających na dostęp do zasobu, drugi zapewniający wyłączność dostępu do zasobu. Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Problem ograniczonego buforowania Problem czytelników i pisarzy Problem ucztujących filozofów Problem pięciu ucztujących filozofów W problemie ucztujących filozofów pięciu filozofów (alegoria procesów) zasiada do okrągłego stołu. Każdy z nich ma swój talerz (alegoria zasobów lokalnych), po każdej stronie talerza leży sztuciec (alegoria semafora). Na środku stołu stoi duży talerz z jedzeniem (alegoria zasobu współdzielonego). Każdy z filozofów może wykonywać w danej chwili jedną z dwóch czynności: myśleć lub jeść. Żeby filozof mógł jeść musi wziąć dwa sztućce, nabrać jedzenia z dużego talerza, na swój talerz i dopiero wtedy może przystąpić do konsumpcji. Problem ten jest źródłem wielu zagadnień związanych z synchronizacją, otóż może się zdarzyć, że wszyscy filozofowie zechcą jeść i jednocześnie sięgną po leżący po lewej stronie sztuciec. Okaże się, że żaden z nich nie będzie mógł podnieść sztućca leżącego po prawej stronie (jest ich tylko pięć), koniecznego do spożycia posiłku. Jest to problem zakleszczenia. Innym razem może dojść do zagłodzenia jednego z filozofów przez pozostałych biesiadników. Trzy najpopularniejsze strategie rozwiązania tego problemu to: Pozwolić jednocześnie zasiadać do stołu co najwyżej czterem filozofom. Pozwolić podnosić filozofom sztućce tylko wtedy, gdy oba są dostępne. Zastosować rozwiązanie asymetryczne: filozofowie o nieparzystych numerach podnoszą sztućce w kolejności lewy - prawy, a ci o numerach parzystych, w kolejności odwrotnej. Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Problem ograniczonego buforowania Problem czytelników i pisarzy Problem ucztujących filozofów Problem pięciu ucztujących filozofów W problemie ucztujących filozofów pięciu filozofów (alegoria procesów) zasiada do okrągłego stołu. Każdy z nich ma swój talerz (alegoria zasobów lokalnych), po każdej stronie talerza leży sztuciec (alegoria semafora). Na środku stołu stoi duży talerz z jedzeniem (alegoria zasobu współdzielonego). Każdy z filozofów może wykonywać w danej chwili jedną z dwóch czynności: myśleć lub jeść. Żeby filozof mógł jeść musi wziąć dwa sztućce, nabrać jedzenia z dużego talerza, na swój talerz i dopiero wtedy może przystąpić do konsumpcji. Problem ten jest źródłem wielu zagadnień związanych z synchronizacją, otóż może się zdarzyć, że wszyscy filozofowie zechcą jeść i jednocześnie sięgną po leżący po lewej stronie sztuciec. Okaże się, że żaden z nich nie będzie mógł podnieść sztućca leżącego po prawej stronie (jest ich tylko pięć), koniecznego do spożycia posiłku. Jest to problem zakleszczenia. Innym razem może dojść do zagłodzenia jednego z filozofów przez pozostałych biesiadników. Trzy najpopularniejsze strategie rozwiązania tego problemu to: Pozwolić jednocześnie zasiadać do stołu co najwyżej czterem filozofom. Pozwolić podnosić filozofom sztućce tylko wtedy, gdy oba są dostępne. Zastosować rozwiązanie asymetryczne: filozofowie o nieparzystych numerach podnoszą sztućce w kolejności lewy - prawy, a ci o numerach parzystych, w kolejności odwrotnej. Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Problem ograniczonego buforowania Problem czytelników i pisarzy Problem ucztujących filozofów Problem pięciu ucztujących filozofów W problemie ucztujących filozofów pięciu filozofów (alegoria procesów) zasiada do okrągłego stołu. Każdy z nich ma swój talerz (alegoria zasobów lokalnych), po każdej stronie talerza leży sztuciec (alegoria semafora). Na środku stołu stoi duży talerz z jedzeniem (alegoria zasobu współdzielonego). Każdy z filozofów może wykonywać w danej chwili jedną z dwóch czynności: myśleć lub jeść. Żeby filozof mógł jeść musi wziąć dwa sztućce, nabrać jedzenia z dużego talerza, na swój talerz i dopiero wtedy może przystąpić do konsumpcji. Problem ten jest źródłem wielu zagadnień związanych z synchronizacją, otóż może się zdarzyć, że wszyscy filozofowie zechcą jeść i jednocześnie sięgną po leżący po lewej stronie sztuciec. Okaże się, że żaden z nich nie będzie mógł podnieść sztućca leżącego po prawej stronie (jest ich tylko pięć), koniecznego do spożycia posiłku. Jest to problem zakleszczenia. Innym razem może dojść do zagłodzenia jednego z filozofów przez pozostałych biesiadników. Trzy najpopularniejsze strategie rozwiązania tego problemu to: Pozwolić jednocześnie zasiadać do stołu co najwyżej czterem filozofom. Pozwolić podnosić filozofom sztućce tylko wtedy, gdy oba są dostępne. Zastosować rozwiązanie asymetryczne: filozofowie o nieparzystych numerach podnoszą sztućce w kolejności lewy - prawy, a ci o numerach parzystych, w kolejności odwrotnej. Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Problem ograniczonego buforowania Problem czytelników i pisarzy Problem ucztujących filozofów Problem pięciu ucztujących filozofów W problemie ucztujących filozofów pięciu filozofów (alegoria procesów) zasiada do okrągłego stołu. Każdy z nich ma swój talerz (alegoria zasobów lokalnych), po każdej stronie talerza leży sztuciec (alegoria semafora). Na środku stołu stoi duży talerz z jedzeniem (alegoria zasobu współdzielonego). Każdy z filozofów może wykonywać w danej chwili jedną z dwóch czynności: myśleć lub jeść. Żeby filozof mógł jeść musi wziąć dwa sztućce, nabrać jedzenia z dużego talerza, na swój talerz i dopiero wtedy może przystąpić do konsumpcji. Problem ten jest źródłem wielu zagadnień związanych z synchronizacją, otóż może się zdarzyć, że wszyscy filozofowie zechcą jeść i jednocześnie sięgną po leżący po lewej stronie sztuciec. Okaże się, że żaden z nich nie będzie mógł podnieść sztućca leżącego po prawej stronie (jest ich tylko pięć), koniecznego do spożycia posiłku. Jest to problem zakleszczenia. Innym razem może dojść do zagłodzenia jednego z filozofów przez pozostałych biesiadników. Trzy najpopularniejsze strategie rozwiązania tego problemu to: Pozwolić jednocześnie zasiadać do stołu co najwyżej czterem filozofom. Pozwolić podnosić filozofom sztućce tylko wtedy, gdy oba są dostępne. Zastosować rozwiązanie asymetryczne: filozofowie o nieparzystych numerach podnoszą sztućce w kolejności lewy - prawy, a ci o numerach parzystych, w kolejności odwrotnej. Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Sieci Petriego Proces 1 Proces 2 P(sem) P(sem) sem S.K. V(sem) S.K. V(sem) Arkadiusz Chrobot Sieci Petriego są matematycznym narzędziem analizy systemów współbieżnych i nadają się do modelowania problemów związanych z synchronizacją. Sieć Petriego jest grafem skierowanym, który składa się z dwóch rodzajów wierzchołków, nazywanych miejscami i przejściami. Przejścia modelują wykonywane operacje. Przejście może zostać odpalone tylko wtedy, gdy we wszystkich miejscach znajdujących się na końcu krawędzi wchodzących do przejścia znajdują się tokeny. Sieci Petriego można opisywać równaniami i udowadniać poprawność systemów modelowanych przez nie. Obok znajduje się przykład sieci modelującej rozwiązanie problemu sekcji krytycznej dla dwóch procesów przy użyciu semafora. Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Sieci Petriego Proces 1 Proces 2 P(sem) P(sem) sem S.K. V(sem) S.K. V(sem) Arkadiusz Chrobot Sieci Petriego są matematycznym narzędziem analizy systemów współbieżnych i nadają się do modelowania problemów związanych z synchronizacją. Sieć Petriego jest grafem skierowanym, który składa się z dwóch rodzajów wierzchołków, nazywanych miejscami i przejściami. Przejścia modelują wykonywane operacje. Przejście może zostać odpalone tylko wtedy, gdy we wszystkich miejscach znajdujących się na końcu krawędzi wchodzących do przejścia znajdują się tokeny. Sieci Petriego można opisywać równaniami i udowadniać poprawność systemów modelowanych przez nie. Obok znajduje się przykład sieci modelującej rozwiązanie problemu sekcji krytycznej dla dwóch procesów przy użyciu semafora. Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Sieci Petriego Proces 1 Proces 2 P(sem) P(sem) sem S.K. V(sem) S.K. V(sem) Arkadiusz Chrobot Sieci Petriego są matematycznym narzędziem analizy systemów współbieżnych i nadają się do modelowania problemów związanych z synchronizacją. Sieć Petriego jest grafem skierowanym, który składa się z dwóch rodzajów wierzchołków, nazywanych miejscami i przejściami. Przejścia modelują wykonywane operacje. Przejście może zostać odpalone tylko wtedy, gdy we wszystkich miejscach znajdujących się na końcu krawędzi wchodzących do przejścia znajdują się tokeny. Sieci Petriego można opisywać równaniami i udowadniać poprawność systemów modelowanych przez nie. Obok znajduje się przykład sieci modelującej rozwiązanie problemu sekcji krytycznej dla dwóch procesów przy użyciu semafora. Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Sieci Petriego Proces 1 Proces 2 P(sem) P(sem) sem S.K. V(sem) S.K. V(sem) Arkadiusz Chrobot Sieci Petriego są matematycznym narzędziem analizy systemów współbieżnych i nadają się do modelowania problemów związanych z synchronizacją. Sieć Petriego jest grafem skierowanym, który składa się z dwóch rodzajów wierzchołków, nazywanych miejscami i przejściami. Przejścia modelują wykonywane operacje. Przejście może zostać odpalone tylko wtedy, gdy we wszystkich miejscach znajdujących się na końcu krawędzi wchodzących do przejścia znajdują się tokeny. Sieci Petriego można opisywać równaniami i udowadniać poprawność systemów modelowanych przez nie. Obok znajduje się przykład sieci modelującej rozwiązanie problemu sekcji krytycznej dla dwóch procesów przy użyciu semafora. Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Sieci Petriego Proces 1 Proces 2 P(sem) P(sem) sem S.K. V(sem) S.K. V(sem) Arkadiusz Chrobot Sieci Petriego są matematycznym narzędziem analizy systemów współbieżnych i nadają się do modelowania problemów związanych z synchronizacją. Sieć Petriego jest grafem skierowanym, który składa się z dwóch rodzajów wierzchołków, nazywanych miejscami i przejściami. Przejścia modelują wykonywane operacje. Przejście może zostać odpalone tylko wtedy, gdy we wszystkich miejscach znajdujących się na końcu krawędzi wchodzących do przejścia znajdują się tokeny. Sieci Petriego można opisywać równaniami i udowadniać poprawność systemów modelowanych przez nie. Obok znajduje się przykład sieci modelującej rozwiązanie problemu sekcji krytycznej dla dwóch procesów przy użyciu semafora. Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Sieci Petriego Proces 1 Proces 2 P(sem) P(sem) sem S.K. V(sem) S.K. V(sem) Arkadiusz Chrobot Sieci Petriego są matematycznym narzędziem analizy systemów współbieżnych i nadają się do modelowania problemów związanych z synchronizacją. Sieć Petriego jest grafem skierowanym, który składa się z dwóch rodzajów wierzchołków, nazywanych miejscami i przejściami. Przejścia modelują wykonywane operacje. Przejście może zostać odpalone tylko wtedy, gdy we wszystkich miejscach znajdujących się na końcu krawędzi wchodzących do przejścia znajdują się tokeny. Sieci Petriego można opisywać równaniami i udowadniać poprawność systemów modelowanych przez nie. Obok znajduje się przykład sieci modelującej rozwiązanie problemu sekcji krytycznej dla dwóch procesów przy użyciu semafora. Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Sieci Petriego Proces 1 Proces 2 P(sem) P(sem) sem S.K. V(sem) S.K. V(sem) Arkadiusz Chrobot Sieci Petriego są matematycznym narzędziem analizy systemów współbieżnych i nadają się do modelowania problemów związanych z synchronizacją. Sieć Petriego jest grafem skierowanym, który składa się z dwóch rodzajów wierzchołków, nazywanych miejscami i przejściami. Przejścia modelują wykonywane operacje. Przejście może zostać odpalone tylko wtedy, gdy we wszystkich miejscach znajdujących się na końcu krawędzi wchodzących do przejścia znajdują się tokeny. Sieci Petriego można opisywać równaniami i udowadniać poprawność systemów modelowanych przez nie. Obok znajduje się przykład sieci modelującej rozwiązanie problemu sekcji krytycznej dla dwóch procesów przy użyciu semafora. Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Sieci Petriego Proces 1 Proces 2 P(sem) P(sem) sem S.K. V(sem) S.K. V(sem) Arkadiusz Chrobot Sieci Petriego są matematycznym narzędziem analizy systemów współbieżnych i nadają się do modelowania problemów związanych z synchronizacją. Sieć Petriego jest grafem skierowanym, który składa się z dwóch rodzajów wierzchołków, nazywanych miejscami i przejściami. Przejścia modelują wykonywane operacje. Przejście może zostać odpalone tylko wtedy, gdy we wszystkich miejscach znajdujących się na końcu krawędzi wchodzących do przejścia znajdują się tokeny. Sieci Petriego można opisywać równaniami i udowadniać poprawność systemów modelowanych przez nie. Obok znajduje się przykład sieci modelującej rozwiązanie problemu sekcji krytycznej dla dwóch procesów przy użyciu semafora. Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Komunikacja bezpośrednia lub pośrednia Buforowanie Sytuacje wyjątkowe Wprowadzenie Problemy synchronizacji procesów pojawiają się zawsze w kontekście szerszego zagadnienia jakim jest komunikacja międzyprocesorowa. Najprostszą i najszybszą formą komunikacji między grupą procesów jest komunikacja za pomocą pamięci dzielonej, jednakże dalsza część wykładu będzie dotyczyła komunikacji za pomocą systemu komunikatów. Większość współczesnych systemów operacyjnych umożliwia stosowanie obu form komunikacji. System operacyjny, aby zapewnić łączność za pomocą systemu komunikatów musi dostarczyć procesom dwóch operacji nadaj i odbierz oraz środków tworzenia łącza. W zależności od implementacji wymienionych składników możemy wyróżnić następujące rodzaje komunikacji: komunikacja bezpośrednia lub pośrednia, komunikacja symetryczna lub asymetryczna, komunikacja z buforowaniem automatycznym lub jawnym, komunikacja z wysyłaniem na zasadzie tworzenia kopii lub odwołania, komunikacja z komunikatami o stałej lub zmiennej długości. Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Komunikacja bezpośrednia lub pośrednia Buforowanie Sytuacje wyjątkowe Wprowadzenie Problemy synchronizacji procesów pojawiają się zawsze w kontekście szerszego zagadnienia jakim jest komunikacja międzyprocesorowa. Najprostszą i najszybszą formą komunikacji między grupą procesów jest komunikacja za pomocą pamięci dzielonej, jednakże dalsza część wykładu będzie dotyczyła komunikacji za pomocą systemu komunikatów. Większość współczesnych systemów operacyjnych umożliwia stosowanie obu form komunikacji. System operacyjny, aby zapewnić łączność za pomocą systemu komunikatów musi dostarczyć procesom dwóch operacji nadaj i odbierz oraz środków tworzenia łącza. W zależności od implementacji wymienionych składników możemy wyróżnić następujące rodzaje komunikacji: komunikacja bezpośrednia lub pośrednia, komunikacja symetryczna lub asymetryczna, komunikacja z buforowaniem automatycznym lub jawnym, komunikacja z wysyłaniem na zasadzie tworzenia kopii lub odwołania, komunikacja z komunikatami o stałej lub zmiennej długości. Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Komunikacja bezpośrednia lub pośrednia Buforowanie Sytuacje wyjątkowe Wprowadzenie Problemy synchronizacji procesów pojawiają się zawsze w kontekście szerszego zagadnienia jakim jest komunikacja międzyprocesorowa. Najprostszą i najszybszą formą komunikacji między grupą procesów jest komunikacja za pomocą pamięci dzielonej, jednakże dalsza część wykładu będzie dotyczyła komunikacji za pomocą systemu komunikatów. Większość współczesnych systemów operacyjnych umożliwia stosowanie obu form komunikacji. System operacyjny, aby zapewnić łączność za pomocą systemu komunikatów musi dostarczyć procesom dwóch operacji nadaj i odbierz oraz środków tworzenia łącza. W zależności od implementacji wymienionych składników możemy wyróżnić następujące rodzaje komunikacji: komunikacja bezpośrednia lub pośrednia, komunikacja symetryczna lub asymetryczna, komunikacja z buforowaniem automatycznym lub jawnym, komunikacja z wysyłaniem na zasadzie tworzenia kopii lub odwołania, komunikacja z komunikatami o stałej lub zmiennej długości. Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Komunikacja bezpośrednia lub pośrednia Buforowanie Sytuacje wyjątkowe Wprowadzenie Problemy synchronizacji procesów pojawiają się zawsze w kontekście szerszego zagadnienia jakim jest komunikacja międzyprocesorowa. Najprostszą i najszybszą formą komunikacji między grupą procesów jest komunikacja za pomocą pamięci dzielonej, jednakże dalsza część wykładu będzie dotyczyła komunikacji za pomocą systemu komunikatów. Większość współczesnych systemów operacyjnych umożliwia stosowanie obu form komunikacji. System operacyjny, aby zapewnić łączność za pomocą systemu komunikatów musi dostarczyć procesom dwóch operacji nadaj i odbierz oraz środków tworzenia łącza. W zależności od implementacji wymienionych składników możemy wyróżnić następujące rodzaje komunikacji: komunikacja bezpośrednia lub pośrednia, komunikacja symetryczna lub asymetryczna, komunikacja z buforowaniem automatycznym lub jawnym, komunikacja z wysyłaniem na zasadzie tworzenia kopii lub odwołania, komunikacja z komunikatami o stałej lub zmiennej długości. Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Komunikacja bezpośrednia lub pośrednia Buforowanie Sytuacje wyjątkowe Wprowadzenie Problemy synchronizacji procesów pojawiają się zawsze w kontekście szerszego zagadnienia jakim jest komunikacja międzyprocesorowa. Najprostszą i najszybszą formą komunikacji między grupą procesów jest komunikacja za pomocą pamięci dzielonej, jednakże dalsza część wykładu będzie dotyczyła komunikacji za pomocą systemu komunikatów. Większość współczesnych systemów operacyjnych umożliwia stosowanie obu form komunikacji. System operacyjny, aby zapewnić łączność za pomocą systemu komunikatów musi dostarczyć procesom dwóch operacji nadaj i odbierz oraz środków tworzenia łącza. W zależności od implementacji wymienionych składników możemy wyróżnić następujące rodzaje komunikacji: komunikacja bezpośrednia lub pośrednia, komunikacja symetryczna lub asymetryczna, komunikacja z buforowaniem automatycznym lub jawnym, komunikacja z wysyłaniem na zasadzie tworzenia kopii lub odwołania, komunikacja z komunikatami o stałej lub zmiennej długości. Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Komunikacja bezpośrednia lub pośrednia Buforowanie Sytuacje wyjątkowe Wprowadzenie Problemy synchronizacji procesów pojawiają się zawsze w kontekście szerszego zagadnienia jakim jest komunikacja międzyprocesorowa. Najprostszą i najszybszą formą komunikacji między grupą procesów jest komunikacja za pomocą pamięci dzielonej, jednakże dalsza część wykładu będzie dotyczyła komunikacji za pomocą systemu komunikatów. Większość współczesnych systemów operacyjnych umożliwia stosowanie obu form komunikacji. System operacyjny, aby zapewnić łączność za pomocą systemu komunikatów musi dostarczyć procesom dwóch operacji nadaj i odbierz oraz środków tworzenia łącza. W zależności od implementacji wymienionych składników możemy wyróżnić następujące rodzaje komunikacji: komunikacja bezpośrednia lub pośrednia, komunikacja symetryczna lub asymetryczna, komunikacja z buforowaniem automatycznym lub jawnym, komunikacja z wysyłaniem na zasadzie tworzenia kopii lub odwołania, komunikacja z komunikatami o stałej lub zmiennej długości. Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Komunikacja bezpośrednia lub pośrednia Buforowanie Sytuacje wyjątkowe Komunikacja bezpośrednia lub pośrednia W komunikacji bezpośredniej łącze jest tworzone tylko między parą procesów, przy czym może ono być jednokierunkowe lub dwukierunkowe. Procesy określają odbiorcę za pomocą jego identyfikatora, którym może być nazwa lub PID, podczas tworzenia łącza. W przypadku komunikacji pośredniej procesy przesyłają sobie komunikaty za pośrednictwem portu, który jest nazywany również skrzynką pocztową. Skrzynka ta może być tworzona za pomocą wywołania systemowego przez procesy. Właścicielem skrzynki zostaje proces, który wywołał to wywołanie, ale może on również przekazać prawa własności innemu procesowi. Port jest niszczony również za pomocą odpowiedniego wywołania systemowego. Prawa własności skrzynki mogą być również niezbywalne, wówczas taka skrzynka niszczona jest wraz z zakończeniem procesu-właściciela. W komunikacji pośredniej należy zapewnić system identyfikacji odbiorcy i nadawcy komunikatów znajdujących się w skrzynce. Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Komunikacja bezpośrednia lub pośrednia Buforowanie Sytuacje wyjątkowe Buforowanie Istnieją trzy najpopularniejsze scenariusze buforowania komunikatów wysyłanych przez łącze: 1 Pojemność zerowa - czyli brak buforowania, nadawca musi czekać, aż odbiorca odbierze komunikat 2 Pojemność ograniczona - bufor łącza może pomieścić ograniczoną liczbę komunikatów, nadawca czeka tylko wtedy, gdy bufor jest pełny, 3 Pojemność nieograniczona - bufor komunikatów ma nieograniczoną pojemność, w praktyce ten rodzaj buforowania otrzymuje się stosując dużo buforów i zapewniając że odbiorca będzie co najmniej tak szybki jak nadawca, Istnieją również dwa przypadki, które nie pasują do żadnej z powyższych kategorii: 1 nadawca nigdy nie jest opóźniany, a jeśli odbiorca nie zdąży odebrać komunikatu, to jest on po prostu tracony, 2 praca nadawcy jest wstrzymywana do czasu otrzymania przez niego potwierdzenia odbioru poprzedniego komunikatu. Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Komunikacja bezpośrednia lub pośrednia Buforowanie Sytuacje wyjątkowe Buforowanie Istnieją trzy najpopularniejsze scenariusze buforowania komunikatów wysyłanych przez łącze: 1 Pojemność zerowa - czyli brak buforowania, nadawca musi czekać, aż odbiorca odbierze komunikat 2 Pojemność ograniczona - bufor łącza może pomieścić ograniczoną liczbę komunikatów, nadawca czeka tylko wtedy, gdy bufor jest pełny, 3 Pojemność nieograniczona - bufor komunikatów ma nieograniczoną pojemność, w praktyce ten rodzaj buforowania otrzymuje się stosując dużo buforów i zapewniając że odbiorca będzie co najmniej tak szybki jak nadawca, Istnieją również dwa przypadki, które nie pasują do żadnej z powyższych kategorii: 1 nadawca nigdy nie jest opóźniany, a jeśli odbiorca nie zdąży odebrać komunikatu, to jest on po prostu tracony, 2 praca nadawcy jest wstrzymywana do czasu otrzymania przez niego potwierdzenia odbioru poprzedniego komunikatu. Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Komunikacja bezpośrednia lub pośrednia Buforowanie Sytuacje wyjątkowe Buforowanie Istnieją trzy najpopularniejsze scenariusze buforowania komunikatów wysyłanych przez łącze: 1 Pojemność zerowa - czyli brak buforowania, nadawca musi czekać, aż odbiorca odbierze komunikat 2 Pojemność ograniczona - bufor łącza może pomieścić ograniczoną liczbę komunikatów, nadawca czeka tylko wtedy, gdy bufor jest pełny, 3 Pojemność nieograniczona - bufor komunikatów ma nieograniczoną pojemność, w praktyce ten rodzaj buforowania otrzymuje się stosując dużo buforów i zapewniając że odbiorca będzie co najmniej tak szybki jak nadawca, Istnieją również dwa przypadki, które nie pasują do żadnej z powyższych kategorii: 1 nadawca nigdy nie jest opóźniany, a jeśli odbiorca nie zdąży odebrać komunikatu, to jest on po prostu tracony, 2 praca nadawcy jest wstrzymywana do czasu otrzymania przez niego potwierdzenia odbioru poprzedniego komunikatu. Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Komunikacja bezpośrednia lub pośrednia Buforowanie Sytuacje wyjątkowe Buforowanie Istnieją trzy najpopularniejsze scenariusze buforowania komunikatów wysyłanych przez łącze: 1 Pojemność zerowa - czyli brak buforowania, nadawca musi czekać, aż odbiorca odbierze komunikat 2 Pojemność ograniczona - bufor łącza może pomieścić ograniczoną liczbę komunikatów, nadawca czeka tylko wtedy, gdy bufor jest pełny, 3 Pojemność nieograniczona - bufor komunikatów ma nieograniczoną pojemność, w praktyce ten rodzaj buforowania otrzymuje się stosując dużo buforów i zapewniając że odbiorca będzie co najmniej tak szybki jak nadawca, Istnieją również dwa przypadki, które nie pasują do żadnej z powyższych kategorii: 1 nadawca nigdy nie jest opóźniany, a jeśli odbiorca nie zdąży odebrać komunikatu, to jest on po prostu tracony, 2 praca nadawcy jest wstrzymywana do czasu otrzymania przez niego potwierdzenia odbioru poprzedniego komunikatu. Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Komunikacja bezpośrednia lub pośrednia Buforowanie Sytuacje wyjątkowe Buforowanie Istnieją trzy najpopularniejsze scenariusze buforowania komunikatów wysyłanych przez łącze: 1 Pojemność zerowa - czyli brak buforowania, nadawca musi czekać, aż odbiorca odbierze komunikat 2 Pojemność ograniczona - bufor łącza może pomieścić ograniczoną liczbę komunikatów, nadawca czeka tylko wtedy, gdy bufor jest pełny, 3 Pojemność nieograniczona - bufor komunikatów ma nieograniczoną pojemność, w praktyce ten rodzaj buforowania otrzymuje się stosując dużo buforów i zapewniając że odbiorca będzie co najmniej tak szybki jak nadawca, Istnieją również dwa przypadki, które nie pasują do żadnej z powyższych kategorii: 1 nadawca nigdy nie jest opóźniany, a jeśli odbiorca nie zdąży odebrać komunikatu, to jest on po prostu tracony, 2 praca nadawcy jest wstrzymywana do czasu otrzymania przez niego potwierdzenia odbioru poprzedniego komunikatu. Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Komunikacja bezpośrednia lub pośrednia Buforowanie Sytuacje wyjątkowe Buforowanie Istnieją trzy najpopularniejsze scenariusze buforowania komunikatów wysyłanych przez łącze: 1 Pojemność zerowa - czyli brak buforowania, nadawca musi czekać, aż odbiorca odbierze komunikat 2 Pojemność ograniczona - bufor łącza może pomieścić ograniczoną liczbę komunikatów, nadawca czeka tylko wtedy, gdy bufor jest pełny, 3 Pojemność nieograniczona - bufor komunikatów ma nieograniczoną pojemność, w praktyce ten rodzaj buforowania otrzymuje się stosując dużo buforów i zapewniając że odbiorca będzie co najmniej tak szybki jak nadawca, Istnieją również dwa przypadki, które nie pasują do żadnej z powyższych kategorii: 1 nadawca nigdy nie jest opóźniany, a jeśli odbiorca nie zdąży odebrać komunikatu, to jest on po prostu tracony, 2 praca nadawcy jest wstrzymywana do czasu otrzymania przez niego potwierdzenia odbioru poprzedniego komunikatu. Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Komunikacja bezpośrednia lub pośrednia Buforowanie Sytuacje wyjątkowe Sytuacje wyjątkowe Podobnie jak w innych etapach przetwarzania informacji, tak i w komunikacji może dojść do powstania sytuacji wyjątkowych. Najczęściej spotykane to: Zakończenie procesu Jeśli odbiorca czeka na nadawcę, a on zakończył się, to to oczekiwanie będzie nieskończone. Zakończenie odbiorcy jest mniej groźne w przypadku komunikacji buforowanej, chyba że nadawca musi czekać na potwierdzenie odbioru. W każdym z tych przypadków system operacyjny powinien interweniować. Utrata komunikatu Komunikat, jeśli jest nadawany przez sieć może ulec zagubieniu lub zniszczeniu. Istnieją trzy metody radzenia sobie z takim zdarzeniem: za wykrycie zagubienia komunikatu i jego retransmisję odpowiedzialny jest proces-nadawca (postępowanie właściwe dla protokołów bezpołączeniowych, np. UDP), system operacyjny wykrywa zaginięcie i powiadamia o nim nadawcę, który retransmituje komunikat, system operacyjny jest odpowiedzialny za wykrycie zagubienia pakietu i jego retransmisję (postępowanie właściwe dla protokołów połączeniowych, np. TCP). Zniekształcenie komunikatu Komunikat przesyłany przez sieć może ulec przekłamaniu. Celem wykrycia takiej sytuacji lub wykrycia i naprawy stosuje się redundancję (informację nadmiarową), w postaci kodów detekcyjnych (np. CRC) lub detekcyjno-korekcyjnych np. kody Reeda-Solomona. Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Komunikacja bezpośrednia lub pośrednia Buforowanie Sytuacje wyjątkowe Sytuacje wyjątkowe Podobnie jak w innych etapach przetwarzania informacji, tak i w komunikacji może dojść do powstania sytuacji wyjątkowych. Najczęściej spotykane to: Zakończenie procesu Jeśli odbiorca czeka na nadawcę, a on zakończył się, to to oczekiwanie będzie nieskończone. Zakończenie odbiorcy jest mniej groźne w przypadku komunikacji buforowanej, chyba że nadawca musi czekać na potwierdzenie odbioru. W każdym z tych przypadków system operacyjny powinien interweniować. Utrata komunikatu Komunikat, jeśli jest nadawany przez sieć może ulec zagubieniu lub zniszczeniu. Istnieją trzy metody radzenia sobie z takim zdarzeniem: za wykrycie zagubienia komunikatu i jego retransmisję odpowiedzialny jest proces-nadawca (postępowanie właściwe dla protokołów bezpołączeniowych, np. UDP), system operacyjny wykrywa zaginięcie i powiadamia o nim nadawcę, który retransmituje komunikat, system operacyjny jest odpowiedzialny za wykrycie zagubienia pakietu i jego retransmisję (postępowanie właściwe dla protokołów połączeniowych, np. TCP). Zniekształcenie komunikatu Komunikat przesyłany przez sieć może ulec przekłamaniu. Celem wykrycia takiej sytuacji lub wykrycia i naprawy stosuje się redundancję (informację nadmiarową), w postaci kodów detekcyjnych (np. CRC) lub detekcyjno-korekcyjnych np. kody Reeda-Solomona. Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Komunikacja bezpośrednia lub pośrednia Buforowanie Sytuacje wyjątkowe Sytuacje wyjątkowe Podobnie jak w innych etapach przetwarzania informacji, tak i w komunikacji może dojść do powstania sytuacji wyjątkowych. Najczęściej spotykane to: Zakończenie procesu Jeśli odbiorca czeka na nadawcę, a on zakończył się, to to oczekiwanie będzie nieskończone. Zakończenie odbiorcy jest mniej groźne w przypadku komunikacji buforowanej, chyba że nadawca musi czekać na potwierdzenie odbioru. W każdym z tych przypadków system operacyjny powinien interweniować. Utrata komunikatu Komunikat, jeśli jest nadawany przez sieć może ulec zagubieniu lub zniszczeniu. Istnieją trzy metody radzenia sobie z takim zdarzeniem: za wykrycie zagubienia komunikatu i jego retransmisję odpowiedzialny jest proces-nadawca (postępowanie właściwe dla protokołów bezpołączeniowych, np. UDP), system operacyjny wykrywa zaginięcie i powiadamia o nim nadawcę, który retransmituje komunikat, system operacyjny jest odpowiedzialny za wykrycie zagubienia pakietu i jego retransmisję (postępowanie właściwe dla protokołów połączeniowych, np. TCP). Zniekształcenie komunikatu Komunikat przesyłany przez sieć może ulec przekłamaniu. Celem wykrycia takiej sytuacji lub wykrycia i naprawy stosuje się redundancję (informację nadmiarową), w postaci kodów detekcyjnych (np. CRC) lub detekcyjno-korekcyjnych np. kody Reeda-Solomona. Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Komunikacja bezpośrednia lub pośrednia Buforowanie Sytuacje wyjątkowe Sytuacje wyjątkowe Podobnie jak w innych etapach przetwarzania informacji, tak i w komunikacji może dojść do powstania sytuacji wyjątkowych. Najczęściej spotykane to: Zakończenie procesu Jeśli odbiorca czeka na nadawcę, a on zakończył się, to to oczekiwanie będzie nieskończone. Zakończenie odbiorcy jest mniej groźne w przypadku komunikacji buforowanej, chyba że nadawca musi czekać na potwierdzenie odbioru. W każdym z tych przypadków system operacyjny powinien interweniować. Utrata komunikatu Komunikat, jeśli jest nadawany przez sieć może ulec zagubieniu lub zniszczeniu. Istnieją trzy metody radzenia sobie z takim zdarzeniem: za wykrycie zagubienia komunikatu i jego retransmisję odpowiedzialny jest proces-nadawca (postępowanie właściwe dla protokołów bezpołączeniowych, np. UDP), system operacyjny wykrywa zaginięcie i powiadamia o nim nadawcę, który retransmituje komunikat, system operacyjny jest odpowiedzialny za wykrycie zagubienia pakietu i jego retransmisję (postępowanie właściwe dla protokołów połączeniowych, np. TCP). Zniekształcenie komunikatu Komunikat przesyłany przez sieć może ulec przekłamaniu. Celem wykrycia takiej sytuacji lub wykrycia i naprawy stosuje się redundancję (informację nadmiarową), w postaci kodów detekcyjnych (np. CRC) lub detekcyjno-korekcyjnych np. kody Reeda-Solomona. Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Komunikacja bezpośrednia lub pośrednia Buforowanie Sytuacje wyjątkowe Pytania ? Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów Plan wykładu Synchronizacja Środki synchronizacji Klasyczne problemy synchronizacji Sieci Petriego Komunikacja międzyprocesowa Komunikacja bezpośrednia lub pośrednia Buforowanie Sytuacje wyjątkowe Koniec Dziękuję Państwu za uwagę! Arkadiusz Chrobot Systemy Operacyjne - synchronizacja i komunikacja procesów