Reword and syntax corrections

This commit is contained in:
Yorick Barbanneau 2022-01-07 01:16:02 +01:00
parent 5c682b618a
commit ed9e311212

View file

@ -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]({{<ref "../../progsys/3-processus/index.md">}} "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]({{<ref
"../../progsys/5_les-processus_legers/index.md">}} "Les processus légers")
Le noyau doit donc mettre en place des primitive de synchronisation.