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{2in} |
---|
58 | \begin{exampleblock}{ASUS AV7333} |
---|
59 | \centering |
---|
60 | \includegraphics[height=40mm]{asus_mb} |
---|
61 | \end{exampleblock} |
---|
62 | \column{2.5in} |
---|
63 | \begin{block}{} |
---|
64 | \begin{itemize} |
---|
65 | \item les éléments vitaux (PC) |
---|
66 | \begin{itemize} |
---|
67 | \item \textcolor{red}{CPU} |
---|
68 | \item \textcolor{green}{Mémoire} |
---|
69 | \item \textcolor{blue}{Bus} |
---|
70 | \item clavier |
---|
71 | \item carte graphique |
---|
72 | \end{itemize} |
---|
73 | \pause |
---|
74 | \item le reste |
---|
75 | \begin{itemize} |
---|
76 | \item mulot et autres rongeurs |
---|
77 | \item disques durs |
---|
78 | \item carte son |
---|
79 | \item \ldots |
---|
80 | \end{itemize} |
---|
81 | \end{itemize} |
---|
82 | \end{block} |
---|
83 | \end{columns} |
---|
84 | \end{frame} |
---|
85 | |
---|
86 | \begin{frame}[fragile] |
---|
87 | \frametitle{Fonctionnement général} |
---|
88 | \begin{block}{Roles de chacun} |
---|
89 | \begin{itemize} |
---|
90 | \item \textcolor{red}{CPU} (Central processor unit) |
---|
91 | \begin{itemize} |
---|
92 | \item fait les calculs |
---|
93 | \item presque pas de mémoire (registres) |
---|
94 | \end{itemize} |
---|
95 | \pause |
---|
96 | \item \textcolor{green}{Mémoire} |
---|
97 | \begin{itemize} |
---|
98 | \item sert à stocker les données |
---|
99 | \item est moins rapide que le CPU (rapport \verb+~+ 1/3) |
---|
100 | \end{itemize} |
---|
101 | \pause |
---|
102 | \item \textcolor{blue}{Bus} |
---|
103 | \begin{itemize} |
---|
104 | \item sur la carte mère |
---|
105 | \item transporte les données entre les différents composants |
---|
106 | \end{itemize} |
---|
107 | \end{itemize} |
---|
108 | \end{block} |
---|
109 | \end{frame} |
---|
110 | |
---|
111 | \subsection{LES UNIX} |
---|
112 | |
---|
113 | \begin{frame} |
---|
114 | \frametitle{la grande famille des UNIX} |
---|
115 | \begin{block}{Définition \href{http://fr.wikipedia.org/wiki/UNIX}{Wikipédia}} |
---|
116 | \emph{ |
---|
117 | UNIX est le nom d'un système d'exploitation multitâche et multi-utilisateur créé en 1969, |
---|
118 | conceptuellement ouvert et fondé sur une approche par laquelle il offre de nombreux petits |
---|
119 | outils chacun dotés d'une mission spécifique.} |
---|
120 | \end{block} |
---|
121 | \pause |
---|
122 | \vfill |
---|
123 | |
---|
124 | \begin{block}{Les grandes lignes:} |
---|
125 | |
---|
126 | \begin{itemize} |
---|
127 | \item mulitâche préemptif |
---|
128 | \item multiutilisateurs (donc gestion de droit) |
---|
129 | \item multisessions |
---|
130 | \item tout est fichier |
---|
131 | \end{itemize} |
---|
132 | \end{block} |
---|
133 | \end{frame} |
---|
134 | |
---|
135 | \begin{frame} |
---|
136 | \frametitle{Vite une Norme !} |
---|
137 | \begin{block}{Exemples d'UNIX:} |
---|
138 | |
---|
139 | \begin{itemize} |
---|
140 | \item GNU/Linux |
---|
141 | \item *BSD (Net, Free, Open, \ldots) |
---|
142 | \item MacOS X (est un BSD, d'Apple) |
---|
143 | \item Digital UNIX (de Digital) |
---|
144 | \item Solaris (de Sun) |
---|
145 | \item AIX (de IBM) |
---|
146 | \item \ldots |
---|
147 | \end{itemize} |
---|
148 | \end{block} |
---|
149 | \vfill |
---|
150 | \pause |
---|
151 | \begin{block}{Norme POSIX:} |
---|
152 | standard de fonctionnement et commandes (IEEE). |
---|
153 | \end{block} |
---|
154 | \end{frame} |
---|
155 | |
---|
156 | \subsection{GNU/Linux} |
---|
157 | |
---|
158 | \begin{frame} |
---|
159 | \frametitle{GNU/Linux} |
---|
160 | \begin{block}{Contenu du système} |
---|
161 | \begin{itemize} |
---|
162 | \item Linux: le noyau lui même (\href{http://www.kernel.org}{kernel.org}) |
---|
163 | \item des applis éparpillées sur internet |
---|
164 | \end{itemize} |
---|
165 | \end{block} |
---|
166 | \pause |
---|
167 | \begin{block}{Les distributions} |
---|
168 | \textbf{Ensemble cohérent noyau/applications} |
---|
169 | |
---|
170 | \begin{itemize} |
---|
171 | \item Redhat: Mandriva Suse Centos \ldots |
---|
172 | \item Debian: ubuntu |
---|
173 | \item gentoo |
---|
174 | \item slackware |
---|
175 | \item \ldots |
---|
176 | \end{itemize} |
---|
177 | \end{block} |
---|
178 | \end{frame} |
---|
179 | |
---|
180 | \begin{frame} |
---|
181 | \frametitle{De l'ordinateur à l'utilisateur} |
---|
182 | \begin{columns}[c] |
---|
183 | \column{2in} |
---|
184 | \centering |
---|
185 | \includegraphics[height=40mm]{process} |
---|
186 | \column{2.5in} |
---|
187 | \begin{block}{Rôle du kernel} |
---|
188 | \begin{itemize} |
---|
189 | \item gérer le matériel |
---|
190 | \item donner le temps CPU aux applications |
---|
191 | \item vérifier les droits d'accès |
---|
192 | \item assurer l'intégrité du système |
---|
193 | \end{itemize} |
---|
194 | \end{block} |
---|
195 | \end{columns} |
---|
196 | \end{frame} |
---|
197 | |
---|
198 | \section{Les fichiers} |
---|
199 | |
---|
200 | \subsection{Systèmes de fichiers} |
---|
201 | |
---|
202 | \begin{frame}[fragile] |
---|
203 | \frametitle{Vue globale} |
---|
204 | \begin{exampleblock}{tree / -L 2 -d} |
---|
205 | \tiny |
---|
206 | \listinginput[5]{1}{tree.txt} |
---|
207 | \end{exampleblock} |
---|
208 | \end{frame} |
---|
209 | |
---|
210 | \begin{frame}[fragile] |
---|
211 | \frametitle{Organisation globale} |
---|
212 | \begin{block}{L'emplacement des fichiers} |
---|
213 | \begin{tabular}{ll} |
---|
214 | \verb+/home+&les données utilisateurs\\ |
---|
215 | \verb+/etc+&fichiers de configuration\\ |
---|
216 | \verb+/bin+, \verb+/usr/bin+&les executables\\ |
---|
217 | \verb+/sbin+, \verb+/usr/sbin+&idem, réservés à root\\ |
---|
218 | \verb+/lib+, \verb+/usr/lib+&les librairies\\ |
---|
219 | \verb+/usr/share+&les données statiques des programmes\\ |
---|
220 | \verb+/usr/include+&les fichiers .h (C)\\ |
---|
221 | \verb+/var+&les données variables (spool, etc...)\\ |
---|
222 | \verb+/tmp+, \verb+/var/tmp+&données temporaires\\ |
---|
223 | \verb+/opt+&espace pour les apps. propriétaires\\ |
---|
224 | \end{tabular} |
---|
225 | \end{block} |
---|
226 | \end{frame} |
---|
227 | |
---|
228 | \begin{frame}[fragile] |
---|
229 | \frametitle{Organisation globale (2)} |
---|
230 | \begin{block}{Système de fichiers spéciaux} |
---|
231 | \begin{tabular}{ll} |
---|
232 | \verb+/dev+&les fichiers de périphériques\\ |
---|
233 | \verb+/proc+&représentation temp réelle du système\\ |
---|
234 | \verb+/sys+&configuration du noyau, informations sur le matériel\\ |
---|
235 | \end{tabular} |
---|
236 | \end{block} |
---|
237 | \pause |
---|
238 | \vfill |
---|
239 | \begin{alertblock}{le FHS} |
---|
240 | Le Filesystem Hierarchy Standard normalise l'empacement des fichiers |
---|
241 | \end{alertblock} |
---|
242 | \end{frame} |
---|
243 | |
---|
244 | \begin{frame}[fragile] |
---|
245 | \frametitle{principe} |
---|
246 | \begin{block}{le montage} |
---|
247 | Le système de fichiers est stocké sur un support (disque, fichier, cdrom, \ldots) |
---|
248 | |
---|
249 | Le noyau le fait apparaitre dans un répertoire. |
---|
250 | \end{block} |
---|
251 | \vfill |
---|
252 | \begin{exampleblock}{la commande mount} |
---|
253 | \begin{verbatim} |
---|
254 | [olivier@andromede unix]$ mount |
---|
255 | /dev/sda3 on / type ext3 (rw,noatime) |
---|
256 | /dev/sda8 on /home type ext3 (rw,noatime) |
---|
257 | [...] |
---|
258 | virgo:/home/data on /mnt/disk type nfs |
---|
259 | (ro,addr=192.168.76.1) |
---|
260 | \end{verbatim} |
---|
261 | \end{exampleblock} |
---|
262 | \end{frame} |
---|
263 | |
---|
264 | \subsection{Les fichiers} |
---|
265 | |
---|
266 | \begin{frame}[fragile] |
---|
267 | \frametitle{Nom de fichiers} |
---|
268 | |
---|
269 | \begin{block}{Accès aux fichiers} |
---|
270 | \begin{itemize} |
---|
271 | \item le séparateur est \verb+/+ |
---|
272 | \item plusieurs \verb+/+ n'en font qu'un |
---|
273 | \item la longueur maximale d'un chemin est de 1024 octets (POSIX) |
---|
274 | \item tous les caractères sont permis sauf \verb+/+ et \emph{NULL} |
---|
275 | \end{itemize} |
---|
276 | \end{block} |
---|
277 | \vfill |
---|
278 | \begin{alertblock}{On évitera cependant} |
---|
279 | \begin{itemize} |
---|
280 | \item l'espace (qu'il faut échaper sur la ligne de commande) |
---|
281 | \item \verb+-+ (surtout en premier, option en ligne de commande) |
---|
282 | \item ce qui ne se tape pas au clavier |
---|
283 | \item les accents (problème d'encodage) |
---|
284 | \end{itemize} |
---|
285 | \end{alertblock} |
---|
286 | \end{frame} |
---|
287 | |
---|
288 | \begin{frame}[fragile] |
---|
289 | \frametitle{les types de fichiers} |
---|
290 | \begin{exampleblock}{ls -l} |
---|
291 | - \emph{rw-r--r-- 1 olivier olivier 3049 17:30 unix2.tex} |
---|
292 | \end{exampleblock} |
---|
293 | |
---|
294 | \begin{block}{les différents types} |
---|
295 | \begin{itemize} |
---|
296 | \item les simples fichiers (-) |
---|
297 | \item les répertoires (d) |
---|
298 | \pause |
---|
299 | \item les liens symboliques (l) |
---|
300 | \pause |
---|
301 | \item les fichiers de périphérique (c ou b) |
---|
302 | \pause |
---|
303 | \item les fifo (tubes nommés, p) |
---|
304 | \pause |
---|
305 | \item les sockets (=) |
---|
306 | \end{itemize} |
---|
307 | \end{block} |
---|
308 | \end{frame} |
---|
309 | |
---|
310 | \begin{frame}[fragile] |
---|
311 | \frametitle{. et ..} |
---|
312 | \begin{block}{chaque répertoire contient:} |
---|
313 | \begin{itemize} |
---|
314 | \item \verb+.+ le répertoire lui même |
---|
315 | \item \verb+..+ son répertoire parent |
---|
316 | \end{itemize} |
---|
317 | \end{block} |
---|
318 | \vfill |
---|
319 | \pause |
---|
320 | \begin{alertblock}{trop de ..} |
---|
321 | \verb+/..+ pointe sur \verb+/+ |
---|
322 | |
---|
323 | \begin{verbatim} |
---|
324 | $ ls ../../../../../../etc/passwd |
---|
325 | ../../../../../../etc/passwd |
---|
326 | \end{verbatim} |
---|
327 | |
---|
328 | On rebondit sur \verb+/+ et on redescend dans \verb+/etc/passwd+. |
---|
329 | \end{alertblock} |
---|
330 | \end{frame} |
---|
331 | |
---|
332 | \begin{frame}[fragile] |
---|
333 | \frametitle{L'inode} |
---|
334 | |
---|
335 | \begin{exampleblock}{Le fichier est matérialisé par une inode} |
---|
336 | {\small\begin{verbatim} |
---|
337 | [olivier@andromede unix]$ ls -li unix.tex |
---|
338 | 6160386 -rw-r--r-- 1 olivier olivier 3049 17:30 unix.tex |
---|
339 | \end{verbatim} |
---|
340 | } |
---|
341 | \end{exampleblock} |
---|
342 | |
---|
343 | \begin{block}{L'inode contient} |
---|
344 | \begin{itemize} |
---|
345 | \item un numéro (6160386) |
---|
346 | \item des métadata |
---|
347 | \begin{itemize} |
---|
348 | \item taille (3049) |
---|
349 | \item propriétaires / droits d'accès |
---|
350 | \item dates: d'accès (atime), création (ctime), modification (mtime) |
---|
351 | \end{itemize} |
---|
352 | \item éventuellement un contenu |
---|
353 | \end{itemize} |
---|
354 | \end{block} |
---|
355 | \pause |
---|
356 | \begin{alertblock}{} |
---|
357 | Créer un fichier créer l'inode\\ |
---|
358 | Effacer un fichier efface l'inode (si plus référencée) |
---|
359 | \end{alertblock} |
---|
360 | \end{frame} |
---|
361 | |
---|
362 | \begin{frame}[fragile] |
---|
363 | \begin{alertblock}{quand ctime dépasse mtime} |
---|
364 | Copie en préservant les métadata: |
---|
365 | {\small\begin{verbatim} |
---|
366 | [olivier@andromede unix]$ cp -a unix.tex unix2.tex |
---|
367 | \end{verbatim} |
---|
368 | } |
---|
369 | \pause |
---|
370 | Le fichier vient d'être créé: |
---|
371 | {\small\begin{verbatim} |
---|
372 | [olivier@andromede unix]$ ls -l --time=c unix2.tex |
---|
373 | -rw-r--r-- 1 olivier olivier 3049 18:47 unix2.tex |
---|
374 | \end{verbatim} |
---|
375 | } |
---|
376 | \pause |
---|
377 | Pourtant la date de modification est antérieur: |
---|
378 | {\small\begin{verbatim} |
---|
379 | [olivier@andromede unix]$ ls -l unix2.tex |
---|
380 | -rw-r--r-- 1 olivier olivier 3049 17:30 unix2.tex |
---|
381 | \end{verbatim} |
---|
382 | } |
---|
383 | \end{alertblock} |
---|
384 | \end{frame} |
---|
385 | |
---|
386 | \begin{frame}[fragile] |
---|
387 | \frametitle{existence d'un fichier} |
---|
388 | \begin{block}{un fichier existe tant que} |
---|
389 | \begin{itemize} |
---|
390 | \item l'inode est référencée par un nom (lien hard) |
---|
391 | \item l'inode est ouverte |
---|
392 | \end{itemize} |
---|
393 | \end{block} |
---|
394 | \pause |
---|
395 | \vfill |
---|
396 | \begin{exampleblock}{liens hard} |
---|
397 | {\small\begin{verbatim} |
---|
398 | [olivier@andromede unix]$ ln fichier1 fichier2 |
---|
399 | [olivier@andromede unix]$ ls -li fichier* |
---|
400 | 6160393 -rw-r--r-- 2 olivier olivier 1101 19:54 fichier1 |
---|
401 | 6160393 -rw-r--r-- 2 olivier olivier 1101 19:54 fichier2 |
---|
402 | [olivier@andromede unix]$ rm -f fichier1 |
---|
403 | [olivier@andromede unix]$ ls -li fichier* |
---|
404 | 6160393 -rw-r--r-- 1 olivier olivier 1101 19:54 fichier2 |
---|
405 | \end{verbatim} |
---|
406 | } |
---|
407 | \end{exampleblock} |
---|
408 | \end{frame} |
---|
409 | |
---|
410 | \begin{frame}[fragile] |
---|
411 | \begin{exampleblock}{deleteopen.pl} |
---|
412 | \frametitle{existance d'un fichier} |
---|
413 | \listinginput[2]{1}{deleteopen.pl} |
---|
414 | \end{exampleblock} |
---|
415 | \pause |
---|
416 | \begin{block}{Conséquences:} |
---|
417 | \begin{itemize} |
---|
418 | \item le fichier n'est accessible que par l'application |
---|
419 | \item si l'application quitte: l'espace disque est récupéré |
---|
420 | \item la fermeture du descripteur entraine l'effacement du fichier |
---|
421 | \end{itemize} |
---|
422 | \pause |
---|
423 | {\small\begin{verbatim} |
---|
424 | perl 23536 ol 3w REG 8,7 0 49065 /tmp/opened (deleted) |
---|
425 | \end{verbatim} |
---|
426 | } |
---|
427 | Utile pour les fichiers temporaires. |
---|
428 | \end{block} |
---|
429 | \end{frame} |
---|
430 | |
---|
431 | \begin{frame}[fragile] |
---|
432 | \frametitle{Fichiers temporaires} |
---|
433 | \begin{block}{Un fichier qu'on ne va pas garder, mais:} |
---|
434 | \begin{itemize} |
---|
435 | \item il ne doit pas exister |
---|
436 | \pause |
---|
437 | \item nom aléatoire (écrasement basé sur un lien symbolique) |
---|
438 | \pause |
---|
439 | \item le placer au bon endroit |
---|
440 | \end{itemize} |
---|
441 | \pause |
---|
442 | \vfill |
---|
443 | \textbf{en pratique} |
---|
444 | \begin{itemize} |
---|
445 | \item shell: mktemp |
---|
446 | \item C: mkstemp |
---|
447 | \item Perl: module File::Temp |
---|
448 | \end{itemize} |
---|
449 | \end{block} |
---|
450 | \pause |
---|
451 | \vfill |
---|
452 | \begin{exampleblock}{} |
---|
453 | \small |
---|
454 | \listinginput[1]{1}{temp.sh} |
---|
455 | \end{exampleblock} |
---|
456 | \end{frame} |
---|
457 | |
---|
458 | \begin{frame}[fragile] |
---|
459 | \frametitle{les fichiers à trous (sparse files)} |
---|
460 | \begin{block}{théorie} |
---|
461 | \begin{itemize} |
---|
462 | \item certaines données n'existent pas |
---|
463 | \item les trous ne prennent pas de place |
---|
464 | \item le système renvoient des 0 en cas de lecture |
---|
465 | \item le fichier peut être plus gros que le système de fichiers |
---|
466 | \end{itemize} |
---|
467 | \end{block} |
---|
468 | \pause |
---|
469 | \vfill |
---|
470 | \begin{block}{utilisation ?} |
---|
471 | Chaque fois que des données seront allouées à des emplacements dans le fichier: |
---|
472 | \begin{itemize} |
---|
473 | \item disques virtuels |
---|
474 | \item bases de données |
---|
475 | \end{itemize} |
---|
476 | \end{block} |
---|
477 | \end{frame} |
---|
478 | |
---|
479 | \begin{frame}[fragile] |
---|
480 | \frametitle{fichiers à trous: exemple} |
---|
481 | \begin{exampleblock}{sparce.c} |
---|
482 | \begin{small} |
---|
483 | \listinginput{1}{sparse.c} |
---|
484 | |
---|
485 | \begin{verbatim} |
---|
486 | [olivier@andromede unix]$ ls -ls sparsed |
---|
487 | 8 -rw-rw-r-- 1 olivier olivier 1048582 02:57 sparsed |
---|
488 | \end{verbatim} |
---|
489 | \end{small} |
---|
490 | \end{exampleblock} |
---|
491 | \end{frame} |
---|
492 | |
---|
493 | \begin{frame}[fragile] |
---|
494 | \frametitle{Liens symboliques} |
---|
495 | \begin{block}{Fichier qui pointe sur un autre:} |
---|
496 | \begin{itemize} |
---|
497 | \item gérés le système |
---|
498 | \item il ne contient que le nom de l'élément pointé |
---|
499 | \begin{itemize} |
---|
500 | \pause |
---|
501 | \item l'élément pointer peut être n'importe quoi |
---|
502 | \item l'élément peut ne pas existé (lien cassé) |
---|
503 | \end{itemize} |
---|
504 | \pause |
---|
505 | \item les actions s'appliquent à l'élément pointé sauf: |
---|
506 | \begin{itemize} |
---|
507 | \item ls/rm |
---|
508 | \item les appels systèmes prévus |
---|
509 | \end{itemize} |
---|
510 | \end{itemize} |
---|
511 | \end{block} |
---|
512 | \pause |
---|
513 | \begin{exampleblock}{exemple} |
---|
514 | \tiny |
---|
515 | \begin{verbatim} |
---|
516 | $ ln -s fichier lien |
---|
517 | $ ls -l lien |
---|
518 | lrwxrwxrwx 1 olivier olivier 7 19:13 lien -> fichier |
---|
519 | $ ls -l lien fichier |
---|
520 | ls: ne peut accéder fichier: Aucun fichier ou dossier de ce type |
---|
521 | lrwxrwxrwx 1 olivier olivier 7 19:13 lien -> fichier |
---|
522 | $ echo 'coucou' > lien |
---|
523 | $ ls -l lien fichier |
---|
524 | -rw-rw-r-- 1 olivier olivier 7 19:14 fichier |
---|
525 | lrwxrwxrwx 1 olivier olivier 7 19:13 lien -> fichier |
---|
526 | \end{verbatim} |
---|
527 | \end{exampleblock} |
---|
528 | \end{frame} |
---|
529 | |
---|
530 | \begin{frame}[fragile] |
---|
531 | \frametitle{Fichier de périphérique} |
---|
532 | \begin{block}{2 types} |
---|
533 | \begin{itemize} |
---|
534 | \item block (b) |
---|
535 | \item caractères (c) |
---|
536 | \end{itemize} |
---|
537 | \end{block} |
---|
538 | \pause |
---|
539 | \begin{exampleblock}{Tout est fichier} |
---|
540 | \begin{verbatim} |
---|
541 | brw-rw---- 1 nanardon cdwriter 11, 0 12:26 /dev/sr0 |
---|
542 | \end{verbatim} |
---|
543 | |
---|
544 | C'est le premier lecteur CDROM SCSI (SATA en réalité) |
---|
545 | |
---|
546 | \pause |
---|
547 | Je peux le lire comme un fichier: |
---|
548 | \begin{verbatim} |
---|
549 | $ dd if=/dev/sr0 bs=1024 count=20 | wc |
---|
550 | 20+0 enregistrements lus |
---|
551 | 20+0 enregistrements écrits |
---|
552 | 20480 octets (20 kB) copiés, 0,803619 s, 25,5 kB/s |
---|
553 | 0 0 20480 |
---|
554 | \end{verbatim} |
---|
555 | \end{exampleblock} |
---|
556 | \end{frame} |
---|
557 | |
---|
558 | \begin{frame}[fragile] |
---|
559 | \frametitle{les fifos} |
---|
560 | \begin{exampleblock}{Première console:} |
---|
561 | \begin{verbatim} |
---|
562 | $ mkfifo /tmp/fifo |
---|
563 | $ cat /etc/passwd > /tmp/fifo |
---|
564 | \end{verbatim} |
---|
565 | \end{exampleblock} |
---|
566 | \pause |
---|
567 | \vfill |
---|
568 | \begin{exampleblock}{Deuxième console:} |
---|
569 | \begin{verbatim} |
---|
570 | $ grep root < /tmp/fifo |
---|
571 | root:x:0:0:root:/root:/bin/bash |
---|
572 | \end{verbatim} |
---|
573 | \end{exampleblock} |
---|
574 | \pause |
---|
575 | \vfill |
---|
576 | \begin{block}{Cet exemple simple revient à} |
---|
577 | \begin{verbatim} |
---|
578 | cat /etc/passwd | grep root |
---|
579 | \end{verbatim} |
---|
580 | \end{block} |
---|
581 | \end{frame} |
---|
582 | |
---|
583 | \section{Les processus} |
---|
584 | |
---|
585 | \subsection{le temps CPU} |
---|
586 | |
---|
587 | \begin{frame} |
---|
588 | \frametitle{scheduler préemptif} |
---|
589 | \begin{alertblock}{préemptif ?} |
---|
590 | Seul le noyau décide du temps CPU aloué ! |
---|
591 | \end{alertblock} |
---|
592 | \pause |
---|
593 | \vfill |
---|
594 | \begin{block}{Le scheduler} |
---|
595 | Le scheduler est appelé à interval régulier (plusieurs centaintes de fois par seconde) pour donner du temps |
---|
596 | CPU à l'application sauf si: |
---|
597 | \begin{itemize} |
---|
598 | \item l'application ne demande pas de temps CPU (sleep) |
---|
599 | \item est en attente d'une réponse matériel (IO wait) |
---|
600 | \end{itemize} |
---|
601 | Le temps CPU est donné en fonction de la priorité |
---|
602 | \end{block} |
---|
603 | \end{frame} |
---|
604 | |
---|
605 | \subsection{La ram} |
---|
606 | |
---|
607 | \begin{frame} |
---|
608 | \frametitle{La RAM} |
---|
609 | \begin{block}{le contenu} |
---|
610 | \begin{itemize} |
---|
611 | \item Mémoire vérouillée: |
---|
612 | \begin{itemize} |
---|
613 | \item le BIOS (programme interne du PC) |
---|
614 | \item mémoire du matériel |
---|
615 | \item le code et données du noyau |
---|
616 | \end{itemize} |
---|
617 | \pause |
---|
618 | \item Mémoire haute (swappable): |
---|
619 | \begin{itemize} |
---|
620 | \item code des applications |
---|
621 | \item données des applications |
---|
622 | \end{itemize} |
---|
623 | \pause |
---|
624 | \item Mémoire vive libre: |
---|
625 | \begin{itemize} |
---|
626 | \item buffers |
---|
627 | \item cache (disque) |
---|
628 | \end{itemize} |
---|
629 | \pause |
---|
630 | \item swap (sur disque, très lente) |
---|
631 | \end{itemize} |
---|
632 | \end{block} |
---|
633 | \end{frame} |
---|
634 | |
---|
635 | \begin{frame} |
---|
636 | \frametitle{Gestion} |
---|
637 | |
---|
638 | \begin{block}{la swap ?} |
---|
639 | Extension sur disque de la mémoire. |
---|
640 | \pause |
---|
641 | |
---|
642 | Elle sert: |
---|
643 | \begin{itemize} |
---|
644 | \item quand la mémoire vive est pleine |
---|
645 | \item pour mettre de coté des données peu utilisées |
---|
646 | \end{itemize} |
---|
647 | |
---|
648 | Mémoire disponible = mémoire vive + swap |
---|
649 | \end{block} |
---|
650 | \pause |
---|
651 | \vfill |
---|
652 | \begin{alertblock}{} |
---|
653 | Un système qui swap \textbf{un peu} n'est pas surchargé ! |
---|
654 | \end{alertblock} |
---|
655 | \vfill |
---|
656 | \pause |
---|
657 | \begin{block}{La Ram est virtuelle} |
---|
658 | De par les aller retour RAM-SWAP, et la fragmentation, le système virutalize |
---|
659 | les adresses allouées. |
---|
660 | \end{block} |
---|
661 | \end{frame} |
---|
662 | |
---|
663 | \begin{frame}[fragile] |
---|
664 | \frametitle{Allocation par segment} |
---|
665 | \begin{exampleblock}{Un très mauvais code} |
---|
666 | \listinginput{1}{nosegfault.c} |
---|
667 | Et ça ne plante pas ! |
---|
668 | \end{exampleblock} |
---|
669 | \pause |
---|
670 | \vfill |
---|
671 | \begin{alertblock}{Explication} |
---|
672 | Le système n'alloue pas des octets mais des segments |
---|
673 | |
---|
674 | Le système n'intervient que si l'application sort du segment ! |
---|
675 | \end{alertblock} |
---|
676 | \end{frame} |
---|
677 | |
---|
678 | \begin{frame}[fragile] |
---|
679 | \frametitle{Mémoire à crédit} |
---|
680 | |
---|
681 | \begin{exampleblock}{malloc.c} |
---|
682 | \small |
---|
683 | \listinginput{1}{malloc.c} |
---|
684 | \end{exampleblock} |
---|
685 | \begin{columns} |
---|
686 | \column{2.5in} |
---|
687 | \pause |
---|
688 | \begin{block}{sortie formatée} |
---|
689 | \begin{tabular}{|c|c|c|} |
---|
690 | \hline |
---|
691 | Mem virtuel&Mem résidente\\ |
---|
692 | \hline |
---|
693 | 978116&332\\ |
---|
694 | \hline |
---|
695 | \hline |
---|
696 | 978116&976888\\ |
---|
697 | \hline |
---|
698 | \end{tabular} |
---|
699 | \end{block} |
---|
700 | \column{2in} |
---|
701 | \pause |
---|
702 | \begin{block}{malloc est une promesse} |
---|
703 | \begin{itemize} |
---|
704 | \item malloc promet la ram |
---|
705 | \item la ram n'est allouée qu'à l'écriture |
---|
706 | \end{itemize} |
---|
707 | \end{block} |
---|
708 | \end{columns} |
---|
709 | |
---|
710 | \end{frame} |
---|
711 | |
---|
712 | \subsection{plusieurs processus: sur 1 ordinateur} |
---|
713 | |
---|
714 | \begin{frame} |
---|
715 | \frametitle{fork()} |
---|
716 | \begin{block}{la fourchette} |
---|
717 | Permet à un processus de se dupliquer, et de donner naissance à un processus "fils" \textbf{indépendant}\\ |
---|
718 | |
---|
719 | \centering |
---|
720 | \includegraphics[height=15mm]{fork} |
---|
721 | \end{block} |
---|
722 | \pause |
---|
723 | \begin{columns} |
---|
724 | \column{2.5in} |
---|
725 | \begin{block}{motivation} |
---|
726 | \begin{itemize} |
---|
727 | \item excution parallèle |
---|
728 | \item perte de privilège de fils |
---|
729 | \item préserver l'environnement du père |
---|
730 | \item serveur: remettre le père en attente |
---|
731 | \end{itemize} |
---|
732 | \end{block} |
---|
733 | \pause |
---|
734 | \column{2in} |
---|
735 | \begin{block}{pros \& cons} |
---|
736 | \begin{itemize} |
---|
737 | \item existe sur tout les UNIX (glibc) |
---|
738 | \item simple |
---|
739 | \item pas de communication |
---|
740 | \end{itemize} |
---|
741 | \end{block} |
---|
742 | \end{columns} |
---|
743 | \end{frame} |
---|
744 | |
---|
745 | \begin{frame}[fragile] |
---|
746 | \frametitle{fork et la RAM} |
---|
747 | \begin{columns} |
---|
748 | \column{2in} |
---|
749 | \tiny |
---|
750 | \begin{exampleblock}{fork.c} |
---|
751 | \listinginput[5]{1}{fork.c} |
---|
752 | \end{exampleblock} |
---|
753 | \column{2.5in} |
---|
754 | \pause |
---|
755 | \begin{block}{Ram utilisée} |
---|
756 | \begin{tabular}{|l|c|} |
---|
757 | \hline |
---|
758 | &mem utilisée\\ |
---|
759 | \hline |
---|
760 | \hline |
---|
761 | Avant allocation&1687848\\ |
---|
762 | \hline |
---|
763 | Après allocation&2664948\\ |
---|
764 | \hline |
---|
765 | Après fork()&2666332\\ |
---|
766 | \hline |
---|
767 | \end{tabular} |
---|
768 | \end{block} |
---|
769 | \end{columns} |
---|
770 | \end{frame} |
---|
771 | |
---|
772 | \begin{frame}[fragile] |
---|
773 | \frametitle{les threads} |
---|
774 | \begin{block}{Sépare un processus en deux} |
---|
775 | |
---|
776 | \begin{itemize} |
---|
777 | \item partage de la mémoire |
---|
778 | \begin{itemize} |
---|
779 | \item tout n'est pas forcément partagé |
---|
780 | \item gestion de lock pour les écriture |
---|
781 | \end{itemize} |
---|
782 | \item le fonctionnement ressemble à fork mais |
---|
783 | \begin{itemize} |
---|
784 | \item programmation et gestion différentes |
---|
785 | \item complexe mais éfficace |
---|
786 | \end{itemize} |
---|
787 | \end{itemize} |
---|
788 | \end{block} |
---|
789 | \pause |
---|
790 | \begin{alertblock}{Linux: libpthread (glibc) POSIX} |
---|
791 | Je ne garantie pas que tout les UNIX fournissent le support des threads |
---|
792 | \end{alertblock} |
---|
793 | \pause |
---|
794 | \begin{exampleblock}{} |
---|
795 | \small |
---|
796 | \begin{verbatim} |
---|
797 | [olivier@andromede unix]$ ps aux | grep transcode |
---|
798 | PID %CPU %MEM VSZ RSS TIME COMMAND |
---|
799 | 3477 124 1.3 119972 41344 36:32 transcode |
---|
800 | \end{verbatim} |
---|
801 | \end{exampleblock} |
---|
802 | \end{frame} |
---|
803 | |
---|
804 | \subsection{Communication inter-processus} |
---|
805 | |
---|
806 | \begin{frame}[fragile] |
---|
807 | \frametitle{Pipe} |
---|
808 | \begin{block}{points à retenir} |
---|
809 | \begin{itemize} |
---|
810 | \item flux de donnée continu unique |
---|
811 | \item sens unique |
---|
812 | \item bloquants |
---|
813 | \end{itemize} |
---|
814 | \end{block} |
---|
815 | \pause |
---|
816 | \vfill |
---|
817 | \begin{block}{Utilisation} |
---|
818 | \begin{itemize} |
---|
819 | \item \verb+fork()+/\verb+pipe()+ (\verb+p1 | p2+) |
---|
820 | \item avec tube nommé (\verb+open++\verb+write+ / \verb+open++\verb+read+) |
---|
821 | \end{itemize} |
---|
822 | \end{block} |
---|
823 | \end{frame} |
---|
824 | |
---|
825 | \begin{frame} |
---|
826 | \frametitle{IPC/SHM, la boite aux lettres système} |
---|
827 | \begin{block}{fonctions} |
---|
828 | \begin{itemize} |
---|
829 | \item file d'attente de message |
---|
830 | \item zone de mémoire partagée |
---|
831 | \end{itemize} |
---|
832 | \end{block} |
---|
833 | \pause |
---|
834 | \vfill |
---|
835 | \begin{block}{+ et -} |
---|
836 | \begin{itemize} |
---|
837 | \item relativement simple |
---|
838 | \item très performant |
---|
839 | \item taille allouable limitée (protection du kernel, configurable) |
---|
840 | \item protection des données par gestion de droit |
---|
841 | \end{itemize} |
---|
842 | \end{block} |
---|
843 | \pause |
---|
844 | \vfill |
---|
845 | \begin{block}{La doc (pour le C)} |
---|
846 | \textbf{man} |
---|
847 | shmat, shmdt, shmop, shm\_overview, |
---|
848 | shmctl, shmget, shm\_open, shm\_unlink |
---|
849 | \end{block} |
---|
850 | \end{frame} |
---|
851 | |
---|
852 | \begin{frame} |
---|
853 | \frametitle{Socket, Client/Serveur} |
---|
854 | |
---|
855 | \begin{block}{principe} |
---|
856 | \begin{itemize} |
---|
857 | \item un serveur attends une connection |
---|
858 | \item un client se connecte |
---|
859 | \item les deux échangent des données |
---|
860 | \end{itemize} |
---|
861 | \end{block} |
---|
862 | \pause |
---|
863 | \vfill |
---|
864 | \begin{block}{modes} |
---|
865 | \begin{itemize} |
---|
866 | \item écoute sur le réseau |
---|
867 | \begin{itemize} |
---|
868 | \item definir un port d'écoute |
---|
869 | \item savoir quelle(s) machine(s) contacter |
---|
870 | \item communication inter-machines |
---|
871 | \item problème de latence |
---|
872 | \end{itemize} |
---|
873 | \pause |
---|
874 | \item écoute sur un socket (fichier de type \ldots) |
---|
875 | \begin{itemize} |
---|
876 | \item communication locale |
---|
877 | \item restriction d'accès par gestion de droit |
---|
878 | \end{itemize} |
---|
879 | \end{itemize} |
---|
880 | \end{block} |
---|
881 | \end{frame} |
---|
882 | |
---|
883 | \section{Executables: format} |
---|
884 | |
---|
885 | \subsection{Code exécutable} |
---|
886 | |
---|
887 | \begin{frame} |
---|
888 | \frametitle{la logique} |
---|
889 | \begin{columns} |
---|
890 | \column{2in} |
---|
891 | \includegraphics[height=40mm]{compil} |
---|
892 | \column{2.5in} |
---|
893 | \begin{block}{un quoi ?} |
---|
894 | \begin{itemize} |
---|
895 | \item données formatées (format ELF ces jours-ci) |
---|
896 | \pause |
---|
897 | \item executable (ou presque) par le processeur |
---|
898 | \pause |
---|
899 | \item contient des objets: |
---|
900 | \begin{itemize} |
---|
901 | \item des variables (globales) |
---|
902 | \item des fonctions |
---|
903 | \item d'autres objets à trouver |
---|
904 | \end{itemize} |
---|
905 | \end{itemize} |
---|
906 | \end{block} |
---|
907 | \end{columns} |
---|
908 | \end{frame} |
---|
909 | |
---|
910 | \subsection{Bibliothèques} |
---|
911 | |
---|
912 | \begin{frame} |
---|
913 | \frametitle{Le standard} |
---|
914 | \begin{block}{Normallement un programme fournit} |
---|
915 | \begin{itemize} |
---|
916 | \item foo.h: l'entête pour la compilation |
---|
917 | \pause |
---|
918 | \item libfoo.so.1: la librairie utilisée, versionnée |
---|
919 | \pause |
---|
920 | \item libfoo.so: (lien) pour l'éditeur de lien |
---|
921 | \pause |
---|
922 | \item libfoo.a: la version statique |
---|
923 | \end{itemize} |
---|
924 | \end{block} |
---|
925 | \pause |
---|
926 | \vfill |
---|
927 | \begin{block}{le point sur les dynamiques} |
---|
928 | \begin{itemize} |
---|
929 | \item avantages: |
---|
930 | \begin{itemize} |
---|
931 | \item les maj sont répercutés sans recompilation des applis |
---|
932 | \item factorisation du code dans la RAM et sur le disque |
---|
933 | \end{itemize} |
---|
934 | \pause |
---|
935 | \item inconvénients |
---|
936 | \begin{itemize} |
---|
937 | \item doit être disponible lors de l'éxecution |
---|
938 | \end{itemize} |
---|
939 | \end{itemize} |
---|
940 | \end{block} |
---|
941 | \end{frame} |
---|
942 | |
---|
943 | \begin{frame}[fragile] |
---|
944 | \frametitle{Trouver les dynamiques} |
---|
945 | \begin{block}{la recherche} |
---|
946 | \begin{itemize} |
---|
947 | \item codé dans l'executable (\emph{rpath}) |
---|
948 | \pause |
---|
949 | \item codé en dur: \verb+/lib(64)+, \verb+/usr/lib(64)+ |
---|
950 | \pause |
---|
951 | \item indiqués dans \verb+/etc/ld.so.conf+ |
---|
952 | \end{itemize} |
---|
953 | \end{block} |
---|
954 | \pause |
---|
955 | \vfill |
---|
956 | \begin{exampleblock}{ldd} |
---|
957 | \begin{small} |
---|
958 | \begin{verbatim} |
---|
959 | [olivier@andromede unix]$ ldd /bin/rm |
---|
960 | linux-gate.so.1 => (0xffffe000) |
---|
961 | libc.so.6 => /lib/i686/libc.so.6 (0xb7ee3000) |
---|
962 | /lib/ld-linux.so.2 (0xb8064000) |
---|
963 | \end{verbatim} |
---|
964 | \end{small} |
---|
965 | \end{exampleblock} |
---|
966 | \pause |
---|
967 | \vfill |
---|
968 | \begin{alertblock}{linux-gate.so.1} |
---|
969 | Code injecté directement par le kernel, ignorez le ! |
---|
970 | \end{alertblock} |
---|
971 | \end{frame} |
---|
972 | |
---|
973 | \begin{frame}[fragile] |
---|
974 | \frametitle{l'exemple: la librairie} |
---|
975 | \begin{exampleblock}{libsmall.h} |
---|
976 | \small |
---|
977 | \listinginput[1]{1}{libsmall.h} |
---|
978 | \end{exampleblock} |
---|
979 | \begin{exampleblock}{libsmall.c} |
---|
980 | \small |
---|
981 | \listinginput[1]{1}{libsmall.c} |
---|
982 | \end{exampleblock} |
---|
983 | \pause |
---|
984 | \vfill |
---|
985 | \begin{block}{la version statique} |
---|
986 | \begin{verbatim} |
---|
987 | gcc -c libsmall.o libsmall.c |
---|
988 | ar rcs libsmall.a libsmall.o |
---|
989 | \end{verbatim} |
---|
990 | \end{block} |
---|
991 | \pause |
---|
992 | \begin{block}{la version dynamique} |
---|
993 | \begin{verbatim} |
---|
994 | gcc -c libsmall.o libsmall.c |
---|
995 | gcc -shared -o libsmall.so libsmall.o |
---|
996 | \end{verbatim} |
---|
997 | \end{block} |
---|
998 | \end{frame} |
---|
999 | |
---|
1000 | \begin{frame}[fragile] |
---|
1001 | \frametitle{l'exemple: le programme} |
---|
1002 | \begin{exampleblock}{small.c} |
---|
1003 | \small |
---|
1004 | \listinginput[1]{1}{small.c} |
---|
1005 | \end{exampleblock} |
---|
1006 | \pause |
---|
1007 | \vfill |
---|
1008 | \begin{block}{la version statique} |
---|
1009 | \begin{verbatim} |
---|
1010 | gcc -c -o small.o small.c |
---|
1011 | gcc -o small.static libsmall.a small.o |
---|
1012 | \end{verbatim} |
---|
1013 | \end{block} |
---|
1014 | \pause |
---|
1015 | \begin{block}{la version dynamique} |
---|
1016 | \begin{verbatim} |
---|
1017 | gcc -c -o small.o libsmall.c |
---|
1018 | gcc -o small.dyn -L. -lsmall small.o |
---|
1019 | -Wl,-rpath=$(pwd) # $(PWD) pour le chemin courant |
---|
1020 | \end{verbatim} |
---|
1021 | \end{block} |
---|
1022 | \end{frame} |
---|
1023 | |
---|
1024 | \begin{frame} |
---|
1025 | \frametitle{Et puis il y a \emph{dlopen()}} |
---|
1026 | |
---|
1027 | \begin{alertblock}{le mode standard dynamique} |
---|
1028 | Un code lié à une bibliothèque ne fonctionnera jamais sans. |
---|
1029 | \end{alertblock} |
---|
1030 | \pause |
---|
1031 | \vfill |
---|
1032 | \begin{block}{les deux clefs:} |
---|
1033 | \begin{itemize} |
---|
1034 | \item \emph{dlopen()} charge une bibliotèque |
---|
1035 | \item \emph{dlsym()} va chercher les fonctions |
---|
1036 | \end{itemize} |
---|
1037 | \end{block} |
---|
1038 | \pause |
---|
1039 | \vfill |
---|
1040 | \begin{block}{exemple d'utilisation} |
---|
1041 | \begin{itemize} |
---|
1042 | \item pour étendre les fonctionnalités d'une appli (perl, python, apache) |
---|
1043 | \item pour eviter de charger du code inutilement |
---|
1044 | \end{itemize} |
---|
1045 | \end{block} |
---|
1046 | \end{frame} |
---|
1047 | |
---|
1048 | \section{X11} |
---|
1049 | |
---|
1050 | \begin{frame} |
---|
1051 | \frametitle{Histoire} |
---|
1052 | \begin{block}{} |
---|
1053 | \begin{itemize} |
---|
1054 | \item \textbf{1984 création par le MIT} |
---|
1055 | \item X est le successeur de W (sur system V) |
---|
1056 | \item 1985 ajout de la couleur (DEC VAXstation) |
---|
1057 | \item 1986 X10R2, X10R3, X10R4 |
---|
1058 | \item 1987 X11, 1988 X11R2, 1991 X11R5 |
---|
1059 | \item \textbf{1992 création de XFree86 (utilisé par Linux)} |
---|
1060 | \item 1999 X11R6.5 |
---|
1061 | \item 2004 Xorg se sépare de XFree86 (pb de licence) |
---|
1062 | \item \textbf{depuis tout les UNIX libres utilisent Xorg} |
---|
1063 | \end{itemize} |
---|
1064 | \end{block} |
---|
1065 | \pause |
---|
1066 | \vfill |
---|
1067 | \begin{alertblock}{X ça pue !} |
---|
1068 | Oui, c'est le prix de la compatibilité\ldots |
---|
1069 | \end{alertblock} |
---|
1070 | \end{frame} |
---|
1071 | |
---|
1072 | \begin{frame} |
---|
1073 | \frametitle{X: serveur d'affichage} |
---|
1074 | \begin{columns} |
---|
1075 | \column{2in} |
---|
1076 | \begin{block}{} |
---|
1077 | \begin{itemize} |
---|
1078 | \item gestionnaire de matériel |
---|
1079 | \begin{itemize} |
---|
1080 | \item carte graphique |
---|
1081 | \item ecran |
---|
1082 | \item clavier |
---|
1083 | \item souris (et autres rongeurs) |
---|
1084 | \end{itemize} |
---|
1085 | \pause |
---|
1086 | \item protocol d'affichage (reseau) |
---|
1087 | \pause |
---|
1088 | \item \textbf{serveur d'affichage} |
---|
1089 | \end{itemize} |
---|
1090 | \end{block} |
---|
1091 | \column{2.5in} |
---|
1092 | \pause |
---|
1093 | \begin{exampleblock}{le serveur X, c'est ça:} |
---|
1094 | \centering |
---|
1095 | \includegraphics[height=40mm]{x} |
---|
1096 | \end{exampleblock} |
---|
1097 | \end{columns} |
---|
1098 | \end{frame} |
---|
1099 | |
---|
1100 | \begin{frame} |
---|
1101 | \frametitle{Applications X11} |
---|
1102 | \begin{columns} |
---|
1103 | \column{2.5in} |
---|
1104 | \begin{block}{} |
---|
1105 | Une application X11 se connecte au serveur X, |
---|
1106 | et demande un affichage. |
---|
1107 | \end{block} |
---|
1108 | \column{2in} |
---|
1109 | \pause |
---|
1110 | \begin{exampleblock}{} |
---|
1111 | \centering |
---|
1112 | \includegraphics[height=30mm]{x-mplayer-capcv} |
---|
1113 | \end{exampleblock} |
---|
1114 | \end{columns} |
---|
1115 | \pause |
---|
1116 | \vfill |
---|
1117 | \begin{columns} |
---|
1118 | \column{2.5in} |
---|
1119 | \begin{block}{le Window Manager} |
---|
1120 | \begin{itemize} |
---|
1121 | \item application X11 |
---|
1122 | \item il créé les fenetres |
---|
1123 | \item fourni un menu (éventuellement) |
---|
1124 | \end{itemize} |
---|
1125 | \end{block} |
---|
1126 | \begin{alertblock}{} |
---|
1127 | KDE, GNOME, XFCE: envirronements de bureau |
---|
1128 | \end{alertblock} |
---|
1129 | \column{2in} |
---|
1130 | \pause |
---|
1131 | \begin{exampleblock}{} |
---|
1132 | \centering |
---|
1133 | \includegraphics[height=30mm]{x-mplayer-capcv-twm} |
---|
1134 | \end{exampleblock} |
---|
1135 | \end{columns} |
---|
1136 | \end{frame} |
---|
1137 | |
---|
1138 | \begin{frame} |
---|
1139 | \frametitle{X11: résumé} |
---|
1140 | \begin{exampleblock}{} |
---|
1141 | \centering |
---|
1142 | \includegraphics[height=60mm]{x-resume} |
---|
1143 | \end{exampleblock} |
---|
1144 | \end{frame} |
---|
1145 | |
---|
1146 | \section*{Fin} |
---|
1147 | |
---|
1148 | \begin{frame}{Des questions} |
---|
1149 | \center{ |
---|
1150 | \hfill |
---|
1151 | \includegraphics{150px-Tux} |
---|
1152 | \hfill |
---|
1153 | } |
---|
1154 | \end{frame} |
---|
1155 | |
---|
1156 | \end{document} |
---|