Article de reference

Processus (informatique)

Programmation , processus, ordonnancement des threads , préemption , changement de contexte En informatique , un processus est l' instance d'un programme informatique exécuté pa...

Programmation , processus, ordonnancement des threads , préemption , changement de contexte

En informatique , un processus est l' instance d'un programme informatique exécuté par un ou plusieurs threads . Il existe de nombreux modèles de processus différents, dont certains sont légers, mais presque tous les processus (même des machines virtuelles entières ) sont ancrés dans un processus de système d'exploitation (OS) qui comprend le code du programme, les ressources système attribuées, les autorisations d'accès physiques et logiques et les structures de données pour initier, contrôler et coordonner l'activité d'exécution. Selon le système d'exploitation, un processus peut être constitué de plusieurs threads d'exécution qui exécutent des instructions simultanément .

Alors qu'un programme informatique est un ensemble passif d' instructions généralement stockées dans un fichier sur disque, un processus est l'exécution de ces instructions après leur chargement du disque vers la mémoire. Plusieurs processus peuvent être associés au même programme ; par exemple, l'ouverture de plusieurs instances du même programme entraîne souvent l'exécution de plusieurs processus.

Le multitâche est une méthode permettant à plusieurs processus de partager des processeurs (CPU) et d'autres ressources système. Chaque CPU (cœur) exécute un seul processus à la fois. Cependant, le multitâche permet à chaque processeur de basculer entre les tâches en cours d'exécution sans avoir à attendre la fin de chaque tâche ( préemption ). Selon l'implémentation du système d'exploitation, les commutations peuvent être effectuées lorsque les tâches démarrent et attendent la fin des opérations d'entrée/sortie , lorsqu'une tâche cède volontairement le CPU, lors d'interruptions matérielles et lorsque le planificateur du système d'exploitation décide qu'un processus a expiré sa part équitable de temps CPU (par exemple, par le planificateur complètement équitable du noyau Linux ).

Une forme courante de multitâche est fournie par le partage du temps du processeur , une méthode permettant d'entrelacer l'exécution des processus et des threads des utilisateurs, et même des tâches indépendantes du noyau, bien que cette dernière fonctionnalité ne soit réalisable que dans les noyaux préemptifs tels que Linux . La préemption a un effet secondaire important pour les processus interactifs qui ont une priorité plus élevée par rapport aux processus liés au processeur. Par conséquent, les utilisateurs se voient immédiatement attribuer des ressources informatiques par simple pression d'une touche ou lors du déplacement d'une souris. De plus, les applications telles que la reproduction de vidéos et de musique bénéficient d'une sorte de priorité en temps réel, préemptant tout autre processus de priorité inférieure. Dans les systèmes à temps partagé, les changements de contexte sont effectués rapidement, ce qui donne l'impression que plusieurs processus sont exécutés simultanément sur le même processeur. Cette exécution apparemment simultanée de plusieurs processus est appelée concurrence .

Pour des raisons de sécurité et de fiabilité, la plupart des systèmes d'exploitation modernes empêchent la communication directe entre les processus indépendants, fournissant une communication interprocessus strictement médiatisée et contrôlée.

Représentation

Une liste de processus telle qu'affichée par htop
Un tableau de processus tel qu'affiché par KDE System Guard
Un tableau de processus tel qu'affiché par KDE System Guard

En général, un processus de système informatique se compose (ou est censé posséder ) des ressources suivantes :

  • Une image du code machine exécutable associé à un programme.
  • Mémoire (généralement une région de la mémoire virtuelle ) ; qui comprend le code exécutable, les données spécifiques au processus (entrée et sortie), une pile d'appels (pour suivre les sous-routines actives et/ou d'autres événements) et un tas pour contenir les données de calcul intermédiaires générées pendant l'exécution.
  • Descripteurs du système d'exploitation des ressources allouées au processus, telles que les descripteurs de fichiers ( terminologie Unix ) ou les handles ( Windows ), ainsi que les sources et récepteurs de données.
  • Attributs de sécurité , tels que le propriétaire du processus et l'ensemble des autorisations du processus (opérations autorisées).
  • État du processeur ( contexte ), tel que le contenu des registres et l'adressage de la mémoire physique. L' état est généralement stocké dans les registres de l'ordinateur lorsque le processus est en cours d'exécution, et dans la mémoire dans le cas contraire.

Le système d'exploitation conserve la plupart de ces informations sur les processus actifs dans des structures de données appelées blocs de contrôle de processus . Tout sous-ensemble de ressources, généralement au moins l'état du processeur, peut être associé à chacun des threads du processus dans les systèmes d'exploitation qui prennent en charge les threads ou les processus enfants .

Le système d'exploitation sépare ses processus et alloue les ressources dont ils ont besoin, de sorte qu'ils sont moins susceptibles d'interférer les uns avec les autres et de provoquer des pannes du système (par exemple, blocage ou échec ). Le système d'exploitation peut également fournir des mécanismes de communication interprocessus pour permettre aux processus d'interagir de manière sûre et prévisible.

Multitâche et gestion des processus

Un système d'exploitation multitâche peut simplement basculer entre les processus pour donner l'impression que de nombreux processus s'exécutent simultanément (c'est-à-dire en parallèle ), bien qu'en fait un seul processus puisse s'exécuter à la fois sur un seul processeur (à moins que le processeur ne dispose de plusieurs cœurs, auquel cas le multithreading ou d'autres technologies similaires peuvent être utilisées).

Il est courant d'associer un processus unique à un programme principal et des processus enfants à des processus dérivés, parallèles, qui se comportent comme des sous-routines asynchrones . On dit qu'un processus possède des ressources, dont une image de son programme (en mémoire) est l'une de ces ressources. Cependant, dans les systèmes multiprocesseurs, de nombreux processus peuvent s'exécuter à partir du même programme réentrant ou le partager au même emplacement en mémoire, mais on dit que chaque processus possède sa propre image du programme.

Les processus sont souvent appelés « tâches » dans les systèmes d'exploitation embarqués . Le sens de « processus » (ou tâche) est « quelque chose qui prend du temps », par opposition à « mémoire », qui est « quelque chose qui prend de la place ».

La description ci-dessus s'applique à la fois aux processus gérés par un système d'exploitation et aux processus définis par les calculs de processus .

Si un processus demande quelque chose qu'il doit attendre, il sera bloqué. Lorsque le processus est dans l' état bloqué , il est éligible pour le swapping sur disque, mais cela est transparent dans un système de mémoire virtuelle , où des régions de la mémoire d'un processus peuvent être réellement sur disque et non dans la mémoire principale à tout moment. Même des parties de processus/tâches actifs (programmes en cours d'exécution) sont éligibles pour le swapping sur disque, si les parties n'ont pas été utilisées récemment. Toutes les parties d'un programme en cours d'exécution et ses données ne doivent pas nécessairement se trouver dans la mémoire physique pour que le processus associé soit actif.

États du processus

Les différents états du processus, affichés dans un diagramme d'état , avec des flèches indiquant les transitions possibles entre les états

Un noyau de système d'exploitation qui permet le multitâche nécessite que les processus aient certains états . Les noms de ces états ne sont pas normalisés, mais ils ont des fonctionnalités similaires.

  • Tout d'abord, le processus est « créé » en étant chargé depuis un périphérique de stockage secondaire ( disque dur , CD-ROM , etc.) dans la mémoire principale . Après cela, le planificateur de processus lui attribue l'état « en attente ».
  • Pendant que le processus est en « attente », il attend que le planificateur effectue ce que l'on appelle un changement de contexte . Le changement de contexte charge le processus dans le processeur et change l'état en « exécution » tandis que le processus précédemment « en cours d'exécution » est stocké dans un état « en attente ».
  • Si un processus dans l'état « en cours d'exécution » doit attendre une ressource (attendre une saisie utilisateur ou l'ouverture d'un fichier, par exemple), l'état « bloqué » lui est attribué. L'état du processus revient à « en attente » lorsque le processus n'a plus besoin d'attendre (dans un état bloqué).
  • Une fois que le processus a terminé son exécution ou est arrêté par le système d'exploitation, il n'est plus nécessaire. Le processus est supprimé instantanément ou est déplacé vers l'état « terminé ». Une fois supprimé, il attend simplement d'être supprimé de la mémoire principale.

Communication inter-processus

Lorsque des processus doivent communiquer entre eux, ils doivent partager des parties de leurs espaces d'adressage ou utiliser d'autres formes de communication interprocessus (IPC). Par exemple, dans un pipeline shell , la sortie du premier processus doit être transmise au second, et ainsi de suite. Un autre exemple est une tâche qui a été décomposée en processus coopérants mais partiellement indépendants qui peuvent s'exécuter simultanément (c'est-à-dire en utilisant la concurrence, ou le véritable parallélisme - ce dernier modèle est un cas particulier d'exécution concurrente et est réalisable chaque fois que plusieurs cœurs de processeur sont disponibles pour les processus prêts à s'exécuter).

Il est même possible que deux ou plusieurs processus s'exécutent sur des machines différentes pouvant exécuter des systèmes d'exploitation différents. Par conséquent, certains mécanismes de communication et de synchronisation (appelés protocoles de communication pour le calcul distribué) sont nécessaires (par exemple, l' interface de transmission de messages {MPI}).

Histoire

Au début des années 1960, les logiciels de contrôle informatique avaient évolué, passant du logiciel de contrôle de moniteur, par exemple IBSYS , au logiciel de contrôle exécutif. Au fil du temps, les ordinateurs sont devenus plus rapides alors que le temps informatique n'était toujours ni bon marché ni pleinement utilisé ; un tel environnement a rendu la multiprogrammation possible et nécessaire. La multiprogrammation signifie que plusieurs programmes s'exécutent simultanément . Au début, plusieurs programmes s'exécutaient sur un seul processeur, en raison de l'architecture informatique monoprocesseur sous-jacente , et ils partageaient des ressources matérielles rares et limitées ; par conséquent, la concurrence était de nature sérielle . Sur les systèmes ultérieurs à plusieurs processeurs , plusieurs programmes peuvent s'exécuter simultanément en parallèle .

Les programmes sont constitués de séquences d'instructions destinées aux processeurs. Un seul processeur ne peut exécuter qu'une seule instruction à la fois : il est impossible d'exécuter plusieurs programmes en même temps. Un programme peut avoir besoin d'une ressource , comme un périphérique d'entrée, qui a un délai important, ou un programme peut démarrer une opération lente, comme l'envoi d'une sortie à une imprimante. Cela conduirait à ce que le processeur soit « inactif » (inutilisé). Pour garder le processeur occupé en permanence, l'exécution d'un tel programme est interrompue et le système d'exploitation commute le processeur pour exécuter un autre programme. Pour l'utilisateur, il apparaîtra que les programmes s'exécutent en même temps (d'où le terme « parallèle »).

Peu de temps après, la notion de « programme » s'est élargie à celle de « programme d'exécution et de son contexte ». Le concept de processus est né, qui est également devenu nécessaire avec l'invention du code réentrant . Les threads sont arrivés un peu plus tard. Cependant, avec l'avènement de concepts tels que le partage du temps , les réseaux informatiques et les ordinateurs à mémoire partagée multi-CPU , l'ancienne « multiprogrammation » a cédé la place au véritable multitâche , au multitraitement et, plus tard, au multithreading .

Plus d articles de Worldlex Wiki

Revenez a l index pour explorer davantage de pages sur l histoire, la science, la culture, la geographie et la societe en francais.

Explorer l index