Index: trunk/unix/Makefile
===================================================================
--- trunk/unix/Makefile	(revision 200)
+++ trunk/unix/Makefile	(revision 201)
@@ -24,5 +24,9 @@
 	process.png \
 	fork.png \
-	compil.png
+	compil.png \
+	x.png \
+	x-mplayer-capcv.png \
+	x-mplayer-capcv-twm.png \
+	x-resume.png \
 
 unix_FIGURES= \
Index: trunk/unix/unix.tex
===================================================================
--- trunk/unix/unix.tex	(revision 200)
+++ trunk/unix/unix.tex	(revision 201)
@@ -140,4 +140,26 @@
 \textbf{Norme POSIX:}
 standard de fonctionnement et commandes (IEEE).
+\end{frame}
+
+\begin{frame}
+\frametitle{GNU/Linux}
+\begin{block}{Contenu du système}
+\begin{itemize}
+\item Linux: le noyau lui même
+\item des applis eparpillées sur internet
+\end{itemize}
+\end{block}
+
+\begin{block}{Les distributions}
+Ensemble cohérent noyau/applications
+
+\begin{itemize}
+\item Redhat: Mandriva Suse Centos \ldots
+\item Debian: ubuntu
+\item gentoo
+\item slackware
+\item \ldots
+\end{itemize}
+\end{block}
 \end{frame}
 
@@ -546,5 +568,5 @@
 \end{frame}
 
-\begin{frame}
+\begin{frame}[fragile]
 \frametitle{les threads}
 \begin{block}{Sépare un processus en deux}
@@ -565,9 +587,15 @@
 \end{block}
 
-\begin{alertblock}{Linux: libpthread (glibc)}
-Les threads sont POSIX.
-
+\begin{alertblock}{Linux: libpthread (glibc) POSIX}
 Je ne garantie pas que tout les UNIX fournissent le support des threads
 \end{alertblock}
+\begin{exampleblock}{}
+\small
+\begin{verbatim}
+[olivier@andromede unix]$ ps aux | grep transcode
+PID %CPU %MEM    VSZ   RSS  TIME  COMMAND
+3477  124  1.3 119972 41344 36:32 transcode
+\end{verbatim}
+\end{exampleblock}
 \end{frame}
 
@@ -647,9 +675,8 @@
 \begin{frame}
 \frametitle{la logique}
-\includegraphics[height=50mm]{compil}
-\end{frame}
-
-\begin{frame}
-\frametitle{le code executable}
+\begin{columns}
+\column{2in}
+\includegraphics[height=40mm]{compil}
+\column{2.5in}
 \begin{block}{un quoi ?}
 \begin{itemize}
@@ -664,19 +691,220 @@
 \end{itemize}
 \end{block}
-\end{frame}
-
-\subsection{Programme}
-
-\begin{frame}[fragile]
-\frametitle{programme}
-\begin{exampleblock}{empty.c}
-\listinginput[1]{1}{empty.c}
-\begin{verbatim}
-gcc -o empty empty.c
-\end{verbatim}
-\end{exampleblock}
+\end{columns}
+\end{frame}
+
+\subsection{Bibliothèques}
+
+\begin{frame}
+\frametitle{quand c'est propres}
+\begin{block}{Normallement un programme fournit}
+\begin{itemize}
+\item foo.h: l'entête pour la compilation
+\item libfoo.so.1: la librairie utilisée, versionnée
+\item libfoo.so: (lien) pour l'éditeur de lien
+\item libfoo.a: la version statique
+\end{itemize}
+\end{block}
+
+\begin{block}{le point sur les dynamiques}
+\begin{itemize}
+\item avantages:
+\begin{itemize}
+\item les maj sont répercutés sans recompilation des applis
+\item factorisation du code dans la RAM et sur le disque
+\end{itemize}
+\item inconvénients
+\begin{itemize}
+\item doit être disponible lors de l'éxecution
+\end{itemize}
+\end{itemize}
+\end{block}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Trouver les dynamiques}
+\begin{block}{la recherche}
+\begin{itemize}
+\item codé dans l'executable (\emph{rpath})
+\item codé en dur: \verb+/lib(64)+, \verb+/usr/lib(64)+
+\item indiqués dans ld.so.conf
+\end{itemize}
+\end{block}
+
+\begin{exampleblock}{ldd}
+\begin{small}
+\begin{verbatim}
+[olivier@andromede unix]$ ldd /bin/rm
+        linux-gate.so.1 =>  (0xffffe000)
+        libc.so.6 => /lib/i686/libc.so.6 (0xb7ee3000)
+        /lib/ld-linux.so.2 (0xb8064000)
+\end{verbatim}
+\end{small}
+\end{exampleblock}
+
+\begin{alertblock}{linux-gate.so.1}
+Code injecté directement par le kernel, ignorez le !
+\end{alertblock}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{l'exemple: la librairie}
+\begin{exampleblock}{libsmall.h}
+\small
+\listinginput[1]{1}{libsmall.h}
+\end{exampleblock}
+\begin{exampleblock}{libsmall.c}
+\small
+\listinginput[1]{1}{libsmall.c}
+\end{exampleblock}
+\vfill
+\begin{block}{la version statique}
+\begin{verbatim}
+gcc -c libsmall.o libsmall.c
+ar rcs libsmall.a libsmall.o
+\end{verbatim}
+\end{block}
+\begin{block}{la version dynamique}
+\begin{verbatim}
+gcc -c libsmall.o libsmall.c
+gcc -shared -o libsmall.so libsmall.o
+\end{verbatim}
+\end{block}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{l'exemple: la librairie}
+\begin{exampleblock}{small.c}
+\small
+\listinginput[1]{1}{small.c}
+\end{exampleblock}
+\vfill
+\begin{block}{la version statique}
+\begin{verbatim}
+gcc -c -o small.o small.c
+gcc -o small.static libsmall.a small.o
+\end{verbatim}
+\end{block}
+\begin{block}{la version dynamique}
+\begin{verbatim}
+gcc -c -o small.o libsmall.c
+gcc -o small.dyn -L. -lsmall small.o
+    -Wl,-rpath=$(pwd) # $(PWD) pour le chemin courant
+\end{verbatim}
+\end{block}
+\end{frame}
+
+\begin{frame}
+\frametitle{Et puis il y a \emph{dlopen()}}
+
+\begin{alertblock}{le mode standard dynamique}
+Un code lié à une bibliothèque ne fonctionnera jamais sans.
+\end{alertblock}
+
+\begin{block}{les deux clefs:}
+\begin{itemize}
+\item \emph{dlopen()} charge une bibliotèque
+\item \emph{dlsym()} va chercher les fonctions
+\end{itemize}
+\end{block}
+
+\begin{block}{exemple d'utilisation}
+\begin{itemize}
+\item pour étendre les fonctionnalités d'une appli (perl, python, apache)
+\item pour eviter de charger du code inutilement
+\end{itemize}
+\end{block}
 \end{frame}
 
 \section{X11}
 
+\begin{frame}
+\frametitle{Histoire}
+\begin{block}{}
+\begin{itemize}
+\item \textbf{1984 création par le MIT}
+\item X est le successeur de W (sur system V)
+\item 1985 ajout de la couleur (DEC VAXstation)
+\item 1986 X10R2, X10R3, X10R4
+\item 1987 X11, 1988 X11R2, 1991 X11R5
+\item \textbf{1992 création de XFree86 (utilisé par Linux)}
+\item 1999 X11R6.5
+\item 2004 Xorg se sépare de XFree86 (pb de license)
+\item \textbf{depuis tout les UNIX libres utilisent Xorg}
+\end{itemize}
+\end{block}
+\begin{alertblock}{X ça pue !}
+Oui, c'est le prix de la compatibilité\ldots
+\end{alertblock}
+\end{frame}
+
+\begin{frame}
+\frametitle{X: serveur d'affichage}
+\begin{columns}
+\column{2in}
+\begin{block}{}
+\begin{itemize}
+\item gestionnaire de matériel
+\begin{itemize}
+\item carte graphique
+\item ecran
+\item clavier
+\item souris (et autres rongeurs)
+\end{itemize}
+\item protocol d'affichage (reseau)
+\item \textbf{serveur d'affichage}
+\end{itemize}
+\end{block}
+\column{2.5in}
+\begin{exampleblock}{le serveur X}
+\centering
+\includegraphics[height=40mm]{x}
+\end{exampleblock}
+\end{columns}
+\end{frame}
+
+\begin{frame}
+\frametitle{Applications X11}
+\begin{columns}
+\column{2.5in}
+\begin{block}{}
+Une application X11 se connecte au serveur X,
+et demande un affichage.
+\end{block}
+\column{2in}
+\begin{exampleblock}{}
+\centering
+\includegraphics[height=30mm]{x-mplayer-capcv}
+\end{exampleblock}
+\end{columns}
+\pause
+\vfill
+\begin{columns}
+\column{2.5in}
+\begin{block}{le Window Manager}
+\begin{itemize}
+\item application X11
+\item il créer les fenetres
+\item fourni un menu
+\end{itemize}
+\end{block}
+\begin{alertblock}{}
+KDE, GNOME, XFCE: envirronements de bureau
+\end{alertblock}
+\column{2in}
+\begin{exampleblock}{}
+\centering
+\includegraphics[height=30mm]{x-mplayer-capcv-twm}
+\end{exampleblock}
+\end{columns}
+\end{frame}
+
+\begin{frame}
+\frametitle{X11: résumé}
+\begin{exampleblock}{}
+\centering
+\includegraphics[height=60mm]{x-resume}
+\end{exampleblock}
+\end{frame}
+
 \end{document}
