{
  "chapter": {
    "id": "architectures-materielles",
    "level": "premiere",
    "theme": "Architectures",
    "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.",
    "parties": [
      {
        "id": "von-neumann",
        "title": "Modèle de von Neumann"
      },
      {
        "id": "processeur",
        "title": "Processeur et exécution"
      },
      {
        "id": "memoire",
        "title": "Mémoires et périphériques"
      }
    ],
    "prerequisites": [],
    "references": []
  },
  "questions": [
    {
      "id": "q01",
      "difficulty": 1,
      "skills": [
        "von-neumann"
      ],
      "title": "Modèle de von Neumann",
      "partie": "von-neumann",
      "statement": "Quels sont les composants principaux d'un ordinateur selon\nle **modèle de von Neumann** ?",
      "options": [
        {
          "text": "L'écran, le clavier, la souris et les haut-parleurs",
          "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": "Un processeur, une mémoire 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 de l'ordinateur",
          "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": "Le génie de von Neumann : permettre au programme d'être traité\ncomme une donnée (mémoire unique), ce qui ouvre la voie aux\ncompilateurs, aux systèmes d'exploitation, etc."
    },
    {
      "id": "q02",
      "difficulty": 1,
      "skills": [
        "processeur",
        "definition"
      ],
      "title": "Rôle du processeur",
      "partie": "processeur",
      "statement": "Quel est le rôle principal du **processeur** (CPU) ?",
      "options": [
        {
          "text": "Exécuter les instructions d'un programme",
          "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 et logique** (UAL) et une **unité de contrôle**.\n"
        },
        {
          "text": "Stocker durablement 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 et les vidéos à 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)",
      "partie": "memoire",
      "statement": "Quelle est la caractéristique principale de la **mémoire vive** (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",
      "partie": "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 exécutable**, pas le cycle d'exécution des\ninstructions.\n"
        },
        {
          "text": "Allumer, démarrer puis attendre une action de l'utilisateur",
          "correct": false,
          "feedback": "Erreur : ce serait plus une procédure de démarrage,\npas le cycle d'exécution des instructions.\n"
        },
        {
          "text": "Lire, décoder, 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 : le processeur lit\nl'instruction désignée par le compteur ordinal, la\ndécode puis l'exécute.\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, se répète sans\ninterruption : après chaque exécution, le compteur\nordinal désigne l'instruction suivante et le cycle\nrecommence."
    },
    {
      "id": "q05",
      "difficulty": 1,
      "skills": [
        "bus"
      ],
      "title": "Bus",
      "partie": "von-neumann",
      "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 particulier 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": "Des fils conducteurs reliant les composants entre eux",
          "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": "Un bus est partagé par plusieurs composants : le\nprocesseur indique sur le bus d'adresses avec quel\nemplacement il échange, et les valeurs circulent\nsur le bus de données."
    },
    {
      "id": "q06",
      "difficulty": 1,
      "skills": [
        "assembleur"
      ],
      "title": "Langage assembleur",
      "partie": "processeur",
      "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, proche 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 ou Java",
          "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",
      "partie": "processeur",
      "statement": "Que fait l'**unité arithmétique et logique** (UAL) du\nprocesseur ?",
      "options": [
        {
          "text": "Elle effectue les calculs arithmétiques et logiques",
          "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 tous les périphériques d'entrée et de 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",
      "partie": "processeur",
      "statement": "Qu'est-ce qu'un **registre** dans un processeur ?",
      "options": [
        {
          "text": "Une mémoire ultra-rapide interne au processeur",
          "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 du système",
          "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",
      "partie": "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": "Le nombre de cycles par seconde de l'horloge",
          "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 par instruction",
          "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 exécute plus\nd'opérations par cycle ou s'il a plus de cœurs."
    },
    {
      "id": "q10",
      "difficulty": 1,
      "skills": [
        "capteurs-actionneurs"
      ],
      "title": "Reconnaître un actionneur",
      "partie": "memoire",
      "statement": "Un robot aspirateur comporte les composants suivants. Lequel est un\n**actionneur** ?",
      "options": [
        {
          "text": "Le capteur de choc placé à l'avant",
          "correct": false,
          "feedback": "Erreur : le capteur de choc est un **capteur** : il mesure une\ngrandeur physique (un contact) et transmet l'information au\nprogramme, sans agir lui-même.\n"
        },
        {
          "text": "La caméra qui repère les obstacles",
          "correct": false,
          "feedback": "Erreur : la caméra est un **capteur** : elle recueille des images\nque le programme analyse. Elle ne produit aucune action sur\nl'environnement.\n"
        },
        {
          "text": "Le détecteur de vide au bord des escaliers",
          "correct": false,
          "feedback": "Erreur : ce détecteur est un **capteur** : il signale au programme\nl'absence de sol. C'est ensuite le programme qui commande les\nmoteurs pour s'arrêter.\n"
        },
        {
          "text": "Le moteur qui fait tourner les roues",
          "correct": true,
          "feedback": "Bonne réponse : un actionneur agit sur le monde physique à partir\nd'une commande du programme. Le moteur transforme un signal\nélectrique en mouvement.\n"
        }
      ],
      "explanation": "Les capteurs transmettent des mesures au programme (entrées), les\nactionneurs exécutent ses commandes (sorties) : moteurs,\nhaut-parleurs, voyants lumineux, etc."
    },
    {
      "id": "q11",
      "difficulty": 2,
      "skills": [
        "hierarchie-memoire"
      ],
      "title": "Hiérarchie mémoire",
      "partie": "memoire",
      "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",
      "partie": "memoire",
      "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 d'exploitation",
          "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": "Garder les données récentes pour un accès plus rapide",
          "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",
      "partie": "memoire",
      "statement": "Qu'est-ce qu'une **adresse mémoire** ?",
      "options": [
        {
          "text": "Un identifiant unique pour chaque programme installé",
          "correct": false,
          "feedback": "Erreur : une adresse mémoire ne désigne pas un\nprogramme, mais un emplacement précis de la\nmémoire.\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 Python, on ne manipule pas directement les\nadresses mémoire : l'interpréteur et le système\nd'exploitation décident où ranger les valeurs."
    },
    {
      "id": "q14",
      "difficulty": 2,
      "skills": [
        "bits-architecture"
      ],
      "title": "Architecture 64 bits",
      "partie": "processeur",
      "statement": "Que signifie qu'un processeur est en **architecture $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 et adresses 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 (soit\n$16$ exbioctets, largement plus que toute mémoire\nactuelle). Les processeurs modernes sont presque\ntous en $64$ bits.\n"
        },
        {
          "text": "Il possède exactement $64$ cœurs de calcul",
          "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",
      "partie": "processeur",
      "statement": "Qu'apporte un processeur **multi-cœurs** ?",
      "options": [
        {
          "text": "Il fonctionne entièrement sans système d'exploitation",
          "correct": false,
          "feedback": "Erreur : aucun rapport. Le SE est nécessaire pour\norchestrer les processus.\n"
        },
        {
          "text": "Il exécute plusieurs instructions en parallèle",
          "correct": true,
          "feedback": "Bonne réponse : avec $N$ cœurs, on peut exécuter\n$N$ programmes en vrai parallèle, un par cœur.\nC'est devenu indispensable car les fréquences\nd'horloge stagnent depuis $2005$ environ.\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",
      "partie": "processeur",
      "statement": "Qu'est-ce que le **langage machine** ?",
      "options": [
        {
          "text": "Un langage de programmation de haut niveau comme C ou Python",
          "correct": false,
          "feedback": "Erreur : C et Python sont des langages de **haut niveau**, 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 du 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",
      "partie": "memoire",
      "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": "Le registre pointant la prochaine instruction",
          "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 totale 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": "q19",
      "difficulty": 2,
      "skills": [
        "stockage"
      ],
      "title": "SSD vs disque dur",
      "partie": "memoire",
      "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 de la mémoire flash, le HDD des plateaux mécaniques",
          "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",
      "partie": "memoire",
      "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": "La ROM est non volatile et fixe, la RAM volatile et modifiable",
          "correct": true,
          "feedback": "Bonne réponse : la ROM conserve son contenu,\nfixé à la fabrication, même quand l'ordinateur\nest éteint. La RAM est la zone de travail\ntemporaire.\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": "La ROM est généralement plus grande que la RAM",
          "correct": false,
          "feedback": "Erreur : c'est généralement l'inverse. La ROM est\nsouvent de petite taille, la RAM bien plus grande\npour les programmes en cours.\n"
        }
      ],
      "explanation": "ROM signifie Read-Only Memory (mémoire en lecture\nseule) ; RAM signifie Random Access Memory (mémoire\nà accès direct). Aujourd'hui, la « ROM » des\nordinateurs est souvent une mémoire flash,\nmodifiable mais non volatile."
    },
    {
      "id": "q25",
      "difficulty": 3,
      "skills": [
        "synthese"
      ],
      "title": "Évolution historique",
      "partie": "von-neumann",
      "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": "Le nombre de transistors croît toujours, mais la performance par cœur stagne",
          "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 de\nchaque cœur stagne depuis $2005$ environ.\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 totalement 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",
      "partie": "memoire",
      "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": 3,
      "skills": [
        "synthese",
        "performance"
      ],
      "title": "Comparer deux processeurs sur une tâche parallèle",
      "partie": "von-neumann",
      "statement": "Deux processeurs sont proposés pour un travail de **rendu vidéo**,\ntâche qui se parallélise très bien :\nle processeur **A** est cadencé à $4$ GHz et possède $4$ cœurs ;\nle processeur **B** est cadencé à $3$ GHz et possède $8$ cœurs.\nLequel sera, en pratique, le plus performant sur cette tâche ?",
      "options": [
        {
          "text": "Le processeur B, car doubler les cœurs compense l'écart de fréquence sur une tâche parallèle",
          "correct": true,
          "feedback": "Bonne réponse : pour une tâche qui se parallélise bien,\nle débit total est approximativement proportionnel au\nproduit fréquence par nombre de cœurs.\nPour A on a $4 \\times 4 = 16$ unités de travail\npar seconde (en notation simplifiée), et pour B\n$3 \\times 8 = 24$. B l'emporte donc nettement.\n"
        },
        {
          "text": "Le processeur A, car une fréquence d'horloge plus élevée signifie qu'il exécute toujours plus d'instructions par seconde",
          "correct": false,
          "feedback": "Erreur : la fréquence d'horloge ne mesure que la cadence\nd'un seul cœur. Pour les charges parallèles, le nombre\nde cœurs est au moins aussi déterminant.\n"
        },
        {
          "text": "Le processeur A, car les processeurs à haute fréquence sont systématiquement les plus récents",
          "correct": false,
          "feedback": "Erreur : la fréquence d'horloge stagne depuis le milieu\ndes années $2000$. Un processeur à $3$ GHz peut être bien\nplus récent et performant qu'un autre à $4$ GHz.\n"
        },
        {
          "text": "Aucun des deux, car la performance d'un processeur ne dépend ni de la fréquence ni du nombre de cœurs",
          "correct": false,
          "feedback": "Erreur : ces deux paramètres sont des indicateurs réels\nde performance, simplement non suffisants à eux seuls\n(la taille des caches, l'architecture interne et le jeu\nd'instructions interviennent aussi).\n"
        }
      ],
      "explanation": "Sur une tâche très parallèle, le débit total se rapproche\ndu produit fréquence par nombre de cœurs ; sur une tâche\nséquentielle (qui n'utilise qu'un cœur), c'est la fréquence\nseule qui compte. Le choix d'un processeur dépend donc du\nprofil de la charge de travail visée."
    },
    {
      "id": "q28",
      "difficulty": 3,
      "skills": [
        "synthese",
        "loi-moore"
      ],
      "title": "Pourquoi la fréquence stagne",
      "partie": "von-neumann",
      "statement": "Le nombre de transistors par puce ne cesse d'augmenter\nrégulièrement, mais la **fréquence d'horloge** des\nprocesseurs grand public a cessé d'augmenter significativement\ndepuis le milieu des années $2000$ (elle plafonne autour de\n$3$ à $5$ GHz). Quelle en est la cause principale ?",
      "options": [
        {
          "text": "La consommation et la chaleur croissent trop vite avec la fréquence pour être évacuées",
          "correct": true,
          "feedback": "Bonne réponse : la puissance dissipée par un circuit\naugmente très vite avec la fréquence. Au-delà d'un\ncertain seuil, la chaleur produite ne peut plus être\névacuée sans refroidissement extrême. Les fabricants\nont donc privilégié la multiplication des cœurs.\n"
        },
        {
          "text": "Les transistors ne sont plus utilisés dans les processeurs récents, qui reposent sur d'autres technologies",
          "correct": false,
          "feedback": "Erreur : les processeurs actuels sont toujours composés\nde milliards de transistors, simplement gravés plus\nfinement.\n"
        },
        {
          "text": "Les constructeurs se sont mis d'accord pour ne plus vendre de processeurs au-dessus de $5$ GHz, par souci de standardisation",
          "correct": false,
          "feedback": "Erreur : il n'existe aucun accord de ce type, la\ncontrainte est physique.\n"
        },
        {
          "text": "Les utilisateurs ne demandent plus de processeurs rapides depuis l'arrivée des smartphones",
          "correct": false,
          "feedback": "Erreur : la demande de performance n'a jamais cessé,\nla limite est technologique et non commerciale.\n"
        }
      ],
      "explanation": "Cette barrière physique a réorienté l'industrie vers le\n**parallélisme** (multi-cœurs, GPU, processeurs spécialisés)\npour continuer à exploiter l'augmentation du nombre de\ntransistors. C'est une illustration concrète des limites\nde la loi de Moore, qui décrit la densité d'intégration et\nnon la vitesse d'horloge."
    },
    {
      "id": "q29",
      "difficulty": 1,
      "skills": [
        "capteurs-actionneurs",
        "capteur",
        "definition"
      ],
      "title": "Rôle d'un capteur",
      "partie": "memoire",
      "statement": "Quel est le rôle d'un **capteur** dans un système\ninformatique ?",
      "options": [
        {
          "text": "Convertir une grandeur physique (température, lumière, distance) en valeur lisible par un programme",
          "correct": true,
          "feedback": "Le capteur est une entrée : il mesure et fournit\nun nombre.\n"
        },
        {
          "text": "Produire un mouvement ou une action physique (rotation, chauffe, éclairage) à partir d'un ordre du programme",
          "correct": false,
          "feedback": "C'est la définition d'un actionneur, la sortie du\nsystème.\n"
        },
        {
          "text": "Conserver les mesures effectuées (température, lumière, distance) afin que le programme les relise plus tard",
          "correct": false,
          "feedback": "Le stockage relève de la mémoire ; le capteur\nmesure, il ne retient rien.\n"
        },
        {
          "text": "Exécuter le programme qui traite les mesures et décide des actions à mener en fonction des résultats",
          "correct": false,
          "feedback": "L'exécution revient au processeur ; le capteur ne\nfait que fournir des données.\n"
        }
      ],
      "explanation": "Capteurs et actionneurs sont les périphériques des\nobjets connectés : le capteur est une entrée (il\nmesure), l'actionneur une sortie (il agit), et le\nprogramme fait le lien entre les deux."
    },
    {
      "id": "q30",
      "difficulty": 2,
      "skills": [
        "capteurs-actionneurs",
        "chaine",
        "entree-sortie"
      ],
      "title": "Le sens des informations dans un thermostat",
      "partie": "memoire",
      "statement": "Un thermostat connecté comprend une sonde de\ntempérature, un microcontrôleur qui exécute le\nprogramme et un relais qui allume le chauffage.\nDans quel sens circulent les informations ?",
      "options": [
        {
          "text": "De la sonde vers le programme, puis du programme vers le relais",
          "correct": true,
          "feedback": "La sonde (capteur) fournit une mesure, le\nprogramme décide, le relais (actionneur) exécute.\n"
        },
        {
          "text": "Du relais vers le programme, puis du programme vers la sonde",
          "correct": false,
          "feedback": "Le relais n'a rien à mesurer et la sonde ne\nreçoit pas d'ordre : les rôles sont inversés.\n"
        },
        {
          "text": "De la sonde vers le relais directement, le programme se contentant d'observer",
          "correct": false,
          "feedback": "Sans le programme, aucune décision n'est prise ;\nle relais ne sait pas interpréter une\ntempérature.\n"
        },
        {
          "text": "Du programme vers la sonde et vers le relais, qui lui renvoient tous deux une mesure",
          "correct": false,
          "feedback": "Seule la sonde mesure ; le relais reçoit un\nordre, il ne renvoie pas de valeur.\n"
        }
      ],
      "explanation": "La chaîne est toujours la même : capteur, puis\nprogramme, puis actionneur. Le capteur est un\npériphérique d'entrée, l'actionneur un périphérique\nde sortie ; le programme lit l'un et commande\nl'autre."
    },
    {
      "id": "q31",
      "difficulty": 3,
      "skills": [
        "capteurs-actionneurs",
        "conversion",
        "calcul"
      ],
      "title": "Convertir la lecture d'un capteur",
      "partie": "memoire",
      "statement": "Un capteur de tension fournit au programme un entier\n`n` compris entre $0$ et $1023$, proportionnel à une\ntension de $0$ à $5$ V ($0$ pour $0$ V, $1023$ pour\n$5$ V). Quelle expression calcule la tension en\nvolts ?",
      "options": [
        {
          "text": "`n * 5 / 1023`",
          "correct": true,
          "feedback": "Pour `n = 1023`, on obtient $5{,}0$ ; pour\n`n = 0`, on obtient $0$ : la relation est bien\nproportionnelle.\n"
        },
        {
          "text": "`n / 5 * 1023`",
          "correct": false,
          "feedback": "Pour `n = 1023`, cette expression dépasse\n$200\\,000$ ; les facteurs sont inversés.\n"
        },
        {
          "text": "`n * 1023 / 5`",
          "correct": false,
          "feedback": "Même erreur : la tension calculée grimperait\nau-delà de $200\\,000$ au lieu de s'arrêter à $5$.\n"
        },
        {
          "text": "`5 / n`",
          "correct": false,
          "feedback": "Ce quotient décroît quand `n` augmente et échoue\npour `n = 0` (division par zéro).\n"
        }
      ],
      "explanation": "Une conversion proportionnelle s'écrit\n`valeur_max_physique * n / valeur_max_capteur`.\nVérifier sur les bornes ($0$ et $1023$) suffit à\nécarter les expressions fausses ; `n = 512` donne\nenviron $2{,}5$ V."
    },
    {
      "id": "q32",
      "difficulty": 2,
      "skills": [
        "langage-machine",
        "execution",
        "registres"
      ],
      "title": "Dérouler quatre instructions machine",
      "partie": "von-neumann",
      "statement": "Un processeur exécute la séquence suivante, où `LDR` charge une\nvaleur dans un registre, `ADD` additionne et `STR` range un registre\nen mémoire :\n```\nLDR R0, 5\nLDR R1, 3\nADD R2, R0, R1\nSTR R2, [100]\n```\nQue contient la case mémoire d'adresse $100$ à la fin ?",
      "options": [
        {
          "text": "$8$",
          "correct": true,
          "feedback": "Bonne réponse : `R0` reçoit $5$, `R1` reçoit $3$, `R2`\nreçoit leur somme $8$, puis cette somme est écrite à\nl'adresse $100$.\n"
        },
        {
          "text": "$15$",
          "correct": false,
          "feedback": "Erreur : `ADD` additionne, elle ne multiplie pas.\n"
        },
        {
          "text": "$2$",
          "correct": false,
          "feedback": "Erreur : `ADD R2, R0, R1` calcule `R0 + R1`, pas leur\ndifférence.\n"
        },
        {
          "text": "$100$",
          "correct": false,
          "feedback": "Erreur : $100$ est l'adresse où le résultat est rangé, pas la\nvaleur rangée.\n"
        }
      ],
      "explanation": "Une instruction machine fait une seule chose : charger, calculer ou\nranger. Dérouler un programme consiste à suivre les registres et la\nmémoire instruction par instruction.",
      "variants": [
        {
          "statement": "Un processeur exécute la séquence suivante, où `LDR` charge une\nvaleur dans un registre, `ADD` additionne et `STR` range un registre\nen mémoire :\n```\nLDR R0, 5\nLDR R1, 3\nADD R2, R0, R1\nSTR R2, [100]\n```\nQue contient la case mémoire d'adresse $100$ à la fin ?",
          "options": [
            {
              "text": "$8$",
              "correct": true,
              "feedback": "Bonne réponse : `R0` reçoit $5$, `R1` reçoit $3$, `R2`\nreçoit leur somme $8$, puis cette somme est écrite à\nl'adresse $100$.\n"
            },
            {
              "text": "$15$",
              "correct": false,
              "feedback": "Erreur : `ADD` additionne, elle ne multiplie pas.\n"
            },
            {
              "text": "$2$",
              "correct": false,
              "feedback": "Erreur : `ADD R2, R0, R1` calcule `R0 + R1`, pas leur\ndifférence.\n"
            },
            {
              "text": "$100$",
              "correct": false,
              "feedback": "Erreur : $100$ est l'adresse où le résultat est rangé, pas la\nvaleur rangée.\n"
            }
          ],
          "explanation": "Une instruction machine fait une seule chose : charger, calculer ou\nranger. Dérouler un programme consiste à suivre les registres et la\nmémoire instruction par instruction."
        },
        {
          "statement": "Un processeur exécute la séquence suivante, où `LDR` charge une\nvaleur dans un registre, `ADD` additionne et `STR` range un registre\nen mémoire :\n```\nLDR R0, 12\nLDR R1, 7\nADD R2, R0, R1\nSTR R2, [100]\n```\nQue contient la case mémoire d'adresse $100$ à la fin ?",
          "options": [
            {
              "text": "$19$",
              "correct": true,
              "feedback": "Bonne réponse : `R0` reçoit $12$, `R1` reçoit $7$, `R2`\nreçoit leur somme $19$, puis cette somme est écrite à\nl'adresse $100$.\n"
            },
            {
              "text": "$84$",
              "correct": false,
              "feedback": "Erreur : `ADD` additionne, elle ne multiplie pas.\n"
            },
            {
              "text": "$5$",
              "correct": false,
              "feedback": "Erreur : `ADD R2, R0, R1` calcule `R0 + R1`, pas leur\ndifférence.\n"
            },
            {
              "text": "$100$",
              "correct": false,
              "feedback": "Erreur : $100$ est l'adresse où le résultat est rangé, pas la\nvaleur rangée.\n"
            }
          ],
          "explanation": "Une instruction machine fait une seule chose : charger, calculer ou\nranger. Dérouler un programme consiste à suivre les registres et la\nmémoire instruction par instruction."
        },
        {
          "statement": "Un processeur exécute la séquence suivante, où `LDR` charge une\nvaleur dans un registre, `ADD` additionne et `STR` range un registre\nen mémoire :\n```\nLDR R0, 9\nLDR R1, 9\nADD R2, R0, R1\nSTR R2, [100]\n```\nQue contient la case mémoire d'adresse $100$ à la fin ?",
          "options": [
            {
              "text": "$18$",
              "correct": true,
              "feedback": "Bonne réponse : `R0` reçoit $9$, `R1` reçoit $9$, `R2`\nreçoit leur somme $18$, puis cette somme est écrite à\nl'adresse $100$.\n"
            },
            {
              "text": "$81$",
              "correct": false,
              "feedback": "Erreur : `ADD` additionne, elle ne multiplie pas.\n"
            },
            {
              "text": "$0$",
              "correct": false,
              "feedback": "Erreur : `ADD R2, R0, R1` calcule `R0 + R1`, pas leur\ndifférence.\n"
            },
            {
              "text": "$100$",
              "correct": false,
              "feedback": "Erreur : $100$ est l'adresse où le résultat est rangé, pas la\nvaleur rangée.\n"
            }
          ],
          "explanation": "Une instruction machine fait une seule chose : charger, calculer ou\nranger. Dérouler un programme consiste à suivre les registres et la\nmémoire instruction par instruction."
        }
      ]
    },
    {
      "id": "q33",
      "difficulty": 3,
      "skills": [
        "von-neumann",
        "bus",
        "goulot"
      ],
      "title": "Le goulot d'étranglement de von Neumann",
      "partie": "von-neumann",
      "statement": "On parle de « goulot d'étranglement de von Neumann ». De quoi\ns'agit-il ?",
      "options": [
        {
          "text": "Du bus unique entre processeur et mémoire, qui limite le débit",
          "correct": true,
          "feedback": "Bonne réponse : instructions et données transitent par le même\nchemin. Le processeur, bien plus rapide que la mémoire, passe\nune partie de son temps à attendre.\n"
        },
        {
          "text": "De la taille limitée des registres du processeur, trop peu nombreux",
          "correct": false,
          "feedback": "Erreur : les registres sont rapides et peu nombreux par choix ;\nle goulot concerne les échanges avec la mémoire.\n"
        },
        {
          "text": "De l'impossibilité de stocker un programme et ses données en mémoire",
          "correct": false,
          "feedback": "Erreur : stocker le programme en mémoire est précisément le\nprincipe du modèle.\n"
        },
        {
          "text": "De la chaleur dégagée par le processeur à haute fréquence",
          "correct": false,
          "feedback": "Erreur : la dissipation thermique limite la fréquence, mais ce\nn'est pas ce que désigne l'expression.\n"
        }
      ],
      "explanation": "Les mémoires caches, placées près du processeur, servent à réduire\nce goulot en évitant une partie des accès à la mémoire vive."
    },
    {
      "id": "q34",
      "difficulty": 1,
      "skills": [
        "von-neumann",
        "composants"
      ],
      "title": "Un intrus parmi les composants",
      "partie": "von-neumann",
      "statement": "Parmi les éléments suivants, lequel ne fait pas partie du modèle\nde von Neumann ?",
      "options": [
        {
          "text": "Le système d'exploitation",
          "correct": true,
          "feedback": "Bonne réponse : le système d'exploitation est un logiciel. Le\nmodèle de von Neumann décrit le matériel : unité de commande,\nunité arithmétique et logique, mémoire, entrées-sorties.\n"
        },
        {
          "text": "L'unité arithmétique et logique",
          "correct": false,
          "feedback": "Erreur : elle fait partie du processeur décrit par le modèle,\nchargée des calculs.\n"
        },
        {
          "text": "La mémoire contenant programme et données",
          "correct": false,
          "feedback": "Erreur : la mémoire unique pour le programme et les données est\nau cœur du modèle.\n"
        },
        {
          "text": "Les dispositifs d'entrée et de sortie",
          "correct": false,
          "feedback": "Erreur : les entrées-sorties sont l'un des quatre blocs du\nmodèle.\n"
        }
      ],
      "explanation": "Le modèle de von Neumann décrit une organisation matérielle ; les\nlogiciels, système d'exploitation compris, s'exécutent dessus."
    },
    {
      "id": "q35",
      "difficulty": 3,
      "skills": [
        "frequence",
        "horloge",
        "calcul"
      ],
      "title": "La durée d'un milliard d'instructions",
      "partie": "von-neumann",
      "statement": "Un processeur cadencé à $2$ GHz exécute en moyenne une instruction\npar cycle d'horloge. Combien de temps lui faut-il pour exécuter\nun milliard d'instructions ?",
      "options": [
        {
          "text": "Environ $0{,}5$ s",
          "correct": true,
          "feedback": "Bonne réponse : $2$ GHz, c'est $2 \\times 10^{9}$ cycles par\nseconde, donc autant d'instructions. un milliard d'instructions\ndemandent $0{,}5$ s.\n"
        },
        {
          "text": "Environ $2$ s",
          "correct": false,
          "feedback": "Erreur : le rapport est inversé. La durée est le nombre\nd'instructions divisé par la fréquence, pas le contraire.\n"
        },
        {
          "text": "Environ $2 \\times 10^{9}$ s",
          "correct": false,
          "feedback": "Erreur : $2 \\times 10^{9}$ est un nombre de cycles, pas une durée.\n"
        },
        {
          "text": "Environ $1$ s, une instruction par nanoseconde",
          "correct": false,
          "feedback": "Erreur : à $2$ GHz, un cycle dure moins d'une nanoseconde ;\nla durée dépend de la fréquence et du nombre d'instructions.\n"
        }
      ],
      "explanation": "La fréquence donne le nombre de cycles par seconde. À une\ninstruction par cycle, un processeur à $2$ GHz en traite\n$2$ milliards chaque seconde.",
      "variants": [
        {
          "statement": "Un processeur cadencé à $2$ GHz exécute en moyenne une instruction\npar cycle d'horloge. Combien de temps lui faut-il pour exécuter\nun milliard d'instructions ?",
          "options": [
            {
              "text": "Environ $0{,}5$ s",
              "correct": true,
              "feedback": "Bonne réponse : $2$ GHz, c'est $2 \\times 10^{9}$ cycles par\nseconde, donc autant d'instructions. un milliard d'instructions\ndemandent $0{,}5$ s.\n"
            },
            {
              "text": "Environ $2$ s",
              "correct": false,
              "feedback": "Erreur : le rapport est inversé. La durée est le nombre\nd'instructions divisé par la fréquence, pas le contraire.\n"
            },
            {
              "text": "Environ $2 \\times 10^{9}$ s",
              "correct": false,
              "feedback": "Erreur : $2 \\times 10^{9}$ est un nombre de cycles, pas une durée.\n"
            },
            {
              "text": "Environ $1$ s, une instruction par nanoseconde",
              "correct": false,
              "feedback": "Erreur : à $2$ GHz, un cycle dure moins d'une nanoseconde ;\nla durée dépend de la fréquence et du nombre d'instructions.\n"
            }
          ],
          "explanation": "La fréquence donne le nombre de cycles par seconde. À une\ninstruction par cycle, un processeur à $2$ GHz en traite\n$2$ milliards chaque seconde."
        },
        {
          "statement": "Un processeur cadencé à $3$ GHz exécute en moyenne une instruction\npar cycle d'horloge. Combien de temps lui faut-il pour exécuter\nsix milliards d'instructions ?",
          "options": [
            {
              "text": "Environ $2$ s",
              "correct": true,
              "feedback": "Bonne réponse : $3$ GHz, c'est $3 \\times 10^{9}$ cycles par\nseconde, donc autant d'instructions. six milliards d'instructions\ndemandent $2$ s.\n"
            },
            {
              "text": "Environ $0{,}5$ s",
              "correct": false,
              "feedback": "Erreur : le rapport est inversé. La durée est le nombre\nd'instructions divisé par la fréquence, pas le contraire.\n"
            },
            {
              "text": "Environ $18 \\times 10^{9}$ s",
              "correct": false,
              "feedback": "Erreur : $18 \\times 10^{9}$ est un nombre de cycles, pas une durée.\n"
            },
            {
              "text": "Environ $1$ s, une instruction par nanoseconde",
              "correct": false,
              "feedback": "Erreur : à $3$ GHz, un cycle dure moins d'une nanoseconde ;\nla durée dépend de la fréquence et du nombre d'instructions.\n"
            }
          ],
          "explanation": "La fréquence donne le nombre de cycles par seconde. À une\ninstruction par cycle, un processeur à $3$ GHz en traite\n$3$ milliards chaque seconde."
        },
        {
          "statement": "Un processeur cadencé à $4$ GHz exécute en moyenne une instruction\npar cycle d'horloge. Combien de temps lui faut-il pour exécuter\nun milliard d'instructions ?",
          "options": [
            {
              "text": "Environ $0{,}25$ s",
              "correct": true,
              "feedback": "Bonne réponse : $4$ GHz, c'est $4 \\times 10^{9}$ cycles par\nseconde, donc autant d'instructions. un milliard d'instructions\ndemandent $0{,}25$ s.\n"
            },
            {
              "text": "Environ $4$ s",
              "correct": false,
              "feedback": "Erreur : le rapport est inversé. La durée est le nombre\nd'instructions divisé par la fréquence, pas le contraire.\n"
            },
            {
              "text": "Environ $4 \\times 10^{9}$ s",
              "correct": false,
              "feedback": "Erreur : $4 \\times 10^{9}$ est un nombre de cycles, pas une durée.\n"
            },
            {
              "text": "Environ $1$ s, une instruction par nanoseconde",
              "correct": false,
              "feedback": "Erreur : à $4$ GHz, un cycle dure moins d'une nanoseconde ;\nla durée dépend de la fréquence et du nombre d'instructions.\n"
            }
          ],
          "explanation": "La fréquence donne le nombre de cycles par seconde. À une\ninstruction par cycle, un processeur à $4$ GHz en traite\n$4$ milliards chaque seconde."
        }
      ]
    },
    {
      "id": "q36",
      "difficulty": 1,
      "skills": [
        "jeu-instructions",
        "processeur"
      ],
      "title": "Le jeu d'instructions",
      "partie": "processeur",
      "statement": "Qu'appelle-t-on le jeu d'instructions d'un processeur ?",
      "options": [
        {
          "text": "L'ensemble des opérations élémentaires qu'il sait exécuter",
          "correct": true,
          "feedback": "Bonne réponse : charger, ranger, additionner, comparer, sauter\n: chaque processeur dispose d'une liste finie d'instructions\ncâblées, chacune avec son code binaire.\n"
        },
        {
          "text": "Le programme actuellement en cours d'exécution sur la machine",
          "correct": false,
          "feedback": "Erreur : un programme est une suite d'instructions choisies\ndans le jeu ; le jeu lui-même est fixé par le processeur.\n"
        },
        {
          "text": "Les fonctions prédéfinies d'un langage comme Python",
          "correct": false,
          "feedback": "Erreur : les fonctions d'un langage sont traduites en de\nnombreuses instructions machine.\n"
        },
        {
          "text": "La liste des périphériques reconnus par la machine",
          "correct": false,
          "feedback": "Erreur : les périphériques relèvent des entrées-sorties, pas du\njeu d'instructions.\n"
        }
      ],
      "explanation": "Deux processeurs de familles différentes n'ont pas le même jeu\nd'instructions : un programme compilé pour l'un ne s'exécute pas\nsur l'autre."
    },
    {
      "id": "q37",
      "difficulty": 2,
      "skills": [
        "saut",
        "compteur-ordinal",
        "controle"
      ],
      "title": "Le rôle d'un saut conditionnel",
      "partie": "processeur",
      "statement": "À quoi sert une instruction de saut conditionnel dans un programme\nen langage machine ?",
      "options": [
        {
          "text": "À modifier le compteur ordinal selon un test",
          "correct": true,
          "feedback": "Bonne réponse : sans saut, les instructions s'exécutent dans\nl'ordre. Le saut conditionnel permet de passer ailleurs si une\ncondition est vraie, ce qui traduit `if` et `while`.\n"
        },
        {
          "text": "À sauter une instruction erronée pour éviter un plantage",
          "correct": false,
          "feedback": "Erreur : le saut n'a rien d'un mécanisme de sécurité ; il\nexprime la logique du programme.\n"
        },
        {
          "text": "À transférer des données entre deux registres",
          "correct": false,
          "feedback": "Erreur : le transfert entre registres est une instruction de\ndéplacement, pas un saut.\n"
        },
        {
          "text": "À accélérer le processeur en passant au cycle suivant",
          "correct": false,
          "feedback": "Erreur : un saut ne change pas la vitesse, seulement l'adresse\nde la prochaine instruction.\n"
        }
      ],
      "explanation": "Toutes les structures de contrôle d'un langage évolué, conditions\net boucles, se ramènent en langage machine à des sauts,\nconditionnels ou non."
    },
    {
      "id": "q38",
      "difficulty": 2,
      "skills": [
        "compteur-ordinal",
        "adresse",
        "calcul"
      ],
      "title": "Le compteur ordinal après une instruction",
      "partie": "processeur",
      "statement": "Le compteur ordinal vaut $100$ et l'instruction située à cette\nadresse occupe $4$ octets. En l'absence de saut, que vaut le\ncompteur ordinal après son exécution ?",
      "options": [
        {
          "text": "$104$",
          "correct": true,
          "feedback": "Bonne réponse : le compteur ordinal avance de la taille de\nl'instruction pour désigner la suivante, à l'adresse\n$100 + 4$.\n"
        },
        {
          "text": "$101$",
          "correct": false,
          "feedback": "Erreur : les adresses comptent des octets, et une instruction en\noccupe $4$.\n"
        },
        {
          "text": "$100$",
          "correct": false,
          "feedback": "Erreur : s'il ne changeait pas, la même instruction serait\nexécutée indéfiniment.\n"
        },
        {
          "text": "$96$",
          "correct": false,
          "feedback": "Erreur : le programme avance vers les adresses croissantes, sauf\nsaut explicite.\n"
        }
      ],
      "explanation": "Le compteur ordinal contient l'adresse de la prochaine instruction.\nIl progresse automatiquement, et seuls les sauts le modifient\nautrement.",
      "variants": [
        {
          "statement": "Le compteur ordinal vaut $100$ et l'instruction située à cette\nadresse occupe $4$ octets. En l'absence de saut, que vaut le\ncompteur ordinal après son exécution ?",
          "options": [
            {
              "text": "$104$",
              "correct": true,
              "feedback": "Bonne réponse : le compteur ordinal avance de la taille de\nl'instruction pour désigner la suivante, à l'adresse\n$100 + 4$.\n"
            },
            {
              "text": "$101$",
              "correct": false,
              "feedback": "Erreur : les adresses comptent des octets, et une instruction en\noccupe $4$.\n"
            },
            {
              "text": "$100$",
              "correct": false,
              "feedback": "Erreur : s'il ne changeait pas, la même instruction serait\nexécutée indéfiniment.\n"
            },
            {
              "text": "$96$",
              "correct": false,
              "feedback": "Erreur : le programme avance vers les adresses croissantes, sauf\nsaut explicite.\n"
            }
          ],
          "explanation": "Le compteur ordinal contient l'adresse de la prochaine instruction.\nIl progresse automatiquement, et seuls les sauts le modifient\nautrement."
        },
        {
          "statement": "Le compteur ordinal vaut $200$ et l'instruction située à cette\nadresse occupe $2$ octets. En l'absence de saut, que vaut le\ncompteur ordinal après son exécution ?",
          "options": [
            {
              "text": "$202$",
              "correct": true,
              "feedback": "Bonne réponse : le compteur ordinal avance de la taille de\nl'instruction pour désigner la suivante, à l'adresse\n$200 + 2$.\n"
            },
            {
              "text": "$201$",
              "correct": false,
              "feedback": "Erreur : les adresses comptent des octets, et une instruction en\noccupe $2$.\n"
            },
            {
              "text": "$200$",
              "correct": false,
              "feedback": "Erreur : s'il ne changeait pas, la même instruction serait\nexécutée indéfiniment.\n"
            },
            {
              "text": "$198$",
              "correct": false,
              "feedback": "Erreur : le programme avance vers les adresses croissantes, sauf\nsaut explicite.\n"
            }
          ],
          "explanation": "Le compteur ordinal contient l'adresse de la prochaine instruction.\nIl progresse automatiquement, et seuls les sauts le modifient\nautrement."
        },
        {
          "statement": "Le compteur ordinal vaut $500$ et l'instruction située à cette\nadresse occupe $8$ octets. En l'absence de saut, que vaut le\ncompteur ordinal après son exécution ?",
          "options": [
            {
              "text": "$508$",
              "correct": true,
              "feedback": "Bonne réponse : le compteur ordinal avance de la taille de\nl'instruction pour désigner la suivante, à l'adresse\n$500 + 8$.\n"
            },
            {
              "text": "$501$",
              "correct": false,
              "feedback": "Erreur : les adresses comptent des octets, et une instruction en\noccupe $8$.\n"
            },
            {
              "text": "$500$",
              "correct": false,
              "feedback": "Erreur : s'il ne changeait pas, la même instruction serait\nexécutée indéfiniment.\n"
            },
            {
              "text": "$492$",
              "correct": false,
              "feedback": "Erreur : le programme avance vers les adresses croissantes, sauf\nsaut explicite.\n"
            }
          ],
          "explanation": "Le compteur ordinal contient l'adresse de la prochaine instruction.\nIl progresse automatiquement, et seuls les sauts le modifient\nautrement."
        }
      ]
    },
    {
      "id": "q39",
      "difficulty": 3,
      "skills": [
        "langage-machine",
        "boucle",
        "saut",
        "trace"
      ],
      "title": "Une boucle en langage machine",
      "partie": "processeur",
      "statement": "Un processeur exécute ce programme, où `SUB R0, R0, 1` retire $1$ à\n`R0`, `CMP` compare et `BNE` saute à l'étiquette si la dernière\ncomparaison n'a pas donné l'égalité :\n```\n    LDR R0, 3\nboucle:\n    SUB R0, R0, 1\n    CMP R0, 0\n    BNE boucle\n```\nCombien de fois l'instruction `SUB` est-elle exécutée ?",
      "options": [
        {
          "text": "$3$ fois",
          "correct": true,
          "feedback": "Bonne réponse : `R0` part de $3$ et perd $1$ à chaque tour. Le\nsaut arrière a lieu tant que `R0` n'est pas nul, soit $3$\npassages par `SUB`.\n"
        },
        {
          "text": "$2$ fois",
          "correct": false,
          "feedback": "Erreur : le dernier tour, qui fait passer `R0` de $1$ à $0$,\nexécute aussi `SUB` avant que `BNE` ne laisse passer.\n"
        },
        {
          "text": "$4$ fois",
          "correct": false,
          "feedback": "Erreur : dès que `R0` vaut $0$, `BNE` ne saute plus et la\nboucle s'arrête.\n"
        },
        {
          "text": "Une infinité de fois, `BNE` sautant toujours",
          "correct": false,
          "feedback": "Erreur : `BNE` ne saute que si la comparaison n'a pas donné\nl'égalité, ce qui finit par arriver.\n"
        }
      ],
      "explanation": "Une boucle en langage machine est un saut arrière conditionnel.\nLa dérouler, c'est suivre le registre compteur jusqu'à ce que le\nsaut ne soit plus pris.",
      "variants": [
        {
          "statement": "Un processeur exécute ce programme, où `SUB R0, R0, 1` retire $1$ à\n`R0`, `CMP` compare et `BNE` saute à l'étiquette si la dernière\ncomparaison n'a pas donné l'égalité :\n```\n    LDR R0, 3\nboucle:\n    SUB R0, R0, 1\n    CMP R0, 0\n    BNE boucle\n```\nCombien de fois l'instruction `SUB` est-elle exécutée ?",
          "options": [
            {
              "text": "$3$ fois",
              "correct": true,
              "feedback": "Bonne réponse : `R0` part de $3$ et perd $1$ à chaque tour. Le\nsaut arrière a lieu tant que `R0` n'est pas nul, soit $3$\npassages par `SUB`.\n"
            },
            {
              "text": "$2$ fois",
              "correct": false,
              "feedback": "Erreur : le dernier tour, qui fait passer `R0` de $1$ à $0$,\nexécute aussi `SUB` avant que `BNE` ne laisse passer.\n"
            },
            {
              "text": "$4$ fois",
              "correct": false,
              "feedback": "Erreur : dès que `R0` vaut $0$, `BNE` ne saute plus et la\nboucle s'arrête.\n"
            },
            {
              "text": "Une infinité de fois, `BNE` sautant toujours",
              "correct": false,
              "feedback": "Erreur : `BNE` ne saute que si la comparaison n'a pas donné\nl'égalité, ce qui finit par arriver.\n"
            }
          ],
          "explanation": "Une boucle en langage machine est un saut arrière conditionnel.\nLa dérouler, c'est suivre le registre compteur jusqu'à ce que le\nsaut ne soit plus pris."
        },
        {
          "statement": "Un processeur exécute ce programme, où `SUB R0, R0, 1` retire $1$ à\n`R0`, `CMP` compare et `BNE` saute à l'étiquette si la dernière\ncomparaison n'a pas donné l'égalité :\n```\n    LDR R0, 5\nboucle:\n    SUB R0, R0, 1\n    CMP R0, 0\n    BNE boucle\n```\nCombien de fois l'instruction `SUB` est-elle exécutée ?",
          "options": [
            {
              "text": "$5$ fois",
              "correct": true,
              "feedback": "Bonne réponse : `R0` part de $5$ et perd $1$ à chaque tour. Le\nsaut arrière a lieu tant que `R0` n'est pas nul, soit $5$\npassages par `SUB`.\n"
            },
            {
              "text": "$4$ fois",
              "correct": false,
              "feedback": "Erreur : le dernier tour, qui fait passer `R0` de $1$ à $0$,\nexécute aussi `SUB` avant que `BNE` ne laisse passer.\n"
            },
            {
              "text": "$6$ fois",
              "correct": false,
              "feedback": "Erreur : dès que `R0` vaut $0$, `BNE` ne saute plus et la\nboucle s'arrête.\n"
            },
            {
              "text": "Une infinité de fois, `BNE` sautant toujours",
              "correct": false,
              "feedback": "Erreur : `BNE` ne saute que si la comparaison n'a pas donné\nl'égalité, ce qui finit par arriver.\n"
            }
          ],
          "explanation": "Une boucle en langage machine est un saut arrière conditionnel.\nLa dérouler, c'est suivre le registre compteur jusqu'à ce que le\nsaut ne soit plus pris."
        },
        {
          "statement": "Un processeur exécute ce programme, où `SUB R0, R0, 1` retire $1$ à\n`R0`, `CMP` compare et `BNE` saute à l'étiquette si la dernière\ncomparaison n'a pas donné l'égalité :\n```\n    LDR R0, 8\nboucle:\n    SUB R0, R0, 1\n    CMP R0, 0\n    BNE boucle\n```\nCombien de fois l'instruction `SUB` est-elle exécutée ?",
          "options": [
            {
              "text": "$8$ fois",
              "correct": true,
              "feedback": "Bonne réponse : `R0` part de $8$ et perd $1$ à chaque tour. Le\nsaut arrière a lieu tant que `R0` n'est pas nul, soit $8$\npassages par `SUB`.\n"
            },
            {
              "text": "$7$ fois",
              "correct": false,
              "feedback": "Erreur : le dernier tour, qui fait passer `R0` de $1$ à $0$,\nexécute aussi `SUB` avant que `BNE` ne laisse passer.\n"
            },
            {
              "text": "$9$ fois",
              "correct": false,
              "feedback": "Erreur : dès que `R0` vaut $0$, `BNE` ne saute plus et la\nboucle s'arrête.\n"
            },
            {
              "text": "Une infinité de fois, `BNE` sautant toujours",
              "correct": false,
              "feedback": "Erreur : `BNE` ne saute que si la comparaison n'a pas donné\nl'égalité, ce qui finit par arriver.\n"
            }
          ],
          "explanation": "Une boucle en langage machine est un saut arrière conditionnel.\nLa dérouler, c'est suivre le registre compteur jusqu'à ce que le\nsaut ne soit plus pris."
        }
      ]
    },
    {
      "id": "q40",
      "difficulty": 2,
      "skills": [
        "adresse",
        "memoire",
        "capacite",
        "calcul"
      ],
      "title": "La capacité d'une mémoire adressable",
      "partie": "memoire",
      "statement": "Les adresses d'une mémoire sont codées sur $16$ bits et chaque\nadresse désigne un octet. Combien d'octets cette mémoire peut-elle\ncontenir au maximum ?",
      "options": [
        {
          "text": "$65\\,536$ octets",
          "correct": true,
          "feedback": "Bonne réponse : $16$ bits permettent $2^{16} = 65\\,536$ adresses\ndifférentes, donc autant d'octets adressables.\n"
        },
        {
          "text": "$16$ octets",
          "correct": false,
          "feedback": "Erreur : $16$ est le nombre de bits d'une adresse, pas le\nnombre d'adresses.\n"
        },
        {
          "text": "$32$ octets",
          "correct": false,
          "feedback": "Erreur : les adresses se combinent, elles ne s'additionnent\npas ; chaque bit double le nombre d'adresses.\n"
        },
        {
          "text": "$256$ octets",
          "correct": false,
          "feedback": "Erreur : le nombre d'adresses est une puissance de deux,\n$2^{16}$.\n"
        }
      ],
      "explanation": "La taille des adresses fixe la mémoire accessible : $32$ bits\ndonnent $4$ Gio, raison pour laquelle les architectures sont\npassées à $64$ bits.",
      "variants": [
        {
          "statement": "Les adresses d'une mémoire sont codées sur $16$ bits et chaque\nadresse désigne un octet. Combien d'octets cette mémoire peut-elle\ncontenir au maximum ?",
          "options": [
            {
              "text": "$65\\,536$ octets",
              "correct": true,
              "feedback": "Bonne réponse : $16$ bits permettent $2^{16} = 65\\,536$ adresses\ndifférentes, donc autant d'octets adressables.\n"
            },
            {
              "text": "$16$ octets",
              "correct": false,
              "feedback": "Erreur : $16$ est le nombre de bits d'une adresse, pas le\nnombre d'adresses.\n"
            },
            {
              "text": "$32$ octets",
              "correct": false,
              "feedback": "Erreur : les adresses se combinent, elles ne s'additionnent\npas ; chaque bit double le nombre d'adresses.\n"
            },
            {
              "text": "$256$ octets",
              "correct": false,
              "feedback": "Erreur : le nombre d'adresses est une puissance de deux,\n$2^{16}$.\n"
            }
          ],
          "explanation": "La taille des adresses fixe la mémoire accessible : $32$ bits\ndonnent $4$ Gio, raison pour laquelle les architectures sont\npassées à $64$ bits."
        },
        {
          "statement": "Les adresses d'une mémoire sont codées sur $10$ bits et chaque\nadresse désigne un octet. Combien d'octets cette mémoire peut-elle\ncontenir au maximum ?",
          "options": [
            {
              "text": "$1\\,024$ octets",
              "correct": true,
              "feedback": "Bonne réponse : $10$ bits permettent $2^{10} = 1\\,024$ adresses\ndifférentes, donc autant d'octets adressables.\n"
            },
            {
              "text": "$10$ octets",
              "correct": false,
              "feedback": "Erreur : $10$ est le nombre de bits d'une adresse, pas le\nnombre d'adresses.\n"
            },
            {
              "text": "$20$ octets",
              "correct": false,
              "feedback": "Erreur : les adresses se combinent, elles ne s'additionnent\npas ; chaque bit double le nombre d'adresses.\n"
            },
            {
              "text": "$100$ octets",
              "correct": false,
              "feedback": "Erreur : le nombre d'adresses est une puissance de deux,\n$2^{10}$.\n"
            }
          ],
          "explanation": "La taille des adresses fixe la mémoire accessible : $32$ bits\ndonnent $4$ Gio, raison pour laquelle les architectures sont\npassées à $64$ bits."
        },
        {
          "statement": "Les adresses d'une mémoire sont codées sur $20$ bits et chaque\nadresse désigne un octet. Combien d'octets cette mémoire peut-elle\ncontenir au maximum ?",
          "options": [
            {
              "text": "$1\\,048\\,576$ octets",
              "correct": true,
              "feedback": "Bonne réponse : $20$ bits permettent $2^{20} = 1\\,048\\,576$ adresses\ndifférentes, donc autant d'octets adressables.\n"
            },
            {
              "text": "$20$ octets",
              "correct": false,
              "feedback": "Erreur : $20$ est le nombre de bits d'une adresse, pas le\nnombre d'adresses.\n"
            },
            {
              "text": "$40$ octets",
              "correct": false,
              "feedback": "Erreur : les adresses se combinent, elles ne s'additionnent\npas ; chaque bit double le nombre d'adresses.\n"
            },
            {
              "text": "$400$ octets",
              "correct": false,
              "feedback": "Erreur : le nombre d'adresses est une puissance de deux,\n$2^{20}$.\n"
            }
          ],
          "explanation": "La taille des adresses fixe la mémoire accessible : $32$ bits\ndonnent $4$ Gio, raison pour laquelle les architectures sont\npassées à $64$ bits."
        }
      ]
    },
    {
      "id": "q41",
      "difficulty": 2,
      "skills": [
        "memoire-vive",
        "volatilite",
        "stockage"
      ],
      "title": "Un document perdu à la coupure de courant",
      "partie": "memoire",
      "statement": "Pendant une coupure de courant, Lina perd le texte qu'elle n'avait\npas enregistré, mais retrouve ses fichiers précédents. Comment\nl'expliquer ?",
      "options": [
        {
          "text": "Le texte était en mémoire vive, volatile, les fichiers sur le disque",
          "correct": true,
          "feedback": "Bonne réponse : la mémoire vive s'efface sans alimentation.\nEnregistrer copie les données vers un support qui les conserve\nhors tension.\n"
        },
        {
          "text": "Le système d'exploitation efface les documents ouverts en cas de panne",
          "correct": false,
          "feedback": "Erreur : aucun effacement n'est décidé par le système ; la\nmémoire vive perd simplement son contenu sans courant.\n"
        },
        {
          "text": "Le disque n'avait plus de place pour enregistrer automatiquement",
          "correct": false,
          "feedback": "Erreur : la place n'est pas en cause ; sans ordre\nd'enregistrement, le texte n'avait jamais quitté la mémoire\nvive.\n"
        },
        {
          "text": "Les fichiers précédents étaient en mémoire vive et le texte sur le disque",
          "correct": false,
          "feedback": "Erreur : c'est l'inverse : ce qui survit à la coupure est ce\nqui était sur le disque.\n"
        }
      ],
      "explanation": "Mémoire vive rapide mais volatile, stockage de masse lent mais\ndurable : enregistrer fait passer les données de l'une à l'autre."
    }
  ]
}