{"id":30992,"date":"2019-10-31T21:38:47","date_gmt":"2019-10-31T18:38:47","guid":{"rendered":"https:\/\/prohoster.info\/blog\/operating-systems-three-easy-pieces-part-2-abstraktsiya-protsess-perevod\/"},"modified":"2019-10-31T21:38:47","modified_gmt":"2019-10-31T18:38:47","slug":"operating-systems-three-easy-pieces-part-2-abstraktsiya-protsess-perevod","status":"publish","type":"post","link":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/operating-systems-three-easy-pieces-part-2-abstraktsiya-protsess-perevod","title":{"rendered":"Syst\u00e8mes d'exploitation : Trois pi\u00e8ces faciles. Partie 2 : Abstraction : Processus (traduction)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h1>Introduction aux syst\u00e8mes d'exploitation<\/h1>\n<p>\nBonjour, Habr ! Je souhaite vous pr\u00e9senter une s\u00e9rie d'articles traduits d'une litt\u00e9rature que je trouve int\u00e9ressante \u2014 OSTEP. Ce mat\u00e9riel explore en profondeur le fonctionnement des syst\u00e8mes d'exploitation de type Unix, en particulier \u2014 le travail avec les processus, les diff\u00e9rents planificateurs, la m\u00e9moire et d'autres composants similaires qui forment un syst\u00e8me d'exploitation moderne. Vous pouvez voir l'original de tous ces mat\u00e9riaux ici <noindex><a rel=\"nofollow\" href=\"http:\/\/pages.cs.wisc.edu\/~remzi\/OSTEP\/\">ici<\/a><\/noindex>. Je vous demande de prendre en compte que la traduction a \u00e9t\u00e9 r\u00e9alis\u00e9e de mani\u00e8re non professionnelle (assez libre), mais j'esp\u00e8re que le sens g\u00e9n\u00e9ral a \u00e9t\u00e9 conserv\u00e9.<\/p>\n<p>Les travaux pratiques sur ce sujet peuvent \u00eatre trouv\u00e9s ici :<\/p>\n<ul>\n<li>original : <noindex><a rel=\"nofollow\" href=\"http:\/\/pages.cs.wisc.edu\/~remzi\/OSTEP\/Homework\/homework.html\">pages.cs.wisc.edu\/~remzi\/OSTEP\/Homework\/homework.html<\/a><\/noindex><\/li>\n<li>original : <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/remzi-arpacidusseau\/ostep-code\">github.com\/remzi-arpacidusseau\/ostep-code<\/a><\/noindex><\/li>\n<li>ma propre adaptation : <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/bykvaadm\/OS\/tree\/master\/ostep\">github.com\/bykvaadm\/OS\/tree\/master\/ostep<\/a><\/noindex><\/li>\n<\/ul>\n<p>\nAutres parties :<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/post\/446340\/\">Partie 1 : Introduction<\/a><\/noindex><\/li>\n<\/ul>\n<p>\nVous pouvez \u00e9galement visiter ma cha\u00eene sur <noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/bykvaadm\">Telegram<\/a><\/noindex> =)<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Consid\u00e9rons l'abstraction la plus fondamentale que le syst\u00e8me d'exploitation fournit aux utilisateurs : le processus. La d\u00e9finition d'un processus est assez simple \u2014 c'est <b>un programme en cours d'ex\u00e9cution<\/b>. Un programme en lui-m\u00eame est une chose inanim\u00e9e, situ\u00e9e sur le disque \u2014 c'est un ensemble d'instructions et peut-\u00eatre quelques donn\u00e9es statiques, attendant le moment de son lancement. C'est le syst\u00e8me d'exploitation qui prend ces octets et les ex\u00e9cute, transformant le programme en quelque chose d'utile.<br \/>\n Le plus souvent, les utilisateurs veulent ex\u00e9cuter plusieurs programmes simultan\u00e9ment, par exemple, vous pouvez lancer sur votre ordinateur portable un navigateur, un jeu, un lecteur multim\u00e9dia, un \u00e9diteur de texte, etc. En fait, un syst\u00e8me typique peut ex\u00e9cuter des dizaines, voire des centaines de processus en m\u00eame temps. Ce fait rend le syst\u00e8me plus facile \u00e0 utiliser, vous n'avez jamais \u00e0 vous soucier de savoir si le CPU est libre, vous lancez simplement les programmes.<\/p>\n<p><i>Ceci soul\u00e8ve une question : comment cr\u00e9er l'illusion de plusieurs CPU ? Comment le syst\u00e8me d'exploitation peut-il g\u00e9n\u00e9rer l'illusion d'un nombre pratiquement infini de CPU, m\u00eame si vous n'avez qu'un seul CPU physique ?<\/i><\/p>\n<p>Le syst\u00e8me d'exploitation cr\u00e9e cette illusion gr\u00e2ce \u00e0 la virtualisation du CPU. En lan\u00e7ant un processus, puis en l'arr\u00eatant, en lan\u00e7ant un autre processus, et ainsi de suite, le syst\u00e8me d'exploitation peut maintenir l'illusion qu'il existe de nombreux CPU virtuels, m\u00eame si en r\u00e9alit\u00e9 il n'y a qu'un ou quelques processeurs physiques. Cette technique est appel\u00e9e <b>partage des ressources CPU dans le temps<\/b>. Cette technique permet aux utilisateurs d'ex\u00e9cuter autant de processus simultan\u00e9ment qu'ils le souhaitent. Le prix de cette solution est la performance \u2014 car si plusieurs processus partagent le CPU, chaque processus sera trait\u00e9 plus lentement.<br \/>\n Pour mettre en \u0153uvre la virtualisation du CPU, et surtout pour le faire correctement, le syst\u00e8me d'exploitation a besoin d'un soutien \u00e0 la fois bas niveau et haut niveau. Le soutien de bas niveau est appel\u00e9 <b>m\u00e9canismes<\/b> \u2014 ce sont des m\u00e9thodes ou protocoles de bas niveau qui mettent en \u0153uvre la partie n\u00e9cessaire de la fonctionnalit\u00e9. Un exemple de cette fonctionnalit\u00e9 est le changement de contexte, qui permet au syst\u00e8me d'exploitation d'arr\u00eater un programme et de lancer un autre programme sur le processeur. Cette s\u00e9paration temporelle est r\u00e9alis\u00e9e dans tous les syst\u00e8mes d'exploitation modernes.<br \/>\n Au sommet de ces m\u00e9canismes se trouve une certaine logique, int\u00e9gr\u00e9e dans le syst\u00e8me d'exploitation, sous forme de \"politiques\". <b>Politique<\/b> \u2014 est un certain algorithme de prise de d\u00e9cision du syst\u00e8me d'exploitation. Ces politiques, par exemple, d\u00e9cident quel programme doit \u00eatre lanc\u00e9 (parmi la liste des commandes) en premier. Ainsi, par exemple, cette t\u00e2che sera r\u00e9solue par une politique appel\u00e9e <b>politique de planification (scheduling policy)<\/b> et lors du choix de la solution, elle sera guid\u00e9e par des donn\u00e9es telles que : l'historique des lancements (quel programme a \u00e9t\u00e9 lanc\u00e9 le plus longtemps au cours de la derni\u00e8re minute), quelle charge exerce ce processus (quels types de programmes ont \u00e9t\u00e9 lanc\u00e9s), les m\u00e9triques de performance (le syst\u00e8me est-il optimis\u00e9 pour une interaction interactive ou pour la bande passante) et ainsi de suite.<\/p>\n<h3>Abstraction : processus<\/h3>\n<p>\n L'abstraction d'un programme en cours d'ex\u00e9cution, ex\u00e9cut\u00e9e par le syst\u00e8me d'exploitation, est ce que nous appelons <b>processus<\/b>. Comme d\u00e9j\u00e0 mentionn\u00e9, un processus est simplement un programme en cours d'ex\u00e9cution \u00e0 tout moment donn\u00e9. C'est un programme gr\u00e2ce auquel nous pouvons obtenir des informations globales provenant de diverses ressources du syst\u00e8me, et auxquelles ce programme acc\u00e8de ou que ce programme affecte lors de son ex\u00e9cution.<br \/>\n Pour comprendre les \u00e9l\u00e9ments constitutifs d'un processus, il est n\u00e9cessaire de comprendre les \u00e9tats du syst\u00e8me : ce que le programme peut lire ou modifier pendant son fonctionnement. \u00c0 tout moment, il faut comprendre quels \u00e9l\u00e9ments du syst\u00e8me sont importants pour l'ex\u00e9cution du programme.<br \/>\n L'un des \u00e9l\u00e9ments \u00e9vidents de l'\u00e9tat du syst\u00e8me, que le processus inclut, est la <b>m\u00e9moire<\/b>. Les instructions sont situ\u00e9es dans la m\u00e9moire. Les donn\u00e9es que le programme lit ou \u00e9crit se trouvent \u00e9galement dans la m\u00e9moire. Ainsi, la m\u00e9moire que le processus peut adresser (ce qu'on appelle l'espace d'adressage) est une partie du processus.<br \/>\n L'\u00e9tat du syst\u00e8me comprend \u00e9galement les registres. De nombreuses instructions sont destin\u00e9es \u00e0 modifier la valeur des registres ou \u00e0 lire leur valeur, rendant ainsi les registres une partie importante du fonctionnement du processus. <br \/>\nIl convient de noter que l'\u00e9tat de la machine est \u00e9galement constitu\u00e9 de certains registres sp\u00e9ciaux. Par exemple,<b> IP \u2014 pointeur d'instruction<\/b> \u2014 qui indique l'instruction que le programme ex\u00e9cute actuellement. Il y a aussi <b>pointeur de pile<\/b> et son associ\u00e9 <b>pointeur de cadre<\/b>, qui sont utilis\u00e9s pour la gestion : des param\u00e8tres de fonction, des variables locales et des adresses de retour.<br \/>\nEnfin, les programmes acc\u00e8dent souvent \u00e0 la ROM (m\u00e9moire morte). Ces informations sur l'\"I\/O\" (entr\u00e9e-sortie) doivent inclure une liste des fichiers actuellement ouverts par le processus.<\/p>\n<h3>API des processus<\/h3>\n<p>\n Pour mieux comprendre le fonctionnement des processus, examinons des exemples d'appels syst\u00e8me qui devraient \u00eatre inclus dans toute interface de syst\u00e8me d'exploitation. Ces API sont disponibles sous une forme ou une autre sur tout syst\u00e8me d'exploitation.<\/p>\n<p>\u25cf <b>Cr\u00e9er<\/b> (cr\u00e9ation) : Le syst\u00e8me d'exploitation doit inclure une m\u00e9thode permettant de cr\u00e9er de nouveaux processus. Lorsque vous entrez une commande dans le terminal ou lancez une application en double-cliquant sur son ic\u00f4ne, un appel est envoy\u00e9 au syst\u00e8me d'exploitation pour cr\u00e9er un nouveau processus et lancer le programme sp\u00e9cifi\u00e9.<br \/>\n\u25cf <b>D\u00e9sinstallation<\/b>: \u00c9tant donn\u00e9 qu'il existe une interface pour cr\u00e9er un processus, le syst\u00e8me d'exploitation doit \u00e9galement fournir la possibilit\u00e9 de forcer la suppression d'un processus. La plupart des programmes seront naturellement lanc\u00e9s et termin\u00e9s d'eux-m\u00eames au fur et \u00e0 mesure de leur ex\u00e9cution. Sinon, l'utilisateur souhaiterait pouvoir les tuer, et ainsi l'interface pour arr\u00eater un processus serait utile.<br \/>\n\u25cf <b>Attente <\/b>(attente) : Parfois, il est utile d'attendre la fin d'un processus, c'est pourquoi certaines interfaces sont fournies pour attendre.<br \/>\n\u25cf <b>Contr\u00f4le Divers<\/b> (contr\u00f4le vari\u00e9) : En plus de tuer et d'attendre un processus, il existe \u00e9galement d'autres m\u00e9thodes de contr\u00f4le. Par exemple, la plupart des syst\u00e8mes d'exploitation offrent la possibilit\u00e9 de suspendre un processus (arr\u00eater son ex\u00e9cution pendant un certain temps) puis de le reprendre (continuer l'ex\u00e9cution).<br \/>\n\u25cf <b>Statut <\/b>(\u00e9tat) : Il existe diff\u00e9rentes interfaces pour obtenir certaines informations sur l'\u00e9tat du processus, telles que sa dur\u00e9e d'ex\u00e9cution ou l'\u00e9tat actuel dans lequel il se trouve.<\/p>\n<p><img decoding=\"async\" alt=\"Syst\u00e8mes d&#039;exploitation : Trois pi\u00e8ces faciles. Partie 2 : Abstraction : Processus (traduction)\" src=\"\/wp-content\/uploads\/2019\/04\/eccf4ba3b12a60a54a62bb13986a7783.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Cr\u00e9ation de processus : d\u00e9tails<\/h3>\n<p>L'une des choses int\u00e9ressantes est de comprendre comment les programmes se transforment en processus. En particulier, comment le syst\u00e8me d'exploitation charge et ex\u00e9cute un programme. Comment un processus est-il cr\u00e9\u00e9 concr\u00e8tement ?<br \/>\nTout d'abord, le syst\u00e8me d'exploitation doit charger le code du programme et les donn\u00e9es statiques en m\u00e9moire (dans l'espace d'adressage du processus). Les programmes sont g\u00e9n\u00e9ralement stock\u00e9s sur un disque ou un SSD dans un certain format ex\u00e9cutable. Ainsi, le processus de chargement du programme et des donn\u00e9es statiques en m\u00e9moire n\u00e9cessite que le syst\u00e8me d'exploitation soit capable de lire ces octets \u00e0 partir du disque et de les placer quelque part en m\u00e9moire.<\/p>\n<p>Dans les anciens syst\u00e8mes d'exploitation, le processus de chargement se faisait de mani\u00e8re impatiente (eagerly), c\u2019est-\u00e0-dire que le code \u00e9tait charg\u00e9 dans la m\u00e9moire enti\u00e8rement avant que le programme ne soit ex\u00e9cut\u00e9. Les syst\u00e8mes d'exploitation modernes effectuent cela de mani\u00e8re paresseuse (lazily), c'est-\u00e0-dire qu'ils chargent des morceaux de code ou de donn\u00e9es uniquement au moment o\u00f9 ils sont n\u00e9cessaires pendant l'ex\u00e9cution du programme.<\/p>\n<p>Apr\u00e8s que le code et les donn\u00e9es statiques sont charg\u00e9s en m\u00e9moire, le syst\u00e8me d'exploitation doit encore accomplir certaines t\u00e2ches avant de lancer le processus. Une certaine quantit\u00e9 de m\u00e9moire doit \u00eatre allou\u00e9e pour la pile. <b>Les programmes utilisent la pile pour les variables locales, les param\u00e8tres de fonction et les adresses de retour.<\/b>. Le syst\u00e8me d'exploitation r\u00e9serve cette m\u00e9moire et la donne au processus. La pile peut \u00e9galement \u00eatre allou\u00e9e avec certains arguments, en particulier elle remplit les param\u00e8tres de la fonction main(), tels que le tableau argc et argv.<\/p>\n<p>Le syst\u00e8me d'exploitation peut \u00e9galement allouer une certaine quantit\u00e9 de m\u00e9moire pour le tas (heap) du programme. <b>Le tas est utilis\u00e9 par les programmes pour les donn\u00e9es dynamiquement allou\u00e9es demand\u00e9es explicitement.<\/b>. Les programmes demandent cet espace en appelant la fonction <b>malloc()<\/b> et le lib\u00e8rent explicitement en appelant la fonction <b>free()<\/b>. Le tas est n\u00e9cessaire pour des structures de donn\u00e9es telles que : les listes cha\u00een\u00e9es, les tables de hachage, les arbres et d'autres. Au d\u00e9but, une petite quantit\u00e9 de m\u00e9moire est allou\u00e9e au tas, mais au fil du temps, au cours de l'ex\u00e9cution du programme, le tas peut demander plus de m\u00e9moire via l'appel \u00e0 l'API de biblioth\u00e8que malloc(). Le syst\u00e8me d'exploitation est impliqu\u00e9 dans le processus d'allocation de plus de m\u00e9moire pour satisfaire ces demandes.<\/p>\n<p>Le syst\u00e8me d'exploitation effectuera \u00e9galement des t\u00e2ches d'initialisation, en particulier celles li\u00e9es \u00e0 l'entr\u00e9e-sortie. Par exemple, dans les syst\u00e8mes UNIX, chaque processus a par d\u00e9faut 3 descripteurs de fichiers ouverts, pour le flux d'entr\u00e9e standard, la sortie et les erreurs. Ces descripteurs permettent aux programmes de lire l'entr\u00e9e du terminal et d'afficher des informations \u00e0 l'\u00e9cran. <\/p>\n<p>Ainsi, en chargeant le code et les donn\u00e9es statiques en m\u00e9moire, en cr\u00e9ant et en initialisant la pile, ainsi qu'en effectuant d'autres t\u00e2ches li\u00e9es aux op\u00e9rations d'entr\u00e9e-sortie, le syst\u00e8me d'exploitation pr\u00e9pare le terrain pour l'ex\u00e9cution du processus. En fin de compte, il reste une derni\u00e8re t\u00e2che : ex\u00e9cuter le programme via son point d'entr\u00e9e, appel\u00e9 fonction main(). En passant \u00e0 l'ex\u00e9cution de la fonction main(), le syst\u00e8me d'exploitation passe le contr\u00f4le du CPU au nouveau processus, ainsi, le programme commence \u00e0 s'ex\u00e9cuter. <\/p>\n<h3>L'\u00e9tat du processus<\/h3>\n<p>\n Maintenant que nous avons une certaine compr\u00e9hension de ce qu'est un processus et comment il est cr\u00e9\u00e9, \u00e9num\u00e9rons les \u00e9tats dans lesquels un processus peut se trouver. Dans sa forme la plus simple, un processus peut \u00eatre dans l'un de ces \u00e9tats :<br \/>\n\u25cf <b>Running<\/b>. Dans l'\u00e9tat en cours d'ex\u00e9cution, le processus s'ex\u00e9cute sur le processeur. Cela signifie que des instructions sont en cours d'ex\u00e9cution.<br \/>\n\u25cf <b>Pr\u00eat<\/b>. Dans l'\u00e9tat pr\u00eat, le processus est pr\u00eat \u00e0 \u00eatre ex\u00e9cut\u00e9, mais pour une raison quelconque, le syst\u00e8me d'exploitation ne l'ex\u00e9cute pas \u00e0 ce moment-l\u00e0.<br \/>\n\u25cf <b>Bloqu\u00e9<\/b>. Dans l'\u00e9tat bloqu\u00e9, le processus effectue certaines op\u00e9rations qui l'emp\u00eachent d'\u00eatre pr\u00eat \u00e0 s'ex\u00e9cuter jusqu'\u00e0 ce qu'un \u00e9v\u00e9nement se produise. Un exemple courant est lorsqu'un processus initialise une op\u00e9ration d'E\/S, il devient bloqu\u00e9 et, de ce fait, un autre processus peut utiliser le processeur.<\/p>\n<p><img decoding=\"async\" alt=\"Syst\u00e8mes d&#039;exploitation : Trois pi\u00e8ces faciles. Partie 2 : Abstraction : Processus (traduction)\" src=\"\/wp-content\/uploads\/2019\/04\/d2c01bdb08e7b7aeea78edcbf6ce0250.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nOn peut visualiser ces \u00e9tats sous la forme d'un graphe. Comme nous pouvons le voir sur l'image, l'\u00e9tat d'un processus peut changer entre RUNNING et READY \u00e0 la discr\u00e9tion du syst\u00e8me d'exploitation. Lorsque l'\u00e9tat d'un processus passe de READY \u00e0 RUNNING, cela signifie que le processus a \u00e9t\u00e9 planifi\u00e9. En revanche, cela signifie qu'il a \u00e9t\u00e9 retir\u00e9 de la planification. Au moment o\u00f9 le processus devient BLOCKED, par exemple en initialisant une op\u00e9ration d'entr\u00e9e\/sortie, le syst\u00e8me d'exploitation le maintiendra dans cet \u00e9tat jusqu'\u00e0 ce qu'un \u00e9v\u00e9nement se produise, comme la fin de l'op\u00e9ration d'entr\u00e9e\/sortie. \u00c0 ce moment-l\u00e0, il passera \u00e0 l'\u00e9tat READY et \u00e9ventuellement \u00e0 l'\u00e9tat RUNNING, selon la d\u00e9cision du syst\u00e8me d'exploitation. <br \/>\nJetons un \u0153il \u00e0 un exemple de la mani\u00e8re dont deux processus passent \u00e0 travers ces \u00e9tats. Pour commencer, supposons que les deux processus sont en cours d'ex\u00e9cution et que chacun utilise uniquement le CPU. Dans ce cas, leurs \u00e9tats appara\u00eetront comme suit.<\/p>\n<p><img decoding=\"async\" alt=\"Syst\u00e8mes d&#039;exploitation : Trois pi\u00e8ces faciles. Partie 2 : Abstraction : Processus (traduction)\" src=\"\/wp-content\/uploads\/2019\/04\/904cef8e04c2f0d8eaf4fdc5860f5bfd.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDans l'exemple suivant, le premier processus, apr\u00e8s un certain temps d'ex\u00e9cution, demande une entr\u00e9e\/sortie et passe \u00e0 l'\u00e9tat BLOCKED, donnant \u00e0 un autre processus la chance de s'ex\u00e9cuter (FIG 1.4). Le syst\u00e8me d'exploitation voit que le processus 0 n'utilise pas le CPU et lance le processus 1. Pendant l'ex\u00e9cution du processus 1, l'entr\u00e9e\/sortie se termine et l'\u00e9tat du processus 0 passe \u00e0 READY. Enfin, le processus 1 se termine et, apr\u00e8s son ach\u00e8vement, le processus 0 est lanc\u00e9, s'ex\u00e9cute et finit son travail.<\/p>\n<p><img decoding=\"async\" alt=\"Syst\u00e8mes d&#039;exploitation : Trois pi\u00e8ces faciles. Partie 2 : Abstraction : Processus (traduction)\" src=\"\/wp-content\/uploads\/2019\/04\/06f44895cc976e7755c1f7bf5afe466b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Structure des donn\u00e9es<\/h3>\n<p>\n Le syst\u00e8me d'exploitation est lui-m\u00eame un programme, et comme tout autre programme, il a certaines structures de donn\u00e9es cl\u00e9s qui suivent divers morceaux d'information pertinents. Pour suivre l'\u00e9tat de chaque processus, le syst\u00e8me d'exploitation maintiendra une certaine <b>liste des processus<\/b> pour tous les processus dans l'\u00e9tat READY et des informations suppl\u00e9mentaires pour suivre les processus qui s'ex\u00e9cutent actuellement. De plus, le syst\u00e8me d'exploitation doit suivre les processus bloqu\u00e9s. Apr\u00e8s la fin de l'entr\u00e9e\/sortie, le syst\u00e8me d'exploitation doit r\u00e9veiller le processus concern\u00e9 et le passer \u00e0 l'\u00e9tat pr\u00eat \u00e0 \u00eatre ex\u00e9cut\u00e9.<\/p>\n<p>Ainsi, par exemple, le syst\u00e8me d'exploitation doit conserver l'\u00e9tat des registres du processeur. Au moment o\u00f9 le processus est suspendu, l'\u00e9tat des registres est enregistr\u00e9 dans l'espace d'adressage du processus, et au moment de la reprise de son ex\u00e9cution, les valeurs des registres sont restaur\u00e9es et le processus peut ainsi continuer son ex\u00e9cution.<\/p>\n<p>En plus des \u00e9tats pr\u00eat, bloqu\u00e9 et en cours d'ex\u00e9cution, il existe d'autres \u00e9tats. Parfois, au moment de la cr\u00e9ation, un processus peut avoir l'\u00e9tat INIT. Enfin, le processus peut \u00eatre plac\u00e9 dans l'\u00e9tat FINAL, une fois qu'il est termin\u00e9, mais que les informations \u00e0 son sujet n'ont pas encore \u00e9t\u00e9 nettoy\u00e9es. Dans les syst\u00e8mes UNIX, cet \u00e9tat est appel\u00e9 <b>processus zombie<\/b>. Cet \u00e9tat est utile lorsque le processus parent souhaite conna\u00eetre le code de retour de son enfant, par exemple, g\u00e9n\u00e9ralement 0 signale une r\u00e9ussite, et 1 un \u00e9chec, mais les programmeurs peuvent cr\u00e9er des codes de sortie suppl\u00e9mentaires pour signaler diff\u00e9rents probl\u00e8mes. Lors de la terminaison, le processus parent effectue le dernier appel syst\u00e8me, par exemple wait(), pour attendre la fin du travail du processus enfant et signaler au syst\u00e8me d'exploitation qu'il peut nettoyer les donn\u00e9es associ\u00e9es au processus termin\u00e9.<\/p>\n<p><img decoding=\"async\" alt=\"Syst\u00e8mes d&#039;exploitation : Trois pi\u00e8ces faciles. Partie 2 : Abstraction : Processus (traduction)\" src=\"\/wp-content\/uploads\/2019\/04\/4756790c823a7e9ebbe26ff067ca00cc.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Points cl\u00e9s de la le\u00e7on :<\/h3>\n<p>\n\u25cf <b>Processus <\/b> \u2014 l'abstraction principale d'un programme en cours d'ex\u00e9cution dans un syst\u00e8me d'exploitation. \u00c0 tout moment, un processus peut \u00eatre d\u00e9crit par son \u00e9tat : le contenu de la m\u00e9moire dans son espace d'adresses, le contenu des registres du processeur, y compris le pointeur d'instruction et le pointeur de pile, ainsi que les informations sur les E\/S, comme les fichiers ouverts qui sont lus ou \u00e9crits.<br \/>\n\u25cf <b>API des processus<\/b> se compose d'appels que les programmes peuvent faire concernant les processus. G\u00e9n\u00e9ralement, ce sont des appels de cr\u00e9ation, de suppression ou d'autres.<br \/>\n\u25cf Un processus se trouve dans l'un des nombreux \u00e9tats, y compris en cours d'ex\u00e9cution, pr\u00eat, bloqu\u00e9. Diff\u00e9rents \u00e9v\u00e9nements, tels que la planification, une exception de planification ou une attente, peuvent faire passer l'\u00e9tat d'un processus d'un \u00e9tat \u00e0 un autre.<br \/>\n\u25cf <b>Liste des processus<\/b> contient des informations sur tous les processus du syst\u00e8me. Chaque entr\u00e9e est appel\u00e9e bloc de contr\u00f4le de processus, qui est en r\u00e9alit\u00e9 une structure contenant toutes les informations n\u00e9cessaires sur un processus particulier.\u2003<br \/>\n<br \/>Source : <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/446866\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u0425\u043e\u0447\u0443 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u0430\u0448\u0435\u043c\u0443 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044e \u0441\u0435\u0440\u0438\u044e \u0441\u0442\u0430\u0442\u0435\u0439-\u043f\u0435\u0440\u0435\u0432\u043e\u0434\u043e\u0432 \u043e\u0434\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0439 \u043d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u044b \u2014 OSTEP. \u0412 \u044d\u0442\u043e\u043c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0435 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0433\u043b\u0443\u0431\u043e\u043a\u043e \u0440\u0430\u0431\u043e\u0442\u0430 unix-\u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u2014 \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u043c\u0438, \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430\u043c\u0438, \u043f\u0430\u043c\u044f\u0442\u044c\u044e \u0438 \u043f\u0440\u043e\u0447\u0438\u0438\u043c\u0438 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u043c\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u041e\u0421. \u041e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0432\u0441\u0435\u0445 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u043e\u0432 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432\u043e\u0442 \u0442\u0443\u0442. [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":22968,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-30992","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u0425\u043e\u0447\u0443 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u0430\u0448\u0435\u043c\u0443 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044e \u0441\u0435\u0440\u0438\u044e \u0441\u0442\u0430\u0442\u0435\u0439-\u043f\u0435\u0440\u0435\u0432\u043e\u0434\u043e\u0432 \u043e\u0434\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0439 \u043d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u044b \u2014 OSTEP.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/operating-systems-three-easy-pieces-part-2-abstraktsiya-protsess-perevod\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"fr_FR\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47Operating Systems: Three Easy Pieces. Part 2: \u0410\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u044f: \u041f\u0440\u043e\u0446\u0435\u0441\u0441 (\u043f\u0435\u0440\u0435\u0432\u043e\u0434) | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u0425\u043e\u0447\u0443 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u0430\u0448\u0435\u043c\u0443 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044e \u0441\u0435\u0440\u0438\u044e \u0441\u0442\u0430\u0442\u0435\u0439-\u043f\u0435\u0440\u0435\u0432\u043e\u0434\u043e\u0432 \u043e\u0434\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0439 \u043d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u044b \u2014 OSTEP.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/operating-systems-three-easy-pieces-part-2-abstraktsiya-protsess-perevod\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T18:38:47+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:38:47+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Syst\u00e8mes d'exploitation : Trois \u00e9tapes faciles. Partie 2 : Abstraction : Processus (traduction) | ProHoster","description":"Introduction aux syst\u00e8mes d'exploitation. Bonjour, Habr ! Je veux vous pr\u00e9senter une s\u00e9rie d'articles traduits d'une litt\u00e9rature qui, \u00e0 mon avis, est int\u00e9ressante \u2014 OSTEP.","canonical_url":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/operating-systems-three-easy-pieces-part-2-abstraktsiya-protsess-perevod","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"fr_FR","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47Operating Systems: Three Easy Pieces. Part 2: \u0410\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u044f: \u041f\u0440\u043e\u0446\u0435\u0441\u0441 (\u043f\u0435\u0440\u0435\u0432\u043e\u0434) | ProHoster","og:description":"\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u0425\u043e\u0447\u0443 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u0430\u0448\u0435\u043c\u0443 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044e \u0441\u0435\u0440\u0438\u044e \u0441\u0442\u0430\u0442\u0435\u0439-\u043f\u0435\u0440\u0435\u0432\u043e\u0434\u043e\u0432 \u043e\u0434\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0439 \u043d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u044b \u2014 OSTEP.","og:url":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/operating-systems-three-easy-pieces-part-2-abstraktsiya-protsess-perevod","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T18:38:47+00:00","article:modified_time":"2019-10-31T18:38:47+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"30992","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-21 03:59:23","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 03:26:04","updated":"2026-01-21 03:59:23","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/30992","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/comments?post=30992"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/30992\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media\/22968"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media?parent=30992"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/categories?post=30992"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/tags?post=30992"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}