source: trunk/unix/unix.tex @ 199

Last change on this file since 199 was 199, checked in by nanardon, 16 years ago
  • compilation logique graph
File size: 15.0 KB
RevLine 
[191]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
[198]50\section{Préambule}
[191]51
[198]52\subsection{L'Ordinateur}
[191]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{
108UNIX est le nom d'un système d'exploitation multitâche et multi-utilisateur créé en 1969,
109conceptuellement ouvert et fondé sur une approche par laquelle il offre de nombreux petits
110outils chacun dotés d'une mission spécifique.}
111
112Dé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:}
141standard 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
192Le fichier est matérialisé par une inode:
193
194{\small\begin{verbatim}
195[olivier@andromede unix]$ ls -li unix.tex
1966160386 -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}
218Copie en préservant les métadata:
219{\small\begin{verbatim}
220[olivier@andromede unix]$ cp -a unix.tex unix2.tex
221\end{verbatim}
222}
223Le 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}
229Pourtant 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*
2666160393 -rw-r--r-- 2 olivier olivier 1101 19:54 fichier1
2676160393 -rw-r--r-- 2 olivier olivier 1101 19:54 fichier2
268[olivier@andromede unix]$ rm -f fichier1
269[olivier@andromede unix]$ ls -li fichier*
2706160393 -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}
289perl 23536 ol 3w REG  8,7  0  49065 /tmp/opened (deleted)
290\end{verbatim}
291}
292Utile 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}
311brw-rw---- 1 nanardon cdwriter 11, 0 12:26 /dev/sr0
312\end{verbatim}
313
314C'est le premier lecteur CDROM SCSI (SATA en réalité)
315
316Je peux le lire comme un fichier:
317\begin{verbatim}
318[nanardon@virgo ~]$ dd if=/dev/sr0 bs=1024 count=20 | wc
31920+0 enregistrements lus
32020+0 enregistrements écrits
32120480 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
339root:x:0:0:root:/root:/bin/bash
340\end{verbatim}
341\end{exampleblock}
342
343\begin{block}{Cet exemple simple revient à}
344\begin{verbatim}
345cat /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[...]
368virgo:/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}
391Le 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 ?}
403Seul le noyau décide du temps CPU alouer !
404\end{alertblock}
405
406\begin{block}{Le scheduler}
407Le scheduler est appelé à interval régulier (plusieurs centaintes de fois par seconde) pour donner du temps
408CPU à 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}
413Le 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}{}
444Un 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}
452Et ça ne plante pas !
453\end{exampleblock}
454
455\begin{alertblock}{Explication}
456Le système n'alloue pas des octets mais des segments
457
458Le système n'intervient que si l'application sort du segment !
459\end{alertblock}
460\end{frame}
461
[192]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
481Mem virtuel&Mem résidente\\
482\hline
483978116&332\\
484\hline
485\hline
486978116&976888\\
487\hline
488\end{tabular}
489\end{block}
490\end{frame}
491
[195]492\subsection{plusieurs processus: sur 1 ordinateur}
493
494\begin{frame}
495\frametitle{fork()}
496\begin{block}{la fourchette}
497Permet à 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
538Avant allocation&1687848\\
539\hline
540Après allocation&2664948\\
541\hline
542Aprè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)}
568Les threads sont POSIX.
569
570Je ne garantie pas que tout les UNIX fournissent le support des threads
571\end{alertblock}
[196]572\end{frame}
[195]573
[196]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}
[195]593\end{frame}
594
[196]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}
[197]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
[196]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}
[198]642
643\section{Executables: format}
644
645\subsection{Code exécutable}
[199]646
[198]647\begin{frame}
[199]648\frametitle{la logique}
649\includegraphics[height=50mm]{compil}
650\end{frame}
651
652\begin{frame}
[198]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
[199]670\begin{frame}[fragile]
671\frametitle{programme}
672\begin{exampleblock}{empty.c}
673\listinginput[1]{1}{empty.c}
674\begin{verbatim}
675gcc -o empty empty.c
676\end{verbatim}
677\end{exampleblock}
678\end{frame}
[198]679
680\section{X11}
681
[191]682\end{document}
Note: See TracBrowser for help on using the repository browser.