Nous allons voir la notion de processus, c’est à dire de programme en exécution. nous allons commencer par quelques définitions,  parler un peu de la  priorité des processus et notion de sémaphore.

Le système d’exploitation d’un ordinateur est le logiciel qui active de manière ordonnées toutes les ressources matérielles de l’ordinateur : traitement des programmes par le processeur, mémorisation via les bus, activation des entrées-sorties et des communications, y compris lecteurs de disquettes, disques, écrans, modems….

Le noyau : la base d’un système d’exploitation est ce que l’on appelle le noyau, qui simule une  machine virtuelle où plusieurs programmes peuvent coexister et s’exécuter simultanément, dans un environnement virtuelle. Le noyau, en gérant à son niveau toutes les interactions avec l’ordinateur réel, permet aux différents programmes de ne voir que cette machine virtuelle, beaucoup plus simple et plus générale que l’ordinateur dont il s’agit. Ainsi, certaines entrées-sorties peuvent s’exécuter en même temps qu’un autre programme poursuit son traitement et alors qu’un autre attend sa suspension pour s’exécuter à son tour. Le noyau a une fonction de gestion des ressources et d’ordonnancement des actions

Une activité consiste en une suite séquentielle d’actions élémentaires ayant chacune des caractères très précis.

Un processus est la réalisation d’une activité par l’exécution d’un programme

Si l’activité est une suite d’instructions, le processus en est le traitement séquentiel, dans l’environnement particulier de l’ordinateur utilisant la mémoire et le processeur. Ce dernier est composé d’un segment de code, d’un segment de données et d’un segment de données système contenant la description des ressources qui lui sont nécessaires

Un processus peut être dans quatre états, deux états d’activité et deux de non-activité :

  • Il est actif  lorsqu’un processeur le traite.
  • Il est arrêté lorsque son activité est arrêtée et qu’elle ne pourra pas être reprise.
  • Il est en attente lorsqu’il a été interrompu, qu’il est prêt pour s’exécuter à nouveau et se poursuivre et attend une reprise.
  • Il est activable lorsqu’il n’ a pas encore été lancé.

La fonction principale du noyau va être de créer des processus autonomes, de les ordonnancer, c’est à dire de les mettre dans une liste ordonnée selon certains critères de priorité, et de permettre leur exécution dans le bon ordre, avec mise à disposition des ressources du système

Le système d’exploitation en activité sera alors représenté comme un ensemble de processus, dont certains sont arrêtés, en attente de reprise et dont un seul est actif à chaque instant sur le processeur de l’ordinateur. La question, pour tous ces processus, sera de disposer au meilleur moment de la ressource dont ils ont besoin pour s’exécuter, c’est à dire de la prendre et de l’utiliser, en interdisant l’accès momentané aux autres processus.

Priorité d’un processus

Chaque processus est doté d’une priorité indiquant l’urgence de son traitement. Les processus activables forment une lise de listes, chaque liste correspondant à une priorité particulière.

La gestion de l’activation des processus est basée sur ces priorités. Le noyau génère une liste des processus, ordonnée selon leur priorité. Le processus le plus prioritaire est celui qui est exécuté, les autres restent en attente. Mais le problème n’est pas simple, car un processus peut demander lui-même sa suspension, il peut en créer d’autres de priorités  variées. Ainsi, la liste des processus change pendant leur exécution. Sa gestion est assurée par un processus particulier appelé scheduler ou gestionnaire

Communication et synchronisation entre processus : les sémaphores 

Le point essentiel dans le traitement des processus est que ceux-ci, puisqu’ils sont autonomes, peuvent interagir entre eux  un processus peut communiquer avec un autre pour décider du partage d’une ressource, en échangeant des informations sous différents formes. Les quatre modalités d’une communication entre processus sont :

  • demande de l’état d’une activité ou d’un processus.
  • attendre qu’une action soit achevée.
  • signaler qu’une action a été effectuée
  • lire ou écrire dans une zone partagée de la mémoire.

La question est alors de synchroniser les processus pour qu’ils n’écrivent pas simultanément dans la même zone mémoire, et qu’ils ne disposent pas simultanément de la même ressource. Le Moyen pour permettre cette synchronisation a été découvert par l’informaticien Dijkstra, dans les années 1950, et se nomme un sémaphore.

Un sémaphore est une variable partagée particulière dont les propriétés sont :

Ses valeurs sont des entiers non négatifs, et les quatre opérations que l’on peut effectuer sur cette variable sont :

  1. Initialisation : donner une valeur initiale.
  2. Test : tester la valeur
  3. Attendre : décrémenter la valeur ou attendre que cela soit possible.
  4. Signaler : incrémenter la valeur.

Les sémaphores synchronisent les activités des processus en mettant en attente un processus qui demande une certaine ressource déjà utilisée par un autre. à chaque sémaphore est associée une liste de processus.

Lorsqu’un processus souhaite utiliser une ressource libre, il envoie une demande d’utilisation à cette dernière. La ressource doit alors envoyer un message ‘wait’ au sémaphore pour indiquer qu’elle est prise et que le sémaphore doit protéger son accès. Lorsque la ressource sera libérée par le processus, elle enverra un message ‘signal’ à son sémaphore pour signaler sa disponibilité. Elle envoie ensuite un message ‘résume’ au processus le plus prioritaire pour qu’il la prenne.

Si la ressource est indisponible lorsque le processus la demande, elle envoie un message ‘suspend’ au processus demandeur.

Noter bien que j’ai écrit cet article, en se basant sur le livre  : Initiation à l’algorithmique objet