Reword and syntax corrections
This commit is contained in:
parent
5c682b618a
commit
ed9e311212
1 changed files with 11 additions and 13 deletions
|
@ -8,15 +8,15 @@ categories: ["Systèmes d'exploitation", "Cours"]
|
||||||
Les processus sont des instances vivants de programmes. Un programme représente
|
Les processus sont des instances vivants de programmes. Un programme représente
|
||||||
du code binaire stocké sur un support de stockage.
|
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.
|
Un processus est composé d'un espace d'adressage en mémoire et d'un contexte
|
||||||
Plus d'information est disponible [dans les cours de prog. système]({{< ref
|
d'exécution. Plus d'information est disponible [dans les cours de prog.
|
||||||
"../../progsys/3-processus/index.md">}} "Les processus")
|
système]({{<ref "../../progsys/3-processus/index.md">}} "Les processus")
|
||||||
|
|
||||||
## Accès à la mémoire
|
## Accès à la mémoire
|
||||||
|
|
||||||
L'espace d'adressage contient des segments 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.
|
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 *segment data* contenant lui même le segment des *données initialisées* et
|
||||||
le BSS (données non-initialisées)
|
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 `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
|
* 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.
|
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é :
|
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
|
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
|
`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
|
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
|
## 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`
|
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
|
(réel/effectif), la table des descripteurs de fichiers, la table des signaux, un
|
||||||
espace pour sauvegarder les registres (changement de contexte, reprise sur
|
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
|
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.
|
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
|
processeur (le noyau intervient peu, peu de changement de contexte) mais
|
||||||
comporte un gand risque de **famine** : un processus en boucle ne rendrai jamais
|
comporte un gand risque de **famine** : un processus en boucle ne rendrai jamais
|
||||||
la main.
|
la main.
|
||||||
|
@ -134,7 +133,7 @@ comportement.
|
||||||
|
|
||||||
Dans le cas d'une **opération de compilation** par exemple, le
|
Dans le cas d'une **opération de compilation** par exemple, le
|
||||||
compilateur lit les fichiers sources effectuant beaucoup de `read` et se
|
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'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,
|
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
|
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
|
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
|
example de code est disponible [dans les cours de prog. système]({{<ref
|
||||||
"../../progsys/5_les-processus_legers/index.md">}} "Les processus légers")
|
"../../progsys/5_les-processus_legers/index.md">}} "Les processus légers")
|
||||||
|
|
||||||
|
|
||||||
Le noyau doit donc mettre en place des primitive de synchronisation.
|
Le noyau doit donc mettre en place des primitive de synchronisation.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue