source: trunk/unix/unix.tex @ 191

Last change on this file since 191 was 191, checked in by nanardon, 16 years ago
  • begin UNIX talk
File size: 10.7 KB
Line 
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{
110UNIX est le nom d'un système d'exploitation multitâche et multi-utilisateur créé en 1969,
111conceptuellement ouvert et fondé sur une approche par laquelle il offre de nombreux petits
112outils chacun dotés d'une mission spécifique.}
113
114Dé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:}
143standard 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
194Le fichier est matérialisé par une inode:
195
196{\small\begin{verbatim}
197[olivier@andromede unix]$ ls -li unix.tex
1986160386 -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}
220Copie en préservant les métadata:
221{\small\begin{verbatim}
222[olivier@andromede unix]$ cp -a unix.tex unix2.tex
223\end{verbatim}
224}
225Le 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}
231Pourtant 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*
2686160393 -rw-r--r-- 2 olivier olivier 1101 19:54 fichier1
2696160393 -rw-r--r-- 2 olivier olivier 1101 19:54 fichier2
270[olivier@andromede unix]$ rm -f fichier1
271[olivier@andromede unix]$ ls -li fichier*
2726160393 -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}
291perl 23536 ol 3w REG  8,7  0  49065 /tmp/opened (deleted)
292\end{verbatim}
293}
294Utile 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}
313brw-rw---- 1 nanardon cdwriter 11, 0 12:26 /dev/sr0
314\end{verbatim}
315
316C'est le premier lecteur CDROM SCSI (SATA en réalité)
317
318Je peux le lire comme un fichier:
319\begin{verbatim}
320[nanardon@virgo ~]$ dd if=/dev/sr0 bs=1024 count=20 | wc
32120+0 enregistrements lus
32220+0 enregistrements écrits
32320480 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
341root:x:0:0:root:/root:/bin/bash
342\end{verbatim}
343\end{exampleblock}
344
345\begin{block}{Cet exemple simple revient à}
346\begin{verbatim}
347cat /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[...]
370virgo:/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}
393Le 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 ?}
405Seul le noyau décide du temps CPU alouer !
406\end{alertblock}
407
408\begin{block}{Le scheduler}
409Le scheduler est appelé à interval régulier (plusieurs centaintes de fois par seconde) pour donner du temps
410CPU à 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}
415Le 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}{}
446Un 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}
454Et ça ne plante pas !
455\end{exampleblock}
456
457\begin{alertblock}{Explication}
458Le système n'alloue pas des octets mais des segments
459
460Le système n'intervient que si l'application sort du segment !
461\end{alertblock}
462\end{frame}
463
464\end{document}
Note: See TracBrowser for help on using the repository browser.