Multiprogramming

Nous avons vu dans la partie consacrée au système d'exploitation que c'est ce dernier qui assure la gestion des processus. Comme le processeur (CPU) ne peut traiter qu'un seul processus en même temps, c'est la permutation entre les différents processus traités par le processeur qui nous donne l'illusion du traitement simultané de plusieurs processus. Le système d'exploitation veillera donc à rentabiliser le travail du processeur en assurant la gestion des processus.

Une des méthodes de gestion des processus est de traiter de manière séquentielle les processus à leur arrivée au processeur. Nous pouvons dire d'un tel système qu'il est pas monotàche, car il accomplit les tàches une à une, dans l'ordre dans lequel elles se présentent, sans aucune intervention.

Modèle à 2 états

La méthode de gestion la plus simple est le monotàche, mais ce système n'est pas du tout rentable au niveau de l'utilisation du processeur.
Un processus est traité par le processeur, puis ce processus a besoin d'informations I/O (entrées/sorties, par exemple lire une donnée sur une disquette). Pendant un temps extrèmement long, le processeur attendra que le processus ait les informations nécessaires à son exécution. Durant tout le temps de l'attente, le processeur ne peut rien faire d'autre qu'attendre, car le processus n'a pas terminé sa tàche.

Le système d'exploitation utilise alors une notion de temps alloué au processus (quantum). Si ce temps est écoulé et que l'opération n'est pas terminée, l'ensemble des valeurs des registres du processeur est mémorisée dans le vecteur d'état, et le processus libère le processeur, laissant ainsi la place au processus suivant dans la file d'attente (queue).

Ce type de modèle présente deux états possibles pour un processus :

  • Running : il utilise le processeur
  • Not Running : il n'utilise pas le processeur

 

Modèle à 3 états

L'état not runing devient l'état Ready (prêt) qui correspond à une queue dans laquelle nous retrouvons les processus qui attendent leur tour pour pouvoir bénéficier du processeur.

Comme nous l'avons vu dans la partie consacrée au dispatcher, un processus peut présenter un des 3 états suivants à un moment précis :

  • Ready : il est prêt à utiliser le processeur.
  • Running : il utilise le processeur.
  • Blocked : il est en attente d'un évènement externe (entrées-sorties...) ou volontairement arrêté.
    Dans la partie blocked, il peut exister plusieurs queues, une par évènement. Dans ce cas, lorsqu'un évènement est disponible, c'est l'ensemble de la queue qui est libérée par le système d'exploitation.

 

Modèle à 5 états : ajout de new et exit

Un état New définit les processus qui viennent d'être créés, ainsi qu'un état Exit pour les compte rendus des processus dont le travail au sein du processeur est terminé.

Un état Blocked correspond à la queue qui contient les processus qui attendent des informations des I/O.

Origine Destination :
New
Destination :
Ready
Destination :
Running
Destination :
Blocked
Destination :
Exit
Null
  • L'OS crée un processus en réponse à une demande.
  • Log on.
  • processus créé par un processus parent.
New L'OS crée un processus
Ready Le processus est sélectionné par le dispatcher pour être exécuté. Le processus est terminé par le parent.
Running
  • Time-out.
  • Préemption.
  • L'OS a besoin du cpu.
  • L'OS a besoin du cpu.
  • Le processus attend une ressource I/O.
  • Attente d'un évènement.
  • Le processus est terminé.
  • L'opérateur ou l'OS met fin au processus.
Blocked
  • Arrivée d'un évènement attendu.
  • Un I/O attendu est disponible.
Le processus est terminé par le parent.

 

Modèle à 7 états : processus suspendu

Afin d'éviter de saturer la mémoire primaire par des processus bloqués ou en attente, l'OS peut utiliser un état suspendu (Suspended state model). Les processus qui se trouvent dans cet état sont placés en mémoire secondaire pour libérer la mémoire primaire (swapping).

Attention à ne pas confondre les notions de "bloqué" et "suspendu" : ce sont deux notions distinctes, mais qui peuvent se compléter.

Raisons d'une mise à l'état suspendu :

  • swapping : le système d'exploitation a besoin de place mémoire (en Mp) pour exécuter un processus.
  • problème : le système d'exploitation peut suspendre un processus susceptible de causer des problèmes.
  • requête interactive de l'utilisateur : l'utilisateur peut suspendre l'exécution d'un programme, par exemple à des fins de debugging.
  • timing : un processus peut être exécuté périodiquement (par exemple un programme de monitoring), et être suspendu pendant l'intervale de temps restant.
  • requête d'un parent : un processus parent peut suspendre l'exécution de ses enfants pour en examiner ou modifier les processus.

 

Threads ?

Nous avons vu qu'un processus est composé d'une partie passive (le programme) et d'une partie active (vecteur d'états, pointeur sur l'instruction suivante, etc.). Si un processus est en cours d'utilisation, les deux parties sont au minimum en mémoire primaire.

Comme la partie passive d'un processus ne varie pas, il n'est pas nécessaire de recopier cette partie en mémoire si nous désirons exécuter une nouvelle occurence du processus. Nous pouvons en effet utiliser la partie passive, et créer seulement un nouveau pointeur vers l'instruction à exécuter (PC pour Program Counter), ainsi qu'un nouveau vecteur d'états.
C'est cela un thread.

Le thread est composé :

  • d'un identificateur unique (client ID).
  • d'un vecteur d'états qui comprendra un ensemble des valeurs variables contenues dans les différents registres du processeur au moment où processus quitte ce dernier.
  • de 2 piles, une si le thread est exécuté en mode utilisateur, et une si le thread est exécuté en mode kernel.
  • d'un espace de stockage privé utilisé par les sous-systèmes, les librairies runtime, et les librairies dynamiques (DLL).

Un système d'exploitation de type serveur prépare anticipativement chaque service avec un thread prêt à être utilisé.

 

Multiprocessing/Multitasking/Multithreading ???

Multiprocessing : la charge de travail est répartie entre plusieurs processeurs. Nous devons donc retrouver physiquement plusieurs processeurs (per exemple : les cartes mères bi-processeurs).

Nous pouvons retrouver deux types de multiprocessing :

  • Symetric multiprocessing (SMP) : chaque processeur peut effectuer le même travail, la charge de travail est donc répartie de manière symétrique entre les processeurs. L'avantage d'un tel système est que si un CPU n'est plus opérationnel, l'autre CPU peut effectuer le travail.
  • Asymetric multiprocessing : un processeur est dédié au système d'exploitation, et l'autre traite les processus des différents programmes. Le désavantage de ce système est que si le CPU dédié à l'OS est défaillant, l'autre CPU ne peut effectuer le travail.

Multitasking : le terme multi tàches désigne un type de gestion qui permet une permutation des processus au sein du processeur, ce qui donne l'impression que plusieurs processus sont exécutés en même temps. La gestion nécessite l'emploi d'un dispatcher et d'un scheduler pour déterminer quel est le processus qui peut utiliser les ressources du processeur.

Multithreading : prise en charge de plusieurs threads par processus.

Remarque : les systèmes d'exploitation modernes peuvent combiner ces différentes techniques de gestion.

 

Document créé le 04/05/04 21:20, dernière modification le 28/06/17 14:26
Source du document imprimé : https://www.gaudry.be/systeme-exploitation-processus-multiprogramming-threads.html

L'infobrol est un site personnel dont le contenu n'engage que moi. Le texte est mis à disposition sous licence CreativeCommons(BY-NC-SA). Plus d'info sur les conditions d'utilisation et sur l'auteur.