% INF3173 — Principes des systèmes d'exploitation % UQAM — Département d'informatique % Plan de cours — Été 2020 * Horaires, locaux et enseignants: Responsable(s) du cours ======================= Coordination ------------ Beaudry, Éric PK-4635 poste 4005 Enseignement ------------- Hamad, Ammar PK-4115 poste 3699 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'exploitations. 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 ---------------------- - 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, ... Contenu du cours ================ Semaine 1: Introduction ----------------------- - Définition des systèmes d'exploitation - Composantes d'un ordinateur - Mode noyau du processeur - Rôles d'un système d'exploitation - Interprète de commande (shell) - Administrateur système (root) - Appel système Semaine 2: Processus -------------------- - Création et terminaison. - Segments mémoire. - vie et états. Semaine 3: Ordonnancement des processus --------------------------------------- - Ordonnanceurs et politiques d'ordonnancement. - Préemptifs et non-préemptifs Semaine 4: Processus sous Unix ------------------------------ - appel systèmes notables: fork exec wait Semaine 5: Systèmes de fichiers ------------------------------- - Table des inodes - Droits des fichiers, utilisateur, processus - Liens durs et symboliques. - Accès et modification des fichiers. - Descripteur de fichiers - appels systèmes notables: stat open close read write Semaine 6: Systèmes de fichiers (suite) --------------------------------------- - Adressage des fichiers. - Traitement des fichiers ouverts. - Fiabilité de l'espace disque. Semaine 7: Communication inter-processus ---------------------------------------- - Signaux. - Appels systèmes notables: sigaction kill Semaine 8: Examen intratrimestriel ---------------------------------- - Note: la séance de laboratoire est maintenue Semaine 9: Communication par tubes ---------------------------------- - Tubes simples. - Tubes nommés. - Appels systèmes notables: pipe dup2 Semaine 10: Concurrence ----------------------- - Thread. - Section critique. - Sémaphores. - Interblocage Semaine 11: Gestion de la mémoire --------------------------------- - Allocation contiguë - Base/limit - Problèmes d'allocation. - Fragmentation Semaine 12: Pagination ---------------------- - Mémoire virtuelle. - Protection mémoire. - Copy-on-write. Semaine 13: Entrées-sorties --------------------------- - Pilote. - Asynchronisme. - Pseudo-périphériques. Semaine 14: Sujets avancés -------------------------- - Virtualisation - Conteneurs - Autres sujets possibles - Révision Semaine 15: Examen final ------------------------ - Note: pas de séance de laboratoire Modalités d'évaluation ====================== Description Pondération Échéance ------------------------- ------------- --------------------- Travail pratique 1 20% Jeudi, 18 juin 2020 Examen intratrimestriel 30% Jeudi, 25 juin 2020 Travail pratique 2 20% Jeudi, 13 août 2020 Examen final 30% Jeudi, 13 août 2020 Le TP1 portera sur les systèmes de fichiers. Le TP2 portera sur la programmation concurente et/ou la communication inter-processus. L'étudiant doit obtenir une moyenne cumulée aux examens supérieure ou égale à 50%. Si ces seuils ne sont pas atteints, la mention échec sera automatiquement attribuée au cours et ce, quelles que soient les notes obtenues. Modalités des examens --------------------- L'utilisation de documentation personnelle (notes de cours, manuels) n'est pas permise à l'examen. Des question relatives aux travaux pratiques pouront faire parti des examens. Travaux pratiques ----------------- Aucun retard ne sera accepté pour les TP. La partie programmation des TP sera effectuée dans un environnement Unix en utilisant le langage C avec le compilateur gcc. Tout étudiant pourra éventuellement être soumis à un test oral concernant le travail pratique remis. Ce test fera partie de la correction de ce même travail pratique. Médiagraphie ============ Les ressoucres suivantes sont recommandés. - 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. - 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. - RIFFLET, J.M. -- *La programmation sous Unix* -- SCIENCE INTERNATIONAL, PARIS. - GRAY, J.S. -- *Inteprocess communications in Linux* -- THE NOOKS AND GRANMIS - ROBBINGS, K.A. et ROBBINGS, S. -- *Unix Systems Programming* -- PRENTICE HALL.