Wprowadzenie do systemu operacyjnego Linux zarzdzanie procesami
plan funkcje i struktura jdra funkcje systemowe, pułapki i przerwania zarzdzanie procesami: charakterystyka ogólna tworzenie, usuwanie i zawieszanie procesu polecenia dotyczce procesów sygnały i ich wykorzystywanie 2
plan zarzdzanie pamici operacyjn zarzdzanie urzdzeniami wejcia/wyjcia zarzdzanie plikami uwagi kocowe bibliografia 3
jdro jest to centralna cz systemu operacyjnego realizuje zarzdzanie: procesami, pamici operacyjn i plikami, oraz obsług operacji wejcia/wyjcia 4
jdro działania systemu operacyjnego w obrbie jdra dzielimy na: obsług funkcji systemowych obsług pułapek obsług przerwa 5
funkcje i struktura jdra w jdrze mona wyróni dwie czci: t która obsługuje zastosowania, i t, która obsługuje przerwania 6
struktura jdra [KS1993] proces uytkownika funkcja systemowa pułapka czobsł. zastosowania czobsł. przerwania sprzt przerwania 7
funkcje i struktura jdra cz obsługujca zastosowania podejmuje okrelone akcje w odpowiedzi na wywołania funkcji systemowych i pułapki jest ona bibliotek programów wykorzystywanych przez wiele procesów w trybie jdra 8
funkcje i struktura jdra cz obsługujca przerwania jest zbiorem programów, które s wywoływane w chwili pojawienia si przerwa sprztowych przerwania s generowane przez urzdzenia wejcia/wyjcia i np. zegar czasu rzeczywistego 9
funkcje systemowe wywołania funkcji systemowych pozwalaj na dostp do operacji, dla których nie istniej standardowe instrukcje w jzyku wysokiego poziomu mona je traktowa jak polecenia dla jdra, mona si do nich odwoływa z programów napisanych w jzyku C [KS1993] 10
funkcje systemowe jednym z działa najczciej wykonywanym w jdrze jest danie wykonania funkcji systemowej funkcje systemowe zapewniaj dostp do usług wiadczonych przez jdro, a danie ich wykonania mona uwaa za polecenie dla jdra 11
funkcje systemowe program obsługujcy wywołanie funkcji systemowej, wykonuje nastpujce działania wstpne: odczytuje parametry funkcji systemowej sprawdza, czy parametry s umieszczone pod poprawnymi adresami i nastpnie kopiuje je z procesu uytkownika do jdra wywołuje w jdrze odpowiedni program wykonujcy funkcj systemow 12
funkcje systemowe wyniki działania funkcji systemowej s zwracane do procesu uytkownika przy wywołaniu zakoczonym sukcesem, program obsługi funkcji systemowej w jdrze zwraca warto specyficzn dla danej funkcji, przy wywołaniu zakoczonym porak warto 1 13
funkcje systemowe w czasie wykonywania funkcji systemowej mog wystpi dwa zdarzenia: do procesu moe by przesłany sygnał, albo inny proces moe osign wyszy priorytet 14
funkcje systemowe jeeli do procesu zostanie przesłany sygnał, to moe on spowodowa zaniechanie wykonywania funkcji systemowej inna moliwo, to zawieszenie sygnału do czasu zakoczenia funkcji 15
funkcje systemowe jeeli inny proces osignie wyszy priorytet, to proces biecy powróci z funkcji systemowej do przerwanego fragmentu w procesie uytkownika 16
funkcje systemowe s dwie kategorie funkcji systemowych: funkcje dotyczce procesu funkcje dotyczce systemu plików zajmiemy si tutaj jedynie funkcjami systemowymi, dotyczcymi procesu 17
pułapki pułapki mog wystpi z powodu błdu w programach (dzielenie przez zero), albo błdów systemowych proces jest informowany o problemie albo za pomoc sygnału, albo przez sam fakt zakoczenia 18
przerwania przerwania spowodowane przez urzdzenia wejcia/wyjcia s obsługiwane przez moduły obsługi urzdze (device drivers) moduły te s włczone do jdra podczas instalacji lub rozbudowy systemu 19
przerwania przerwania spowodowane przez inne urzdzenia s obsługiwane przez programy przerwa stanowice standardow cz jdra programy te obsługuj konsol operatorsk i zegar czasu rzeczywistego 20
przerwania przerwania spowodowane przez urzdzenia wystpuj asynchronicznie programy obsługi urzdze uruchamiane s na danie program obsługi przerwa musi by wykonany do koca, jego wykonywanie nie moe by przerwane 21
zarzdzanie procesami cało działa dotyczcych procesów, realizowana przez jdro, nazywa si zarzdzaniem procesami, i obejmuje: tworzenie, usuwanie i zawieszanie procesu polecenia dotyczce procesów sygnały i ich wykorzystywanie 22
proces mówic najprociej, proces jest wykonywanym programem mówic dokładniej, proces składa si z wykonywanego programu, danych, stosu, wskanika stosu, licznika rozkazu i rejestrów, czyli jest cile zwizany z konkretnym rodowiskiem, w którym jest wykonywany [KS1993] 23
proces proces moe si znale w okrelonych stanach: poredni podczas tworzenia procesu (IDLE) wykonywany (RUN) oczekujcy (na zdarzenie) (SLEEP) zawieszony (przez sygnał albo proces macierzysty) (STOP) poredni podczas usuwania procesu (ZOMBIE) 24
stany procesu [KS1993] IDLE przydziel zasoby RUN wyjd ZOMBIE upij zawie SLEEP obud odwie STOP 25
proces uytkownik moe tworzy procesy, sterowa ich wykonaniem i odbiera informacje o zmianie statusu ich wykonywania 26
identyfikator procesu kady proces ma przydzielon unikaln warto, zwan identyfikatorem procesu PID (process identifier), PID jest stosowany przez jdro do identyfikacji procesu oraz przez uytkownika do wywołania funkcji systemowej 27
tworzenie procesu jdro tworzy proces przez powielenie kontekstu innego procesu ten nowy proces jest zwany procesem potomnym procesu macierzystego kontekst powielony przy tworzeniu procesu zawiera zarówno stan wykonania procesu na poziomie uytkownika jak i jdra 28
kontekst procesu kontekst procesu, to zasoby wymagane przez proces w kadym trybie pracy wymagany jest dostp do rónych zasobów w trybie uytkownika zasoby te to: rejestry procesora, licznik rozkazów, wskanik stosu, tekst programu, dane i segment stosu 29
kontekst procesu w trybie jdra kontekst procesu tworz rejestry procesora, licznik rozkazów, wskanik stosu, oraz zasoby wymagane przez jdro, aby mogło ono wykona okrelone usługi dla procesu 30
tworzenie procesu proces moe utworzy nowy proces, który jest kopi oryginału za pomoc funkcji systemowej fork jej wykonanie polega na rozwidleniu procesu wydajcego to zlecenie na dwa procesy: macierzysty i potomny dla procesu potomnego jest inicjowany oddzielny obszar pamici operacyjnej 31
rozwidlanie procesu [KS1993] proces Wait macierzysty wait proces macierzysty fork proces potomny exec proces potomny status zakoczenia exit proces upiór 32
tworzenie procesu w jzyku C zlecenie tworzenia nowego procesu wyglda tak: pid = fork(); gdzie po zakoczeniu wykonywania zlecenia zmienna pid w procesie macierzystym przybiera warto bdc identyfikatorem procesu potomnego, a w procesie potomnym warto 0 33
tworzenie procesu nowy proces korzysta ze wszystkich zasobów swego przodka, takich jak pliki, status obsługi sygnału i mapa pamici przeanalizujmy działanie nastpujcego programu: 34
tworzenie procesu #include <stdio.h> /*dolaczenie opisu funkcji */ /* wejscia/wyjscia z pliku naglowkowego */ main() /* rozpoczecie dzialania programu */ { int pid; /* deklaracja zmiennej calkowitej */ if ((pid = fork()) == 0) /* utworzenie procesu */ printf( proces potomny\n ); /* zmienna pid = 0 */ /* funkcja fork przekazuje 0 do procesu potomnego */ /* wyswietlenie napisu proces potomny jest to */ /* efekt działania kodu procesu potomnego */ 35
tworzenie procesu else printf( proces macierzysty\n ); /* zmienna pid $ 0 */ /* funkcja fork przekazuje ident procesu potomnego */ /* do procesu macierzystego */ /* wyswietlenie proces macierzysty */ } 36
tworzenie procesu usuwajc komentarze, mamy: #include <stdio.h> main() { int pid; if ((pid = fork()) == 0) printf( proces potomny\n ); else printf( proces macierzysty\n ); } 37
tworzenie procesu w wyniku wykonania tego programu, na ekranie otrzymujemy: proces potomny proces macierzysty $ 38
tworzenie procesu program ten tworzy nowy proces za pomoc funkcji systemowej fork nowo utworzony proces (proces potomny) otrzymuje zero jako parametr zwracany przez t funkcj i wywietla napis proces potomny 39
tworzenie procesu proces wywołujcy (proces macierzysty) otrzymuje identyfikator nowo utworzonego procesu jako parametr zwracany przez t funkcj i wywietla napis proces macierzysty wida, e program dokonuje rozwidlenia procesu na dwa procesy, kad lini na ekranie wywietla inny proces 40
funkcja systemowa exec zwykle, kiedy proces jest tworzony, ma on wykonywa program róny od wykonywanego przez jego proces macierzysty rodzina funkcji systemowych exec(plik, arg1,,argn) umoliwia procesowi wykonanie kodu we wskazanym pliku 41
rozwidlanie procesu [KS1993] proces Wait macierzysty wait proces macierzysty fork proces potomny exec proces potomny status zakoczenia exit proces upiór 42
funkcja systemowa exec plik ten zawiera polecenia Linuksa, albo program w postaci binarnej arg1,, argn s wartociami parametrów polecenia jego realizacja polega na wprowadzeniu w obszar pamici operacyjnej procesu nowego kodu i danych nastpn instrukcj procesu jest pierwsza instrukcja wczytanego kodu 43
funkcja systemowa exec na przykład, gdy proces potomny ma wykona program z pliku alfa, powinien wykona funkcjexec : if ((pid = fork()) == 0) exec ( alfa, NULL); exec oznacza tu jedn z funkcji z rodziny exec: execl, exece, execlp, execv, execve, execvp 44
funkcja systemowa exec wywołania tych funkcji te róni si: ciek dostpu do pliku, przesyłaniem argumentów i przekazywaniem parametrów rodowiska od procesu macierzystego do potomnego pokaemy przykład zastosowania funkcji exec 45
funkcja systemowa exec # include <stdio.h> main() /* uruchomienie nowego */ { /* programu funkcj execl */ /* wykonanie programu przez powłok */ char cmd[80];/* tablica cmd ma 80 znakow */ gets(cmd); /* czytanie lancucha znakow */ /* do tablicy cmd */ 46
funkcja systemowa exec if(fork() == 0) { /* proces potomny */ printf( proces potomny\n ); /* wyswietla napis */ execl( /bin/sh, sh, -c, cmd, NULL); /* wykonanie polecenia wpisanego do tablicy cmd */ } else printf( proces macierzysty\n ); /* napis */ } 47
funkcja systemowa exec po uruchomieniu programu i wprowadzeniu polecenia date na ekranie pojawia si: date proces potomny proces macierzysty $ Thu Apr 19 2012, 20:16:18 CEST 48
funkcja systemowa exec w wywołaniu funkcji execl pełna cieka /bin/sh i nazwa polecenia uruchamia powłok, -c powoduje, e łacuch znaków jest jednym poleceniem, NULL koczy list parametrów proces potomny wykonywany jest na przemian z procesem macierzystym 49
funkcja systemowa wait funkcja wait jest zwykle uywana do synchronizacji wykonania procesu macierzystego i procesu potomnego jest szczególnie uyteczna, gdy oba procesy maj dostp do tych samych plików proces zawiesza swoje działanie dopóki nie zakoczy si jego proces potomny 50
rozwidlanie procesu [KS1993] proces Wait macierzysty wait proces macierzysty fork proces potomny exec proces potomny status zakoczenia exit proces upiór 51
funkcja systemowa wait wywołanie funkcji systemowej wait: pid = wait(&status) gdzie &status jest parametrem (wskanikiem do zmiennej) okrelajcym rodzaj zdarzenia, które spowoduje wznowienie działania procesu, a pid identyfikatorem procesu, który spowodował to zdarzenie 52
funkcja systemowa wait proces macierzysty za pomoc sygnału moe da informacji, kiedy nastpi wyjcie z procesu potomnego, lub kiedy koczy si on nieprawidłowo jeeli proces został osierocony, tzn. nastpiło wyjcie z procesu macierzystego zanim on sam si zakoczył, to wtedy jdro si kontaktuje z procesem systemowym init 53
funkcja systemowa wait przeanalizujmy działanie programu, bdcego modyfikacj poprzedniego programu 54
funkcja systemowa wait # include <stdio.h> main() /* uruchomienie nowego */ { /* programu funkcj execl */ /* wykonanie programu przez powłok */ int status; /*zmienna zawierajca status */ char cmd[80];/* tablica cmd ma 80 znakow */ gets(cmd); /* czytanie lancucha znakow */ /* do tablicy cmd */ 55
funkcja systemowa wait if(fork() == 0) { /* proces potomny */ printf( proces potomny\n ); /* wyswietla napis */ execl( /bin/sh, sh, -c, cmd, NULL); /* wykonanie polecenia wpisanego do tablicy cmd */ } wait(&status) /* czekanie na koniec procesu potomnego */ printf( proces macierzysty\n ); /* wyswietla napis */ } 56
funkcja systemowa wait tym razem w wyniku wykonania polecenia date na ekranie pojawi si: date proces potomny Thu Apr 19 2012, 21:57:16 CEST proces macierzysty $ proces macierzysty czeka na zakoczenie procesu potomnego 57
funkcja systemowa wait argumentem funkcji wait jest zawsze warto statusu warto statusu okrelaj dwa bajty: młodszy zawiera status zakoczenia procesu potomnego, tak jak to zdefiniował system, starszy zawiera status zakoczenia procesu potomnego tak jak to zdefiniował sam proces potomny 58
rozwidlanie procesu [KS1993] proces Wait macierzysty wait proces macierzysty fork proces potomny exec proces potomny status zakoczenia exit proces upiór 59
funkcja systemowa exit proces moe zakoczy swoje działanie operacj: exit(status) powoduje ona zakoczenie wykonania procesu, zamknicie plików i skasowanie obrazu pamici procesu 60
funkcja systemowa exit warto parametru status jest przekazywana do procesu macierzystego, jeeli wykonał on operacj wait(&status) proces moe by zakoczony przymusowo za pomoc sygnału w obu przypadkach zakoczenie procesu powoduje przekazanie kodu statusu do procesu macierzystego (jeeli on jeszcze istnieje) za pomoc funkcji wait 61
funkcja systemowa exit przeanalizujmy program: # include <stdio.h> main() /* czekanie na proces */ { int status; /*zmienna zawierajca status */ int pid; /* zmienna zawierajca ident procesu */ if ((pid = fork()) == -1 { perror( nie moge wykonac fork ); exit(1); /* nie utworzono procesu potomnego */ /* przekazanie statusu 1 do procesu macierzystego */ } 62
funkcja systemowa exit else if (pid == 0) /* utworzenie procesu */ { /* proces potomny, wyswietlenie napisu */ printf( potomny: pid potomnego = %d, pid macierzystego = %d\n, getpid(), getppid()); /*getpid ustala numer procesu zapytujacego (tu potomnego)*/ /*getppid ustala numer przodka procesu zapytujacego */ } exit(0); /* koniec procesu potomnego */ /* przekazanie statusu 0 do procesu macierzystego */ 63
funkcja systemowa exit { wait(&status)/* czekanie na koniec procesu potomnego */ printf( macierzysty: status potomka = %o\n, status); /* proces macierzysty */ /* wyswietlenie napisu */ printf( macierzysty: pid potomnego = %d, pid macierzystego = %d\n, pid, getpid()); /* getpid ustala numer procesu zapytujacego (tu macierzystego) */ } exit(0); /* zakonczenie procesu macierzystego */ } 64
funkcja systemowa exit w wyniku wykonania programu, mamy: potomny: pid potomnego = 1502, pid macierzystego = 1501 macierzysty: status potomka = 0 macierzysty: pid potomnego = 1502, pid macierzystego = 1501 $ oba procesy podaj takie same wartoci pid, status procesu potomnego jest zerem, gdy proces potomny został zakoczony przez exit i argument tej funkcji jest zerem 65
wnioski przestawiono zarzdzanie procesami zagadnienia dotyczce sygnałów i ich wykorzystania, oraz zarzdzania pamici operacyjn, urzdzeniami wejcia/wyjcia i plikami bd przedmiotem kolejnego szkolenia 66
bibliografia [KS1993] Z. Królikowski, M. Sajkowski, System operacyjny UNIX dla pocztkujcych i zaawansowanych, Nakom, Pozna 1993. [Sobaniec2002] C. Sobaniec, System operacyjny Linux przewodnik uytkownika, Nakom, Pozna 2002. 67