IV. Gestion du processeur central
Dans un système multitâche, la ressource la plus importante d’une
machine est le processeur. Cette ressource est allouée à un et un processus
sélectionné parmi un ensemble des processus éligibles. Par conséquent, il
convient à bien gérer ce dernier afin de le rendre plus productif. En effet, un
système d’exploitation dispose d’un module qui s’occupe de l’allocation du
processeur en l’occurrence le Dispatcheur. Ce module est exécuté chaque fois
qu’un processus se termine ou se bloque dans le but de réquisitionner le
processeur pour un autre processus. En plus de ce Dispatcheur, un système
d’exploitation dispose d’un autre module permettant ainsi la mise en ordre des
processus qui demandent le processeur.
IV.1. Définition
L'ordonnanceur (scheduler) est un programme du système
d’exploitation qui s’occupe de choisir, selon une politique de scheduling
donnée, un processus parmi les processus prêts pour lui affecter le processeur.
IV.2. Objectifs de scheduling.
L'ordonnancement est la partie du système d'exploitation qui
détermine dans quel ordre les processus prêts à s'exécuter (présents dans la
file des prêts) seront élus. Ses objectifs sont :
1.
faible temps de réponse des processus,
2.
bon fonctionnement des processus en tâches de fond,
3.
éviter absolument la famine.
IV.3. Critères de scheduling.
1.
Utilisation de la CPU – utiliser la CPU le maximum possible
2.
Débit (Throughput) – # de processus qui terminent leur exécution
par unité de temps
3.
Temps de rotation (Turnaround time) – le temps depuis le lancement
du processus jusqu’à sa terminaison (les attentes incluses)
4.
Temps d’attente – temps d’un processus dans la file d’attente des
processus prêts
5.
Temps de réponse – temps mis entre une requête émise et la
première réponse, pas la sortie (pour les environnements à temps partagé)
IV.4. Niveaux de scheduling
Il existe trois niveaux de Scheduling :
1. Le scheduling de haut niveau (Long-Term scheduling) qui décide du
degré de la multiprogrammation (nombre maximal de processus dans le système).
2.
Le scheduling de niveau
intermédiaire (Medium-Term scheduling) gère le déplacement des processus d’une
file d’attente à une autre. Dans la majorité des systèmes actuels, les niveaux
intermédiaires et haut sont combinés -> haut niveau.
3. Le scheduling de bas niveau (Short-Term scheduling) (dispatcher ou
répartiteur) est sollicité plusieurs fois par seconde et doit constamment
résider en mémoire. Il permet de déterminer le processus prêt à utiliser le
processeur central.
IV.5. Politiques de scheduling.
Les algorithmes d’ordonnancement se distinguent les uns des autres
du fait que certains
autorisent la réquisition de l’unité centrale alors que d’autres l’interdisent.
La réquisition est
la possibilité de retirer à n’importe quel instant le processeur à un processus
même si ce
dernier est en cours d’exécution.
Nous distinguons plusieurs algorithmes d’ordonnancement, les plus
répandus sont :
IV.5.1. First
in first out FIFO (first come first served FCFS)
Dans cet algorithme ; connu sous le nom FIFO (First In, First Out)
; les processus sont rangés dans la file d’attente des processus prêts selon
leur ordre d’arriver. Les règles régissant cet ordonnancement sont :
1.
Quand un processus est prêt à s’exécuter, il est mis en queue de
la file d’attente des processus prêts.
2.
Quand le processeur devient libre, il est alloué au processus se
trouvant en tête de file d’attente des processus prêts.
3.
Le processus élu relâche le processeur s’il se termine ou s’il
demande une entrée sortie.
Cet algorithme est sans réquisition et non adapté à un système
temps partagé car dans un système pareil, chaque utilisateur obtient le
processeur à des intervalles réguliers.
IV.5.2. Short job first SJF
SJF choisit de façon prioritaire les processus ayant le plus court
temps d’exécution sans réellement tenir compte de leur date d’arrivée. Dans cet
algorithme les différents processus sont rangés dans la file d'attente des
processus prêts selon un ordre croissant de leur temps d'exécution (cycle de
calcul). Les règles régissant cet ordonnancement sont :
1.
Quand un processus est prêt à s’exécuter, il est inséré dans la
file d’attente des processus prêts à sa position approprie.
2.
Quand le processeur devient libre, il est assigné au processus se
trouvant en tête de la file d’attente des processus prêts (ce processus possède
le plus petit cycle processeur). Si deux processus ont la même longueur de
cycle, on applique dans ce cas l’algorithme FCFS.
3.
Si le système ne met pas en œuvre la réquisition, le processus élu
relâche le processeur s’il se termine ou s’il demande une entrée sortie. Dans
le cas contraire, le processus élu perd le processeur également. Quand un
processus ayant un cycle d’exécution inférieur au temps processeur restant du
processus élu, vient d’entrer dans la file d’attente des prêts. Le processus
élu dans ce cas sera mis dans la file d’attente des éligibles, et le processeur
est alloué au processus qui vient d’entrer.
Cet algorithme peut être avec ou sans réquisition et son
implémentation est difficile, car il n’existe aucune manière pour connaître le
cycle suivant du processeur.
IV.5.3. Avec priorité
Dans cet algorithme, les processus sont rangés dans la file
d’attente des processus prêt par ordre décroissant de priorité.
L’ordonnancement dans ce cas est régit par les règles suivantes :
1.
Quand un processus est admis par le système, il est inséré dans la
file d’attente des
processus prêts à sa position approprie (dépend de la valeur de priorité).
2.
Quand le processeur devient libre, il est alloué au processus qui se
trouve en tête de file d’attente des processus prêts (le plus prioritaire).
3.
Un processus élu relâche le processeur s’il se termine ou se
bloque (E/S ou autre).
Si le système met en œuvre la réquisition, quand un processus de
priorité supérieure à celle du processus élu entre dans l’état prêt ; le
processus élu sera mis dans la file d’attente des éligibles à la position
approprie, et le processeur est alloué au processus qui vient d’entrer.
Cet algorithme peut être avec ou sans réquisition. Un processus de
priorité basse risque de ne pas être servi (problème de famine) d’où la
nécessité d’ajuster périodiquement les priorités des processus prêts. L’ajustement
consiste à incrémenter graduellement la priorité des processus de la file
d’attente des éligibles (par exemple à chaque 15 mn on incrémente d’une unité
la priorité des processus prêts).
IV.5.4. Tourniquet
Dans cet algorithme les processus sont rangés dans une file
d'attente des éligibles, le processeur est alloué successivement aux différents
processus pour une tranche de temps fixe Q appelé Quantum. Cet Ordonnancement
est régit par les règles suivantes :
1.
Un processus qui rentre dans l’état éligible est mis en queue de
la file d'attente des prêts.
2.
Si un processus élu se termine ou se bloque avant de consommer son
quantum de temps, le processeur est immédiatement alloué au prochain processus
se trouvant en tête de la file d'attente des prêts.
3.
Si le processus élu continue de s'exécuter au bout de son quantum,
dans ce cas le processus sera interrompu et mis en queue de la file d'attente
des prêts et le processeur est réquisitionné pour être réalloué au prochain
processus en tête de cette même file d’attente.
Cet algorithme est avec réquisition, il est adapté aux systèmes
temps partagé. La stratégie du tourniquet garantit que tout processus est servi
au bout d’un temps fini. Son avantage est d’éviter la famine. On dit qu'un
processus est en famine lorsqu'il est prêt à être exécuté et se voit refuser
l'accès à une ressource (ici le processeur) pendant un temps indéterminé.
L’efficacité de cet ordonnanceur dépend principalement de la valeur du quantum
Q:
−
Le choix d'un Q assez petit augmente le nombre de commutation.
−
Le choix d'un Q assez grand augmente le temps de réponse du
système
IV.6. Contrôle de processus
Un processus est une entité dynamique qui matérialise un programme
en cours d'exécution avec ses propres ressources physiques (mémoire,
processeur, entrée/sortie, …) et logiques (données, variables,…). Contrairement
à un programme (texte exécutable) qui a une existence statique.
Le système d’exploitation manipule deux types de processus :
−
Processus système : processus lancé par le système (Init processus
père des tous les processus du système)
−
Processus utilisateur : processus lancée par l’utilisateur
(commande utilisateur)
Dès sa création, un processus reçoit les paramètres suivants :
−
PID : identificateur du processus (numéro unique)
−
PPID : identificateur du processus père
−
UID : identificateur de l’utilisateur qui a lancé le processus
−
GID : identificateur du groupe de l’utilisateur qui a lancé le
processus
IV.6.1. Etats d'un processus
Dans les systèmes mono programmés, un programme ne quitte pas
l’unité centrale avant de terminer son exécution. Pendant cette période, il
dispose de toutes les ressources de la machine. Par contre, ce n’est pas le cas
dans les systèmes multiprogrammés et temps-partagé, un processus peut se
trouver dans l’un des états suivants :
1.
Elu : (en cours d’exécution) : si le processus est en cours
d'exécution
2.
Bloqué : attente qu’un événement se produit ou bien ressource pour
pouvoir continuer
3.
Prêt : si le processus dispose de toutes les ressources
nécessaires à son exécution à l'exception du processeur.
Figure
17.
Diagramme de transition d’un processus
IV.6.2. Bloc de contrôle de processus
PCB
Lorsqu’un processus est temporairement suspendu, il faut qu’il
puisse retrouver l’état où il se trouvait au moment de suspension, il faut que
toutes les informations dont il a besoin soient sauvegardées pendant sa mise en
attente.
Notons que le contexte d’un processus dépend du système, mais dans
tous les cas c’est un bloc de contrôle de processus (BCP) qui contient toute information
nécessaire à la reprise d’un processus interrompu : Etat du processus (prêt,
suspendu, ..), quantité de mémoire, temps CPU (utilisé, restant), priorité,
etc.
Les BCP sont rangés dans une table (table des processus) qui se
trouve dans l’espace mémoire du système (figure 18).
Figure
18. Bloc de
contrôle de processus (PCB)
IV.6.3. Création de processus
Il existe des appels système permettant de créer un processus, charger
son contexte et lancer son exécution (fork, exec sous Unix). Un processus (père)
peut créer d’autres processus (fils) qui hérite les descripteurs de son père.
Ce dernier à son tour crée d’autres processus. Un processus a un seul père mais
peut avoir plusieurs fils.
Figure
19. Création
de processus.
IV.6.4. Destruction d'un processus
Les processus peuvent se terminer ou ils peuvent être éliminés par
d’autres processus (la primitive kill). A la destruction d’un processus, on
libère toutes les ressources qu’il avait.
Dans certains cas, la destruction d’un processus entraîne l’élimination de ces descendants; cette pération n’affecte pas les processus qui peuvent continuer indépendamment de leur père (processus orphelins).
0 Commentaires