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