Ordonnancement
Progression
#Ordonnancement
À quoi ça sert: décider quel processus/thread obtient le CPU et quand. Objectifs: latence faible (interactif), débit élevé (batch), équité et respect de priorités. Comment: politiques (FCFS, SJF/SRTF, RR, priorités) et files prêtes.
Objectifs d’apprentissage
- Choisir un algorithme selon le contexte (interactif, batch, mixte).
- Expliquer l’impact du quantum (RR) sur réactivité vs overhead.
- Identifier famine (starvation), convoy effect et techniques d’atténuation (aging).
- Interpréter les métriques: réponse, attente, turnaround, throughput.
#Simulation simple (Round Robin)
#Visualisation: file prête (RR)
#Animation: politiques et compromis
Trop petit → beaucoup de changements de contexte (overhead). Trop grand → se rapproche de FCFS (perte de réactivité). Une règle empirique: proche du temps d’I/O moyen pour favoriser les tâches interactives.
#Comparatif visuel (mêmes jobs)
Jobs: A=5, B=4, C=3 (durées CPU, arrivée à t=0). Quantum RR=2.
Temps: 0 5 9 12 Gantt: | AAAAA | BBBB | CCC | Attente moyenne ≈ (0 + 5 + 9)/3 = 4.67
#Exercice : Algorithme Shortest Remaining Time First (SRTF)
Implémentez l'algorithme SRTF (préemptif) pour l'ordonnancement de processus.
#Instructions
- SRTF est la version préemptive de SJF : le processus avec le temps restant le plus court est toujours exécuté.
- À chaque unité de temps, vérifiez si un nouveau processus arrive.
- Si un nouveau processus a un temps restant plus court que le processus courant, préemptez le processus courant.
- Suivez les métriques : temps d'attente, temps de réponse, temps de rotation.
#Exemple de code
1def srtf_scheduling(processes):2 # processes: liste de tuples (nom, arrival_time, burst_time)3 n = len(processes)4 # Trier par temps d'arrivée5 processes.sort(key=lambda x: x[1])6 7 # Initialisation8 remaining_time = [p[2] for p in processes]9 completion_time = [0] * n10 waiting_time = [0] * n11 turnaround_time = [0] * n12 13 time = 014 completed = 0
Une tâche CPU‑bound longue en tête bloque les tâches courtes/interactives → mauvais temps de réponse. SJF/RR/MLFQ limitent cet effet.
Les tâches à faible priorité ou très longues peuvent ne jamais passer. Mitiger via aging (augmentation progressive de priorité) ou budgets/quotas.
Temps de réponse, attente, turnaround; trade-offs entre équité et throughput.
#Quiz
#MLFQ (Multi‑Level Feedback Queue)
Principe: plusieurs files de priorités; nouveaux jobs en haut, préemption agressive; descente si quantum consommé, remontée pour I/O bound.
#Animation: MLFQ
#Mini‑simulation
#Quiz éclair
#Politiques classiques et compromis
- FCFS: simple mais sujet au « convoy effect » si un long job est devant.
- SJF/SRTF: minimise le temps moyen si on estime la durée; risque de famine pour longs jobs; nécessite préemption pour SRTF.
- Round‑Robin: bon pour l’interactif; quantum trop petit → overhead; trop grand → se rapproche de FCFS.
#Files multi‑niveaux et priorités
- MLFQ: promeut les I/O‑bound (réactifs), dégrade les CPU‑bound; aging pour éviter la famine.
- Inversion de priorité: protocole d’héritage/ceiling sur mutex pour éviter qu’un bas‑priorité bloque un haut‑priorité.