1 | % $Id: perl.tex 183 2008-09-04 23:55:50Z nanardon $ |
---|
2 | \documentclass[notes]{beamer} |
---|
3 | \usepackage[frenchb]{babel} |
---|
4 | \usepackage[T1]{fontenc} |
---|
5 | \usepackage{moreverb} |
---|
6 | \usepackage{graphicx} |
---|
7 | \usepackage{listings} |
---|
8 | \usepackage{color} |
---|
9 | |
---|
10 | \mode<presentation> |
---|
11 | { |
---|
12 | \definecolor{beamerstructure}{RGB}{143,79,112} |
---|
13 | \definecolor{sidebackground}{RGB}{230,242,250} |
---|
14 | \color{beamerstructure} |
---|
15 | \usetheme[secheader]{Madrid} |
---|
16 | \usepackage{times} |
---|
17 | \userightsidebarcolortemplate{\color{sidebackground}} |
---|
18 | \beamertemplateballitem |
---|
19 | } |
---|
20 | |
---|
21 | \AtBeginSection[] |
---|
22 | { |
---|
23 | \begin{frame}<beamer> |
---|
24 | \frametitle{Plan} |
---|
25 | \tableofcontents[currentsection,hideothersubsections] |
---|
26 | \end{frame} |
---|
27 | } |
---|
28 | |
---|
29 | \AtBeginSubsection[] |
---|
30 | { |
---|
31 | \begin{frame}<beamer> |
---|
32 | \frametitle{} |
---|
33 | \tableofcontents[sectionstyle=show/hide,subsectionstyle=show/shaded/hide] |
---|
34 | \end{frame} |
---|
35 | } |
---|
36 | |
---|
37 | \title{UNIX/Linux} |
---|
38 | \subtitle{Jouer avec le système} |
---|
39 | \author{Olivier Thauvin} |
---|
40 | \date{\today} |
---|
41 | |
---|
42 | \begin{document} |
---|
43 | |
---|
44 | \frame{\titlepage} |
---|
45 | |
---|
46 | \begin{frame} |
---|
47 | \tableofcontents[hideallsubsections] |
---|
48 | \end{frame} |
---|
49 | |
---|
50 | \section{Préambule} |
---|
51 | |
---|
52 | \subsection{L'Ordinateur} |
---|
53 | |
---|
54 | \begin{frame} |
---|
55 | \frametitle{Principaux composants} |
---|
56 | \begin{columns}[c] |
---|
57 | \column{2.5in} |
---|
58 | \centering |
---|
59 | \includegraphics[height=40mm]{asus_mb} |
---|
60 | |
---|
61 | \column{2.5in} |
---|
62 | \begin{itemize} |
---|
63 | \item les éléments vitaux (PC) |
---|
64 | \begin{itemize} |
---|
65 | \item \textcolor{red}{CPU} |
---|
66 | \item \textcolor{green}{Mémoire} |
---|
67 | \item \textcolor{blue}{Bus} |
---|
68 | \item clavier |
---|
69 | \item carte graphique |
---|
70 | \end{itemize} |
---|
71 | \item le reste |
---|
72 | \begin{itemize} |
---|
73 | \item mulot et autres rongeurs |
---|
74 | \item disques durs |
---|
75 | \item carte son |
---|
76 | \item \ldots |
---|
77 | \end{itemize} |
---|
78 | \end{itemize} |
---|
79 | \end{columns} |
---|
80 | \end{frame} |
---|
81 | |
---|
82 | \begin{frame}[fragile] |
---|
83 | \frametitle{Fonctionnement général} |
---|
84 | \begin{itemize} |
---|
85 | \item \textcolor{red}{CPU} (Central processor unit) |
---|
86 | \begin{itemize} |
---|
87 | \item fait les calculs |
---|
88 | \item presque pas de mémoire (registres) |
---|
89 | \end{itemize} |
---|
90 | \item \textcolor{green}{Mémoire} |
---|
91 | \begin{itemize} |
---|
92 | \item sert à stocker les données |
---|
93 | \item est moins rapide que le CPU (rapport \verb+~+ 1/3) |
---|
94 | \end{itemize} |
---|
95 | \item \textcolor{blue}{Bus} |
---|
96 | \begin{itemize} |
---|
97 | \item sur la carte mère |
---|
98 | \item transporte les données entre les différents composants |
---|
99 | \end{itemize} |
---|
100 | \end{itemize} |
---|
101 | \end{frame} |
---|
102 | |
---|
103 | \subsection{LES UNIX} |
---|
104 | |
---|
105 | \begin{frame} |
---|
106 | \frametitle{la grande famille des UNIX} |
---|
107 | \emph{ |
---|
108 | UNIX est le nom d'un système d'exploitation multitâche et multi-utilisateur créé en 1969, |
---|
109 | conceptuellement ouvert et fondé sur une approche par laquelle il offre de nombreux petits |
---|
110 | outils chacun dotés d'une mission spécifique.} |
---|
111 | |
---|
112 | Définition \href{http://fr.wikipedia.org/wiki/UNIX}{Wikipédia} |
---|
113 | \vfill |
---|
114 | |
---|
115 | \textbf{Les grandes lignes:} |
---|
116 | |
---|
117 | \begin{itemize} |
---|
118 | \item mulitâche préemptif |
---|
119 | \item multiutilisateurs (donc gestion de droit) |
---|
120 | \item multisessions |
---|
121 | \item tout est fichier |
---|
122 | \end{itemize} |
---|
123 | \end{frame} |
---|
124 | |
---|
125 | \begin{frame} |
---|
126 | \frametitle{Vite une Norme !} |
---|
127 | \textbf{Exemples d'UNIX:} |
---|
128 | |
---|
129 | \begin{itemize} |
---|
130 | \item GNU/Linux |
---|
131 | \item *BSD (Net, Free, Open, \ldots) |
---|
132 | \item MacOS X (est un BSD, d'Apple) |
---|
133 | \item Digital UNIX (de Digital) |
---|
134 | \item Solaris (de Sun) |
---|
135 | \item AIX (de IBM) |
---|
136 | \item \ldots |
---|
137 | \end{itemize} |
---|
138 | \vfill |
---|
139 | |
---|
140 | \textbf{Norme POSIX:} |
---|
141 | standard de fonctionnement et commandes (IEEE). |
---|
142 | \end{frame} |
---|
143 | |
---|
144 | \begin{frame} |
---|
145 | \frametitle{De l'ordi à l'utilisateur} |
---|
146 | \begin{columns}[c] |
---|
147 | \column{2.5in} |
---|
148 | \centering |
---|
149 | \includegraphics[height=40mm]{process} |
---|
150 | \column{2.5in} |
---|
151 | \begin{block}{Role du kernel} |
---|
152 | \begin{itemize} |
---|
153 | \item gérer le matériel |
---|
154 | \item donner le temps CPU aux applications |
---|
155 | \item vérifier les droits d'accès |
---|
156 | \item assurer l'intégrité du système |
---|
157 | \end{itemize} |
---|
158 | \end{block} |
---|
159 | \end{columns} |
---|
160 | \end{frame} |
---|
161 | |
---|
162 | \section{Les fichiers} |
---|
163 | |
---|
164 | \subsection{Les fichiers} |
---|
165 | |
---|
166 | \begin{frame}[fragile] |
---|
167 | \frametitle{Nom de fichiers} |
---|
168 | |
---|
169 | \begin{block}{Accès aux fichiers} |
---|
170 | \begin{itemize} |
---|
171 | \item le séparateur est \verb+/+ |
---|
172 | \item plusieurs \verb+/+ ne font qu'un |
---|
173 | \item la longueur maximal d'un chemin est de 1024 (POSIX) |
---|
174 | \item tout les caractère sont permis sauf \verb+/+ et \emph{NULL} |
---|
175 | \end{itemize} |
---|
176 | \end{block} |
---|
177 | |
---|
178 | \begin{alertblock}{On évitera} |
---|
179 | \begin{itemize} |
---|
180 | \item l'espace |
---|
181 | \item \verb+-+ (surtout en premier, option en ligne de commande) |
---|
182 | \item ce qui ne se tape au clavier |
---|
183 | \item les accents |
---|
184 | \end{itemize} |
---|
185 | \end{alertblock} |
---|
186 | |
---|
187 | \end{frame} |
---|
188 | |
---|
189 | \begin{frame}[fragile] |
---|
190 | \frametitle{L'inode} |
---|
191 | |
---|
192 | Le fichier est matérialisé par une inode: |
---|
193 | |
---|
194 | {\small\begin{verbatim} |
---|
195 | [olivier@andromede unix]$ ls -li unix.tex |
---|
196 | 6160386 -rw-r--r-- 1 olivier olivier 3049 17:30 unix.tex |
---|
197 | \end{verbatim} |
---|
198 | } |
---|
199 | |
---|
200 | \begin{itemize} |
---|
201 | \item un numéro (6160386) |
---|
202 | \item un type |
---|
203 | \item des métadata |
---|
204 | \begin{itemize} |
---|
205 | \item taille (3049) |
---|
206 | \item propriétaires / droits d'accès |
---|
207 | \item date d'accès (access time) |
---|
208 | \item date de création \textbf{de l'inode} (creation time) |
---|
209 | \item date de dernière modification (modification time) |
---|
210 | \item \ldots |
---|
211 | \end{itemize} |
---|
212 | \item éventuellement un contenu |
---|
213 | \end{itemize} |
---|
214 | \end{frame} |
---|
215 | |
---|
216 | \begin{frame}[fragile] |
---|
217 | \begin{alertblock}{quand ctime dépasse mtime} |
---|
218 | Copie en préservant les métadata: |
---|
219 | {\small\begin{verbatim} |
---|
220 | [olivier@andromede unix]$ cp -a unix.tex unix2.tex |
---|
221 | \end{verbatim} |
---|
222 | } |
---|
223 | Le fichier vient d'être créé: |
---|
224 | {\small\begin{verbatim} |
---|
225 | [olivier@andromede unix]$ ls -l --time=c unix2.tex |
---|
226 | -rw-r--r-- 1 olivier olivier 3049 18:47 unix2.tex |
---|
227 | \end{verbatim} |
---|
228 | } |
---|
229 | Pourtant la date de modification est antérieur: |
---|
230 | {\small\begin{verbatim} |
---|
231 | [olivier@andromede unix]$ ls -l unix2.tex |
---|
232 | -rw-r--r-- 1 olivier olivier 3049 17:30 unix2.tex |
---|
233 | \end{verbatim} |
---|
234 | } |
---|
235 | \end{alertblock} |
---|
236 | \end{frame} |
---|
237 | |
---|
238 | \begin{frame}[fragile] |
---|
239 | \frametitle{les types de fichiers} |
---|
240 | |
---|
241 | - \emph{rw-r--r-- 1 olivier olivier 3049 17:30 unix2.tex} |
---|
242 | |
---|
243 | \begin{itemize} |
---|
244 | \item les simples fichiers (-) |
---|
245 | \item les répertoires (d) |
---|
246 | \item les liens symboliques (l) |
---|
247 | \item les fichiers de périphérique (c ou b) |
---|
248 | \item les fifo (tubes nommés, p) |
---|
249 | \item les sockets (=) |
---|
250 | \end{itemize} |
---|
251 | \end{frame} |
---|
252 | |
---|
253 | \begin{frame}[fragile] |
---|
254 | \frametitle{existance d'un fichier} |
---|
255 | \begin{block}{un fichier existe tant que} |
---|
256 | \begin{itemize} |
---|
257 | \item l'inode est référencée par un nom (lien hard) |
---|
258 | \item l'inode est ouverte |
---|
259 | \end{itemize} |
---|
260 | \end{block} |
---|
261 | |
---|
262 | \begin{exampleblock}{liens hard} |
---|
263 | {\small\begin{verbatim} |
---|
264 | [olivier@andromede unix]$ ln fichier1 fichier2 |
---|
265 | [olivier@andromede unix]$ ls -li fichier* |
---|
266 | 6160393 -rw-r--r-- 2 olivier olivier 1101 19:54 fichier1 |
---|
267 | 6160393 -rw-r--r-- 2 olivier olivier 1101 19:54 fichier2 |
---|
268 | [olivier@andromede unix]$ rm -f fichier1 |
---|
269 | [olivier@andromede unix]$ ls -li fichier* |
---|
270 | 6160393 -rw-r--r-- 1 olivier olivier 1101 19:54 fichier2 |
---|
271 | \end{verbatim} |
---|
272 | } |
---|
273 | \end{exampleblock} |
---|
274 | \end{frame} |
---|
275 | |
---|
276 | \begin{frame}[fragile] |
---|
277 | \begin{exampleblock}{deleteopen.pl} |
---|
278 | \frametitle{existance d'un fichier} |
---|
279 | \listinginput[2]{1}{deleteopen.pl} |
---|
280 | \end{exampleblock} |
---|
281 | |
---|
282 | \begin{block}{} |
---|
283 | \begin{itemize} |
---|
284 | \item le fichier n'est accessible que par l'application |
---|
285 | \item si l'application quitte: l'espace disque est récupéré |
---|
286 | \item la fermeture du descripteur entraine la fin du fichier |
---|
287 | \end{itemize} |
---|
288 | {\small\begin{verbatim} |
---|
289 | perl 23536 ol 3w REG 8,7 0 49065 /tmp/opened (deleted) |
---|
290 | \end{verbatim} |
---|
291 | } |
---|
292 | Utile pour les fichiers temporaires. |
---|
293 | \end{block} |
---|
294 | \end{frame} |
---|
295 | |
---|
296 | \begin{frame}[fragile] |
---|
297 | \frametitle{les fichiers à trous (sparse files)} |
---|
298 | \end{frame} |
---|
299 | |
---|
300 | \begin{frame}[fragile] |
---|
301 | \frametitle{Fichier de périphérique} |
---|
302 | \begin{block}{2 types} |
---|
303 | \begin{itemize} |
---|
304 | \item block (b) |
---|
305 | \item caractères (c) |
---|
306 | \end{itemize} |
---|
307 | \end{block} |
---|
308 | |
---|
309 | \begin{exampleblock}{Tout est fichier} |
---|
310 | \begin{verbatim} |
---|
311 | brw-rw---- 1 nanardon cdwriter 11, 0 12:26 /dev/sr0 |
---|
312 | \end{verbatim} |
---|
313 | |
---|
314 | C'est le premier lecteur CDROM SCSI (SATA en réalité) |
---|
315 | |
---|
316 | Je peux le lire comme un fichier: |
---|
317 | \begin{verbatim} |
---|
318 | [nanardon@virgo ~]$ dd if=/dev/sr0 bs=1024 count=20 | wc |
---|
319 | 20+0 enregistrements lus |
---|
320 | 20+0 enregistrements écrits |
---|
321 | 20480 octets (20 kB) copiés, 0,803619 s, 25,5 kB/s |
---|
322 | 0 0 20480 |
---|
323 | \end{verbatim} |
---|
324 | \end{exampleblock} |
---|
325 | \end{frame} |
---|
326 | |
---|
327 | \begin{frame}[fragile] |
---|
328 | \frametitle{les fifos} |
---|
329 | \begin{exampleblock}{Première console:} |
---|
330 | \begin{verbatim} |
---|
331 | [olivier@andromede unix]$ mkfifo /tmp/fifo |
---|
332 | [olivier@andromede unix]$ cat /etc/passwd > /tmp/fifo |
---|
333 | \end{verbatim} |
---|
334 | \end{exampleblock} |
---|
335 | |
---|
336 | \begin{exampleblock}{Deuxième console:} |
---|
337 | \begin{verbatim} |
---|
338 | [olivier@andromede ~]$ grep root < /tmp/fifo |
---|
339 | root:x:0:0:root:/root:/bin/bash |
---|
340 | \end{verbatim} |
---|
341 | \end{exampleblock} |
---|
342 | |
---|
343 | \begin{block}{Cet exemple simple revient à} |
---|
344 | \begin{verbatim} |
---|
345 | cat /etc/passwd | grep root |
---|
346 | \end{verbatim} |
---|
347 | \end{block} |
---|
348 | \end{frame} |
---|
349 | |
---|
350 | \subsection{Systèmes de fichiers} |
---|
351 | |
---|
352 | \begin{frame}[fragile] |
---|
353 | \frametitle{principe} |
---|
354 | \begin{block}{le montage} |
---|
355 | \begin{itemize} |
---|
356 | \item une méthode d'accès |
---|
357 | \item une structure arborescente |
---|
358 | \item on le fait apparaitre dans un répertoire existant |
---|
359 | \end{itemize} |
---|
360 | \end{block} |
---|
361 | |
---|
362 | \begin{exampleblock}{la commande mount} |
---|
363 | \begin{verbatim} |
---|
364 | [olivier@andromede unix]$ mount |
---|
365 | /dev/sda3 on / type ext3 (rw,noatime) |
---|
366 | /dev/sda8 on /home type ext3 (rw,noatime) |
---|
367 | [...] |
---|
368 | virgo:/home/data on /mnt/disk type nfs (ro,addr=192.168.76.1) |
---|
369 | \end{verbatim} |
---|
370 | \end{exampleblock} |
---|
371 | \end{frame} |
---|
372 | |
---|
373 | \begin{frame}[fragile] |
---|
374 | \frametitle{Organisation globale} |
---|
375 | \begin{block}{} |
---|
376 | \begin{tabular}{ll} |
---|
377 | \verb+/etc+&fichiers de configuration\\ |
---|
378 | \verb+/bin+, \verb+/usr/bin+&les executables utilisateur\\ |
---|
379 | \verb+/sbin+, \verb+/usr/sbin+&idem, pour root\\ |
---|
380 | \verb+/lib+, \verb+/usr/lib+&les librairies\\ |
---|
381 | \verb+/usr/share+&les données statiques des programmes\\ |
---|
382 | \verb+/usr/include+&les fichiers .h (C)\\ |
---|
383 | \verb+/var+&les données variables (spool, etc...)\\ |
---|
384 | \verb+/tmp+, \verb+/var/tmp+&données temporaires\\ |
---|
385 | \verb+/opt+&espace pour les apps. propriétaires\\ |
---|
386 | \verb+/proc+, \verb+/sys+&représentation temp réelle du système\\ |
---|
387 | \end{tabular} |
---|
388 | \end{block} |
---|
389 | |
---|
390 | \begin{alertblock}{le FHS} |
---|
391 | Le Filesystem Hierarchy Standard normalise l'empacement des fichiers |
---|
392 | \end{alertblock} |
---|
393 | \end{frame} |
---|
394 | |
---|
395 | |
---|
396 | \section{les processus} |
---|
397 | |
---|
398 | \subsection{le temps CPU} |
---|
399 | |
---|
400 | \begin{frame} |
---|
401 | \frametitle{scheduler préemptif} |
---|
402 | \begin{alertblock}{préemptif ?} |
---|
403 | Seul le noyau décide du temps CPU alouer ! |
---|
404 | \end{alertblock} |
---|
405 | |
---|
406 | \begin{block}{Le scheduler} |
---|
407 | Le scheduler est appelé à interval régulier (plusieurs centaintes de fois par seconde) pour donner du temps |
---|
408 | CPU à l'application sauf si: |
---|
409 | \begin{itemize} |
---|
410 | \item l'application ne demande pas de temps CPU (sleep) |
---|
411 | \item est en attente d'une réponse matériel (IO wait) |
---|
412 | \end{itemize} |
---|
413 | Le temps CPU est donné en fonction de la priorité |
---|
414 | \end{block} |
---|
415 | \end{frame} |
---|
416 | |
---|
417 | \subsection{la ram} |
---|
418 | |
---|
419 | \begin{frame} |
---|
420 | \frametitle{La RAM} |
---|
421 | \begin{block}{le contenu} |
---|
422 | \begin{itemize} |
---|
423 | \item Mémoire vérouillée: |
---|
424 | \begin{itemize} |
---|
425 | \item le BIOS (programme interne du PC) |
---|
426 | \item mémoire du matériel |
---|
427 | \item le code et données du noyau |
---|
428 | \end{itemize} |
---|
429 | \item Mémoire haute (swappable): |
---|
430 | \begin{itemize} |
---|
431 | \item code des applications |
---|
432 | \item données des applications |
---|
433 | \end{itemize} |
---|
434 | \item Mémoire vive libre: |
---|
435 | \begin{itemize} |
---|
436 | \item buffers |
---|
437 | \item cache (disque) |
---|
438 | \end{itemize} |
---|
439 | \item swap (sur disque, très lente) |
---|
440 | \end{itemize} |
---|
441 | \end{block} |
---|
442 | |
---|
443 | \begin{alertblock}{} |
---|
444 | Un système qui swap un peu n'est pas surchargé ! |
---|
445 | \end{alertblock} |
---|
446 | \end{frame} |
---|
447 | |
---|
448 | \begin{frame}[fragile] |
---|
449 | \frametitle{Allocation par segment} |
---|
450 | \begin{exampleblock}{Un très mauvais code} |
---|
451 | \listinginput{1}{nosegfault.c} |
---|
452 | Et ça ne plante pas ! |
---|
453 | \end{exampleblock} |
---|
454 | |
---|
455 | \begin{alertblock}{Explication} |
---|
456 | Le système n'alloue pas des octets mais des segments |
---|
457 | |
---|
458 | Le système n'intervient que si l'application sort du segment ! |
---|
459 | \end{alertblock} |
---|
460 | \end{frame} |
---|
461 | |
---|
462 | \begin{frame}[fragile] |
---|
463 | \frametitle{Mémoire à crédit} |
---|
464 | \begin{block}{malloc est une promesse} |
---|
465 | \begin{itemize} |
---|
466 | \item malloc promet la ram |
---|
467 | \item la ram n'est allouée qu'à l'écriture |
---|
468 | \end{itemize} |
---|
469 | \end{block} |
---|
470 | \end{frame} |
---|
471 | |
---|
472 | \begin{frame} |
---|
473 | \frametitle{la crise des subprime} |
---|
474 | \begin{exampleblock}{malloc.c} |
---|
475 | \listinginput{1}{malloc.c} |
---|
476 | \end{exampleblock} |
---|
477 | |
---|
478 | \begin{block}{sortie formatée} |
---|
479 | \begin{tabular}{|c|c|c|} |
---|
480 | \hline |
---|
481 | Mem virtuel&Mem résidente\\ |
---|
482 | \hline |
---|
483 | 978116&332\\ |
---|
484 | \hline |
---|
485 | \hline |
---|
486 | 978116&976888\\ |
---|
487 | \hline |
---|
488 | \end{tabular} |
---|
489 | \end{block} |
---|
490 | \end{frame} |
---|
491 | |
---|
492 | \subsection{plusieurs processus: sur 1 ordinateur} |
---|
493 | |
---|
494 | \begin{frame} |
---|
495 | \frametitle{fork()} |
---|
496 | \begin{block}{la fourchette} |
---|
497 | Permet à un processus de se dupliquer, et de donner naissance à un processus "fils" \textbf{indépendant}\\ |
---|
498 | |
---|
499 | \centering |
---|
500 | \includegraphics[height=15mm]{fork} |
---|
501 | \end{block} |
---|
502 | |
---|
503 | \begin{columns} |
---|
504 | \column{2in} |
---|
505 | \begin{block}{motivation} |
---|
506 | \begin{itemize} |
---|
507 | \item excution parallèle |
---|
508 | \item perte de privilège de fils |
---|
509 | \item préserver l'environnement du père |
---|
510 | \item serveur: remettre le père en attente |
---|
511 | \end{itemize} |
---|
512 | \end{block} |
---|
513 | \column{2in} |
---|
514 | \begin{block}{pros \& cons} |
---|
515 | \begin{itemize} |
---|
516 | \item existe sur tout les UNIX (glibc) |
---|
517 | \item simple |
---|
518 | \item pas de communication |
---|
519 | \end{itemize} |
---|
520 | \end{block} |
---|
521 | \end{columns} |
---|
522 | \end{frame} |
---|
523 | |
---|
524 | \begin{frame}[fragile] |
---|
525 | \frametitle{fork et la RAM} |
---|
526 | \begin{columns} |
---|
527 | \column{2in} |
---|
528 | \tiny |
---|
529 | \begin{exampleblock}{fork.c} |
---|
530 | \listinginput[5]{1}{fork.c} |
---|
531 | \end{exampleblock} |
---|
532 | \column{2.5in} |
---|
533 | \begin{tabular}{|l|c|} |
---|
534 | \hline |
---|
535 | &mem utilisée\\ |
---|
536 | \hline |
---|
537 | \hline |
---|
538 | Avant allocation&1687848\\ |
---|
539 | \hline |
---|
540 | Après allocation&2664948\\ |
---|
541 | \hline |
---|
542 | Après fork()&2666332\\ |
---|
543 | \hline |
---|
544 | \end{tabular} |
---|
545 | \end{columns} |
---|
546 | \end{frame} |
---|
547 | |
---|
548 | \begin{frame} |
---|
549 | \frametitle{les threads} |
---|
550 | \begin{block}{Sépare un processus en deux} |
---|
551 | |
---|
552 | \begin{itemize} |
---|
553 | \item partage de la mémoire |
---|
554 | \begin{itemize} |
---|
555 | \item tout n'est pas forcément partagé |
---|
556 | \item gestion de lock pour les écriture |
---|
557 | \end{itemize} |
---|
558 | \item le fonctionnement ressemble à fork mais |
---|
559 | \begin{itemize} |
---|
560 | \item programmation différente |
---|
561 | \item gestion par le système différente |
---|
562 | \item complexe mais éfficace |
---|
563 | \end{itemize} |
---|
564 | \end{itemize} |
---|
565 | \end{block} |
---|
566 | |
---|
567 | \begin{alertblock}{Linux: libpthread (glibc)} |
---|
568 | Les threads sont POSIX. |
---|
569 | |
---|
570 | Je ne garantie pas que tout les UNIX fournissent le support des threads |
---|
571 | \end{alertblock} |
---|
572 | \end{frame} |
---|
573 | |
---|
574 | \subsection{Communication inter-processus} |
---|
575 | |
---|
576 | \begin{frame}[fragile] |
---|
577 | \frametitle{Pipe} |
---|
578 | \begin{block}{points à retenir} |
---|
579 | \begin{itemize} |
---|
580 | \item flux de donnée continu |
---|
581 | \item sens unique |
---|
582 | \item bloquants |
---|
583 | \item flux unique |
---|
584 | \end{itemize} |
---|
585 | \end{block} |
---|
586 | |
---|
587 | \begin{block}{Utilisation} |
---|
588 | \begin{itemize} |
---|
589 | \item \verb+fork()+/\verb+pipe()+ (\verb+p1 | p2+) |
---|
590 | \item avec tube nommé (\verb+open++\verb+write+ / \verb+open++\verb+read+) |
---|
591 | \end{itemize} |
---|
592 | \end{block} |
---|
593 | \end{frame} |
---|
594 | |
---|
595 | \begin{frame} |
---|
596 | \frametitle{IPC, la boite aux lettres système} |
---|
597 | \begin{block}{fonctions} |
---|
598 | \begin{itemize} |
---|
599 | \item file d'attente de message |
---|
600 | \item zone de mémoire partagée |
---|
601 | \end{itemize} |
---|
602 | \end{block} |
---|
603 | |
---|
604 | \begin{block}{+ et -} |
---|
605 | \begin{itemize} |
---|
606 | \item relativement simple |
---|
607 | \item très performant |
---|
608 | \item taille allouable limitée (protection du kernel, configurable) |
---|
609 | \item protection des données par gestion de droit |
---|
610 | \end{itemize} |
---|
611 | \end{block} |
---|
612 | \end{frame} |
---|
613 | |
---|
614 | \begin{frame} |
---|
615 | \frametitle{Socket, Client/Serveur} |
---|
616 | |
---|
617 | \begin{block}{principe} |
---|
618 | \begin{itemize} |
---|
619 | \item un serveur attends une connection |
---|
620 | \item un client se connecte |
---|
621 | \item les deux échangent des données |
---|
622 | \end{itemize} |
---|
623 | \end{block} |
---|
624 | |
---|
625 | \begin{block}{modes} |
---|
626 | \begin{itemize} |
---|
627 | \item écoute sur le réseau |
---|
628 | \begin{itemize} |
---|
629 | \item definir un port d'écoute |
---|
630 | \item savoir quelle(s) machine(s) contacter |
---|
631 | \item communication inter-machines |
---|
632 | \item problème de latence |
---|
633 | \end{itemize} |
---|
634 | \item écoute sur un socket |
---|
635 | \begin{itemize} |
---|
636 | \item communication locale |
---|
637 | \item restriction d'accès par gestion de droit |
---|
638 | \end{itemize} |
---|
639 | \end{itemize} |
---|
640 | \end{block} |
---|
641 | \end{frame} |
---|
642 | |
---|
643 | \section{Executables: format} |
---|
644 | |
---|
645 | \subsection{Code exécutable} |
---|
646 | |
---|
647 | \begin{frame} |
---|
648 | \frametitle{la logique} |
---|
649 | \includegraphics[height=50mm]{compil} |
---|
650 | \end{frame} |
---|
651 | |
---|
652 | \begin{frame} |
---|
653 | \frametitle{le code executable} |
---|
654 | \begin{block}{un quoi ?} |
---|
655 | \begin{itemize} |
---|
656 | \item données formatées (format ELF ces jours-ci) |
---|
657 | \item executable (ou presque) par le processeur |
---|
658 | \item contient des objets: |
---|
659 | \begin{itemize} |
---|
660 | \item des variables (globales) |
---|
661 | \item des fonctions |
---|
662 | \item d'autres objets à trouver |
---|
663 | \end{itemize} |
---|
664 | \end{itemize} |
---|
665 | \end{block} |
---|
666 | \end{frame} |
---|
667 | |
---|
668 | \subsection{Programme} |
---|
669 | |
---|
670 | \begin{frame}[fragile] |
---|
671 | \frametitle{programme} |
---|
672 | \begin{exampleblock}{empty.c} |
---|
673 | \listinginput[1]{1}{empty.c} |
---|
674 | \begin{verbatim} |
---|
675 | gcc -o empty empty.c |
---|
676 | \end{verbatim} |
---|
677 | \end{exampleblock} |
---|
678 | \end{frame} |
---|
679 | |
---|
680 | \section{X11} |
---|
681 | |
---|
682 | \end{document} |
---|