Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Systemy operacyjne Wykład 6 Procesy dr inż. Wojciech Bieniecki Instytut Nauk Ekonomicznych i Informatyki 1.

Podobne prezentacje


Prezentacja na temat: "Systemy operacyjne Wykład 6 Procesy dr inż. Wojciech Bieniecki Instytut Nauk Ekonomicznych i Informatyki 1."— Zapis prezentacji:

1 Systemy operacyjne Wykład 6 Procesy dr inż. Wojciech Bieniecki Instytut Nauk Ekonomicznych i Informatyki http://wbieniec.kis.p.lodz.pl/pwsz 1

2 Czym jest proces 2 Program to plik wykonywalny na dysku (lub innym rodzaju pamięci masowej) Proces to program uruchomiony i wykonywany w pamięci operacyjnej Program jest pojęciem statycznym - sekwencja symboli opisująca obliczenia zgodnie z pewnymi regułami zwanymi językiem programowania. Proces ma naturę dynamiczną (zmieniającą się). Zmianie ulegają m.in. Proces posiada własną przestrzeń adresową Licznik rozkazów (adres ostatnio wykonywanej instrukcji) Rejestry procesora Wskaźnik stosu Kod Dane zainicjalizowane Dane niezainicjalizowane Stos Uruchomienie programu

3 Model procesu 3 Z punktu widzenia procesora na komputerze jest wykonywany jeden program. Z punktu widzenia systemu operacyjnego jednocześnie jest wykonywanych wiele programów. Wiele liczników rozkazów (SO) Jeden licznik rozkazów (CPU)

4 Równoległość działania procesów 4 Równoległość działania procesów osiągana jest przez mechanizm przydzielania czasu procesora poszczególnym wykonującym się procesom. współpracy (cooperative multitasking), proces sam decyduje, kiedy oddać czas procesora innym procesom, wywłaszczania (pre-emptive multitasking), o dostępie procesów do procesora decyduje systemowy planista, który przydziela procesowi kwant czasu procesora, po upływie którego odsuwa go od procesora i przydziela kolejny kwant czasu innemu procesowi. Każdy proces uzyskuje dostęp do procesora na krótki czas (kwant czasu), po czym „oddaje procesor” innemu procesowi. Zmiana procesu wykonywanego przez procesor może dokonywać się na zasadzie:

5 Stany procesu 5 Nowy – proces został utworzony. Gotowy – proces czeka na przydział procesora Proces mógłby się wykonywać, ale nie wykonuje się, ponieważ w tej chwili działa inny proces Aktywny – wykonywane są instrukcje procesu W systemie z jednym procesorem w danej chwili tylko jeden proces może być aktywny Oczekujący (uśpiony) – proces czeka na zdarzenie (np. zakończenie operacji I/O). Proces w stanie uśpionym nie otrzyma procesora Zakończony – proces zakończył działanie

6 Przejścia pomiędzy stanami procesów 6 1 (Nowy -> Gotowy). Nowo utworzony proces przechodzi do kolejki procesów gotowych. Zarządza Planista długoterminowy (ang. long-term scheduler) 2 (Gotowy => Aktywny) Proces otrzymuje przydział procesora. 3 (Aktywny => Gotowy) Procesowi został odebrany procesor (i przekazany innemu procesowi). Przejściami 2 oraz 3 zarządza planista krótkoterminowy (ang. short-term scheduler).

7 Przejścia pomiędzy stanami procesów 7 4 (Aktywny => Oczekujący) Proces przechodzi w stan oczekiwania na zajście zdarzenia. (np. na zakończenie operacji I/O) 5 (Oczekujący => Gotowy) Zdarzenie na które czekał proces nastąpiło (zakończenie transmisji). Przejścia 4 oraz 5 są wykonywane przy przeprowadzeniu synchronicznej operacji wejścia/wyjścia. 6 (Aktywny => Zakończony). Proces zakończył pracę (np. funkcja exit, błąd ochrony) 7 (Gotowy =>Zakończony oraz Oczekujący => Zakończony). Proces został zakończony przez inny proces (np. funkcją kill).

8 Proces w stanie zawieszonym 8 Wprowadzono dodatkowy stan procesu Proces oczekuje bardzo długo na operacje we-wy (np. polecenie login) Przejście do stanu zawieszonego Pamięć zajmowana przez proces podlega wymianie (ang. swapping) tzn. zapisaniu na dysk do obszaru wymiany (swap area). Zwolniona pamięć może być wykorzystana przez inne procesy. Po zajściu zdarzenia proces ponownie wczytywany z obszaru wymiany Inne przyczyny zawieszenia procesu Żądanie użytkownika Brak pamięci w systemie Proces co jakiś czas cyklicznie wykonuje jakąś czynność np. sprawozdawczość Przejściami do i z stanu zawieszenie zarządza planista średnioterminowy (ang. medium-term scheduler)

9 Diagram przejść 9 NOWY (new) NOWY (new) GOTOWY (ready) GOTOWY (ready) AKTYWNY (running) AKTYWNY (running) ZAKOŃCZONY (exit) ZAKOŃCZONY (exit) OCZEKUJĄCY (blocked) OCZEKUJĄCY (blocked) ZAWIESZONY (suspended) ZAWIESZONY (suspended) admit release activate suspend event occurs event wait dispatch timeout Planista długoterminowy Planista krótkoterminowy najważniejszy i występujący w każdym systemie.– Rozstrzyga problem któremu procesowi w stanie gotowym przydzielić procesor Planista średnioterminowy

10 Planiści i koordynatorzy 10 Decyzje o tym w jakiej kolejności i które procesy zostaną umieszczone w kolejkach podejmują mechanizmy systemu operacyjnego nazywane mechanizmami szeregującymi lub planistami (ang. scheduler). Najważniejsze mechanizmy szeregujące odpowiedzialne są za przydział procesora procesom gotowym do wykonania. We współczesnych, głównie interaktywnych systemach operacyjnych istnieje tylko jeden rodzaj takich planistów. Jest to planista krótkoterminowy. Taki planista wybiera z kolejki procesów gotowych proces, który jako następny otrzyma procesor. Wywoływany jest on bardzo często i musi krótko działać, aby nie tworzyć zbyt dużych narzutów czasowych.

11 Planiści i koordynatorzy 11 Drugi rodzaj planistów, który był właściwy głównie dla systemów wsadowych, to planiści długoterminowi. Taki planista był wywoływany wtedy, kiedy kończył swe działanie jakiś proces. Jego zadaniem było wybrać zadanie z puli zadań do wykonania, które trafiało do kolejki zadań gotowych do wykonania. Planista długoterminowy dbał o to by w tej kolejce znajdowały sie zarówno procesy ograniczone przez wejście-wyjście jak i procesy ograniczone przez procesor. Dzięki temu praca tych jednostek była równoważona. Dbał on również o zachowanie stopnia wieloprogramowości (stałej w czasie liczby procesów w pamięci). W niektórych systemach operacyjnych stosowano również planistów średnioterminowych. Ich zadanie polegało na podejmowaniu decyzji, który z procesów ma być wycofany z pamięci operacyjnej do pamięci pomocniczej, aby umożliwić wykonanie innym procesom.

12 Planiści i koordynatorzy 12 Planista (ang. scheduler) to mechanizm podejmujący decyzje o tym w jakiej kolejności i które procesy zostaną umieszczone w kolejkach. Najważniejsze mechanizmy szeregujące odpowiedzialne są za przydział procesora procesom gotowym do wykonania. Planista krótkoterminowy: - Jedyne rozwiązanie dla współczesnych interaktywnych SO - Zajmuje się wyborem z kolejki procesów gotowych proces, który otrzyma procesor. - Wywoływany jest on bardzo często i musi krótko działać Planista długoterminowy - Charakterystyczny dla systemów wsadowych - Wywoływany, gdy jakiś proces kończy działanie - Wybiera zadanie z puli zadań do wykonania i umieszcza w kolejce. - Równoważy wykorzystanie różnych zasobów komputera Planista średnioterminowy - Podejmowanie decyzji o zawieszeniu procesu aby umożliwić wykonanie innym procesom.

13 Blok kontrolny procesu 13 Blok kontrolny procesu (ang. Process Control Block, PCB) zwany także blokiem kontrolnym zadania – jest to obszar pamięci operacyjnej, zarezerwowany przez jądro systemu operacyjnego na potrzeby przechowywania wielu ważnych i mniej istotnych informacji o każdym, aktualnie istniejącym i zarejestrowanym w tym systemie procesie. PCB jest reprezentacją procesu w systemie operacyjnym. – Stan procesu – Identyfikator procesu – Licznik rozkazów – Rejestry procesora – Informacja o przydzielonej pamięci – Informacja o otwartych plikach – Informacja o połączeniach sieciowych – Informacja niezbędna do tworzenia systemowych struktur danych. System operacyjny posługuje się różnymi kolejkami procesów. Jeżeli kolejki są implementowane jako listy z dowiązaniami, PCB może zawierać dowiązanie (wskaźnik) do następnego elementu w kolejce

14 Kolejki 14 Podstawowa struktura danych wykorzystywana w zarządzaniu procesami są opisane wcześniej deskryptory procesów. Bloki kontrolne wszystkich procesów, które są gotowe do wykonania powiązane są w kolejkę procesów gotowych. Wyraz kolejka w tym kontekście nie oznacza konkretnej struktury danych, a miejsce w którym procesy oczekują na przydział procesora. Taka kolejka może być stosem, kolejką FIFO lub innym rodzajem listy, a nawet innym rodzajem struktur danych (tablica, drzewem). System operacyjny utrzymuje również kolejki zadań dla urządzeń wejścia-wyjścia. Te kolejki tworzą deskryptory procesów będących w stanie oczekiwania. Często upraszczając nie mówimy, ze deskryptor procesu jest w kolejce lecz, że proces znajduje się w kolejce.

15 Wykorzystanie kolejek w systemie operacyjnym 15 Ready queue – kolejka procesów w stanie gotowym. Proces jest przenoszony pomiędzy kolejkami Kolejki procesów w stanie zablokowanym (oczekujących na wystąpienie zdarzenia). – Z każdym typem zdarzenia związana jedna kolejka. – Dzięki temu system wydajnie implementuje przejścia 4 oraz 5 W rzeczywistym systemie mogą być setki kolejek dla procesów w stanie oczekującym.

16 Kontekst procesu 16 Informację niezbędną do wstrzymania lub wznowienia procesu nazywamy kontekstem procesu. Przełączanie kontekstu jest to proces zachowywania i odtwarzania stanu kontekstu, tak by wiele procesów mogło dzielić zasoby pojedynczego procesora. W skład kontekstu procesu wchodzi blok sterujący oraz kontekst pamięci. Kontekst pamięci to obszar pamięci, w którym wykonuje się proces. Polega na przydzielaniu procesorowi kolejnych zadań i jest ważną cechą wielozadaniowego systemu operacyjnego. Przełączanie kontekstu jest zadaniem intensywnym obliczeniowo. Za przełączanie kontekstu odpowiedzialny jest dyspozytor, koordynator (ang. dispatcher). Zadania dispatchera to: - przełączeniu kontekstu procesów, - przełączeniu procesora w tryb użytkownika - wykonaniu skoku do odpowiedniego adresu w programie użytkownika

17 Przełączanie kontekstu procesu 17

18 Przyczyny przełączania procesów Przełączanie procesów może być wynikiem – jawnego wywołania w programie funkcji systemu operacyjnego np. w celu uruchomienia nowego procesu – Win32API – Windows CreateProcess; – obsługi wyjątków i wówczas mówimy o implikowanym przełączaniu procesów; – zdarzenia zewnętrznego – przerwania W systemach z podziałem czasu najczęstszą przyczyną przełączania procesów jest przerwanie działania procesu ze względu na upływ czasu, co powoduje wywołanie procesu nadzoru. Czas, który jest potrzebny na przełączenie procesów jest z punktu użytkownika stracony.

19 Przełączenie kontekstu a przełączenie trybu 19 Przełączenie kontekstu (context switch) to zmiana procesu. W większości systemów (Unix, Windows) przyjęto model, w którym funkcje systemu wykonują się w kontekście procesu użytkownika. W uproszczeniu model ten zakłada, że system operacyjny jest kolekcją procedur wywoływanych przez procesy w celu wykonania pewnych usług. Przejście od programu użytkownika do programu jądra w wyniku wywołania funkcji systemowej (przerwanie programowe) lub przerwania sprzętowego wiąże się z przełączeniem trybu. Zmiana trybu jest znacznie mniej kosztowna niż zmiana kontekstu. Przełączenie trybu (mode switch) to zmiana trybu pracy procesora (jądra ↔ użytkownika)

20 Utworzenie procesu 20 Proces rodzicielski (macierzysty) tworzy proces potomny, który z kolei może stworzyć kolejne procesy. Powstaje drzewo procesów (np. w systemie Unix).

21 Utworzenie procesu 21 Proces macierzysty może rozdzielać własne zasoby między procesy potomne tak, że proces rodzicielski i potomny mogą: Kiedy proces powołuje do życia nowy proces może w zależności od systemu: kontynuować działanie współbieżnie ze swoimi potomkami; oczekiwać, póki wszystkie jego procesy potomne nie zakończą działania. współdzielić część zasobów współdzielić wszystkie zasoby nie współdzielić żadnych zasobów Przestrzeń adresowa – Odrębna przestrzeń adresowa dla procesu potomnego – Proces potomny i rodzicielski wykonują się w tej samej przestrzeni adresowej

22 Tworzenie procesu – funkcja fork 22 W UNIX każdemu procesowi przyporządkowany jest jednoznaczny identyfikator PID, będący liczbą całkowitą. Proces potomny tworzy się za pomocą funkcji systemowej fork. Proces potomny zawiera kopię przestrzeni adresowej procesu macierzystego, co ułatwia procesowi macierzystemu komunikację z procesem potomnym. Oba procesy kontynuują działanie od instrukcji następnej po fork, z tą różnicą że wartość zwracana przez funkcję fork do procesu potomnego wynosi zero, natomiast proces macierzysty otrzymuje niezerowy identyfikator swojego potomka. #include int main(int argc, char *argv[]) { int pid; pid = fork(); if (pid < 0) { /* Błąd !!! */ fprintf(stderr, "Blad Fork"); exit(-1); } else if (pid == 0) { /* proces potomny */ execlp("/bin/ls","ls",NULL); } else { /* proces rodzicielski */ wait(NULL); printf("Child Complete"); exit(0); }

23 Tworzenie procesu - Unix 23 vfork działa bardzo podobnie jak fork zakładając, że proces potomny natychmiast wywoła exit lub którąś z funkcji z rodziny exec Rodzina funkcji exec dokonuje wymiany pamięci aktualnie wykonywanego programu na wskazany w parametrze plik programu, który następnie zostanie załadowany do pamięci. proces wołający nigdy nie wraca z exec (chyba że powstanie błąd) wait – blokuje proces do momentu zakończenia procesu potomnego #include int main(int argc, char *argv[]) { int pid; pid = fork(); if (pid < 0) { /* Błąd !!! */ fprintf(stderr, "Blad Fork"); exit(-1); } else if (pid == 0) { /* proces potomny */ execlp("/bin/ls","ls",NULL); } else { /* proces rodzicielski */ wait(NULL); printf("Child Complete"); exit(0); }

24 Tworzenie procesu – Win32 API CreateProcess 24 BOOL CreateProcess( LPCTSTR lpApplicationName, // wskaźnik do nazwy wykonywalnego modułu LPTSTR lpCommandLine, // wskaźnik do łańcucha polecenia (linia poleceń) LPSECURITY_ATTRIBUTES lpProcessAttributes, // wskaźnik do process security attributes LPSECURITY_ATTRIBUTES lpThreadAttributes, // wskaźnik do thread security attributes BOOL bInheritHandles, // flaga dziedziczenia uchwytów DWORD dwCreationFlags, // flagi tworzenia LPVOID lpEnvironment, // wskaźnik do new environment block LPCTSTR lpCurrentDirectory, // wskaźnik do aktualnej nazwy katalogowej LPSTARTUPINFO lpStartupInfo,// wskaźnik do struktury STARTUPINFO LPPROCESS_INFORMATION lpProcessInformation // wskaźnik do struktury ROCESS_INFORMATION );

25 Zakończenie procesu 25 Proces kończy swoje działanie wówczas gdy wykona ostatnią instrukcję. Proces sam podejmuje decyzję o zakończeniu pracy – wywołując odpowiednie wywołanie systemowe. (system Unix: exit ). W programie w języku C jest to robione automatycznie po zakończeniu funkcji main Proces może zostać zakończony w wyniku akcji innego procesu – Unix: proces otrzymał sygnał SIGKILL. – Polecenie kill w shellu, funkcje systemowe raise oraz kill. Proces został zakończony przez system operacyjny – Naruszenie mechanizmów ochrony – Przekroczenie ograniczeń na przyznany czas procesora. – Proces rodzicielski się zakończył Wiele systemów nie pozwala na istnienie potomka po zakończeniu procesu macierzystego. W takich systemach, jeśli proces macierzysty kończy działanie, to również wszystkie jego procesy potomne muszą zostać zakończone. Zjawisko takie jest nazywane zakończeniem kaskadowym i jest zazwyczaj inicjowane przez system operacyjny.

26 Sieroty i zombi 26 Program tworzy proces-sierotę, który będzie istniał przez około 30 sekund. #include main(){ if (fork() == 0){ sleep(30); exit(0); } exit(0); } #include main(){ if (fork() == 0){ sleep(30); exit(0); } exit(0); } Po zakończeniu działania proces potomny kończy się i przekazuje status zakończenia. Metodą fork tworzymy proces potomny, który wykonuje warunek if (idzie spać na 30 sekund a następnie kończy się dzięki funkcji exit). Współbieżnie działający proces macierzysty kończy swoje działanie zaraz po utworzeniu potomka, osierocając go w ten sposób. Status ten może zostać pobrany przez jego przodka w wyniku wywołania funkcji systemowej wait.

27 Sieroty i zombi 27 Program tworzy proces-zombi, który będzie istniał przez około 30 sekund. #include main(){ if (fork() == 0) exit(0); sleep(30); wait(NULL); } #include main(){ if (fork() == 0) exit(0); sleep(30); wait(NULL); } Proces macierzysty zwleka z odebraniem tego statusu śpiąc przez 30 sekund, a dopiero później wywołuje funkcję wait, co usuwa proces-zombi. Metodą fork tworzymy proces potomny, który natychmiast kończy swoje działanie przez wywołanie funkcji exit przekazując przy tym status zakończenia. Do czasu wykonania funkcji wait przez przodka status potomka przechowywany jest w tablicy procesów na pozycji odpowiadającej zakończonemu procesowi. Proces taki istnieje zatem w tablicy procesów pomimo, że zakończył już wykonywanie programu i zwolnił wszystkie pozostałe zasoby systemu (pamięć, procesor, pliki). Proces potomny, który zakończył swoje działanie i czeka na przekazanie statusu zakończenia przodkowi, określany jest terminem zombi.

28 Literatura 28 Ważniak – laboratorium z systemów operacyjnych http://wazniak.mimuw.edu.pl/index.php?title=Systemy_operacyjne#Laboratorium Wojciech Kwedlo, Wykład z Systemów Operacyjnych Wydział Informatyki Politechniki Białostockiej http://aragorn.pb.bialystok.pl/~wkwedlo/OS-Slides-new.html dr inż. Jerzy Ułasiewicz Programowanie aplikacji współbieżnych – Sygnały i ich obsługa http://www.zak.ict.pwr.wroc.pl/ulasiewicz/ dr Anna Kobusińska, Politechnika Poznańska. Materiały dydaktyczne http://www.cs.put.poznan.pl/akobusinska/ dr inż. Paweł Paduch, Katedra Informatyki Politechniki Świętokrzyskiej w Kielcach Wykład z Programowania współbieżnego http://achilles.tu.kielce.pl/Members/ppaduch/ Beej's Guide to Unix IPC http://beej.us/guide/bgipc/ Robert Love: Linux. Programowanie systemowe. Helion 2008 Stevens R.W.: Programowanie w środowisku systemu UNIX. WNT, 2002 Havilland K., Gray D., Salama B.: Unix - programowanie systemowe. ReadMe, 1999


Pobierz ppt "Systemy operacyjne Wykład 6 Procesy dr inż. Wojciech Bieniecki Instytut Nauk Ekonomicznych i Informatyki 1."

Podobne prezentacje


Reklamy Google