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{L'Ordinateur} |
---|
51 | |
---|
52 | \subsection{Anatomie} |
---|
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 | \section{UNIX} |
---|
104 | |
---|
105 | \subsection{LES UNIX} |
---|
106 | |
---|
107 | \begin{frame} |
---|
108 | \frametitle{la grande famille des UNIX} |
---|
109 | \emph{ |
---|
110 | UNIX est le nom d'un système d'exploitation multitâche et multi-utilisateur créé en 1969, |
---|
111 | conceptuellement ouvert et fondé sur une approche par laquelle il offre de nombreux petits |
---|
112 | outils chacun dotés d'une mission spécifique.} |
---|
113 | |
---|
114 | Définition \href{http://fr.wikipedia.org/wiki/UNIX}{Wikipédia} |
---|
115 | \vfill |
---|
116 | |
---|
117 | \textbf{Les grandes lignes:} |
---|
118 | |
---|
119 | \begin{itemize} |
---|
120 | \item mulitâche préemptif |
---|
121 | \item multiutilisateurs (donc gestion de droit) |
---|
122 | \item multisessions |
---|
123 | \item tout est fichier |
---|
124 | \end{itemize} |
---|
125 | \end{frame} |
---|
126 | |
---|
127 | \begin{frame} |
---|
128 | \frametitle{Vite une Norme !} |
---|
129 | \textbf{Exemples d'UNIX:} |
---|
130 | |
---|
131 | \begin{itemize} |
---|
132 | \item GNU/Linux |
---|
133 | \item *BSD (Net, Free, Open, \ldots) |
---|
134 | \item MacOS X (est un BSD, d'Apple) |
---|
135 | \item Digital UNIX (de Digital) |
---|
136 | \item Solaris (de Sun) |
---|
137 | \item AIX (de IBM) |
---|
138 | \item \ldots |
---|
139 | \end{itemize} |
---|
140 | \vfill |
---|
141 | |
---|
142 | \textbf{Norme POSIX:} |
---|
143 | standard de fonctionnement et commandes (IEEE). |
---|
144 | \end{frame} |
---|
145 | |
---|
146 | \begin{frame} |
---|
147 | \frametitle{De l'ordi à l'utilisateur} |
---|
148 | \begin{columns}[c] |
---|
149 | \column{2.5in} |
---|
150 | \centering |
---|
151 | \includegraphics[height=40mm]{process} |
---|
152 | \column{2.5in} |
---|
153 | \begin{block}{Role du kernel} |
---|
154 | \begin{itemize} |
---|
155 | \item gérer le matériel |
---|
156 | \item donner le temps CPU aux applications |
---|
157 | \item vérifier les droits d'accès |
---|
158 | \item assurer l'intégrité du système |
---|
159 | \end{itemize} |
---|
160 | \end{block} |
---|
161 | \end{columns} |
---|
162 | \end{frame} |
---|
163 | |
---|
164 | \section{Les fichiers} |
---|
165 | |
---|
166 | \subsection{Les fichiers} |
---|
167 | |
---|
168 | \begin{frame}[fragile] |
---|
169 | \frametitle{Nom de fichiers} |
---|
170 | |
---|
171 | \begin{block}{Accès aux fichiers} |
---|
172 | \begin{itemize} |
---|
173 | \item le séparateur est \verb+/+ |
---|
174 | \item plusieurs \verb+/+ ne font qu'un |
---|
175 | \item la longueur maximal d'un chemin est de 1024 (POSIX) |
---|
176 | \item tout les caractère sont permis sauf \verb+/+ et \emph{NULL} |
---|
177 | \end{itemize} |
---|
178 | \end{block} |
---|
179 | |
---|
180 | \begin{alertblock}{On évitera} |
---|
181 | \begin{itemize} |
---|
182 | \item l'espace |
---|
183 | \item \verb+-+ (surtout en premier, option en ligne de commande) |
---|
184 | \item ce qui ne se tape au clavier |
---|
185 | \item les accents |
---|
186 | \end{itemize} |
---|
187 | \end{alertblock} |
---|
188 | |
---|
189 | \end{frame} |
---|
190 | |
---|
191 | \begin{frame}[fragile] |
---|
192 | \frametitle{L'inode} |
---|
193 | |
---|
194 | Le fichier est matérialisé par une inode: |
---|
195 | |
---|
196 | {\small\begin{verbatim} |
---|
197 | [olivier@andromede unix]$ ls -li unix.tex |
---|
198 | 6160386 -rw-r--r-- 1 olivier olivier 3049 17:30 unix.tex |
---|
199 | \end{verbatim} |
---|
200 | } |
---|
201 | |
---|
202 | \begin{itemize} |
---|
203 | \item un numéro (6160386) |
---|
204 | \item un type |
---|
205 | \item des métadata |
---|
206 | \begin{itemize} |
---|
207 | \item taille (3049) |
---|
208 | \item propriétaires / droits d'accès |
---|
209 | \item date d'accès (access time) |
---|
210 | \item date de création \textbf{de l'inode} (creation time) |
---|
211 | \item date de dernière modification (modification time) |
---|
212 | \item \ldots |
---|
213 | \end{itemize} |
---|
214 | \item éventuellement un contenu |
---|
215 | \end{itemize} |
---|
216 | \end{frame} |
---|
217 | |
---|
218 | \begin{frame}[fragile] |
---|
219 | \begin{alertblock}{quand ctime dépasse mtime} |
---|
220 | Copie en préservant les métadata: |
---|
221 | {\small\begin{verbatim} |
---|
222 | [olivier@andromede unix]$ cp -a unix.tex unix2.tex |
---|
223 | \end{verbatim} |
---|
224 | } |
---|
225 | Le fichier vient d'être créé: |
---|
226 | {\small\begin{verbatim} |
---|
227 | [olivier@andromede unix]$ ls -l --time=c unix2.tex |
---|
228 | -rw-r--r-- 1 olivier olivier 3049 18:47 unix2.tex |
---|
229 | \end{verbatim} |
---|
230 | } |
---|
231 | Pourtant la date de modification est antérieur: |
---|
232 | {\small\begin{verbatim} |
---|
233 | [olivier@andromede unix]$ ls -l unix2.tex |
---|
234 | -rw-r--r-- 1 olivier olivier 3049 17:30 unix2.tex |
---|
235 | \end{verbatim} |
---|
236 | } |
---|
237 | \end{alertblock} |
---|
238 | \end{frame} |
---|
239 | |
---|
240 | \begin{frame}[fragile] |
---|
241 | \frametitle{les types de fichiers} |
---|
242 | |
---|
243 | - \emph{rw-r--r-- 1 olivier olivier 3049 17:30 unix2.tex} |
---|
244 | |
---|
245 | \begin{itemize} |
---|
246 | \item les simples fichiers (-) |
---|
247 | \item les répertoires (d) |
---|
248 | \item les liens symboliques (l) |
---|
249 | \item les fichiers de périphérique (c ou b) |
---|
250 | \item les fifo (tubes nommés, p) |
---|
251 | \item les sockets (=) |
---|
252 | \end{itemize} |
---|
253 | \end{frame} |
---|
254 | |
---|
255 | \begin{frame}[fragile] |
---|
256 | \frametitle{existance d'un fichier} |
---|
257 | \begin{block}{un fichier existe tant que} |
---|
258 | \begin{itemize} |
---|
259 | \item l'inode est référencée par un nom (lien hard) |
---|
260 | \item l'inode est ouverte |
---|
261 | \end{itemize} |
---|
262 | \end{block} |
---|
263 | |
---|
264 | \begin{exampleblock}{liens hard} |
---|
265 | {\small\begin{verbatim} |
---|
266 | [olivier@andromede unix]$ ln fichier1 fichier2 |
---|
267 | [olivier@andromede unix]$ ls -li fichier* |
---|
268 | 6160393 -rw-r--r-- 2 olivier olivier 1101 19:54 fichier1 |
---|
269 | 6160393 -rw-r--r-- 2 olivier olivier 1101 19:54 fichier2 |
---|
270 | [olivier@andromede unix]$ rm -f fichier1 |
---|
271 | [olivier@andromede unix]$ ls -li fichier* |
---|
272 | 6160393 -rw-r--r-- 1 olivier olivier 1101 19:54 fichier2 |
---|
273 | \end{verbatim} |
---|
274 | } |
---|
275 | \end{exampleblock} |
---|
276 | \end{frame} |
---|
277 | |
---|
278 | \begin{frame}[fragile] |
---|
279 | \begin{exampleblock}{deleteopen.pl} |
---|
280 | \frametitle{existance d'un fichier} |
---|
281 | \listinginput[2]{1}{deleteopen.pl} |
---|
282 | \end{exampleblock} |
---|
283 | |
---|
284 | \begin{block}{} |
---|
285 | \begin{itemize} |
---|
286 | \item le fichier n'est accessible que par l'application |
---|
287 | \item si l'application quitte: l'espace disque est récupéré |
---|
288 | \item la fermeture du descripteur entraine la fin du fichier |
---|
289 | \end{itemize} |
---|
290 | {\small\begin{verbatim} |
---|
291 | perl 23536 ol 3w REG 8,7 0 49065 /tmp/opened (deleted) |
---|
292 | \end{verbatim} |
---|
293 | } |
---|
294 | Utile pour les fichiers temporaires. |
---|
295 | \end{block} |
---|
296 | \end{frame} |
---|
297 | |
---|
298 | \begin{frame}[fragile] |
---|
299 | \frametitle{les fichiers à trous (sparse files)} |
---|
300 | \end{frame} |
---|
301 | |
---|
302 | \begin{frame}[fragile] |
---|
303 | \frametitle{Fichier de périphérique} |
---|
304 | \begin{block}{2 types} |
---|
305 | \begin{itemize} |
---|
306 | \item block (b) |
---|
307 | \item caractères (c) |
---|
308 | \end{itemize} |
---|
309 | \end{block} |
---|
310 | |
---|
311 | \begin{exampleblock}{Tout est fichier} |
---|
312 | \begin{verbatim} |
---|
313 | brw-rw---- 1 nanardon cdwriter 11, 0 12:26 /dev/sr0 |
---|
314 | \end{verbatim} |
---|
315 | |
---|
316 | C'est le premier lecteur CDROM SCSI (SATA en réalité) |
---|
317 | |
---|
318 | Je peux le lire comme un fichier: |
---|
319 | \begin{verbatim} |
---|
320 | [nanardon@virgo ~]$ dd if=/dev/sr0 bs=1024 count=20 | wc |
---|
321 | 20+0 enregistrements lus |
---|
322 | 20+0 enregistrements écrits |
---|
323 | 20480 octets (20 kB) copiés, 0,803619 s, 25,5 kB/s |
---|
324 | 0 0 20480 |
---|
325 | \end{verbatim} |
---|
326 | \end{exampleblock} |
---|
327 | \end{frame} |
---|
328 | |
---|
329 | \begin{frame}[fragile] |
---|
330 | \frametitle{les fifos} |
---|
331 | \begin{exampleblock}{Première console:} |
---|
332 | \begin{verbatim} |
---|
333 | [olivier@andromede unix]$ mkfifo /tmp/fifo |
---|
334 | [olivier@andromede unix]$ cat /etc/passwd > /tmp/fifo |
---|
335 | \end{verbatim} |
---|
336 | \end{exampleblock} |
---|
337 | |
---|
338 | \begin{exampleblock}{Deuxième console:} |
---|
339 | \begin{verbatim} |
---|
340 | [olivier@andromede ~]$ grep root < /tmp/fifo |
---|
341 | root:x:0:0:root:/root:/bin/bash |
---|
342 | \end{verbatim} |
---|
343 | \end{exampleblock} |
---|
344 | |
---|
345 | \begin{block}{Cet exemple simple revient à} |
---|
346 | \begin{verbatim} |
---|
347 | cat /etc/passwd | grep root |
---|
348 | \end{verbatim} |
---|
349 | \end{block} |
---|
350 | \end{frame} |
---|
351 | |
---|
352 | \subsection{Systèmes de fichiers} |
---|
353 | |
---|
354 | \begin{frame}[fragile] |
---|
355 | \frametitle{principe} |
---|
356 | \begin{block}{le montage} |
---|
357 | \begin{itemize} |
---|
358 | \item une méthode d'accès |
---|
359 | \item une structure arborescente |
---|
360 | \item on le fait apparaitre dans un répertoire existant |
---|
361 | \end{itemize} |
---|
362 | \end{block} |
---|
363 | |
---|
364 | \begin{exampleblock}{la commande mount} |
---|
365 | \begin{verbatim} |
---|
366 | [olivier@andromede unix]$ mount |
---|
367 | /dev/sda3 on / type ext3 (rw,noatime) |
---|
368 | /dev/sda8 on /home type ext3 (rw,noatime) |
---|
369 | [...] |
---|
370 | virgo:/home/data on /mnt/disk type nfs (ro,addr=192.168.76.1) |
---|
371 | \end{verbatim} |
---|
372 | \end{exampleblock} |
---|
373 | \end{frame} |
---|
374 | |
---|
375 | \begin{frame}[fragile] |
---|
376 | \frametitle{Organisation globale} |
---|
377 | \begin{block}{} |
---|
378 | \begin{tabular}{ll} |
---|
379 | \verb+/etc+&fichiers de configuration\\ |
---|
380 | \verb+/bin+, \verb+/usr/bin+&les executables utilisateur\\ |
---|
381 | \verb+/sbin+, \verb+/usr/sbin+&idem, pour root\\ |
---|
382 | \verb+/lib+, \verb+/usr/lib+&les librairies\\ |
---|
383 | \verb+/usr/share+&les données statiques des programmes\\ |
---|
384 | \verb+/usr/include+&les fichiers .h (C)\\ |
---|
385 | \verb+/var+&les données variables (spool, etc...)\\ |
---|
386 | \verb+/tmp+, \verb+/var/tmp+&données temporaires\\ |
---|
387 | \verb+/opt+&espace pour les apps. propriétaires\\ |
---|
388 | \verb+/proc+, \verb+/sys+&représentation temp réelle du système\\ |
---|
389 | \end{tabular} |
---|
390 | \end{block} |
---|
391 | |
---|
392 | \begin{alertblock}{le FHS} |
---|
393 | Le Filesystem Hierarchy Standard normalise l'empacement des fichiers |
---|
394 | \end{alertblock} |
---|
395 | \end{frame} |
---|
396 | |
---|
397 | |
---|
398 | \section{les processus} |
---|
399 | |
---|
400 | \subsection{le temps CPU} |
---|
401 | |
---|
402 | \begin{frame} |
---|
403 | \frametitle{scheduler préemptif} |
---|
404 | \begin{alertblock}{préemptif ?} |
---|
405 | Seul le noyau décide du temps CPU alouer ! |
---|
406 | \end{alertblock} |
---|
407 | |
---|
408 | \begin{block}{Le scheduler} |
---|
409 | Le scheduler est appelé à interval régulier (plusieurs centaintes de fois par seconde) pour donner du temps |
---|
410 | CPU à l'application sauf si: |
---|
411 | \begin{itemize} |
---|
412 | \item l'application ne demande pas de temps CPU (sleep) |
---|
413 | \item est en attente d'une réponse matériel (IO wait) |
---|
414 | \end{itemize} |
---|
415 | Le temps CPU est donné en fonction de la priorité |
---|
416 | \end{block} |
---|
417 | \end{frame} |
---|
418 | |
---|
419 | \subsection{la ram} |
---|
420 | |
---|
421 | \begin{frame} |
---|
422 | \frametitle{La RAM} |
---|
423 | \begin{block}{le contenu} |
---|
424 | \begin{itemize} |
---|
425 | \item Mémoire vérouillée: |
---|
426 | \begin{itemize} |
---|
427 | \item le BIOS (programme interne du PC) |
---|
428 | \item mémoire du matériel |
---|
429 | \item le code et données du noyau |
---|
430 | \end{itemize} |
---|
431 | \item Mémoire haute (swappable): |
---|
432 | \begin{itemize} |
---|
433 | \item code des applications |
---|
434 | \item données des applications |
---|
435 | \end{itemize} |
---|
436 | \item Mémoire vive libre: |
---|
437 | \begin{itemize} |
---|
438 | \item buffers |
---|
439 | \item cache (disque) |
---|
440 | \end{itemize} |
---|
441 | \item swap (sur disque, très lente) |
---|
442 | \end{itemize} |
---|
443 | \end{block} |
---|
444 | |
---|
445 | \begin{alertblock}{} |
---|
446 | Un système qui swap un peu n'est pas surchargé ! |
---|
447 | \end{alertblock} |
---|
448 | \end{frame} |
---|
449 | |
---|
450 | \begin{frame}[fragile] |
---|
451 | \frametitle{Allocation par segment} |
---|
452 | \begin{exampleblock}{Un très mauvais code} |
---|
453 | \listinginput{1}{nosegfault.c} |
---|
454 | Et ça ne plante pas ! |
---|
455 | \end{exampleblock} |
---|
456 | |
---|
457 | \begin{alertblock}{Explication} |
---|
458 | Le système n'alloue pas des octets mais des segments |
---|
459 | |
---|
460 | Le système n'intervient que si l'application sort du segment ! |
---|
461 | \end{alertblock} |
---|
462 | \end{frame} |
---|
463 | |
---|
464 | \end{document} |
---|