graph LR
C["Capacitat
10 unitats"] -->|5| P1[P₁]
C -->|5| P2[P₂]
style C fill:#f0f0f0,stroke:#444,stroke-width:1px
style P1 fill:#b3d4fc,stroke:#333,stroke-width:1px
style P2 fill:#b3d4fc,stroke:#333,stroke-width:1px
Unitat 4 · Sistemes Operatius (SO)
Objectiu: Garantir que tots els processos rebin un tracte equitatiu en l’accés a la CPU, independentment de la seva prioritat o ús anterior.
Principis:
Algorismes que aproximen la planificació justa:
Quina quantitat de recurs hauria de rebre cada procés per garantir una planificació justa?*
Tenim una capacitat total de recurs:
\[C = 10 \text{ unitats} \]
Dos processos amb demandes diferents:
Solució justa:
graph LR
C["Capacitat
10 unitats"] -->|5| P1[P₁]
C -->|5| P2[P₂]
style C fill:#f0f0f0,stroke:#444,stroke-width:1px
style P1 fill:#b3d4fc,stroke:#333,stroke-width:1px
style P2 fill:#b3d4fc,stroke:#333,stroke-width:1px
Quina quantitat de recurs hauria de rebre cada procés per garantir una planificació justa?*
Tenim una capacitat total de recurs:
\[C = 10 \text{ unitats} \]
Dos processos amb demandes diferents:
Solució justa:
graph LR
C["Capacitat
10 unitats"] -->|6| P1[P₁]
C -->|4| P2[P₂]
style C fill:#f0f0f0,stroke:#444,stroke-width:1px
style P1 fill:#b3d4fc,stroke:#333,stroke-width:1px
style P2 fill:#b3d4fc,stroke:#333,stroke-width:1px
Quina quantitat de recurs hauria de rebre cada procés per garantir una planificació justa?*
Tenim una capacitat total de recurs:
\[C = 10 \text{ unitats} \]
Dos processos amb demandes diferents:
Solució justa:
graph LR
C["Capacitat
10 unitats"] -->|4| P1[P₁]
C -->|4| P2[P₂]
C -->|2| P3[P₃]
style C fill:#f0f0f0,stroke:#444,stroke-width:1px
style P1 fill:#b3d4fc,stroke:#333,stroke-width:1px
style P2 fill:#b3d4fc,stroke:#333,stroke-width:1px
style P3 fill:#b3d4fc,stroke:#333,stroke-width:1px
L’algorisme de Max-Min Fairness assegura que els recursos es distribueixin de manera que cap procés no rebi més del que necessita fins que tots els processos hagin rebut almenys la seva demanda mínima.
C = total_resource_capacity
S = {J1, J2, …, Jn} # conjunt de treballs actius
D = [d1, d2, …, dn] # demanda de cada treball
A = [0]*n # vector d'assignació
while S != ∅:
f = C / |S| # quota justa per a cada treball
b = True
for j in S:
if D[i] < f: # si un treball demana menys del que li toca
b = False
A[i] = D[i] # satisfà la seva demanda
C -= D[i]
S = S \ {j}
if b: # si ningú demana menys
for j in S:
A[i] = f
S = S \ {j}
S = ∅Si \(n\) tasques han de compartir un recurs (CPU) \(\Rightarrow\) cadascun rep, per defecte, una part de \(\frac{1}{n}\) del recurs.
S’utilitza per ajustar la distribució quan un usuari no vol o no pot fer servir tota la seva quota de recurs.
Exemple: Si la tasca 1 només necessita un 20% del recurs, el recurs restant es redistribueix equitativament entre els altres usuaris.
Els pesos determinen la proporció del recurs disponible que correspon a cada procés en cas de competència.
Exemple: Si la tasca 1 té un pes de 1 i la tasca 2 té un pes de 2, la tasca 2 rebrà proporcionalment més recurs respecte a la tasca 1 (2/3 vs 1/3).
Procés curts: 10 bitllets - Procés llargs: 1 bitllet.
| Nº curts | Nº llargs | % CPU curts | % CPU llargs |
|---|---|---|---|
| 1 | 1 | 91% | 9% |
| 0 | 2 | - | 50% |
| 2 | 0 | 50% | - |
| 10 | 1 | 99.0% | 0.99% |
| 1 | 10 | 50% | 5% |
\[\text{%CPU} = \frac{\text{nombre de bitllets del procés}}{\text{nombre total de bitllets}} \times 100\]
Warning
Si hi ha massa processos curts, el temps de resposta pot ser molt petit.
- Solució: desconnectar alguns processos o ajustar els bitllets per equilibrar la càrrega.
És possible que els processos cooperin per obtenir més bitllets i, per tant, més temps de CPU?
\[A_i = \frac{P_i}{\sum_{j} P_j} \times C\]
| F | P | A |
|---|---|---|
| f | 5 | 50% |
| e | 1 | 10% |
| d | 1 | 10% |
| c | 1 | 10% |
| b | 1 | 10% |
| a | 1 | 10% |

Generalized Processor Sharing (GPS) és un model teòric i ideal on l’ample de banda es divideix de forma perfectament contínua (com un fluid) i simultània entre tots els fluxos actius, segons els seus pesos.
Weighted Fair Queuing (WFQ) és un algorisme real i implementable que aproxima el comportament ideal del GPS. A les xarxes, els recursos es transmeten com a paquets discrets (no com a fluids). Per la qual cosa, l’enllaç només pot transmetre un paquet complet a la vegada (no simultàniament).

No Apropiatiu: Si un paquet de prioritat alta arriba mentre se’n transmet un altre de baixa prioritat, el segon no pot ser expulsat immediatament. Per mantenir la justícia, el WFQ necessita una mètrica estable i independent de la mida dels paquets que representi el servei ideal rebut (Temps de Finalització Virtual).
Manteniment d’Inactivitat: Si un flux roman inactiu i no envia dades, el temps d’inactivitat no s’ha de comptar com a servei rebut (crèdit guanyat). En reactivar-se, el flux ha de començar el servei sense penalització (amb un ‘comptador’ que s’hagi aturat).
Temps Real (Real Time) no es pot utilitzar directament com a mecanisme de planificació. El WFQ utilitza un Temps de Referència Virtual (Virtual Time) com a reemplaçament del temps real del model GPS.
El temps de finalització real és inestable i canvia cada vegada que un flux esdevé actiu o inactiu (entrades/sortides).
Mantenim una mètrica de servei estable que aïlla la finalització dels paquets de les fluctuacions de trànsit.
El Temps Virtual (\(V(t)\)) actua com un Comptador de Rodes (Round Index) en un planificador ideal bit-per-bit Round-Robin
\(V(t)\) és la taxa normalitzada de progrés per a qualsevol flux actiu en el sistema GPS ideal.
\[V(t) \rightarrow \frac{\partial V(t)}{\partial t} =\frac{C}{\sum_{i \in A(t)} w_i} \]
on:
Càlcul del Temps de Finalització Virtual (\(\mathbf{F_i^k}\)):
El temps que tindria el paquet si el sistema fos GPS ideal
\[F_{i}^{k} = max(F_{i}^{k-1}, V(a_{i}^{k})) + \frac{L_{i}^{k}}{w_{i}}\]
L’algorisme WFQ selecciona i transmet el paquet a la cua que tingui el Temps de Finalització Virtual (\(F_i^k\)) més petit.
És la diferència entre el servei que un flux hauria de rebre en el sistema ideal (GPS) i el servei que realment ha rebut en el sistema de paquets (WFQ).
\[Lag_i(t) = \text{Servei Rebut} - \text{Servei Ideal}\]
El lag pot ser positiu o negatiu:
LAG Positiu: El flux ha rebut més servei del que li correspondria (excedent de servei o ràfega). LAG Negatiu: El flux ha rebut menys servei del que li correspondria (dèficit de servei).
El temps d’arribada virtual serveix per sincronitzar l’entrada dels paquets al sistema ideal, evitant que un flux es beneficiï d’un retard menor o d’una ràfega.
El Temps d’Arribada Virtual (\(\mathbf{S_i^k}\)) (o Starting Tag) com a filtre d’elegibilitat per limitar les ràfegues de paquets.
\[S_{i}^{k} = max(S_{i}^{k-1}, V(a_{i}^{k})) \]
Un paquet només pot ser seleccionat si el seu \(S_i^k\) és menor o igual al \(V(t)\) actual del sistema. Això impedeix que el planificador seleccioni un paquet massa aviat, forçant-lo a esperar virtualment i limitant el LAG.



Unitat 4 · Sistemes Operatius (SO) 🏠