{
  "chapter": {
    "id": "architectures-materielles",
    "level": "premiere",
    "theme": "Architectures matérielles, systèmes d'exploitation et réseaux",
    "title": "Architectures matérielles",
    "description": "Modèle de von Neumann, composants d'un ordinateur\n(processeur, mémoire, périphériques d'entrée/sortie),\nfonctionnement du processeur (cycle de von Neumann), notions\nd'assembleur et de langage machine, hiérarchie mémoire.",
    "prerequisites": [],
    "references": []
  },
  "questions": [
    {
      "id": "q01",
      "difficulty": 1,
      "skills": [
        "von-neumann"
      ],
      "title": "Modèle de von Neumann",
      "statement": "Quels sont les composants principaux d'un ordinateur selon\nle **modèle de von Neumann** ?",
      "options": [
        {
          "text": "L'écran, le clavier et la souris",
          "correct": false,
          "feedback": "Erreur : ce sont des **périphériques** spécifiques.\nLe modèle de von Neumann est plus général et\nstructurel.\n"
        },
        {
          "text": "Une unité de calcul (processeur), une mémoire pour les données et les instructions, et des entrées/sorties",
          "correct": true,
          "feedback": "Bonne réponse : le modèle de von Neumann ($1945$)\nest l'architecture de référence des ordinateurs\nactuels. Sa particularité : la mémoire stocke à la\nfois les **données** et les **instructions** (du\nprogramme).\n"
        },
        {
          "text": "Internet, l'écran et le clavier",
          "correct": false,
          "feedback": "Erreur : Internet n'est pas un composant interne de\nl'ordinateur.\n"
        },
        {
          "text": "Le système d'exploitation et les applications",
          "correct": false,
          "feedback": "Erreur : ce sont des composants **logiciels**, pas\nle modèle d'architecture matérielle.\n"
        }
      ],
      "explanation": "Avant von Neumann, les ordinateurs séparaient\nprogrammes et données (architecture Harvard). Le génie\nde von Neumann : permettre au programme d'être traité\ncomme une donnée, ce qui ouvre la voie aux compilateurs,\nsystèmes d'exploitation, etc."
    },
    {
      "id": "q02",
      "difficulty": 1,
      "skills": [
        "processeur",
        "definition"
      ],
      "title": "Rôle du processeur",
      "statement": "Quel est le rôle principal du **processeur** (CPU) ?",
      "options": [
        {
          "text": "Exécuter les instructions d'un programme : calculs arithmétiques, comparaisons, accès mémoire, etc.",
          "correct": true,
          "feedback": "Bonne réponse : le processeur lit les instructions\nen mémoire et les exécute une par une (cycle de\nvon Neumann). Il contient une **unité arithmétique\net logique** (UAL) et une **unité de contrôle**.\n"
        },
        {
          "text": "Stocker les données à long terme",
          "correct": false,
          "feedback": "Erreur : c'est le rôle des disques durs ou SSD. Le\nprocesseur exécute les calculs.\n"
        },
        {
          "text": "Afficher les images à l'écran",
          "correct": false,
          "feedback": "Erreur : c'est le rôle de la carte graphique (GPU)\nplus que du CPU principal.\n"
        },
        {
          "text": "Stocker les fichiers en mémoire vive",
          "correct": false,
          "feedback": "Erreur : c'est le rôle de la RAM (mémoire vive),\npas du processeur.\n"
        }
      ],
      "explanation": "Un processeur moderne contient des milliards de\ntransistors. Il opère à plusieurs gigahertz (milliards\nd'instructions par seconde) avec plusieurs cœurs en\nparallèle."
    },
    {
      "id": "q03",
      "difficulty": 1,
      "skills": [
        "memoire-ram"
      ],
      "title": "Mémoire vive (RAM)",
      "statement": "Quelle est la caractéristique principale de la **mémoire\nvive** (RAM) ?",
      "options": [
        {
          "text": "Elle est plus lente que le disque dur",
          "correct": false,
          "feedback": "Erreur : c'est l'inverse. La RAM est typiquement\n$1000$ fois plus rapide qu'un disque dur, et $100$\nfois plus rapide qu'un SSD.\n"
        },
        {
          "text": "Elle stocke les programmes du système d'exploitation à long terme",
          "correct": false,
          "feedback": "Erreur : c'est le disque dur qui stocke à long\nterme. La RAM contient temporairement les\nprogrammes en cours d'exécution.\n"
        },
        {
          "text": "Elle conserve les données même après extinction de l'ordinateur",
          "correct": false,
          "feedback": "Erreur : la RAM est **volatile**, elle perd ses\ndonnées quand l'ordinateur s'éteint. C'est ce qui\nla distingue du disque dur ou SSD.\n"
        },
        {
          "text": "Elle est rapide d'accès et volatile (perd ses données à l'extinction)",
          "correct": true,
          "feedback": "Bonne réponse : la RAM est utilisée comme zone de\ntravail pour les programmes en cours d'exécution.\nSa rapidité (nanosecondes) la rend bien plus\nperformante que les SSD ou disques durs (microsecondes\nà millisecondes).\n"
        }
      ],
      "explanation": "La hiérarchie mémoire moderne combine plusieurs niveaux\nde vitesse : registres (CPU) > cache (CPU) > RAM > SSD\n> disque dur > stockage réseau. Plus c'est rapide, plus\nc'est cher et limité en capacité."
    },
    {
      "id": "q04",
      "difficulty": 1,
      "skills": [
        "cycle-von-neumann"
      ],
      "title": "Cycle de von Neumann",
      "statement": "Quelles sont les étapes du **cycle de von Neumann**\nexécuté par le processeur ?",
      "options": [
        {
          "text": "Compiler, lier, exécuter",
          "correct": false,
          "feedback": "Erreur : c'est le cycle de **production d'un\nexécutable**, pas le cycle d'exécution des\ninstructions.\n"
        },
        {
          "text": "Allumer, démarrer, attendre",
          "correct": false,
          "feedback": "Erreur : ce serait plus une procédure de démarrage,\npas le cycle d'exécution des instructions.\n"
        },
        {
          "text": "Fetch (lire l'instruction en mémoire), Decode (la décoder), Execute (l'exécuter)",
          "correct": true,
          "feedback": "Bonne réponse : c'est le cycle « lecture, décodage,\nexécution » qui se répète des milliards de fois par\nseconde dans un processeur moderne. Certains modèles\najoutent une étape « write back » (écriture du\nrésultat).\n"
        },
        {
          "text": "Lire, écrire, supprimer",
          "correct": false,
          "feedback": "Erreur : c'est plutôt le vocabulaire des opérations\nsur fichiers, pas le cycle d'exécution.\n"
        }
      ],
      "explanation": "Ce cycle, simple en apparence, est largement optimisé\ndans les processeurs modernes : pipelining (plusieurs\nétapes en parallèle), exécution dans le désordre,\nprédiction de branchement, etc."
    },
    {
      "id": "q05",
      "difficulty": 1,
      "skills": [
        "bus"
      ],
      "title": "Bus",
      "statement": "Qu'est-ce qu'un **bus** dans une architecture\nd'ordinateur ?",
      "options": [
        {
          "text": "Un système de transport public",
          "correct": false,
          "feedback": "Erreur : analogie possible mais sans rapport en\ninformatique.\n"
        },
        {
          "text": "Un programme qui transporte des fichiers entre dossiers",
          "correct": false,
          "feedback": "Erreur : aucun rapport avec les programmes. Un bus\nest physique.\n"
        },
        {
          "text": "Un type de mémoire vive",
          "correct": false,
          "feedback": "Erreur : confusion possible. Le bus relie les\ncomposants, mais ce n'est pas une mémoire en\nlui-même.\n"
        },
        {
          "text": "Un ensemble de fils ou pistes conducteurs qui transportent des informations entre les composants",
          "correct": true,
          "feedback": "Bonne réponse : le bus est l'autoroute interne de\nl'ordinateur. On distingue le bus de **données**\n(qui transporte les valeurs), le bus d'**adresses**\n(où dans la mémoire ?), et le bus de **contrôle**\n(signaux de coordination).\n"
        }
      ],
      "explanation": "Les processeurs modernes ont des bus très spécialisés\n(PCIe pour les cartes d'extension, DDR pour la RAM,\nUSB pour les périphériques externes, etc.)."
    },
    {
      "id": "q06",
      "difficulty": 1,
      "skills": [
        "assembleur"
      ],
      "title": "Langage assembleur",
      "statement": "Qu'est-ce que le langage **assembleur** ?",
      "options": [
        {
          "text": "Le langage utilisé par le système d'exploitation",
          "correct": false,
          "feedback": "Erreur : les systèmes modernes sont surtout écrits\nen C/C++ (avec un peu d'assembleur dans les\nparties très bas niveau).\n"
        },
        {
          "text": "Un compilateur qui transforme le code source en exécutable",
          "correct": false,
          "feedback": "Erreur : un compilateur transforme un langage de\nhaut niveau (C, Java) en assembleur ou en machine.\nL'assembleur est un langage, pas un outil.\n"
        },
        {
          "text": "Un langage symbolique de bas niveau qui correspond directement aux instructions du processeur",
          "correct": true,
          "feedback": "Bonne réponse : chaque instruction assembleur\ncorrespond généralement à une instruction machine.\nPar exemple, `MOV AX, 5` charge la valeur $5$ dans\nle registre AX. C'est plus lisible que le binaire\nmais reste très proche du matériel.\n"
        },
        {
          "text": "Un langage de très haut niveau comme Python",
          "correct": false,
          "feedback": "Erreur : c'est l'inverse. L'assembleur est un\nlangage de **bas niveau**, très proche du matériel.\n"
        }
      ],
      "explanation": "L'assembleur est différent pour chaque architecture\nprocesseur (x$86$ pour Intel/AMD, ARM pour\nsmartphones et Apple Silicon, RISC-V open source).\nConnaître l'assembleur aide à comprendre comment un\nprogramme s'exécute concrètement."
    },
    {
      "id": "q07",
      "difficulty": 1,
      "skills": [
        "unite-arithmetique"
      ],
      "title": "Unité arithmétique et logique",
      "statement": "Que fait l'**unité arithmétique et logique** (UAL) du\nprocesseur ?",
      "options": [
        {
          "text": "Elle effectue les opérations arithmétiques (addition, soustraction, multiplication) et logiques (ET, OU, NON, XOR)",
          "correct": true,
          "feedback": "Bonne réponse : l'UAL est le « calculateur » du\nprocesseur. Elle prend deux opérandes en entrée et\nproduit un résultat selon l'opération demandée par\nl'unité de contrôle.\n"
        },
        {
          "text": "Elle stocke les fichiers du système",
          "correct": false,
          "feedback": "Erreur : aucun stockage. L'UAL est une unité de\ncalcul.\n"
        },
        {
          "text": "Elle gère les périphériques d'entrée/sortie",
          "correct": false,
          "feedback": "Erreur : c'est le rôle des contrôleurs d'E/S, pas\nde l'UAL.\n"
        },
        {
          "text": "Elle décode les instructions",
          "correct": false,
          "feedback": "Erreur : c'est l'unité de **contrôle** qui décode.\nL'UAL exécute les opérations une fois décodées.\n"
        }
      ],
      "explanation": "L'UAL est composée de circuits logiques (additionneurs,\ncomparateurs, décaleurs, portes ET/OU/NON). C'est\nl'application concrète de l'algèbre de Boole étudiée\nen NSI."
    },
    {
      "id": "q08",
      "difficulty": 1,
      "skills": [
        "registre"
      ],
      "title": "Registres",
      "statement": "Qu'est-ce qu'un **registre** dans un processeur ?",
      "options": [
        {
          "text": "Une zone de mémoire ultra-rapide située à l'intérieur du processeur, utilisée pour stocker les valeurs en cours de traitement",
          "correct": true,
          "feedback": "Bonne réponse : les registres sont les zones de\nstockage les plus rapides (accès en un cycle\nd'horloge). Un processeur en contient typiquement\nquelques dizaines à quelques centaines, contre des\nmilliards de bits en RAM.\n"
        },
        {
          "text": "La mémoire vive de l'ordinateur",
          "correct": false,
          "feedback": "Erreur : la RAM est externe au processeur. Les\nregistres sont **internes**.\n"
        },
        {
          "text": "Un type de bus",
          "correct": false,
          "feedback": "Erreur : un registre n'est pas un bus, c'est un\ncomposant de stockage très rapide.\n"
        },
        {
          "text": "Un fichier où l'on liste les utilisateurs",
          "correct": false,
          "feedback": "Erreur : aucun rapport avec les utilisateurs.\n"
        }
      ],
      "explanation": "Un programme assembleur manipule essentiellement les\nregistres : on charge des données depuis la RAM dans\ndes registres, on calcule, et on écrit le résultat\nailleurs. C'est la base du fonctionnement à bas niveau."
    },
    {
      "id": "q09",
      "difficulty": 1,
      "skills": [
        "horloge"
      ],
      "title": "Horloge du processeur",
      "statement": "Que mesure-t-on en **gigahertz** (GHz) sur un processeur ?",
      "options": [
        {
          "text": "La consommation électrique",
          "correct": false,
          "feedback": "Erreur : la consommation se mesure en watts, pas en\nhertz.\n"
        },
        {
          "text": "La quantité de mémoire disponible",
          "correct": false,
          "feedback": "Erreur : la mémoire se mesure en octets, pas en\nhertz.\n"
        },
        {
          "text": "La fréquence de l'horloge interne, combien de cycles par seconde le processeur peut effectuer",
          "correct": true,
          "feedback": "Bonne réponse : un processeur à $3$ GHz fait\n$3$ milliards de cycles par seconde. Chaque cycle\npeut typiquement exécuter une (ou plusieurs)\ninstructions. Mais ce n'est qu'une mesure parmi\nd'autres de la performance.\n"
        },
        {
          "text": "La taille des données traitées",
          "correct": false,
          "feedback": "Erreur : c'est plutôt l'**architecture** (32, 64\nbits) qui définit la taille des mots traités.\n"
        }
      ],
      "explanation": "Attention : la fréquence n'est pas le seul facteur de\nperformance. Un processeur à $3$ GHz peut être plus\nrapide qu'un autre à $4$ GHz s'il fait plus\nd'opérations par cycle (pipeline, superscalaire) ou\ns'il a plus de cœurs."
    },
    {
      "id": "q10",
      "difficulty": 1,
      "skills": [
        "octets",
        "kibi-mibi"
      ],
      "title": "Préfixes pour les octets",
      "statement": "Combien d'octets contient un **kibioctet** (Kio) ?",
      "options": [
        {
          "text": "$1\\ 000$",
          "correct": false,
          "feedback": "Erreur : c'est $1$ kilooctet (KO) en notation\ndécimale (base $10$). Le **kibioctet** utilise la\nbase $2$.\n"
        },
        {
          "text": "$1\\ 048\\ 576$",
          "correct": false,
          "feedback": "Erreur : c'est $1$ Mio (mébioctet, $2^{20}$).\n"
        },
        {
          "text": "$1\\ 024$",
          "correct": true,
          "feedback": "Bonne réponse : $1$ Kio = $2^{10} = 1\\ 024$ octets.\nCette notation IEC ($2000$) distingue le kilooctet\n(kilo = $1000$) du kibioctet (kibi = $1024$). En\ninformatique, on utilise traditionnellement les\npuissances de $2$.\n"
        },
        {
          "text": "$8$",
          "correct": false,
          "feedback": "Erreur : $8$ bits font un **octet**. Un kibioctet\nest bien plus.\n"
        }
      ],
      "explanation": "Hiérarchie : $1$ Kio = $2^{10}$ o ; $1$ Mio = $2^{20}$ o ;\n$1$ Gio = $2^{30}$ o ; $1$ Tio = $2^{40}$ o. Les\nfabricants de disques durs utilisent souvent les\npréfixes décimaux (KO, MO, GO), ce qui crée des\ndifférences avec les kibi/mébi/gibioctets affichés par\nles systèmes."
    },
    {
      "id": "q11",
      "difficulty": 2,
      "skills": [
        "hierarchie-memoire"
      ],
      "title": "Hiérarchie mémoire",
      "statement": "Pourquoi a-t-on plusieurs **niveaux de mémoire** dans un\nordinateur (registres, cache, RAM, disque) ?",
      "options": [
        {
          "text": "Pour rendre l'ordinateur plus complexe",
          "correct": false,
          "feedback": "Erreur : la complexité n'est pas un objectif.\nC'est un compromis pratique.\n"
        },
        {
          "text": "Parce que les ingénieurs n'ont pas su choisir",
          "correct": false,
          "feedback": "Erreur : la hiérarchie est un choix délibéré, pas\nun défaut.\n"
        },
        {
          "text": "Pour rendre les programmes incompatibles",
          "correct": false,
          "feedback": "Erreur : la hiérarchie est invisible aux programmes\n(gérée par le matériel et le système d'exploitation).\n"
        },
        {
          "text": "Pour faire un compromis entre vitesse, capacité et coût",
          "correct": true,
          "feedback": "Bonne réponse : les registres et caches sont\nultra-rapides mais très petits et coûteux ; la RAM\nest rapide et de taille modérée ; le disque dur est\nlent mais énorme et bon marché. Combiner les trois\npermet d'avoir à la fois la performance et la\ncapacité.\n"
        }
      ],
      "explanation": "Si l'on devait faire toute la mémoire au niveau des\nregistres, on aurait moins d'un kilooctet à coût\nraisonnable. Si on faisait tout au niveau du disque,\nle processeur passerait son temps à attendre."
    },
    {
      "id": "q12",
      "difficulty": 2,
      "skills": [
        "cache"
      ],
      "title": "Mémoire cache",
      "statement": "À quoi sert la **mémoire cache** d'un processeur ?",
      "options": [
        {
          "text": "Compresser les données",
          "correct": false,
          "feedback": "Erreur : aucun rapport avec la compression.\n"
        },
        {
          "text": "Stocker les fichiers temporaires du système",
          "correct": false,
          "feedback": "Erreur : confusion possible avec le cache du\nnavigateur ou du système. Ici on parle du cache\nprocesseur (interne).\n"
        },
        {
          "text": "Sauvegarder les fichiers avant l'extinction",
          "correct": false,
          "feedback": "Erreur : la cache processeur est volatile, comme\nla RAM. Elle ne sert pas à la sauvegarde.\n"
        },
        {
          "text": "Conserver les données récemment utilisées pour y accéder plus rapidement que via la RAM",
          "correct": true,
          "feedback": "Bonne réponse : la cache exploite le principe de\n**localité** (les programmes ont tendance à réutiliser\nles mêmes données ou des données voisines). En\ngardant les données chaudes dans une mémoire\nultra-rapide proche du processeur, on évite des\naccès lents à la RAM.\n"
        }
      ],
      "explanation": "Les processeurs modernes ont $3$ niveaux de cache (L1,\nL2, L3) avec des tailles et vitesses croissantes mais\nrestant bien plus rapides que la RAM. La gestion du\ncache est un domaine complexe qui influe énormément\nsur les performances."
    },
    {
      "id": "q13",
      "difficulty": 2,
      "skills": [
        "adressage"
      ],
      "title": "Adresse mémoire",
      "statement": "Qu'est-ce qu'une **adresse mémoire** ?",
      "options": [
        {
          "text": "Un identifiant unique pour chaque programme installé",
          "correct": false,
          "feedback": "Erreur : c'est plutôt un PID (Process ID). Une\nadresse mémoire est plus bas niveau.\n"
        },
        {
          "text": "Le nom d'un fichier sur le disque",
          "correct": false,
          "feedback": "Erreur : confusion avec un chemin. Une adresse\nmémoire est numérique.\n"
        },
        {
          "text": "Un numéro qui identifie un emplacement dans la mémoire",
          "correct": true,
          "feedback": "Bonne réponse : la mémoire est vue comme un\nimmense tableau d'octets, indexés de $0$ à\nquelques milliards. L'adresse identifie où lire ou\nécrire. Sur un processeur $64$ bits, les adresses\npeuvent aller jusqu'à $2^{64}$.\n"
        },
        {
          "text": "Le nom du processeur",
          "correct": false,
          "feedback": "Le nom commercial du\nprocesseur (par exemple\nIntel Core i$7$) est une\ndénomination, pas une\nadresse mémoire. Une\nadresse mémoire est un\nentier qui désigne un\nemplacement précis dans\nla RAM.\n"
        }
      ],
      "explanation": "En programmation, on manipule rarement les adresses\nmémoire directement (sauf en C/C++ avec les pointeurs).\nLe système d'exploitation gère la **mémoire virtuelle**\npour donner à chaque programme l'illusion d'avoir\ntoute la mémoire à lui."
    },
    {
      "id": "q14",
      "difficulty": 2,
      "skills": [
        "bits-architecture"
      ],
      "title": "Architecture 64 bits",
      "statement": "Que signifie qu'un processeur est en **architecture\n$64$ bits** ?",
      "options": [
        {
          "text": "Il a $64$ fils dans ses bus",
          "correct": false,
          "feedback": "Erreur : trop simpliste. Le « $64$ bits » concerne\nla taille des registres et des adresses, pas le\nnombre de fils physiques.\n"
        },
        {
          "text": "Il fait $64$ instructions par seconde",
          "correct": false,
          "feedback": "Erreur : il en fait des milliards par seconde, pas\n$64$.\n"
        },
        {
          "text": "Ses registres principaux et ses adresses mémoire font $64$ bits",
          "correct": true,
          "feedback": "Bonne réponse : il peut traiter des entiers jusqu'à\n$2^{64} - 1$ en une seule instruction et adresser\njusqu'à $2^{64}$ octets de mémoire (environ\n$16$ exaoctets, largement plus que toute mémoire\nactuelle). Les processeurs modernes sont presque\ntous en $64$ bits.\n"
        },
        {
          "text": "Il a $64$ cœurs",
          "correct": false,
          "feedback": "Erreur : le nombre de cœurs et la taille des mots\nsont indépendants. Un processeur $64$ bits peut\navoir $1$ ou $128$ cœurs.\n"
        }
      ],
      "explanation": "Le passage à $64$ bits ($2003$ pour AMD, $2006$ pour\nApple Silicon) a permis de dépasser la barre des\n$4$ Gio adressables, qui posait problème avec les\ngrandes bases de données et le calcul scientifique."
    },
    {
      "id": "q15",
      "difficulty": 2,
      "skills": [
        "coeurs"
      ],
      "title": "Multi-cœurs",
      "statement": "Qu'apporte un processeur **multi-cœurs** ?",
      "options": [
        {
          "text": "Il fonctionne sans système d'exploitation",
          "correct": false,
          "feedback": "Erreur : aucun rapport. Le SE est nécessaire pour\norchestrer les processus.\n"
        },
        {
          "text": "Il peut exécuter plusieurs instructions en parallèle, accélérant ainsi les tâches qui le permettent",
          "correct": true,
          "feedback": "Bonne réponse : avec $N$ cœurs, on peut exécuter\n$N$ programmes (ou $N$ threads) en vrai parallèle.\nC'est devenu indispensable car les fréquences\nd'horloge stagnent depuis les années $2005$.\n"
        },
        {
          "text": "Il consomme moins d'énergie que les anciens",
          "correct": false,
          "feedback": "Erreur : ce n'est pas la motivation principale du\nmulti-cœur (même si l'efficacité énergétique est un\navantage indirect).\n"
        },
        {
          "text": "Il a une mémoire vive plus grande",
          "correct": false,
          "feedback": "Erreur : la mémoire est externe et ne dépend pas\ndu nombre de cœurs.\n"
        }
      ],
      "explanation": "Le multi-cœur a redéfini la programmation depuis les\nannées $2000$. Beaucoup d'algorithmes ont dû être\nrepensés pour exploiter le parallélisme efficacement\n(problèmes de synchronisation, de partage de données)."
    },
    {
      "id": "q16",
      "difficulty": 2,
      "skills": [
        "langage-machine"
      ],
      "title": "Langage machine",
      "statement": "Qu'est-ce que le **langage machine** ?",
      "options": [
        {
          "text": "Un langage de programmation comme C ou Python",
          "correct": false,
          "feedback": "Erreur : C et Python sont des langages de **haut\nniveau**, qu'il faut traduire en langage machine\npour qu'ils s'exécutent.\n"
        },
        {
          "text": "Un protocole réseau",
          "correct": false,
          "feedback": "Un protocole réseau (TCP,\nHTTP, etc.) régit les échanges\nentre machines. Le langage\nmachine, lui, est purement\ninterne au processeur.\n"
        },
        {
          "text": "La représentation binaire des instructions exécutables directement par le processeur",
          "correct": true,
          "feedback": "Bonne réponse : chaque instruction est codée en\nbinaire selon une grammaire précise (opcode,\nopérandes). Le processeur lit ces bits et les\nexécute. L'assembleur est une notation **symbolique**\ndu langage machine.\n"
        },
        {
          "text": "Un langage parlé par les robots",
          "correct": false,
          "feedback": "Le langage machine est\nun encodage binaire\ninterne au processeur,\npas une langue parlée.\nLes robots qui « parlent »\nutilisent la synthèse vocale,\nce qui est tout autre chose.\n"
        }
      ],
      "explanation": "Le langage machine est spécifique à chaque architecture\n(x$86$, ARM, RISC-V). Un programme en langage machine\npour x$86$ ne tourne pas tel quel sur un Mac M$1$\n(ARM), il faut le recompiler ou utiliser un\némulateur."
    },
    {
      "id": "q17",
      "difficulty": 2,
      "skills": [
        "pointeur",
        "programmation"
      ],
      "title": "Compteur ordinal",
      "statement": "Qu'est-ce que le **compteur ordinal** (ou compteur de\nprogramme, PC) du processeur ?",
      "options": [
        {
          "text": "Un compteur de bugs",
          "correct": false,
          "feedback": "Le compteur ordinal n'a\naucun rapport avec les\nbugs : c'est un registre\nmatériel qui pointe sur\nla prochaine instruction\nà exécuter.\n"
        },
        {
          "text": "Un identifiant unique de l'utilisateur",
          "correct": false,
          "feedback": "Le PC est interne au\nprocesseur et change à\nchaque cycle. Il n'identifie\nni l'utilisateur ni la session.\n"
        },
        {
          "text": "Un registre qui contient l'adresse de la prochaine instruction à exécuter",
          "correct": true,
          "feedback": "Bonne réponse : à chaque cycle, le processeur lit\nl'instruction à l'adresse pointée par le PC,\nl'exécute, puis incrémente le PC pour passer à la\nsuivante. Les sauts (`if`, boucles, fonctions)\nmodifient le PC autrement.\n"
        },
        {
          "text": "Un compteur qui mesure la durée du programme",
          "correct": false,
          "feedback": "Erreur : il ne mesure pas le temps. Il pointe sur\nune instruction.\n"
        }
      ],
      "explanation": "Le PC est central dans le fonctionnement séquentiel\ndes programmes. Comprendre le PC permet de comprendre\ncomment fonctionnent les boucles, conditions, et\nappels de fonction au niveau matériel."
    },
    {
      "id": "q18",
      "difficulty": 2,
      "skills": [
        "interruption"
      ],
      "title": "Interruption",
      "statement": "Qu'est-ce qu'une **interruption** matérielle ?",
      "options": [
        {
          "text": "Une panne du processeur",
          "correct": false,
          "feedback": "Erreur : ce serait un crash, pas une interruption.\nLes interruptions sont un mécanisme normal de\nfonctionnement.\n"
        },
        {
          "text": "Un signal qui interrompt l'exécution du programme courant pour traiter un événement urgent (clavier appuyé, paquet réseau reçu, etc.)",
          "correct": true,
          "feedback": "Bonne réponse : sans interruptions, le processeur\ndevrait constamment vérifier (« sondage ») chaque\npériphérique. Avec elles, le périphérique signale\nau processeur quand quelque chose se passe, ce qui\nlibère le CPU pour d'autres tâches.\n"
        },
        {
          "text": "Un message d'erreur",
          "correct": false,
          "feedback": "Erreur : les messages d'erreur sont logiciels. Les\ninterruptions sont des signaux électriques.\n"
        },
        {
          "text": "La fin du programme",
          "correct": false,
          "feedback": "Erreur : la fin de programme est plutôt un appel\nsystème, pas une interruption matérielle.\n"
        }
      ],
      "explanation": "Les interruptions sont gérées par le **vecteur\nd'interruptions** : une table d'adresses de routines\nà exécuter selon le type d'interruption. C'est un\nmécanisme fondamental pour le multitâche et la gestion\ndes périphériques."
    },
    {
      "id": "q19",
      "difficulty": 2,
      "skills": [
        "stockage"
      ],
      "title": "SSD vs disque dur",
      "statement": "Quelle est la différence principale entre un **SSD** et\nun **disque dur classique** (HDD) ?",
      "options": [
        {
          "text": "Le SSD utilise des disques magnétiques en rotation, le HDD des puces de mémoire",
          "correct": false,
          "feedback": "Erreur : c'est l'inverse exact. Le HDD a des\nplateaux mécaniques, le SSD est purement\nélectronique.\n"
        },
        {
          "text": "Aucune différence fondamentale",
          "correct": false,
          "feedback": "Erreur : ils ont des technologies très différentes\navec des compromis différents.\n"
        },
        {
          "text": "Le SSD coûte moins cher au gigaoctet",
          "correct": false,
          "feedback": "Erreur : c'est plutôt l'inverse, même si l'écart se\nréduit. Pour de gros volumes, le HDD reste moins\ncher.\n"
        },
        {
          "text": "Le SSD utilise des puces de mémoire flash sans pièce mobile, alors que le HDD utilise des plateaux mécaniques en rotation",
          "correct": true,
          "feedback": "Bonne réponse : le SSD est beaucoup plus rapide\n(pas de temps d'accès mécanique), plus silencieux,\nplus résistant aux chocs. Mais il a une durée de\nvie limitée par le nombre d'écritures par cellule.\n"
        }
      ],
      "explanation": "Pour un usage usuel : SSD pour le système et les\napplications (rapidité critique), HDD pour les gros\nfichiers d'archive (économique). Les disques durs\nmécaniques tendent à disparaître hors usage de stockage\nmassif."
    },
    {
      "id": "q20",
      "difficulty": 2,
      "skills": [
        "ROM-RAM"
      ],
      "title": "ROM vs RAM",
      "statement": "Quelle est la différence entre **ROM** et **RAM** ?",
      "options": [
        {
          "text": "ROM concerne la mémoire externe (disque), RAM la mémoire interne",
          "correct": false,
          "feedback": "Erreur : les deux sont des mémoires internes,\nc'est leur volatilité qui les distingue.\n"
        },
        {
          "text": "ROM (mémoire morte) est non volatile et généralement non modifiable ; RAM (mémoire vive) est volatile et modifiable",
          "correct": true,
          "feedback": "Bonne réponse : la ROM contient typiquement le\nfirmware ou BIOS, qui doit être conservé même\nquand l'ordinateur est éteint. La RAM est la zone\nde travail temporaire.\n"
        },
        {
          "text": "ROM est plus rapide que RAM",
          "correct": false,
          "feedback": "Erreur : la RAM est généralement plus rapide d'accès.\nLa ROM se distingue par sa **persistance** et sa\nnon-modifiabilité (dans sa version de base).\n"
        },
        {
          "text": "ROM est plus grande que RAM",
          "correct": false,
          "feedback": "Erreur : c'est généralement l'inverse. La ROM est\nsouvent de petite taille (firmware), la RAM bien\nplus grande pour les programmes en cours.\n"
        }
      ],
      "explanation": "ROM = Read-Only Memory ; RAM = Random Access Memory.\nAujourd'hui, la « ROM » des ordinateurs est en réalité\nsouvent une mémoire flash, modifiable mais\nnon-volatile (firmware UEFI mis à jour par exemple)."
    },
    {
      "id": "q21",
      "difficulty": 3,
      "skills": [
        "pipeline"
      ],
      "title": "Pipeline",
      "statement": "Qu'est-ce que le **pipeline** dans un processeur moderne ?",
      "options": [
        {
          "text": "Un câble pour brancher des périphériques",
          "correct": false,
          "feedback": "Le pipeline n'est pas un\ncomposant physique externe.\nC'est une organisation\ninterne du circuit qui\ndécoupe l'exécution d'une\ninstruction en plusieurs\nétages.\n"
        },
        {
          "text": "Un mécanisme qui permet de superposer les étapes du cycle de von Neumann sur plusieurs instructions simultanément, comme une chaîne de montage",
          "correct": true,
          "feedback": "Bonne réponse : pendant que l'instruction $1$ est\nexécutée, l'instruction $2$ est décodée et\nl'instruction $3$ est lue. On gagne un facteur\n$\\times 3$ ou $\\times 4$ en théorie, plus en\npratique avec des pipelines plus profonds.\n"
        },
        {
          "text": "Une connexion physique entre deux processeurs",
          "correct": false,
          "feedback": "Erreur : c'est plutôt un bus ou une\ninterconnexion. Le pipeline est interne au\nprocesseur.\n"
        },
        {
          "text": "Un système de refroidissement",
          "correct": false,
          "feedback": "Le refroidissement (ventilateur,\ndissipateur) est un dispositif\nthermique. Le pipeline, lui,\nest une technique d'organisation\nde l'unité d'exécution.\n"
        }
      ],
      "explanation": "Le pipeline est l'une des principales optimisations\ndes processeurs modernes. Mais il pose des défis :\nbranchements (sauts conditionnels), dépendances de\ndonnées. La **prédiction de branchement** et\n**l'exécution spéculative** sont des techniques\navancées pour minimiser les pertes."
    },
    {
      "id": "q22",
      "difficulty": 3,
      "skills": [
        "endianness"
      ],
      "title": "Boutisme (endianness)",
      "statement": "Qu'est-ce que le **boutisme** (ou *endianness*) d'une\narchitecture ?",
      "options": [
        {
          "text": "La quantité de mémoire d'un processeur",
          "correct": false,
          "feedback": "Erreur : aucun rapport avec la quantité.\n"
        },
        {
          "text": "Le sens de rangement des octets d'un mot multi-octets en mémoire",
          "correct": true,
          "feedback": "Bonne réponse : pour un entier $32$ bits, on peut\nstocker l'octet de poids fort en premier\n(*big-endian*) ou en dernier (*little-endian*).\nx$86$ est little-endian, certaines architectures\nréseau sont big-endian. Cela peut poser des\nproblèmes de compatibilité.\n"
        },
        {
          "text": "La fréquence d'horloge",
          "correct": false,
          "feedback": "La fréquence d'horloge\n(mesurée en gigahertz)\ndécrit la cadence du\nprocesseur, pas l'ordre\nde stockage des octets\nen mémoire.\n"
        },
        {
          "text": "Le nombre d'instructions disponibles",
          "correct": false,
          "feedback": "Erreur : aucun rapport.\n"
        }
      ],
      "explanation": "Le terme vient des « Voyages de Gulliver » (deux\ncamps : ceux qui mangent leur œuf par le gros bout vs\nle petit bout). Important quand on échange des\ndonnées binaires entre architectures différentes\n(sérialisation, protocoles réseau)."
    },
    {
      "id": "q23",
      "difficulty": 3,
      "skills": [
        "memoire-virtuelle"
      ],
      "title": "Mémoire virtuelle",
      "statement": "À quoi sert la **mémoire virtuelle** gérée par le système\nd'exploitation ?",
      "options": [
        {
          "text": "À partager toute la mémoire entre tous les programmes simultanément",
          "correct": false,
          "feedback": "Erreur : c'est l'opposé. La mémoire virtuelle\nisole les programmes les uns des autres.\n"
        },
        {
          "text": "À chiffrer la RAM",
          "correct": false,
          "feedback": "Erreur : aucun rapport avec le chiffrement.\n"
        },
        {
          "text": "À ralentir l'ordinateur",
          "correct": false,
          "feedback": "Erreur : la mémoire virtuelle a un léger surcoût\nmais offre des bénéfices essentiels.\n"
        },
        {
          "text": "À donner à chaque programme l'illusion d'avoir une grande mémoire continue à lui seul, et à isoler les programmes les uns des autres",
          "correct": true,
          "feedback": "Bonne réponse : chaque processus voit un espace\nd'adressage qui lui est propre, traduit par\nl'unité de gestion mémoire (MMU) en adresses\nphysiques réelles. Cela permet l'isolation\n(sécurité), le partage et la pagination (utiliser le\ndisque comme extension de la RAM).\n"
        }
      ],
      "explanation": "La pagination utilise le disque comme « swap » quand\nla RAM est pleine. Très utile mais bien plus lent que\nla RAM : si l'ordinateur swappe beaucoup, les\nperformances chutent drastiquement."
    },
    {
      "id": "q24",
      "difficulty": 3,
      "skills": [
        "risc-cisc"
      ],
      "title": "RISC vs CISC",
      "statement": "Quelle est la différence principale entre les architectures\n**RISC** et **CISC** ?",
      "options": [
        {
          "text": "RISC est plus rapide, CISC plus lent",
          "correct": false,
          "feedback": "Erreur : trop simpliste. Les performances dépendent\nde nombreux facteurs.\n"
        },
        {
          "text": "RISC a moins d'instructions, plus simples ; CISC a un jeu d'instructions très riche, parfois complexes",
          "correct": true,
          "feedback": "Bonne réponse : RISC (*Reduced Instruction Set\nComputer*) : ARM, RISC-V, MIPS. CISC (*Complex\nInstruction Set Computer*) : x$86$. Les deux\nphilosophies ont coexisté et convergé : x$86$\nmoderne est en réalité décomposé en micro-opérations\ninternes proches du RISC.\n"
        },
        {
          "text": "RISC est plus ancien",
          "correct": false,
          "feedback": "Erreur : c'est plutôt CISC qui est plus ancien.\nRISC a émergé dans les années $1980$ comme\nréaction à la complexité croissante des CISC.\n"
        },
        {
          "text": "RISC est utilisé sur PC, CISC sur smartphones",
          "correct": false,
          "feedback": "Erreur : c'est l'inverse historiquement. ARM\n(RISC) domine les smartphones, x$86$ (CISC)\ndominait les PC (mais ARM y arrive aussi avec les\nMac Apple Silicon).\n"
        }
      ],
      "explanation": "L'arrivée d'Apple Silicon (M$1$, M$2$, M$3$, M$4$,\ntous ARM/RISC) a montré que RISC peut concurrencer\nvoire surpasser x$86$ en performance et efficacité\nénergétique pour le grand public."
    },
    {
      "id": "q25",
      "difficulty": 3,
      "skills": [
        "synthese"
      ],
      "title": "Évolution historique",
      "statement": "Lequel des énoncés suivants est **vrai** sur l'évolution\ndes architectures matérielles depuis $50$ ans ?",
      "options": [
        {
          "text": "La fréquence d'horloge des processeurs grand public a continué de doubler chaque année",
          "correct": false,
          "feedback": "Erreur : la fréquence stagne autour de $3$-$5$ GHz\ndepuis $2005$ environ. Le gain de performance vient\nd'autres techniques (multi-cœurs, parallélisme,\narchitecture).\n"
        },
        {
          "text": "La complexité (nombre de transistors) a continué de croître exponentiellement (loi de Moore), mais la performance par cœur s'est stabilisée et le multi-cœur s'est généralisé",
          "correct": true,
          "feedback": "Bonne réponse : la loi de Moore reste globalement\nvraie pour la densité, mais traduite différemment :\nplus de cœurs, plus de cache, plus d'unités\nspécialisées (GPU, NPU). La performance brute par\nfil d'exécution stagne depuis ~$2005$.\n"
        },
        {
          "text": "Les ordinateurs sont aujourd'hui aussi performants que dans les années $1970$",
          "correct": false,
          "feedback": "Erreur : la performance a augmenté de plusieurs\nordres de grandeur depuis les années $1970$.\n"
        },
        {
          "text": "Le modèle de von Neumann est obsolète depuis longtemps",
          "correct": false,
          "feedback": "Erreur : le modèle de von Neumann reste la base de\ntous les ordinateurs modernes, même s'il est\nenrichi par de nombreuses optimisations.\n"
        }
      ],
      "explanation": "L'avenir s'oriente vers un retour à du calcul\nspécialisé : processeurs graphiques pour\nl'intelligence artificielle, processeurs\nneuronaux pour les téléphones, circuits logiques\nprogrammables dans les serveurs. À plus long\nterme, on attend l'arrivée à grande échelle du\ncalcul quantique et neuromorphique."
    },
    {
      "id": "q26",
      "difficulty": 1,
      "skills": [
        "peripheriques",
        "classification"
      ],
      "title": "Périphériques d'entrée/sortie",
      "statement": "Parmi les éléments suivants, lequel **n'est pas** un\npériphérique d'entrée/sortie ?",
      "options": [
        {
          "text": "L'imprimante",
          "correct": false,
          "feedback": "L'imprimante est un périphérique de sortie :\nelle reçoit des données de l'ordinateur pour\nproduire un document physique.\n"
        },
        {
          "text": "Le transistor",
          "correct": true,
          "feedback": "Bonne réponse : un transistor est un composant\nélectronique élémentaire utilisé pour fabriquer\ndes portes logiques au cœur du processeur. Il\nne sert pas à communiquer avec l'extérieur, il\nest interne au matériel.\n"
        },
        {
          "text": "Le clavier",
          "correct": false,
          "feedback": "Le clavier est un périphérique d'entrée :\nchaque touche enfoncée envoie un code à\nl'ordinateur.\n"
        },
        {
          "text": "La souris",
          "correct": false,
          "feedback": "La souris est bien un périphérique d'entrée :\nelle transmet à l'ordinateur la position du\ncurseur et les clics de l'utilisateur.\n"
        }
      ],
      "explanation": "Les périphériques d'entrée/sortie permettent à\nl'ordinateur de dialoguer avec l'utilisateur ou\navec d'autres machines. Un même appareil peut\nassurer les deux rôles : un disque dur (lecture\net écriture), un écran tactile (affichage et\nsaisie) ou une carte réseau (réception et envoi)."
    },
    {
      "id": "q27",
      "difficulty": 1,
      "skills": [
        "moore",
        "evolution"
      ],
      "title": "Loi de Moore",
      "statement": "Que dit la **loi de Moore**, énoncée par Gordon Moore en\n$1965$ ?",
      "options": [
        {
          "text": "La taille des ordinateurs est divisée par deux tous les deux ans",
          "correct": false,
          "feedback": "Erreur : la loi parle d'augmentation de la\n**densité** de transistors, pas de réduction de la\ntaille des machines. Les ordinateurs ont rapetissé,\nmais c'est une conséquence indirecte.\n"
        },
        {
          "text": "La vitesse d'horloge des processeurs double tous les deux ans",
          "correct": false,
          "feedback": "Erreur : c'est une conséquence partielle, mais ce\nn'est pas l'énoncé original. La vitesse d'horloge\na même cessé de croître depuis le milieu des\nannées $2000$ (limites thermiques), alors que la\nloi de Moore continue plus ou moins à s'appliquer.\n"
        },
        {
          "text": "La puissance d'un ordinateur double chaque année",
          "correct": false,
          "feedback": "Erreur : ni la période (deux ans, pas un an), ni\nla grandeur visée (transistors, pas puissance) ne\nsont correctes. La puissance globale a longtemps\nsuivi la loi, mais ce n'est pas l'énoncé direct.\n"
        },
        {
          "text": "Le nombre de transistors intégrables sur une puce double environ tous les deux ans",
          "correct": true,
          "feedback": "Bonne réponse : c'est une observation empirique sur\nl'industrie des semi-conducteurs, qui s'est\nremarquablement vérifiée pendant plus de cinquante\nans. Elle traduit la miniaturisation continue des\ntransistors, à coût équivalent.\n"
        }
      ],
      "explanation": "Énoncée à partir de l'observation de quelques années,\nla loi de Moore est devenue une feuille de route pour\ntoute l'industrie : les fondeurs prévoient leurs\ninvestissements en supposant cette progression. Elle\nralentit aujourd'hui pour des raisons physiques (taille\ndes transistors approchant celle de l'atome)."
    },
    {
      "id": "q28",
      "difficulty": 2,
      "skills": [
        "performance",
        "flops"
      ],
      "title": "Mesure de performance en FLOPS",
      "statement": "Que mesure l'unité **FLOPS** ($\\text{FLoating-point}$\n$\\text{Operations Per Second}$) ?",
      "options": [
        {
          "text": "La fréquence d'horloge du processeur",
          "correct": false,
          "feedback": "Erreur : la fréquence d'horloge se mesure en hertz\n(Hz), pas en FLOPS. Un processeur peut tourner à\n$3$ GHz et n'effectuer qu'un nombre limité de\ncalculs flottants par cycle.\n"
        },
        {
          "text": "Le débit du bus mémoire",
          "correct": false,
          "feedback": "Erreur : le débit mémoire se mesure en octets par\nseconde (Go/s, GT/s). Les FLOPS portent sur les\ncalculs effectués, pas sur les transferts.\n"
        },
        {
          "text": "Le nombre d'instructions entières par seconde",
          "correct": false,
          "feedback": "Erreur : c'est l'unité **MIPS** (millions\nd'instructions par seconde) qui mesure les\ninstructions entières. Les FLOPS visent\nspécifiquement les calculs en virgule flottante.\n"
        },
        {
          "text": "Le nombre d'opérations sur des nombres flottants effectuées par seconde",
          "correct": true,
          "feedback": "Bonne réponse : un FLOPS est une opération sur des\nnombres à virgule flottante (addition,\nmultiplication, etc.) par seconde. Les\nsupercalculateurs modernes atteignent plusieurs\nexaflops, soit $10^{18}$ opérations flottantes par\nseconde.\n"
        }
      ],
      "explanation": "Pour comparer des processeurs ou des\nsupercalculateurs, on utilise plusieurs unités\ncomplémentaires : FLOPS (calculs flottants), MIPS\n(instructions entières), Hz (cadence d'horloge),\nGo/s (débit mémoire). Aucune n'est suffisante seule :\nun programme peut être limité par les calculs, par\nla mémoire ou par les entrées/sorties."
    }
  ]
}