0% ont trouvé ce document utile (0 vote)
7 vues36 pages

Explication S 1

Les pages 50 à 67 traitent de l'ordonnancement des processus, de la synchronisation des processus, des constructeurs de haut niveau, des transactions atomiques et de la gestion de l'accès concurrent à la mémoire. L'ordonnancement du CPU implique de choisir quel processus exécuter parmi ceux prêts, avec des algorithmes tels que FCFS, SJF, Priority Scheduling et Round Robin. La synchronisation des processus gère l'accès aux ressources partagées pour éviter les conflits entre processus concurrents.

Transféré par

hinimdi2
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
7 vues36 pages

Explication S 1

Les pages 50 à 67 traitent de l'ordonnancement des processus, de la synchronisation des processus, des constructeurs de haut niveau, des transactions atomiques et de la gestion de l'accès concurrent à la mémoire. L'ordonnancement du CPU implique de choisir quel processus exécuter parmi ceux prêts, avec des algorithmes tels que FCFS, SJF, Priority Scheduling et Round Robin. La synchronisation des processus gère l'accès aux ressources partagées pour éviter les conflits entre processus concurrents.

Transféré par

hinimdi2
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd

Merci pour le document. Tu m’as demandé une explication détaillée et approfondie des pages 50 à 67.

Voici comment je te propose de procéder :

1. Je vais te résumer et expliquer chaque section présente sur ces pages de façon claire, en français,
avec les exemples et les points essentiels.

2. On va diviser ça en parties pour que tu puisses bien assimiler.

3. Tu pourras me poser des questions à chaque étape si quelque chose reste flou.

Pages 50 à 67 couvrent principalement les thèmes suivants :

Les algorithmes d’ordonnancement (scheduling) du processeur

La synchronisation des processus (section critique, sémaphores, problèmes classiques comme les
philosophes, lecteurs-rédacteurs…)

Les constructeurs de haut niveau (regions critiques, moniteurs)

Les transactions atomiques et la gestion des erreurs

La gestion de l’accès concurrent à la mémoire


Souhaites-tu que je commence par l’ordonnancement des processus (CPU Scheduling) ou un autre
thème en priorité ?

Parfait, on commence donc par l’ordonnancement des processus (CPU Scheduling). Voici une explication
détaillée et claire de ce que tu trouveras dans cette section du cours (pages 50 à 53 environ).

---

1. Qu’est-ce que l’ordonnancement du CPU ?

L'ordonnancement du CPU (CPU Scheduling) consiste à choisir, parmi les processus prêts à s'exécuter,
celui qui obtiendra le processeur. Cela se produit quand plusieurs processus sont en file d’attente (ready
queue).

Pourquoi c’est important ?

Parce qu’un seul processus peut s’exécuter à un moment donné sur le CPU, donc le système
d’exploitation doit décider lequel va passer.

---

2. Les files d’attente (Queues)

Job queue : tous les processus du système.


Ready queue : les processus qui sont prêts et en mémoire, en attente d’utilisation du CPU.

Device queues : les processus en attente d’un périphérique (comme un disque dur).

Chaque processus se déplace entre ces files au cours de son exécution.

---

3. Types de planificateurs (Schedulers)

a. Long-Term Scheduler (ordonnanceur à long terme)

Sélectionne les processus à charger dans la mémoire.

Contrôle le niveau de multiprogrammation (combien de processus sont en mémoire en même temps).

b. Short-Term Scheduler (ordonnanceur à court terme)

Sélectionne le prochain processus à exécuter sur le CPU.

Doit être très rapide car il agit souvent (toutes les millisecondes).
c. Medium-Term Scheduler (ordonnanceur à moyen terme)

Peut retirer temporairement un processus de la mémoire (swapping) pour libérer de la place.

Puis le réintroduire plus tard pour qu’il continue.

---

4. PCB : Process Control Block (Bloc de Contrôle de Processus)

Chaque processus est représenté par un PCB contenant :

Son état (prêt, en cours, bloqué…)

Le compteur de programme (adresse de la prochaine instruction)

Les registres du CPU

Les infos de planification

L’espace mémoire alloué


Les infos d’E/S (fichiers ouverts, périphériques utilisés…)

---

5. Algorithmes de planification

Maintenant on rentre dans les différents algorithmes d’ordonnancement. C’est ce qui détermine dans
quel ordre les processus accèdent au CPU.

Je te propose de les expliquer un par un avec des exemples clairs. Voici la liste :

1. FCFS – First Come First Served

2. SJF – Shortest Job First

3. Priority Scheduling

4. Round Robin (RR)


Tu veux qu’on commence par FCFS, le plus simple ?

Super, on commence donc par le premier algorithme : FCFS – First Come, First Served (Premier arrivé,
premier servi).

---

1. FCFS – First Come, First Served

Définition :

Cet algorithme attribue le CPU au processus qui est arrivé en premier dans la file d’attente. C’est comme
dans une file d’attente au supermarché : on sert les gens dans l’ordre d’arrivée.

Caractéristiques :

Simple à comprendre et à implémenter.

Utilise une file FIFO (First-In, First-Out).

Non préemptif : un processus garde le CPU jusqu’à ce qu’il termine.

---
2. Exemple :

Supposons que 4 processus arrivent dans cet ordre avec les temps d’exécution (burst time) suivants :

Ordre d’arrivée : P1, P2, P3, P4

Gantt Chart (Chronologie d’exécution)

| P1 | P2 | P3 | P4 |

0 3 8 10 14

Calcul des temps :

Waiting Time (WT) = Temps d’attente avant l’exécution

P1 = 0

P2 = 3 (attend que P1 finisse)

P3 = 8 (attend que P1 + P2 finissent)

P4 = 10 (attend que P1 + P2 + P3 finissent)


Turnaround Time (TAT) = WT + temps d’exécution

P1 = 0 + 3 = 3

P2 = 3 + 5 = 8

P3 = 8 + 2 = 10

P4 = 10 + 4 = 14

Moyennes :

Temps d’attente moyen = (0 + 3 + 8 + 10) / 4 = 5.25 ms

Temps de séjour moyen = (3 + 8 + 10 + 14) / 4 = 8.75 ms

---

3. Avantages et Inconvénients

Avantages :
Simple à coder

Équitable en surface (pas de favoritisme)

Inconvénients :

Peut provoquer un long temps d’attente pour les petits processus si un gros arrive avant (effet de
convoi).

Pas adapté aux systèmes interactifs.

---

Tu veux que je continue avec le deuxième algorithme (SJF - Shortest Job First) ou tu veux qu'on fasse un
petit quiz rapide pour voir si tu as bien compris ?

Parfait, continuons avec le deuxième algorithme : SJF – Shortest Job First (Processus le plus court en
premier).

---

2. SJF – Shortest Job First


Définition :

Le processeur est alloué au processus avec le plus petit temps d’exécution (CPU burst).

C’est comme si tu faisais passer en premier les gens avec les courses les plus rapides à scanner.

---

Types :

Non préemptif : Une fois qu’un processus commence, il va jusqu’au bout.

Préemptif (Shortest Remaining Time First - SRTF) : Si un nouveau processus plus court arrive, il
interrompt le processus en cours.

---

Exemple non préemptif :

Ordre choisi par SJF :

On trie par ordre croissant du temps CPU : P3, P1, P4, P2


Gantt Chart :

| P3 | P1 | P4 | P2 |

0 2 5 9 14

Waiting Time (WT) :

P3 = 0

P1 = 2

P4 = 5

P2 = 9

Turnaround Time (TAT) = WT + Temps CPU :

P3 = 0 + 2 = 2

P1 = 2 + 3 = 5

P4 = 5 + 4 = 9

P2 = 9 + 5 = 14
Moyennes :

Temps d’attente moyen = (0 + 2 + 5 + 9) / 4 = 4 ms

Temps de séjour moyen = (2 + 5 + 9 + 14) / 4 = 7.5 ms

---

Exemple préemptif (SRTF) :

Gantt Chart :

|P1|P2|P4|P1|P3|

0 1 5 10 17 26

Waiting Time :

P1 = 10 - 0 - 1 (début) = 9

P2 = 1 - 1 = 0
P3 = 17 - 2 = 15

P4 = 5 - 3 = 2

Temps d’attente moyen = (9 + 0 + 15 + 2) / 4 = 6.5 ms

---

Avantages / Inconvénients :

Avantages :

Minimise le temps d’attente moyen

Optimal théoriquement

Inconvénients :

Difficile de prédire le prochain burst CPU

Peut provoquer une famine : les longs processus peuvent attendre indéfiniment
---

Souhaites-tu que je continue avec l’algorithme par priorité, ou tu veux que je te propose un exercice
d’application sur SJF ?

Parfait, on continue donc avec le troisième algorithme : l’ordonnancement par priorité (Priority
Scheduling).

---

3. Priority Scheduling – Ordonnancement par Priorité

Définition :

Chaque processus se voit attribuer une priorité. Le CPU est attribué au processus avec la plus haute
priorité.

Priorité plus petite = plus importante (ex: priorité 1 > priorité 4)

Peut être préemptif ou non préemptif

---
Exemple :

Ordre basé sur priorité (plus petite = plus prioritaire) :

1. P2 (priorité 1)

2. P4 (2)

3. P1 (3)

4. P3 (4)

5. P5 (5)

Gantt Chart (non préemptif) :

| P2 | P4 | P1 | P3 | P5 |

0 1 5 15 18 20
Temps d’attente (WT) :

P2 = 0

P4 = 1 – 1 = 0

P1 = 5 – 0 = 5

P3 = 15 – 2 = 13

P5 = 18 – 5 = 13

Temps moyen d’attente = (0 + 0 + 5 + 13 + 13) / 5 = 6.2 ms

---

Préemptif ou non ?

Non préemptif : un processus garde le CPU jusqu’à la fin.

Préemptif : un processus avec une priorité plus haute peut interrompre celui en cours.
---

Problèmes :

Famine (Starvation) : un processus avec une priorité basse peut attendre indéfiniment.

Solution : utiliser l'"aging"** : augmenter progressivement la priorité d’un processus qui attend trop
longtemps.

---

Souhaites-tu qu’on continue avec Round Robin, ou tu préfères un petit exercice pour t’entraîner sur la
planification par priorité ?

D’accord, on continue avec le dernier algorithme de planification classique : Round Robin (RR).

---

4. Round Robin (RR) – Algorithme du tourniquet

Définition :
Chaque processus reçoit une quantité de temps fixe, appelée quantum (ou time slice).

Si le processus n’a pas fini à la fin du quantum, il est interrompu et replacé à la fin de la file d’attente.

Le CPU passe ensuite au processus suivant.

C’est comme un tour de manège : tout le monde passe à son tour, pour une durée limitée.

---

Caractéristiques :

Préemptif par nature

Très utilisé dans les systèmes temps partagé (multitâche interactif)

Temps de réponse rapide pour tous les processus

Efficacité dépend beaucoup de la taille du quantum :

Trop petit = trop de changements = perte de temps


Trop grand = comme FCFS

---

Exemple :

Quantum = 1 ms

Gantt Chart :

P1 P2 P3 P4 P1 P2 P4 P2 P4 P2

0 1 2 3 4 5 6 7 8 9 10

Calcul du temps d’attente (WT) :

On calcule le moment où chaque processus est en pause, on additionne ces périodes avant son dernier
passage, et on soustrait son temps d’exécution final pour obtenir WT.

Ou plus simplement :

P1 : commence à 0, revient à 4 → WT = (0 + (4 – 1)) = 3

P2 : (1 + (5 – 2) + (7 – 6) + (9 – 8)) = 1 + 3 + 1 + 1 = 6
P3 : (2) + (6 – 3) = 2 + 3 = 5

P4 : (3 + (6 – 4) + (8 – 7)) = 3 + 2 + 1 = 6

Temps d’attente moyen = (3 + 6 + 5 + 6) / 4 = 5 ms

---

Avantages / Inconvénients

Avantages :

Équitable : tout le monde a du temps CPU

Temps de réponse rapide

Très adapté aux systèmes interactifs

Inconvénients :

Pas optimal pour les processus courts si le quantum est mal choisi
Peut provoquer un peu de surcharge à cause des interruptions fréquentes

---

Voilà pour les 4 principaux algorithmes ! Tu veux maintenant :

1. Un récapitulatif comparatif

2. Un exercice pour t’entraîner

3. Ou on continue avec la suite du cours (comme la synchronisation des processus) ?

À toi de choisir !

D’accord, on continue avec le dernier algorithme de planification classique : Round Robin (RR).

---
4. Round Robin (RR) – Algorithme du tourniquet

Définition :

Chaque processus reçoit une quantité de temps fixe, appelée quantum (ou time slice).

Si le processus n’a pas fini à la fin du quantum, il est interrompu et replacé à la fin de la file d’attente.

Le CPU passe ensuite au processus suivant.

C’est comme un tour de manège : tout le monde passe à son tour, pour une durée limitée.

---

Caractéristiques :

Préemptif par nature

Très utilisé dans les systèmes temps partagé (multitâche interactif)

Temps de réponse rapide pour tous les processus


Efficacité dépend beaucoup de la taille du quantum :

Trop petit = trop de changements = perte de temps

Trop grand = comme FCFS

---

Exemple :

Quantum = 1 ms

Gantt Chart :

P1 P2 P3 P4 P1 P2 P4 P2 P4 P2

0 1 2 3 4 5 6 7 8 9 10

Calcul du temps d’attente (WT) :

On calcule le moment où chaque processus est en pause, on additionne ces périodes avant son dernier
passage, et on soustrait son temps d’exécution final pour obtenir WT.

Ou plus simplement :
P1 : commence à 0, revient à 4 → WT = (0 + (4 – 1)) = 3

P2 : (1 + (5 – 2) + (7 – 6) + (9 – 8)) = 1 + 3 + 1 + 1 = 6

P3 : (2) + (6 – 3) = 2 + 3 = 5

P4 : (3 + (6 – 4) + (8 – 7)) = 3 + 2 + 1 = 6

Temps d’attente moyen = (3 + 6 + 5 + 6) / 4 = 5 ms

---

Avantages / Inconvénients

Avantages :

Équitable : tout le monde a du temps CPU

Temps de réponse rapide

Très adapté aux systèmes interactifs


Inconvénients :

Pas optimal pour les processus courts si le quantum est mal choisi

Peut provoquer un peu de surcharge à cause des interruptions fréquentes

---

Voilà pour les 4 principaux algorithmes ! Tu veux maintenant :

Excellent choix ! Voici un récapitulatif comparatif clair et structuré des 4 algorithmes de planification que
nous avons vus :

---

Tableau comparatif des algorithmes d’ordonnancement du CPU

---

Quelques conseils pratiques :


Pour les systèmes batch : SJF est souvent théoriquement le plus efficace.

Pour les systèmes interactifs / multitâches : Round Robin est recommandé.

FCFS est trop simple pour les systèmes modernes, mais bon pour débuter.

Priority est utile quand certains processus sont plus critiques, mais attention à la famine.

---

Tu es maintenant bien armé pour comprendre l’ordonnancement des processus !

Prêt(e) à continuer avec la synchronisation des processus (section suivante du cours) ? Ça parle de
sections critiques, sémaphores, et des problèmes classiques comme les philosophes.

Super, entrons maintenant dans la synchronisation des processus, une partie essentielle des systèmes
d’exploitation, surtout quand plusieurs processus s’exécutent en même temps (concurrence).

---

1. Qu’est-ce que la synchronisation des processus ?

C’est la gestion de l’accès concurrent à des ressources partagées (ex. : fichiers, variables, imprimantes…).
On doit éviter que deux processus modifient en même temps une donnée partagée, ce qui pourrait
causer des incohérences.

---

2. Le Problème de la Section Critique

Une section critique est une portion de code où un processus accède à des données partagées. Il faut
que seul un processus à la fois puisse l’exécuter.

Exemple de structure :

while (true) {

// Entrée : demander l'accès

// SECTION CRITIQUE : accès à la ressource partagée

// Sortie : libérer la ressource

// Reste du code (remainder section)

---

3. Conditions qu’une solution doit respecter :

1. Exclusion mutuelle (Mutual Exclusion) : un seul processus dans la section critique à la fois.
2. Progrès (Progress) : s’il n’y a aucun processus dans la section critique, un processus qui veut y entrer
doit pouvoir le faire.

3. Attente bornée (Bounded Waiting) : un processus ne doit pas attendre éternellement pour entrer.

---

4. Outils de synchronisation : les sémaphores

Un sémaphore est une variable spéciale utilisée pour contrôler l’accès à des ressources.

Il existe deux opérations fondamentales :

wait(S) ou P(S) : décrémente S. Si S < 0, le processus est bloqué.

signal(S) ou V(S) : incrémente S. Si des processus sont en attente, l’un d’eux est réveillé.

Exemple simple :

Semaphore S = 1;
wait(S); // demande d'accès

// section critique

signal(S); // libération

---

5. Sémaphores binaires vs comptants

Binaire (mutex) : ne vaut que 0 ou 1 → utilisé pour l’exclusion mutuelle

Comptant : peut avoir n’importe quelle valeur entière → utilisé pour les files d’attente

---

Souhaites-tu que je continue avec les problèmes classiques de synchronisation (philosophes,


lecteurs/rédacteurs, buffer borné) ou veux-tu un petit exercice sur les sémaphores pour tester ta
compréhension ?

Parfait, on enchaîne avec les problèmes classiques de synchronisation, qui sont souvent posés en
examen ou entretien. Ils illustrent comment utiliser les sémaphores dans des situations concrètes.

---
1. Le problème du tampon borné (Bounded Buffer Problem)

Aussi appelé Producteur - Consommateur.

Contexte :

Un producteur crée des éléments et les place dans un tampon (buffer).

Un consommateur retire les éléments du tampon.

Le tampon a une capacité limitée (N éléments).

Objectif :

Ne pas produire quand le tampon est plein.

Ne pas consommer quand le tampon est vide.

Éviter que le producteur et le consommateur modifient le tampon en même temps.

Sémaphores utilisés :
mutex (binaire) = contrôle l’accès au tampon (exclusion mutuelle)

empty (comptant) = nombre de cases vides dans le tampon

full (comptant) = nombre de cases pleines

Initialisation :

mutex = 1;

empty = N; // N = taille du tampon

full = 0;

Code du producteur :

do {

produire_un_element();

wait(empty); // attendre une place vide

wait(mutex); // entrer section critique

ajouter_au_buffer();

signal(mutex); // sortir de la section critique

signal(full); // indiquer qu’un élément est dispo

} while (true);

Code du consommateur :
do {

wait(full); // attendre qu’un élément soit disponible

wait(mutex); // entrer section critique

retirer_du_buffer();

signal(mutex); // sortir de la section critique

signal(empty); // indiquer qu’une place s’est libérée

consommer_element();

} while (true);

---

2. Le problème des lecteurs/rédacteurs (Readers-Writers)

Contexte :

Plusieurs lecteurs peuvent lire en même temps.

Un seul rédacteur peut écrire à la fois.

Aucun lecteur ne doit lire pendant qu’un rédacteur écrit.

But :
Autoriser plusieurs lecteurs en même temps

Mais un seul rédacteur exclusif

Solution :

Utiliser un compteur readcount et deux sémaphores :

mutex : protège readcount

wrt : protège l’accès exclusif à la ressource

Code du lecteur :

wait(mutex);

readcount++;

if (readcount == 1)

wait(wrt); // premier lecteur bloque les écrivains

signal(mutex);

// LECTURE
wait(mutex);

readcount--;

if (readcount == 0)

signal(wrt); // dernier lecteur libère l'accès

signal(mutex);

Code du rédacteur :

wait(wrt);

// ÉCRITURE

signal(wrt);

---

3. Le problème des philosophes (Dining Philosophers)

Contexte :

5 philosophes autour d’une table.

Chaque philosophe a besoin de 2 baguettes pour manger (une à gauche, une à droite).

Il ne peut manger que s’il a les deux baguettes.


Risque de blocage (deadlock) si tous prennent une seule baguette en même temps.

Solution simple (avec sémaphores) :

Une baguette = un sémaphore

Le philosophe i prend :

wait(chopstick[i]);

wait(chopstick[(i + 1) % 5]);

Et relâche après avoir mangé :

signal(chopstick[i]);

signal(chopstick[(i + 1) % 5]);

Mais attention : cette solution peut mener à un deadlock si tous prennent leur baguette gauche en
même temps.

Amélioration possible :

Faire en sorte que seulement 4 philosophes maximum puissent essayer de manger en même temps.

Utiliser un sémaphore général room = 4 :


wait(room);

wait(chopstick[i]);

wait(chopstick[(i + 1) % 5]);

// manger

signal(chopstick[i]);

signal(chopstick[(i + 1) % 5]);

signal(room);

---

Souhaites-tu qu’on passe maintenant aux constructeurs plus avancés comme les régions critiques et les
moniteurs, ou tu veux faire un petit quiz sur ces trois problèmes classiques ?

Vous aimerez peut-être aussi