Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Systemy operacyjne Wykład 6a Procesy dr inż. Wojciech Bieniecki

Podobne prezentacje


Prezentacja na temat: "Systemy operacyjne Wykład 6a Procesy dr inż. Wojciech Bieniecki"— Zapis prezentacji:

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

2 Czym jest proces Uruchomienie programu
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. Licznik rozkazów (adres ostatnio wykonywanej instrukcji) Rejestry procesora Wskaźnik stosu Proces posiada własną przestrzeń adresową Kod Uruchomienie programu Dane zainicjalizowane Dane niezainicjalizowane Stos

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

4 Stany procesu 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

5 Przejścia pomiędzy stanami procesów
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). 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).

6 Proces w stanie zawieszonym
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)

7 Diagram przejść dispatch NOWY GOTOWY AKTYWNY admit timeout activate
(new) GOTOWY (ready) AKTYWNY (running) admit timeout activate event occurs event wait release ZAWIESZONY (suspended) suspend OCZEKUJĄCY (blocked) ZAKOŃCZONY (exit) 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

8 Planiści i koordynatorzy
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 nastepny otrzyma procesor. Wywoływany jest on bardzo czesto i musi krótko działac, aby nie tworzyc zbyt duzych narzutów czasowych. Drugi rodzaj planistów, który był własciwy głównie dla systemów wsadowych, to planisci długoterminowi. Taki planista był wywoływany wtedy, kiedy konczył swe działanie jakis proces. Jego zadaniem było wybrac zadanie z puli zadan do wykonania, które trafiało do kolejki zadan gotowych do wykonania. Planista długoterminowy dbał o to by w tej kolejce znajdowały sie zarówno procesy ograniczone przez wejscie-wyjscie jak i procesy ograniczone przez procesor. Dzieki temu praca tych jednostek była równowazona. Dbał on równiez o zachowanie stopnia wieloprogramowosci (stałej w czasie liczby procesów w pamieci). W niektórych systemach operacyjnych stosowano równiez planistów srednioterminowych. Ich zadanie polegało na podejmowaniu decyzji, który z procesów ma byc wycofany z pamieci operacyjnej do pamieci pomocniczej, aby umozliwic wykonanie innym procesom.

9 Planiści i koordynatorzy
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.

10 Blok kontrolny procesu
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

11 Kolejki 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.

12 Wykorzystanie kolejek w systemie operacyjnym
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.

13 Kontekst procesu Informację niezbędną do wstrzymania lub wznowienia procesu nazywamy kontekstem procesu. 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. Przełączanie kontekstu jest to proces zachowywania i odtwarzania stanu kontekstu, tak by wiele procesów mogło dzielić zasoby pojedynczego procesora. 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

14 Przełączanie kontekstu procesu

15 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.

16 Przełączenie kontekstu a przełączenie trybu
Przełączenie kontekstu (context switch) to zmiana procesu. Przełączenie trybu (mode switch) to zmiana trybu pracy procesora (jądra ↔ użytkownika) 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.

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

18 Utworzenie procesu Proces macierzysty może rozdzielać własne zasoby między procesy potomne tak, że proces rodzicielski i potomny mogą: współdzielić część zasobów współdzielić wszystkie zasoby nie współdzielić żadnych zasobów 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. Przestrzeń adresowa – Odrębna przestrzeń adresowa dla procesu potomnego – Proces potomny i rodzicielski wykonują się w tej samej przestrzeni adresowej

19 Tworzenie procesu – funkcja fork
#include <stdio.h> #include <unistd.h> 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); 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.

20 Tworzenie procesu - Unix
#include <stdio.h> #include <unistd.h> 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); 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

21 Tworzenie procesu – Win32 API CreateProcess
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 );

22 Zakończenie procesu 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.

23 Sieroty i zombi Program tworzy proces-sierotę, który będzie istniał przez około 30 sekund. 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). #include <stdio.h> main(){ if (fork() == 0){ sleep(30); exit(0); } Współbieżnie działający proces macierzysty kończy swoje działanie zaraz po utworzeniu potomka, osierocając go w ten sposób. Po zakończeniu działania proces potomny kończy się i przekazuje status zakończenia. Status ten może zostać pobrany przez jego przodka w wyniku wywołania funkcji systemowej wait.

24 Sieroty i zombi 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. Program tworzy proces-zombi, który będzie istniał przez około 30 sekund. #include <stdio.h> main(){ if (fork() == 0) exit(0); sleep(30); wait(NULL); } 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. Proces macierzysty zwleka z odebraniem tego statusu śpiąc przez 30 sekund, a dopiero później wywołuje funkcję wait, co usuwa proces-zombi.

25 Literatura Ważniak – laboratorium z systemów operacyjnych
Wojciech Kwedlo, Wykład z Systemów Operacyjnych Wydział Informatyki Politechniki Białostockiej dr inż. Jerzy Ułasiewicz Programowanie aplikacji współbieżnych – Sygnały i ich obsługa dr Anna Kobusińska, Politechnika Poznańska. Materiały dydaktyczne dr inż. Paweł Paduch, Katedra Informatyki Politechniki Świętokrzyskiej w Kielcach Wykład z Programowania współbieżnego Beej's Guide to Unix IPC 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 6a Procesy dr inż. Wojciech Bieniecki"

Podobne prezentacje


Reklamy Google