Sunteți pe pagina 1din 7

Capitolul 6: Planificarea CPU Concepte de Bază

 Concepte de Bază
 Prin multiprogramare se obţine o utilizare maximă a CPU
 Criteriul de Planificare
 Ciclurile CPU–I/O – Execuţia proceselor constă dintr-un ciclu de
 Algoritmi de Planificare execuţie CPU şi aşteptare I/E
 Planificarea Multi-Procesor  Distribuţia procesării CPU
 Planificarea Timp-Real
 Planificarea Firelor
 Exemple de Sisteme de Operare
 Planificarea Firelor Java
 Evaluarea Algoritmilor

Operating System Concepts with Java 6.1 Silberschatz, Galvin and Gagne ©2003 Operating System Concepts with Java 6.2 Silberschatz, Galvin and Gagne ©2003

Secvenţe alternante de procesare CPU şi


tranşe de I/E
Histograma Timpilor CPU

Operating System Concepts with Java 6.3 Silberschatz, Galvin and Gagne ©2003 Operating System Concepts with Java 6.4 Silberschatz, Galvin and Gagne ©2003

Planificarea CPU Dispecerul


 Selectează dintre procesele din memorie care sunt pregătite de  Modulul dispecer dă controlul CPU procesului selectat de
execuţie şi alocă CPU la unul dintre ele planificatorul pe termen scurt; aceasta implică:
 Deciziile de planificare CPU pot avea loc când un proces:  schimbarea de context
1. Comută din starea execuţie în starea aşteptare  schimbarea în mod utilizator
2. Comută din starea execuţie în starea pregătit  Saltul la adresa potrivită din programul utilizator pentru a reporni
acel program
3. Comută din starea aşteptare în pregătit
4. Se termină  Latenţa trecerii – timpul pe care dispecerul îl consumă pentru
oprirea unui proces şi pornirea unui alt proces
 Planificarea după 1 şi 4 este nepreemptivă
 Toate celelalte planificări sunt preemptive

Operating System Concepts with Java 6.5 Silberschatz, Galvin and Gagne ©2003 Operating System Concepts with Java 6.6 Silberschatz, Galvin and Gagne ©2003

1
Criteriul de Planificare Criteriul de Optimizare
 Maximizarea utilizării CPU

 Utilizarea CPU – păstrarea CPU cât mai ocupat posibil  Maximizarea debitului

 Debit (throughput) – # de procese care se finalizează pe  Minimizarea timpului de trecere


unitatea de timp  Minimizarea timpului de aşteptare
 Timpul de trecere (Turnaround time) – timpul necesar  Minimizarea timpului de răspuns
pentru execuţia unui anumit proces
 Timp de aşteptare (Waiting time) – timpul pe care un
proces l-a petrecut în aşteptare în coada ready
 Timp de răspuns (Response time) – timpul de când a fost
transmisă o cerere şi până când primul răspuns este
produs, nu afişat (pentru medii time-sharing)

Operating System Concepts with Java 6.7 Silberschatz, Galvin and Gagne ©2003 Operating System Concepts with Java 6.8 Silberschatz, Galvin and Gagne ©2003

Planificarea First-Come, First-Served (FCFS)


Planificarea FCFS (Cont.)
Presupunând că procesele sosesc în ordinea
Proces Timp Servire
P2 , P3 , P1
P1 24
 Harta Gantt pentru planificare este:
P2 3
P3 3
P2 P3 P1
 Presupunând că procesele apar în ordinea: P1 , P2 , P3
Harta Gantt pentru planificare este:
0 3 6 30
P1 P2 P3
 Timpii de aşteptare sunt P1 = 6; P2 = 0; P3 = 3

0 24 27 30  Timpul mediu de aşteptare: (6 + 0 + 3)/3 = 3


 Timpii de aşteptare sunt: P1 = 0; P2 = 24; P3 = 27  Mult mai bun decât în cazul anterior
 Timpul mediu de aşteptare: (0 + 24 + 27)/3 = 17  Efectul de convoi proces scurt după un proces lung

Operating System Concepts with Java 6.9 Silberschatz, Galvin and Gagne ©2003 Operating System Concepts with Java 6.10 Silberschatz, Galvin and Gagne ©2003

Planificarea Shortest-Job-First (SJR) Exemplu SJF Ne-preemptiv


 Se asociază cu fiecare proces durata următorului timp de Proces Timp Sosire Timp Servire
serviciu CPU. Acestea se folosesc pentru a planifica procesul cu P1 0.0 7
cel mai scurt timp de serviciu
P2 2.0 4
 Două scheme:
P3 4.0 1
 nepreemptiv – odată CPU dat unui proces, acesta nu mai poate fi
luat până ce procesul îşi termină timpul de serviciu CPU P4 5.0 4
 preemptiv – dacă apare un nou proces cu un timp de serviciu CPU  SJF (ne-preemptiv)
mai scurt decât timpul rămas pentru procesul curent, atunci CPU
este luat de la procesul curent şi dat noului proces. Această P1 P3 P2 P4
schemă este cunoscută sub numele de:
Shortest-Remaining-Time-First (SRTF)
0 3 7 8 12 16
 SJF este optimal – rezultă în timp mediu de aşteptare minim
pentru un set dat de procese
 Timpul mediu de aşteptare = (0 + 6 + 3 + 7)/4 = 4

Operating System Concepts with Java 6.11 Silberschatz, Galvin and Gagne ©2003 Operating System Concepts with Java 6.12 Silberschatz, Galvin and Gagne ©2003

2
Determinarea Duratei Perioadei
Exemplu SJF Preemptiv Următoare CPU
Proces Timp Sosire Timp Servire  Durata poate fi doar estimată
P1 0.0 7  Poate fi făcută folosind durata timpului de servire CPU
P2 2.0 4 precedent, folosind medierea exponenţială

P3 4.0 1
1. t n  durata curenta a timpului n de servire CPU
P4 5.0 4 2.  n 1  valoarea prezisa pentru urmatorul timp de servire CPU
 SJF (preemptiv)
3.  , 0    1
P1 P2 P3 P2 P4 P1 4. Defineste :
 n 1   t n  1    n .
0 2 4 5 7 11 16

 Timp mediu de aşteptare = (9 + 1 + 0 +2)/4 = 3

Operating System Concepts with Java 6.13 Silberschatz, Galvin and Gagne ©2003 Operating System Concepts with Java 6.14 Silberschatz, Galvin and Gagne ©2003

Predicţia Duratei Perioadei Următoare CPU Exemple de Mediere Exponenţială


  =0
 n+1 = n
 Istoricul recent nu contează
  =1
 n+1 = tn
 Doar ultimul timp de servire CPU contează
 Dacă formula se extinde, obţinem:
n+1 =  tn+(1 - )  tn -1 + …
+(1 -  )j  tn -1 + …
+(1 -  )n=1 tn 0
 Deoarece atât  cât şi (1 - ) sunt mai mici sau cel mult egali cu
1, fiecare termen succesiv are o pondere mai mică decât
predecesorul său

Operating System Concepts with Java 6.15 Silberschatz, Galvin and Gagne ©2003 Operating System Concepts with Java 6.16 Silberschatz, Galvin and Gagne ©2003

Planificarea pe Bază de Prioritate Round Robin (RR)


 O valoare (întreg) de prioritate este asociată cu fiecare proces  Fiecare proces primeşte o unitate mică din timpul CPU (cuanta
 CPU este alocat procesului cu cea mai mare prioritate (cel mai de timp), de obicei 10-100 milisecunde. După trecerea acestui
mic întreg  prioritate maximă) timp, procesul este întrerupt şi adăugat la capătul cozii ready.
 Preemptiv  Dacă sunt n procese în coada ready şi cuanta de timp este q,
atunci fiecare proces primeşte 1/n din timpul CPU în părţi de cel
 Ne-preemptiv
mult q unităţi de timp la un moment dat. Nici un proces nu
 SJF este o planificare bazată pe prioritate unde prioritatea este aşteaptă mai mult de (n-1)q unităţi de timp.
următorul timp de servire CPU estimat
 Performanţa
 Problemă  Înfometarea – procesele cu prioritate mică s-ar putea
 q mare  FIFO
ca să nu se execute niciodată
 q mic  q trebuie să fie mare faţă de timpul de comutare, altfel
 Soluţia  Îmbătrânirea – pe măsură ce timpul trece, prioritatea devine nerentabil
procesului se măreşte

Operating System Concepts with Java 6.17 Silberschatz, Galvin and Gagne ©2003 Operating System Concepts with Java 6.18 Silberschatz, Galvin and Gagne ©2003

3
Cuanta de Timp şi Timpul de Comutare a
Exemplu de RR cu Cuanta de Timp = 20
Contextului
Proces Timp Servire
P1 53
P2 17
P3 68
P4 24
 Harta Gantt este:

P1 P2 P3 P4 P1 P3 P4 P1 P3 P3

0 20 37 57 77 97 117 121 134 154 162

 Tipic produce timpi de trecere mai mari decât SJF, dar


răspunsuri mai bune

Operating System Concepts with Java 6.19 Silberschatz, Galvin and Gagne ©2003 Operating System Concepts with Java 6.20 Silberschatz, Galvin and Gagne ©2003

Timpul de Trecere variază cu Cuanta de Timp


Coada Multinivel
 Coada ready este partiţionată în cozi separate:
prim-plan (foreground) - interactiv
fundal (background) - batch
 Fiecare coadă are propriul algoritm de planificare
 Prim-plan – RR
 fundal – FCFS
 Trebuie efectuată planificare între cozi
 Planificare bazată pe prioritate fixă; (ex., deserveşte toate din prim-
plan după care cele din fundal). Posibilitatea înfometării.
 Time slice – fiecare coadă primeşte un anumit timp CPU pe care
poate să o planifice între procesele sale; ex.,
 80% pentru prim-plan folosind RR
 20% pentru fundal folosind FCFS

Operating System Concepts with Java 6.21 Silberschatz, Galvin and Gagne ©2003 Operating System Concepts with Java 6.22 Silberschatz, Galvin and Gagne ©2003

Planificarea cu Coadă Multinivel Coada Multinivel cu Reacţie


 Un proces se poate muta între diversele cozi; se poate
implementa astfel procesul de îmbătrânire
 Planificatorul cu coadă multinivel cu reacţie este definit de
următorii parametri:
 numărul cozilor
 algoritmii de planificare pentru fiecare coadă
 metoda folosită pentru avansarea unui proces
 metoda folosită pentru retrogradarea unui proces
 metoda folosită pentru determinarea cozii în care va intra când
acesta necesită timp de servire

Operating System Concepts with Java 6.23 Silberschatz, Galvin and Gagne ©2003 Operating System Concepts with Java 6.24 Silberschatz, Galvin and Gagne ©2003

4
Exemplu de Coadă Multinivel cu Reacţie Cozi Multinivel cu Reacţie
 Trei cozi:
 Q0 – cuanta de timp 8 milisecunde
 Q1 – cuanta de timp 16 milisecunde
 Q2 – FCFS
 Planificarea
 Un nou proces intră în coada Q0 care este servit FCFS. Când
câştigă CPU, procesul primeşte 8 milisecunde. Dacă nu termină în
8 milisecunde, procesul este mutat în coada Q1.
 În Q1 procesul este din nou servit FCFS şi primeşte 16 milisecunde
adiţionale. Dacă nici atunci nu s-a terminat, este întrerupt şi mutat
în coada Q2.

Operating System Concepts with Java 6.25 Silberschatz, Galvin and Gagne ©2003 Operating System Concepts with Java 6.26 Silberschatz, Galvin and Gagne ©2003

Planificarea Multi-Procesor Planificarea Timp-Real


 Planificarea CPU este mult mai complexă când sunt disponibile  Sistemele Hard real-time – solicită terminarea unui task critic
mai multe CPU-uri într-un timp garantat
 Procesoare omogene în cadrul unui multi-procesor  Calcule Soft real-time – solicită ca procesele critice să primească
 Partajarea încărcării prioritate faţă de alte procese

 Multiprocesare asimetrică – doar unul dintre procesoare


accesează structurile de date sistem, eliminând problema
partajării de date

Operating System Concepts with Java 6.27 Silberschatz, Galvin and Gagne ©2003 Operating System Concepts with Java 6.28 Silberschatz, Galvin and Gagne ©2003

Latenţa Dispecerului Evaluarea Algoritmilor


 Modelarea deterministică – ia o anumită încărcare
predeterminată şi defineşte performanţa fiecărui algoritm pentru
acea încărcare
 Modele de cozi
 Implementare

Operating System Concepts with Java 6.29 Silberschatz, Galvin and Gagne ©2003 Operating System Concepts with Java 6.30 Silberschatz, Galvin and Gagne ©2003

5
Evaluarea Planificatorilor CPU prin Simulare
Planificarea Solaris 2

Operating System Concepts with Java 6.31 Silberschatz, Galvin and Gagne ©2003 Operating System Concepts with Java 6.32 Silberschatz, Galvin and Gagne ©2003

Priorităţile Windows XP Planificarea Linux


 Doi algoritmi: divizarea timpului şi timp real
 Divizarea timpului
 Prioritizat pe bază de credite – procesul cu cele mai multe credite
este planificat următorul
 Un anumit credit este scăzut în momentul întreruperii de timer
 Când credit = 0, un alt proces va fi ales
 Când toate procesele au credit = 0, are loc recreditarea
 Bazat pe factori incluzând prioritate şi istoric
 Timp-real
 Soft real-time
 Corespunde Posix.1b – două clase
 FCFS şi RR
 Procesul cu cea mai mare prioritate rulează întotdeauna primul

Operating System Concepts with Java 6.33 Silberschatz, Galvin and Gagne ©2003 Operating System Concepts with Java 6.34 Silberschatz, Galvin and Gagne ©2003

Planificarea Firelor API-ul de Planificare Pthread


#include <pthread.h>
 Planificare Locală – Cum anume decide librăria de fire care fir să #include <stdio.h>
#define NUM THREADS 5
fie preluat de un LWP disponibil
int main(int argc, char *argv[])
{
 Planificare Globală – Cum anume decide nucleul care fir de int i;
pthread t tid[NUM THREADS];
nucleu va rula următorul
pthread attr t attr;
/* preia atributele implicite */
pthread attr init(&attr);
/* seteaza algoritmul de planificare la PROCESS sau SYSTEM */
pthread attr setscope(&attr, PTHREAD SCOPE SYSTEM);
/* seteaza politica de planificare - FIFO, RT, sau OTHER */
pthread attr setschedpolicy(&attr, SCHED OTHER);
/* creaza firele */
for (i = 0; i < NUM THREADS; i++)
pthread create(&tid[i],&attr,runner,NULL);

Operating System Concepts with Java 6.35 Silberschatz, Galvin and Gagne ©2003 Operating System Concepts with Java 6.36 Silberschatz, Galvin and Gagne ©2003

6
API-ul de Planificare Pthread Planificarea Firelor Java

/* acum fa jonctiunea cu fiecare fir */  JVM foloseşte un algoritm preemptiv, bazat pe prioritate
for (i = 0; i < NUM THREADS; i++)
pthread join(tid[i], NULL);
}  Coada FIFO este folosită dacă există mai multe fire cu aceeaşi
/* Fiecare fir va incepe controlul in aceasta functie */ prioritate
void *runner(void *param)
{
printf(“Eu sunt un fir\n");
pthread exit(0);
}

Operating System Concepts with Java 6.37 Silberschatz, Galvin and Gagne ©2003 Operating System Concepts with Java 6.38 Silberschatz, Galvin and Gagne ©2003

Planificarea Firelor Java (cont) Time-Slicing


JVM planifică un fir la rulare când:
Deoarece JVM-ul nu asigură Time-Slicing, metoda yield() poate fi
folosită în acest scop:
1. Firul curent care rulează iese din starea Runnable
2. Un fir cu prioritate mai mare intră în starea Runnable while (true) {
// efectuează un task care foloseşte CPU-ul intensiv
* Notă – JVM-ul nu specifică dacă firele sunt sau nu Time-Sliced ...
Thread.yield();
}

Aceasta cedează controlul unui alt fir de prioritate egală

Operating System Concepts with Java 6.39 Silberschatz, Galvin and Gagne ©2003 Operating System Concepts with Java 6.40 Silberschatz, Galvin and Gagne ©2003

Priorităţile Firelor

Priority Comment
Thread.MIN_PRIORITY Prioritatea minimă a unui fir
Thread.MAX_PRIORITY Prioritatea maximă a unui fir
Thread.NORM_PRIORITY Prioritatea implicită a unui fir

Priorităţile pot fi setate folosind metoda setPriority():


setPriority(Thread.NORM_PRIORITY + 2);

Operating System Concepts with Java 6.41 Silberschatz, Galvin and Gagne ©2003

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