1 <?xml version="1.0" encoding="utf-8" ?>
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
3 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
5 <html xmlns="http://www.w3.org/1999/xhtml" >
7 <title>Systèmes d'exploitation (2/2)</title>
9 <meta http-equiv="Content-Type"
10 content="text/html; charset=utf-8" />
11 <meta name="copyright"
12 content="Copyright © 2013 Kim Nguyễn" />
15 <script src="../jquery-1.9.1.min.js" type="text/javascript" ></script>
16 <!-- Load the library -->
17 <script src="../simpleWebSlides.js" type="text/javascript" ></script>
19 <link rel="stylesheet" href="../simpleWebSlides.css" type="text/css" media="all" />
20 <!-- Load a custom Theme, the class-element marks this style-sheet
21 a "theme" that can be swtiched dynamicaly -->
22 <link class="sws-theme" rel="stylesheet" title="U-Psud style" href="../themes/uPsud.css" type="text/css" />
24 <!-- Customize some templates and initialize -->
26 <script type="text/javascript">
27 SWS.Config['sws-slide-change'] = SWS.Effects.slideChangeFadeOutIn;
28 SWS.Config['sws-object-deactivate'] = SWS.Effects.objectDeactivateFadeOut;
29 SWS.Config['sws-object-activate'] = SWS.Effects.objectActivateFadeIn;
31 //Ensures that we load SWS at the very end, after MathJax has
34 $(window).load(SWS.Presentation.init);
38 -webkit-transform: scale(1.8) translateX(40%);
39 transform: scale(1.8) translateX(40%);
44 <a href="unix_prog_web_01.xhtml" class="sws-previous" />
45 <div class="sws-slide sws-cover sws-option-nofooter">
46 <h1>Unix et Programmation Web</h1>
48 <a href="mailto:kn@lri.fr">kn@lri.fr</a><br/>
49 <a href="http://www.lri.fr/~kn/">http://www.lri.fr/~kn</a>
51 <h1> Gestion des processus</h1>
53 <div class="sws-slide">
54 <h1> Définitions </h1>
57 <td style="width:6.5em;">Programme</td> <td>séquences d'instructions effectuant
58 une tâche sur un ordinateur</td>
61 <td>Exécutable</td> <td>fichier binaire contenant des
62 instructions machines interprétables par le
66 <td><i>Thread</i> </td>
67 <td>plus petite unité de traitement (≡
68 séquence d'instructions) pouvant être ordonnancée par
74 <td> instance d'un programme (≡ « un
75 programme en cours d'exécution »). Un processus est constitué
76 de un ou plusieurs <i>threads</i>.</td>
81 <div class="sws-slide">
82 <h1> Exemple: programme </h1>
83 <p>Dans un fichier « <tt> counter.c </tt> »
84 (<span style="color:red;">attention c'est du pseudo
86 <div style="float:left;clear:both;vertical-align:top;width:45%;display:inline-block;border-right: 1pt solid #494948;">
87 <code > int count = 0;
89 void <span style="color:green;">display()</span> {
92 printf("%i\n", count);
95 void <span style="color:red;">listen()</span> {
101 </div> <div style="vertical-align:top;display:inline-block;width:45%;">
102 <code> void <span style="color:blue;">main ()</span> {
103 run_function(display);
104 run_function(listen);
105 while (getc () != '\n') { };
111 <div class="sws-slide">
112 <h1> Exemple: programme </h1>
115 gcc -o counter.exe counter.c
117 Le <em>fichier</em> « <tt>counter.exe</tt> » est un
118 exécutable (fichier binaire contenant du code machine)<br/>
120 ./counter.exe <span style="margin-left:2em;font-size:smaller;color:red;"> ← il faut la permission +x sur le fichier</span>
123 Le contenu de l'exécutable est copié en mémoire et le processeur
124 commence à exécuter la première instruction du programme.
127 <div class="sws-slide">
128 <h1> Exemple: <i>threads</i> </h1>
130 <li class="sws-pause" ><span style="color:white;background:blue">main</span> </li>
131 <li class="sws-pause" ><span style="color:blue;">attente d'un évènement clavier
132 →</span><span style="color:red;">←changement de <i>thread</i></span>
134 <li class="sws-pause" ><span style="color:white;background:red">listen</span> </li>
135 <li class="sws-pause" ><span style="color:red;">attente de connexion →</span><span style="color:green;">←changement de <i>thread</i></span>
137 <li class="sws-pause" ><span style="color:white;background:green">display</span> (<span style="color:green;">affiche
138 0 à l'écran)</span> </li>
139 <li class="sws-pause" ><span style="color:green;">attente pendant 3s →</span> (les
140 3 <i>threads</i> attendent un évènement externe)<br/>
141 <span class="sws-pause" >nouvelle connexion sur le port 80</span> <span style="color:red;">←
142 réveil du <i>thread</i> <code style="color:red;">listen</code></span>
144 <li class="sws-pause" ><span style="color:white;background:red">listen</span>
145 (<span style="color:red;">incrémente <tt style="color:red">count</tt></span>)<br/>
146 <span style="color:red;">attente de connexion →</span><br/>
147 <span>… fin des 3s</span><br/>
148 <span style="color:green;">←
149 réveil du <i>thread</i> <tt style="color:green;">display</tt></span>
151 <li class="sws-pause" ><span style="color:white;background:green">display</span> (<span style="color:green;">affiche
152 1 à l'écran)</span> </li>
154 <p class="sws-pause" >Les <i>threads</i> partagent leur mémoire (variables communes)</p>
156 <div class="sws-slide">
157 <h1>Exemple: processus</h1>
158 <p>(différence: les processus
159 <em>ne partagent pas leur espace mémoire</em>)</p>
161 <li>Exécution de <code><span style="color:blue;">coun</span><span style="color:red;">ter</span><span style="color:green;">.exe</span></code> pendant 50㎲
164 de <code><span style="color:orange;">firefox.exe</span></code>
166 <li > Exécution du processus qui dessine le bureau pendant 50
170 <p>C'est le <em>gestionnaire de processus</em> qui décide quel
171 programme a la main et pour combien de temps (priorité aux
172 tâches critiques par exemple)<br/>
173 Le système d'exploitation stocke pour chaque processus un
174 ensemble d'informations, le PCB (<i>Process Control Block</i>).
177 <div class="sws-slide">
178 <h1>Proccess Control Block</h1>
179 <p>Le PCB contient:</p>
181 <li>l'<em>identificateur du processus</em> (pid)</li>
182 <li>l'<em>l'état</em> du processus (en attente, en exécution,
184 <li>le compteur d'instructions (<i>i.e.</i> où on en est dans
186 <li>le <em>contexte courant</em>(état des registres, …)</li>
187 <li>position dans <em>la file d'attente de priorité
189 <li>informations mémoire (zones allouées, zones accessibles,
190 zones partagées)</li>
191 <li>listes des fichiers ouverts (en lecture, en écriture),
192 liste des connexions ouvertes, … <br/> … </li>
195 <div class="sws-slide">
196 <h1>Opérations sur les processus</h1>
198 <li><em>création</em> et <em>destruction</em> de
200 <li><em>suspension</em> et <em>reprise</em></li>
201 <li><em>duplication</em> (<i>fork</i>)</li>
202 <li>modification de la <em>priorité</em></li>
203 <li>modification des <em>permissions </em></li>
206 <div class="sws-slide">
207 <h1>États d'un processus</h1>
208 <p>Un processus change d'état au cours de son exécution</p>
210 <tr><td style="width:6em;">Nouveau</td> <td>le processus est en cours de création</td></tr>
211 <tr><td>Exécution</td> <td>le processus s'exécute</td></tr>
212 <tr><td>En attente</td> <td>le processus attend un évènement
213 particulier (saisie au clavier, écriture sur le disque,
215 <tr><td>Prêt</td> <td>le processus est prêt à reprendre son
216 exécution et attend que l'OS lui rende la main</td></tr>
217 <tr><td>terminé</td> <td>le processus a fini son exécution</td></tr>
220 <div class="sws-slide">
221 <h1>États d'un processus</h1>
222 <p>L'OS détermine et modifie l'état d'un processus:</p>
224 <li>En fonction d'évènements internes au processus:
225 <ul><li>lecture d'un fichier (si le contenu n'est pas
226 disponible, le processus passe de « prêt » à « en attente
228 <li>le processus attends volontairement pendant x
233 En fonction d'évènements externes au processus:
234 <ul><li>un fichier devient disponible</li>
235 <li>un <i>timer</i> arrive à 0</li>
236 <li>le matériel déclenche une <em>interruption</em></li>
241 <div class="sws-slide">
242 <h1>États d'un processus</h1>
244 xmlns:svg="http://www.w3.org/2000/svg"
245 xmlns="http://www.w3.org/2000/svg"
249 viewBox="0 0 350 208"
259 style="overflow:visible">
261 d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
262 transform="scale(-0.6,-0.6)"
264 style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" />
268 transform="translate(-43.8,-16.162183)"
271 transform="translate(2.8953552e-6,-2.2416992e-6)"
278 style="font-size:12.5px;font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DIN;-inkscape-font-specification:DIN Semi-Bold"><tspan
281 id="tspan2987">Nouveau</tspan></text>
287 style="font-size:12.5px;font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DIN;-inkscape-font-specification:DIN Semi-Bold"><tspan
290 id="tspan2991">Prêt</tspan></text>
296 style="font-size:12.5px;font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DIN;-inkscape-font-specification:DIN Semi-Bold"><tspan
299 id="tspan2995">En exécution</tspan></text>
305 style="font-size:12.5px;font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DIN;-inkscape-font-specification:DIN Semi-Bold"><tspan
308 id="tspan2999">En attente</tspan></text>
317 style="fill:none;stroke:#ffff05;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
326 style="fill:none;stroke:#009eff;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
335 style="fill:none;stroke:#5aff0b;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
344 style="fill:none;stroke:#ff7b00;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
346 d="m 70,42.362183 c 0,35 20,55 55,55"
348 style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)" />
350 d="m 150,82.362183 c 30,-30 120,-30 145,0"
352 style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)" />
354 d="m 295,112.36218 c -30,30 -121.15954,29.51126 -146.15954,-0.48874"
356 style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)" />
358 d="m 305,112.36218 c 0,35 -10,70 -45,70"
360 style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)" />
362 d="m 185,182.36218 c -35.00001,0 -45,-35 -45,-70"
364 style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)" />
370 style="font-size:12.5px;font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DIN;-inkscape-font-specification:DIN Semi-Bold"><tspan
373 id="tspan2999-3">Terminé</tspan></text>
382 style="fill:none;stroke:#ff0000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
384 d="m 315,112.36218 c 13.42024,11.32439 24.04764,43.74151 35,85"
386 style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)" />
388 d="m 225,197.36218 c 15,15 60,15 95,15"
390 style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:2, 1;stroke-dashoffset:0;marker-end:url(#Arrow2Mend)" />
392 d="m 135,112.36218 c 5,85 20,100 185,105"
394 style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:2, 1;stroke-dashoffset:0;marker-end:url(#Arrow2Mend)" />
400 style="font-size:9px;font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:DIN;-inkscape-font-specification:DIN Semi-Bold"><tspan
403 id="tspan4823">mise en route</tspan><tspan
406 id="tspan4825">par l'ordonnanceur</tspan></text>
412 style="font-size:9px;font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:DIN;-inkscape-font-specification:DIN Semi-Bold"><tspan
415 id="tspan4823-1">interruption</tspan><tspan
418 id="tspan4825-7">par l'ordonnanceur</tspan></text>
424 style="font-size:9px;font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:DIN;-inkscape-font-specification:DIN Semi-Bold"><tspan
427 id="tspan4825-74">attente E/S</tspan><tspan
430 id="tspan4864">interruption</tspan></text>
436 style="font-size:9px;font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:DIN;-inkscape-font-specification:DIN Semi-Bold"><tspan
439 id="tspan4864-7">fin E/S</tspan><tspan
442 id="tspan4892">int. traitée</tspan><tspan
445 id="tspan4894">…</tspan></text>
451 style="font-size:9px;font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:DIN;-inkscape-font-specification:DIN Semi-Bold"><tspan
454 id="tspan4864-1">terminaison</tspan><tspan
457 id="tspan4909">normale</tspan></text>
463 style="font-size:9px;font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:DIN;-inkscape-font-specification:DIN Semi-Bold"><tspan
466 id="tspan4864-75">terminaison</tspan><tspan
469 id="tspan4935">anormale</tspan></text>
474 <div class="sws-slide">
475 <h1>La commande <code><em>ps</em></code></h1>
476 <p>Permet d'avoir des informations sur les processus en cours
477 d'exécution (voir « <tt>man ps</tt> » pour les
479 <code>$ ps -o user,pid,state,cmd x
482 kim 27030 Z [chrome] <defunct>
483 kim 27072 S /opt/google/chrome/chrome --type=renderer
486 kim 29858 S emacs cours.xhtml
487 kim 29869 R ps -o user,pid,state,cmd x
492 <div class="sws-slide">
493 <h1>États des processus (sous Linux)</h1>
495 <tr> <td>R</td> <td> <i>Running</i> (en cours d'exécution)</td> </tr>
496 <tr> <td>S</td> <td> <i>Interruptible sleep</i> (en attente,
497 interruptible) </td> </tr>
498 <tr> <td>D</td> <td> <i>Uninterruptible sleep</i> (en attente,
499 non-interruptible) </td> </tr>
500 <tr> <td>T</td> <td> <i>Stopped</i> (interrompu)</td></tr>
501 <tr> <td>Z</td> <td> <i>Zombie</i> (terminé mais toujours
502 listé par le système)</td> </tr>
506 <div class="sws-slide">
508 <p>L'OS peut envoyer des <em>signaux</em> à un processus. Sur réception
509 d'un signal, un processus peut interrompre son comportement normal
510 et exécuter son <em>gestionnaire de signal</em>. Quelques signaux:
512 <table class="simple">
513 <tr><th>Nom</th> <th>Code</th> <th>Description</th> </tr>
514 <tr><td>HUP</td> <td>1</td> <td>demande au processus de
515 s'interrompre</td></tr>
516 <tr><td>INT</td> <td>2</td> <td>demande au processus de se
518 <tr><td>ABRT</td> <td>2</td> <td>interrompt le processus et produit
519 un <i>dump</i></td></tr>
520 <tr><td>KILL</td> <td>9</td> <td>interrompt le processus immédiatement
522 <tr><td>SEGV</td> <td>11</td> <td>signale au processus une erreur mémoire
524 <tr><td>STOP</td> <td>24</td> <td>suspend l'exécution du processus
526 <tr><td>CONT</td> <td>28</td> <td>reprend l'exécution d'un processus suspendu
530 <div class="sws-slide">
531 <h1>Processus et terminal</h1>
532 <p >Un processus est lié au <em>terminal</em> dans lequel il est
533 lancé. Si on exécute un programme dans un terminal et que le
534 processus ne rend pas la main, le terminal est bloqué
540 On peut envoyer au processus le signal <em>STOP</em> en
541 tapant <code>ctrl-Z</code> dans le terminal:
549 Le processus est suspendu, la fenêtre est gelée (ne répond plus).
552 <div class="sws-slide">
553 <h1>Processus et terminal</h1>
554 <p> <span>On peut reprendre l'exécution du programme de deux
556 <code> $ fg </code><br/>
557 Reprend l'exécution du processus et le remet en avant plan (terminal
559 <span class="sws-pause"><code> $ bg </code><br/>
560 Reprend l'exécution du processus et le remet en arrière plan (terminal
562 <span class="sws-pause">On peut lancer un programme
563 directement en arrière plan en faisant:<br/>
564 <code> $ gedit & </code><br/></span>
565 <span class="sws-pause">On peut envoyer un signal à un
566 processus avec la commande « <tt>kill [-signal] pid</tt> »<br/>
567 <code> $ kill -9 2345 </code></span>
570 <div class="sws-slide">
571 <h1>Processus et entrées/sorties</h1>
572 <p>Le terminal et le processus sont liés par trois fichiers
575 <li> L'entrée standard (<tt><em>stdin</em></tt>), reliée
577 <li> La sortie standard (<tt><em>stdout</em></tt>), reliée
579 <li> La sortie d'erreur (<tt><em>stderr</em></tt>), reliée
582 <p>Dans le <i>shell</i>, on peut utiliser les
583 opérateurs <tt><em><</em></tt>, <tt><em>></em></tt>
584 et <tt><em>2></em></tt> pour récupérer le contenu
585 de <tt><em>stdin</em></tt>, <tt><em>stdout</em></tt>
586 et <tt><em>stderr</em></tt>:<br/>
589 $ ls -l > liste_fichiers.txt
590 $ ls -l * 2> erreurs.txt
594 <div class="sws-slide">
595 <h1>Processus et entrées/sorties</h1>
596 <p>Dans le <i>shell</i>, l'opérateur <em>|</em> permet
597 d'enchaîner la sortie d'un programme avec l'entrée d'un
599 <code> $ <span style="color:green;">ls -l *.txt</span> | <span style="color:blue">sort -n -r -k 5</span> | <span style="color:orange">head -n 1</span></code>
602 <li style="color:green;">affiche la liste détaillée des
604 <li style="color:blue;">trie (et affiche) l'entrée standard par ordre
605 numérique décroissant selon le 5ème champ</li>
606 <li style="color:orange;">affiche la première ligne de
607 l'entrée standard</li>
609 <div style="height:5em;position:relative;margin:0 0;padding:0 0;">
610 <code class="sws-onframe-1" style="position:absolute;color:green;"> -rw-rw-r 1 kim kim 471 Sep 14 16:25 bd.txt
611 -rw-rw-r 1 kim kim 234 Sep 15 17:46 foo.txt
612 -rw-rw-r 1 kim kim 1048576 Sep 24 09:20 large.txt</code>
613 <code class="sws-onframe-2" style="position:absolute;color:blue;"> -rw-rw-r 1 kim kim 1048576 Sep 24 09:20 large.txt
614 -rw-rw-r 1 kim kim 471 Sep 14 16:25 bd.txt
615 -rw-rw-r 1 kim kim 234 Sep 15 17:46 foo.txt
617 <code class="sws-onframe-3" style="position:absolute;color:orange;"> -rw-rw-r 1 kim kim 1048576 Sep 24 09:20 large.txt
623 <h1>Écriture de script <i>shell</i></h1>
624 <div class="sws-slide">
625 <h1>Script shell</h1>
626 <p><a>Mentalité Unix</a> beaucoup de petits programmes spécifiques,
627 que l'on combine au moyen de scripts pour réaliser des actions
628 complexes. Exemple de fichier script:
630 <code style="background:white;">
633 <s>for</s> i <s>in</s> img_*.jpg
635 base=$(echo "$i" | cut -f 2- -d '_')
636 nouveau=photo_"$base"
637 <s>if</s> test -f "$nouveau"
639 echo "Attention, le fichier $nouveau existe déjà"
642 echo "Renommage de $i en $nouveau"
648 <div class="sws-slide">
649 <h1>Rendre un script exécutable</h1>
650 <p>Si un fichier <a>texte</a> (quel que soit son extension), commence
651 par les caractères <tt>#!/chemin/vers/un/programme</tt>, on peut
652 rendre ce fichier exécutable (<tt>chmod +x</tt>). Si on l'exécute,
653 le contenu du fichier est passé comme argument à <tt>programme</tt>
654 (qui est généralement un interpréteur)
656 <p><tt>#!/bin/bash</tt> signifie que le corps du fichier est passé au
657 programme <tt>bash</tt> qui est l'interprète de commande
661 <div class="sws-slide">
662 <h1>Que mettre dans un script</h1>
664 <li> des commandes (comme si on les entrait dans le terminal)</li>
665 <li> des structures de contrôle (boucles <tt>for</tt>, <tt>if then
667 <li> des définitions de variables </li>
670 <div class="sws-slide">
671 <h1>Définitions de variables</h1>
672 <p>On peut définir des variables au moyen de la notation
673 <code>VARIABLE=<i>contenu</i></code> et on peut utiliser la variable
674 avec la notation <tt>$VARIABLE</tt> </p>
676 <li>Attention, pas d'espace autour du <tt>=</tt></li>
677 <li>nom de variable en majuscule ou minuscule</li>
678 <li>contenu est une chaine de caractères. Si elle contient des
679 espaces, utiliser <tt>" ... "</tt></li>
681 <p>exemple de définition :</p>
687 <p> exemple d'utilisation: <tt> echo $j $i $TOTO </tt><br/>
688 affiche « <tt> Ma super chaine 123 titi</tt></p>
690 <div class="sws-slide">
691 <h1>Boucles <tt>for</tt></h1>
692 <p>Les boucles <tt> for </tt> ont la syntaxe:
694 for VARIABLE in elem<sub>1</sub> ... elem<sub>n</sub>
699 chaque <tt>elem<sub>i</sub></tt> est expansé (comme une ligne de
700 commande) avant l'évaluation de la boucle:
704 echo $i est un fichier texte
707 On peut quitter une boucle prématurément en utilisant <tt>break</tt>
708 et passer directement au tour suivant avec <tt>continue</tt>
711 <div class="sws-slide">
712 <h1>Conditionnelle</h1>
714 <code> if <i>commande</i>
721 <tt><i>commande</i></tt> est évaluée. Si elle se termine avec succès,
722 la branche <tt>then</tt> est prise. Si elle se termine avec un code
723 d'erreur, la branche <tt>else</tt> est prise. On peut utiliser la
724 commande <tt>test</tt> qui permet de tester plusieurs conditions
725 (existance d'un fichier, égalités de deux nombres, ...) et se termine
726 par un succès si le teste est vrai et par un code d'erreur dans le
729 <div class="sws-slide">
730 <h1>Conditionnelle (exemple)</h1>
731 <p>On regarde tour à tour si fichier1.txt, fichier2.txt, ... existent :
735 if test -f "fichier$i".txt
737 echo le fichier "fichier$i".txt existe
743 <div class="sws-slide">
744 <h1>Sous-commandes et chaines</h1>
745 <p>Il est pratique de pouvoir mettre <a>l'affichage d'une commande</a>
746 dans une variable. On utilise <tt>$( commande ... )</tt>:
748 MESFICHIER=$(ls *.txt)
754 Attention à la présence de guillemets autour des variables. S'il y a
755 f1.txt et f2.txt dans le répertoire courant:<br/>
756 <code style="left:10%;position:relative;width:40%;float:left;">
757 MESFICHIER=$(ls *.txt)
766 <code style="width:40%;float:left;left:10%;position:relative">
767 MESFICHIER=$(ls *.txt)
768 for i in "$MESFICHIER"
773 Fichier: f1.txt f2.txt
777 <div class="sws-slide">
778 <h1>Commandes utiles</h1>
780 <li><tt>seq <i>m</i> <i>n</i> </tt> : affiche la liste de tous les
781 nombres entre <i>m</i> <i>n</i> </li>
782 <li><tt>echo ... </tt> affiche ses arguments sur la sortie
784 <li><tt>printf "chaine" ... </tt> affiche ses arguments au moyen d'une
785 chaine de format (comme le printf de C)</li>
786 <li><tt>date</tt> : affiche la date courante </li>
787 <li><tt>cut</tt> : découpe une chaine selon des caractères de
788 séparations ou des positions</li>
791 <h1>Programmes non interactifs</h1>
792 <div class="sws-slide">
793 <h1>Processus de type <i>daemon</i></h1>
795 Un <i>daemon</i> (prononcé démon) est un processus
796 qui <em>non-interactif</em> qui tourne en tâche de fond (pas
797 d'entrée/sortie sur le terminal, pas d'interface graphique, …). On
798 communique avec ce processus via des <em>signaux</em> ou en lisant
799 ou écrivant dans des fichiers ou connexions réseau. Le plus souvent,
800 leur but est de fournir un <em>service</em>
802 <p>Exemple de scénario: « <i> Les utilisateurs doivent interagir avec
803 le matériel. L'accès au matériel demande des droits
804 administrateur.</i> »
807 <li>Solution 1 : tout le monde est administrateur (DOS, Win XP,
809 <li>Solution 2 : on crée un programme particulier qui a les
810 privilèges suffisants pour la tâche en question. Les utilisateurs
811 communiquent avec ce programme</li>
814 <div class="sws-slide">
815 <h1>Quelques <i>daemons</i> sous Linux</h1>
816 <table class="simple">
817 <tr><th>Nom</th> <th>Description</th> </tr>
818 <tr><td>sshd</td> <td><i>shell</i> distant sécurisé</td> </tr>
819 <tr><td>crond</td> <td>exécution périodique de programmes</td> </tr>
820 <tr><td>cupsd</td> <td>serveur d'impressions</td> </tr>
821 <tr><td>pulseaudio</td> <td>serveur de son (mixe les sons des
822 différentes applications)</td> </tr>
823 <tr><td>udevd</td> <td>détection de matériel <i>hotplug</i></td></tr>
824 <tr><td>nfsd</td> <td>serveur de fichier réseau</td></tr>
825 <tr><td>smtpd</td> <td>livraison des e-mail</td></tr>
826 <tr class="sws-pause"><td><em>httpd</em></td> <td>serveur de pages Web</td></tr>
829 <div class="sws-slide">
830 <h1>Architecture client-serveur</h1>
832 xmlns:svg="http://www.w3.org/2000/svg"
833 xmlns="http://www.w3.org/2000/svg"
845 style="overflow:visible">
847 d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
848 transform="scale(-0.6,-0.6)"
850 style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" />
857 style="overflow:visible">
859 d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
860 transform="scale(-0.6,-0.6)"
862 style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" />
869 style="overflow:visible">
871 d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
872 transform="scale(-0.6,-0.6)"
874 style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" />
881 style="overflow:visible">
883 d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
884 transform="scale(-0.6,-0.6)"
886 style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" />
893 style="overflow:visible">
895 d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
896 transform="scale(-0.6,-0.6)"
898 style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" />
905 style="overflow:visible">
907 d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
908 transform="scale(-0.6,-0.6)"
910 style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" />
917 style="overflow:visible">
919 d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
920 transform="scale(-0.6,-0.6)"
922 style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" />
929 style="overflow:visible">
931 d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
932 transform="scale(-0.6,-0.6)"
934 style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" />
941 style="overflow:visible">
943 d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
944 transform="scale(-0.6,-0.6)"
946 style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" />
953 style="overflow:visible">
955 d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
956 transform="scale(-0.6,-0.6)"
958 style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" />
965 style="overflow:visible">
967 d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
968 transform="scale(-0.6,-0.6)"
970 style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" />
977 style="overflow:visible">
979 d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
980 transform="scale(-0.6,-0.6)"
982 style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" />
989 style="overflow:visible">
991 d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
992 transform="scale(-0.6,-0.6)"
994 style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" />
998 transform="translate(-158.9,-91.262203)"
1003 transform="translate(-1.1999969,-3.4960022)"
1009 xml:space="preserve"
1010 style="font-size:12.5px;font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DIN;-inkscape-font-specification:DIN Semi-Bold"><tspan
1013 id="tspan2987">Client</tspan></text>
1022 style="fill:none;stroke:#ff8305;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
1026 transform="translate(-1.2000122,1.5039978)"
1032 xml:space="preserve"
1033 style="font-size:12.5px;font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DIN;-inkscape-font-specification:DIN Semi-Bold"><tspan
1036 id="tspan3164">Serveur</tspan></text>
1045 style="fill:none;stroke:#0000ff;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
1050 d="m 210,177.36218 c 15,10 30,10 45,0"
1052 style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)" />
1054 d="m 255.84443,171.31278 c -15,-10 -30,-10 -45,0"
1056 style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)" />
1059 transform="translate(210,0)"
1062 transform="translate(-1.1999969,-3.4960022)"
1068 xml:space="preserve"
1069 style="font-size:12.5px;font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DIN;-inkscape-font-specification:DIN Semi-Bold"><tspan
1072 id="tspan2987-3">Client</tspan></text>
1081 style="fill:none;stroke:#ff8305;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
1085 transform="translate(109.96827,1.0864348)"
1088 d="m 210,177.36218 c 15,10 30,10 45,0"
1090 style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)" />
1092 d="m 255.84443,171.31278 c -15,-10 -30,-10 -45,0"
1094 style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)" />
1097 transform="matrix(0.56532555,0.82486788,-0.82486788,0.56532555,266.51188,-153.17986)"
1100 d="m 210,177.36218 c 15,10 30,10 45,0"
1102 style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)" />
1104 d="m 255.84443,171.31278 c -15,-10 -30,-10 -45,0"
1106 style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)" />
1109 transform="translate(40,-70)"
1112 transform="translate(-1.1999969,-3.4960022)"
1118 xml:space="preserve"
1119 style="font-size:12.5px;font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DIN;-inkscape-font-specification:DIN Semi-Bold"><tspan
1122 id="tspan2987-4">Client</tspan></text>
1131 style="fill:none;stroke:#ff8305;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
1135 transform="translate(165,-70)"
1138 transform="translate(-1.1999969,-3.4960022)"
1144 xml:space="preserve"
1145 style="font-size:12.5px;font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DIN;-inkscape-font-specification:DIN Semi-Bold"><tspan
1148 id="tspan2987-6">Client</tspan></text>
1157 style="fill:none;stroke:#ff8305;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
1161 transform="matrix(-0.56532555,0.82486788,0.82486788,0.56532555,302.25486,-153.17986)"
1164 d="m 210,177.36218 c 15,10 30,10 45,0"
1166 style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)" />
1168 d="m 255.84443,171.31278 c -15,-10 -30,-10 -45,0"
1170 style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)" />
1173 transform="translate(40,70)"
1176 transform="translate(-1.1999969,-3.4960022)"
1182 xml:space="preserve"
1183 style="font-size:12.5px;font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DIN;-inkscape-font-specification:DIN Semi-Bold"><tspan
1186 id="tspan2987-4-1">Client</tspan></text>
1195 style="fill:none;stroke:#ff8305;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
1199 transform="translate(160,70)"
1202 transform="translate(-1.1999969,-3.4960022)"
1208 xml:space="preserve"
1209 style="font-size:12.5px;font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DIN;-inkscape-font-specification:DIN Semi-Bold"><tspan
1212 id="tspan2987-6-0">Client</tspan></text>
1221 style="fill:none;stroke:#ff8305;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
1225 transform="matrix(0.56532555,0.82486788,-0.82486788,0.56532555,327.54691,-80.416181)"
1228 d="m 210,177.36218 c 15,10 30,10 45,0"
1230 style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)" />
1232 d="m 255.84443,171.31278 c -15,-10 -30,-10 -45,0"
1234 style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)" />
1237 transform="matrix(-0.56532555,0.82486788,0.82486788,0.56532555,242.10224,-81.191343)"
1240 d="m 210,177.36218 c 15,10 30,10 45,0"
1242 style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)" />
1244 d="m 255.84443,171.31278 c -15,-10 -30,-10 -45,0"
1246 style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)" />
1252 Des processus <span style="color:blue;">clients</span> communiquent
1253 avec le <span style="color:orange;">serveur</span> à travers le
1254 réseau. Les clients sont indépendant et ne communiquent pas entre
1255 eux. <em>Attention</em> plusieurs clients peuvent se trouver su la
1256 même machine physique!
1259 <div class="sws-slide">
1260 <h1>Architecture client-serveur</h1>
1262 <li>Le serveur attend des connexions entrantes</li>
1263 <li>Les clients peuvent se connecter à tout moment</li>
1264 <li>L'application client est généralement légère, envoie une
1265 requête au serveur et attend un résultat</li>
1266 <li>Le serveur est une application plus lourde qui:
1267 <ul><li>effectue des calculs trop coûteux pour le client</li>
1268 <li>gère l'accès à une ressource distante partagée<br/>…</li>
1272 <p>Exemples: serveur de bases de données, serveur mail, serveur Web,
1273 terminal de carte bancaire, …</p>