From ed9e311212cdbc7d4066711ba49a7b90acc44b41 Mon Sep 17 00:00:00 2001 From: Yorick Barbanneau Date: Fri, 7 Jan 2022 01:16:02 +0100 Subject: [PATCH] Reword and syntax corrections --- .../2-processus/index.md | 24 +++++++++---------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/content/systemes_exploitation/2-processus/index.md b/content/systemes_exploitation/2-processus/index.md index 9b56f6e..aa8031a 100644 --- a/content/systemes_exploitation/2-processus/index.md +++ b/content/systemes_exploitation/2-processus/index.md @@ -8,15 +8,15 @@ categories: ["Systèmes d'exploitation", "Cours"] Les processus sont des instances vivants de programmes. Un programme représente du code binaire stocké sur un support de stockage. -Un processus est un espace d'adressage en mémoire et d'un contexte d'exécution. -Plus d'information est disponible [dans les cours de prog. système]({{< ref -"../../progsys/3-processus/index.md">}} "Les processus") +Un processus est composé d'un espace d'adressage en mémoire et d'un contexte +d'exécution. Plus d'information est disponible [dans les cours de prog. +système]({{}} "Les processus") ## Accès à la mémoire L'espace d'adressage contient des segments mémoire : - * le *segment de texte* / de code: les instructions optimisées par le + * le *segment de texte* / de code : les instructions optimisées par le compilateur, souvent en lecture seule dans les systèmes modernes. * le *segment data* contenant lui même le segment des *données initialisées* et le BSS (données non-initialisées) @@ -26,8 +26,7 @@ L'espace d'adressage contient des segments mémoire : la `libc` effectue un appel système (mais le noyau peut refuser d'allouer) * la *pile d'exécution*, sa taille est de 8MiB maximum sous Linux. Ce segment contient les paramètres des fonctions et leurs variables locales. - * les *librairies partagées* mappees à la demande. - + * les *librairies partagées* mappées à la demande. Il est possible de voir les espaces de mémoire alloués pour un processus donné : @@ -65,11 +64,11 @@ On y voit biens les adresses de début, ceux de fin, les droits (`r`ead, L'accès par un processus à un espace mémoire invalide donne lieu à la fameuse `segmentation fault`. Mais il est tout à fait possible de lire et écrire vers une zone non allouée du tas. Par exemple j'initialise un tableau de 10 éléments -et les rmpli avec une boule de 15 itérations. +et le rempli avec une boucle de 15 itérations. ## Attributs d'un processus -en plus de l'espace mémoire alloué pour le processus, le noyau stocke en mémoire +En plus de l'espace mémoire alloué pour le processus, le noyau stocke en mémoire un ensemble d'attributs : son identitiants (`PID`), sa priorité, l'`UID` (réel/effectif), la table des descripteurs de fichiers, la table des signaux, un espace pour sauvegarder les registres (changement de contexte, reprise sur @@ -109,7 +108,7 @@ détailler certaines. Une liste chainée de processus, on exécute le premier jusquà la fin de son exécution ou qu'il soit bloqué puis le second et ainsi de suite. -C'est une technique facile à implémenter, il est très peu couteux en temps +C'est une technique facile à implémenter, elle est très peu couteuse en temps processeur (le noyau intervient peu, peu de changement de contexte) mais comporte un gand risque de **famine** : un processus en boucle ne rendrai jamais la main. @@ -134,7 +133,7 @@ comportement. Dans le cas d'une **opération de compilation** par exemple, le compilateur lit les fichiers sources effectuant beaucoup de `read` et se -bloauqnt donc. Ensuite il compile et utilise beaucoup de CPU. +bloque régulièrement donc. Ensuite il compile et utilise beaucoup de CPU. L'ordonnanceur observe donc les métriques du passé pour prévoir l'avenir. Dans l'example du compilateur, le noyau observe que sur les 10ms de temporisation, @@ -192,8 +191,7 @@ plusieurs threads peut conduire à des fonctionnements arbitraires. Il est à noter que les accès à la mémoire sont de toute façon atomique: *une opération de lecture ou écriture à la fois*. Mais ce n'est pas suffisant, un -example de code est disponible [dans les cours de prog. système]({{< ref -"../../progsys/5_les-processus_legers/index.md">}} "Les processus légers") - +example de code est disponible [dans les cours de prog. système]({{}} "Les processus légers") Le noyau doit donc mettre en place des primitive de synchronisation.