source: trunk/unix/unix.tex @ 203

Last change on this file since 203 was 203, checked in by nanardon, 16 years ago
  • add sparse file frame
File size: 21.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{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{GNU/Linux}
146\begin{block}{Contenu du système}
147\begin{itemize}
148\item Linux: le noyau lui même
149\item des applis eparpillées sur internet
150\end{itemize}
151\end{block}
152
153\begin{block}{Les distributions}
154Ensemble cohérent noyau/applications
155
156\begin{itemize}
157\item Redhat: Mandriva Suse Centos \ldots
158\item Debian: ubuntu
159\item gentoo
160\item slackware
161\item \ldots
162\end{itemize}
163\end{block}
164\end{frame}
165
166\begin{frame}
167\frametitle{De l'ordinateur à l'utilisateur}
168\begin{columns}[c]
169\column{2in}
170\centering
171\includegraphics[height=40mm]{process}
172\column{2.5in}
173\begin{block}{Role du kernel}
174\begin{itemize}
175\item gérer le matériel
176\item donner le temps CPU aux applications
177\item vérifier les droits d'accès
178\item assurer l'intégrité du système
179\end{itemize}
180\end{block}
181\end{columns}
182\end{frame}
183
184\section{Les fichiers}
185
186\subsection{Les fichiers}
187
188\begin{frame}[fragile]
189\frametitle{Nom de fichiers}
190
191\begin{block}{Accès aux fichiers}
192\begin{itemize}
193\item le séparateur est \verb+/+
194\item plusieurs \verb+/+ ne font qu'un
195\item la longueur maximal d'un chemin est de 1024 (POSIX)
196\item tout les caractère sont permis sauf \verb+/+ et \emph{NULL}
197\end{itemize}
198\end{block}
199
200\begin{alertblock}{On évitera}
201\begin{itemize}
202\item l'espace
203\item \verb+-+ (surtout en premier, option en ligne de commande)
204\item ce qui ne se tape au clavier
205\item les accents
206\end{itemize}
207\end{alertblock}
208
209\end{frame}
210
211\begin{frame}[fragile]
212\frametitle{L'inode}
213
214Le fichier est matérialisé par une inode:
215
216{\small\begin{verbatim}
217[olivier@andromede unix]$ ls -li unix.tex
2186160386 -rw-r--r-- 1 olivier olivier 3049 17:30 unix.tex
219\end{verbatim}
220}
221
222\begin{itemize}
223\item un numéro (6160386)
224\item un type
225\item des métadata
226\begin{itemize}
227\item taille (3049)
228\item propriétaires / droits d'accès
229\item date d'accès (access time)
230\item date de création \textbf{de l'inode} (creation time)
231\item date de dernière modification (modification time)
232\item \ldots
233\end{itemize}
234\item éventuellement un contenu
235\end{itemize}
236\end{frame}
237
238\begin{frame}[fragile]
239\begin{alertblock}{quand ctime dépasse mtime}
240Copie en préservant les métadata:
241{\small\begin{verbatim}
242[olivier@andromede unix]$ cp -a unix.tex unix2.tex
243\end{verbatim}
244}
245Le fichier vient d'être créé:
246{\small\begin{verbatim}
247[olivier@andromede unix]$ ls -l --time=c unix2.tex
248-rw-r--r-- 1 olivier olivier 3049 18:47 unix2.tex
249\end{verbatim}
250}
251Pourtant la date de modification est antérieur:
252{\small\begin{verbatim}
253[olivier@andromede unix]$ ls -l  unix2.tex
254-rw-r--r-- 1 olivier olivier 3049 17:30 unix2.tex
255\end{verbatim}
256}
257\end{alertblock}
258\end{frame}
259
260\begin{frame}[fragile]
261\frametitle{les types de fichiers}
262
263- \emph{rw-r--r-- 1 olivier olivier 3049 17:30 unix2.tex}
264
265\begin{itemize}
266\item les simples fichiers (-)
267\item les répertoires (d)
268\item les liens symboliques (l)
269\item les fichiers de périphérique (c ou b)
270\item les fifo (tubes nommés, p)
271\item les sockets (=)
272\end{itemize}
273\end{frame}
274
275\begin{frame}[fragile]
276\frametitle{existance d'un fichier}
277\begin{block}{un fichier existe tant que}
278\begin{itemize}
279\item l'inode est référencée par un nom (lien hard)
280\item l'inode est ouverte
281\end{itemize}
282\end{block}
283
284\begin{exampleblock}{liens hard}
285{\small\begin{verbatim}
286[olivier@andromede unix]$ ln fichier1 fichier2
287[olivier@andromede unix]$ ls -li fichier*
2886160393 -rw-r--r-- 2 olivier olivier 1101 19:54 fichier1
2896160393 -rw-r--r-- 2 olivier olivier 1101 19:54 fichier2
290[olivier@andromede unix]$ rm -f fichier1
291[olivier@andromede unix]$ ls -li fichier*
2926160393 -rw-r--r-- 1 olivier olivier 1101 19:54 fichier2
293\end{verbatim}
294}
295\end{exampleblock}
296\end{frame}
297
298\begin{frame}[fragile]
299\begin{exampleblock}{deleteopen.pl}
300\frametitle{existance d'un fichier}
301\listinginput[2]{1}{deleteopen.pl}
302\end{exampleblock}
303
304\begin{block}{}
305\begin{itemize}
306\item le fichier n'est accessible que par l'application
307\item si l'application quitte: l'espace disque est récupéré
308\item la fermeture du descripteur entraine la fin du fichier
309\end{itemize}
310{\small\begin{verbatim}
311perl 23536 ol 3w REG  8,7  0  49065 /tmp/opened (deleted)
312\end{verbatim}
313}
314Utile pour les fichiers temporaires.
315\end{block}
316\end{frame}
317
318\begin{frame}[fragile]
319\frametitle{les fichiers à trous (sparse files)}
320\begin{block}{théorie}
321\begin{itemize}
322\item certaines données n'existent pas
323\item les trous ne prennent pas de place
324\item le système renvoient des 0 en cas de lecture
325\item le fichier peut être plus gros que le système de fichier
326\end{itemize}
327\end{block}
328\begin{block}{utilisation ?}
329Chaque fois que des données seront allouées à emplacement dans le fichier:
330\begin{itemize}
331\item disque virtuel
332\item base de données
333\end{itemize}
334\end{block}
335\end{frame}
336
337\begin{frame}[fragile]
338\frametitle{fichiers à trous: exemple}
339\begin{exampleblock}{sparce.c}
340\begin{small}
341\listinginput{1}{sparse.c}
342
343\begin{verbatim}
344[olivier@andromede unix]$ ls -ls sparsed
3458 -rw-rw-r-- 1 olivier olivier 1048582 02:57 sparsed
346\end{verbatim}
347\end{small}
348\end{exampleblock}
349\end{frame}
350
351\begin{frame}[fragile]
352\frametitle{Fichier de périphérique}
353\begin{block}{2 types}
354\begin{itemize}
355\item block (b)
356\item caractères (c)
357\end{itemize}
358\end{block}
359
360\begin{exampleblock}{Tout est fichier}
361\begin{verbatim}
362brw-rw---- 1 nanardon cdwriter 11, 0 12:26 /dev/sr0
363\end{verbatim}
364
365C'est le premier lecteur CDROM SCSI (SATA en réalité)
366
367Je peux le lire comme un fichier:
368\begin{verbatim}
369[nanardon@virgo ~]$ dd if=/dev/sr0 bs=1024 count=20 | wc
37020+0 enregistrements lus
37120+0 enregistrements écrits
37220480 octets (20 kB) copiés, 0,803619 s, 25,5 kB/s
373      0       0   20480
374\end{verbatim}
375\end{exampleblock}
376\end{frame}
377
378\begin{frame}[fragile]
379\frametitle{les fifos}
380\begin{exampleblock}{Première console:}
381\begin{verbatim}
382[olivier@andromede unix]$ mkfifo /tmp/fifo
383[olivier@andromede unix]$ cat /etc/passwd > /tmp/fifo
384\end{verbatim}
385\end{exampleblock}
386
387\begin{exampleblock}{Deuxième console:}
388\begin{verbatim}
389[olivier@andromede ~]$ grep root < /tmp/fifo
390root:x:0:0:root:/root:/bin/bash
391\end{verbatim}
392\end{exampleblock}
393
394\begin{block}{Cet exemple simple revient à}
395\begin{verbatim}
396cat /etc/passwd | grep root
397\end{verbatim}
398\end{block}
399\end{frame}
400
401\subsection{Systèmes de fichiers}
402
403\begin{frame}[fragile]
404\frametitle{principe}
405\begin{block}{le montage}
406\begin{itemize}
407\item une méthode d'accès
408\item une structure arborescente
409\item on le fait apparaitre dans un répertoire existant
410\end{itemize}
411\end{block}
412
413\begin{exampleblock}{la commande mount}
414\begin{verbatim}
415[olivier@andromede unix]$ mount
416/dev/sda3 on / type ext3 (rw,noatime)
417/dev/sda8 on /home type ext3 (rw,noatime)
418[...]
419virgo:/home/data on /mnt/disk type nfs (ro,addr=192.168.76.1)
420\end{verbatim}
421\end{exampleblock}
422\end{frame}
423
424\begin{frame}[fragile]
425\frametitle{Organisation globale}
426\begin{block}{}
427\begin{tabular}{ll}
428\verb+/etc+&fichiers de configuration\\
429\verb+/bin+, \verb+/usr/bin+&les executables utilisateur\\
430\verb+/sbin+, \verb+/usr/sbin+&idem, pour root\\
431\verb+/lib+, \verb+/usr/lib+&les librairies\\
432\verb+/usr/share+&les données statiques des programmes\\
433\verb+/usr/include+&les fichiers .h (C)\\
434\verb+/var+&les données variables (spool, etc...)\\
435\verb+/tmp+, \verb+/var/tmp+&données temporaires\\
436\verb+/opt+&espace pour les apps. propriétaires\\
437\verb+/proc+, \verb+/sys+&représentation temp réelle du système\\
438\end{tabular}
439\end{block}
440
441\begin{alertblock}{le FHS}
442Le Filesystem Hierarchy Standard normalise l'empacement des fichiers
443\end{alertblock}
444\end{frame}
445
446
447\section{les processus}
448
449\subsection{le temps CPU}
450
451\begin{frame}
452\frametitle{scheduler préemptif}
453\begin{alertblock}{préemptif ?}
454Seul le noyau décide du temps CPU alouer !
455\end{alertblock}
456
457\begin{block}{Le scheduler}
458Le scheduler est appelé à interval régulier (plusieurs centaintes de fois par seconde) pour donner du temps
459CPU à l'application sauf si:
460\begin{itemize}
461\item l'application ne demande pas de temps CPU (sleep)
462\item est en attente d'une réponse matériel (IO wait)
463\end{itemize}
464Le temps CPU est donné en fonction de la priorité
465\end{block}
466\end{frame}
467
468\subsection{la ram}
469
470\begin{frame}
471\frametitle{La RAM}
472\begin{block}{le contenu}
473\begin{itemize}
474\item Mémoire vérouillée:
475\begin{itemize}
476\item le BIOS (programme interne du PC)
477\item mémoire du matériel
478\item le code et données du noyau
479\end{itemize}
480\item Mémoire haute (swappable):
481\begin{itemize}
482\item code des applications
483\item données des applications
484\end{itemize}
485\item Mémoire vive libre:
486\begin{itemize}
487\item buffers
488\item cache (disque)
489\end{itemize}
490\item swap (sur disque, très lente)
491\end{itemize}
492\end{block}
493
494\begin{alertblock}{}
495Un système qui swap un peu n'est pas surchargé !
496\end{alertblock}
497\end{frame}
498
499\begin{frame}[fragile]
500\frametitle{Allocation par segment}
501\begin{exampleblock}{Un très mauvais code}
502\listinginput{1}{nosegfault.c}
503Et ça ne plante pas !
504\end{exampleblock}
505
506\begin{alertblock}{Explication}
507Le système n'alloue pas des octets mais des segments
508
509Le système n'intervient que si l'application sort du segment !
510\end{alertblock}
511\end{frame}
512
513\begin{frame}[fragile]
514\frametitle{Mémoire à crédit}
515\begin{block}{malloc est une promesse}
516\begin{itemize}
517\item malloc promet la ram
518\item la ram n'est allouée qu'à l'écriture
519\end{itemize}
520\end{block}
521\end{frame}
522
523\begin{frame}
524\frametitle{la crise des subprime}
525\begin{exampleblock}{malloc.c}
526\listinginput{1}{malloc.c}
527\end{exampleblock}
528
529\begin{block}{sortie formatée}
530\begin{tabular}{|c|c|c|}
531\hline
532Mem virtuel&Mem résidente\\
533\hline
534978116&332\\
535\hline
536\hline
537978116&976888\\
538\hline
539\end{tabular}
540\end{block}
541\end{frame}
542
543\subsection{plusieurs processus: sur 1 ordinateur}
544
545\begin{frame}
546\frametitle{fork()}
547\begin{block}{la fourchette}
548Permet à un processus de se dupliquer, et de donner naissance à un processus "fils" \textbf{indépendant}\\
549
550\centering
551\includegraphics[height=15mm]{fork}
552\end{block}
553
554\begin{columns}
555\column{2in}
556\begin{block}{motivation}
557\begin{itemize}
558\item excution parallèle
559\item perte de privilège de fils
560\item préserver l'environnement du père
561\item serveur: remettre le père en attente
562\end{itemize}
563\end{block}
564\column{2in}
565\begin{block}{pros \& cons}
566\begin{itemize}
567\item existe sur tout les UNIX (glibc)
568\item simple
569\item pas de communication
570\end{itemize}
571\end{block}
572\end{columns}
573\end{frame}
574
575\begin{frame}[fragile]
576\frametitle{fork et la RAM}
577\begin{columns}
578\column{2in}
579\tiny
580\begin{exampleblock}{fork.c}
581\listinginput[5]{1}{fork.c}
582\end{exampleblock}
583\column{2.5in}
584\begin{tabular}{|l|c|}
585\hline
586&mem utilisée\\
587\hline
588\hline
589Avant allocation&1687848\\
590\hline
591Après allocation&2664948\\
592\hline
593Après fork()&2666332\\
594\hline
595\end{tabular}
596\end{columns}
597\end{frame}
598
599\begin{frame}[fragile]
600\frametitle{les threads}
601\begin{block}{Sépare un processus en deux}
602
603\begin{itemize}
604\item partage de la mémoire
605\begin{itemize}
606\item tout n'est pas forcément partagé
607\item gestion de lock pour les écriture
608\end{itemize}
609\item le fonctionnement ressemble à fork mais
610\begin{itemize}
611\item programmation différente
612\item gestion par le système différente
613\item complexe mais éfficace
614\end{itemize}
615\end{itemize}
616\end{block}
617
618\begin{alertblock}{Linux: libpthread (glibc) POSIX}
619Je ne garantie pas que tout les UNIX fournissent le support des threads
620\end{alertblock}
621\begin{exampleblock}{}
622\small
623\begin{verbatim}
624[olivier@andromede unix]$ ps aux | grep transcode
625PID %CPU %MEM    VSZ   RSS  TIME  COMMAND
6263477  124  1.3 119972 41344 36:32 transcode
627\end{verbatim}
628\end{exampleblock}
629\end{frame}
630
631\subsection{Communication inter-processus}
632
633\begin{frame}[fragile]
634\frametitle{Pipe}
635\begin{block}{points à retenir}
636\begin{itemize}
637\item flux de donnée continu
638\item sens unique
639\item bloquants
640\item flux unique
641\end{itemize}
642\end{block}
643
644\begin{block}{Utilisation}
645\begin{itemize}
646\item \verb+fork()+/\verb+pipe()+ (\verb+p1 | p2+)
647\item avec tube nommé (\verb+open++\verb+write+ / \verb+open++\verb+read+)
648\end{itemize}
649\end{block}
650\end{frame}
651
652\begin{frame}
653\frametitle{IPC, la boite aux lettres système}
654\begin{block}{fonctions}
655\begin{itemize}
656\item file d'attente de message
657\item zone de mémoire partagée
658\end{itemize}
659\end{block}
660
661\begin{block}{+ et -}
662\begin{itemize}
663\item relativement simple
664\item très performant
665\item taille allouable limitée (protection du kernel, configurable)
666\item protection des données par gestion de droit
667\end{itemize}
668\end{block}
669\end{frame}
670
671\begin{frame}
672\frametitle{Socket, Client/Serveur}
673
674\begin{block}{principe}
675\begin{itemize}
676\item un serveur attends une connection
677\item un client se connecte
678\item les deux échangent des données
679\end{itemize}
680\end{block}
681
682\begin{block}{modes}
683\begin{itemize}
684\item écoute sur le réseau
685\begin{itemize}
686\item definir un port d'écoute
687\item savoir quelle(s) machine(s) contacter
688\item communication inter-machines
689\item problème de latence
690\end{itemize}
691\item écoute sur un socket
692\begin{itemize}
693\item communication locale
694\item restriction d'accès par gestion de droit
695\end{itemize}
696\end{itemize}
697\end{block}
698\end{frame}
699
700\section{Executables: format}
701
702\subsection{Code exécutable}
703
704\begin{frame}
705\frametitle{la logique}
706\begin{columns}
707\column{2in}
708\includegraphics[height=40mm]{compil}
709\column{2.5in}
710\begin{block}{un quoi ?}
711\begin{itemize}
712\item données formatées (format ELF ces jours-ci)
713\item executable (ou presque) par le processeur
714\item contient des objets:
715\begin{itemize}
716\item des variables (globales)
717\item des fonctions
718\item d'autres objets à trouver
719\end{itemize}
720\end{itemize}
721\end{block}
722\end{columns}
723\end{frame}
724
725\subsection{Bibliothèques}
726
727\begin{frame}
728\frametitle{quand c'est propres}
729\begin{block}{Normallement un programme fournit}
730\begin{itemize}
731\item foo.h: l'entête pour la compilation
732\item libfoo.so.1: la librairie utilisée, versionnée
733\item libfoo.so: (lien) pour l'éditeur de lien
734\item libfoo.a: la version statique
735\end{itemize}
736\end{block}
737
738\begin{block}{le point sur les dynamiques}
739\begin{itemize}
740\item avantages:
741\begin{itemize}
742\item les maj sont répercutés sans recompilation des applis
743\item factorisation du code dans la RAM et sur le disque
744\end{itemize}
745\item inconvénients
746\begin{itemize}
747\item doit être disponible lors de l'éxecution
748\end{itemize}
749\end{itemize}
750\end{block}
751\end{frame}
752
753\begin{frame}[fragile]
754\frametitle{Trouver les dynamiques}
755\begin{block}{la recherche}
756\begin{itemize}
757\item codé dans l'executable (\emph{rpath})
758\item codé en dur: \verb+/lib(64)+, \verb+/usr/lib(64)+
759\item indiqués dans ld.so.conf
760\end{itemize}
761\end{block}
762
763\begin{exampleblock}{ldd}
764\begin{small}
765\begin{verbatim}
766[olivier@andromede unix]$ ldd /bin/rm
767        linux-gate.so.1 =>  (0xffffe000)
768        libc.so.6 => /lib/i686/libc.so.6 (0xb7ee3000)
769        /lib/ld-linux.so.2 (0xb8064000)
770\end{verbatim}
771\end{small}
772\end{exampleblock}
773
774\begin{alertblock}{linux-gate.so.1}
775Code injecté directement par le kernel, ignorez le !
776\end{alertblock}
777\end{frame}
778
779\begin{frame}[fragile]
780\frametitle{l'exemple: la librairie}
781\begin{exampleblock}{libsmall.h}
782\small
783\listinginput[1]{1}{libsmall.h}
784\end{exampleblock}
785\begin{exampleblock}{libsmall.c}
786\small
787\listinginput[1]{1}{libsmall.c}
788\end{exampleblock}
789\vfill
790\begin{block}{la version statique}
791\begin{verbatim}
792gcc -c libsmall.o libsmall.c
793ar rcs libsmall.a libsmall.o
794\end{verbatim}
795\end{block}
796\begin{block}{la version dynamique}
797\begin{verbatim}
798gcc -c libsmall.o libsmall.c
799gcc -shared -o libsmall.so libsmall.o
800\end{verbatim}
801\end{block}
802\end{frame}
803
804\begin{frame}[fragile]
805\frametitle{l'exemple: la librairie}
806\begin{exampleblock}{small.c}
807\small
808\listinginput[1]{1}{small.c}
809\end{exampleblock}
810\vfill
811\begin{block}{la version statique}
812\begin{verbatim}
813gcc -c -o small.o small.c
814gcc -o small.static libsmall.a small.o
815\end{verbatim}
816\end{block}
817\begin{block}{la version dynamique}
818\begin{verbatim}
819gcc -c -o small.o libsmall.c
820gcc -o small.dyn -L. -lsmall small.o
821    -Wl,-rpath=$(pwd) # $(PWD) pour le chemin courant
822\end{verbatim}
823\end{block}
824\end{frame}
825
826\begin{frame}
827\frametitle{Et puis il y a \emph{dlopen()}}
828
829\begin{alertblock}{le mode standard dynamique}
830Un code lié à une bibliothèque ne fonctionnera jamais sans.
831\end{alertblock}
832
833\begin{block}{les deux clefs:}
834\begin{itemize}
835\item \emph{dlopen()} charge une bibliotèque
836\item \emph{dlsym()} va chercher les fonctions
837\end{itemize}
838\end{block}
839
840\begin{block}{exemple d'utilisation}
841\begin{itemize}
842\item pour étendre les fonctionnalités d'une appli (perl, python, apache)
843\item pour eviter de charger du code inutilement
844\end{itemize}
845\end{block}
846\end{frame}
847
848\section{X11}
849
850\begin{frame}
851\frametitle{Histoire}
852\begin{block}{}
853\begin{itemize}
854\item \textbf{1984 création par le MIT}
855\item X est le successeur de W (sur system V)
856\item 1985 ajout de la couleur (DEC VAXstation)
857\item 1986 X10R2, X10R3, X10R4
858\item 1987 X11, 1988 X11R2, 1991 X11R5
859\item \textbf{1992 création de XFree86 (utilisé par Linux)}
860\item 1999 X11R6.5
861\item 2004 Xorg se sépare de XFree86 (pb de license)
862\item \textbf{depuis tout les UNIX libres utilisent Xorg}
863\end{itemize}
864\end{block}
865\begin{alertblock}{X ça pue !}
866Oui, c'est le prix de la compatibilité\ldots
867\end{alertblock}
868\end{frame}
869
870\begin{frame}
871\frametitle{X: serveur d'affichage}
872\begin{columns}
873\column{2in}
874\begin{block}{}
875\begin{itemize}
876\item gestionnaire de matériel
877\begin{itemize}
878\item carte graphique
879\item ecran
880\item clavier
881\item souris (et autres rongeurs)
882\end{itemize}
883\item protocol d'affichage (reseau)
884\item \textbf{serveur d'affichage}
885\end{itemize}
886\end{block}
887\column{2.5in}
888\begin{exampleblock}{le serveur X}
889\centering
890\includegraphics[height=40mm]{x}
891\end{exampleblock}
892\end{columns}
893\end{frame}
894
895\begin{frame}
896\frametitle{Applications X11}
897\begin{columns}
898\column{2.5in}
899\begin{block}{}
900Une application X11 se connecte au serveur X,
901et demande un affichage.
902\end{block}
903\column{2in}
904\begin{exampleblock}{}
905\centering
906\includegraphics[height=30mm]{x-mplayer-capcv}
907\end{exampleblock}
908\end{columns}
909\pause
910\vfill
911\begin{columns}
912\column{2.5in}
913\begin{block}{le Window Manager}
914\begin{itemize}
915\item application X11
916\item il créer les fenetres
917\item fourni un menu
918\end{itemize}
919\end{block}
920\begin{alertblock}{}
921KDE, GNOME, XFCE: envirronements de bureau
922\end{alertblock}
923\column{2in}
924\begin{exampleblock}{}
925\centering
926\includegraphics[height=30mm]{x-mplayer-capcv-twm}
927\end{exampleblock}
928\end{columns}
929\end{frame}
930
931\begin{frame}
932\frametitle{X11: résumé}
933\begin{exampleblock}{}
934\centering
935\includegraphics[height=60mm]{x-resume}
936\end{exampleblock}
937\end{frame}
938
939\end{document}
Note: See TracBrowser for help on using the repository browser.