Objectifs

  • Connaître le rôle du système d’exploitation
  • Comprendre les mécanismes entre un programme et les couches sous-jacentes
  • Avoir une compréhension du lancement et de l’exécution d’un programme
  • Comprendre les accès mémoire
  • Dialoguer entre programmes et exécuter plusieurs mécanismes en parallèle

Le rôle de l’enseignant est de vous donner une meilleure compréhension qu’un LLM. À cette fin, toute utilisation d’IA générative est interdite pendant le TP (note de 0 en cas d’utilisation, utilisé vos neurones). Les IA génératives sont d’excellents outils pour travailler. En revanche, si vous déléguez votre apprentissage, vous n’apprendrez pas et vous n’aurez donc pas plus de valeur qu’une IA. En cas de doute des outils permettent de vérifié le taux d’utilisation d’IA seront utilisé.

Sujets abordés

  • Fonction et rôle d’un système d’exploitation (OS)
  • Système de fichier
  • Gestion des accès mémoire
  • Ordonnancement – Programmation concurrente – Partage des ressources
  • Communication inter-processus – Entrées/Sorties – Sockets

Disclaimer

En principe ce cours permet d’apprendre a programmer en C et sur tous système ainsi que le système lui-même. Y compris sur de l’embarqué. En intégrant l’enssemble des principes que vous avez vue dans vos cours précédents et les concrétisés d’un point de vue hardware et software. Par exemple :

Cependant, l’équipe pédagogique à demandé explicitement l’utilisation de Java pour ce cours. Même si les concepts sont proches, voire identiques, la JVM introduit un certain nombre d’interfaces et de mécanismes intermédiaires qui rendent les explications techniques parfois hasardeuses. Ainsi qu’un coût additionnel non négligeable. Seuls des langages comme C, C++, Rust ou d’autres langages similaires, produisant un binaire natif pour le système hôte (donc sans interpréteur et avec une gestion directe de la mémoire et des adresses), permettent de bien saisir la finesse du domaine.

Il est plus que recommander de voir le C durant votre cursus. Vous pouvez trouver des ressources sur ce site. Certaines parties seront disponible et expliqué en ASM, en C et en Java lorsque c’est possible. Exemples :

  • https://x.com/chessMan786/status/1961054485947531574
  • https://www.youtube.com/playlist?list=PL71Y0EmrppR0KyZvQWj63040UEzKQU7n8
  • https://w3.cs.jmu.edu/lam2mo/cs261_2019_08/syllabus.html

Le cours est rédigé en bon français, et les termes techniques sont présentés la première fois en français lorsque c’est possible. Cependant, les termes anglais seront majoritairement utilisés tout au long du cours et des TP, car ils sont prédominants dans leur usage. Il vous sera également plus simple de trouver des ressources et de consolider vos connaissances avec la terminologie anglaise.

Évaluation

  • 2 TP (60%) évalué aléatoirement (seul, sans internet, sans ia)
  • 1 DS (40%)
  • Controles surprise possible

Environnement de travail (Java)

L’ensemble des TPs se fera en Java, en utilisant :

  • JDK 17 ou supérieur : Ce qui est disponible sur vos postes.
  • Un IDE recommandé : VS Code + extension Java ou ce que vous connaissez.
  • Ligne de commande : javac (compilation) et java (exécution)
java -version
javac -version

Point bonus (C, C++, Rust)

Un bonus (+5) sera attribué si vous proposez une implémentation équivalente en langage C pour tous les exercices. Cela vous permettra de :

  • Comprendre la différence entre un langage interprété/VM (Java) et un langage compilé natif (C).
  • Approfondir la gestion mémoire et les appels systèmes.

Un environnement Linux est fortement recommandé pour travailler sur les notions système particulièrement concernant ce point bonus si vous souhaitez mon assistance.

  • WSL2 (Windows Subsystem for Linux) si vous êtes sous Windows.
  • VM VirtualBox avec n’importe quelle distribution (Ubuntu, Slackware, Gentoo, Arch, minix …).

Compilateur recommandé (Linux/macOS) :

gcc programme.c -o programme
./programme

Sous Windows, utilisez WSL2 ou MinGW.

Point d’excellence

Pour chaque question bien répondue et enrichie par une analyse approfondie : +1 à +2 points supplémentaires.

Ces points visent à valoriser :

  • La pertinence des explications.
  • La profondeur de l’analyse (capacité à aller au-delà de la simple réponse attendue).
  • La mobilisation d’exemples, de références ou de comparaisons utiles.
  • L’esprit critique et la capacité à relier la réponse à un contexte plus large.

Outils en ligne

Si vous ne souhaitez pas installer localement :

Rendu des travaux (GitHub)

  • Tous les rendus se font sur GitHub, dans un seul dépôt privé par étudiant.
  • 1 seul dépôt privé contenant tous les TPs.
  • Nommage obligatoire : TP-numero-NOM-Prénom
  • Ajoutez l’enseignant comme collaborateur du dépôt pour qu’il ait accès à vos travaux.
  • Malus si push en dehors des heures de cours
  • Les sources doivent scrupuleusement concorder aux définition initiales

Commandes utiles :

git clone <url-du-repo>
git add .
git commit -m "TP1 terminé"
git push origin main