Planificació simple: cua circular + Round Robin (RR).
Adequat per sistemes amb poques tasques.
Linux 2.2:
S’introdueixen classes de planificació:
#define SCHED_OTHER 0// Processos normals d'usuari (per defecte)#define SCHED_FIFO 1// Temps real, no preemptiu#define SCHED_RR 2// Temps real, Round Robin
SCHED_FIFO
Temps real, prioritat fixa.
El procés actual:
Continua execució fins que acaba
O bé fins que apareix un procés amb major prioritat
Si hi ha diversos processos amb mateixa prioritat:
Execució FIFO
SCHED_RR
Igual que SCHED_FIFO, però amb quantum (slice) de temps.
Processos de la mateixa prioritat s’alternen:
Cada procés utilitza la CPU durant el seu quantum
Després passa al final de la cua
Els processos amb menor prioritat només s’executen si no hi ha cap de més alta
Linux 2.4 – Planificador O(n)
Epochs: cicles de planificació
Slices: quota de temps assignada per epoch
Si un procés dorm o es bloqueja, recupera part del slice per al següent epoch
Amb molts processos la selecció és \(O(n)\) → poc escalable.
Linux 2.6 – Planificador O(1)
Les tasques es gestionen en llistes per prioritat (0–139):
0-99: temps real (SCHED_FIFO, SCHED_RR)
100-139: processos d’usuari (SCHED_NORMAL)
Selecció de tasca: O(1)
Més escalable que O(n), però:
Prioritats rígides → pot degradar la justicia real
SCHED_NORMAL
És la política per defecte per a processos d’usuari
Cada procés té:
Prioritat estàtica: basada en el nice (−20 … +19)
Prioritat dinàmica: ajustada segons el comportament (p.ex. interactiu o CPU-bound)
Heurística de SCHED_NORMAL
Com una prioritat dinàmica es tradueix en accés a CPU?
El pare (P1) és vermell i l’oncle (P2) també → recoloració
[8B](P4)/ \(P2)[5B][10B](P1) \[15R](P3)
Limitacions del CFS
Procés
Pes (nice)
Comportament
A
1024
Tasques curtes, apareix sovint
B
1024
Processa grans blocs, no interactiu
C
1024
Tasques curtes, arriba més tard
Limitacions del CFS
Temps
Procés actiu
Context
0–50ms
B
A encara no ha arribat
50ms
A arriba
A té vruntime=0, B té vruntime alt
50–60ms
A
CFS tria A pel vruntime baix
60ms
C arriba
C té vruntime=0, A i B tenen vruntime>0
60–70ms
C
Tria C ara (just, basat en vruntime baix)
70–80ms
A
Torn a A, però…
⋮
…
…
Limitacions del CFS
A i C es beneficien només perquè arriben tard → vruntime=0.
Els processos interactius que tornen sovint (com A) no són tan prioritzats després.
Pot provocar latències no òptimes en sistemes interactius o aplicacions UI.
El CFS considera només el temps virtual acumulat, però no té en compte la urgència o deadlines virtuals de les tasques.
Del CFS a EEVDF: per què canviar?
Hem vist que el CFS:
Reparteix la CPU de forma justa i proporcional al pes (nice).
Utilitza el vruntime per decidir quin procés va “endarrerit”.
Manté els processos ordenats per vruntime amb un arbre Red-Black.
Però el CFS té limitacions:
No modela explícitament deadlines ni temps d’espera desitjats.
El comportament amb workloads interactius o molt canviants pot tenir latències no òptimes.
És complicat ajustar-lo a nous requisits (jocs, temps real tou, UI molt responsiva).
EEVDF: una evolució del CFS
Linux introdueix EEVDF (Earliest Eligible Virtual Deadline First) com a evolució de CFS:
Manté la idea de temps virtual i justícia.
Introdueix el concepte de deadline virtual per a cada tasca.
Prioritza la tasca amb la deadline virtual més urgent (i elegible).
Ara que entenem bé pesos i vruntime, podem veure com EEVDF afegeix les deadlines virtuals al model.
Què és la quota d’un procés actiu?
La quota d’un procés \(i\) representa la seva fracció de temps en comparació amb els altres processos actius:
\[f_i(t) = \frac{w_i}{\sum_{j \in A(t)} w_j}\]
On:
\(w_i\) = pes del procés \(i\) (importància relativa).
\(A(t)\) = conjunt de processos actius en el temps \(t\).
Què és el temps de servei acumulat?
El temps de servei d’un procés \(i\) en un interval \([t_0, t_1]\) és:
\[S_i(t_0, t_1) = \int_{t_0}^{t_1} f_i(t) dt\]
Aquesta integral representa el temps total que el procés hauria d’haver rebut segons la seva quota en l’interval de temps especificat. En un sistema ideal, el temps de servei acumulat hauria de coincidir amb el temps real que el procés ha estat en execució.
Què és la deadline virtual?
El Virtual Deadline (deadline virtual) d’un procés es defineix com el temps virtual en què un procés hauria de completar la seva execució segons la seva quota. Per a una sol·licitud de servei de durada \(r\), la deadline virtual es calcula com:
\[D_i = ve_i + \frac{r_i}{w_i}\]
on:
\(ve_i\) = Temps virtual en què el procés \(i\) esdevé elegible.
\(r_i\) = durada de la sol·licitud de servei.
\(w_i\) = pes del procés.
El deadline virtual és una mesura que permet al planificador determinar quins processos han de ser executats primer per a garantir que es compleixin les seves quotes.
Recordatori: Lag d’un procés
L’objectiu de l’EEVDF és mantenir el lag el més proper possible a zero per a garantir una assignació justa del temps de CPU.
\[L_i(t) = S_i(t_0, t) - s_i(t_0,t)\]
on:
\(L_i(t)\) = lag del procés \(i\) en el temps \(t\).
\(S_i(t_0, t)\) = temps de servei acumulat fins al temps \(t\).
\(s_i(t_0, t)\) = temps real d’execució del procés en l’interval \([t_0, t]\).
Si: - \(L_i(t) > 0\), el procés ha rebut menys temps del que li correspondria. - \(L_i(t) < 0\), el procés ha rebut més temps del que li pertoca.
Com funciona l’algorisme EEVDF?
Assignació de quotes: Cada procés rep una quota de temps de CPU proporcional al seu pes.
Càlcul del temps virtual i deadlines virtuals: Es calcula el temps virtual \(V(t)\) i es determina el deadline virtual \(D_i\) per a cada procés.
Càlcul del lag: Es calcula el lag \(L_i(t)\) per a cada procés, comparant el temps de servei rebut amb el temps de servei esperat.
Selecció del procés:
Si hi ha processos amb lag positiu, es prioritzen per a garantir que reben el temps de CPU que els falta.
Es selecciona el procés amb el deadline virtual més proper per a ser executat.
Execució: El procés seleccionat s’executa fins que es completa la seva quota o fins que es produeix una interrupció.
Exemple EEVDF: pas a pas
Tres processos, amb pesos i deadlines virtuals:
Procés
Pes (\(w_i\))
Quota
Deadline inicial (\(D_i\))
A
10
25%
3
B
20
50%
1.5
C
10
25%
3
Suma de pesos: 40
Quota ideal: A = 25%, B = 50%, C = 25%
Seleccionem el prcocés amb la deadline virtual més proper i elegible (B).