Christophe Cérin – Christophe.Cerin at iutv.univ-paris13.fr
Remise en forme. Relire les derniers chapitres du cours de système du semestre 1 : Chapitre 4 et Chapitre 5. Pour réviser les notions vues au premier semestre ou dans un cours intro-introductif, voir le lien suivant à l'Idris. Vous pouvez aussi consulter Wikipedia pour un résumé des principales commandes Unix. le super résumé des commandes Bash. Il y a aussi un point spécial pour lire des fichiers texte. Concernant l'édition de programmes Bash et C, je vous conseille de travailler avec Emacs. Un résumé des commandes est disponible ici. Je vous passe également une distribution Linux Suse à lancer dans VirtualBox par exemple. Cette distribution est régulièrement mise à jour et contient les dernières versions de Bash, gcc et du noyau Linux. Selon l'ordinateur sur lequel vous allez faire tourner cette distribution, vous allez peut être avoir besoin :
Ecriture de scripts. Les objectifs de ce polycopié sont d'introduire la syntaxe du langage de commande bash et de faire du lien avec les notions fondamentales de tout langage de programmation : mise en séquence, choix et itération. Par ailleurs on remarquera que bash est un langage beaucoup moins typé que C par exemple : on peut ranger dans i un entier puis, plus loin dans le code source, une chaine. Par ailleurs, bash possède un mécanisme d'évaluation d'expressions un peu particulier et ne permet pas de faire directement de l'arithmétique sur les réels. Cela constitue également deux points de discussion du cours. En un mot, bash est replacé dans un contexte permettant de le situer entre les langages «à la C» et les langages dits de script (Perl, Python...)
Introduction aux expressions régulières. Il s'agit de décrire des motifs au moyen de classes prédéfinies normalisées. Ces classes prédéfinies sont des raccourcis pour faciliter la tâche du programmeur. Différents exemples de description de motifs via des classes sont présentés dans différents outils/langages. Il ne s'agit pas «d'apprendre» à programmer dans de nouveaux langages/outils mais de remarquer avant tout que l'outil des expressions régulières est présent dans de nombreux outils/langages... qui respectent des normes pour les décrire. Par ailleurs et bien que non étudiées, voir aussi les pages sur la norme UNICODE pour exprimer des motifs.
Unix tools et REGEX (introduction à sed, cut, tail, head et notions de awk). Bash peut être utilisé pour l'administration d'un système : des fichiers en langage bash permettent l'activation de services, la vérification qu'un service est actif... Pour réaliser ces tâches, les outils sed, tail, head et awk sont introduits pour filtrer le résultat de commandes Unix (cp, ls, ps, cut ...) ou de scripts bash (un script bash est un programme dans la syntaxe du langage bash qui peut faire des appels à des commandes Unix externes au langage). On en profite pour compléter la description de motifs qui sont mis en correspondance avec un texte à vérifier (notion d'expression régulière).
Le cours sur le langage C et les appels système. Les objectifs sont d'apprendre à programmer des appels aux fonctions internes du système d'exploitation. Les appels systèmes renvoient aux structures de données du noyau Unix. Les appels systèmes peuvent être effectués en mode utilisateur (un utilisateur ayant des droits minimaux peut les appeler) ou en mode noyau (le super utilisateur seul peut les effectuer – par exemple, reprogrammer l'ordonnanceur des processus). Ensuite nous passerons à la présentation des outils make et des outils d'archivage (ar)... Il s'agit ici d'aspects organisationnels visant à structurer les différentes phases permettant de passer d'un code source à un code exécutable. A cette occasion nous parlerons aussi des fichiers objets, des librairies partagées, des librairies statiques.
Le cours sur les processus... ou comment faire de la communication locale sous Unix au moyen de fork(), pipe(), mmap(), signal(), wait(), kill(). Les objectifs sont d'implémenter la possibilité de faire tourner plusieurs processus sur un même processeur physique. Les motivations pour réaliser cela sont de pouvoir passer la main alternativement à plusieurs utilisateurs de la machine (pour leur donner l'impression qu'ils disposent de la totalité de la machine à eux seuls – mais en fait le temps est partagé) ou de masquer la latence mémoire (problème récurrent qui explique en partie l'arrivée des processeurs double-noyau (dual-core)... et 16 cores à l'horizon 2010). Quand plusieurs processus partagent un seul processeur physique il y des problèmes d'accès à cette unique ressource et plus généralement aux ressources partagées (mémoire RAM, disque, carte réseau...). A partir de mises en œuvre en TD/TP nous introduirons les notions de section critique, de bloquage, de famine et d'accès exclusif (exclusion mutuelle) à une ressource qui sont autant de mots clés importants de la discipline «Système d'Exploitation». L'objectif des TP est donc de mettre à jour les problèmes... et d'apporter quelques solutions. Nous nous concentrons sur les notions de mémoire partagée, tubes et signaux... que plusieurs processus créés au moyen de la primitive fork() se partagent. Cette partie sera également étudiée et complétée en deuxième année par l'étude de la communication distante (mécanisme des sockets). Le cours se termine par une discussion technique sur les interfaces de programmation (structure sigaction) permettant la gestion / prise en compte / délivrance des signaux. C'est la partie la plus complexe car elle nous fait retomber très bas dans le noyau.
Le Cours sur les systèmes de fichiers, les disques est composé de deux parties : une partie sur les interfaces du langage C pour accéder aux disques et à certaines structures internes du gestionnaire de fichiers (inode) et une partie plus orientée sur les concepts (chemin de données, ordonnancement des I/O, performance, organisation RAID) et moins sur la programmation. L'objectif est de familiariser l'étudiant avec une large palette d'outils, de problèmes et de solutions pour garantir le stockage d'information sur un support de disque dur.
Je procède parfois à la relecture de vos notes de cours de «Système» depuis le début d'année afin de les noter. Voici des remarques sur certaines phrases trouvées dans vos copies et qui méritent une ré-écriture car ces phrases sont ambigues (dans le meilleur des cas) ou ne veulent rien dire (dans le pire des cas). Je vous demande de faire l'effort de ré-écriture... c'est à dire de faire un travail de fond.
Chapitre sur les processus, communication locale sous Unix :
Chapitre sur Bash :
Chapitre «Appels systeme / Compilation»
Par ailleurs, il aurait été bon de trouver, pour chaque chapitre de vos notes de cours, les informations suivantes (et en première page) : titre de la leçon, thématique centrale (quel est le problème qui est traité dans la leçon ?), les motivations, les mots clés importants (et définitions), l'organisation de la leçon... puis après tout cela, vous pouvez lister les détails techniques. En bref, comme je l'avais dit dans un précédent courrier, il faut commencer par un «mini sommaire» ! Il faut organiser vos notes de cours et ne pas tout mettre sur le même plan !
Un cours plante le décor, le contexte, donne du vocabulaire, expose une problématique (et certaines techniques de résolution qui seront mises en oeuvre en TD/TP). Un cours fait jouer les savoirs les uns par rapport aux autres autour d'un objet donné qui peut être très concret (exemple : les différents itérateurs de Bash) ou très abstrait (exemple : la prise en compte de l'accès exclusif aux ressources par des solutions logicielles). Encore une fois, c'est donc tout cela qu'il faut faire ressortir dans vos notes de cours afin de vous approprier les notions. De plus vous êtes impardonnables car à chaque début de cours je fais un résumé des épisodes précédents, donc vous avez de la matière pour rédiger vos notes !
À priori les travaux pratiques se préparent à l'avance. Lors de la séance, vous éditez, compilez, exécutez, observez vos résultats, modifiez, compilez, exécutez, améliorez, compilez, exécutez... jusqu'à ce que la solution soit acceptable (par votre enseignant et par vous !). Le programme est le suivant :
Les TPs correspondant aux Chapitre 4 et 5 se réalisent en se connectant en invité ou avec votre compte sur Moodle. Vous avez besoin des fichiers pour le TP4 et des fichiers pour le TP 5 ou encore des cours de S1 de Monsieur Bosc (voir aussi ici).
Exercices d'écriture de scripts (bash, sed) ; Exercices supplémentaires de Bash et de Sed. Des questions / réponses 'petits problèmes' sont disponibles. 3 séances ;
Le sujet du TP sur les expressions régulières ; Voir aussi le site sur les 8 regex que vous devez connaitre.
Il y a deux sujets sur la compilation. Le premier sujet requiert environ deux heures pour compiler : nous vous recommandons de lancer d'abord ce TP et, pendant les compilations, de passer au deuxième sujet du TP sur les techniques de compilation et d'utilisation des appels systèmes ; 2 séances ;
Le sujet de TD sur l'ordonnancement. Il s'agit, d'une part de se mettre à la place de l'ordonnanceur Linux pour ordonnancer des processus selon une politique et d'autre part d'introduire la problématique de gestion des processus Linux via les opérations de base (fork, wait, kill).
Le sujet des TPs sur la communication locale sous Unix (tube, signaux, mémoire partagée) ; 3 séances ;
Le sujet des Tps sur les disques, le système de gestion de fichiers (SGF), l'interface C pour accéder aux disques (open, fopen, read, fread, write, fwrite, sprintf...) ; 3 séances ;
Quelques conseils pour commencer. Pour chaque exercice, pensez toujours à faire une introduction pour exposer les problèmes (où est la «vraie» difficulté dans le problème ?), pour citer, discuter vos approches, faire des hypothèses, justifier vos choix, présenter les variables importantes et leurs rôles. Passez toujours par une phase de construction d'un algorithme avant de vous lancer dans la codification. Un code doit toujours découler d'une représentation abstraite la plus simple possible qui cerne et surmonte les difficultés essentielles du problème... et ceci même lorsque le sujet est un sujet relatif aux Systèmes d'Exploitation.
Au sujet de Bash, notez que ce langage de programmation est avant tout orienté «contrôle d'exécution». Vous avez utilisé des constructions comme for i in `ls`; do ... done, ou encore while read ligne; do .... done < $1, ou encore les tubes. En fait, les sujets ci dessous implémentent tous le schéma algorithmique suivant pour tous les objets i apartenant à une collection d'objets, faire - traiter i - finpour. Ce cadre de développement de programmes est radicalement différent de ce que vous faites en cours Introduction Java où la difficulté réside à décrire des structures et des opérations sur les structures et où, pour faire exister ces structures il suffit de leur appliquer l'opérateur new... et les voila vivant leurs vies.
Le sujet et la proposition de correction du controle court du 18 mars 2013.
Le sujet et la correction du controle court du 22 mars 2012.
Le sujet et la correction du controle long du 26 mai 2011.
Le sujet et la correction du controle court du 30 mars 2011.
Le sujet et la correction du controle court du 2 novembre 2010.
Le sujet et la correction du controle court du 20 mars 2010.
Le sujet et la correction du controle court du mardi 19 octobre 2009.
Le sujet et la correction du devoir à faire pour le 10 novembre 2009, 12:00:00.
Le sujet du devoir à faire pendant les vacances de Pâques. A rendre pour le 30 avril 2009, 12:00:00.
Le sujet et la correction du controle long du mercredi 24 juin 2009.
Le sujet et la correction du controle court de mars 2008.
Le sujet et des propositions de correction du controle court de novembre 2008 ainsi que celui de janvier 2009.
Le sujet du controle court de décembre 2007. Vous disposez également d'une version avec une vidéo. Ce document est à lire avec un Acrobat Reader récent. Sous Linux, cela ne doit pas fonctionner encore. Contrôle long de janvier 2008 (sujet et correction).
Le sujet du devoir à la maison à rendre pour le lundi 27 mars, 9h... et une proposition de correction. Le sujet de l'examen court. pour le semestre décalé de novembre 2005 est disponible. Pour vous préparer à la suite, travaillez par exemple sur une correction de la question 2. Cette correction comporte des explications (l'algorithme suivi). Par contre dans cette autre proposition de correction il n'y a aucune explication. Nous vous invitons à analyser le texte et à l'expliciter (justifier chaque ligne du code).
Le sujet de l'examen long de janvier 2006 pour le semestre décalé.
Le sujet de l'examen court du 13 novembre 2006 avec des propositions de correction (semestre décalé).
Des indications sur des éléments clés du langage Bash. Ces indications proviennent soit d'exemples traités dans le cours soit issus de questions d'étudiants. Vous pouvez vous servir de ces informations pour vos révisions.
Un cours complet.
La page de Andrew S. Tanenbaum
La page du livre Operating System Concepts Seventh Edition, par Avi Silberschatz, Peter Baer Galvin and Greg Gagne -- John Wiley & Sons, Inc. Voir aussi la page de W. Stallings pour un autre livre traitant des systèmes d'exploitation.
Les news en Anglais sur http://www.osnews.com/