% INF3173 — Principes des systèmes d'exploitation % UQAM — Département d'informatique % Plan de cours — Été 2022 * Horaires, locaux et enseignants: * Site web du cours: Enseignement ============ Abdenbi, Moussa PK-4440 Groupes: 040 - Le [canal de discussion](https://mattermost.info.uqam.ca/forum/channels/inf3173) du cours est le moyen officiel de communication en dehors des séances de cours et/ou de laboratoire. En particulier il permettra d'interagir avec les enseignants, démonstrateurs et les autres étudiants. Un lien d'invitation vous sera envoyé par courriel. - Pour des questions plus spécifiques, personnelles ou pour relancer, contactez le professeur par courriel. - Aucune remise de TP ou de devoir par courriel ne sera acceptée. Le site web officiel du cours est . Il contient l'information à jour sur le cours ainsi que le matériel du cours (diapositives, énoncés, etc.). Description du cours ==================== Objectifs --------- Maîtriser et appliquer les concepts fondamentaux des systèmes d'exploitation. Comprendre les mécanismes et les politiques mises-en-oeuvre par les systèmes d'exploitation. Maîtriser la programmation système UNIX/Linux en C. Sommaire du contenu ------------------- Rôles, types et structure générale des systèmes d'exploitation. Mécanismes noyaux : appels systèmes, interruptions, modes d'exécution processeur. Gestion des processus : états des processus, création et terminaison (fork et exec). Multitâche : changement de contexte, fils (threads), ordonnancement des tâches. Gestion des fichiers : systèmes de fichiers, inodes, descripteurs de fichiers, fichiers spéciaux. Communication inter-processus : échanges de messages, signaux, tubes, mémoire partagée. Concurrence : synchronisation, sections critiques, interblocages. Gestion de la mémoire : adressage, allocation, protection, pagination, mémoire virtuelle. Entrées-sorties : pilotes, pseudo-périphériques. Les considérations de sécurité seront intégrées au développement de la matière. Modalité d'enseignement ----------------------- Ce cours comporte une séance obligatoire de laboratoire (2 heures). Préalables académiques ---------------------- - INF1070 - Utilisation et administration des systèmes informatiques - INF2171 - Organisation des ordinateurs et assembleur - INF3135 - Construction et maintenance de logiciels Objectif du cours ================= Présenter les concepts fondamentaux des systèmes d'exploitation (processus, threads, E/S, systèmes de fichiers, gestion de la mémoire, concurrence, parallélisme, communication, sécurité...). Illustrer les concepts présentés à travers l'utilisation du système Unix: programmation en C d'applications multiprocessus, synchronisation, communication... Formule pédagogique et matériel requis ====================================== Le cours et les laboratoires seront donnés en présentiel. Linux ----- Pour réaliser les exercices de laboratoire et les travaux pratiques, les étudiants doivent avoir accès a un ordinateur utilisant une distribution Linux avec les logiciels et bibliothèques nécessaires au développement d'application en C (gcc et autre). Dans le cadre du cours, nous utilisons des distributions basées sur Debian (dont Ubuntu), mais la plupart des autres distributions Linux à jour seront acceptables. MacOS X ou le Sous-système Windows pour Linux (WSL) **n'est pas suffisant** pour participer (et réussir) le cours. L'utilisation d'une machine virtuelle Linux est acceptable ainsi que l'utilisation des serveurs de l'UQAM [mise à disposition](https://wiki.uqam.ca/display/SWSI/Labunix) des étudiants comme `java.labunix.uqam.ca`. Contenu du cours ================ Le contenu indiqué ici est donné à titre indicatif. Semaine 1: Introduction ----------------------- - Définition des systèmes d'exploitation. - Composantes d'un ordinateur. - Rôles d'un système d'exploitation. - Mode noyau du processeur. - Appel système. - Interruptions et autres mécanismes matériels. - Éléments POSIX notables: man, errno, perror. Semaine 2: Processus -------------------- - Multitâche. - Threads. - Segments mémoire. - Vie et états. - Éléments POSIX notables: ps, getpid, pthreads, malloc, free. Semaine 3: Création et terminaison ---------------------------------- - Création de processus. - Recouvrement de processus. - Chargement de programmes. - Terminaison volontaire et involontaire. - Éléments POSIX notables: fork, execve, wait, exit. Semaine 4: Ordonnancement des processus --------------------------------------- - Ordonnanceurs et politiques d'ordonnancement. - Préemptifs et non-préemptifs. - Éléments POSIX notables: nice, sched. Semaine 5: Systèmes de fichiers ------------------------------- - Table des inodes. - Liens durs et symboliques. - Accès et modification des fichiers. - Types de systèmes de fichiers. - Éléments POSIX notables: stat, open, close, creat, read, write, mount. Semaine 6: Systèmes de fichiers (suite) --------------------------------------- - Droits des fichiers, utilisateur, processus. - Répertoires et résolution des chemins. - Appels POSIX notables: chmod, link, rename, opendir, readdir. Semaine 7: Systèmes de fichiers (à l'interne) --------------------------------------------- - Descripteur de fichiers. - Traitement des fichiers ouverts. - Adressage des fichiers. - Fiabilité de l'espace disque. - Éléments POSIX notables: dup2, sync. Semaine 8: Examen intra ----------------------- - La séance de laboratoire est maintenue. Semaine 9: Communication inter-processus ---------------------------------------- - Signaux. - Tubes simples et nommés. - Éléments POSIX notables: sigaction, kill, pipe, mkfifo. Semaine 10: Communication et synchronisation -------------------------------------------- - Sockets du domaine Unix. - Concurrence et parallélisme. - Situation de compétition. - Éléments POSIX notables: socket, bind, listen, connect. Semaine 11: Synchronisation --------------------------- - Section critique. - Mutex. - Sémaphore. - Interblocage. - Éléments POSIX notables: pthread_mutex_lock, pthread_mutex_unlock, sem_post, sem_wait. Semaine 12: Gestion de la mémoire --------------------------------- - Mémoire logique et physique. - Unité de la gestion de la mémoire (MMU). - Protection mémoire. - Base/limit. - Pagination. - Mémoire virtuelle et mémoire résidente. Semaine 13: Mémoire avancée --------------------------- - Copy-on-write. - Chargement et allocation à la demande. - Projection de fichiers en mémoire. - Communication par mémoire partagée. - Surengagement. - Problèmes d'allocation. - Fragmentation. - Éléments POSIX notables: mmap, brk, shm_open. Semaine 14: Sujets avancés -------------------------- - Entrées-sorties et pilotes. - Virtualisation et conteneurisation. - Autre sujets avancés. Semaine 15: Examen final ------------------------ - Pas de laboratoire. Modalités d'évaluation ====================== Description Pondération Échéance -------------------- ------------- ------------------ Travail pratique 0 10% Semaines 2 à 3 Quiz 1 5% Semaine 5 Travail pratique 1 10% Semaines 4 à 7 Examen intra 25% Semaine 8 Quiz 2 5% Semaine 12 Travail pratique 2 20% Semaines 12 à 15 Examen final 25% Semaine 15 Les travaux pratiques devront être réalisés individuellement et consistent en la réalisation d'utilitaires systèmes réalistes. Le TP0 est un petit travail d'échauffement qui se concentre sur la bonne utilisation d'appels systèmes POSIX en C. Le TP1 est un travail qui porte habituellement sur les systèmes de fichiers et/ou la gestion des processus. Le TP2 est un travail qui porte habituellement sur la programmation multiprocessus, multitâche et/ou la communication inter-processus. Aucun retard ne sera accepté pour les TP. L'étudiant doit obtenir une moyenne cumulée aux examens et aux quiz supérieure ou égale à 50% **et** une moyenne supérieure ou égale à 50% dans l'ensemble des évaluations du cours. Si ces seuils ne sont pas atteints, la mention échec sera automatiquement attribuée au cours, et ce, quelles que soient les notes obtenues. La note finale (en lettre, A+, A, etc.) pour le trimestre sera attribuée en fonction de l'atteinte des objectifs spécifiques à travers les évaluations. La distribution des résultats dans le groupe pourrait aussi être utilisée. Aucune autre opportunité (travail supplémentaire, etc.) d'augmenter le nombre de points ne sera accordée. Intégrité académique -------------------- En cas de plagiat ou de fraude, la sanction peut aller de la note zéro pour le travail ou l'examen, jusqu'à l'exclusion de l'université. Les règlements concernant le plagiat seront strictement appliqués. Pour plus de renseignements, consultez le site suivant : Médiagraphie ============ Les ressources suivantes sont recommandées. - SILBERSCHATZ, A., GAVIN, P.B., GAGNE, G. -- Operating Systems Concepts, 10TH EDITION, WILEY, 2018. - TANENBAUM, Andrew S. -- *Modern Operating Systems* -- PRENTICE HALL, 4RD ED., 2014. - TANENBAUM, Andrew S. -- *Système d'exploitation* -- PERSON EDUCATION, 3RD ED. (en français) Des ressources complémentaires sont disponibles - NUTT, G. -- *Operating system concepts* -- ADDISON WESLEY. - STALLING, W. -- *Operating systems Internals and Design Principles* -- PRENTICE HALL. - BIC, L.F. et SHAW, A.C. -- *Operating systems principles* -- PRENTICE HALL. - KERNIGHAN, B.W., RITCHIE, D.M. -- *The C programming language* -- PRENTICE HALL. - BLAESS, C. -- *Développement système sous Linux* -- EYROLLES - RIFFLET, J.M. -- *La programmation sous Unix* -- SCIENCE INTERNATIONAL, PARIS. - KERRISK M. -- *The Linux Programming Interface* -- NO STARCH PRESS. - GRAY, J.S. -- *Inteprocess communications in Linux* -- THE NOOKS AND GRANMIS. - ROBBINGS, K.A. et ROBBINGS, S. -- *Unix Systems Programming* -- PRENTICE HALL.