Laboratorium z systemów operacyjnych Sterowanie procesami II

Transkrypt

Laboratorium z systemów operacyjnych Sterowanie procesami II
Laboratorium
z systemów operacyjnych
Sterowanie procesami II - funkcje systemowe
Anna Wojak
1
Zagadnienia do samodzielnego przygotowania:
• proces, identykator u»ytkownika i procesu,
• stany procesu, kody bª¦dów dla funkcji f ork() i wait(),
• proces potomny , proces macierzysty ,
1
Sterowanie procesami II - funkcje systemowe Linux
W wielozadaniowym systemie operacyjnym mo»e dziaªa¢ jednocze±nie wiele procesów. Podstawowe zadania zwi¡zane z zarz¡dzaniem tymi procesami obejmuj¡: tworzenie i usuwanie procesów,
wstrzymywanie i wznawianie procesów, planowanie kolejno±ci wykonania procesów, dostarczanie
mechanizmów synchronizacji i komunikacji procesów. Kontekst procesu obejmuje zawarto±¢ logicznej przestrzeni adresowej procesu, rejestrów sprz¦towych oraz struktur danych j¡dra zwi¡zanych
z procesem. W systemach Unix i Linux mo»na wyró»ni¢ trzy poziomy kontekstu:
• kontekst u»ytkownika:
obszar kodu (instrukcji),
obszar danych,
obszar stosu,
obszary pami¦ci dzielonej,
• kontekst poziomu rejestrów, który zawiera
licznik rozkazów,
rejestr stanu procesora,
wska¹nik stosu,
rejestry ogólnego przeznaczenia,
• kontekst poziomu j¡dra, który zawiera:
struktury danych j¡dra opisuj¡ce proces,
stos j¡dra.
Proces zawsze wykonuje si¦ w swoim kontek±cie. Je±li proces wywoªa funkcj¦ systemow¡, to kod
j¡dra realizuj¡cy t¦ funkcj¦ równie» wykona si¦ w kontek±cie bie»¡cego procesu. Procesor przerywa
wykonywanie kodu bie»¡cego procesu w sytuacji, gdy:
• wyst¡pi przerwanie z czasomierza informuj¡ce o wykorzystaniu przydzielonego kwantu czasu
procesora,
• wyst¡pi dowolne przerwanie sprz¦towe lub programowe (puªapka),
• proces wywoªa funkcj¦ systemow¡.
Zachodzi wtedy konieczno±¢ zapami¦tania kontekstu przerwanego procesu, aby mo»na byªo pó¹niej wznowi¢ jego wykonywanie od miejsca, w którym zostaªo przerwane. Czynno±¢ t¦ okre±la
si¦ zachowaniem kontekstu procesu. Ka»dy proces reprezentowany jest w systemie operacyjnym
przez specjaln¡ struktur¦ danych, okre±lan¡ zwykle jako blok kontrolny procesu. Struktura ta
przechowuje atrybuty procesu takie, jak:
• aktualny stan procesu,
• informacje zwi¡zane z planowaniem procesów,
2
• informacje o pami¦ci logicznej procesu,
• informacje o stanie operacji wej±cia - wyj±cia,
• informacje do rozlicze«,
• zawarto±¢ rejestrów procesora.
Procesy dziaªaj¡ce wspóªbie»nie w systemie wielozadaniowym mog¡ wspóªpracowa¢ lub by¢ niezale»ne od siebie. Wspóªpracuj¡ce procesy wymagaj¡ od systemu dostarczenia mechanizmów komunikowania si¦ i synchronizacji dziaªania.
Rodzina funkcji exec
W ramach istniej¡cego procesu mo»e nast¡pi¢ uruchomienie innego programu w wyniku uruchomienia jednej z funkcji exec, do której nale»¡:
• rodzina funkcji execl:
int execl(const char *path, char *arg0, ..., char *argn, char *null )
int execlp( char *le, char *arg0, ..., char *argn, char *null )
int execle( char * path, char *arg0, ..., char *argn,char *null,char *envp[] )
• rodzina funkcji execv:
int execv ( char *path, char * argv[] )
int execvp( char *le, char * argv[] )
int execve( char * path, char *argv[],char *envp[] )
Rodzina funkcji execl musi mie¢ podane argumenty jako list¦ zako«czon¡ wska¹nikiem null,
natomiast rodzina execv musi mie¢ podan¡ tablic¦ argumentów.
• poprawne wywoªanie funkcji = wywoªanie programu podanego jako parametr,
• w przypadku wyst¡pienia bª¦du funkcja zwróci warto±¢ -1,
• mo»liwe kody bª¦dów:
EACCES - brak praw wykonywania dla skryptu lub pliku,
E2BIG- lista argumentów jest zbyt dªuga,
EFAULT - path wskazuje poza dost¦pn¡ dla u»ytkownika przestrze« adresow¡,
ENAMETOLONG - path jest zbyt dªugie,
• argumenty funkcji
path, f ile - peªna nazwa ±cie»kowa lub nazwa pliku z programem,
arg0...argn - nazwa i argumenty programu który ma by¢ wywoªany,
Wszystkie warianty funkcji exec wykonuj¡ to samo zadanie przeksztaªcaj¡ proces wywoªuj¡cy
przez zaªadowanie nowego programu do jego przestrzeni pami¦ci. Je±li funkcja zako«czy si¦ pomy±lnie, wywoªuj¡cy program zostanie caªkowicie przykryty przez nowy program, którego nazwa
przekazywana jest przez argument. W wyniku wywoªania funkcji typu exec nast¦puje reinicjalizacja segmentów kodu, danych i stosu. Nie zmieniaj¡ si¦ atrybuty procesu takie jak pid, ppid,
tablica otwartych plików.
3
Ko«czenie procesów
Poprzednio wspominana funkcja exit, sªu»y do ko«czenia procesu, proces zatrzyma sie je»eli osi¡gniemy koniec funkcji main, lub gdy funkcja main wykona instrukcje return. Pojedy«czy
caªkowity argument exit nazywany jest stanem zako«czenia procesu. Jest dostepny dla procesu
rodzicielskiego pod warunkiem, »e wykonaª funkcje wait. Warto±¢ zwracana okre±la nam sukces
lub niepowodzenie wykonywanego zadania. Zwraca zero w przypadku normalnego zako«czenia i
niezerow¡ warto±¢ w przypadku bª¦du. Funkcja exit zamyka równie» wszystkie otwarte deskryptory plików, oraz mo»e te» wywoªywa¢ dowolna zdeniowan¡ przez programist¦ procedur¦ obsªugi
zako«czenia i wykona¢ dziaªania czyszcz¡ce.
atexit()
int atexit(void (*func) (void))
• procedura rejestruje funkcj¦ wskazywan¡ przez f unc wywoªywana bez »adnych parametrów
po normalnym zako«czeniu programu,
• funkcje zarejestrowane w ten sposób sa wywoªywane w odwrotnej kolejno±ci do ich rejestracji,
• zwraca zero jesli wszystkie dziaªania zako«cz¡ si¦ pomyslnie, niezerow¡ warto±¢ w przypadku
bª¦du.
waitpid()
int waitpid( int pid, int *status, int options )
• funkcja zawiesza wykonywanie bie»¡cego procesu dopóki potomek okre±lony przez pid nie
zako«czy dziaªania lub jesli nie zostanie dostarczony sygnaª zako«czenia procesu.
• warto±¢ pid mo»e by¢ nast¦puj¡ca:
<-1 - oczekiwanie na dowolny proces potomny, którego id grupy procesów jest równe warto±ci bezwzglednej pid
-1 - to samo co funkcja wait(),
0 - oczekiwanie na ka»dy proces potomny, którego id grupy procesu jest równe id grupy
procesu wywoªuj¡cego funkcj¦.
>0 - oczekiwanie na potomka, którego id jest równe pid.
• Warto±¢ options jest sum¡ OR zera lub wi¦cej spo±ród nast¦puj¡cych staªych:
WNOHANG - oznacza natychmiastowy powrót z funkcji, je±li potomek nie zako«czyª
pracy.
WUNTRACED - oznacza zako«czenie tak»e dla zatrzymanych (ale nie ±ledzonych) pro-
cesów potomnych, których stan jeszcze nie zostaª zgªoszony. Stan ±ledzonych procesów
potomnych, które zostaªy zatrzymane, jest udost¦pniany równie» bez tej opcji
• mo»liwe kody bª¦dów:
ECHILD - je±li proces o zadanym pid nie istnieje lub nie jest potomkiem procesu wy-
woªuj¡cego. (Mo»e si¦ to zdarzy¢ równie» w przypadku potomka, który ustawiª akcj¦
obsªugi sygnaªu SIGCHLD na SIG_IGN.)
EINVAL - je±li argument options jest niepoprawny.
EINTR - je±li WNOHANG nie byªo ustawione, a zostaª przechwycony niez- ablokowany
sygnaª lub SIGCHLD.
• zdeniowana jest w plikach sys/types.h, include sys/wait.h
4
2 Zadania do samodzielnego wykonania
1. Napisa¢ program tworz¡cy równocze±nie trzy procesy z¡bi.
2. Napisa¢ program wy±wietlaj¡cy sformatowan¡ list¦ procesów.
3. Napisa¢ program wy±wietlaj¡cy informacje na temat pid, ppid, uid, euid, gid, egid.
4. Napisac program, który tworzy plik o nazwie data nastepnie proces potomny wpisuje do
niego 20B danych i rodzic czyta 10B.
3
Literatura
• Havilland K., Gray D., Salama B., Unix - programowanie systemowe,1999
• Stevens R.W., Programowanie w rodowisku systemu UNIX, WNT, 2002.
• Rochkind M.J., Programowanie w systemie UNIX dla zaawansowanych, WNT, 1997.
5

Podobne dokumenty