From 3234b52588297d310ef77c05e6e6f952ab1b74db Mon Sep 17 00:00:00 2001 From: Pierre Valarcher Date: Wed, 15 Sep 2021 10:13:18 +0200 Subject: [PATCH] First commit since long time --- ASR31-Cours2.md | 658 +++++++++++++++++++++++++++++++++++++++ img/chgmentContexte.pdf | Bin 0 -> 34431 bytes img/model5etats_proc.pdf | Bin 0 -> 15522 bytes img/procClone.pdf | Bin 0 -> 25404 bytes 4 files changed, 658 insertions(+) create mode 100644 ASR31-Cours2.md create mode 100644 img/chgmentContexte.pdf create mode 100644 img/model5etats_proc.pdf create mode 100644 img/procClone.pdf diff --git a/ASR31-Cours2.md b/ASR31-Cours2.md new file mode 100644 index 0000000..ed41c39 --- /dev/null +++ b/ASR31-Cours2.md @@ -0,0 +1,658 @@ + + +## Rappel sur les processus + +Un processus reflète a un instant donné l’état d’avancement de l’exécution d’un programme binaire pur : un processus est ainsi une entité dynamique. Comme nous le verrons, un processus peut au cours du temps donner l’image de l’exécution de programmes différents du fait de l’utilisation de mécanismes de recouvrement. + +Unix fournit un mécanisme uniforme de création de processus par duplication d’un processus (seul le processus originel n’est pas créé de cette manière). Un processus a ainsi un processus parent ou père et l’ensemble des processus constitue une arborescence. + +Un processus est donc constitué, outre du programme qu’il est en train d’exécuter (c’est-à-dire la suite des instructions), de l’ensemble des données que ce programme manipule et d’un ensemble d’informations dont le système a besoin pour prendre en compte le processus et qui en constitue le *contexte* d’exécution. + +On y trouve l’ensemble de valeurs des registres du processeur correspondant à l’état d’avancement de l’exécution, un état du processus, les informations liant le processus avec l’extérieur (autres processus, utilisateurs, fichiers), etc. Cet ensemble d’informations constitue le bloc de contrôle du processus. + +Un ordonnanceur (scheduler) est chargé d'allouer le ou les processeurs aux différents processus. Une première approche de l'ordonnancement peut être décrite par : +- calcul d'une priorité à chaque processus (à chaque période) +- en cas d'égalité : stratégie du tourniquet [Wikipedia](https://fr.wikipedia.org/wiki/Round-robin_(informatique)) + +### Les processus système +Ils n'ont pas de terminal de rattachement et sont propriétaires de l'utilisateur *root* : processus démons (*daemon*). Ils ont en général comme répertoire de travail la racine du SGF. +Rendent des services généraux aux utilisateurs et aux machines sur le réseau. +Un processus fondamental est **systemd** et **init** (sur d'ancien système). C'est le premier processus créé par le système (pas de père, numéroté 1); c'est à partir de lui que les autres processus sont créés. Il se termine quand le système s'arrête. + +### Les processus utilisateur +Normalement une durée de vie limitée mais non bornée : par exemple les processus de login (*shell*), un éditeur (*vi*), .... En général, les processus sont attachés à un terminal (mais pas toujours et on peut l'en détacher). + +### Exécution d'un processus +Pour qu'un processus soit exécuté, il faut que tout ou partie du programme binaire soit en mémoire centrale. La plupart du temps les programmes ne sont qu'une seule fois en mémoire (on dit que le code est **ré-entrants**). Chaque exécution de programme dispose de son propre jeu de données (espace d'adressage du processus). +Il y a deux modes d'exécution des processus : +- le mode utilisateur (*user mode*) : le processus n'accède qu'à son espace d'adressage et son code +- le mode système (*kernel mode*) : le processus exécute des instructions qui appartiennent au noyau du système. Il a aussi accès à des données du système (externe à son espace d'adressage) : appel système, interruption extérieure nécessitant une exécution d'une séquence particulière (*handler* d'interruption). + +### Caractéristiques d'un processus +- identification +- propriétaire +- groupe propriétaires +- terminal d'attachement +- priorité, répertoire de travail, ... + +### Rappel de la commande *ps* +La commande de base pour observer les processus est *ps*. + +```bash +ps -l +``` +Dont voici le résultat (sur les machines de l'IUT, après une connexion à distance via *ssh*. + +``` +F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD +0 S 989 86846 86844 0 80 0 - 3636 wait pts/0 00:00:00 bash +0 R 989 86852 86846 0 80 0 - 8293 - pts/0 00:00:00 ps +``` + +#### Commentaires +- **UID** correspond à l'identifiant du propriétaire +- **PID** et **PPID** correspondent à l'identité du processus et celui du père +- l'état du processus (**F/S**) : *R* pour run et *S* pour sleep +- **C/PRI/NI** correspondent à des informations sur la priorité du processus +- L'adresse du processus (**ADDR**) et sa taille (**SZ**) +- le terminal de rattachement **TTY** +- La raison de la mise en sommeil **WCHAN** + +#### Remarques +Il faut faire attention car les systèmes ne donnent pas tous les mêmes résultats : la même commande sous Darwin (macOS X) + +```bash +UID PID PPID F CPU PRI NI SZ RSS WCHAN S ADDR TTY TIME CMD +501 66918 66917 4006 0 31 0 4296528 8 - S 0 ttys000 0:00.01 -bash +501 66930 66918 4006 0 31 0 4296868 772 - S 0 ttys000 0:00.37 bash +501 75794 75793 4006 0 31 0 4296528 260 - S 0 ttys001 0:00.02 -bash +501 75806 75794 4006 0 31 0 4288676 460 - S+ 0 ttys001 0:00.01 bash +``` + +### Terminaison des processus +#### Etat Zombi +C'est l'état d'un processus qui ne consomme plus aucune ressource mais est toujours dans la table des processus. Cela peut-être utile pour un père de savoir l'état d'un de ces fils (qui a fini de travailler et pourrait donc être éliminé). +#### Code de retour d'un processus +C'est l'*exit status* auquel le père peut accéder de manière asynchrone. En général, une valeur de *0* correspond à une terminaison *normale*. +#### Interruption de processus +Quand un processus est attaché à un terminal, on peut depuis le terminal l'interrompre par des caractères particuliers auxquels on accède via + +``` +[valarche@iluvatar ~]$ stty -a +speed 9600 baud; rows 57; columns 138; line = 0; +intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = M-^?; eol2 = M-^?; swtch = ; start = ^Q; stop = ^S; susp = ^Z; +rprnt = ^R; werase = ^W; lnext = ^V; discard = ^O; min = 1; time = 0; +-parenb -parodd -cmspar cs8 -hupcl -cstopb cread -clocal -crtscts +-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc ixany imaxbel iutf8 +opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0 +isig icanon iexten echo echoe -echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke -flusho -extproc +``` + +Par exemple, ``^C`` permet d'envoyer un signal de valeur *SIGINT* qui sera reçu par le groupe de processus dit **avant-plan**. L'interprétation du signal dépendra de la manière dont les processus ont "programmé" le traitement de ce signal (nous reviendrons dessus). Cela si le système supporte le contrôle de tâche (*job control*). +Le comportement par défaut est l'interruption définitive (état zombi). + +On peut envoyer sous forme de commandes un signal à un processus ``kill -n P`` avec ``n`` un numéro de signal et ``P`` le numéro d'un processus. + +##### Remarque +Le shell n'interprète pas le signal de la même manière.... + + +## Annexes + +```[valarche@iluvatar ~]$ ps -l -A --forest +F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD +1 S 0 2 0 0 80 0 - 0 - ? 00:00:01 kthreadd +1 S 0 3 2 0 80 0 - 0 - ? 00:05:42 \_ ksoftirqd/0 +1 S 0 5 2 0 60 -20 - 0 - ? 00:00:00 \_ kworker/0:0H +1 S 0 6 2 0 80 0 - 0 - ? 00:00:00 \_ kworker/u192:0 +1 S 0 8 2 0 80 0 - 0 - ? 00:16:32 \_ rcu_preempt +1 S 0 9 2 0 80 0 - 0 - ? 00:00:00 \_ rcu_sched +1 S 0 10 2 0 80 0 - 0 - ? 00:00:00 \_ rcu_bh +1 S 0 11 2 0 -40 - - 0 - ? 00:00:00 \_ migration/0 +1 S 0 12 2 0 60 -20 - 0 - ? 00:00:00 \_ lru-add-drain +5 S 0 13 2 0 -40 - - 0 - ? 00:00:08 \_ watchdog/0 +1 S 0 14 2 0 80 0 - 0 - ? 00:00:00 \_ cpuhp/0 +1 S 0 15 2 0 80 0 - 0 - ? 00:00:00 \_ cpuhp/1 +5 S 0 16 2 0 -40 - - 0 - ? 00:00:07 \_ watchdog/1 +1 S 0 17 2 0 -40 - - 0 - ? 00:00:00 \_ migration/1 +1 S 0 18 2 0 80 0 - 0 - ? 00:00:00 \_ ksoftirqd/1 +1 S 0 20 2 0 60 -20 - 0 - ? 00:00:00 \_ kworker/1:0H +1 S 0 22 2 0 80 0 - 0 - ? 00:00:00 \_ cpuhp/2 +5 S 0 23 2 0 -40 - - 0 - ? 00:00:07 \_ watchdog/2 +1 S 0 24 2 0 -40 - - 0 - ? 00:00:00 \_ migration/2 +1 S 0 25 2 0 80 0 - 0 - ? 00:00:00 \_ ksoftirqd/2 +1 S 0 27 2 0 60 -20 - 0 - ? 00:00:00 \_ kworker/2:0H +1 S 0 29 2 0 80 0 - 0 - ? 00:00:00 \_ cpuhp/3 +5 S 0 30 2 0 -40 - - 0 - ? 00:00:07 \_ watchdog/3 +1 S 0 31 2 0 -40 - - 0 - ? 00:00:00 \_ migration/3 +1 S 0 32 2 0 80 0 - 0 - ? 00:00:06 \_ ksoftirqd/3 +1 S 0 34 2 0 60 -20 - 0 - ? 00:00:00 \_ kworker/3:0H +1 S 0 36 2 0 80 0 - 0 - ? 00:00:00 \_ cpuhp/4 +5 S 0 37 2 0 -40 - - 0 - ? 00:00:07 \_ watchdog/4 +1 S 0 38 2 0 -40 - - 0 - ? 00:00:00 \_ migration/4 +1 S 0 39 2 0 80 0 - 0 - ? 00:00:22 \_ ksoftirqd/4 +1 S 0 41 2 0 60 -20 - 0 - ? 00:00:00 \_ kworker/4:0H +... +1 S 0 77 2 0 60 -20 - 0 - ? 00:00:00 \_ kworker/10:0H +1 S 0 78 2 0 80 0 - 0 - ? 00:00:00 \_ cpuhp/11 +5 S 0 79 2 0 -40 - - 0 - ? 00:00:07 \_ watchdog/11 +1 S 0 80 2 0 -40 - - 0 - ? 00:00:00 \_ migration/11 +1 S 0 81 2 0 80 0 - 0 - ? 00:00:00 \_ ksoftirqd/11 +1 S 0 83 2 0 60 -20 - 0 - ? 00:00:00 \_ kworker/11:0H +1 S 0 84 2 0 80 0 - 0 - ? 00:00:00 \_ cpuhp/12 +5 S 0 85 2 0 -40 - - 0 - ? 00:00:07 \_ watchdog/12 +1 S 0 86 2 0 -40 - - 0 - ? 00:00:00 \_ migration/12 +1 S 0 87 2 0 80 0 - 0 - ? 00:00:08 \_ ksoftirqd/12 +1 S 0 89 2 0 60 -20 - 0 - ? 00:00:00 \_ kworker/12:0H +1 S 0 90 2 0 80 0 - 0 - ? 00:00:00 \_ cpuhp/13 +5 S 0 91 2 0 -40 - - 0 - ? 00:00:07 \_ watchdog/13 +1 S 0 92 2 0 -40 - - 0 - ? 00:00:00 \_ migration/13 +1 S 0 93 2 0 80 0 - 0 - ? 00:00:00 \_ ksoftirqd/13 +1 S 0 95 2 0 60 -20 - 0 - ? 00:00:00 \_ kworker/13:0H +1 S 0 96 2 0 80 0 - 0 - ? 00:00:00 \_ cpuhp/14 +5 S 0 97 2 0 -40 - - 0 - ? 00:00:07 \_ watchdog/14 +1 S 0 98 2 0 -40 - - 0 - ? 00:00:00 \_ migration/14 +1 S 0 99 2 0 80 0 - 0 - ? 00:00:00 \_ ksoftirqd/14 +1 S 0 101 2 0 60 -20 - 0 - ? 00:00:00 \_ kworker/14:0H +1 S 0 102 2 0 80 0 - 0 - ? 00:00:00 \_ cpuhp/15 +5 S 0 103 2 0 -40 - - 0 - ? 00:00:07 \_ watchdog/15 +1 S 0 104 2 0 -40 - - 0 - ? 00:00:00 \_ migration/15 +1 S 0 105 2 0 80 0 - 0 - ? 00:00:00 \_ ksoftirqd/15 +1 S 0 107 2 0 60 -20 - 0 - ? 00:00:00 \_ kworker/15:0H +1 S 0 108 2 0 80 0 - 0 - ? 00:00:00 \_ cpuhp/16 +5 S 0 109 2 0 -40 - - 0 - ? 00:00:07 \_ watchdog/16 +1 S 0 110 2 0 -40 - - 0 - ? 00:00:00 \_ migration/16 +1 S 0 111 2 0 80 0 - 0 - ? 00:00:05 \_ ksoftirqd/16 +1 S 0 113 2 0 60 -20 - 0 - ? 00:00:00 \_ kworker/16:0H +1 S 0 114 2 0 80 0 - 0 - ? 00:00:00 \_ cpuhp/17 +5 S 0 115 2 0 -40 - - 0 - ? 00:00:07 \_ watchdog/17 +1 S 0 116 2 0 -40 - - 0 - ? 00:00:00 \_ migration/17 +1 S 0 117 2 0 80 0 - 0 - ? 00:00:00 \_ ksoftirqd/17 +1 S 0 119 2 0 60 -20 - 0 - ? 00:00:00 \_ kworker/17:0H +1 S 0 120 2 0 80 0 - 0 - ? 00:00:00 \_ cpuhp/18 +5 S 0 121 2 0 -40 - - 0 - ? 00:00:07 \_ watchdog/18 +1 S 0 122 2 0 -40 - - 0 - ? 00:00:00 \_ migration/18 +1 S 0 123 2 0 80 0 - 0 - ? 00:00:00 \_ ksoftirqd/18 +1 S 0 125 2 0 60 -20 - 0 - ? 00:00:00 \_ kworker/18:0H +1 S 0 126 2 0 80 0 - 0 - ? 00:00:00 \_ cpuhp/19 +5 S 0 127 2 0 -40 - - 0 - ? 00:00:07 \_ watchdog/19 +1 S 0 128 2 0 -40 - - 0 - ? 00:00:00 \_ migration/19 +1 S 0 129 2 0 80 0 - 0 - ? 00:00:00 \_ ksoftirqd/19 +1 S 0 131 2 0 60 -20 - 0 - ? 00:00:00 \_ kworker/19:0H +1 S 0 132 2 0 80 0 - 0 - ? 00:00:00 \_ cpuhp/20 +5 S 0 133 2 0 -40 - - 0 - ? 00:00:07 \_ watchdog/20 +1 S 0 134 2 0 -40 - - 0 - ? 00:00:00 \_ migration/20 +1 S 0 135 2 0 80 0 - 0 - ? 00:00:03 \_ ksoftirqd/20 +1 S 0 137 2 0 60 -20 - 0 - ? 00:00:00 \_ kworker/20:0H +1 S 0 138 2 0 80 0 - 0 - ? 00:00:00 \_ cpuhp/21 +5 S 0 139 2 0 -40 - - 0 - ? 00:00:07 \_ watchdog/21 +1 S 0 140 2 0 -40 - - 0 - ? 00:00:00 \_ migration/21 +1 S 0 141 2 0 80 0 - 0 - ? 00:00:00 \_ ksoftirqd/21 +1 S 0 143 2 0 60 -20 - 0 - ? 00:00:00 \_ kworker/21:0H +1 S 0 144 2 0 80 0 - 0 - ? 00:00:00 \_ cpuhp/22 +5 S 0 145 2 0 -40 - - 0 - ? 00:00:07 \_ watchdog/22 +1 S 0 146 2 0 -40 - - 0 - ? 00:00:00 \_ migration/22 +1 S 0 147 2 0 80 0 - 0 - ? 00:00:00 \_ ksoftirqd/22 +1 S 0 149 2 0 60 -20 - 0 - ? 00:00:00 \_ kworker/22:0H +1 S 0 150 2 0 80 0 - 0 - ? 00:00:00 \_ cpuhp/23 +5 S 0 151 2 0 -40 - - 0 - ? 00:00:07 \_ watchdog/23 +1 S 0 152 2 0 -40 - - 0 - ? 00:00:00 \_ migration/23 +1 S 0 153 2 0 80 0 - 0 - ? 00:00:00 \_ ksoftirqd/23 +1 S 0 155 2 0 60 -20 - 0 - ? 00:00:00 \_ kworker/23:0H +1 S 0 156 2 0 80 0 - 0 - ? 00:00:00 \_ cpuhp/24 +5 S 0 157 2 0 -40 - - 0 - ? 00:00:07 \_ watchdog/24 +1 S 0 158 2 0 -40 - - 0 - ? 00:00:00 \_ migration/24 +1 S 0 159 2 0 80 0 - 0 - ? 00:00:02 \_ ksoftirqd/24 +1 S 0 161 2 0 60 -20 - 0 - ? 00:00:00 \_ kworker/24:0H +1 S 0 162 2 0 80 0 - 0 - ? 00:00:00 \_ cpuhp/25 +5 S 0 163 2 0 -40 - - 0 - ? 00:00:07 \_ watchdog/25 +1 S 0 164 2 0 -40 - - 0 - ? 00:00:00 \_ migration/25 +1 S 0 165 2 0 80 0 - 0 - ? 00:00:00 \_ ksoftirqd/25 +1 S 0 167 2 0 60 -20 - 0 - ? 00:00:00 \_ kworker/25:0H +1 S 0 168 2 0 80 0 - 0 - ? 00:00:00 \_ cpuhp/26 +5 S 0 169 2 0 -40 - - 0 - ? 00:00:07 \_ watchdog/26 +1 S 0 170 2 0 -40 - - 0 - ? 00:00:00 \_ migration/26 +1 S 0 171 2 0 80 0 - 0 - ? 00:00:00 \_ ksoftirqd/26 +1 S 0 173 2 0 60 -20 - 0 - ? 00:00:00 \_ kworker/26:0H +1 S 0 174 2 0 80 0 - 0 - ? 00:00:00 \_ cpuhp/27 +5 S 0 175 2 0 -40 - - 0 - ? 00:00:07 \_ watchdog/27 +1 S 0 176 2 0 -40 - - 0 - ? 00:00:00 \_ migration/27 +1 S 0 177 2 0 80 0 - 0 - ? 00:00:00 \_ ksoftirqd/27 +1 S 0 179 2 0 60 -20 - 0 - ? 00:00:00 \_ kworker/27:0H +1 S 0 180 2 0 80 0 - 0 - ? 00:00:00 \_ cpuhp/28 +5 S 0 181 2 0 -40 - - 0 - ? 00:00:07 \_ watchdog/28 +1 S 0 182 2 0 -40 - - 0 - ? 00:00:00 \_ migration/28 +1 S 0 183 2 0 80 0 - 0 - ? 00:00:02 \_ ksoftirqd/28 +1 S 0 185 2 0 60 -20 - 0 - ? 00:00:00 \_ kworker/28:0H +1 S 0 186 2 0 80 0 - 0 - ? 00:00:00 \_ cpuhp/29 +5 S 0 187 2 0 -40 - - 0 - ? 00:00:07 \_ watchdog/29 +1 S 0 188 2 0 -40 - - 0 - ? 00:00:00 \_ migration/29 +1 S 0 189 2 0 80 0 - 0 - ? 00:00:00 \_ ksoftirqd/29 +1 S 0 191 2 0 60 -20 - 0 - ? 00:00:00 \_ kworker/29:0H +1 S 0 192 2 0 80 0 - 0 - ? 00:00:00 \_ cpuhp/30 +5 S 0 193 2 0 -40 - - 0 - ? 00:00:07 \_ watchdog/30 +1 S 0 194 2 0 -40 - - 0 - ? 00:00:00 \_ migration/30 +1 S 0 195 2 0 80 0 - 0 - ? 00:00:00 \_ ksoftirqd/30 +1 S 0 197 2 0 60 -20 - 0 - ? 00:00:00 \_ kworker/30:0H +1 S 0 198 2 0 80 0 - 0 - ? 00:00:00 \_ cpuhp/31 +5 S 0 199 2 0 -40 - - 0 - ? 00:00:07 \_ watchdog/31 +1 S 0 200 2 0 -40 - - 0 - ? 00:00:00 \_ migration/31 +1 S 0 201 2 0 80 0 - 0 - ? 00:00:00 \_ ksoftirqd/31 +1 S 0 203 2 0 60 -20 - 0 - ? 00:00:00 \_ kworker/31:0H +1 S 0 204 2 0 80 0 - 0 - ? 00:00:00 \_ cpuhp/32 +5 S 0 205 2 0 -40 - - 0 - ? 00:00:07 \_ watchdog/32 +1 S 0 206 2 0 -40 - - 0 - ? 00:00:00 \_ migration/32 +1 S 0 207 2 0 80 0 - 0 - ? 00:00:00 \_ ksoftirqd/32 +1 S 0 208 2 0 80 0 - 0 - ? 00:00:00 \_ kworker/32:0 +1 S 0 209 2 0 60 -20 - 0 - ? 00:00:00 \_ kworker/32:0H +1 S 0 210 2 0 80 0 - 0 - ? 00:00:00 \_ cpuhp/33 +5 S 0 211 2 0 -40 - - 0 - ? 00:00:07 \_ watchdog/33 +1 S 0 212 2 0 -40 - - 0 - ? 00:00:00 \_ migration/33 +1 S 0 213 2 0 80 0 - 0 - ? 00:00:00 \_ ksoftirqd/33 +1 S 0 215 2 0 60 -20 - 0 - ? 00:00:00 \_ kworker/33:0H +1 S 0 216 2 0 80 0 - 0 - ? 00:00:00 \_ cpuhp/34 +5 S 0 217 2 0 -40 - - 0 - ? 00:00:07 \_ watchdog/34 +1 S 0 218 2 0 -40 - - 0 - ? 00:00:00 \_ migration/34 +1 S 0 219 2 0 80 0 - 0 - ? 00:00:00 \_ ksoftirqd/34 +1 S 0 221 2 0 60 -20 - 0 - ? 00:00:00 \_ kworker/34:0H +1 S 0 222 2 0 80 0 - 0 - ? 00:00:00 \_ cpuhp/35 +5 S 0 223 2 0 -40 - - 0 - ? 00:00:07 \_ watchdog/35 +1 S 0 224 2 0 -40 - - 0 - ? 00:00:00 \_ migration/35 +1 S 0 225 2 0 80 0 - 0 - ? 00:00:00 \_ ksoftirqd/35 +1 S 0 227 2 0 60 -20 - 0 - ? 00:00:00 \_ kworker/35:0H +1 S 0 228 2 0 80 0 - 0 - ? 00:00:00 \_ cpuhp/36 +5 S 0 229 2 0 -40 - - 0 - ? 00:00:07 \_ watchdog/36 +... +1 S 0 272 2 0 -40 - - 0 - ? 00:00:00 \_ migration/43 +1 S 0 273 2 0 80 0 - 0 - ? 00:00:00 \_ ksoftirqd/43 +1 S 0 275 2 0 60 -20 - 0 - ? 00:00:00 \_ kworker/43:0H +1 S 0 276 2 0 80 0 - 0 - ? 00:00:00 \_ cpuhp/44 +5 S 0 277 2 0 -40 - - 0 - ? 00:00:07 \_ watchdog/44 +1 S 0 278 2 0 -40 - - 0 - ? 00:00:00 \_ migration/44 +1 S 0 279 2 0 80 0 - 0 - ? 00:00:00 \_ ksoftirqd/44 +1 S 0 281 2 0 60 -20 - 0 - ? 00:00:00 \_ kworker/44:0H +1 S 0 282 2 0 80 0 - 0 - ? 00:00:00 \_ cpuhp/45 +5 S 0 283 2 0 -40 - - 0 - ? 00:00:07 \_ watchdog/45 +1 S 0 284 2 0 -40 - - 0 - ? 00:00:00 \_ migration/45 +1 S 0 285 2 0 80 0 - 0 - ? 00:00:00 \_ ksoftirqd/45 +1 S 0 287 2 0 60 -20 - 0 - ? 00:00:00 \_ kworker/45:0H +1 S 0 288 2 0 80 0 - 0 - ? 00:00:00 \_ cpuhp/46 +5 S 0 289 2 0 -40 - - 0 - ? 00:00:07 \_ watchdog/46 +1 S 0 290 2 0 -40 - - 0 - ? 00:00:00 \_ migration/46 +1 S 0 291 2 0 80 0 - 0 - ? 00:00:00 \_ ksoftirqd/46 +1 S 0 293 2 0 60 -20 - 0 - ? 00:00:00 \_ kworker/46:0H +1 S 0 294 2 0 80 0 - 0 - ? 00:00:00 \_ cpuhp/47 +5 S 0 295 2 0 -40 - - 0 - ? 00:00:07 \_ watchdog/47 +1 S 0 296 2 0 -40 - - 0 - ? 00:00:00 \_ migration/47 +1 S 0 297 2 0 80 0 - 0 - ? 00:00:00 \_ ksoftirqd/47 +... +1 S 0 321 2 0 80 0 - 0 - ? 00:00:00 \_ ksoftirqd/51 +1 S 0 323 2 0 60 -20 - 0 - ? 00:00:00 \_ kworker/51:0H +1 S 0 324 2 0 80 0 - 0 - ? 00:00:00 \_ cpuhp/52 +5 S 0 325 2 0 -40 - - 0 - ? 00:00:07 \_ watchdog/52 +1 S 0 326 2 0 -40 - - 0 - ? 00:00:00 \_ migration/52 +1 S 0 327 2 0 80 0 - 0 - ? 00:00:00 \_ ksoftirqd/52 +1 S 0 329 2 0 60 -20 - 0 - ? 00:00:00 \_ kworker/52:0H +1 S 0 330 2 0 80 0 - 0 - ? 00:00:00 \_ cpuhp/53 +5 S 0 331 2 0 -40 - - 0 - ? 00:00:07 \_ watchdog/53 +1 S 0 332 2 0 -40 - - 0 - ? 00:00:00 \_ migration/53 +1 S 0 333 2 0 80 0 - 0 - ? 00:00:00 \_ ksoftirqd/53 +1 S 0 335 2 0 60 -20 - 0 - ? 00:00:00 \_ kworker/53:0H +1 S 0 336 2 0 80 0 - 0 - ? 00:00:00 \_ cpuhp/54 +5 S 0 337 2 0 -40 - - 0 - ? 00:00:07 \_ watchdog/54 +1 S 0 338 2 0 -40 - - 0 - ? 00:00:00 \_ migration/54 +1 S 0 339 2 0 80 0 - 0 - ? 00:00:00 \_ ksoftirqd/54 +1 S 0 341 2 0 60 -20 - 0 - ? 00:00:00 \_ kworker/54:0H +1 S 0 342 2 0 80 0 - 0 - ? 00:00:00 \_ cpuhp/55 +5 S 0 343 2 0 -40 - - 0 - ? 00:00:07 \_ watchdog/55 +... +5 S 0 373 2 0 -40 - - 0 - ? 00:00:07 \_ watchdog/60 +1 S 0 374 2 0 -40 - - 0 - ? 00:00:00 \_ migration/60 +1 S 0 375 2 0 80 0 - 0 - ? 00:00:00 \_ ksoftirqd/60 +1 S 0 377 2 0 60 -20 - 0 - ? 00:00:00 \_ kworker/60:0H +1 S 0 378 2 0 80 0 - 0 - ? 00:00:00 \_ cpuhp/61 +5 S 0 379 2 0 -40 - - 0 - ? 00:00:07 \_ watchdog/61 +1 S 0 380 2 0 -40 - - 0 - ? 00:00:00 \_ migration/61 +1 S 0 381 2 0 80 0 - 0 - ? 00:00:00 \_ ksoftirqd/61 +1 S 0 383 2 0 60 -20 - 0 - ? 00:00:00 \_ kworker/61:0H +1 S 0 384 2 0 80 0 - 0 - ? 00:00:00 \_ cpuhp/62 +5 S 0 385 2 0 -40 - - 0 - ? 00:00:07 \_ watchdog/62 +1 S 0 386 2 0 -40 - - 0 - ? 00:00:00 \_ migration/62 +1 S 0 387 2 0 80 0 - 0 - ? 00:00:00 \_ ksoftirqd/62 +1 S 0 389 2 0 60 -20 - 0 - ? 00:00:00 \_ kworker/62:0H +1 S 0 390 2 0 80 0 - 0 - ? 00:00:00 \_ cpuhp/63 +5 S 0 391 2 0 -40 - - 0 - ? 00:00:07 \_ watchdog/63 +1 S 0 392 2 0 -40 - - 0 - ? 00:00:00 \_ migration/63 +1 S 0 393 2 0 80 0 - 0 - ? 00:00:00 \_ ksoftirqd/63 +1 S 0 395 2 0 60 -20 - 0 - ? 00:00:00 \_ kworker/63:0H +5 S 0 396 2 0 80 0 - 0 - ? 00:00:00 \_ kdevtmpfs +1 S 0 397 2 0 60 -20 - 0 - ? 00:00:00 \_ netns +1 S 0 398 2 0 80 0 - 0 - ? 00:00:04 \_ khungtaskd +1 S 0 399 2 0 80 0 - 0 - ? 00:00:00 \_ oom_reaper +1 S 0 400 2 0 60 -20 - 0 - ? 00:00:00 \_ writeback +1 S 0 401 2 0 80 0 - 0 - ? 00:00:00 \_ kcompactd0 +1 S 0 402 2 0 80 0 - 0 - ? 00:00:00 \_ kcompactd1 +1 S 0 403 2 0 80 0 - 0 - ? 00:00:00 \_ kcompactd2 +... +1 S 0 1149 2 0 80 0 - 0 - ? 00:00:00 \_ kworker/43:1 +1 S 0 1150 2 0 80 0 - 0 - ? 00:00:00 \_ kworker/44:1 +1 S 0 1151 2 0 80 0 - 0 - ? 00:00:00 \_ kworker/51:1 +1 S 0 1152 2 0 80 0 - 0 - ? 00:00:00 \_ kworker/53:1 +1 S 0 1154 2 0 80 0 - 0 - ? 00:00:00 \_ kworker/48:1 +1 S 0 1157 2 0 80 0 - 0 - ? 00:00:01 \_ kworker/50:1 +1 S 0 1158 2 0 80 0 - 0 - ? 00:00:00 \_ kworker/61:1 +1 S 0 1159 2 0 80 0 - 0 - ? 00:00:00 \_ kworker/63:1 +1 S 0 1160 2 0 80 0 - 0 - ? 00:00:00 \_ kworker/59:1 +1 S 0 1161 2 0 80 0 - 0 - ? 00:00:00 \_ kworker/55:1 +... +1 S 0 1367 2 0 60 -20 - 0 - ? 00:00:00 \_ kworker/43:1H +1 S 0 1371 2 0 60 -20 - 0 - ? 00:00:00 \_ kworker/45:1H +1 S 0 1377 2 0 60 -20 - 0 - ? 00:00:00 \_ kworker/42:1H +1 S 0 1380 2 0 60 -20 - 0 - ? 00:00:00 \_ ixgbe +1 S 0 1383 2 0 60 -20 - 0 - ? 00:00:00 \_ kworker/36:1H +1 S 0 1384 2 0 60 -20 - 0 - ? 00:00:00 \_ kworker/55:1H +1 S 0 1385 2 0 60 -20 - 0 - ? 00:00:00 \_ ttm_swap +1 S 0 1395 2 0 80 0 - 0 - ? 00:06:52 \_ jbd2/sdc1-8 +1 S 0 1396 2 0 60 -20 - 0 - ? 00:00:00 \_ ext4-rsv-conver +1 S 0 1418 2 0 60 -20 - 0 - ? 00:00:00 \_ kworker/50:1H +1 S 0 1424 2 0 80 0 - 0 - ? 00:00:00 \_ jbd2/sdb1-8 +1 S 0 1425 2 0 60 -20 - 0 - ? 00:00:00 \_ ext4-rsv-conver +1 S 0 1429 2 0 60 -20 - 0 - ? 00:00:00 \_ kworker/19:1H +1 S 0 1431 2 0 60 -20 - 0 - ? 00:00:00 \_ kworker/61:1H +1 S 0 1433 2 0 60 -20 - 0 - ? 00:00:00 \_ kvm-irqfd-clean +1 S 0 1436 2 0 60 -20 - 0 - ? 00:00:03 \_ kworker/8:1H +1 S 0 1437 2 0 60 -20 - 0 - ? 00:00:00 \_ edac-poller +1 S 0 1443 2 0 60 -20 - 0 - ? 00:00:00 \_ kworker/46:1H +1 S 0 1445 2 0 60 -20 - 0 - ? 00:00:01 \_ kworker/16:1H +1 S 0 1448 2 0 60 -20 - 0 - ? 00:00:00 \_ kworker/47:1H +1 S 0 1450 2 0 80 0 - 0 - ? 00:00:01 \_ kworker/44:2 +1 S 0 1460 2 0 60 -20 - 0 - ? 00:00:00 \_ kworker/18:1H +1 S 0 1477 2 0 60 -20 - 0 - ? 00:00:00 \_ kworker/54:1H +1 S 0 1512 2 0 60 -20 - 0 - ? 00:00:00 \_ bond0 +1 S 0 1515 2 0 60 -20 - 0 - ? 00:00:00 \_ kworker/52:1H +1 S 0 1581 2 0 60 -20 - 0 - ? 00:00:00 \_ kworker/40:1H +1 S 0 1630 2 0 60 -20 - 0 - ? 00:00:00 \_ kworker/62:1H +1 S 0 1645 2 0 60 -20 - 0 - ? 00:00:00 \_ kworker/35:1H +1 S 0 1668 2 0 60 -20 - 0 - ? 00:00:08 \_ kworker/4:1H +1 S 0 1669 2 0 60 -20 - 0 - ? 00:00:02 \_ kworker/12:1H +1 S 0 1673 2 0 60 -20 - 0 - ? 00:00:00 \_ nfsd4_callbacks +1 S 0 1674 2 0 80 0 - 0 - ? 00:00:00 \_ lockd +5 S 0 1676 2 0 80 0 - 0 - ? 00:00:11 \_ nfsd +5 S 0 1677 2 0 80 0 - 0 - ? 00:00:13 \_ nfsd + +....... + +0 R 989 87244 86846 0 80 0 - 8501 - pts/0 00:00:00 | \_ ps +4 S 0 87210 1622 0 80 0 - 9570 - ? 00:00:00 \_ sshd +4 S 0 1628 1 0 80 0 - 25948 - ? 00:00:00 login +4 S 0 1719 1628 0 80 0 - 3636 - tty1 00:00:00 \_ bash +5 S 32 1634 1 0 80 0 - 11528 - ? 00:00:05 rpcbind +5 S 0 1637 1 0 80 0 - 7834 - ? 00:00:00 rpc.statd +5 S 87 1638 1 0 80 0 - 23385 - ? 00:03:08 ntpd +5 S 0 1639 1 0 80 0 - 8684 - ? 00:00:04 rpc.mountd +5 S 0 1642 1 0 80 0 - 60190 - ? 00:08:26 nmbd +5 S 0 1648 1 0 80 0 - 79819 - ? 00:00:29 smbd +5 S 0 1649 1648 0 80 0 - 79069 - ? 00:00:14 \_ smbd-notifyd +1 S 0 1650 1648 0 80 0 - 79145 - ? 00:00:05 \_ cleanupd +1 S 0 1665 1648 0 80 0 - 79815 - ? 00:00:18 \_ lpqd +5 S 0 1657 1 0 80 0 - 124175 - ? 00:00:00 radiusd +4 S 0 1688 1 0 80 0 - 13107 - ? 00:00:01 systemd +5 S 0 1702 1688 0 80 0 - 28098 - ? 00:00:00 \_ (sd-pam) +4 S 3552 28791 1 0 80 0 - 13129 - ? 00:00:01 systemd +5 S 3552 28799 28791 0 80 0 - 28136 - ? 00:00:00 \_ (sd-pam) +4 S 662 35641 1 0 80 0 - 13127 - ? 00:00:00 systemd +5 S 662 35650 35641 0 80 0 - 30185 - ? 00:00:00 \_ (sd-pam) +1 S 662 35691 1 0 80 0 - 35106 - ? 00:01:28 dirmngr +1 S 662 35696 1 0 80 0 - 41554 - ? 00:01:29 gpg-agent +1 S 3552 41087 1 0 80 0 - 6343 - ? 00:02:07 rsync +1 S 3552 41091 1 0 80 0 - 91499 - ? 01:09:18 cron +1 S 3552 78683 1 0 80 0 - 85476 - ? 00:38:35 rsync +1 S 3552 77557 1 0 80 0 - 6343 - ? 00:00:05 rsync +1 S 3552 78842 1 0 80 0 - 6496 - ? 00:00:08 rsync +4 S 989 86828 1 0 80 0 - 13129 ep_pol ? 00:00:00 systemd +5 S 989 86837 86828 0 80 0 - 30185 - ? 00:00:00 \_ (sd-pam) +[valarche@iluvatar ~]$ + +``` + + +Seulement l'utilisateur : + + +``` +[valarche@iluvatar ~]$ ps -l +F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD +0 S 989 86846 86844 0 80 0 - 3636 wait pts/0 00:00:00 bash +0 R 989 87267 86846 0 80 0 - 8293 - pts/0 00:00:00 ps +[valarche@iluvatar ~]$ ps -l -A --forest | grep 989 +5 S 989 86844 86823 0 80 0 - 27314 - ? 00:00:00 | \_ sshd +0 S 989 86846 86844 0 80 0 - 3636 wait pts/0 00:00:00 | \_ bash +0 R 989 87269 86846 0 80 0 - 8501 - pts/0 00:00:00 | \_ ps +0 S 989 87270 86846 0 80 0 - 2841 pipe_w pts/0 00:00:00 | \_ grep +4 S 989 86828 1 0 80 0 - 13129 ep_pol ? 00:00:00 systemd +5 S 989 86837 86828 0 80 0 - 30185 - ? 00:00:00 \_ (sd-pam) +[valarche@iluvatar ~]$ + +``` + +# Notes de cours +Cette première partie du cours concerne la gestion de processus et des services permettant leur manipulation : création, terminaison, chargement/recouvrement et synchronisation. Nous suivrons l'interface POSIX pour les programmes écrits en C. + +## Gestion des processus +Rappel des différences entre processus et programme. +IL est muni d'un espace d'adressage (instructions, pile d'exécution, tas entre autres). Cet espace est dynamique; il est susceptible de se modifier au cours du temps. +Les deux modes d'exécution : user et kernel. +Tout processus peut créer un/des processus (sous réserve de ressources) : la primitive *fork*. La sémantique dénotationnelle est la duplication du processus appelant. Il se crée une arborescence de processus. + +Pas d'exécution déterministe à priori (un scheduler ordonne les exécutions). On peut faire appel à des mécanismes de synchronisation. +#### Etats d'un processus +Les 7 états d'un processus +- Nouveau +- Prêt +- Execution noyau +- Execution user +- Endormi +- Zombi +- suspendu + +L'automate de l'évolution d'un processus est le suivant : +![Modèle à 7 états](img/model5etats_proc.pdf) + +#### Implémentation des processus +Pour pouvoir ordonnancé le système a besoin d'un ensemble d'informations désigné par le terme **bloc de contrôle** (BCP ou PCB). +Ce bloc contient une entrée dans la table interne du noyau. Voici des informations qu'il contient : +- le pid du processus +- l'état du processus +- son compteur ordinal (pointeur d'instruction) +- son allocation mémoire +- les fichiers ouverts +- les valeurs contenues dans les registres du processeur + +| Gestion des processus | Gestion de la mémoire | Gestion des fichiers | +|:--|:--|:--| +| Registres | Pointeur seg.code | Répertoire racine | +| Pointeur d'instruction | Pointeur seg. données | Répertoire de travail | +| Priorité | Pointeur seg.pile | fd (File Descriptors) | +| Pointeur de pile | | uid | +| Date de lancement | | gid | +| Temps UCT utilisé | | | +| Temps UCT des fils | | | +| Signaux | | | +| pid | | | +| ppid | | | + +Ce PCB est nécessaire pour effectuer le changement de contexte de processus. +#### Changement de contexte +On illustre par cette figure, en notant les différents mode : +![Changement de contexte](img/chgmentContexte.pdf) + +#### Les démons +Processus toujours en arrière plan. Pas d'association à un terminal ou processus de login. En génénal, il ne "travaille" pas. Ils lancent d'autres processus pour effectuer les tâches. + +#### Création et terminaison des processus (POSIX) + + +```c +#include +#include + +pid_t fork(void); +``` + +Cette fonction permet la création d'un processus est une copie de l'appelant. Comme indiqué auparavant, les deux processus partagent le même code (sauf si pas ré-entrant) et leur pointeur d'instruction est à la même instruction. Par contre la valeur de retour de l'appel à fork() est différente selon que c'est le père ou le fils. Les variables des deux processus sont **dupliquées**. + +Une hiérarchie est établie : père/fils. + +En fait, on peut illustrer ce qui n'est pas hérité plutôt que l'inverse. +Le processus fils n'hérite pas de : +- pid de son père, ni ppid +- les temps d'exécution (initialisés à la valeur nulle) +- les signaux pendants +- la priorité du processus (initialisée à la valeur standard) +- les verrous sur les fichiers détenus par le père qui restent la propriété exclusive de celui-ci + +Il est important de noter que la table des descripteurs est héritée. Les deux processus partagent les même descripteurs et les mêmes *offset*. Ils pointent sur le même entrée de la table des fichiers ouverts. + +A faire en exercices: +- partage de *uid*, *gid*, *cwd*, *sid*, +- partage des descripteurs; *offset* + +##### Remarques +La copie des données étant couteuse, on ne la fait que si il y a une demande d'écriture. + +##### Exemples +Voici une illustration pour un clonage simple dont voici le code : + +```c +int main() { + pid_t i; + + i = fork(); + + return EXIT_SUCCESS; +} +``` + +![Processus père et fils](img/procClone.pdf) + +Un exemple plus complet : + +```c +* usage : creerProcessus1 */ + +#include +#include +#include + +pid_t pid; // pour récupérer le pid du nouveau processus + +int main() { + + switch(pid = fork()) { + case (pid_t) -1: // l’appel de fork a échoué + perror("Création de processus"); + exit(2); + case (pid_t)0: // ici, ça concerne le processus fils + printf("valeur de fork dans le fils = %d\n",pid); + printf("je suis le processus %d de père %d\n",getpid(), getppid()); + printf("fin du processus fils\n"); + exit(0); + default: // ici, c’est le processus père + printf("valeur de fork dans le père = %d\n",pid); + printf("je suis le processus %d de père %d\n",getpid(), getppid()); + printf("fin du processus père\n"); + } + return EXIT_SUCCESS; +} +``` + + dont l'exécution donne : + +``` +[valarche@iluvatar exemples_asr31]$ gcc creerProcessus1.c +[valarche@iluvatar exemples_asr31]$ ./a.out +valeur de fork dans le père = 95256 +je suis le processus 95255 de père 95195 +fin du processus père +valeur de fork dans le fils = 0 +je suis le processus 95256 de père 1 +fin du processus fils + +``` + +##### Hiérarchie de processus : + +```c +#include +#include +#include +#include + +int main(void) { + + int n = 5; + pid_t fils_pid; + + for (int i=0; i < n; i++) { + fils_pid = fork(); + + if (fils_pid > 0) { + break; + } + + printf("Processus %d avec père %d\n", getpid(), getppid()); + + } + return EXIT_SUCCESS; +} +``` +Autres exemples avec attente (dynamique) dans les processus + +```c +#include +#include +#include +#include + +int main(void) { + + int n = 5; + pid_t fils_pid; + + for (int i=0; i < n; i++) { + fils_pid = fork(); + + if (fils_pid > 0) break; + + printf("Processus %d avec père %d\n", getpid(), getppid()); + } + + for (int j = 0; j < 10000; j++) { + for (int k=0; k < 1000; k++) { + ; + } + } + + return EXIT_SUCCESS; +} +``` + +## Annexe + +Session = groupe de processus. Par exemple, *foreground* et *background*. Un processus appartient à une unique session (celle de son père à la création). + +Un processus peut créer une nouvelle session : + +```c +#include +#include +pid_t setsid(void); +``` + +Le processus en devient le leader (le numéro du processus identifiera le numéro de la session). + +```c +#include +pid_t getpgrp(void); +``` + diff --git a/img/chgmentContexte.pdf b/img/chgmentContexte.pdf new file mode 100644 index 0000000000000000000000000000000000000000..4c4f61f4bcd6c1063df3bb2b2d69fa7dbf9cb734 GIT binary patch literal 34431 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 PikTIWfVaawrNOn-F@fUXz@?VZw=lFb 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