Procese - ocw.cs.pub.ro · 09.03.2010 3 Cuprins Procese: definiie, relevanăț ț Stări ale...
Transcript of Procese - ocw.cs.pub.ro · 09.03.2010 3 Cuprins Procese: definiie, relevanăț ț Stări ale...
Cursul 3
3Procese
9 martie 2010
09.03.2010 2
Suport curs 3
● OSC
– Capitolul 3 – Process Management
● MOS
– Capitolul 2 – Processes and Threads
● Sec iunea 1ț
● LSP
– Capitolul 5 – Process Management
– Capitolul 9 – Signals
● WSP
– Capitolul 6 – Process Management
– Capitolul 11 – Interprocess Communication
09.03.2010 3
Cuprins
● Procese: defini ie, relevan ăț ț● Stări ale proceselor
● Planificarea proceselor
● Opera ii cu proceseț● Procese în Linux i Windowsș● Comunica ia interprocesț
09.03.2010 4
Ce este un proces?
● Abstractizare de bază a SO împreună cu fi ierulș– abstractizare a ma inii fiziceș
– abstractizează o ac iuneț
● Un program aflat în execu ieț– o instan ă a unui programț
● Program – entitate pasivă
● Proces – entitate activă
● Program = imaginea unui proces
09.03.2010 5
Program vs. Proces
● Programul este pasiv – este un executabil
● Procesul este activ – se rulează cod pe procesor
● Procesul are asociate resurse
– spa iu de adresăț– fi iere deschiseș– zone de memorie (cod, date, partajată)
● Care este asocierea program/proces?
● Ce zone de memorie apar in doar procesului, nu i ț șexecutabilului (sunt dinamice)?
09.03.2010 6
Program vs. Proces (2)
$ file a.out
a.out: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), for GNU/Linux 2.6.8, dynamically linked (uses shared libs), not stripped
$ objdump -h a.out
[...]
11 .plt 00000030 00000000004003b0 00000000004003b0 000003b0 2**2
CONTENTS, ALLOC, LOAD, READONLY, CODE
12 .text 000001a8 00000000004003e0 00000000004003e0 000003e0 2**4
CONTENTS, ALLOC, LOAD, READONLY, CODE
13 .fini 0000000e 0000000000400588 0000000000400588 00000588 2**2
CONTENTS, ALLOC, LOAD, READONLY, CODE
14 .rodata 00000012 0000000000400598 0000000000400598 00000598 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
[...]
09.03.2010 7
Program vs. Proces (3)
● $ ./a.out
● Se creează un proces
● Imaginea este executabilul a.out
● Procesul are asociate resurse i un spa iu de adresăș ț
0
max
stack
heap
data
text
09.03.2010 8
Program vs. Proces (4)
# pmap 11: init [2]
0000000000400000 36K rx /sbin/init
0000000000608000 4K rw /sbin/init
00000000019e3000 132K rw [ anon ]
00007f2e12ca0000 8K rx /lib/libdl2.7.so
00007f2e12ca2000 2048K /lib/libdl2.7.so
00007f2e12ea2000 8K rw /lib/libdl2.7.so
00007f2e12ea4000 1320K rx /lib/libc2.7.so
00007f2e12fee000 2044K /lib/libc2.7.so
00007f2e131ed000 12K r /lib/libc2.7.so
00007f2e131f0000 8K rw /lib/libc2.7.so
00007f2e131f2000 20K rw [ anon ]
[...]
00007f2e1364d000 112K rx /lib/ld2.7.so
00007f2e13847000 12K rw [ anon ]
00007f2e13865000 12K rw [ anon ]
00007f2e13868000 8K rw /lib/ld2.7.so
00007fff1b855000 84K rw [ stack ]
00007fff1b94b000 4K rx [ anon ]
ffffffffff600000 4K rx [ anon ]
total 10316K
09.03.2010 9
De ce procese?
● Se înglobează o ac iune, o sarcină într-o structură independentăț
● Coexisten a mai multor proceseț
● Paralelism
● Câte procese pot rula simultan pe un sistem uniprocesor?
– pseudo paralelism
– paralelism efectiv (sisteme multiprocesor)
● Multiprogramare/multitasking
09.03.2010 10
La ce întrebări răspunde un proces?
● Ce trebuie făcut?
● Cu ce resurse?
● Cum se realizează interac iunea cu celelalte procese?ț
09.03.2010 11
Uniprogramare vs. multiprogramare
● Uniprogramare
– avantaj: simplitate
– dezavantaj: timpi mor i, utilizare ineficientă a procesoruluiț
● Multiprogramare
– avantaj: folosirea eficientă a procesorului
– dezavantaj: complexitate – algoritmi de planificare a proceselor pe procesoare
● Incertitudini ale multiprogramării
– ordinea de execu ie între două proceseț– durata de execu ie a unui procesț– durata de execu ie a unei sec iuni a unui proces (sincronizare)ț ț
09.03.2010 12
Stările unui proces
● READY – gata de execu ieț● RUNNING – rulează● WAITING – a teaptă încheierea unei opera ii de I/Eș ț
09.03.2010 13
Stările unui proces (2)
● Procese gata de execu ie – coada READYț
● Procese blocate – cozi de I/E
● Planificarea execu iei (scheduling)ț– mod preemptiv
– mod cooperativ
09.03.2010 14
Schimbare de context
09.03.2010 15
Process Control Block (PCB)
● Descrie procesul i resursele acestuiaș– în nucleul Linux – struct task_struct
– în nucleul Windows – EPROCESS
● PID (Process ID) – identificator numeric
● Spa iul de adresăț
● Spa iul de nume (namespace); chrootț
● Tabela de descriptori de fi ierș
● Masca de semnale
● Informa ii de securitate (user id; drepturile procesului)ț
09.03.2010 16
Planificatorul de procese
● Subsistem al nucleului
● Planificarea proceselor pe procesoare
– alegerea celui mai potrivit proces pentru a rula pe procesor
– alegerea din coada READY
● Algoritmi i euristici pentru folosirea cât mai eficientă a șprocesorului
● ine cont de natura proceselor:Ț– CPU intensive
– I/O intensive
09.03.2010 17
Resursele unui proces
● Resursele fizice sunt accesate prin resurse logice (abstractizare)
– disc – fi iere, re ea – socke iș ț ț
● Resursele pot avea asociată o stare
– fi ierele au cursor de fi ier, un socket are o adresă i un port destina ieș ș ș ț
● Resursele pot fi
– private (fi iere)ș
– partajate (semafoare)
– partajate par ial (spa iu de adresă)ț ț
09.03.2010 18
Descriptori de resurse
● Fiecare resursă este adresată prin intermediul unor identificatori
– Unix: descriptori (de fi iere, de IPC)ș– Windows: handle-uri
– organizate de obicei în tabele; identificatorul este un index
● Folosirea unei resurse
– ob inerea/crearea unei resurse i alocarea unui descriptorț ș– folosirea resursei cu ajutorul descriptorului i a func iilor oferite ș ț
de SO
– închiderea/distrugerea resursei
09.03.2010 19
Descriptori de resurse (2)
● Descriptorii sunt valabili doar în procesul în care au fost ob inu i ț ț(process namespace)
● Într-un alt proces acela i descriptor poate identificaș– o altă resursă
– nici o resursă (descriptor invalid)
– aceea i resursă (pentru resurse partajate)ș
● Duplicarea descriptorilor
– resursa va fi partajată între descriptorul original i copieș
● Crearea unui nou proces: partajare sau copiere?
09.03.2010 20
Tipuri de procese
● Procese interactive (foreground)
● Procese neinteractive (background)
– trimise în background (operatorul &, comanda bg, SIGSTP)
– daemoni (Unix): httpd, syslogd, sshd
– servicii (Windows): IIS, print spooler
● Procese I/O intensive (I/O bound)
● Procese CPU intensive (CPU bound)
09.03.2010 21
Opera ii cu proceseț
● Crearea proceselor
● Terminarea proceselor
– voluntară (exit)
– involuntară (excep ii, erori fatale)ț
● Întreruperea proceselor
– în Unix: semnale
– în Windows: excep iiț
● Comunicare interproces
● Sincronizare
09.03.2010 22
Crearea unui proces
● Execu ia unui program; rularea unei comenziț● Un proces se creează dintr-un proces existent
● Rela ie părinte-copilț● Cine este procesul părinte în cazul execu iei unei ț
comenzi?
● Executabilul este imaginea noului proces
● Procesului i se asociază resurse
● Devine o entitate planificabilă pe procesor
09.03.2010 23
Crearea unui proces în Windows?
PROCESS_INFORMATION pi;
if (!CreateProcess(NULL, “notepad”, NULL, NULL, TRUE, NORMAL_PRIORITY_CLASS, NULL, NULL, &pi)) {
printf(“Cannot execute notepad.\n”);
}
else {
printf(“notepad running\n”);
printf(“notepad process handle is 0x%x\n”, pi.hProcess);
}
09.03.2010 24
CreateProcess
● Creează un proces i execută programul transmis ca argumentș
● Controlul unui proces se face printr-un handle (ca i la fi iere)ș ș
● Pentru ob inerea handle-uluiț– HANDLE GetCurrentProcess (VOID);
– DWORD GetCurrentProcessId (VOID);
● Procesul părinte partajează handle-urile mo tenibile cu procesul șfiu
09.03.2010 25
Crearea unui proces în Unix
pid_t pid;
pid = fork();
switch (pid) {
case -1: /* fork failed */
perror(“fork”);
exit(EXIT_FAILURE);
case 0: /* procesul copil */
...
default: /* procesul părinte */
printf(“Created process with pid %d\n”, pid);
...
}
09.03.2010 26
fork
● Se apelează o dată dar se întoarce de două ori
– în procesul copil întoarce 0
– în procesul părinte întoarce pid-ul procesului copil
– de ce?
● Procesul copil este o copie a procesului părinte (spa iu țde adresă)
● Resursele procesului părinte sunt partajate în procesul copil (fi iere, socketi)ș
09.03.2010 27
Execu ia unui proces în Unixț
● Pentru execu ia unui program se înlocuie te imaginea ț șcurentă de executabil cu una nouă – apelurile din familia exec
● Se creează un spa iu nou de adreseț● Se încarcă executabilul
● PID-ul nu se schimbă
● Descriptorii de fi ier sunt folosi i în continuare (doar ș țdacă nu au flag-ul CLOSE_ON_EXEC)
09.03.2010 28
Încheierea execu ieiț
● Când se termină un proces?
– s-a încheiat programul (return exit_code din main)
– se programează terminarea procesului (exit/ExitProcess)
– alt program termină procesul curent (kill/TerminateProcess)
● Încheierea for atăț– Unix – semnale
– Windows – excep iiț– abort - SIGABRT
09.03.2010 29
Întreruperea unui proces în Unix
● Un proces este întrerupt prin recep ia unui semnalț
● Când se prime te un semnal:ș– starea procesului este salvată
– se execută o rutină de tratare a semnalului
– se continuă execu ia procesuluiț
● Sunt rezolvate asincron fa ă de fluxul de execu ie al procesuluiț ț
09.03.2010 30
Semnale
● Sunt identificate prin numere
– se recomandă folosire de macro-uri
– SIGKILL – 9, SIGSEGV – 15
● Tipuri de semnale
– asincrone – primite de la alte procese (programatic sau de la utilizator)
– sincrone – procesul a generat o excep ie (acces invalid, împăr ire la 0, etc.)ț ț
● Ce se întâmplă la primirea unui semnal?
– rularea unui handler
– ignorarea semnalului
– semnalul este blocat (fiecare proces are o mască de semnale)
– comportament implicit (terminare sau ignorare) (SIGKILL i SIGSTOP nu pot fi șignorate)
09.03.2010 31
Problemele folosirii semnalelor
● apelurile de sistem blocante pot fi întrerupte (errno = EINTR)
● lucrul cu semnale clasice este susceptibil la condi ii de cursăț– pot exista condi ii de cursă dacă se partajează variabile între handler-ul de ț
semnal i codul programuluiș
● semnalele clasice pot fi pierdute
● nu se pot apela func ii non-reentrante (malloc)ț
09.03.2010 32
Semnale de timp real
● Numerele cuprinse între SIGRTMIN (32) i SIGRTMAX (63)ș
● Nu au roluri predefinite
● Se pot pune într-o coadă mai multe semnale
● Semnalele cu număr mai mic au prioritate mai mare
● Se garantează ordinea în cazul transmiterii repetate a aceluia i șsemnal
09.03.2010 33
Întreruperea unui proces în Windows
● Se datorează recep ionării unei excep iiț ț● Când un proces prime te o excep ieș ț
– starea procesului este salvată
– se execută o rutină de tratare
– se continuă execu ia procesuluiț
● Cauzele excep iilorț– o cerere de întrerupere a procesului
– accesarea unei loca ii invalide de memorieț– împăr ire la zeroț
09.03.2010 34
APC
● Asynchronous Procedure Call
● Asociate per thread; fiecare thread are o coadă de APC
● APC-urile se execută în momentul în care thread-ul curent intră într-o stare alertabilă
– WaitForSingleObjectEx
09.03.2010 35
A teptarea terminării unui procesș
● Procesul apelant este blocat până la terminarea procesului specificat (proces copil)
– Unix: wait, waitpid, WIFEXITED, WIFSIGNALED
– Windows: WaitForSingleObject, GetExitCodeProcess
● Cum sunt implementa i operatorii shellț– & ;
– || &&
09.03.2010 36
Probleme la terminarea unui proces
● Ce se întâmplă dacă nu se a teaptă un proces?ș
● Ce este un proces zombie?
● Ce se întâmplă cu procesele ale căror părinte moare?
09.03.2010 37
Studiu de caz: comanda nohup
$ nohup btdownloadheadless responsefile linkernel.torrent &> /dev/null &
● Comanda este pornită în background
● Procesul ignoră semnalul SIGHUP
● La încheierea unei sesiuni shell se transmite
– SIGQUIT proceselor din foreground
– SIGHUP proceselor din background
● Similar: disown (bash), dtach, screen
09.03.2010 38
Daemoni/servicii
● Procese care rulează în background
● Nu au asociate un terminal de control
● Pot rula înainte de autentificarea unui utilizator
– StartServiceCtrlDispatcher(...)
– daemon()
● Care este procesul părinte al daemon-ilor Unix?
● Cum interac ionează utilizatorul cu un daemon?ț
09.03.2010 39
Comunica ie interprocesț
● IPC
● Colaborare i competi ieș ț
● Colaborare – partajare/transmitere informa ieț
● Competi ie – acces exclusiv la resurse -> sincronizareț
● Colaborare
– fi iereș
– pipe-uri (anonime, cu nume – FIFO)
– socke iț
– cozi de mesaje
– memorie partajată
09.03.2010 40
Context comunica ie interprocesț
● Partajarea informa ieiț– acces concurent la informa ie -> sincronizareț
● Paralelism/cre terea vitezei de calculș– modelul boss-workers, worker-threads
● Modularitate
– Do one thing, do one thing well!
● Convenien ăț– un utilizator poate rula mai multe procese
09.03.2010 41
Pipe-uri
● Pipe-uri anonime
– doi descriptori/două handle-uri
– procesele comunicante sunt înrudite
– un capăt de scriere i un capăt de citireș– pipe/CreatePipe
– Cum este implementat operatorul | în shell?
● Pipe-uri cu nume (FIFO)
– intrare în sistemul de fi iereș– procesele nu trebuie să fie înrudite
– mkfifo/CreateNamedPipe
09.03.2010 42
Memorie partajată
Spa iu adresă proces 1ț Spa iu adresă proces 2ț
RAM
shared
09.03.2010 43
Memorie partajată (`2)
● Spa iu virtual de adresă mapat peste memoria fizică ț(RAM)
● Opera iiț– crearea zonei de memorie partajată
– ata area la zona de memorie partajatăș– deta area de la zona de memorie partajatăș– eliberarea zonei de memorie partajată
– shmget, shmat, shmdt, shmctl
– CreateFileMapping/MapViewOfFile/UnmapViewOfFile
● Accesul se face pe bază de pointeri (adrese)
09.03.2010 44
Transfer de mesaje
Proces 1 Proces 2
M M
M
kernel
09.03.2010 45
Transfer de mesaje
● Util în medii distribuite (MPI)
● Tipuri de comunica ieț– dincronă sau asincronă
– directă
● mesajul este livrat procesului (MPI)
– indirectă
● mesajul este livrat într-o căsu ă/mailslot (SO)ț
● Opera ii SOț– creare mailslot (msgget/CreateMailslot,CreateFile)
– primire/transmitere mesaj (msgsnd/msgrcv/ReadFile/WriteFile)
– tergere mailslot (msgctl/DeleteFile)ș
09.03.2010 46
Message passing vs. shared memory
● Avantaje MP
– util în sisteme distribuite
– nu necesită sincronizare
– informa ia este formatată (tip mesaj, lungime)ț
● Avantaje SM
– util în sisteme multiprocesor
– foarte rapidă (nu se face trecere prin kernel)
– u or de folosit (lucru cu pointeri/adrese)ș
09.03.2010 47
Comunica ia în re eaț ț
proces
stivă de protocoale
proces
canal de comunica ieț
sistem de calcul 1 sistem de calcul 2
09.03.2010 48
Socke iț
● Abstractizare a comunica iei în re eaț ț
● Interfa ă de comunica ieț ț
● O pereche de procese comunicante în re ea – o pereche de țsocke iț
● Un socket = adresă + port
● Modelul client-server
● Comunica ieț– orientată conexiune (TCP)
– ne-orientată conexiune (UDP)
09.03.2010 49
RPC/RMI
● Remote Procedure Call
– se oferă un stub clientului cu informa ii despre procedura de țapelat
– reprezentare independentă de sistem (XDR – eXternal Data Representation)
● Remote Method Invocation
– object-based
– se pot transmite obiecte ca argumente
– stub (client) – parameter marshalling
– skeleton (server) – parameter unmarshalling
09.03.2010 50
Cuvinte cheie
● proces
● program
● executabil
● uniprogramare
● multiprogramare
● schimbare de context
● PCB
● scheduler
● descriptori de resurse
● creare, încheiere
● întrerupere
● semnale/APC
● daemoni/servicii
● shared memory
● message passing
● socket
● RPC, RMI
09.03.2010 51
Exerci iu 1ț
● Ce sunt procesele zombie i ce efect au asupra sistemului?ș
● Câte procese părinte (parent), fiu (child) i frate (sibling) poate șavea un proces? (presupunând resurse nelimitate)
● Defini i trei caracteristici ale unui daemon/serviciu?ț
09.03.2010 52
Exerci iu 2ț
● Câte elemente de fiecare tip din lista celor de mai jos con ine un țproces:
– executabil
– stivă
– handler de semnal
– tabelă de fi iereș
– spa iu de adresăț
– descriptor de fi ierș
09.03.2010 53
Exerci iu 3ț
● Ce problemă poate aduce următorul program şi cum poate fi soluţionată?
static int flag = 0;
static void sig_handler (int signum)
{
flag = 1;
}
int main (void)
{
if (signal (SIGUSR1, sig_handler) == SIG_ERR) {
perror ("signal");
exit (EXIT_FAILURE);
}
/* wait for signal */
if (flag == 0)
pause ();
/* do work */
...
return 0;
}
09.03.2010 54
Întrebări
?