Descriptif
Comment les ordinateurs calculent ? Comment un processeur fonctionne ? Comment une machine composée de simples portes peut-elles exécuter des programmes écrits dans des langages de haut niveau (tels Python ou OCaml) ?
Ce cours présentera les différentes abstractions qui permettent de construire une machine exécutant des programmes dans des langages de haut-niveau à partir de porte logique. En particulier, nous nous intéresserons à la création d'un petit CPU fait de portes logiques (nand et registres), au langage assembleur x86-64 et à la compilation d'un langage vers cet assembleur.
Objectifs pédagogiques
À la fin du cours, on doit être en mesure de :
- Construire un petit processeur à partir de portes logiques
- Décrire les composants d'un processeur moderne (multicœur, mémoire virtuelle, instructions vectorielles, etc.)
- Construire un compilateur (d'un langage à la C vers un assembleur x86-64)
- Écrire des programmes en assembleur
- Expliquer les fonctions d'un processeur (organisation de la mémoire, registres, appels systèmes, etc.)
- Expliquer les différentes abstractions qui permettent de passer d'un langage de haut-niveau à des portes logiques
effectifs minimal / maximal:
2/Diplôme(s) concerné(s)
Format des notes
Numérique sur 20Littérale/grade européenPour les étudiants du diplôme Diplôme d'ingénieur
Vos modalités d'acquisition :
L'évaluation est basée sur :
L'UE est acquise si Note finale >= 10
- Crédits ECTS acquis : 3 ECTS
- Crédit de BCI acquis : 3
La note obtenue rentre dans le calcul de votre GPA.
L'UE est évaluée par les étudiants.
Programme détaillé
Introduction
- Présentation des objectifs du cours, la notation, les TP à rendre
- Brève histoire de l'informatique, orientée matériel et langages
- Vue d'ensemble des sujets étudiés dans le cours
Assembleur x86-64
- Fonctionnnement général du processeur (RAM, registres, instructions, etc.)
- Organisation de la mémoire
- Jeu d'instruction et pseudo-instructions
- Appels systèmes et interruptions
- Conventions d'écritures
- Assemblage
- Exercices
Construction d'un CPU à partir de portes logiques
- Rappels sur les portes logiques (nand et bascules synchrones)
- Construction de petits circuits logique (et, ou, xor, mux, neg) à partir de nand
- Construction de circuits arithmétiques (half-adder, full-adder, +, -, mux_n)
- Construction de mémoires (RAM / ROM / registres)
- Construction d'une ALU voire d'un CPU
Syntaxe, Sémantique et interprétation
- Lexing en OCaml avec OCamllex
- Parsing avec Menhir
- Notion de syntaxe vs sémantique
- Analyse de la sémantique
- Interprétation d'un langage à la python
Production de code x86-64 pour un langage procédural simple
- Production récursive de code
- Gestion de la mémoire avec des variables globales et locales (tas et pile)
- Gestion des fonctions
Production de code x86-64 pour un langage objet