Sunteți pe pagina 1din 23

Curs 8

Planificarea proceselor
Fire de executie

Sisteme de operare
Lect. Dr. Ozten CHELAI

Facultatea de Matematica si Informatica


Universitatea Ovidius Constanta

Curs8 SO - lect. dr. Ozten Chelai, 2009-2010 1


Planificarea proceselor
 DefiniŃie: Planificarea proceselor este o activitate realizată de
planificatorul de procese (task scheduler = componentă a SO)
în vederea alocării de timp procesor, pe baza unor criterii
specifice, tuturor proceselor lansate în sistem, astfel încât să se
implementeze modelul paralelismului proceselor într-un sistem
cu multiprogramare.
 Alocarea timpului procesor se va face conform unui algoritm de
planificare. Într-un sistem cu multiprogramare exista mai multe
procese în stare READY. SO va decide alocarea timpului
procesor(CPU -resursă sistem) către acestea.
 Criterii de planificare
 Echitabilitate = servirea tuturor solicitărilor.
 EficienŃă = maximizarea coeficientului de utilizare a
procesorului.
 Minimizarea timp de răspuns către procese (interactive şi cu
prelucrări în loturi de lucrări (batch processing)).
 Maximizarea numărului de procese servite în unitatea de
timp.
Tipuri de planificare
 Planificarea non-preemtiva (fără cuante de timp)
are loc atunci când un proces activ va elibera
procesorul fie la încheierea sa, fie la lansarea unei
operaŃii de I/E ce va conduce la blocarea sa.
 Planificarea preemtivă (cu cuante de timp)
utilizează împărŃirea timpului procesor în cuante
egale de timp, gestionate de SO. Un proces activ va
elibera procesorul în momentul încheierii cuantei de
timp procesor ce i-a fost alocată, la încheierea sa
sau la lansarea unei operaŃii de I/E ce va conduce la
blocarea sa. Pot sa apara probleme la suspendarea
unui proces si deci necesitatea realizării excluderii
mutuale cu tehnici specifice.
Planificatorul CPU
 Selecteaza din procesele care sunt in stare Ready
de executie si aloca CPU unui proces
 Deciziile de planificare au loc cand un proces:
1. Comuta din starea running in waiting
2. Comuta din starea running in ready
3. Comuta din starea waiting in ready
4. Termina
 Planificarea pentru 1 si 4 este non-preemptiva
 Celelalte planificari sunt preemptive
Dispecerul (Dispatcher)
 Modulul Dispecer acorda controlul CPU
procesului selectat de planificator. Acest
lucru implica:
 Comutarea contextului
 Comutarea in modul utilizator
 Salt la locatia corespunzatoare din programul
utilizator pentru repornirea programului
 Latenta dispecerului – timpul necesar
dispecerului pentru oprirea unui proces si
repornirea executiei celuilalt
Criteriul de planificare
 Utilizarea CPU (CPU utilization) – ocuparea timpului
CPU cat mai mult posibil
 Capacitate de executie (Throughput) – numarul de
procese care isi termina executia pe unitatea de
timp
 Timpul de intoarcere (turnaround time) – timpul
necesar executiei unui anumit proces
 Timpul de asteptare(waiting time) – timpul cat un
proces a asteptat in coada proceselor ready
 Timpul de raspuns (respond time) – timpul de la
trimiterea cererii pana la producerea primului
raspuns, nu iesirea (pentru timesharing)
Criteriul de optimizare
 Max CPU utilization
 Max throughput
 Min turnaround time
 Min waiting time
 Min response time
Planificarea FCFS (First-Come,
First-Served )
Procese Burst Time (timp de executie)
P1 24
P2 3
P3 3
 Presupunem ca procesele sosesc in ordinea: P1 , P2 , P3
Diagrama Gantt Chart este:
P1 P2 P3

0 24 27 30

 Timpul de asteptare este P1 = 0; P2 = 24; P3 = 27


 Media timpului de asteptare este: (0 + 24 + 27)/3 = 17
FCFS
Presupunem ca ordinea de sosire este
P2 , P3 , P1
 Diagrama Gantt chart este:

P2 P3 P1

0 3 6 30
 Timpul de aspteptare pentru P1 = 6; P2 = 0; P3 = 3
 Media timpului de asteptare: (6 + 0 + 3)/3 = 3
 Mai buna decat in cazul anterior
 Efectul Convoy (convoi) procesele mai scurte inaintea celor mai
lungi
Planificarea SJF (Shortest-
Job-First)
 Asociaza fiecarui proces, lungimea timpului CPU
necesar executiei. Utilizeaza lungimea pentru a
planifica intai procesele cu timpul cel mai mic.
 Doua scheme:
 Non-preemptiva – odata alocat CPU procesului, nu poate
fi intrerupt pana nu se termina timpul de executie
 Preemptiva – daca un nou proces soseste cu lungimea
CPU mai mica decat timpul ramas din executia procesului
curent, se aloca. Aceasta schema este Shortest-
Remaining-Time-First (SRTF)
 SJF este optima – da media cea mai mica pentru
timpul de asteptare.
Planificarea cu prioritati
 un numar (intreg) este asociat fiecarui proces
 CPU este alocat procesului cu cea mai mare prioritate (cel mai
mic intreg ≡ cea mai mare prioritate)
 Preemptiva
 Non-preemptiva
 SJF este o planificare cu prioritati in care prioritatea este cel mai
mic timp de executie (CPU burst time)
 Problema ≡ Infometarea (Starvation) – procesele cu prioritate
mica se poata sa nu se execute vreodata
 Solutie ≡ Imbatranirea (Aging) – cu cresterea timpului creste
prioritatea procesului
Planificarea circulara (Round-
Robin)
 Procesele sunt plasate într-o coadă unică de aşteptare pentru
procese ready.
 Fiecare proces primeste CPU o cuanta de timp
 Va fi servit întotdeauna primul proces, iar la încheierea cuantei
alocate lui, procesul va trece la sfârşitul cozii de aşteptare.
 Daca sunt n procese si cuanta este q, fiecare proces primeste
1/n timp CPU in unitati de q, deci nici un proces nu asteapta mai
mult de (n-1)q unitati de timp
 Problema constă în alegerea dimensiunii cuantei de timp
 q mare => FIFO
 q mic => q trebuie sa fie mare relativ la timpul de comutare a
contextului, altfel overheadul este prea mare
Planificare cu cozi multiple de
asteptare (multilevel queue)
 Procesele READY sunt grupate pe clase de priorităŃi. Pentru
fiecare nivel de prioritate se crează o coadă de aşteptare
 foreground (interactive)
 background (batch)
 Fiecare coada are propriul algoritm de planificare
 foreground – RR
 background – FCFS
 Planificarea trebuie realizata intre cozi
 Planificarea cu prioritate fixa; (i.e., servirea tuturor din foreground
apoi din background). Posibilitate - infometare (starvation).
 Felii de timp (Time slice) – fiecare coada primeste CPU un
anumit timp care poate fi apoi planificat de fiecare. Exemplu:
 80% foreground in RR
 20% to background in FCFS
Planificarea Multilevel Queue
Multilevel Feedback Queue
 Un proces se poate muta intre diferitele cozi;
imbatranirea (aging) se poate implementa astfel
 Planificatorul Multilevel-feedback-queue definit de
urmatorii parametri:
 Numarul de cozi
 Algoritmii de planificare pentru fiecare coada
 Metodele utilizate pentru a determina cand sa se
actualizeze un proces
 Metodele utilizate pentru a determina cand sa se
retrogradeze un proces
 Metodele utilizate pentru a determina in care coada sa
intre un proces atunci cand e necesar
Planificarea multiprocesor
 Planificarea cand sunt mai multe CPU
disponibile
 Procesoare omogene intr-un multiprocesor
 Partajarea incarcarii
 Procesare asimetrica – numai un procesor
acceseaza structurile de date, usurand
concurenta la date
Planificare de timp-real
 Hard real-time systems – necesita terminarea
unui task critic intr-un timp garantat
 Soft real-time computing – necesita ca
procesele critice sa primeasca prioritate fata
de cele mai putin critice
Planificare cu separarea
politicii de mecanism

 Algoritmul de planificare acceptă parametri


de intrare de la procesele utilizator.
 SO funcŃionează după un algoritm de
planificare bazat pe priorităŃi, dar procesele
pot utiliza apeluri sistem pentru stabilirea
nivelului de prioritate.
Planificarea pe doua nivele
 Algoritmul va lua în considerare toate
procesele lansate (şi în stare READY) în
sistem fie că acestea se află în memoria
interna, fie că se află pe disc. Există de fapt 2
module planificatoare:
 planificator de nivel inferior (low-level) – pentru
subsetul proceselor din memoria internă
 planificator de nivel superior (high-level) – pentru
transferul altui subset, de pe disc în memoria
internă.
Planificarea de tip loterie
 Fiecare proces va primi un numar de tichete.
 La fiecare planificare SO va “extrage un tichet” şi va
aloca o cuantă de timp procesor posesorului
acestuia.
 Se pot face reglaje prin alocarea unui numar diferit
de tichete, funcŃie de procesele ce urmează a fi
favorizate (lungi, scurte, cu operaŃii multiple sau
critice de I/E, etc).
 De asemenea, procesele pot “dona” tichete
procesului a cărui încheiere o aşteaptă.
Planificarea la SO Linux
 Doi algoritmi: time-sharing si real-time
 Time-sharing
 Bazat pe prioritati de credite – procesul cu cele mai multe credite
e planiticat
 Creditele se micsoreaza cu intreruperile de timp
 cand credit = 0, alt proces e ales
 Cand toate procesele au credit = 0, recreditare
 Bazata pe factori ce includ prioritati si istoric
 Real-time
 Soft real-time
 Posix.1b compliant – doua clase
 FCFS si RR
 Procesul cu prioritatea cea mai mare se executa intai
Planificarea threadurilor Java
 JVM utilizeaza un algoritm preemtiv de planificare bazat pe
prioritati
 Coada FIFO este utilizata daca sunt mai multe fire cu aceeasi
prioritate
 JVM planifica pentru executie un fir daca:
 Firul curent in executie (stare Running) iese din starea Runnable
 Un fir cu prioritate mai mare intra in stare Runnable
 Time-Slicing
 Deoarece JVM nu asigura time-sliceing, metoda yield() se poate
utiliza pentru a preda controlul altui fir cu aceeasi prioritate:
while (true) {
// perform CPU-intensive task
...
Thread.yield(); }
 Prioritatile firelor: Thread.MIN_PRIORITY,
Thread.MAX_PRIORITY, Thread.NORM_PRIORITY
 Prioritatile se pot seta cu metoda setPriority(int )
BIBLIOGRAFIE
 Cristina Mindruta, Sisteme de operare –
suport de curs, www.univ-ovidius.ro/math

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