vas y
Je vais commencer par le Chapitre 1 – Représentation fonctionnelle d’un ordinateur, avec
explications claires + exercices corrigés. Ensuite, si ça te va, on fera les chapitres 2, 3 et 4 de la
même façon, que tu pourras assembler en PDF.
1. Architecture générale d’un ordinateur
Un ordinateur est composé, dans ton cours, de: microprocesseur, horloge, contrôleurs de
périphériques, mémoire principale, mémoire cache, bus de communication. [1]
1.1 Le microprocesseur
Principaux éléments internes: [1]
Registres : petites mémoires très rapides à l’intérieur du CPU, pour stocker temporairement
données, adresses et résultats (8, 16 ou 32 bits). Les instructions travaillent en priorité avec
les registres. [1]
ALU (UAL) : unité arithmétique et logique, réalise les opérations élémentaires (additions,
soustractions, ET, OU, etc.). [1]
MMU : unité de gestion mémoire, gère les accès mémoire et les adresses
virtuelles/physiques. [1]
Cache primaire (L1) : petite mémoire très rapide intégrée au processeur, stocke les
données/instructions récemment utilisées. [1]
Coprocesseur flottant : effectue les calculs sur nombres réels (float). Aujourd’hui intégré au
CPU. [1]
Bus interne : relie tous ces blocs à l’intérieur du processeur. [1]
Le processeur exécute une instruction en boucle: lire instruction en mémoire, la décoder,
l’exécuter, passer à la suivante. [1]
1.2 Processeur : unité de commande et unité de traitement
Le processeur est cadencé par une horloge (ex: 133 MHz → 133 millions de cycles/s). [1]
3 étapes principales pour chaque instruction: [1]
1. Lire l’instruction en mémoire (MP).
2. Exécuter le traitement.
3. Passer à l’instruction suivante.
Il est divisé en deux grandes parties: [1]
Unité de commande :
lit en mémoire les codes d’instruction,
décode quelle opération effectuer,
pilote les autres blocs (ALU, registres, bus…). [1]
Unité de traitement (ALU) :
exécute les instructions qui manipulent les données (additions, comparaisons…). [1]
1.3 Mémoire principale (RAM)
1.3.1 Structure
La mémoire est découpée en emplacements de taille fixe (en pratique 1 octet = 8 bits). [1]
Une mémoire de taille contient emplacements numérotés de 0 à . [1]
Le numéro de l’emplacement s’appelle adresse (souvent en hexadécimal). [1]
Capacité typique (informatique base 2): [1]
1K= octets
1M= octets
1G= octets
1T= octets. [1]
1.3.2 Opérations possibles
Seul le processeur modifie l’état de la RAM (hors cas spéciaux DMA). [1]
Écriture : CPU envoie une valeur + une adresse, la mémoire stocke la valeur à cette
adresse. [1]
Lecture : CPU donne une adresse, la mémoire renvoie la valeur qui s’y trouve (sans la
modifier). [1]
Les accès portent souvent sur plusieurs octets contigus: un mot mémoire (taille dépend du
CPU: 1 octet pour CPU 8 bits, 2 octets pour 16 bits, 4 octets pour 32 bits). [1]
1.3.3 Types de RAM
DRAM : dynamique, doit être périodiquement rafraîchie (lecture + réécriture par le
contrôleur de mémoire). Peu chère, grande capacité. [1]
SRAM : statique, pas de rafraîchissement, très rapide mais plus chère (utilisée pour les
caches). [1]
SDRAM : DRAM synchrone avec l’horloge. [1]
DDR SDRAM : transfère des données sur fronts montant et descendant, très gros débits (ex:
DDR‑600 ≈ 4,8 Gio/s). [1]
1.4 Mémoire cache et hiérarchie des mémoires
Cache = petite mémoire très rapide entre processeur et RAM. [1]
Principe de fonctionnement: [1]
Au premier accès à une donnée:
elle n’est pas en cache → défaut de cache, copie depuis RAM vers cache, puis lecture.
Aux accès suivants:
la donnée est en cache → lecture rapide sans passer par la RAM. [1]
Stratégie efficace si le CPU réutilise souvent les mêmes données (localité temporelle) ou travaille
sur un petit ensemble de données. [1]
Hiérarchie typique: [1]
Niveau Taille approx. Temps d’accès Rôle principal
Registres 1 Ko 0,25 ns Opérations immédiates CPU
Cache L1 64 Ko 1 ns Instructions/données très fréquentes
Cache L2 1 Mo 2 ns Tampon entre L1 et RAM
RAM 2 Go 5–70 ns Mémoire de travail
Swap (disque) 4 Go ~20 ms Extension lente de la RAM [1]
L1 est dans le CPU, même horloge → très rapide. [1]
L2 peut être interne ou externe/partagé entre cœurs, un peu plus lent. [1]
On utilise cette hiérarchie parce qu’il est impossible (techniquement et économiquement) d’avoir
une mémoire à la fois très rapide et très grande. [1]
1.5 Bus de communication
Un ordinateur a plusieurs bus spécialisés: [1]
Bus de données : transporte les données.
Bus d’adresses : transporte les adresses mémoire (d’où lire/écrire).
Bus de commandes : transporte les signaux de contrôle (lecture, écriture, demandes aux
périphériques). [1]
Exemple d’un accès mémoire: [1]
1. Le processeur met l’adresse sur le bus d’adresses.
2. Le bus de commandes indique au contrôleur de mémoire « lecture ».
3. Le contrôleur renvoie la donnée sur le bus de données.
La largeur du bus (en bits) détermine la taille maximale d’un mot transféré en une fois. Avec un
bus de 8 bits, un entier 32 bits doit être transmis en 4 fois, ce qui ralentit les transferts. [1]
1.6 Interruptions
Les composants communiquent via des interruptions: [1]
Un périphérique (ou autre événement) déclenche un signal, qui interrompt le CPU.
Le CPU exécute une routine d’interruption (souvent dans le système d’exploitation). [1]
Types: [1]
Interruptions matérielles : générées par le matériel (fin d’E/S, erreur mémoire, etc.).
Interruptions logicielles : générées par le processeur lui‑même ou par un programme (ex:
appel système). [1]
1.7 Modes noyau et utilisateur
Les CPU modernes ont au moins deux modes: [1]
Mode noyau (superviseur) :
toutes les instructions possibles sont autorisées (config matérielle, E/S, MMU…),
le noyau de l’OS s’exécute dans ce mode. [1]
Mode utilisateur :
instructions « dangereuses » interdites (E/S directes, modification MMU…),
tous les programmes utilisateurs s’exécutent dans ce mode. [1]
Conséquence: les programmes doivent passer par le système d’exploitation (appels système)
pour accéder aux ressources (fichiers, mémoire protégée, périphériques). C’est la base de la
protection. [1]
1.8 Jeu d’instructions et pipeline
Jeu d’instructions = ensemble des instructions machine possibles pour un processeur (ce que
voit le programmeur bas niveau). [1]
Catégories principales: [1]
Arithmétique/logique : addition, soustraction, AND, OR…
Flottant : opérations sur nombres réels.
Transfert de données : chargement/stockage entre RAM et registres.
Contrôle : sauts, branchements, appels de procédure. [1]
Une instruction passe par au moins 5 étapes: [1]
1. Fetch : chercher l’instruction en mémoire.
2. Decode : décoder le code opération.
3. Load : lire les opérandes.
4. Execute : exécuter l’opération.
5. Store : stocker le résultat.
RISC vs CISC: [1]
RISC : instructions simples, souvent de taille fixe, moins de modes d’adressage, pipeline plus
facile.
CISC : instructions plus complexes, souvent de taille variable, plus de modes d’adressage. [1]
Le pipeline permet de chevaucher les étapes des instructions (pendant qu’une instruction est en
execute, la suivante peut déjà être en fetch/decode). [1]
1.9 Adresses physiques
Une adresse physique indexe un octet en mémoire principale (réalité matérielle). [1]
Avec 8 bits d’adresse → emplacements.
Avec 32 bits → Go adressables. [1]
Les bus d’adresses actuels font 32 ou 64 bits, donc on peut transmettre une adresse complète
en une fois. [1]
2. Introduction au langage machine / assembleur (80x86 simplifié)
Le cours se base sur un sous‑ensemble du 80486 (famille 80x86). [1]
2.1 Caractéristiques simplifiées
CPU 16 bits à accumulateur. [1]
Bus de données 16 bits, bus d’adresses 32 bits (mais adresses manipulées sur 16 bits dans
l’exemple). [1]
Registres principaux: [1]
AX : accumulateur (16 bits).
BX, CX : registres généraux 16 bits.
IP : pointeur d’instruction (adresse prochaine instruction).
CS, DS, SS : registres de segment (code, data, stack).
SP : pointeur de pile.
BP : base pointer. [1]
Les registres 16 bits de données peuvent être vus comme deux registres 8 bits (ex: AX =
AH:AL). [1]
2.2 Types d’instructions
1. Affectation (mouvements)
Lecture: CPU ← mémoire (ex: MOV AX, [adr]). [1]
Écriture: CPU → mémoire (ex: MOV [adr], AX). [1]
2. Arithmétiques et logiques
AGISSENT sur AX (dans ce modèle). Résultat dans AX. [1]
Exemples:
ADD AX, valeur → AX ← AX + valeur. [1]
SUB AX, [adr] → AX ← AX – contenu([adr]). [1]
INC AX, DEC AX, décalages SHL, SHR. [1]
3. Comparaison
CMP AX, valeur : fait AX – valeur sans stocker le résultat, mais met à jour les indicateurs
(ZF, CF, SF, OF). [1]
4. Branchements
Inconditionnel : JMP adr. [1]
Conditionnels : JE, JNE, JG, JLE, JA, JB, etc., selon les drapeaux ZF, CF, SF, OF. [1]
2.3 Modes d’adressage
Implicite : seule l’instruction est codée, opérande fixée par définition (ex: INC AX). [1]
Immédiat : la valeur est dans l’instruction (MOV AX, 12). [1]
Direct : l’adresse mémoire est donnée (MOV AX, [A340]). [1]
Relatif : utilisé pour les sauts, on stocke un déplacement par rapport à IP (ex: JMP relatif). [1]
3. Exercices d’application + corrigés (Chapitre 1)
Exercice 1 – Adressage mémoire et capacité
On considère une mémoire principale organisée en octets, avec des adresses sur 16 bits.
1. Combien d’emplacements mémoire peut-on adresser ?
2. Quelle est la capacité maximale de cette mémoire en octets et en Ko ?
3. Donne l’intervalle des adresses possibles en hexadécimal.
Correction :
1. Adresses sur 16 bits → emplacements. [1]
2. Chaque emplacement = 1 octet → 65 536 octets = 64 Ko (car ). [1]
3. Adresses de 0000h à FFFFh. [1]
Exercice 2 – Hiérarchie mémoire et temps d’accès
On donne le tableau suivant: [1]
Niveau Taille Temps d’accès
Registres 1 Ko 0,25 ns
L1 64 Ko 1 ns
L2 1 Mo 2 ns
RAM 2 Go 5 à 70 ns
Swap 4 Go 20 ms
1. Pourquoi ne met‑on pas directement toute la mémoire (2 Go) en registres ?
2. Explique en une phrase la raison de la hiérarchie des mémoires.
3. Dans quel cas l’utilisation du cache est la plus efficace ?
Correction :
1. Parce qu’une mémoire de type registre est très coûteuse et techniquement difficile à
réaliser en grande capacité; on ne peut pas avoir 2 Go de registres rapides. [1]
2. On combine des petites mémoires très rapides pour les données souvent utilisées et de
grandes mémoires plus lentes pour le reste, afin d’équilibrer performance et coût. [1]
3. Quand le processeur réutilise plusieurs fois les mêmes données dans un laps de temps
court (localité), par exemple dans des boucles de calcul scientifique (ex: multiplication de
matrices). [1]
Exercice 3 – Bus et performance
Un ordinateur possède un bus de données de 8 bits cadencé à 33 MHz. On veut transférer des
entiers de 32 bits.
1. Combien de transferts sont nécessaires pour envoyer un entier 32 bits ?
2. Combien de données 32 bits max/seconde peut-on transmettre sur ce bus ?
3. Explique pourquoi augmenter seulement la fréquence du processeur (ex: 2 GHz → 2,5 GHz)
ne double pas nécessairement la performance globale.
Correction :
1. 32 bits / 8 bits = 4 transferts par entier. [1]
2. Le bus peut faire 33 M transferts 8 bits/s. Chaque entier 32 bits nécessite 4 transferts,
donc millions d’entiers 32 bits/s. [1]
3. Si le processeur passe beaucoup de temps à attendre la mémoire ou le bus, augmenter sa
fréquence ne sert pas à plein: il reste bloqué par les débits des bus et de la mémoire, donc
le gain réel est inférieur. [1]
Exercice 4 – Interruptions et modes
1. Donne deux exemples d’événements matériels qui peuvent générer une interruption.
2. Pourquoi le système d’exploitation s’exécute‑t‑il en mode noyau et les applications en mode
utilisateur ?
3. Qu’arriverait‑il si un programme utilisateur pouvait exécuter toutes les instructions possibles
(comme en mode noyau) ?
Correction :
1. Exemples:
Fin d’une opération de disque dur.
Erreur d’accès mémoire (adresse invalide).
Donnée reçue sur un port série/clavier. [1]
2. Pour protéger les ressources de la machine (mémoire, périphériques…) et garantir la
stabilité: seules les parties de confiance (noyau) peuvent faire des opérations dangereuses
(config de la MMU, E/S directes, etc.). [1]
3. Un programme pourrait effacer ou modifier la mémoire d’autres programmes ou du noyau,
reconfigurer la MMU, bloquer les périphériques → plantages fréquents, systèmes non sûrs.
[1]
Exercice 5 – Assembleur simple
On considère la mémoire suivante (en hexadécimal) :
À l’adresse 0110h : 0003h
À l’adresse 0112h : 0005h
On exécute le programme (en assembleur 80x86 simplifié) à partir de 0100h: [1]
0100: MOV AX, [^0110]
0103: ADD AX, [^0112]
0107: MOV [^0114], AX
1. Quel est le contenu de AX après la deuxième instruction ?
2. Quel est le contenu de la case mémoire 0114h après la troisième instruction ?
3. Exprime le rôle global de ce petit programme.
Correction :
1. MOV AX, [^0110] charge AX avec le contenu à 0110h, donc AX = 0003h. [1]
Puis ADD AX, [^0112] ajoute le contenu de 0112h, soit 0005h:
AX = 0003h + 0005h = 0008h. [1]
2. MOV [^0114], AX recopie AX (0008h) dans la mémoire à 0114h. [1]
3. Le programme additionne les contenus des cases mémoire 0110h et 0112h, et stocke le
résultat à l’adresse 0114h. [1]
Si cette première partie te convient, on peut continuer exactement sur le même modèle avec:
Chapitre 2 : Systèmes d’exploitation (machine virtuelle, gestionnaire de ressources, noyau,
couches, types de systèmes).
Puis Chapitres 3–4 : processus, partage du temps, changement de contexte,
ordonnancement (FCFS, SJF, round‑robin, priorités, etc.), avec exercices de calcul de
temps d’attente, temps de séjour, diagrammes de Gantt.
Dis‑moi quel chapitre tu veux que je traite ensuite (2 ou directement 3–4, ceux qui tombent le
plus à l’examen) et je t’écris la suite avec exercices corrigés.
⁂
1. ilovepdf_merged.pdf