Sunteți pe pagina 1din 49

Cursul 3: Procese

Cursul 2: Recapitulare (Cont.)


• Evolutia SO – de ce o studiem?
• Pentru a intelege cum nevoile utilizatorilor si
constrangerile hardware influenteaza (si vor influenta) SO
• Mai multe faze distincte:
• Hardware $$$, forta de munca $
• Eniac, … Multics
• Hardware $$, forta de munca $$
• PC-uri, Statii de lucru, Aparitia GUI
• Hardware $, forta de munca $$$
• Dispozitive omniprezente, retele pe scara larga
• Schimbarile rapide ale hardware-ului au dus la
schimbari in SO
• Batch Þ Multiprogramare Þ Timeshare Þ Graphical UI
Þ Dispozitive omniprezente Þ Spatiu cibernetic
• Migrarea graduala de functionalitati in masini mai mici
• Complexitatea SO
• SO mic: 100.000 linii/SO mare: 50 milioane de linii (5
milioane browser-ul Web !)
• 100-1000 oameni-ani
Cursul 2: Recapitulare
Cursul 2: Recapitulare (Cont.)
Cursul2: Recapitulare (Cont.)
Cursul2: Recapitulare (Cont.)
Capitolul 3: Procese
• Conceptul de proces
• Planificarea proceselor
• Operatii ale proceselor
• Cooperarea dintre procese
HW/ Serviciu OS/ Abstractizare !
Ce este un proces?
Conceptul de Proces
• Proces – un program in executie; executia procesului
trebuie sa progreseze secvential
• Un proces include:
• Instructiunile programului
• Un contor de program (program counter)/IP (instruction
pointer/Intel)
• Stiva si SP
• Datele programului
• Spatiul de Heap pt date dinamice
• Valorile registrilor
• Lista fisierelor deschise
• Starea procesului
• Etc
• Procese in diferite sisteme:
• Sisteme Batch – job-uri
• Sisteme Time-shared – sarcini (tasks)
• Putem considera termenii jobs/tasks/process similari
Imaginea unui proces in
memorie
Imaginea unui proces in
memorie
Starile unui proces
Starile proceselor
Starile proceselor
• Pe masura ce un proces se executa, acesta isi schimba
starea
• Nou (New): Procesul este creat
• In rulare (Running): Instructiunile sunt executate
• In asteptare (Waiting): Procesul asteapta ca un
eveniment sa se termine
• Gata de executie (Ready): Procesul asteapta sa fie
alocat catre procesor; este gata de executie
• Terminat (Finished): Procesul si-a incheiat executia iar
OS il curata
Starile proceselor - exemplu
Structura unui proces - PCB
Blocul de control al procesului
/ Process Control Block (PCB)
- Structura de date
folosita de SO
- Necesara pentru
gestionarea proceselor;
urmareste executia si
locatia fiecarui proces
- SO creaza un PCB la
crearea fiecarui proces
si il plaseaza intr-o
coada
- SO dezaloca PCB la
terminarea procesului
PCB
Categorii de informatii asociate unui
proces
• Starea procesului
• Contorul program
• Registrii CPU
• Informatii despre planificarea
proceselor
• Informatii despre memoria alocata
• Informatii de auditare
• Informatii legate de statusul operatiilor
cu dispozitive I/O
Comutare CPU de la un
proces la altul
Comutarea de context (context
switch)
• Cand CPU comuta catre o alta sarcina
sistemul trebuie sa salveze starea vechiului
proces (PCBa) si sa incarce starea anterior
salvata a noului proces (PCBb)
• Reprezinta un overhead pentru sistem
• Timpul de comutare este dependent de
hardware
Planificarea proceselor
Cozi de procese
• Coada job-urilor– contine toate
procesele din sistem
• Coada proceselor gata de executie –
contine toate procesele existente in
memorie, gata de executie si care
asteapta sa fie executate
• Coada proceselor pe fiecare device–
procese ce asteapta sa fie servite de un
anumit dispozitiv periferic I/O
• Procesele migreaza intre aceste cozi
Cozi de procese (gata de executie, in
asteptare pe tipuri de device-uri)
Planificarea proceselor
Planificarea proceselor (cont)

• Procesele pot fi descrise ca:


• Procese I/O (I/O-bound )– petrec mai mult timp
ocupandu-se de I/O decat de computing, cicluri
scurte de calcul intensiv (burst)
• Procese de calcul (CPU-bound ) – petrec mai
mult timp executand calcule; cicluri lungi de calcul
intensiv (burst)
Operatii ale proceselor
Crearea proceselor
• Procesul “parinte” creaza procese “copii”, care
la randul lor creaza alti copii determinand un
arbore de procese
• Model de executie
• Parintele si copiii se executa concomitent
• Parintele asteapta pana ce copiii termina
Crearea proceselor
Crearea proceselor (Cont.)
• Spatiu de adrese
• Copilul devine un duplicat al parintelui
• Copilul incarca un nou program in spatiul de adrese

• Exemple UNIX
• Apelul de sistem fork() creaza noi procese
• Apelul de sistem exec() este folosit dupa fork()
pentru a inlocui memoria procesului cu noul
program
Crearea proceselor
• Fiecare comanda UNIX este un copil al
procesului shell; implicit fork() + exec()
• & permite rularea proceselor in background,
ex: sleep 200 &
Crearea proceselor (Cont.)
Program C pentru crearea
unui nou proces – simple
version
#include <unistd.h> int main()
{
#include <errno.h>
pid_t pid;
#include <sys/wait.h> /* fork another process */
#include <stdlib.h> pid = fork();
if (pid < 0) { /* error occurred */
#include <stdio.h>
fprintf(stderr, "Fork Failed");
#include <sys/types.h> exit(-1);
}
else if (pid == 0) { /* child process */
execlp("/bin/ls", "ls", NULL);
}
else { /* parent process */
/* parent will wait for the child
to complete */
wait (NULL);
printf ("Child Complete");
exit(0);
}
}
Executie fork()
Program C pentru crearea
unui nou proces – extended
version
#include <unistd.h> else if (childpid == 0) { /* child process */

printf("CHILD: I am the child process!\n");


#include <errno.h>
printf("CHILD: Here's my PID: %d\n", getpid());
#include <sys/wait.h>
printf("CHILD: My parent's PID is: %d\n", getppid());

#include <stdlib.h> printf("CHILD: The value of my copy of childpid is: %d\n",


childpid);
#include <stdio.h> printf("CHILD: Sleeping for 1 second...\n");

#include <sys/types.h> sleep(1); /* sleep for 1 second */

execlp("/bin/ls", "ls", NULL);


int main(void)
}
{
else { /* parent process */

pid_t childpid; /* variable to store the /* parent will wait for the child to
child's pid */ complete */

printf("PARENT: I am the parent


int retval; /* child process: user- process!\n");
provided return code */
printf("PARENT: Here's my PID: %d\n", getpid());
int status; /* parent process: child's printf("PARENT: The value of my copy of childpid is %d\n",
exit status */ childpid);

printf("PARENT: I will now wait for my child to exit.\n");


/* fork another process */
wait (&status);
childpid = fork();
printf ("Child Complete \n");
if (childpid < 0) { /* error occurred */ printf("PARENT: Child's exit code is: %d\n",
WEXITSTATUS(status));
fprintf(stderr, "Fork Failed");
printf("PARENT: Goodbye!\n");
exit(-1); exit(0);

} }

}
Compilare program C in
terminal Linux
sudo -s
gcc main.cpp -o main.out
./main.out
Arbore de procese pe un
sistem Solaris
Terminarea proceselor
• Procesul executa ultima comanda si cere SO
sa il stearga – exit()
• Transmite datele de la “copil” catre “parinte” – prin
apel wait()
• Resursele procesului sunt dezalocate de catre SO
• Parintele poate sa opreasca executia
proceselor copiilor - abort()/kill() daca:
• Copilul a depasit limita de resurse alocate
• Sarcina atribuita copilului nu mai este necesare
• Daca procesul parinte se inchide:
• Unele SO nu permit procesului copilului sa continue
executia data procesul parintele se inchide - terminare in
cascada
Process Info
pstree
top

----------
ls –l /proc/
cd /proc/PID
Cooperarea dintre procese
Procese cooperante
• Proces independent - nu poate afecta si nu
poate fi afectat de executia unui alt proces
• Proces cooperant - poate afecta si poate fi
afectat de executia altor procese
• Avantajele proceselor cooperante
• Partajare de informatii
• Calcule mai rapide
• Modularitate
Modele de comunicare

Schimb de mesaje Memorie partajata


Alte modele de procese cooperante
Alte modele de procese cooperante
Conducte | Pipes
Pipes
• Implementare: atat in UNIX/Linux cat si in
Windows
• Iesirea (stdout) unui program devine intrare
pentru alt program (stdin)
• Comunicare unidirectionala (de la stanga la
dreapta)
• Ex: ls /bin | more
Alte modele de procese cooperante
Schimb de mesaje client - server
Comunicarea Client-Server
• Sockets
• Apeluri de Procedura de la Distanta (Remote
Procedure Calls - RPC)
• Invocare de Metode la Distanta (Remote
Method Invocation - Java)
Comunicarea prin Sockets
Sfarsitul cursului 3

S-ar putea să vă placă și