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)
- Programmes d'échange internationaux
- M1 IES - Innovation, Entreprise et Société
- M1 CPS - Système Cyber Physique
- MScT-Cybersecurity
- Non Diplomant
- Titre d’Ingénieur diplômé de l’École polytechnique
Parcours de rattachement
Format des notes
Numérique sur 20Littérale/grade réduitPour les étudiants du diplôme Programmes d'échange internationaux
Vos modalités d'acquisition :
TD notés (25%) + partiel (épreuve écrite, 25%) + examen final (épreuve écrite, 50%)
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 MScT-Cybersecurity
Vos modalités d'acquisition :
TD notés (25%) + partiel (épreuve écrite, 25%) + examen final (épreuve écrite, 50%)
Le rattrapage est autorisé (Note de rattrapage conservée)- Crédits ECTS acquis : 4 ECTS
Pour les étudiants du diplôme Titre d’Ingénieur diplômé de l’École polytechnique
Vos modalités d'acquisition :
TD notés (25%) + partiel (épreuve écrite, 25%) + examen final (épreuve écrite, 50%)
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 MScT-Internet of Things : Innovation and Management Program (IoT)
Vos modalités d'acquisition :
TD notés (25%) + partiel (épreuve écrite, 25%) + examen final (épreuve écrite, 50%)
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 CPS - Système Cyber Physique
Vos modalités d'acquisition :
TD notés (25%) + partiel (épreuve écrite, 25%) + examen final (épreuve écrite, 50%)
Le rattrapage est autorisé (Note de rattrapage conservée)- Crédits ECTS acquis : 5 ECTS
Pour les étudiants du diplôme M1 IES - Innovation, Entreprise et Société
Vos modalités d'acquisition :
TD notés (25%) + partiel (épreuve écrite, 25%) + examen final (épreuve écrite, 50%)
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 Non Diplomant
Vos modalités d'acquisition :
TD notés (25%) + partiel (épreuve écrite, 25%) + examen final (épreuve écrite, 50%)
L'UE est acquise si note finale transposée >= C- Crédits ECTS acquis : 5 ECTS
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.