Descriptif
Nous expliquerons les concepts fondamentaux qui sont à la base de tous les systèmes informatiques et nous montrerons comment ces idées affectent la correction, la performance et l'utilité de n'importe quel programme d'application.
Ce cours sert d'introduction aux étudiants qui vont ensuite développer des matériels et des logiciels systèmes. Mais il pousse aussi les étudiants à devenir les rares programmeurs qui savent comment les choses fonctionnent et comment les réparer lorsqu'elles tombent en panne. Ce n'est pas un cours réservé aux geeks, c'est un cours pour tous les programmeurs !
TD : Les TD sont le coeur de ce cours et ils illustrerons comment dans la pratique quotidienne de la programmation. Entre autre choses, nous ferons de la rétro-ingénierie sur un programme binaire, mettrons en oeuvre un dépassement de tampon, optimiserons une architecture de processeur et réaliserons notre propre allocateur de mémoire.
Prérequis : Les étudiants doivent être familiarisé avec la programmation. Toute expérience avec les langages C ou C++ est un plus, mais si vous n'avez qu'une expérience avec Java, nous vous aiderons. Nous n'attendons aucune expérience antérieure du hardaware, du langage machine ou de la programmation en langage d'assemblage.
Langue : Les cours son en français ou anglais, selon la préférence des étudiants
Evaluation : Les labos sont notés + un examen final écrit
Diplôme(s) concerné(s)
- MScT-Internet of Things : Innovation and Management Program (IoT)
- M1 Système Cyber Physique
- M1 Cyber - Cybersecurity
- M1 PDS - Parallel and Distributed Systems
- Programmes d'échange internationaux
- M1 HPDA - High Performance Data Analytics
- M2 PDS - Parallel and Distributed Systems
- M2 HPDA - High Performance Data Analytics
- Non Diplomant
- M1 Innovation, Entreprise et Société
- M1 IGD - Interaction, Graphic and Design
- MScT-Cybersecurity : Threats and Defenses
- Titre d’Ingénieur diplômé de l’École polytechnique
- M1 Fondements de l'Informatique MPRI
Parcours de rattachement
- PA-Panaché P1
- M1 PDS - Parallel and Distributed Systems - Master 1A
- M1 Cyber - Cybersecurity - Master 1A
- M2 PDS - Parallel and Distributed Systems - Master 2A
- M1 IGD - Interaction, Graphic and Design - Master 1A
- M1 HPDA - High Performance Data Analytics - Master 1A
- M2 HPDA - High Performance Data Analytics - Master 2A
- MScT CTD - Semestre 1
- MScT IOT - Semestre 3
- PA - Innovation Technologique
- PA - Informatique
- M1CPS - Semestre 1 - Tronc Commun
- M1MPRI - Electifs hors maquette
Format des notes
Numérique sur 20Littérale/grade réduitPour les étudiants du diplôme MScT-Internet of Things : Innovation and Management Program (IoT)
Le rattrapage est autorisé (Note de rattrapage conservée)- Crédits ECTS acquis : 4 ECTS
La note obtenue rentre dans le calcul de votre GPA.
Pour les étudiants du diplôme M1 IGD - Interaction, Graphic and Design
Le rattrapage est autorisé (Note de rattrapage conservée)- Crédits ECTS acquis : 5 ECTS
Pour les étudiants du diplôme M1 PDS - Parallel and Distributed Systems
Le rattrapage est autorisé (Note de rattrapage conservée)- Crédits ECTS acquis : 5 ECTS
Pour les étudiants du diplôme Titre d’Ingénieur diplômé de l’École polytechnique
Le rattrapage est autorisé (Note de rattrapage conservée)- Crédits ECTS acquis : 5 ECTS
La note obtenue rentre dans le calcul de votre GPA.
Pour les étudiants du diplôme M1 Fondements de l'Informatique MPRI
L'UE est acquise si note finale transposée >= C- Crédits ECTS acquis : 5 ECTS
Pour les étudiants du diplôme M1 HPDA - High Performance Data Analytics
Le rattrapage est autorisé (Note de rattrapage conservée)- Crédits ECTS acquis : 5 ECTS
Pour les étudiants du diplôme M1 Système Cyber Physique
Le rattrapage est autorisé (Note de rattrapage conservée)- Crédits ECTS acquis : 5 ECTS
Pour les étudiants du diplôme M1 Cyber - Cybersecurity
Le rattrapage est autorisé (Note de rattrapage conservée)- Crédits ECTS acquis : 5 ECTS
Pour les étudiants du diplôme MScT-Cybersecurity : Threats and Defenses
Le rattrapage est autorisé (Note de rattrapage conservée)- Crédits ECTS acquis : 4 ECTS
Pour les étudiants du diplôme Non Diplomant
L'UE est acquise si note finale transposée >= C- Crédits ECTS acquis : 5 ECTS
Pour les étudiants du diplôme M2 PDS - Parallel and Distributed Systems
Le rattrapage est autorisé (Note de rattrapage conservée)Pour les étudiants du diplôme M1 Innovation, Entreprise et Société
Le rattrapage est autorisé (Note de rattrapage conservée)- Crédits ECTS acquis : 5 ECTS
La note obtenue rentre dans le calcul de votre GPA.
Pour les étudiants du diplôme Programmes d'échange internationaux
Le rattrapage est autorisé (Note de rattrapage conservée)- Crédits ECTS acquis : 5 ECTS
La note obtenue rentre dans le calcul de votre GPA.
Pour les étudiants du diplôme M2 HPDA - High Performance Data Analytics
Le rattrapage est autorisé (Note de rattrapage conservée)Programme détaillé
Ce cours couvrira la plupart des interfaces clés entre les programmes d'utilisateur et bare-metal, y compris :
- La représentation et manipulation des informations
Nous abordons l'arithmétique informatique, en mettant l'accent sur les propriétés des représentations non signées et en complément à deux qui affectent les programmeurs. Une bonne compréhension de l'arithmétique informatique est essentielle pour écrire des programmes fiables : le débordement arithmétique est une source courante d'erreurs de programmation et de vulnérabilités en matière de sécurité.
- Représentation des programmes au niveau des machines
Nous apprenons à lire un code machine x86-64 généré par un compilateur C. Nous abordons l'ensemble d'instrucitons de base et la mise en oeuvre des procédures, y compris l'allocation de la pile, les conventions d'utilisation des registres et le passage de paramètres. Nous abordons la manière dont différentes structures de données sont attribuées et obtenues. Nous utilisons également la vue des programmes au niveau des machines comme moyen de comprendre les vulnérabilités les plus fréquentes de code de sécurité, comme le dépassement de tampon.
- Architecture de processeur
Nous abordons les éléments de logique et séquentielle puis nous montrerons comment ces éléments peuvent être combinés dans un chemin de données qui exécute un sous-ensemble simplifié de l'ensemble d'instructions x86-64. Nous commencerons par la conception d'un chemin de données , très symple mais pas très rapide, et nous allons ensuite introduire le pipeline, où les différentes étapes nécessaires au traitement d'une instruction sont mises en œuvre en tant qu'étapes distinctes et peuvent être exécutées en parallèle. Le dernier pipeline du processeur en cinq étapes sera plus proche des architectures modernes, et nous montrerons comment un programmeur peut accélérer son code en augmentant le parallélisme d'instructions caché dans ses programmes.
- La hiérarchie de mémoire
La mémoire système n'est pas un linéaire avec un temps d'accès uniforme. En pratique, une mémoire système est une hiérarchie de périphériques de stockage avec différentes capacités, coûts et temps d'accès. Nous abordons les différents types de mémoires RAM et ROM et la géométrie et l'organisation de disque magnétique et de SSD. Nous décrirons comment ces périphériques de stockage sont arrangés dans une hiérarchie et comment cette hiérarchie est rendue possible par le principe de localité. Nous montrerons comment améliorer la performance des programmes d'application en améliorant leur localité temporelle et spatiale.
- Le structure de contrôle exceptionnel
Nous allons ici au-delà du modèle à programme unique en introduisant le concept général de structure de contrôle exceptionnel. Nous abordons des exemples de structure de contrôle exceptionnel qui existe à tous les niveaux du système, allant des exceptions et interruptions matérielles de faible niveau en passant par des changements de contextes entre processus concurrents, des changements brusques de structure de contôle causés par la réception de signaux kernels, et les sauts non-locaux en C qui brisent la discipline de la pile.
- Mémoire virtuelle
L'espace de mémoire virtuelle est juste un tableau de octets que le programme peut dubdiviser en différentes unités de stockage. Cependant nous montrerons comment différents processus simultanés peuvent utiliser chacun une série d'adresses identiques, en partageant certaines pages mais en ayant des copies individuels des autres. Cela aide le programmeur à comprendre les effets des programmes contenant des erreurs de référencement de la mémoire, telles que les fuites de stockage et les références de pointeurs non valides.