Chapitre 4 Gestion des processus - Institut Superieur d`Informatique
Transcription
Chapitre 4 Gestion des processus - Institut Superieur d`Informatique
Chapitre 4 Gestion des processus 4.1 Introduction 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. 4.2 Notion 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 P1 N1 P2 N2 N3 P4 P7 1 Processus père P3 P5 P6 - 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 peut (père) 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 - 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 opération n’affecte pas les processus qui peuvent continuer indépendamment de leur père (processus orphelins). Adnen . A – Institut Supérieur d’Informatique et des Technologies de Communication AU : 2009-2010 Chapitre 4 Gestion des processus 4.2.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. Fin d’exécution ELU 3 1 2 BLOQUE Destruction PRET 4 Création Figure 4.1 : Diagramme de transition d’un processus ¾ Sémantique des Transitions (1) : Allocation du processeur au processus sélectionné (2) : Réquisition du processeur après expiration de la tranche du temps par exemple (3) : Blocage du processus élu dans l’attente d’un événement (E/S ou autres) (4) : Réveil du processus bloqué après disponibilité de l’événement bloquant (Fin E/S, etc…) Notons que nous avons omis les états Création et Terminaison de processus puisqu’ils n’interviennent pas dans cette étude. 4.2.2 Cycle d’exécution d’un processus L’exécution d’un processus peut être vue comme une séquence de phases. Chaque phase comprend deux cycles : un cycle d’exécution (ou calcul) réalisé par le processeur et un cycle d’entrée sortie assuré par le canal. La dernière phase de tout processus doit comprendre obligatoirement un seul cycle dans lequel sera exécuté la requête informant le système d’exploitation sur la terminaison du processus. Cet appel permet au système de restituer les ressources utilisées par le processus qui vient de terminer. Chargement de P1 Chargement Changement du contexte Sauvegarde P1 P2 P3 Figure 4.2 : Cycle d’exécution d’un processus 4.2.3 Bloc de contrôle d’un 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. 2 Adnen . A – Institut Supérieur d’Informatique et des Technologies de Communication AU : 2009-2010 Chapitre 4 Gestion des processus 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 4.5) Figure 4.3 : Bloc de contrôle de processus (PCB) 4.3 Ordonnancement des processus Chaque fois, que le processeur devient inactif, le système d’exploitation doit sélectionner un processus de la file d’attente des processus prêts, et lui passe le contrôle. D’une manière plus concrète, cette tâche est prise en charge par deux routines système en l’occurrence le Dispatcheur et le Scheduleur (Ordonnanceur). 4.3.1 Le Dispatcheur Il s’occupe de l’allocation du processeur à un processus sélectionné par l’Ordonnanceur du processeur. Une fois allouer, le processeur doit réaliser les tâches suivantes : • Commutation de contexte : sauvegarder le contexte du processus qui doit relâcher le processeur et charger le contexte de celui qui aura le prochain cycle processeur • Commutation du mode d’exécution : basculer du mode Maître (mode d’exécution du dispatcheur) en mode utilisateur (mode d’exécution du processeur utilisateur) • Branchement : se brancher au bon emplacement dans le processus utilisateur pour le faire démarrer. 4.3.2 L’Ordonnanceur Certains systèmes d’exploitation utilisent une technique d’ordonnancement à deux niveaux qui intègre deux types d’Ordonnanceurs : Ordonnanceur du processeur : c’est un Ordonnanceur court terme opère sur une ensemble du processus présents en mémoire. Il s’occupe de la sélection du processus qui aura le prochain cycle processeur, à partir de la file d’attente des processus prêts. Ordonnanceur de travail : ou Ordonnanceur long terme, utilisé en cas d’insuffisance de mémoire, son rôle est de sélectionné le sous ensemble de processus stockés sur un disque et qui vont être chargés en mémoire. En suite, il retire périodiquement de la mémoire les 3 Adnen . A – Institut Supérieur d’Informatique et des Technologies de Communication AU : 2009-2010 Chapitre 4 Gestion des processus processus qui sont restés assez longtemps et les remplace par des processus qui sont sur le disque depuis trop de temps. Nous distinguons plusieurs algorithmes d’ordonnancement, les plus répandus sont : • Ordonnancement Premier Arrivé Premier Servi • Ordonnancement du plus court d’abord • Ordonnancement circulaire : Tourniquet • Ordonnancement circulaire à plusieurs niveaux • Ordonnancement avec priorité 4.3.3 Algorithmes d’ordonnancement 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 : - Assurer le plein usage du CPU (agir en sorte qu’il soit le moins souvent possible inactifs); - Réduire le temps d'attente des utilisateurs. - Assurer l'équité entre les utilisateurs. Un algorithme d’ordonnancement permet d’optimiser une des grandeurs temporelles suivantes : - Le temps de réponse moyen décrit la moyenne des dates de fin d’exécution : n TRM= ∑ TRi i =1 n , avec TRi=date fin –date arrivée. - Le temps d’attente moyen est la moyenne des délais d’attente pour commencer une exécution : n TAM= ∑ TAi i =1 n , avec TAi =TRi - temps d’exécution 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. ¾ Remarque : Pour représenter schématiquement l’évolution dans le temps des processus, on recourt habituellement à des diagrammes de Gantt. 4.3.3.1 Ordonnancement FCFS (first come first Served) 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 : 2. Quand un processus est prêt à s’exécuter, il est mis en queue de la file d’attente des processus prêts. 3. Quand le processeur devient libre, il est alloué au processus se trouvant en tête de file d’attente des processus prêts. 4. Le processus élu relâche le processeur s’il se termine ou s’il demande une entrée sortie 4 Adnen . A – Institut Supérieur d’Informatique et des Technologies de Communication AU : 2009-2010 Chapitre 4 Gestion des processus ¾ Caractéristiques de l’Ordonnanceur • • Ordonnanceur sans réquisition Ordonnanceur non adapté à un système temps partagé car dans un système pareil, chaque utilisateur obtienne le processeur à des intervalles réguliers. ¾ Exemple d’algorithme FCFS : processus P1 P2 P3 P4 Durée Estimé 8 4 5 9 Date Arrivée 0 1 2 3 Diagramme de Gantt : TRM TAM 4.3.3.2 Ordonnancement SJF (Shortest Job First) (Plus Cours temps d'Exécution en Premier) 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 oeuvre 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. ¾ Caractéristiques de l’Ordonnanceur • 5 Cet Ordonnanceur peut être avec ou sans réquisition Adnen . A – Institut Supérieur d’Informatique et des Technologies de Communication AU : 2009-2010 Chapitre 4 • Gestion des processus Implémentation difficile, car il n’existe aucune manière pour connaître le cycle suivant du processeur. ¾ Exemple d’algorithme SJF : processus P1 P2 P3 P4 Durée Estimé 10 05 15 03 Date Arrivée 0 2 3 4 Diagramme de Gantt (à t = 5) : TRM TAM 4.3.3.3 Ordonnancement RR (round robin) 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. ¾ Caractéristiques de l’Ordonnanceur • • • • Avec réquisition Adapté aux systèmes temps partagé. La stratégie du tourniquet garantit que tous processus est servis 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: o Le choix d'un Q assez petit augmente le nombre de commutation. o Le choix d'un Q assez grand augmente le temps de réponse du système ¾ Exemple d’algorithme RR : processus P1 P2 P3 6 Durée Estimé 30 05 02 Diagramme de Gantt (quantum = 1) : Date Arrivée 0 1 2 Adnen . A – Institut Supérieur d’Informatique et des Technologies de Communication AU : 2009-2010 Chapitre 4 Gestion des processus Quantum = 1 Quantum = 10 Diagramme de Gantt (quantum = 10) : TRM TAM 4.3.3.4 Ordonnacement SRTF (Shortest Remaining Time first) (plus court temps d’exécution restant PCTER) SRTF choisit le processus dont le temps d’exécution restant est le plus court. C’est une variante de l’algorithme SJF Cet algorithme est non implantable parce qu’il suppose, entre autres, connu le temps d’exécution réel de chaque processus pour pouvoir calculer le temps restant ¾ Exemple SRTF : processus P1 P2 P3 P4 Durée Estimé 8 5 5 2 Date Arrivée 0 2 3 4 Diagramme de Gantt : TRM TAM 4.3.3.5 Ordonnancement basé sur les priorités 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 se trouvant 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). ¾ Remarque : Si le système met en oeuvre 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. ¾ Caractéristiques de l’Ordonnanceur Les principales caractéristiques sont : • 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 7 Adnen . A – Institut Supérieur d’Informatique et des Technologies de Communication AU : 2009-2010 Chapitre 4 Gestion des processus éligibles (par exemple à chaque 15 mn on incrémente d’une unité la priorité des processus prêts) ¾ Exemple d’algorithme de PRIO : Diagramme de Gantt : processus P1 P2 P3 Durée Estimé 5 8 4 Priorité 1 5 3 TRM TAM Remarque : la priorité adoptée est celle la plus élevée. 4.4 Etude de cas: Gestion des processus UNIX 4.4.1 Les caractéristiques d'un processus On a vu auparavant, qu'on pouvait à un moment donné avoir plusieurs processus en cours, à un temps donné. Le système doit être capable de les identifier. Pour cela il attribue à chacun d'entre eux, un numéro appelé PID (Process Identification). Un processus peut lui même créer un autre processus, il devient donc un processus parent ou père, et le nouveau processus, un processus enfant. Ce dernier est identifié par son PID, et le processus père par son numéro de processus appelé PPID (Parent Process Identification). Tous les processus sont ainsi identifiés par leur PID, mais aussi par le PPID du processus qui la créé, car tous les processus ont été créés par un autre processus. Oui mais dans tout ça, c'est qui a créé le premier processus ? Le seul qui ne suit pas cette règle est le premier processus lancé sur le système le processus init qui n'a pas de père et qui a pour PID 1. 4.4.2 Visualiser les processus On peut visualiser les processus qui tournent sur une machine avec la commande : ps (options), les options les plus intéressantes sous HP-UX sont -e (affichage de tous les processus) et -f (affichage détaillée). La commande ps -ef donne un truc du genre : UID • • • • • • • • PID PPID C STIME TTY TIME COMMAND UID nom de l'utilisateur qui a lancé le process PID correspond au numéro du process PPID correspond au numéro du process parent C au facteur de priorité : plus la valeur est grande, plus le processus est prioritaire STIME correspond à l'heure de lancement du processus TTY correspond au nom du terminal TIME correspond à la durée de traitement du processus COMMAND correspond au nom du processus. 8 Adnen . A – Institut Supérieur d’Informatique et des Technologies de Communication AU : 2009-2010 Chapitre 4 Gestion des processus Pour l'exemple donné, à partir d'un shell vous avez lancé la commande ps -ef, le premier processus à pour PID 321, le deuxième 324. Vous noterez que le PPID du process " ps -ef " est 321 qui correspond au shell, par conséquent le shell est le process parent, de la commande qu'on vient de taper. Certains processus sont permanents, c'est à dire qu'ils sont lancés au démarrage du système et arrêtés uniquement à l'arrêt du système. On appelle ces process des daemons, le terme démon est une francisation, daemon sont des abréviations. Pour voir les process d'un seul utilisateur, vous pouvez taper : $ ps -u olivier D'un UNIX à l'autre la sortie peut changer. Sous LINUX par exemple ps -Al permet une sortie assez riche, en faisant un man ps, vous aurez l'éventail de tous les paramètres possibles. 4.4.3 Commandes de gestion des processus 4.4.3.1 Changer la priorité d'un processus Les processus tournent avec un certain degré de priorité, un processus plus prioritaire aura tendance à s'accaparer (monopoliser) plus souvent les ressources du système pour arriver le plus vite possible au terme de son exécution. C'est le rôle du système d'exploitation de gérer ces priorités. Vous disposez de la commande nice pour modifier la priorité d'un processus. La syntaxe est la suivante : $ nice -valeur commande Plus le nombre est grand, plus la priorité est faible. Par exemple une valeur de 0 donne, la priorité la plus haute 20 donne la priorité la plus faible. La fourchette de valeur dépend de l'UNIX qu'on utilise. Par exemple : $ nice -5 ps -ef 4.4.3.2 Arrêter un processus Vous disposez de la commande kill pour arrêter un processus, on doit aussi tuer un processus. Si vous voulez arrêter un processus, vous devez connaître son PID (commande ps), puis vous tapez : $ kill -9 PID 4.4.3.3 Lancer un processus en arrière plan Pour lancer une commande quelconque, vous en saisissez le nom après le prompt du shell, tant que la commande n'est pas terminée, vous n'avez plus la main au niveau du shell, vous ne disposez plus du prompt. Si la commande prend un certain temps, votre shell ne vous donnera pas la main tant que la commande n'est pas terminée, vous êtes obligé de lancer un autre shell, pour taper une autre commande. Vous disposez d'une technique simple qui permet de lancer une commande à partir d'un shell, et de reprendre aussitôt la main. Il vous suffit de rajouter un & à la fin de commande. Celle-ci se lancera en " tâche de fond ", et vous reviendrez directement au prompt du shell. En tapant une commande en tâche de fond, vous aurez à l'affichage : $ ps ef & 6677 9 (PID du processus ramené en arrière plan) Adnen . A – Institut Supérieur d’Informatique et des Technologies de Communication AU : 2009-2010 Chapitre 4 Gestion des processus En lançant une commande à partir du shell sans le & à la fin, et si celle-ci prend du temps à vous rendre la main, vous pouvez faire en sorte qu'elle bascule en tâche de fond, pour que vous repreniez la main. $ netscape Æ cette commande lance un processus qui prend du temps et ne rend pas la main. On peut lancer ce processus en arrière plan avec $ nestcape & Pour visualiser l’état d’exécution d’une commande lancée en arrière plan, on utilise la commande $ jobs Æ cette commande donne le [ numéro de tâche] (job), son [PID,son état d’exécution (stopped, running, …) et le nom de la commande 4.4.3.4 Ramener un processus en arrière/avant plan : $ fg [N°tâche] Æ fg (foreground) permet de reprendre l’exécution de la tâche en premier plan $ bg [N°tâche] Æ bg (background) permet de ramener l’exécution de la tâche en arrière plan 10 Adnen . A – Institut Supérieur d’Informatique et des Technologies de Communication AU : 2009-2010