Ressources

Description officielle

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.

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.

Évaluations et échéancier des rendus

Les dates de remise sont des dates “au plus tard”, et s’entendent sur le fuseau horaire de Montréal, à 23:55 le jour de la date de remise. Tout rendu hors délai recevra la note de zéro (0), mais rien ne vous empêche de livrer avant l’échéance. Les règles concernant le plagiat seront appliquées sans aucune tolérance.

Desc % Du À
💾 TP0 Lazy Copy 10% ~Semaine 2 ~Semaine 4
💾 TP1 Lazy Copy Extended 10% ~Semaine 6 ~Semaine 11
💾 TP2 Lazy Copy Un-Extended Extended 20% ~Semaine 11 ~Semaine 14

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.

Semainier des séances

Les diapositives téléchargeables (pdf) datent de la sessions d’été 2021 mais le contenu est à jour et sera utilisé tel quel pour la session d’automne 2021.

# Semaine Diapositives Laboratoires
1 5 au 9 septembre 100 Introduction - pdf 🖼
110 Définition et rôles - pdf 🖼
120 Appels système - pdf 🖼 - progs 💾
130 Mécanismes matériels - pdf 🖼 - progs 💾
Pas de laboratoire
2 12 au 16 septembre 200 Processus - pdf 🖼
210 Threads - pdf 🖼
220 Mémoire des processus - pdf 🖼 - progs 💾
230 Vie et état - pdf 🖼
Lab1 ⌨️
Solutions du lab1
3 19 au 23 septembre 240 Création et terminaison - pdf 🖼 - progs 💾
241 fork et création de processus - pdf 🖼 - progs 💾
242 exec et recouvrement de processus - pdf 🖼 - progs 💾
243 exit et terminaison de processus - pdf 🖼 - progs 💾
Lab2 ⌨️
Solutions du lab2
4 26 au 30 septembre 250 Ordonnancement des processus - pdf 🖼 - progs 💾 Lab3 ⌨️
Solutions du lab3
5 3 au 7 octobre 300 Système de gestion de fichiers - pdf 🖼
310 Manipulation de fichiers - pdf 🖼
Quiz 1
Lab4 ⌨️
Solutions du lab4
6 10 au 14 octobre 320 Droits et utilisateurs - pdf 🖼
330 Répertoires - pdf 🖼 - progs 💾
Lab5 ⌨️
Solutions du lab5
7 17 au 21 octobre Annulé. Lab6 ⌨️
Solutions du lab6
8 🌼 24 au 28 octobre Examen intra
À la place du cours
Lab7 ⌨️
Solutions du lab7
9 31 octobre au 4 novembre 340 Traitement des fichiers ouverts - pdf 🖼 - progs 💾
350 Implémentation des systèmes de fichiers - pdf 🖼
Lab7 ⌨️
Solutions du lab7
Lab9 ⌨️
Solutions du lab9
10 7 au 11 novembre 400 Communication interprocessus - pdf 🖼
410 Signaux - pdf 🖼 - progs 💾
420 Tubes - pdf 🖼 - progs 💾
9 novembre: date limite d'abandon sans mention d'échec.
Lab10 ⌨️
Solutions du lab10
11 14 au 18 novembre 430 Sockets - pdf 🖼 - progs 💾
500 Synchronisation - pdf 🖼 - progs 💾
Lab11 ⌨️
Solutions du lab11
12 21 au 25 novembre 510 Section critique - pdf 🖼 - progs 💾
520 Outils de synchronisation - pdf 🖼 - progs 💾
530 Interblocage - pdf 🖼 - progs 💾
Quiz 2
Lab12 ⌨️
Solutions du lab12
13 28 novembre au 2 décembre 600 Gestion de la mémoire - pdf 🖼 - progs 💾
610 Pagination - pdf 🖼
620 Mémoire virtuelle - pdf 🖼
Lab13 ⌨️
Solutions du lab13
14 5 au 9 décembre 621 Mémoire virtuelle avancée - pdf 🖼
622 mmap et cie. - pdf 🖼 - progs 💾
623 Consommation mémoire - pdf 🖼 - progs 💾
Lab14 ⌨️
Solutions du lab14
15 ☀ 12 au 16 décembre Examen final
À la place du cours
Pas de laboratoire

Anciens examens

Liens

  • The Linux Kernel documentation. Documentation officielle du noyau Linux
  • LWN. Site d’information spécialisé sur le noyau linux et son ecosystème (Linux Weekly News)
  • POSIX.1-2017. Norme POSIX (Open Group et IEEE).
  • The Unix Tree. Code source original de nombreuses versions historiques de Unix.

Ressources de rappel pour les préalables

INF1070

INF2172

INF3135

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.

Anciennes versions du site web

Laboratoire 5 - Ordonnanceur

L’objectif de ce laboratoire est de se familiariser avec les stratégies d’ordonnancement standards. Ordonnancement Le programme suivant utilise une version modifiée du crible d’Ératosthène pour compter les nombres premiers inférieurs ou égaux à un nombre passé en argument. Il répartit l’exécution sur plusieurs threads (Comme au lab 3). #include<stdio.h> #include<stdlib.h> #include<stdbool.h> #include<math.h> #include<pthread.h> //variables globales bool *work_list = NULL; long int nb_thread ; long int maximum ; // Chaque thread travaille sur une fraction du tableau // Chacun commence à un indice différent puis "saute" par-dessus les autres void *do_work(void *ptr) { long int depart = (long int)ptr; bool is_prime= false; for(long int i = depart; i <= maximum; i+= nb_thread) { is_prime = true; // C'est inefficace, car on parcourt tous les entiers // au lieu de tester seulement les nombres premiers // mais c'est plus simple à coder (pas de synchronisation nécessaire) for(long int j=2;j <= (long int )sqrt((double)i); j++) { if(i%j == 0){ is_prime = false; break; } } if(is_prime){ work_list[i] = true; } } } int main(int argc, char **argv) { int nb=0, i, depart_argument; if (argc < 3) { fprintf(stderr, "Vous devez fournir la borne supérieure et le nombre de threads\n"); return 1; } char* endptr = NULL; maximum = strtol(argv[1], &endptr, 0); // Entier maximum à tester if (*endptr !

Laboratoire 6 - Systèmes de gestion des fichiers

L’objectif de ce laboratoire est de se familiariser avec le système de gestion des fichiers. Remarque: n’oubliez pas, lors de l’utilisation d’appels systèmes, de traiter les cas d’erreur. Attributs des fichiers et table des inodes L’objectif est d’écrire une version simplifiée du programme ls. Des options supplémentaires sont ajoutées dans le laboratoire suivant. Essayez de suivre les étapes suivantes : Écrivez un programme mini_ls qui, pour un fichier donné en argument, affiche à l’écran: le numéro d’inode, le type de fichier, les droits d’accès, le nombre de liens durs, l’uid et le gid propriétaires, la taille du fichier, et la date de dernière modification.

Laboratoire 6 - Systèmes de gestion des fichiers

Attributs des fichiers et table des inodes L’objectif est d’écrire une version simplifiée du programme ls. Essayez de suivre les étapes suivantes : Le programme mini_ls avec uid et gid #include <stdio.h> #include <sys/stat.h> #include <unistd.h> #include <sys/types.h> #include <string.h> #include <time.h> #include <sys/sysmacros.h> int main(int argc, char * argv[]) { struct stat statbuf; int retour_stat, i; char type[30]; char permission[4]; char droits[20] = ""; char Date_modification[30]; if (argc != 2) { printf("Usage: %s nom_du_fichier\n", argv[0]); return 1; } retour_stat = lstat(argv[1], & statbuf); if (retour_stat == -1) { perror("Erreur de la récupération des informations"); return 1; } switch (statbuf.

Laboratoire 7 - Droits et répertoires

Remarque: n’oubliez pas, lors de l’utilisation d’appels système, de traiter les cas d’erreur. Mini ls (suite) Modifiez le programme mini_ls du lab 6 pour: ajouter une option -n, qui, à la place d’afficher l’uid et le gid propriétaire, affiche le nom de l’utilisateur et du groupe propriétaire du fichier. Pour cela, utilisez les fonctions getpwuid et getgrgid afin de faire la conversion. Comparez votre programme avec la sortie de ls -lid.

Laboratoire 7 - Droits et répertoires

Mini ls (suite) -n pour afficher le nom du propriétaire et du groupe #include <stdio.h> #include <sys/stat.h> #include <pwd.h> #include <grp.h> #include <string.h> #include <sys/types.h> #include <time.h> #include <sys/sysmacros.h> int main(int argc, char* argv[]){ struct stat statbuf; int retour_stat, i; struct passwd *pw; struct group *gr; char type[30]; char permission[4]; char droits[20]=""; char Date_modification[30]; int arg = 1, show_name = 0; if(argc < 2){ printf("Usage: %s nom_du_fichier\n", argv[0]); return 1; } if (strcmp(argv[1], "-n") == 0) { arg = 2; show_name = 1; } retour_stat = lstat(argv[arg], &statbuf); if(retour_stat == -1){ perror("Erreur de la récupération des informations"); return 1; } switch (statbuf.

Laboratoire 9 - Traitement des fichiers ouverts

Remarque: n’oubliez pas, lors de l’utilisation d’appels système, de traiter les cas d’erreur. Redirection de fichiers Développez un programme redir.c avec l’usage ./redir IN OUT commande [argument...]. Ce programme permet d’exécuter une commande avec ses arguments, mais en redirigeant l’entrée standard depuis le fichier IN et la sortie standard ainsi que la sortie standard d’erreur vers le fichier OUT. Note: Les appels systèmes dup2 et creat peuvent vous être utiles.

Laboratoire 9 - Traitement des fichiers ouverts et des répertoires

Descripteur de fichier Le programme permet de créer un fichier resultat qui contient Programme Programme mystère. En effet, on a deux descripteurs qui pointent sur la même entrée dans la table des fichiers ouverts (TFO) (qui dans notre cas est le fichier resultat). Le premier descripteur est utilisé pour écrire Programme mystère\n, le deuxième est utilisé pour reculer le curseur de 9 donc le curseur est positionné après Programme , et enfin le premier descripteur est réutilisé pour réecrire Programme mystère\n.

Solution des exercices du laboratoire 1

Unix et ligne de commande #!/bin/bash #Question 1 ls -l | grep .txt | wc -l > f1 # Les extensions ne sont pas un moyen fiable pour identifier des fichiers, préférer la commande file # par exemple (peut être amélioré!) file -i * | grep 'text/plain' | wc -l > f1 #Question 2 head -5 /etc/hosts | tail -1 # ou tail -n +5 /etc/hosts | head -n 1 #Question 3 ln -s /bin/sh toto #Question 4 #chmod 777 --> utilisateur: rwx, groupe: rwx, autres: rwx #chmod 640 --> utilisateur: rw-, groupe: r--, autres: --- #chmod 005 --> utilisateur: ---, groupe: ---, autres: r-x #Question 5 #1 ls -1 /etc/c* #2 find /etc -maxdepth 2 -name "c*" 2> /dev/null #3 grep "^c" /usr/share/dict/words Programmation C Exercice 1 #include <stdio.