Changeset 201
- Timestamp:
- 11/01/08 09:42:56 (15 years ago)
- Location:
- trunk/unix
- Files:
-
- 4 added
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/unix/Makefile
r200 r201 24 24 process.png \ 25 25 fork.png \ 26 compil.png 26 compil.png \ 27 x.png \ 28 x-mplayer-capcv.png \ 29 x-mplayer-capcv-twm.png \ 30 x-resume.png \ 27 31 28 32 unix_FIGURES= \ -
trunk/unix/unix.tex
r199 r201 140 140 \textbf{Norme POSIX:} 141 141 standard 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} 154 Ensemble 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} 142 164 \end{frame} 143 165 … … 546 568 \end{frame} 547 569 548 \begin{frame} 570 \begin{frame}[fragile] 549 571 \frametitle{les threads} 550 572 \begin{block}{Sépare un processus en deux} … … 565 587 \end{block} 566 588 567 \begin{alertblock}{Linux: libpthread (glibc)} 568 Les threads sont POSIX. 569 589 \begin{alertblock}{Linux: libpthread (glibc) POSIX} 570 590 Je ne garantie pas que tout les UNIX fournissent le support des threads 571 591 \end{alertblock} 592 \begin{exampleblock}{} 593 \small 594 \begin{verbatim} 595 [olivier@andromede unix]$ ps aux | grep transcode 596 PID %CPU %MEM VSZ RSS TIME COMMAND 597 3477 124 1.3 119972 41344 36:32 transcode 598 \end{verbatim} 599 \end{exampleblock} 572 600 \end{frame} 573 601 … … 647 675 \begin{frame} 648 676 \frametitle{la logique} 649 \includegraphics[height=50mm]{compil} 650 \end{frame} 651 652 \begin{frame} 653 \frametitle{le code executable} 677 \begin{columns} 678 \column{2in} 679 \includegraphics[height=40mm]{compil} 680 \column{2.5in} 654 681 \begin{block}{un quoi ?} 655 682 \begin{itemize} … … 664 691 \end{itemize} 665 692 \end{block} 666 \end{frame} 667 668 \subsection{Programme} 669 670 \begin{frame}[fragile] 671 \frametitle{programme} 672 \begin{exampleblock}{empty.c} 673 \listinginput[1]{1}{empty.c} 674 \begin{verbatim} 675 gcc -o empty empty.c 676 \end{verbatim} 677 \end{exampleblock} 693 \end{columns} 694 \end{frame} 695 696 \subsection{Bibliothèques} 697 698 \begin{frame} 699 \frametitle{quand c'est propres} 700 \begin{block}{Normallement un programme fournit} 701 \begin{itemize} 702 \item foo.h: l'entête pour la compilation 703 \item libfoo.so.1: la librairie utilisée, versionnée 704 \item libfoo.so: (lien) pour l'éditeur de lien 705 \item libfoo.a: la version statique 706 \end{itemize} 707 \end{block} 708 709 \begin{block}{le point sur les dynamiques} 710 \begin{itemize} 711 \item avantages: 712 \begin{itemize} 713 \item les maj sont répercutés sans recompilation des applis 714 \item factorisation du code dans la RAM et sur le disque 715 \end{itemize} 716 \item inconvénients 717 \begin{itemize} 718 \item doit être disponible lors de l'éxecution 719 \end{itemize} 720 \end{itemize} 721 \end{block} 722 \end{frame} 723 724 \begin{frame}[fragile] 725 \frametitle{Trouver les dynamiques} 726 \begin{block}{la recherche} 727 \begin{itemize} 728 \item codé dans l'executable (\emph{rpath}) 729 \item codé en dur: \verb+/lib(64)+, \verb+/usr/lib(64)+ 730 \item indiqués dans ld.so.conf 731 \end{itemize} 732 \end{block} 733 734 \begin{exampleblock}{ldd} 735 \begin{small} 736 \begin{verbatim} 737 [olivier@andromede unix]$ ldd /bin/rm 738 linux-gate.so.1 => (0xffffe000) 739 libc.so.6 => /lib/i686/libc.so.6 (0xb7ee3000) 740 /lib/ld-linux.so.2 (0xb8064000) 741 \end{verbatim} 742 \end{small} 743 \end{exampleblock} 744 745 \begin{alertblock}{linux-gate.so.1} 746 Code injecté directement par le kernel, ignorez le ! 747 \end{alertblock} 748 \end{frame} 749 750 \begin{frame}[fragile] 751 \frametitle{l'exemple: la librairie} 752 \begin{exampleblock}{libsmall.h} 753 \small 754 \listinginput[1]{1}{libsmall.h} 755 \end{exampleblock} 756 \begin{exampleblock}{libsmall.c} 757 \small 758 \listinginput[1]{1}{libsmall.c} 759 \end{exampleblock} 760 \vfill 761 \begin{block}{la version statique} 762 \begin{verbatim} 763 gcc -c libsmall.o libsmall.c 764 ar rcs libsmall.a libsmall.o 765 \end{verbatim} 766 \end{block} 767 \begin{block}{la version dynamique} 768 \begin{verbatim} 769 gcc -c libsmall.o libsmall.c 770 gcc -shared -o libsmall.so libsmall.o 771 \end{verbatim} 772 \end{block} 773 \end{frame} 774 775 \begin{frame}[fragile] 776 \frametitle{l'exemple: la librairie} 777 \begin{exampleblock}{small.c} 778 \small 779 \listinginput[1]{1}{small.c} 780 \end{exampleblock} 781 \vfill 782 \begin{block}{la version statique} 783 \begin{verbatim} 784 gcc -c -o small.o small.c 785 gcc -o small.static libsmall.a small.o 786 \end{verbatim} 787 \end{block} 788 \begin{block}{la version dynamique} 789 \begin{verbatim} 790 gcc -c -o small.o libsmall.c 791 gcc -o small.dyn -L. -lsmall small.o 792 -Wl,-rpath=$(pwd) # $(PWD) pour le chemin courant 793 \end{verbatim} 794 \end{block} 795 \end{frame} 796 797 \begin{frame} 798 \frametitle{Et puis il y a \emph{dlopen()}} 799 800 \begin{alertblock}{le mode standard dynamique} 801 Un code lié à une bibliothèque ne fonctionnera jamais sans. 802 \end{alertblock} 803 804 \begin{block}{les deux clefs:} 805 \begin{itemize} 806 \item \emph{dlopen()} charge une bibliotèque 807 \item \emph{dlsym()} va chercher les fonctions 808 \end{itemize} 809 \end{block} 810 811 \begin{block}{exemple d'utilisation} 812 \begin{itemize} 813 \item pour étendre les fonctionnalités d'une appli (perl, python, apache) 814 \item pour eviter de charger du code inutilement 815 \end{itemize} 816 \end{block} 678 817 \end{frame} 679 818 680 819 \section{X11} 681 820 821 \begin{frame} 822 \frametitle{Histoire} 823 \begin{block}{} 824 \begin{itemize} 825 \item \textbf{1984 création par le MIT} 826 \item X est le successeur de W (sur system V) 827 \item 1985 ajout de la couleur (DEC VAXstation) 828 \item 1986 X10R2, X10R3, X10R4 829 \item 1987 X11, 1988 X11R2, 1991 X11R5 830 \item \textbf{1992 création de XFree86 (utilisé par Linux)} 831 \item 1999 X11R6.5 832 \item 2004 Xorg se sépare de XFree86 (pb de license) 833 \item \textbf{depuis tout les UNIX libres utilisent Xorg} 834 \end{itemize} 835 \end{block} 836 \begin{alertblock}{X ça pue !} 837 Oui, c'est le prix de la compatibilité\ldots 838 \end{alertblock} 839 \end{frame} 840 841 \begin{frame} 842 \frametitle{X: serveur d'affichage} 843 \begin{columns} 844 \column{2in} 845 \begin{block}{} 846 \begin{itemize} 847 \item gestionnaire de matériel 848 \begin{itemize} 849 \item carte graphique 850 \item ecran 851 \item clavier 852 \item souris (et autres rongeurs) 853 \end{itemize} 854 \item protocol d'affichage (reseau) 855 \item \textbf{serveur d'affichage} 856 \end{itemize} 857 \end{block} 858 \column{2.5in} 859 \begin{exampleblock}{le serveur X} 860 \centering 861 \includegraphics[height=40mm]{x} 862 \end{exampleblock} 863 \end{columns} 864 \end{frame} 865 866 \begin{frame} 867 \frametitle{Applications X11} 868 \begin{columns} 869 \column{2.5in} 870 \begin{block}{} 871 Une application X11 se connecte au serveur X, 872 et demande un affichage. 873 \end{block} 874 \column{2in} 875 \begin{exampleblock}{} 876 \centering 877 \includegraphics[height=30mm]{x-mplayer-capcv} 878 \end{exampleblock} 879 \end{columns} 880 \pause 881 \vfill 882 \begin{columns} 883 \column{2.5in} 884 \begin{block}{le Window Manager} 885 \begin{itemize} 886 \item application X11 887 \item il créer les fenetres 888 \item fourni un menu 889 \end{itemize} 890 \end{block} 891 \begin{alertblock}{} 892 KDE, GNOME, XFCE: envirronements de bureau 893 \end{alertblock} 894 \column{2in} 895 \begin{exampleblock}{} 896 \centering 897 \includegraphics[height=30mm]{x-mplayer-capcv-twm} 898 \end{exampleblock} 899 \end{columns} 900 \end{frame} 901 902 \begin{frame} 903 \frametitle{X11: résumé} 904 \begin{exampleblock}{} 905 \centering 906 \includegraphics[height=60mm]{x-resume} 907 \end{exampleblock} 908 \end{frame} 909 682 910 \end{document}
Note: See TracChangeset
for help on using the changeset viewer.