Système d'Exploitation et Programmation Concurrente, semestre 1.

Vous trouverez sur cette page:

  • Les supports de cours couvant les fondamentaux (⚠ PAS LES ASPECTS PLUS AVANCÉS/CONTEMPORAINS)
  • Les supports de TD et TP

Prérequis au cours

  • C (niveau intermédiaire) (cf de début du sjet de la première séquence de TD/TP sur C si vous êtes débutants en C)
  • UNIX, comme utilisateur compétent: modèle (processus, fichiers, droits) et utilisation dans un terminal (identité, listes, controles, communications); relire les chapitre 7 et 8 du poly d'intro à Unix si besoin.

Bibliographie

Si vous cherchez des explications détaillées, organisées par chapitre thématique (Processus, Mémoire, Fichiers, Synchronisation, etc), lisez un livre.

Wikiversity

Certains codes des démos du cours ont été téléversées dans Wikiversity

Supports des cours des années antérieures (uniquement sur les fondamentaux)

Ces documents et vidéos mettent l'accent sur les fondamentaux. Ils ne sont pas la totalité du cours. Les aspects avancés présentés dans les CM concernent le comportement des systèmes d'exploitation contemporain. Si vous n'avez pas suivi le CM, les principaux points à travailler en plus sont listés.

Cours 1 : Introduction

Vidéos de la séance du 13 septembre :

partie 2

Certains codes des démos du cours ont été téléversées dans Wikiversity

absent des slides

  • impact du SE sur les performances d'une application

Cours 2 : Processus

absent des supports

  • isolation
  • les différentes techniques de virtualisation (machines virtuelles, conteneurs, hyperviseurs)

Cours 3 : Mécanismes de synchronisation et réalisation des processus

Vidéos de la séance du 27 septembre : Partie 1

absent des supports

  • modèle mémoire de C
  • autres outils de synchronisation contemporrain: channel, future/promise

Cours 4 : L'ordonnancement

absent des supports

  • Théorie de l'ordonnancement
  • Algorithmes parallèles et distribués

Cours 5 : Gestion mémoire

absent des supports

  • Les 18 pointeurs de Rust
  • GC de Go
  • ARC d'Objective-C

Cours 6 : Pagination

absent des supports

  • Les 18 pointeurs de Rust
  • GC de Go
  • ARC d'Objective-C

Cours 7 : Gestion de fichiers

absent des supports

  • SSD
  • Bandes
  • fonctionnalités multi-supports de grande taille: COW 🐄, Journal 📰, SHA 🐱

Cours 8 : Les systèmes distribués

Cours 9 : Les multi-processeurs

absent des supports

  • implémentation de la synchronisation: futex

Cours 10 : Programmation parallèle en mémoire partagée

absent des supports

  • vectorisation
  • tâches et dépendances de données

Archive confinement Covid-19 du printemps 2020 et 2021

Vous trouverez quelques supports détaillés utilisés lors du confinement Covid19 aux liens suivants

Les enseignants étaient souvent sur le serveur http://riot.ensimag.fr dans les salles SEPC et SEPC Permanence Numérique

Code des démos (second semestre et 2A en apprentissage)

Travaux dirigés et Travaux pratiques

Environnement de travail

  • Les squelettes sont prévus pour fonctionner avec l'environnement de référence de l'Ensimag (Ubuntu). Des Debian, CentOS et Manjaro récentes devraient fonctionner sans problème non plus. Tous les outils sont tous disponibles en standard dans votre distribution Linux.
  • Ils utilisent certains outils qu'il n'est pas nécessaire de comprendre mais qu'il faut utiliser pour effectuer les TPs:
    • Les Makefile pour la compilation et la construction du rendu, sont générés à l'aide de cmake
    • Les tests automatiques pour le shell utilisent un module standard pour le test des programmes interactifs du langage ruby (le paquetage de test est nommé ruby-minitest dans une Debian/Ubuntu récente, ou ruby-test-unit dans une Debian/Ubuntu plus ancienne)

Partager un projet avec votre binome dans gitlab.ensimag.fr

Pour rester simple, la source de votre gitlab sera la nouvelle origin et la branche s'appelle courante est master, mais c'est juste une convention.

  • Créer un projet VIDE (même pas un README) dans gitlab.ensimag.fr
  • Après avoir cloné le squelette, dans le répertoire de travail de git, nous allons changer les remotes:
1
2
3
4
5
git remote rename origin upstream # la source "prof" est renommée en upstream
git remote add origin URL-SSH-DU-PROJET-VIDE-DANS-GITLAB # crée une source distante en reprenant le nom "origin"
git push --set-upstream origin master # copie l'état courant vers l'entrepot vide, devenant la source et y créant une branche "master"
git pull -v # pour vérifier que vous utilisez votre gitlab
git push -v # pour vérifier que vous utilisez votre gitlab

Séquence 1 (TP encadré en salle + présentation TP 1 à la maison à rendre) (2 créneaux de TP de 1h30)

Activer votre compte Grenoble-INP alumnis et positionner votre redirection d'émail

https://alumni.grenoble-inp.fr/

Ce cours étant le dernier en tronc commun, il commence par une activité n'ayant rien à voir avec le système.

L'activation de votre compte Grenoble-INP alumnis, vous permettra d'avoir une adresse en @grenoble-inp.pro identique à votre adresse @grenoble-inp.org. La partie 'email' est gratuite et ne demande pas de devenir membre de l'association.

Activer votre compte alumni: https://alumni.grenoble-inp.fr/

Admis sur titre en 2A: la transmission de l'information n'a peut-être pas encore eu lieu. Il faudra patienter (parfois jusqu'en mars-avril) pour pouvoir créer votre compte.

TP encadré en salle machine (Le C pour le cours d'OS) {#CforOS}

Les sources du sujet ci-dessus sont dans deux entrepôts git sur le site codeberg.org (branche main) et github.com (branche master, le défaut). On peut les obtenir en faisant :

1
2
3
4
# C pour la programmation système
git clone https://codeberg.org/gmounie/CforOS.git
# C généraliste
git clone https://github.com/gmounie/ensimag-rappeldec.git

Les entrepôts sont les mêmes pour tout le monde. Ils ne sont accessibles qu'en lecture. Les commandes commme git push ne devraient pas fonctionner. Vous ne pouvez pas y sauvegarder à distance vos travaux. Corrections des bugs dans l'entrepôt: Faire git pull, pour les fusionner avec votre code.

  • Si vous voulez utiliser git plus avant, la page git du wiki avec des liens vers les tutoriaux.
  • Les solutions sont dans la branche solution (NDLR: Ne pas savoir faire un exercice est l'information utile ! La lecture de la solution ne vous apprendra pas ce que vous n'avez pas compris.)

TP allocateur mémoire, à faire à la maison et à rendre

  • TP allocateur mémoire virtuelle: Sujet
  • Les tests automatiques pour l'allocateur utilisent la bibliothèque C++ googletest (les paquets Ubuntu sont googletest et libgtest-dev)
  • Le module python, qui permet de faire des tests de votre allocateur en python utilise python3-dev. Vous devrez peut-être adapter le numéro de version (3.5, 3.9, etc) en fonction du python installé sur votre machine
  • Présentation TP allocateur Présentation

Nous vous conseillons de vous connecter à https://gitlab.ensimag.fr et de mettre en place une clef ssh sur votre compte (menu user en haut à droite, choisir profile, puis le bouton en haut à droite edit profile, puis dans le menu à gauche clefs ssh)

1
git clone git@gitlab.ensimag.fr:os/ensimag-malloc.git

Si vous ne vous êtes pas déjà connecté à gitlab.ensimag.fr et que vous n'avez pas mis en place une clef ssh, vous pouvez obtenir le squelette avec

1
git clone https://gitlab.ensimag.fr/os/ensimag-malloc.git

Si vous forkez le squelette, pensez à le mettre en private. Ces TP étant une partie de vos examens, ils sont soumis à la charte des projets (cf. https://teide.ensimag.fr/Charte_contre_la_fraude.php)

Pour ceux utilisant guix (isolation, reproductibilité), il est possible d'obtenir un shell avec les exécutables pour compiler le projet dans un container isolé avec la commande:

1
guix shell --pure -E LANG --container -F gcc-toolchain ruby ruby-minitest cmake make coreutils valgrind glibc-locales

Séquence 2 (2 créneaux de TD de 1h30)

Deux parties:

  1. Dekker-Peterson
  2. Présentation du TP shell

Dekker et Peterson

Présentation du TP shell à rendre

1
2
3
4
5
6
man fork
man 2 open # (il y a beaucoup de open: les appels systèmes sont en section 2)
info libc # (doc de référence de la GNU Libc de votre Linux, avec des explications détaillées et des exemples complets de code)
info libc "process creation example" # (l'exemple de code de la section Process)
info info # (tutorial de info)
emacs --eval '(info "libc")' # (ou dans emacs, `**`C-h`` ``i`**` pour accéder à toutes les pages info, avec une interface colorée et des liens clicables)

Les sources sont dans un entrepôt git sur le site github.com (branche master, le défaut). On peut les obtenir en faisant :

1
git clone https://github.com/gmounie/ensimag-shell.git

L'entrepôt est le même pour tout le monde. Il n'est donc accessible qu'en lecture. Les commandes commme git push ne devraient pas fonctionner. Vous ne pouvez pas y sauvegarder vos travaux.

  • Pour avoir un shell vraiment agréable, il peut utiliser la bibliothèque READLINE (édition de ligne, historique) (libreadline-dev dans une debian)
  • Les tests automatiques pour le shell utilisent un module standard pour le test des programmes interactifs du langage ruby (le paquetage de test est nommé ruby-minitest dans une débian récente, ou ruby-test-unit dans une debian plus ancienne)
  • Le shell utilise l'interpréteur scheme guile (version 1.8 ou 2.0 ou 3.0)(guile-3.0-dev dans une débian récente) - Segfault GDB à l'init de guile: dans l'ubuntu 22.04, un segfault (qui n'est pas un bug) est déclenché par le garbage collector de guile. Vous pouvez l'ignorer et faire cont.
  • FAQ TP Shell

Séquence 3 (2 créneaux de TD de 1h30)

Sujet du TD sur les moniteurs

Pour aller plus loin

Séquence 4 (1 créneau de TD de 1h30)

Introduction aux threads

Présentation du TP thread à rendre (Version C et C++)

1
git clone https://github.com/gmounie/ensimag-video.git
  • L'entrepôt est le même pour tout le monde. Il n'est donc accessible qu'en lecture. Les commandes commme git push ne devraient pas fonctionner. Vous ne pouvez pas y sauvegarder vos travaux.
  • Ce TP utilise les bibliothèques ogg, theora, vorbis et SDL2 (>= 2.0.4), ainsi que les entêtes de développement de ces bibliothèques (les include pour la compilation)

(noms Debian/Ubuntu: libsdl2-dev libogg-dev libvorbis-dev libtheora-dev)

  • Sur certaines machines de l'ensimag, l'accélération de l'affichage par la SDL2 ne fonctionne pas bien. Vous pouvez la désactiver
1
2
3
4
    Dans src/ensitheora.c, la ligne 34
    renderer = SDL_CreateRenderer(screen, -1, 0);
    peut être remplacée par
    renderer = SDL_CreateRenderer(screen, -1, SDL_RENDERER_SOFTWARE);
  • Tests: valgrind est votre ami (tools: helgrind et drd)
  • Coccinelle (spatch: semantic patch) pour la version C:
    • Disponible dans Ubuntu, Debian, Arch/Manjaro, Nix, Brew, etc.
    • Exception: Ubuntu 20.04, installation sous depuis la page Ubuntu launchpad, avec des mises à jour, cf https://launchpad.net/~npalix/+archive/ubuntu/coccinelle
    • sinon télécharger coccinelle à la main sur la page précédente
      1
      2
      wget https://launchpad.net/~npalix/+archive/ubuntu/coccinelle/+files/coccinelle_1.0.8~20.04npalix1_amd64.deb
      sudo dpkg -i coccinelle_1.0.8~20.04npalix1_amd64.deb
      
    • installation avec nix (sudo apt install nix; et vous ajouter au group nix-users).
      1
      2
      3
      4
      5
      # une seule fois
      nix-channel --add https://nixos.org/channels/nixpkgs-unstable
      # pour lancer un shell qui aura coccinelle en supplément
      nix-channel --update
      nix-shell -p coccinelle --command=bash
      

Séquence 5 (2 créneaux de TD de 1h30)

Sémaphore 1

Séquence 6 (2 créneaux de 1h30, 1 TD et 1 TP)

Mémoire virtuelle (1h30 TD)

TD mémoire virtuelle, TD mémoire virtuelle (version SV)

Mémoire: couplage mémoire (memory mapping) (1h30 de TP sur machine)

  • Sujet du TP couplage mémoire
  • Sources: elles sont dans un entrepôt git sur le site github.com (branche master, le défaut). Le programme utilise la bibliothèque SDL. (sous Debian/Ubuntu et dérivées,vous aurez besoin du paquet libsdl2-dev et/ou libsdl-dev). On peut obtenir le squelette de départ en faisant :
1
git clone https://github.com/gmounie/ensimag-shmem.git

Complément

TP OpenMP

  • Sujet du TP OpenMP
  • Sources: elles sont dans un entrepôt git sur le site github.com (branche master, le défaut). On peut les obtenir en faisant :
1
git clone https://github.com/gmounie/ensimag-openmp.git)

Annales d'examens

QCM (Quiz interactifs)

Si vous voyez un bug dans les corrections, merci de le faire remonter !

Planning SEPC (Cf. ADE)

Emploi du temps des cours et travaux dirigés de SEPC sont sur ADE.

  • Cours
    • 4MMSEPS1_CM_G1 : ISI, IF, SEOC
  • TD

Quelques liens divers

Suggestion des élèves

Livre

Vidéos

  • OS: 2 (suggestion de: Vincent Lefoulon)
  • Mémoire virtuelle: 3 (suggestion de: Vincent Lefoulon)

A propos de GIT

Pour plus d'information sur l'utilisation de Git dans un cadre semblable à celui des TPs de ce cours, vous pouvez consulter la page: page sur les entrepots git partagées

Les enseignants du premier semestre de 2A (ISI, IF)

Les enseignants du deuxième semestre de 2A (MMIS)

Les enseignants du deuxième semestre de 2AA (Alternants)