v2.11.0 (5757)

Programme d'approfondissement - CSC_51059_EP : Architecture des ordinateurs et systèmes d'exploitation

Domaine > Informatique.

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

Format des notes

Numérique sur 20

Littérale/grade réduit

Pour 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)
    L'UE est acquise si note finale transposée >= C
    • 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)
      L'UE est acquise si note finale transposée >= C
      • 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)
        L'UE est acquise si note finale transposée >= C
        • 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)
          L'UE est acquise si note finale transposée >= C
          • 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)
            L'UE est acquise si Note finale >= 10
            • 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)
              L'UE est acquise si Note finale >= 10
              • 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.

              Veuillez patienter