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{GNU/Linux} |
---|
146 | \begin{block}{Contenu du système} |
---|
147 | \begin{itemize} |
---|
148 | \item Linux: le noyau lui même |
---|
149 | \item des applis eparpillées sur internet |
---|
150 | \end{itemize} |
---|
151 | \end{block} |
---|
152 | |
---|
153 | \begin{block}{Les distributions} |
---|
154 | Ensemble cohérent noyau/applications |
---|
155 | |
---|
156 | \begin{itemize} |
---|
157 | \item Redhat: Mandriva Suse Centos \ldots |
---|
158 | \item Debian: ubuntu |
---|
159 | \item gentoo |
---|
160 | \item slackware |
---|
161 | \item \ldots |
---|
162 | \end{itemize} |
---|
163 | \end{block} |
---|
164 | \end{frame} |
---|
165 | |
---|
166 | \begin{frame} |
---|
167 | \frametitle{De l'ordinateur à l'utilisateur} |
---|
168 | \begin{columns}[c] |
---|
169 | \column{2in} |
---|
170 | \centering |
---|
171 | \includegraphics[height=40mm]{process} |
---|
172 | \column{2.5in} |
---|
173 | \begin{block}{Role du kernel} |
---|
174 | \begin{itemize} |
---|
175 | \item gérer le matériel |
---|
176 | \item donner le temps CPU aux applications |
---|
177 | \item vérifier les droits d'accès |
---|
178 | \item assurer l'intégrité du système |
---|
179 | \end{itemize} |
---|
180 | \end{block} |
---|
181 | \end{columns} |
---|
182 | \end{frame} |
---|
183 | |
---|
184 | \section{Les fichiers} |
---|
185 | |
---|
186 | \subsection{Les fichiers} |
---|
187 | |
---|
188 | \begin{frame}[fragile] |
---|
189 | \frametitle{Nom de fichiers} |
---|
190 | |
---|
191 | \begin{block}{Accès aux fichiers} |
---|
192 | \begin{itemize} |
---|
193 | \item le séparateur est \verb+/+ |
---|
194 | \item plusieurs \verb+/+ ne font qu'un |
---|
195 | \item la longueur maximal d'un chemin est de 1024 (POSIX) |
---|
196 | \item tout les caractère sont permis sauf \verb+/+ et \emph{NULL} |
---|
197 | \end{itemize} |
---|
198 | \end{block} |
---|
199 | |
---|
200 | \begin{alertblock}{On évitera} |
---|
201 | \begin{itemize} |
---|
202 | \item l'espace |
---|
203 | \item \verb+-+ (surtout en premier, option en ligne de commande) |
---|
204 | \item ce qui ne se tape au clavier |
---|
205 | \item les accents |
---|
206 | \end{itemize} |
---|
207 | \end{alertblock} |
---|
208 | |
---|
209 | \end{frame} |
---|
210 | |
---|
211 | \begin{frame}[fragile] |
---|
212 | \frametitle{L'inode} |
---|
213 | |
---|
214 | Le fichier est matérialisé par une inode: |
---|
215 | |
---|
216 | {\small\begin{verbatim} |
---|
217 | [olivier@andromede unix]$ ls -li unix.tex |
---|
218 | 6160386 -rw-r--r-- 1 olivier olivier 3049 17:30 unix.tex |
---|
219 | \end{verbatim} |
---|
220 | } |
---|
221 | |
---|
222 | \begin{itemize} |
---|
223 | \item un numéro (6160386) |
---|
224 | \item un type |
---|
225 | \item des métadata |
---|
226 | \begin{itemize} |
---|
227 | \item taille (3049) |
---|
228 | \item propriétaires / droits d'accès |
---|
229 | \item date d'accès (access time) |
---|
230 | \item date de création \textbf{de l'inode} (creation time) |
---|
231 | \item date de dernière modification (modification time) |
---|
232 | \item \ldots |
---|
233 | \end{itemize} |
---|
234 | \item éventuellement un contenu |
---|
235 | \end{itemize} |
---|
236 | \end{frame} |
---|
237 | |
---|
238 | \begin{frame}[fragile] |
---|
239 | \begin{alertblock}{quand ctime dépasse mtime} |
---|
240 | Copie en préservant les métadata: |
---|
241 | {\small\begin{verbatim} |
---|
242 | [olivier@andromede unix]$ cp -a unix.tex unix2.tex |
---|
243 | \end{verbatim} |
---|
244 | } |
---|
245 | Le fichier vient d'être créé: |
---|
246 | {\small\begin{verbatim} |
---|
247 | [olivier@andromede unix]$ ls -l --time=c unix2.tex |
---|
248 | -rw-r--r-- 1 olivier olivier 3049 18:47 unix2.tex |
---|
249 | \end{verbatim} |
---|
250 | } |
---|
251 | Pourtant la date de modification est antérieur: |
---|
252 | {\small\begin{verbatim} |
---|
253 | [olivier@andromede unix]$ ls -l unix2.tex |
---|
254 | -rw-r--r-- 1 olivier olivier 3049 17:30 unix2.tex |
---|
255 | \end{verbatim} |
---|
256 | } |
---|
257 | \end{alertblock} |
---|
258 | \end{frame} |
---|
259 | |
---|
260 | \begin{frame}[fragile] |
---|
261 | \frametitle{les types de fichiers} |
---|
262 | |
---|
263 | - \emph{rw-r--r-- 1 olivier olivier 3049 17:30 unix2.tex} |
---|
264 | |
---|
265 | \begin{itemize} |
---|
266 | \item les simples fichiers (-) |
---|
267 | \item les répertoires (d) |
---|
268 | \item les liens symboliques (l) |
---|
269 | \item les fichiers de périphérique (c ou b) |
---|
270 | \item les fifo (tubes nommés, p) |
---|
271 | \item les sockets (=) |
---|
272 | \end{itemize} |
---|
273 | \end{frame} |
---|
274 | |
---|
275 | \begin{frame}[fragile] |
---|
276 | \frametitle{existance d'un fichier} |
---|
277 | \begin{block}{un fichier existe tant que} |
---|
278 | \begin{itemize} |
---|
279 | \item l'inode est référencée par un nom (lien hard) |
---|
280 | \item l'inode est ouverte |
---|
281 | \end{itemize} |
---|
282 | \end{block} |
---|
283 | |
---|
284 | \begin{exampleblock}{liens hard} |
---|
285 | {\small\begin{verbatim} |
---|
286 | [olivier@andromede unix]$ ln fichier1 fichier2 |
---|
287 | [olivier@andromede unix]$ ls -li fichier* |
---|
288 | 6160393 -rw-r--r-- 2 olivier olivier 1101 19:54 fichier1 |
---|
289 | 6160393 -rw-r--r-- 2 olivier olivier 1101 19:54 fichier2 |
---|
290 | [olivier@andromede unix]$ rm -f fichier1 |
---|
291 | [olivier@andromede unix]$ ls -li fichier* |
---|
292 | 6160393 -rw-r--r-- 1 olivier olivier 1101 19:54 fichier2 |
---|
293 | \end{verbatim} |
---|
294 | } |
---|
295 | \end{exampleblock} |
---|
296 | \end{frame} |
---|
297 | |
---|
298 | \begin{frame}[fragile] |
---|
299 | \begin{exampleblock}{deleteopen.pl} |
---|
300 | \frametitle{existance d'un fichier} |
---|
301 | \listinginput[2]{1}{deleteopen.pl} |
---|
302 | \end{exampleblock} |
---|
303 | |
---|
304 | \begin{block}{} |
---|
305 | \begin{itemize} |
---|
306 | \item le fichier n'est accessible que par l'application |
---|
307 | \item si l'application quitte: l'espace disque est récupéré |
---|
308 | \item la fermeture du descripteur entraine la fin du fichier |
---|
309 | \end{itemize} |
---|
310 | {\small\begin{verbatim} |
---|
311 | perl 23536 ol 3w REG 8,7 0 49065 /tmp/opened (deleted) |
---|
312 | \end{verbatim} |
---|
313 | } |
---|
314 | Utile pour les fichiers temporaires. |
---|
315 | \end{block} |
---|
316 | \end{frame} |
---|
317 | |
---|
318 | \begin{frame}[fragile] |
---|
319 | \frametitle{les fichiers à trous (sparse files)} |
---|
320 | \begin{block}{théorie} |
---|
321 | \begin{itemize} |
---|
322 | \item certaines données n'existent pas |
---|
323 | \item les trous ne prennent pas de place |
---|
324 | \item le système renvoient des 0 en cas de lecture |
---|
325 | \item le fichier peut être plus gros que le système de fichier |
---|
326 | \end{itemize} |
---|
327 | \end{block} |
---|
328 | \begin{block}{utilisation ?} |
---|
329 | Chaque fois que des données seront allouées à emplacement dans le fichier: |
---|
330 | \begin{itemize} |
---|
331 | \item disque virtuel |
---|
332 | \item base de données |
---|
333 | \end{itemize} |
---|
334 | \end{block} |
---|
335 | \end{frame} |
---|
336 | |
---|
337 | \begin{frame}[fragile] |
---|
338 | \frametitle{fichiers à trous: exemple} |
---|
339 | \begin{exampleblock}{sparce.c} |
---|
340 | \begin{small} |
---|
341 | \listinginput{1}{sparse.c} |
---|
342 | |
---|
343 | \begin{verbatim} |
---|
344 | [olivier@andromede unix]$ ls -ls sparsed |
---|
345 | 8 -rw-rw-r-- 1 olivier olivier 1048582 02:57 sparsed |
---|
346 | \end{verbatim} |
---|
347 | \end{small} |
---|
348 | \end{exampleblock} |
---|
349 | \end{frame} |
---|
350 | |
---|
351 | \begin{frame}[fragile] |
---|
352 | \frametitle{Fichier de périphérique} |
---|
353 | \begin{block}{2 types} |
---|
354 | \begin{itemize} |
---|
355 | \item block (b) |
---|
356 | \item caractères (c) |
---|
357 | \end{itemize} |
---|
358 | \end{block} |
---|
359 | |
---|
360 | \begin{exampleblock}{Tout est fichier} |
---|
361 | \begin{verbatim} |
---|
362 | brw-rw---- 1 nanardon cdwriter 11, 0 12:26 /dev/sr0 |
---|
363 | \end{verbatim} |
---|
364 | |
---|
365 | C'est le premier lecteur CDROM SCSI (SATA en réalité) |
---|
366 | |
---|
367 | Je peux le lire comme un fichier: |
---|
368 | \begin{verbatim} |
---|
369 | [nanardon@virgo ~]$ dd if=/dev/sr0 bs=1024 count=20 | wc |
---|
370 | 20+0 enregistrements lus |
---|
371 | 20+0 enregistrements écrits |
---|
372 | 20480 octets (20 kB) copiés, 0,803619 s, 25,5 kB/s |
---|
373 | 0 0 20480 |
---|
374 | \end{verbatim} |
---|
375 | \end{exampleblock} |
---|
376 | \end{frame} |
---|
377 | |
---|
378 | \begin{frame}[fragile] |
---|
379 | \frametitle{les fifos} |
---|
380 | \begin{exampleblock}{Première console:} |
---|
381 | \begin{verbatim} |
---|
382 | [olivier@andromede unix]$ mkfifo /tmp/fifo |
---|
383 | [olivier@andromede unix]$ cat /etc/passwd > /tmp/fifo |
---|
384 | \end{verbatim} |
---|
385 | \end{exampleblock} |
---|
386 | |
---|
387 | \begin{exampleblock}{Deuxième console:} |
---|
388 | \begin{verbatim} |
---|
389 | [olivier@andromede ~]$ grep root < /tmp/fifo |
---|
390 | root:x:0:0:root:/root:/bin/bash |
---|
391 | \end{verbatim} |
---|
392 | \end{exampleblock} |
---|
393 | |
---|
394 | \begin{block}{Cet exemple simple revient à} |
---|
395 | \begin{verbatim} |
---|
396 | cat /etc/passwd | grep root |
---|
397 | \end{verbatim} |
---|
398 | \end{block} |
---|
399 | \end{frame} |
---|
400 | |
---|
401 | \subsection{Systèmes de fichiers} |
---|
402 | |
---|
403 | \begin{frame}[fragile] |
---|
404 | \frametitle{principe} |
---|
405 | \begin{block}{le montage} |
---|
406 | \begin{itemize} |
---|
407 | \item une méthode d'accès |
---|
408 | \item une structure arborescente |
---|
409 | \item on le fait apparaitre dans un répertoire existant |
---|
410 | \end{itemize} |
---|
411 | \end{block} |
---|
412 | |
---|
413 | \begin{exampleblock}{la commande mount} |
---|
414 | \begin{verbatim} |
---|
415 | [olivier@andromede unix]$ mount |
---|
416 | /dev/sda3 on / type ext3 (rw,noatime) |
---|
417 | /dev/sda8 on /home type ext3 (rw,noatime) |
---|
418 | [...] |
---|
419 | virgo:/home/data on /mnt/disk type nfs (ro,addr=192.168.76.1) |
---|
420 | \end{verbatim} |
---|
421 | \end{exampleblock} |
---|
422 | \end{frame} |
---|
423 | |
---|
424 | \begin{frame}[fragile] |
---|
425 | \frametitle{Organisation globale} |
---|
426 | \begin{block}{} |
---|
427 | \begin{tabular}{ll} |
---|
428 | \verb+/etc+&fichiers de configuration\\ |
---|
429 | \verb+/bin+, \verb+/usr/bin+&les executables utilisateur\\ |
---|
430 | \verb+/sbin+, \verb+/usr/sbin+&idem, pour root\\ |
---|
431 | \verb+/lib+, \verb+/usr/lib+&les librairies\\ |
---|
432 | \verb+/usr/share+&les données statiques des programmes\\ |
---|
433 | \verb+/usr/include+&les fichiers .h (C)\\ |
---|
434 | \verb+/var+&les données variables (spool, etc...)\\ |
---|
435 | \verb+/tmp+, \verb+/var/tmp+&données temporaires\\ |
---|
436 | \verb+/opt+&espace pour les apps. propriétaires\\ |
---|
437 | \verb+/proc+, \verb+/sys+&représentation temp réelle du système\\ |
---|
438 | \end{tabular} |
---|
439 | \end{block} |
---|
440 | |
---|
441 | \begin{alertblock}{le FHS} |
---|
442 | Le Filesystem Hierarchy Standard normalise l'empacement des fichiers |
---|
443 | \end{alertblock} |
---|
444 | \end{frame} |
---|
445 | |
---|
446 | |
---|
447 | \section{les processus} |
---|
448 | |
---|
449 | \subsection{le temps CPU} |
---|
450 | |
---|
451 | \begin{frame} |
---|
452 | \frametitle{scheduler préemptif} |
---|
453 | \begin{alertblock}{préemptif ?} |
---|
454 | Seul le noyau décide du temps CPU alouer ! |
---|
455 | \end{alertblock} |
---|
456 | |
---|
457 | \begin{block}{Le scheduler} |
---|
458 | Le scheduler est appelé à interval régulier (plusieurs centaintes de fois par seconde) pour donner du temps |
---|
459 | CPU à l'application sauf si: |
---|
460 | \begin{itemize} |
---|
461 | \item l'application ne demande pas de temps CPU (sleep) |
---|
462 | \item est en attente d'une réponse matériel (IO wait) |
---|
463 | \end{itemize} |
---|
464 | Le temps CPU est donné en fonction de la priorité |
---|
465 | \end{block} |
---|
466 | \end{frame} |
---|
467 | |
---|
468 | \subsection{la ram} |
---|
469 | |
---|
470 | \begin{frame} |
---|
471 | \frametitle{La RAM} |
---|
472 | \begin{block}{le contenu} |
---|
473 | \begin{itemize} |
---|
474 | \item Mémoire vérouillée: |
---|
475 | \begin{itemize} |
---|
476 | \item le BIOS (programme interne du PC) |
---|
477 | \item mémoire du matériel |
---|
478 | \item le code et données du noyau |
---|
479 | \end{itemize} |
---|
480 | \item Mémoire haute (swappable): |
---|
481 | \begin{itemize} |
---|
482 | \item code des applications |
---|
483 | \item données des applications |
---|
484 | \end{itemize} |
---|
485 | \item Mémoire vive libre: |
---|
486 | \begin{itemize} |
---|
487 | \item buffers |
---|
488 | \item cache (disque) |
---|
489 | \end{itemize} |
---|
490 | \item swap (sur disque, très lente) |
---|
491 | \end{itemize} |
---|
492 | \end{block} |
---|
493 | |
---|
494 | \begin{alertblock}{} |
---|
495 | Un système qui swap un peu n'est pas surchargé ! |
---|
496 | \end{alertblock} |
---|
497 | \end{frame} |
---|
498 | |
---|
499 | \begin{frame}[fragile] |
---|
500 | \frametitle{Allocation par segment} |
---|
501 | \begin{exampleblock}{Un très mauvais code} |
---|
502 | \listinginput{1}{nosegfault.c} |
---|
503 | Et ça ne plante pas ! |
---|
504 | \end{exampleblock} |
---|
505 | |
---|
506 | \begin{alertblock}{Explication} |
---|
507 | Le système n'alloue pas des octets mais des segments |
---|
508 | |
---|
509 | Le système n'intervient que si l'application sort du segment ! |
---|
510 | \end{alertblock} |
---|
511 | \end{frame} |
---|
512 | |
---|
513 | \begin{frame}[fragile] |
---|
514 | \frametitle{Mémoire à crédit} |
---|
515 | \begin{block}{malloc est une promesse} |
---|
516 | \begin{itemize} |
---|
517 | \item malloc promet la ram |
---|
518 | \item la ram n'est allouée qu'à l'écriture |
---|
519 | \end{itemize} |
---|
520 | \end{block} |
---|
521 | \end{frame} |
---|
522 | |
---|
523 | \begin{frame} |
---|
524 | \frametitle{la crise des subprime} |
---|
525 | \begin{exampleblock}{malloc.c} |
---|
526 | \listinginput{1}{malloc.c} |
---|
527 | \end{exampleblock} |
---|
528 | |
---|
529 | \begin{block}{sortie formatée} |
---|
530 | \begin{tabular}{|c|c|c|} |
---|
531 | \hline |
---|
532 | Mem virtuel&Mem résidente\\ |
---|
533 | \hline |
---|
534 | 978116&332\\ |
---|
535 | \hline |
---|
536 | \hline |
---|
537 | 978116&976888\\ |
---|
538 | \hline |
---|
539 | \end{tabular} |
---|
540 | \end{block} |
---|
541 | \end{frame} |
---|
542 | |
---|
543 | \subsection{plusieurs processus: sur 1 ordinateur} |
---|
544 | |
---|
545 | \begin{frame} |
---|
546 | \frametitle{fork()} |
---|
547 | \begin{block}{la fourchette} |
---|
548 | Permet à un processus de se dupliquer, et de donner naissance à un processus "fils" \textbf{indépendant}\\ |
---|
549 | |
---|
550 | \centering |
---|
551 | \includegraphics[height=15mm]{fork} |
---|
552 | \end{block} |
---|
553 | |
---|
554 | \begin{columns} |
---|
555 | \column{2in} |
---|
556 | \begin{block}{motivation} |
---|
557 | \begin{itemize} |
---|
558 | \item excution parallèle |
---|
559 | \item perte de privilège de fils |
---|
560 | \item préserver l'environnement du père |
---|
561 | \item serveur: remettre le père en attente |
---|
562 | \end{itemize} |
---|
563 | \end{block} |
---|
564 | \column{2in} |
---|
565 | \begin{block}{pros \& cons} |
---|
566 | \begin{itemize} |
---|
567 | \item existe sur tout les UNIX (glibc) |
---|
568 | \item simple |
---|
569 | \item pas de communication |
---|
570 | \end{itemize} |
---|
571 | \end{block} |
---|
572 | \end{columns} |
---|
573 | \end{frame} |
---|
574 | |
---|
575 | \begin{frame}[fragile] |
---|
576 | \frametitle{fork et la RAM} |
---|
577 | \begin{columns} |
---|
578 | \column{2in} |
---|
579 | \tiny |
---|
580 | \begin{exampleblock}{fork.c} |
---|
581 | \listinginput[5]{1}{fork.c} |
---|
582 | \end{exampleblock} |
---|
583 | \column{2.5in} |
---|
584 | \begin{tabular}{|l|c|} |
---|
585 | \hline |
---|
586 | &mem utilisée\\ |
---|
587 | \hline |
---|
588 | \hline |
---|
589 | Avant allocation&1687848\\ |
---|
590 | \hline |
---|
591 | Après allocation&2664948\\ |
---|
592 | \hline |
---|
593 | Après fork()&2666332\\ |
---|
594 | \hline |
---|
595 | \end{tabular} |
---|
596 | \end{columns} |
---|
597 | \end{frame} |
---|
598 | |
---|
599 | \begin{frame}[fragile] |
---|
600 | \frametitle{les threads} |
---|
601 | \begin{block}{Sépare un processus en deux} |
---|
602 | |
---|
603 | \begin{itemize} |
---|
604 | \item partage de la mémoire |
---|
605 | \begin{itemize} |
---|
606 | \item tout n'est pas forcément partagé |
---|
607 | \item gestion de lock pour les écriture |
---|
608 | \end{itemize} |
---|
609 | \item le fonctionnement ressemble à fork mais |
---|
610 | \begin{itemize} |
---|
611 | \item programmation différente |
---|
612 | \item gestion par le système différente |
---|
613 | \item complexe mais éfficace |
---|
614 | \end{itemize} |
---|
615 | \end{itemize} |
---|
616 | \end{block} |
---|
617 | |
---|
618 | \begin{alertblock}{Linux: libpthread (glibc) POSIX} |
---|
619 | Je ne garantie pas que tout les UNIX fournissent le support des threads |
---|
620 | \end{alertblock} |
---|
621 | \begin{exampleblock}{} |
---|
622 | \small |
---|
623 | \begin{verbatim} |
---|
624 | [olivier@andromede unix]$ ps aux | grep transcode |
---|
625 | PID %CPU %MEM VSZ RSS TIME COMMAND |
---|
626 | 3477 124 1.3 119972 41344 36:32 transcode |
---|
627 | \end{verbatim} |
---|
628 | \end{exampleblock} |
---|
629 | \end{frame} |
---|
630 | |
---|
631 | \subsection{Communication inter-processus} |
---|
632 | |
---|
633 | \begin{frame}[fragile] |
---|
634 | \frametitle{Pipe} |
---|
635 | \begin{block}{points à retenir} |
---|
636 | \begin{itemize} |
---|
637 | \item flux de donnée continu |
---|
638 | \item sens unique |
---|
639 | \item bloquants |
---|
640 | \item flux unique |
---|
641 | \end{itemize} |
---|
642 | \end{block} |
---|
643 | |
---|
644 | \begin{block}{Utilisation} |
---|
645 | \begin{itemize} |
---|
646 | \item \verb+fork()+/\verb+pipe()+ (\verb+p1 | p2+) |
---|
647 | \item avec tube nommé (\verb+open++\verb+write+ / \verb+open++\verb+read+) |
---|
648 | \end{itemize} |
---|
649 | \end{block} |
---|
650 | \end{frame} |
---|
651 | |
---|
652 | \begin{frame} |
---|
653 | \frametitle{IPC, la boite aux lettres système} |
---|
654 | \begin{block}{fonctions} |
---|
655 | \begin{itemize} |
---|
656 | \item file d'attente de message |
---|
657 | \item zone de mémoire partagée |
---|
658 | \end{itemize} |
---|
659 | \end{block} |
---|
660 | |
---|
661 | \begin{block}{+ et -} |
---|
662 | \begin{itemize} |
---|
663 | \item relativement simple |
---|
664 | \item très performant |
---|
665 | \item taille allouable limitée (protection du kernel, configurable) |
---|
666 | \item protection des données par gestion de droit |
---|
667 | \end{itemize} |
---|
668 | \end{block} |
---|
669 | \end{frame} |
---|
670 | |
---|
671 | \begin{frame} |
---|
672 | \frametitle{Socket, Client/Serveur} |
---|
673 | |
---|
674 | \begin{block}{principe} |
---|
675 | \begin{itemize} |
---|
676 | \item un serveur attends une connection |
---|
677 | \item un client se connecte |
---|
678 | \item les deux échangent des données |
---|
679 | \end{itemize} |
---|
680 | \end{block} |
---|
681 | |
---|
682 | \begin{block}{modes} |
---|
683 | \begin{itemize} |
---|
684 | \item écoute sur le réseau |
---|
685 | \begin{itemize} |
---|
686 | \item definir un port d'écoute |
---|
687 | \item savoir quelle(s) machine(s) contacter |
---|
688 | \item communication inter-machines |
---|
689 | \item problème de latence |
---|
690 | \end{itemize} |
---|
691 | \item écoute sur un socket |
---|
692 | \begin{itemize} |
---|
693 | \item communication locale |
---|
694 | \item restriction d'accès par gestion de droit |
---|
695 | \end{itemize} |
---|
696 | \end{itemize} |
---|
697 | \end{block} |
---|
698 | \end{frame} |
---|
699 | |
---|
700 | \section{Executables: format} |
---|
701 | |
---|
702 | \subsection{Code exécutable} |
---|
703 | |
---|
704 | \begin{frame} |
---|
705 | \frametitle{la logique} |
---|
706 | \begin{columns} |
---|
707 | \column{2in} |
---|
708 | \includegraphics[height=40mm]{compil} |
---|
709 | \column{2.5in} |
---|
710 | \begin{block}{un quoi ?} |
---|
711 | \begin{itemize} |
---|
712 | \item données formatées (format ELF ces jours-ci) |
---|
713 | \item executable (ou presque) par le processeur |
---|
714 | \item contient des objets: |
---|
715 | \begin{itemize} |
---|
716 | \item des variables (globales) |
---|
717 | \item des fonctions |
---|
718 | \item d'autres objets à trouver |
---|
719 | \end{itemize} |
---|
720 | \end{itemize} |
---|
721 | \end{block} |
---|
722 | \end{columns} |
---|
723 | \end{frame} |
---|
724 | |
---|
725 | \subsection{Bibliothèques} |
---|
726 | |
---|
727 | \begin{frame} |
---|
728 | \frametitle{quand c'est propres} |
---|
729 | \begin{block}{Normallement un programme fournit} |
---|
730 | \begin{itemize} |
---|
731 | \item foo.h: l'entête pour la compilation |
---|
732 | \item libfoo.so.1: la librairie utilisée, versionnée |
---|
733 | \item libfoo.so: (lien) pour l'éditeur de lien |
---|
734 | \item libfoo.a: la version statique |
---|
735 | \end{itemize} |
---|
736 | \end{block} |
---|
737 | |
---|
738 | \begin{block}{le point sur les dynamiques} |
---|
739 | \begin{itemize} |
---|
740 | \item avantages: |
---|
741 | \begin{itemize} |
---|
742 | \item les maj sont répercutés sans recompilation des applis |
---|
743 | \item factorisation du code dans la RAM et sur le disque |
---|
744 | \end{itemize} |
---|
745 | \item inconvénients |
---|
746 | \begin{itemize} |
---|
747 | \item doit être disponible lors de l'éxecution |
---|
748 | \end{itemize} |
---|
749 | \end{itemize} |
---|
750 | \end{block} |
---|
751 | \end{frame} |
---|
752 | |
---|
753 | \begin{frame}[fragile] |
---|
754 | \frametitle{Trouver les dynamiques} |
---|
755 | \begin{block}{la recherche} |
---|
756 | \begin{itemize} |
---|
757 | \item codé dans l'executable (\emph{rpath}) |
---|
758 | \item codé en dur: \verb+/lib(64)+, \verb+/usr/lib(64)+ |
---|
759 | \item indiqués dans ld.so.conf |
---|
760 | \end{itemize} |
---|
761 | \end{block} |
---|
762 | |
---|
763 | \begin{exampleblock}{ldd} |
---|
764 | \begin{small} |
---|
765 | \begin{verbatim} |
---|
766 | [olivier@andromede unix]$ ldd /bin/rm |
---|
767 | linux-gate.so.1 => (0xffffe000) |
---|
768 | libc.so.6 => /lib/i686/libc.so.6 (0xb7ee3000) |
---|
769 | /lib/ld-linux.so.2 (0xb8064000) |
---|
770 | \end{verbatim} |
---|
771 | \end{small} |
---|
772 | \end{exampleblock} |
---|
773 | |
---|
774 | \begin{alertblock}{linux-gate.so.1} |
---|
775 | Code injecté directement par le kernel, ignorez le ! |
---|
776 | \end{alertblock} |
---|
777 | \end{frame} |
---|
778 | |
---|
779 | \begin{frame}[fragile] |
---|
780 | \frametitle{l'exemple: la librairie} |
---|
781 | \begin{exampleblock}{libsmall.h} |
---|
782 | \small |
---|
783 | \listinginput[1]{1}{libsmall.h} |
---|
784 | \end{exampleblock} |
---|
785 | \begin{exampleblock}{libsmall.c} |
---|
786 | \small |
---|
787 | \listinginput[1]{1}{libsmall.c} |
---|
788 | \end{exampleblock} |
---|
789 | \vfill |
---|
790 | \begin{block}{la version statique} |
---|
791 | \begin{verbatim} |
---|
792 | gcc -c libsmall.o libsmall.c |
---|
793 | ar rcs libsmall.a libsmall.o |
---|
794 | \end{verbatim} |
---|
795 | \end{block} |
---|
796 | \begin{block}{la version dynamique} |
---|
797 | \begin{verbatim} |
---|
798 | gcc -c libsmall.o libsmall.c |
---|
799 | gcc -shared -o libsmall.so libsmall.o |
---|
800 | \end{verbatim} |
---|
801 | \end{block} |
---|
802 | \end{frame} |
---|
803 | |
---|
804 | \begin{frame}[fragile] |
---|
805 | \frametitle{l'exemple: la librairie} |
---|
806 | \begin{exampleblock}{small.c} |
---|
807 | \small |
---|
808 | \listinginput[1]{1}{small.c} |
---|
809 | \end{exampleblock} |
---|
810 | \vfill |
---|
811 | \begin{block}{la version statique} |
---|
812 | \begin{verbatim} |
---|
813 | gcc -c -o small.o small.c |
---|
814 | gcc -o small.static libsmall.a small.o |
---|
815 | \end{verbatim} |
---|
816 | \end{block} |
---|
817 | \begin{block}{la version dynamique} |
---|
818 | \begin{verbatim} |
---|
819 | gcc -c -o small.o libsmall.c |
---|
820 | gcc -o small.dyn -L. -lsmall small.o |
---|
821 | -Wl,-rpath=$(pwd) # $(PWD) pour le chemin courant |
---|
822 | \end{verbatim} |
---|
823 | \end{block} |
---|
824 | \end{frame} |
---|
825 | |
---|
826 | \begin{frame} |
---|
827 | \frametitle{Et puis il y a \emph{dlopen()}} |
---|
828 | |
---|
829 | \begin{alertblock}{le mode standard dynamique} |
---|
830 | Un code lié à une bibliothèque ne fonctionnera jamais sans. |
---|
831 | \end{alertblock} |
---|
832 | |
---|
833 | \begin{block}{les deux clefs:} |
---|
834 | \begin{itemize} |
---|
835 | \item \emph{dlopen()} charge une bibliotèque |
---|
836 | \item \emph{dlsym()} va chercher les fonctions |
---|
837 | \end{itemize} |
---|
838 | \end{block} |
---|
839 | |
---|
840 | \begin{block}{exemple d'utilisation} |
---|
841 | \begin{itemize} |
---|
842 | \item pour étendre les fonctionnalités d'une appli (perl, python, apache) |
---|
843 | \item pour eviter de charger du code inutilement |
---|
844 | \end{itemize} |
---|
845 | \end{block} |
---|
846 | \end{frame} |
---|
847 | |
---|
848 | \section{X11} |
---|
849 | |
---|
850 | \begin{frame} |
---|
851 | \frametitle{Histoire} |
---|
852 | \begin{block}{} |
---|
853 | \begin{itemize} |
---|
854 | \item \textbf{1984 création par le MIT} |
---|
855 | \item X est le successeur de W (sur system V) |
---|
856 | \item 1985 ajout de la couleur (DEC VAXstation) |
---|
857 | \item 1986 X10R2, X10R3, X10R4 |
---|
858 | \item 1987 X11, 1988 X11R2, 1991 X11R5 |
---|
859 | \item \textbf{1992 création de XFree86 (utilisé par Linux)} |
---|
860 | \item 1999 X11R6.5 |
---|
861 | \item 2004 Xorg se sépare de XFree86 (pb de license) |
---|
862 | \item \textbf{depuis tout les UNIX libres utilisent Xorg} |
---|
863 | \end{itemize} |
---|
864 | \end{block} |
---|
865 | \begin{alertblock}{X ça pue !} |
---|
866 | Oui, c'est le prix de la compatibilité\ldots |
---|
867 | \end{alertblock} |
---|
868 | \end{frame} |
---|
869 | |
---|
870 | \begin{frame} |
---|
871 | \frametitle{X: serveur d'affichage} |
---|
872 | \begin{columns} |
---|
873 | \column{2in} |
---|
874 | \begin{block}{} |
---|
875 | \begin{itemize} |
---|
876 | \item gestionnaire de matériel |
---|
877 | \begin{itemize} |
---|
878 | \item carte graphique |
---|
879 | \item ecran |
---|
880 | \item clavier |
---|
881 | \item souris (et autres rongeurs) |
---|
882 | \end{itemize} |
---|
883 | \item protocol d'affichage (reseau) |
---|
884 | \item \textbf{serveur d'affichage} |
---|
885 | \end{itemize} |
---|
886 | \end{block} |
---|
887 | \column{2.5in} |
---|
888 | \begin{exampleblock}{le serveur X} |
---|
889 | \centering |
---|
890 | \includegraphics[height=40mm]{x} |
---|
891 | \end{exampleblock} |
---|
892 | \end{columns} |
---|
893 | \end{frame} |
---|
894 | |
---|
895 | \begin{frame} |
---|
896 | \frametitle{Applications X11} |
---|
897 | \begin{columns} |
---|
898 | \column{2.5in} |
---|
899 | \begin{block}{} |
---|
900 | Une application X11 se connecte au serveur X, |
---|
901 | et demande un affichage. |
---|
902 | \end{block} |
---|
903 | \column{2in} |
---|
904 | \begin{exampleblock}{} |
---|
905 | \centering |
---|
906 | \includegraphics[height=30mm]{x-mplayer-capcv} |
---|
907 | \end{exampleblock} |
---|
908 | \end{columns} |
---|
909 | \pause |
---|
910 | \vfill |
---|
911 | \begin{columns} |
---|
912 | \column{2.5in} |
---|
913 | \begin{block}{le Window Manager} |
---|
914 | \begin{itemize} |
---|
915 | \item application X11 |
---|
916 | \item il créer les fenetres |
---|
917 | \item fourni un menu |
---|
918 | \end{itemize} |
---|
919 | \end{block} |
---|
920 | \begin{alertblock}{} |
---|
921 | KDE, GNOME, XFCE: envirronements de bureau |
---|
922 | \end{alertblock} |
---|
923 | \column{2in} |
---|
924 | \begin{exampleblock}{} |
---|
925 | \centering |
---|
926 | \includegraphics[height=30mm]{x-mplayer-capcv-twm} |
---|
927 | \end{exampleblock} |
---|
928 | \end{columns} |
---|
929 | \end{frame} |
---|
930 | |
---|
931 | \begin{frame} |
---|
932 | \frametitle{X11: résumé} |
---|
933 | \begin{exampleblock}{} |
---|
934 | \centering |
---|
935 | \includegraphics[height=60mm]{x-resume} |
---|
936 | \end{exampleblock} |
---|
937 | \end{frame} |
---|
938 | |
---|
939 | \end{document} |
---|