source: tags/20081106/unix/unix.tex @ 209

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