Telechargé par musengkayij

Structure des ordinateurs

publicité
Cours de structure des Ordinateurs
Université Protestante de Lubumbashi
Cours d’Architecture Des Ordinateurs - 2é BAC Informatique de
Gestion 2019-2020
De nos jours l'informatique est devenue une compétition commerciale et
technologique dans laquelle l’évolution des composants et des systèmes
est quotidienne. Ce cours sera donc mis à jour en temps réel en fonction
de l'évolution des produits.
1. Présentation Du Cours
Ce cours expose les principes de fonctionnement des ordinateurs. Il s’agit
ici de comprendre, à bas niveau, l’organisation de ces machines.
De la couche la plus basse (langage machine) jusqu’à celle haute
(langage proche du langage humain), en passant par l’étude du codage
de l’information, de circuits logiques etc.
Nous nous appuierons sur l’étude détaillée de l’architecture PC de John
Van Neumann, dont nous étudierons ses principaux éléments matériels et
logiciels, les fonctions de base de son système d’exploitation, et ses
mécanismes de communication avec l’extérieur (entrées/sorties).
Puis nous conclurons ce cours par une mise au point du langage
assembleur et un panorama des différentes architectures actuelles
(processeurs CISC « Complex Instruction Set Computer ou Ordinateur a
jeu d’instruction Complexe » et RISC « Reduced Instruction Set Computer
ou Ordinateur a jeu d’instruction Réduit », etc.).
2. Plan du Cours
0. Introduction
0.1.
0.2.
Principes De Fonctionnement D’un Ordinateur
Architecture de base d’un ordinateur
Chapitre I : CODAGE DE L’INFORMATION
Chapitre II : ALGEBRE DE BOOLE
Chapitre III : CIRCUITS COMBINATOIRES
Cours de structure des Ordinateurs
Chapitre IV : LE SYSTEME D’EXPLOITATION
Chapitre V : STRUCTURE DES COMPOSANTS HARDWARE
Chapitre VI : LES MEMOIRES
Chapitre VII : ASSEMBLEUR
Annexe
: Exercices
1. Références Bibliographiques
a. Namur Cours de Hardware - en informatique 2015 – 2016
b. T.Dumartin Architecture des ordinateurs Note de cours 2013
c. Architecture des Ordinateurs Nicolas Delestre, Michel
Mainguenaud 2004
d. Emmanuel Viennet Architecture des ordinateurs 2015
e. Tisserant S, Architecture et Technologie des Ordinateurs, Louis
Pasteur, 2010
f. Martin B., Codage, cryptologie et applications, Presses
Polytechniques et Universitaires Romandes (PPUR), 2004
g. Comment ça marche, « Représentation des nombres entiers et
réels »,
<http://www.commentcamarche.net/contents/base/representation
.php3>
Cours de structure des Ordinateurs
0. Introduction
0.1. Principes De Fonctionnement D’un Ordinateur
Le fonctionnement d’un ordinateur repose sur le respect des principes
architecturaux (structure de la matière, la logique,…) issus de la physique
appliquée et de l’électricité exploitant les phénomènes de conduction
des électrons.
Cours de structure des Ordinateurs
0.2. Architecture de base d’un ordinateur
Dans cette partie, nous décrivons rapidement l’architecture de base d’un ordinateur
et les principes de son fonctionnement.
Un ordinateur est une machine de traitement de l’information. Il est capable
d’acquérir de l’information, de la stocker, de la transformer en effectuant des
traitements quelconques, puis de la restituer sous une autre forme. Le mot
informatique vient de la contraction des mots information et automatique.
Nous appelons information tout ensemble de données. On distingue généralement
différents types d’informations : textes, nombres, sons, images, etc., mais aussi les
instructions composant un programme. Cependant toute information est manipulée
sous forme binaire (ou numérique) par l’ordinateur.
0.2.1. Principes de fonctionnement
Les deux principaux constituants d’un ordinateur sont la mémoire principale et le
processeur. La mémoire principale (MP en abrégé) permet de stocker de
l’information (programmes et données), tandis que le processeur exécute pas à pas
les instructions composant les programmes.
0.2.2. Notion de programme
Un programme est une suite d’instructions élémentaires, qui vont être exécutées
dans l’ordre par le processeur. Ces instructions correspondent à des actions très
simples, comme additionner deux nombres, lire ou écrire une case mémoire, etc.
Chaque instruction est codifiée en mémoire sur quelques octets.
Le processeur est capable d’exécuter des programmes en langage machine,
c’est à dire composés d’instructions très élémentaires suivant un codage précis.
Chaque type de processeur est capable d’exécuter un certain ensemble
d’instructions, son jeu d’instructions.
Pour écrire un programme en langage machine, il faut donc connaître les détails
du fonctionnement du processeur qui va être utilisé.
0.2.3. Le processeur
Le processeur est un circuit électronique complexe qui exécute chaque instruction
très rapidement, en quelques cycles d’horloges. Toute l’activité de l’ordinateur est
Cours de structure des Ordinateurs
cadencée par une horloge unique, de façon à ce que tous les circuits électroniques
travaillent ensembles. La fréquence de cette horloge s’exprime en MHz (millions
de battements par seconde). Par exemple, un ordinateur “PC Pentium 133” possède
un processeur de type Pentium et une horloge à 133 MHz.
Pour chaque instruction, le processeur effectue schématiquement les opérations
suivantes :
Cours de structure des Ordinateurs
1. lire en mémoire (MP) l’instruction à exécuter;
2. effectuer le traitement correspondant;
3. passer à l’instruction suivante.
Le processeur est divisé en deux parties (voir figure 0.2.1), l’unité de commande
et l’unité de traitement :
–
–
l’unité de commande est responsable de la lecture en mémoire et du
décodage des instructions;
l’unité de traitement, aussi appelée Unité Arithmétique et Logique (U.A.L.),
exécute les instructions qui manipulent les données.
Processeur
Mémoire Principale
(M.P.)
codes instructions
Unité de
commande
Programm
e
Unité de traitement
(U.A.L. )
donné
binaire
es
s
Donnée
s
informations
codées en
binaire
Unité d’entrées/sorties
CLAVIER
ECRAN
FIG. 0.2.1 – Architecture schématique d’un ordinateur
Cours de structure des Ordinateurs
0.2.4. La mémoire principale (MP)
0.2.4.1.
Structure de la MP
La mémoire est divisée en emplacements de taille fixe (par exemple 8 bits) utilisés
pour stocker instructions et données.
En principe, la taille d’un emplacement mémoire pourrait être quelconque; en fait,
la plupart des ordinateurs en service aujourd’hui utilisent des emplacements
mémoire d’un octet (byte en anglais, soit 8 bits, unité pratique pour coder un
caractère par exemple).
FIG. 0.2.2 – Structure de la mémoire principale.
Dans une mémoire de taille N, on a N emplacements mémoires, numérotés de 0 à
N −1. Chaque emplacement est repéré par son numéro, appelé adresse. L’adresse
est le plus souvent écrite en hexadécimal.
La capacité (taille) de la mémoire est le nombre d’emplacements, exprimé en
général en kilo-octets ou en méga-octets, voire davantage. Rappelons que le kilo
informatique vaut 1024 et non 1000 (210 =1024≈1000). Voici les multiples les plus
utilisés :
1K (Kilo)
210 = 1024
1 M (Méga) 220 = 1048 576
1 G (Giga)
1 T (Téra)
230 = 1 073 741 824
240 = 1 099 511 627 776
1 Sur certains ordinateurs, les controleurs d’entrées/sorties peuvent accéder directement à la mémoire (accès DMA), mais
cela ne change pas le principe de fonctionnement.
Cours de structure des Ordinateurs
0.2.4.2.
Opérations sur la mémoire
Seul le processeur peut modifier l’état de la mémoire1.
Chaque emplacement mémoire conserve les informations que le processeur y écrit
jusqu’à coupure de l’alimentation électrique, où tout le contenu est perdu
(contrairement au contenu des mémoires externes comme les disquettes et disques
durs).
Les seules opérations possibles sur la mémoire sont :
écriture d’un emplacement : le processeur donne une valeur et une adresse,
et la mémoire range la valeur à l’emplacement indiqué par l’adresse;
– lecture d’un emplacement : le processeur demande à la mémoire la valeur
contenue à l’emplacement dont il indique l’adresse. Le contenu de
l’emplacement lu reste inchangé.
0.2.4.2.1.
Unité de transfert
–
Notons que les opérations de lecture et d’écriture portent en général sur plusieurs
octets contigüs en mémoire : un mot mémoire. La taille d’un mot mémoire dépend
du type de processeur; elle est de
–
–
–
1 octet (8 bits) dans les processeurs 8 bits (par exemple Motorola 6502);
2 octets dans les processeurs 16 bits (par exemple Intel 8086);
4 octets dans les processeurs 32 bits (par ex. Intel 80486 ou Motorola
68030).
0.2.5. Le processeur central
Le processeur est parfois appelé CPU (de l’anglais Central Processing Unit) ou
encore MPU (Micro-Processing Unit) pour les microprocesseurs.
Un microprocesseur n’est rien d’autre qu’un processeur dont tous les constituants
sont réunis sur la même puce électronique (pastille de silicium), afin de réduire les
coûts de fabrication et d’augmenter la vitesse de traitement. Les microordinateurs
sont tous équipés de microprocesseurs.
L’architecture de base des processeurs équipant les gros ordinateurs est la même
que celle des microprocesseurs.
Cours de structure des Ordinateurs
0.2.5.1.
Les registres et l’accumulateur
Le processeur utilise toujours des registres, qui sont des petites mémoires internes
très rapides d’accès utilisées pour stocker temporairement une donnée, une
instruction ou une adresse. Chaque registre stocke 8, 16 ou 32 bits.
Le nombre exact de registres dépend du type de processeur et varie typiquement
entre une dizaine et une centaine.
Parmi les registres, le plus important est le registre accumulateur, qui est utilisé
pour stocker les résultats des opérations arithmétiques et logiques. L’accumulateur
intervient dans une proportion importante des instructions.
Par exemple, examinons ce qu’il se passe lorsque le processeur exécute une
instruction comme “Ajouter 5 au contenu de la case memoire d’adresse 180” :
1. Le processeur lit et décode l’instruction;
2. le processeur demande à la mémoire la contenu de l’emplacement 180;
3. la valeur lue est rangée dans l’accumulateur;
4. l’unité de traitement (UAL) ajoute 5 au contenu de l’accumulateur;
5. le contenu de l’accumulateur est écris en mémoire à l’adresse 180.
C’est l’unité de commande qui déclenche chacune de ces actions dans l’ordre.
L’addition proprement dite est effectuée par l’UAL.
0.2.5.2.
Architecture d’un processeur à accumulateur
La figure 0.2.3 représente l’architecture interne simplifiée d’un MPU à
accumulateur. On y distingue l’unité de commande, l’UAL, et le décodeur
d’instructions, qui, à partir du code de l’instruction lu en mémoire actionne la
partie de l’unité de commande nécessaire.
Cours de structure des Ordinateurs
BUS DE DONNEES
Reg.
mot
Bus de données interne
RTUAL
AC
C
R
I
UAL
RTA
Reg.
d’état
Décodeu
r
Unité de Commande
I
P
Horloge
Bus d’adresses interne
Reg. Adr
Quart
z
COMMANDES
BUS D’ADRESSES
FIG. 0.2.5.3 – Schéma simplifié d’un processeur.
Cours de structure des Ordinateurs
Le processeur est relié à l’extérieur par les bus de données et d’adresses, le signal
d’horloge et les signaux de commandes.
Les informations circulent à l’intérieur du processeur sur deux bus internes, l’un
pour les données, l’autre pour les instructions. On distingue les registres suivants
:
ACC : Accumulateur;
RTUAL : Registre Tampon de l’UAL, stocke temporairement l’un des deux
opérandes d’une instructions arithmétiques (la valeur 5 dans l’exemple
donné plus haut);
Reg. d’état: stocke les indicateurs, que nous étudierons plus tard;
RI : Registre Instruction, contient le code de l’instruction en cours d’exécution (lu
en mémoire via le bus de données);
IP : Instruction Pointer ou Compteur de Programme, contient l’adresse de
l’emplacement mémoire où se situe la prochaine instruction à exécuter;
RTA : Registre Tampon d’Adresse, utilisé pour accéder à une donnée en
mémoire.
Les signaux de commandes permettent au processeur de communiquer avec les
autres circuits de l’ordinateur. On trouve en particulier le signal R/W
(Read/Write), qui est utilisé pour indiquer à la mémoire principale si l’on effectue
un accès en lecture ou en écriture.
0.2.5.3.
Liaisons Processeur-Mémoire : les bus
BUS D’ADRESSES
Processeur
R/W
Signal Lecture/Ecriture
BUS DE DONNEES
Mémoire
Principale
Cours de structure des Ordinateurs
FIG. 0.2.5.4 – Connexions Processeur-Mémoire : bus de données, bus
d’adresse et signal lecture/écriture.
Les informations échangées entre la mémoire et le processeur circulent sur des bus.
Un bus est simplement un ensemble de n fils conducteurs, utilisés pour transporter
n signaux binaires.
Le bus d’adresse est un bus unidirectionnel : seul le processeur envoie des adresses.
Il est composé de a fils; on utilise donc des adresses de a bits. La mémoire peut
posséder au maximum 2a emplacements (adresses 0 à 2a −1).
Le bus de données est un bus bidirectionnel. Lors d’une lecture, c’est la mémoire
qui envoie un mot sur le bus (le contenu de l’emplacement demandé); lors d’une
écriture, c’est le processeur qui envoie la donnée.
Cours de structure des Ordinateurs
CHAPITRE 1 :
CODAGE DE L’INFORMATION
L’information est le support formel d’un élément de connaissance humaine susceptible d’être
représentée à l’aide de conventions (codages) afin d’être conservée, traitée ou communiquée.
Une donnée est la représentation d’une information sous une forme conventionnelle (codée)
destinée à faciliter son traitement.
Les informations traitées par un ordinateur peuvent être des différents types (texte, image,
nombres, etc.) mais elles sont toujours représentées et manipulées par l'ordinateur sous forme
binaire.
L'unité d'information est le chiffre binaire (0 ou 1), que l'on appelle bit (pour binary digit,
chiffre binaire). Enfin, les opérations arithmétiques de base (addition, multiplication etc.)
sont faciles à exprimer en base 2.
1.1.
Définition:
Le codage d’information permet d’établir une correspondance qui permet sans ambiguïté
de passer d’une représentation (dite externe) d’une information à une autre représentation
(dite interne : sous forme binaire) de la même information, suivant un ensemble de règle
précise.
-
Exemple :
Le nombre 50 : 50 est la représentation externe du nombre cinquante La représentation
interne de 50 sera une suite de 0 et 1 (110010).
En informatique, Le codage de l’information s’effectue principalement en trois étapes:
 Premièrement l’information sera exprimée par une suite de
nombres (Numérisation)
 deuxièmement chaque nombre est codé sous forme binaire
(suite de 0 et 1) et
 troisièmement chaque élément binaire est représenté par un état
physique.
1.2.
Elément binaire et son équivalent en Etat physique
Codage de l’élément binaire par un état physique Charge électrique (RAM :
Condensateur-transistor) : Chargé (bit 1) ou non chargé (bit 0)
Magnétisation (Disque dur, disquette) : polarisation Nord (bit 1) ou Sud (bit 0)
Cours de structure des Ordinateurs
Alvéoles (CDROM): réflexion (bit 1) ou pas de réflexion (bit 0)
1.3. Systèmes de numération
Les nombres sont usuellement représentes en base 10. Chaque chiffre
apparaissant dans un nombre est le coefficient d’une puissance de 10. Par
exemple, le nombre 145 correspond au nombre obtenu par l’opération suivante :
1 × 102 + 4 × 101 + 5 × 100. Ce type de numération peut être appliqué à n’importe
quelle autre base.
1.3.1. Numération en base b
Etant donnés un entier positif´ b, chaque nombre entier x peut-être représenté de
manière unique par un nombre anan−1 ···a0, tel que an 6= 0 et pour tout i ∈ [0,n],
ai ∈ [0,b − 1] et x = an × bn + ···a0 × b0.
Toutefois, pour les bases supérieures ou égales à 11, les symboles (ou chiffres) usuels (0,
1 ,..., 9) ne permettent pas une écriture non ambigüe. Par exemple, en base 11, on ne sait
pas si le nombre 10 désigne 10×110 ou 1×111+0×110.
Pour ces bases, il faut donc enrichir l’ensemble des symboles (ou chiffres) utilisés pour
le codage. Par exemple, en base 16, très utilisée en informatique, les chiffres sont 0,1,...,
9, a, b, c, d, e, f ou a = 10, b = 11, c = 12, d = 13, e = 14 et f = 15.
Dans toute la suite, afin d’éviter toute confusion, nous utiliserons la notation xb pour
indiquer que le nombre x est représenté en base b.
1.3.2. Taille des codages
En informatique, les nombres ne peuvent pas avoir une taille arbitrairement
grande. Ils ont donc toujours une taille fixée.
Déterminons la plage de nombres que l’on peut écrire en base b avec des
nombres de taille n : il y a n places possibles pouvant contenir chacune un chiffre
entre 0 et b − 1, soit bn nombres différents. Sur n chiffres, on écrit donc les nombres
compris entre 0 et bn − 1.
Cours de structure des Ordinateurs
1.3.3. Comment obtenir une écriture en base b
1.3.3.1. A partir d’un nombre en base 10`
Voyons par exemple comment écrire le nombre 145 en base 8. On remarque
facilement la suite d’égalités suivante :
145
=
=
1 + 8 × 18
1 + 8 × (2 + 8 × 2)
=
1 + 8 × (2 + 8 × (2 + 8 × 0))
=
1+2×8+2×8×8
=
1 × 80 + 2 × 81 + 2 × 82
On obtient donc 14510 = 2218.
On en déduit facilement un algorithme général utilisant les opérations suivantes :
la division entière : div, le modulo : mod.
Data: une base b, un entier x à écrire en base b
Résultat : un nombre an−1 ···a0 avec x ∈ [bn−1,bn − 1] et chaque ai ∈ [0,b − 1].
i = 0;
while x≠0 do
ai = x mod b;
x = x div b;
i = i +1;
end
Algorithme 1: Ecriture en base b
1.3.3.3. A partir d’un nombre en base c
Dans le cas général, si on dispose de l’écriture d’un nombre en base c, le plus
simple pour obtenir l’écriture en base b est de calculer la valeur du nombre puis
d’appliquer l’algorithme d’écrit précédemment. Il existe cependant des cas ou` la
transformation est plus simple.
Imaginons que b est une puissance de c, i.e., b = ck (par exemple c = 2 et b =
16 = 24), alors on obtient l´écriture en base b à partir de l’écriture en base c en
groupant les chiffres par k éléments à partir du chiffre de poids faible (i.e., le
chiffre le plus à droite). Chaque groupe représente alors en base c un nombre entre
0 et b − 1.
Cours de structure des Ordinateurs
Par exemple si on veut passer de la base 2 à la base 16 :
(101110000011)2 = ((1011) (1000) (0011))2 = (b83)16
Puisque (1011)2 = 1110 = b16, 10002 = 810 = 816, 00112 = 310 = 316.
1.4.
Codage de l’information
Dans un ordinateur, l’information est codé en “binaire”, i.e., en base 2. Les
chiffres binaires sont appelés des bits. Un bit est donc soit un 0, soit un 1, et une
information est représentée par une s´séquence de bits. Une s´séquence de 8 bits
est appelée un “octet”.
1.4.1.
L’arithmétique binaire
L’arithmétique binaire ressemble à l’arithmétique décimale. Voici la table
d’addition des nombres binaires :
0
0
1
1
+
0
—
1
—
0
—
1
—
Somme
Retenue
0
0
1
0
1
0
0
1
Voici un exemple d’addition et un exemple de soustraction :
1
0 1 1
0
1
1 0 1
0
Les multiplications et divisions se font sur le même mode, en adaptant les règles
de l’arithmétique décimale.
1.4.2.
Représentation des nombres entiers en binaires
Dans les ordinateurs, tous les nombres sont représentés par des nombres
binaires d’une taille fixée. Les entiers positifs sont représentés par le codage
“binaire pur non-signé” découlant directement de la numération en binaire vue
précédemment.
1.4.2.1. Représentation avec un bit de signe
Une idée simple pour représenter les entiers positifs et négatifs est de réserver
un bit (par exemple celui de gauche) pour coder le signe. Supposons qu’on code
sur 8 bits, 3 sera codé 00000011 et -3 sera codé 10000011. Ce codage n’est en fait
pas utilise car il comporte de nombreux inconvénients.
Cours de structure des Ordinateurs
D’abord, la présence de deux valeurs pour 0 (00000000) et -0 (10000000),
ensuite, l’addition est compliquée : il faut examiner les signes, et faire une addition
ou une soustraction selon les cas.
1.4.2.2.
Représentation complément à un
On note (x)1cn la représentation en complément à un sur n bits de l’entier x :
si x est un nombre positif, alors on donne sa représentation binaire avec la
restriction que le bit le plus à gauche doit valoir 0. On ne peut donc coder sur n
bits que les entiers positifs de 0 à 2n−1 −1. Pour un nombre négatif x = −y, on inverse
tous les bits de (y)1cn (on remplace les 1 par des 0 et les 0 par des 1).
Le bit le plus à gauche est donc 1.
L’addition est simple à réaliser : on ajoute les deux nombres puis on ajoute la
retenue éventuelle.
Voici par exemple les additions 6 + (−4) = 2 et −5 + 3 = −2 :
L’inconvénient de ce codage est qu’il y a deux représentations de 0 : par exemple
sur 4 bits, 0000 et 1111.
1.4.2.3.
Représentation complément `a deux
La méthode réellement utilisée est la représentation par “complément à deux”.
On note (x)2cn la représentation en complément à deux sur n bits de l’entier x :
Si (x)2cn = xn−1 ···x0 alors
Les nombres positifs sont donc représentés en binaire classique mais sont
seulement cotables les entiers allant de 0 à 2n−1 −1. Etant donné un entier positif x,
on obtient −x de la façon suivante :
On remplace les 1 par des 0 et les 0 par des 1, puis on ajoute 1 au résultat.
Si une retenue est crée sur le dernier bit, elle est effacée.
On passe de la même façon d’un nombre négatif à positif : on inverse tous les
bits et on ajoute 1 au résultat.
Sur 8 bits, on peut coder tous les nombres de 127 à - 128 : 127=01111111 et 128=10000000.
Cours de structure des Ordinateurs
Tous les nombres positifs ou nuls ont leur bit le plus à gauche à 0, et tous les
nombres négatifs ont leur bit le plus à gauche `a 1.
Sur n bits, on peut coder tous les nombres de 2n−1 − 1 à −2n−1. Si a2cn est la
représentation d’un nombre positif, alors −a2cn correspond à l’écriture binaire
classique de 28 − a
Comme pour le complément à 1, l’addition et la soustraction se font sans se
préoccuper des signes : les circuits de calcul en sont grandement simplifies. De
plus, il n’y a qu’une seule représentation de 0.
Pour l’addition, on additionne les deux nombres et on omet l’éventuelle
retenue. Voici par exemple les additions 6 − 5 = 1 et −6 + 3 = −3 :
Pour faire une soustraction, on utilise l’identité
(a − b)2cn = a + (−b)2cn
Par exemple, pour n = 8, supposons qu’on veuille faire l’opération (01010110
− 00110111)2c8, on effectue l’opération 01010110 + 11001001 = 100011111, le
nombre obtenu dépasse les 8 bits, on supprime le bit de gauche supplémentaire.
Finalement (01010110 − 00110111)2c8 = (00011111)2c8.
1.4.2.3.1.
Débordement de capacité
Le problème de coder sur un nombre fixé de bits est que l’on peut déborder lors
de calculs.
Par exemple, si on effectue l’opération (01000000+01000000)2c8 on obtient
(10000000)2c8 c’est à dire un nombre négatif alors qu’on a additionne deux
nombres positifs! Le résultat est donc faux, on dit qu’il y a débordement
(overflow).
Pour le codage en complément à deux, on peut facilement détecter un débordement
:
Il engendre forcément une erreur de signe. Il suffit donc d’observer les règles
suivantes :
 si on additionne deux nombres de signes contraires, il ne peut pas
y avoir de débordement.
 si on additionne deux nombres positifs, il y a débordement si et
seulement si le résultat est négatif, i.e., si le bit de gauche est à 1.
 si on additionne deux nombres négatifs, il y a débordement si et
seulement si le résultat est positif, i.e., si le bit de gauche est à 0.
Cours de structure des Ordinateurs
1.4.3. Représentation des nombres à virgule
1.4.3.1. Représentation en virgule fixe
Reprenons l’exemple de la base 10, et considérons le nombre 0,135. Cette
écriture désigne le nombre obtenu par le calcul suivant :
1 × 10−1 + 3 × 10−2 + 5 × 10−3
De la même façon, on peut représenter des nombres à virgule en binaire. Par
exemple, le nombre (1,11)2 désigne le nombre 20 + 2−1 + 2−2 = 1 + 0,5 + 0,25 =
1,75.
Voici un algorithme permettant d’obtenir le codage d’un nombre 0 < x ≤ 1 :
Data: une base b, un réel x dans [0,1[à écrire en base b, une précision n ≥ 1
Résultat: un nombre 0, a1 ···an ou` chaque ai ∈ [0, b−1]
Variables : y réel; i = 0; y = x;
while i < n do
y = y × b;
ai = partie entière(y);
y = y − ai;
i = i + 1;
end
Algorithm 2: Codage en base b d’un nombre réel avec précision n
Lorsqu’on veut coder des nombres très grands, ou très petits, le codage binaire
classique n’est plus utilisable puisqu’il faut n bits pour coder 2n nombres.
1.4.3.2. Représentation en virgule flottante
Elle correspond en fait à la notation dite “scientifique” des grands nombres
comme 3×1027 ou encore 8 × 10−18.
Pour des raisons évidentes d’espace mémoire, il n’est possible de représenter
qu’un nombre borné de réels, on parle alors plutôt de flottants
Depuis les années 70, il existe un standard pour la représentation des flottants.
Aujourd’hui la plupart des ordinateurs utilisent ce standard.
C’est la représentation IEEE 754.
Un nombre flottant est codé par 3 nombres représentés de la façon suivante :
Cours de structure des Ordinateurs
Signe s
Le coefficient f est appelé la mantise, e est appelé l’exposant et s représente le
signe : positif si s = 0 et négatif si s = 1.
Le standard inclus deux représentations : simple précision et double précision.
Ou Emin et Emax représentent respectivement le plus petit et le plus grand
exposant cotable dans la représentation.
1.4.3.3. Codage
Considérons le codage sur 32 bits. On commence par écrire la valeur absolue du
réel r à coder en binaire à virgule fixe. On décale ensuite la virgule en multipliant
par des puissances de 2, jusqu’à avoir un et un seul chiffre avant la virgule.
Prenons par exemple r = −123,5. On le code par −1111011,1 puis on décale la
virgule et on obtient −(1,1110111) × 26.
On en déduit
— le bit de signe s = 1
— la mantisse M = 1110111 qu’on complète pour obtenir un mot f sur 23 bits :
f = 111 0111 0000 0000 0000 0000
— l’exposant E = 6 que l’on code en excès à 127 : le nombre e codé sur 8 bits
est donc e = E + 127 = 133 = (1000 0101)2 Le codage de r est donc
1
1000
0101
111 0111 0000
0000 0000 0000
1.4.3.4. Décodage
La valeur d’un nombre est donnée par :
Cours de structure des Ordinateurs
Par exemple en simple précision, considérons la représentation
1
1000
0010
001 1000 0000
0000 0000 0000
On a s = 1, e = 130 − 127 = 3 et f = 2−3 + 2−4 = 0,125 + 0,0625 = 0,1875. Le nombre
codé est donc −1,1875 × 23 = −9,5.
1.4.3.5
Cas particuliers
Afin de traiter certains cas spéciaux, la norme prévoit un schéma de codage
comme suit (pour le codage sur 32 bits) :
Lorsqu’on travaille sur de très petits nombres (exposant minimum), on n’effectue
pas la normalisation (le chiffre avant la virgule est alors 0). Le nombre est alors
qualifie de démoralisé. NaN (Not a Number) est une valeur spéciale destinée `à
coder le résultat d’opérations incorrectes (comme la division par zéro).
1.4.4
Codage des caractères
Différents standards ont étés définis pour le codage des caractères.
Le code ASCII (American Standard Code for Information Interchange) crée en
1961 associe un nombre à un caractère. Chaque caractère est codé sur 7 bits. Il ne
contient donc que 128 caractères différents (de 00 `à 7F en hexadécimal).
Cours de structure des Ordinateurs
Bien qu’étendu par la suite à un code sur 8 bits, beaucoup de caractères utilisés
dans certaines langues ne sont pas représentés. L’organisme de normalisation OSI
a donc défini différents standards plus adaptés aux besoins des différentes langues
occidentales. Le français utilise le plus souvent ISO 8859-1, aussi nommé latin1,
ou ISO 8859-15 (latin9).
Enfin, Unicode créé en 1991 a pour vocation de rassembler tous ces codes afin
d’avoir un code commun pour toutes les langues. Il contient plus d’un million de
caractères
Cours de structure des Ordinateurs
CHAPITRE 2 :
ALGEBRE DE BOOLE
Le fonctionnement des circuits est d’écrit en utilisant l’algèbre binaire (algèbre
de Boole à deux valeurs). Nous en donnons les bases dans cette section.
L’algèbre de Boole est une structure algébrique :
 donnée par un ensemble contenant au moins deux valeurs {0,1}, et les trois
opérations suivantes
 la conjonction (ou produit) : opération binaire qui peut être notée “.”, “et” ou bien
“and”.
 la disjonction (ou somme) : opération binaire qui peut être notée “+”, “ou” ou
bien “or”.
 la négation (ou complément) : opération unaire qui peut être notée “non” ou “not”
ou bien par une barre sur l’opérande.
 et satisfaisant les axiomes suivants (par convention, la conjonction est prioritaire
sur la disjonction)
 commutativité : pour tous a,b ∈ {0,1},
a·b=b·a
 associativité : pour tous
a,b,c ∈ {0,1},
a · (b · c) = (a · b) · c
 distributivité : pour tous
a,b,c ∈ {0,1},
a · (b + c) = a · b + a · c
 ´éléments neutres : pour
tout a ∈ {0,1},
1·a=a·1=a
 complément : pour tout a ∈
{0,1},
a· a =a ·a=0
0.3.
a+b=b+a
a + (b + c) = (a +
b) + c
a + (b · c) = (a + b) ·
(a + c)
0+a=a+0=a
a+a=a+a=1
Algèbre binaire
Nous allons nous intéresser à l’algèbre de Boole binaire, c’est à dire que
l’ensemble des éléments de l’algèbre est {0,1} (ou bien {Vrai, Faux}).
La définition suivante des opérateurs satisfait l’ensemble des axiomes. C’est
celle que nous utiliserons.
Cours de structure des Ordinateurs
 le complément
a
a¯
0
1
1
0
 la conjonction
a
0
b
0
a.b
0
0
1
1
0
0
0
1
1
1
 la disjonction
a
b
a+b
0
0
0
0
1
1
1
0
1
1
1
1
On dit que les opérateurs ainsi définis sont un modèle des axiomes car ils
vérifient chacun des axiomes.
Par exemple pour 1.a = a, on a effectivement 1.1 = 1 et 1.0 = 0.
2.1.1
Propriétés
Les propriétés suivantes peuvent ˆêtre déduites des axiomes
 Elément absorbant :
a.0 = 0.a = 0
a+1=1+a=1
 Absorption
a.(a + b) = a
a + (a.b) = a
 Idempotence
a.a = a
a+a=a
 Involution
a=a
 Lois de De Morgan
Ces propriétés sont déduites directement des axiomes (sans utiliser le
modèle particulier.
2.2
Fonction Booléennes
Une fonction booléenne d’arité n est une fonction qui prend en arguments n
booléens et qui retourne un booléen.
Une fonction booléenne (d’arité n) f : {0,1} n → {0,1} peut être donnée
 de manière extensionnelle par sa table de vérité
x
y
z
m = f(x,y,z)
0
0
0
0
0
0
1
0
0
1
0
0
0
1
1
1
1
0
0
0
1
0
1
1
1
1
0
1
1
1
1
1
 par une expression booléenne, qui est une expression définie
avec les constantes et les opérateurs de l’algèbre de Boole et un
certain nombre de variables x1,...,xn. Par exemple :
xyz + xyz + xyz + xyz
2.2.1
Forme normale disjonctive
Une expression booléenne est en forme normale disjonctive si elle est ´écrit
comme
— une disjonction de monômes
— chaque monôme ´étant une conjonction de littéraux
— un littéral ´étant soit les constantes 0,1, soit une variable x, soit le
complément de x, x. Exemple :
(x.y.z) + (x.z) + y
Théorème 2.1 Toute expression booléenne est équivalente à une expression en
forme normale disjonctive.
Preuve. On suppose les variables comme étant x1,...,xn,
1.
On considère la table de vérité associe à l’expression et appelons f la fonction
booléenne ainsi représentée
2.
supposons que f vaille 1 pour k entrées dans cette table (et donc 0 pour les
2n − k autres entrées). Comme 0+1 = 1 on peut écrire f comme f1 +...+fx ou`
fi : {0,1} n → {0,1} n’est `à 1 que pour une seule entrée.
3.
Maintenant pour chaque fi, il est simple de voir que le monôme y1.....yn défini
par yj = xj si la ieme valeur de l’entrée est 1 et yj = xj représente précisément
la fonction fi.
Par exemple, une fonction booléenne f a trois paramètres x, y, z :
Corollaire 2.2 Toute fonction booléenne peut ˆêtre représentée comme une expression
booléenne.
Preuve. Il suffit d’extraire l’expression en forme normale disjonctive de la table
de vérité de la fonction booléenne.
2.2.2
Forme normale conjonctive
Une expression booléenne est en forme normale conjonctive si elle ´écrit
comme
— une conjonction de sommes
— chaque somme ´étant une disjonction de littéraux
— un littéral ´étant soit les constantes 0,1, soit une variable x, soit le
complément de x, x.
Exemple :
Théorème 2.3 Toute expression booléenne est ´équivalente `à une expression en
forme normale conjonctive.
Pour obtenir la forme normale conjonctive d’une expression booléenne `a n
variables x1,...,xn, on construit sa table de vérité, et on ´écrit l’expression composée
de la conjonction des sommes sj pour chaque ligne j valant 0.
La somme sj est obtenue de la façon suivante : sj = y1 +...+yn ou :
 yi = xj si la ieme valeur de l’entrée vaut 0
 yj = xj sinon.
Pour l’exemple précédent, la forme normale conjonctive est donc
(x + y + z) · (x + y + z) · ( x + y + z) · (x + y + z)
2.2.3
Simplifications de fonctions booléennes : tables de Karnaugh
Nous allons voir que les fonctions booléennes sont en fait implantées `à l’aide
de portes logiques constituées de transistors. Afin d’´économiser de l’espace, de
l’´énergie et de l’argent, on souhaite utiliser le moins de transistors possibles. On
va donc essayer de trouver pour les fonctions booléennes une représentation la
plus petite possible (en termes d’expression).
Pour simplifier l’expression d’une fonction booléenne, on peut tout
simplement utiliser les axiomes et les propriétés de l’algèbre de Boole, afin de
passer d’une expression `à une autre plus simple. Une méthode tres efficace est
l’utilisation des tableaux de Karnaugh, qui permet une simplification visuelle.
Cette méthode de simplification se base sur la propriété suivante :
(a.b) + (a.b) = a.(b +b) = a
Stipulant que si une disjonction contient deux conjonctions qui ne varient que
sur une variable, positive (sans symbole non devant, b) dans l’une et n´négative
(avec un symbole non devant, ¯b) dans l’autre alors on peut ´éliminer ces deux
conjonctions et la remplacer par une conjonction identique mais ne contenant
plus b.
La première ´étape de la m´méthode consiste `à transformer la table de vérité
de la fonction à simplifier en un tableau bi-dimensionnel (séparation en deux
parties de l’ensemble des variables (une pour les lignes, une pour les colonnes)).
Lignes et colonnes sont indexées par toutes les valuations des variables
correspondantes tel que entre deux lignes (resp. colonnes) une seule valeur
booléenne change.
Par exemple, pour une fonction de trois variables x,y,z, la table a l’allure
suivante :
x
y
z
0
0
0
1
1
1
1
0
0
1
La première ligne (respectivement colonne), est indexée par une valuations
booléenne possibles des variables choisies pour les lignes (resp. des colonnes).
Dans notre exemple pour les colonnes (ie les variables xy), il y a 4 valuations
possibles 00, 01, 10, 11. Les dispositions des valuations ne doivent pas ˆêtre
quelconques : il faut en passant de l’une `a sa suivante, qu’un seul bit change de
valeur (ainsi, on a cote-à-côte le monomes avec x et celui avec x). Il convient de
noter que pour passer de la dernière à la première colonne (resp. ligne) un seul bit
change dans la valuation : le tableau sera considéré de manière sphérique.
Les tables de Karnaugh sont souvent présentées sous la forme ´équivalente
suivante :
x
y
z
C’est celle-ci que nous allons utiliser par la suite.
Une fois le tableau construit, on le remplit avec les valeurs de la fonction
booléenne. Voici le tableau rempli de la fonction g dont la forme normale
disjonctive est
x.y.z + x.y.z + x.y.z + x.y.z
Ensuite, on cherche à recouvrir tous les 1 du tableau en formant des
regroupements. Chaque regroupement :
 ne contient que des 1 adjacents,
 doit former un rectangle
 et le nombre d’´éléments d’un regroupement doit ˆêtre
une puissance de deux.
On choisit toujours
 les plus grands regroupements possibles,
 et le plus petit nombre possible de regroupements
recouvrant les 1 du tableau.
Dans notre exemple on peut faire trois regroupements de deux éléments, et ils
sont tous nécessaires au recouvrement. Chaque regroupement correspond à un
monôme obtenu en utilisant la simplification 2.1
x
y
z
xyz + xyz = xy
0
0
1
0
0
1
1
1
xyz + xyz = xz
Finalement, on obtient l’expression simplifiée suivante :
x.y + x.z + y.z
Les règles suivantes doivent toujours être respectées
xyz + xyz = yz
— Tous les 1 de la table de vérité doivent ˆêtre considérés : un 1 peut ˆêtre
utilisé dans plusieurs regroupement; au pire un 1 isolé est un regroupement
de taille un.
— Le tableau doit ˆêtre considéré de façon circulaire (on peut replier le tableau
comme une sphère).
— Les regroupements peuvent ´également ˆêtre de taille 4,8, ... (toutes
puissances de 2) Voici un dernier exemple dans lequel on fait un regroupement de
taille 1 et un regroupement de taille 4, en utilisant la propriété de circularité du
tableau.
CHAPITRE 3 :
CIRCUITS COMBINATOIRES
Un circuit combinatoire est un circuit physique élaboré à partir de composants
électroniques. Il comporte des entrées et des sorties. Les entrées et sorties sont des
valeurs booléennes et chaque sortie est valeur d’une fonction booléenne fonction
des entrées. Les circuits combinatoires sont construits à partir de “portes logiques”
3.1
Portes logiques
Les portes logiques sont des fonctions booléennes ´élémentaires; elles
disposent d’entrées (`à gauche sur les dessins) et d’une sortie (`à droite). Des
signaux arrivent sur les entrées (0 ou 1) et un signal est produit sur la sortie.
Les tables de vérité donnent la valeur de la sortie pour chacune des portes en
fonction de la valeur des entrées.
Porte
Symbole
Table de
signification
vérité
OUI
La sortie
reproduit le
niveau
d'entrée
NON
La sortie
reproduit le
niveau
inverse
d'entrée
ET
(AND)
La sortie est
au niveau 1 si
toutes
les
entrées sont
également
au niveau 1.
Une
seule
entrée
au
niveau 0 suffit
pour que la
sortie soit à 0
ET NON
La sortie est
(NAND)
au niveau 0 si
toutes
les
entrées sont
au niveau 1.
Une
seule
entrée
au
niveau
0 suffit pour
que la sortie
soit à 1
OU
(OR)
La sortie est
au niveau 1 si
une
des
entrées
est
au niveau 1.
Une
seule
entrée
au
niveau 1
suffit pour
que la sortie
soit à 1
OU
La sortie est
NON
au niveau 1 si
(NOR)
aucune
entrée est au
niveau 0. Une
seule entrée
au niveau 1
suffit pour
que la sortie
soit à 0
EXOR
La sortie est
au niveau 1 si
une
des
entrées
est
au niveau 1
et pas les
deux.
S =
(E1 ou E2) et
pas (E1 et
E2). La sortie
est au niveau
1 quand les
deux entrées
sont
contraires.
EXNOR
si l’une des
entrées est 1
et pas les
deux.
S =
(E1 ou E2) et
pas (E1 et
E2). La sortie
est au niveau
0 quand les
deux entrées
sont
contraires.
IMP
Il
suffirait
d’avoir
un
seul 1 parmi
les
deux
entrées pour
que S donne
1
INH
Les
deux
entrées
doivent être
égales à 1
pour que la
sortie donne
1 car 0 est
absorbant
par
la
multiplication
De façon purement physique, les deux états logiques 0 et 1 sont représentés par
un
Signal électrique : typiquement, un signal compris entre 0 et 1 volt correspond au
0 et un signal entre 2 et 5 volts correspond à l´état binaire 1.
Une porte logique est composée de transistors. Un transistor est un composant
électronique se comportant comme un interrupteur tres rapide. Un transistor
correspond en fait à un inverseur, en montant deux transistors en série (ou
cascade), on obtient une porte NON-ET, et en montant deux transistors en
parallèle, on construit une porte NON-OU. Toutes les autres portes peuvent
ensuite être construites en utilisant ces trois portes.
21
36
3.2
Circuits combinatoire
Un circuit combinatoire :
 est défini par un ensemble de portes reliées les unes aux autres.
 les sorties des portes sont reliées aux entrées d’autres portes
(définissant une orientation des connexions)
en suivant l’orientation des connections, il est impossible que partant de la sortie
d’une porte, on revienne à l’une des ses entrées (graphe acyclique)
 Un circuit combinatoire peut être vu comme une porte logique (à plusieurs
sorties).
De l’idéal à la réalité...Les circuits combinatoires sont une idéalisation dans
lesquels
— le temps de propagation n’est pas pris en compte
— la sortie est disponible d`es que les entrées sont pressentes
En réalité le temps de passage de 0 à 1 n’est pas
— immédiat (temps de parcours du courant électrique)
— instantané (temps de réponse d’une porte)
3.2.1
Le circuit “Majorité”
Le circuit “majorité” comporte 3 entrées A, B, C et une sortie M.
La sortie M vaut 1 si une majorité des entrées valent 1. Voici la table de vérité
de la fonction majorité et le circuit correspondant
A
B
C
M
A B
C
M
0
0
0
0
0
1
0
0
0
1
0
0
0
1
1
0
1
0
1
0
1
0
1
1
1
1
1
1
0
1
1
1
37
La forme normale disjonctive de cette fonction est :
A.B.C + A.B.C + A.B.C + A.B.C
Les sorties des portes sont connectées aux entrées d’autres portes par des fils.
Les fils se croisent sans contact sauf s’ils sont explicitement connectés par un •.
Ce circuit implémente précisément la fonction booléenne donnée au-dessous.
On note cependant qu’on utilise des portes OU et ET `a plus de deux entrées. Cela
est possible car ces opérations ET et OU sont associatives.
En utilisant un tableau de Karnaugh, on obtient la forme simplifiée suivante :
A·B+B·C+C·A
Le circuit correspondant est le suivant :
A
B
C
M
Chronogramme du circuit “Majorité” : Un chronogramme est une
représentation visuelle des valeurs des entrées et sorties au cours du temps. On
modifie les entrées, ce qui modifie ´également les sorties. On a le plus `à gauche,
les valeurs des entrées `a t = 0 et les t croissent le long de l’axe des abscisses.
Une valeur haute sur l’axe des ordonnées correspond `à un signal `a 1, et une
valeur base correspond `à un signal `a 0.
On remarque que les entrées ne d´dépendent que des sorties : pour deux valeurs
identiques des entrées (`a des endroits différents du chronogramme), les valeurs
de sortie sont identiques. C’est une propriété des circuits combinatoires.
Le chronogramme représenté ici est une version ”idéalisée” du chronogramme
réel du circuit car on a supposé que le franchissement des portes ´était instantané.
38
entreeA
entreeB
entreeC
sortieM
3.2.2
Les additionneurs
3.2.2.1 Le demi-additionneur
Un demi-additionneur est un circuit qui prend en entrée deux bits (a et b) et qui
produit la somme (addition) de ces deux nombres s et la retenue ´éventuelle r.
— entrées : a et b
— sorties : s la somme et r la retenue
a
s
b
r
a
0
b
0
s
0
r
0
0
1
1
0
1
1
0
1
1
0
0
1
s=a⊕b
r = a.b
⊕ est l’opérateur de ou-exclusif (XOR)
On parle de demi-additionneur (additionneur 1 bit) : ce circuit ne peut pas
être ´étendu en un additionneur n bits. Voici le circuit correspondant au demiadditionneur :
a
b
s
r
39
Il est réalisé avec une porte XOR. Vous pouvez, comme exercice, essayer de
réaliser un circuit pour le demi-additionneur en n’utilisant que des portes OU et
ET.
3.2.2.2 L’additionneur
Un additionneur est un circuit qui prend en entrée trois bits a, b (les chiffres `à
additionner) et rin une retenue d’entrée (qui peut provenir par exemple de
l’addition d’autres chiffres) et qui produit la somme (addition) de ces trois
nombres s et la retenue ´éventuelle rout.
— entrées : a, b et rin la retenue d’entrée
— sorties : s la somme et rout la retenue de sortie
rin
a
s
b
rout
s = a ⊕ b ⊕ rin
rout = majorité (a, b, rin)
Voici un circuit de l’additionneur : on utilise une porte XOR pour calculer la
somme de a et b dont le résultat est sommé avec rin toujours grâce `à une porte
XOR produisant la sortie s.
La sortie rout est produite comme la “majorité” des entrées : en effet des que
au moins deux entrées valent 1, alors une retenue doit ˆêtre produite.
40
rin
a
b
s
rout
3.2.3
Le décodeur
Nous allons maintenant voir quelques circuits combinatoires qui peuvent servir
de briques pour construire des circuits plus complexes.
Un décodeur décode un nombre code en binaire en activant la ligne
correspondant à ce nombre. Il comprend n entrées et 2n sorties. La ième sortie de
décodeur vaut 1 si les n entrées forment l’entier i, ie (enen−1 ...e1e0)2 = (i)10.
Un décodeur 2 vers 4 : Voici un décodeur 2 vers 4 (2 entrées - 4 sorties)
représenté par sa
Table de vérité (`à gauche) et les expressions booléennes de chacune des sorties
(`à droite).
41
Utilisation du décodeur
— Dans une UAL : supposons que nous ayons une puce capable de quatre
opérations élémentaires (appelons-les, pour faire simple, opérations A, B, C
et D). En attribuant un ”code opérationnel” binaire `à chacune de ces
opérations, comme ceci :
— code de l’opération A : 00
— code de l’opération B : 01
— code de l’opération C : 10
— code de l’opération D : 11
Un décodeur judicieusement placé peut servir à activer le circuit correspondant
`à l’opération demandée. Des lors, ces deux lignes d’entrée agissent comme des
”lignes de commande” et le décodeur m´mérite vraiment son nom puisqu’il se
comporte ici comme un véritable décodeur d’instruction.
— Gestion de la mémoire : la mémoire composée de circuits électroniques, est
organisée comme une gigantesque matrice de petites cases numérotées,
chaque case ´étant capable d’abriter un nombre binaire de taille fixe. Un
décodeur permet d’accéder à cette mémoire puisque il suffira de transmettre
l’adresse de la case mémoire réclamée aux lignes d’entrée du décodeur pour
que celui-ci active la cellule mémoire correspondante.
3.2.4
Le multiplexeur
Un multiplexeur comporte 2n entrées, 1 sortie et n lignes de sélection
(entrées). Il recopie sur sa sortie la valeur de la ligne d’entrée dont le
numéro est codé en binaire sur les lignes d’entrées.
La sortie du multiplexeur vaut la valeur de la ième entrée si l’entier i est
codé sur les lignes de sélection, ie (lnln−1 ...l1l0)2 = (i)10.
42
3.3
Unité arithmétique et logique
L’unité arithmétique est logique (UAL ou ALU) est le composant d’un
ordinateur chargé d’effectuer les calculs. Les ALU les plus simples travaillent sur
des nombres entiers, et peuvent effectuer les opérations communes :
— Les opérations arithmétiques : addition, soustraction, changement de signe
etc.,
— les opérations logiques : compléments `a un, `à deux, ET, OU, OU-exclusif,
NON, NON-ET etc.,
— les comparaisons : test d’égalité, supérieur, inferieur, et leur ´équivalents
ou ´égal,
— éventuellement des décalages et rotations (mais parfois ces opérations sont
externalisées).
Certaines UAL sont spécialisées dans la manipulation des nombres à virgule
flottante, en simple ou double précision (on parle d’unité de calcul en virgule
flottante ou floating point unit (FPU)) ou dans les calculs vectoriels.
Typiquement, ces unités savent accomplir les opérations suivantes :
— additions, soustractions, changement de signe,
— multiplications, divisions,
— comparaisons,
— modulos
Certaines UAL, le plus souvent de la classe des FPUs, notamment celles des
superordinateurs, sont susceptibles d’offrir des fonctions avancées : inverse (1/x),
racine carrée, logarithmes, fonctions transcendantales (sin x, cos x, etc.), opération
vectorielle (produit scalaire, vectoriel, etc.), etc.
Un processeur fait appel à plusieurs UAL.
D´détaillons une UAL 1 bit (les calculs sont fait sur des mots de 1 bit) : elle est
capable de réaliser 4 opérations pour ses entrées A et B, à savoir, B, A et B, A ou
B et (A + B) + Rin;
Le résultat est alors présent sur la sortie et lorsqu’il s’agit d’une addition, la
retenue de sortie est sur Rout (qui vaut 0 pour les autres opérations).
Le décodeur est utilisé pour sélectionner l’opération à réaliser : on remarque
que les sorties du décodeur vont activées ou désactivées au travers de portes ET
(lignes de validation) les résultats des différentes opérations, ne laissant passer
que l’un d’entre eux. On remarque que pour les entrées 00 du décodeur, c’est A et
B qui est calculé et pour 11, (A + B) + Rin. ALU 1 bit (et, ou, non, addition)
43
CHAPITRE 4 :
Le système d’exploitation
4.1.
Notions générales
Le système d’exploitation d’un ordinateur est le programme qui permet d’accéder aux
ressources matérielles de cet ordinateur. Ces ressources matérielles sont essentiellement les
organes d’entrées/sorties : clavier, écran, liaisons réseau, imprimante, disque dur, etc.
Les périphériques d’entrées/sorties varient d’un modèle d’ordinateur à l’autre. Même au sein de
la famille des “compatibles PC”, on trouve difficilement deux modèles dotés d’exactement les
mêmes périphériques (cartes d’extension par exemple). De ce fait, les instructions à exécuter
pour piloter tel périphérique (par exemple pour afficher un rectangle rouge à l’écran) diffèrent
d’un ordinateur à l’autre.
Le rôle principal du système d’exploitation est d’isoler les programmes des détails du matériel.
Un programme désirant afficher un rectangle ne va pas envoyer des instructions à la carte
graphique de l’ordinateur, mais plutôt demander au système d’exploitation de le faire. C’est le
système d’exploitation qui doit connaitre les détails du matériel (dans ce cas le type de carte
graphique et les instructions qu’elle comprend). Cette répartition des rôles simplifie grandement
l’écriture des programmes d’application2
Le système d’exploitation est donc un programme complexe, lié à la configuration matérielle
de la machine. Nous étudierons en deuxième année les principes de fonctionnement des
systèmes d’exploitation. Notons simplement que tout système d’exploitation est divisé en
plusieurs couches. La couche basse est responsable de la gestion du matériel, et change par
exemple suivant le type de périphérique installé. Les couches plus hautes sont chargées de
fonctions plus évoluées (gestion des fichiers sur disque par exemple), plus ou moins
indépendantes du matériel.
2 On appelle programme d’application, ou simplement application, un programme qui effectue des traitements
directement utile pour l’utilisateur de l’ordinateur (traitement de texte, base de données, etc.), par opposition aux
programmes qui ne sont pas directement visibles par l’utilisateur (comme le système d’exploitation ou les divers
utilitaires gérant l’ordinateur).
Les systèmes d’exploitation les plus répandus sont les suivants :
Système
DOS
Windows
Type de machine Caractéristiques
PC
simple, répandu, peu puissant.
interface graphique, très répandu, peu
PC
fiable.
Window NT
PC, stations
multi-tâche.
VMS
Vax
multi-tâche, fiable, ancien.
UNIX
Tous
multi-tâche, fiable, flexible
.
4.2.
Présentation du BIOS
Le BIOS (Basic Input Output System, système d’entrées/sorties de base) constitue la couche
basse de tous les systèmes d’exploitation sur PC. Il est donc responsable de la gestion du
matériel : clavier, écran, disques durs, liaisons séries et parallèles.
Le programme du BIOS se trouve en mémoire morte (ROM), c’est à dire dans une mémoire
gardant son contenu lorsque l’on interrompt son alimentation électrique 3.
Chaque modèle de PC est vendu avec une version du BIOS adapté à sa configuration matérielle.
4.2.1. Les fonctions du BIOS
Du point de vue de l’utilisation, on peut considérer le BIOS comme une librairie de fonctions.
Chaque fonction effectue une tâche bien précise, comme par exemple afficher un caractère
donné sur l’écran. L’appel de l’une de ces fonctions constitue un appel système.
On pourrait envisager que les fonctions du BIOS soient simplement des procédures, que l’on
appellerait avec l’instruction CALL en passant les paramètres nécessaires. Ce n’est pas le cas,
le mécanisme d’appel est différent.
3
En fait, le BIOS est souvent en mémoire EEPROM ou FLASH, afin de pouvoir le remplacer plus facilement.
En effet, il a été prévu de pouvoir modifier le comportement du BIOS en cours d’utilisation, par
exemple pour gérer un nouveau périphérique ou pour modifier la gestion d’un périphérique
existant. Le code du BIOS étant en mémoire morte, il n’est pas modifiable. De plus, le BIOS
étant différent d’un ordinateur à l’autre, les adresses des fonctions changent...
Prenons un exemple : soit la “fonction” du BIOS affichant un caractère (donné par son code
ASCII) sur l’écran. Supposons que sur notre PC, la première instruction de cette “fonction” soit
à l’adresse F1234560H. Sur le modèle d’une autre marque de notre voisin, cette même fonction
pourrait être implantée à l’adresse F1234550H.
4.2.2. Vecteurs d’interruptions
Le problème est résolu par l’utilisation d’une table d’indirection, la table des vecteurs
d’interruptions4.
Cette table est placée en mémoire principale (RAM), et contient les adresses (en ROM ou en
RAM) des fonctions du BIOS. Elle est implantée à partie de l’adresse 00000000H (première
case mémoire) et est initialisé par le BIOS lui même au moment du démarrage du PC (boot).
Adresse contenu
0000 adresse de la première fonction du BIOS 0004
adresse
de
la
deuxième fonction du BIOS
...
...
Chaque élément de la table occupe 4 octets (adresse 32 bits). La table a 256 éléments (et occupe
donc 1Ko).
Dans l’exemple évoqué plus haut, si l’on sait que la fonction du BIOS qui affiche un caractère
est la 33ième, on va l’appeler en lisant la 33ième ligne de la table, puis en allant exécuter les
instructions à l’adresse trouvée. Sur notre PC, la table contiendrait :
Adresse contenu
4 On emploie abusivement le terme d’interruption car le même mécanisme est utilisé pour les interruptions
matérielles que nous étudierons plus loin.
...
...
0084H
F1234560H
(car 4x33 = 84H). ... ...
La table des vecteurs d’interruptions contient des valeurs différentes pour chaque version de
BIOS, et peut être modifiée pour pointer sur du code en mémoire principale, modifiant alors le
BIOS existant.
4.2.3. Appel système : instruction INT n
L’instruction INT n permet d’appeler la n-ième fonction de la table des vecteurs d’interruptions.
n est un entier compris entre 0 et 255 (1 octet), car il y a 256 vecteurs d’interruptions dans la
table.
L’instruction INT n est semblable à l’instruction CALL, sauf que l’adresse de destination est
donnée par la table des vecteurs d’interruptions, et que les indicateurs sont automatiquement
sauvegardés sur la pile. De plus, l’adresse de retour complète (32 bits) est empilée, car le traitant
d’interruption n’est pas nécessairement dans le même segment de code que le programme
appelant.
Le déroulement de INT n se passe comme suit :
1.
sauvegarde les indicateurs du registre d’état sur la pile (les indicateurs sont regroupés
dans un mot de 16 bits);
2.
sauvegarde CS et IP sur la pile;
3.
CS et IP sont chargés avec la valeur lue à l’adresse 4n, n étant le paramètre de INT.
L’exécution continue donc au début du traitant d’interruption.
4.2.4. Traitants d’interruptions
Un traitant d’interruption est une routine 5 appelée via la table des vecteurs d’interruption par
l’instruction INT n.
Les traitants d’interruptions sont très similaires à des procédures ordinaires, sauf qu’ils doivent
se terminer par l’instruction IRET au lieu de RET.
5
les mots “routines”, “fonctions” et “procédures” sont synonymes dans ce cours.
l’instruction IRET est très similaire à RET, sauf que CS et IP sont dépilés, et que tous les
indicateurs sont restaurés à leur anciennes valeurs, sauvegardées sur la pile par INT n.
Notons que les éventuels paramètres du traitant d’interruption sont toujours passés par registre.
4.2.5. Quelques fonctions du BIOS
INT Fonction
0
5
Division par 0
Copie d’écran
10H Ecran
12H Taille mémoire
appelé automatiquement lors de div. par 0
gestion des modes vidéo
13H Gestion disque dur (initialiser, lire/écrire secteurs)
14H Interface série
16H Clavier
4.3.
(lire caractère, état du clavier)
Présentation du DOS
Le système DOS (Disk Operating System, système d’exploitation de disque) repose sur le BIOS,
dont il appelle les fonctions pour interagir avec le matériel.
Les fonctions du DOS s’utilisent comme celles du BIOS, via des vecteurs d’interruptions. Elles
offrent des fonctionnalités de plus haut niveau que le BIOS (entrées/sorties, ouverture de
fichiers sur disque, etc.).
Les fonctions du DOS s’appellent toutes à l’aide du vecteur 21H. La valeur du registre AH
permet d’indiquer quelle est la fonction que l’on appelle :
MOV AH, numero_fonction
INT 21H
Nous avons déja mentionné la fonction 4CH du DOS, qui permet de terminer un programme et
de revenir à l’interpréteur de commandes DOS :
MOV AH, 4CH
INT 21H
4.3.1. Description de quelques fonctions du DOS
Voici à titre d’exemple quelques fonctions du DOS :
Numéro Fonction
01H
Lecture caractère
met le code ascii lu dans AL
02H
Affiche caractère
code ascii dans registre DL
09H
Affiche chaîne de caractèresDX=adresse début chaîne, terminée par ’$’
0BH
Lit état clavier
met AL=1 si caractère, 0 sinon.
Ce programme lit un caractère au clavier et l’affiche en majuscule :
MOV AH, 01H
; code fonction DOS
INT 21H
; attente et lecture d’un caract\‘ere
AND AL, 11011111b ; passe en majuscule
MOV DL, AL
;
MOV AH, 02H
; code fonction affichage INT 21H ; affiche le caractere
Dans la suite du cours, nous aurons l’occasion de décrire d’autres fonctions du BIOS et du DOS.
4.4.
Modification d’un vecteur d’interruption en langage C
Nous allons maintenant voir comment l’on peut modifier la table des vecteurs d’interruptions.
On modifie un vecteur d’interruption pour installer un traitant d’interruption, “fonction”
appelée par l’instruction INT n. L’installation de traitants permet de modifier le comportement
du système d’exploitation, ou de communiquer avec des périphériques d’entrées sorties, comme
nous l’étudierons dans le chapitre suivant.
En général, le système a installé un traitant pour chaque vecteur d’interruption. L’installation
d’un nouveau traitant doit donc se faire avec précautions : on va sauvegarder l’ancienne adresse,
de façon à pouvoir remettre le vecteur dans son état initial à la fin de notre programme.
Les vecteurs d’interruptions peuvent être modifiés en assembleur ou en langage C. Nous
travaillerons ici en langage C : le principe est le même qu’en assembleur, mais les programmes
sont plus intelligibles.
4.4.1. Ecriture d’un traitant d’interruption en C
Nous avons vu que le compilateur générait pour chaque fonction C un prócédure en assembleur,
terminée par l’instruction RET.
Un traitant d’interruption est similaire à une procédure, mais terminée par IRET. En Turbo C
sur PC, on peut signaler au compilateur qu’une fonction est un traitant d’interruption grâce au
mot clé interrupt. La déclaration
void interrupt un_traitant();
indique que la fonction nommée “un_traitant” est un traitant d’interruption. Les traitants ne
retournent pas de valeur et ne prennent pas d’arguments.
4.4.2. Installation d’un traitant
En Turbo C, on dispose de deux fonctions qui permettent de manipuler facilement la table des
vecteurs d’interruption : setvect() et getvect()6.
setvect() modifie un vecteur, et getvect() lis la valeur d’un vecteur. La valeur d’un vecteur
d’interruption est l’adresse de la fonction traitante. Une variable TRAITANT de ce type se
déclare comme suit :
void interrupt (*TRAITANT) ();
(littéralement : “old_handler est un pointeur sur une fonction de type traitant d’interruption”).
6
Ces fonctions sont déclarées dans DOS.H.
CHAPITRE 5 : STRUCTURE DES COMPOSANTS
HARDWARE
5.1.
Les interruptions
Nous étudions dans cette partie les interruptions matérielles (ou externes), c’est à dire
déclenchées par le matériel (hardware) extérieur àu processeur. Nous nous appuyons
ici aussi sur l’exemple du PC.
5.1.1. Présentation
Les interruptions permettent au matériel de communiquer avec le processeur.
Les échanges entre le processeur et l’extérieur que nous avons étudiés jusqu’ici se
faisait toujours à l’initiative du processeur : par exemple, le processeur demande à lire
ou à écrire une case mémoire.
Dans certains cas, on désire que le processeur réagisse rapidement à un évènement
extérieur : arrivé d’un paquet de données sur une connexion réseau, frappe d’un
caractère au clavier, modification de l’heure 7. Les interruptions sont surtout utilisées
pour la gestion des périphériques de l’ordinateurs.
Une interruption est signalée au processeur par un signal éléctrique sur une borne
spéciale. Lors de la réception de ce signal, le processeur “traite” l’interruption dès la
fin de l’instruction qu’il était en train d’exécuter 8. Le traitement de l’interruption
consiste soit :
– à l’ignorer et passer normalement à l’instruction suivante : c’est possible
uniquement pour certaines interruptions, nommées interruptions masquables. Il
est en effet parfois nécessaire de pouvoir ignorer les interruptions pendant un
certain temps, pour effectuer des traitements très urgents par exemple. Lorsque
L’heure change en permanence... nous verrons que le circuit d’horloge, extérieur au processeur, envoie un
signal d’interruption à intervalles réguliers (quelques ms).
8 Le processeur ne peut pas réagir plus vite; imaginez les conséquences d’une instruction abandonnée à la
moitié de son exécution...
7
le traitement est terminé, le processeur démasque les interruptions et les prend
alors en compte.
– à exécuter un traitant d’interruption (interrupt handler). Un traitant
d’interruption est un programme qui est appelé automatiquement lorsqu’une
interruption survient. L’adresse de début du traitant est donnée par la table des
vecteurs d’interruptions, que nous avons déja rencontré dans le chapitre
précédent. Lorsque le traitant à effectuer son travail, il exécute l’instruction
spéciale IRET qui permet de reprendre l’exécution à l’endroit où elle avait été
interrompue.
5.2.
Interruption matérielle sur PC
5.2.1. Signaux d’interruption
Les processeurs de la famille 80x86 possèdent trois bornes pour gérer les interruptions : NMI, INTR, et INTA (voir figure 5.1).
MPU
INTA
INTR
N
MI
FIG. 5.1 – Bornes d’interruptions.
NMI est utilisée pour envoyer au processeur une interruption non masquable (NMI, Non
Maskable Interrupt). Le processeur ne peut pas ignorer ce signal, et va exécuter le traitant
donné par le vecteur 02H. Ce signal est normalement utilisé pour détecter des erreurs
matérielles (mémoire principale défaillante par exemple).
INTR (Interrupt Request), demande d’interruption masquable. Utilisée pour indiquer au MPU
l’arrivée d’une interruption.
INTA (Interrupt Acknowledge) Cette borne est mise à 0 lorsque le processeur traite
effectivement l’interruption signalée par INTR (c’est à dire qu’elle n’est plus masquée)9.
5.2.2. Indicateur IF
A un instant donné, les interruptions sont soit masquées soit autorisées, suivant l’état d’un
indicateur spécial du registre d’état, IF (Interrupt Flag).
–
9
si IF = 1, le processeur accepte les demandes d’interruptions masquables, c’est à dire qu’il
les traite immédiatement;
On note INTA, pour indiquer que l’état normal de cette borne est 1 et non 0 (inversé).
–
si IF = 0, le processeur ignore ces interruptions.
L’état de l’indicateur IF peut être modifié à l’aide de deux instructions, CLI (CLear IF, mettre
IF à 0), et STI (SeT IF, mettre IF à 1).
5.2.3. Contrôleur d’interruptions
L’ordinateur est relié a plusieurs périphériques, mais nous venons de voir qu’il n’y avait qu’un
seul signal de demande d’interruption, INTR.
Le contrôleur d’interruptions est un circuit spécial, extérieur au processeur, dont le rôle est de
distribuer et de mettre en attente les demandes d’interruptions provenant des différents
périphériques.
MPU
NM
I
BUS DE DONNEES
INTA
INTA
INTR
IN
T
PI
C
IR 0
Q
IR
Q
IR 7
Q
Périphérique
s
FIG. 5.2 – Le contrôleur d’interruptions (PIC, pour Programmable Interruption
Controler).
La figure 5.2 indique les connexions entre le MPU et le contrôleur d’interruptions.
Le contrôleur est rélié aux interfaces gérant les périphériques par les bornes IRQ (InteRrupt
reQuest). Il gère les demandes d’interruption envoyées par les périphériques, de façon à les
envoyer une par une au processeur (via INTR). Il est possible de programmer le contrôleur pour
affecter des priorités différentes à chaque périphérique, mais nous n’aborderons pas ce point
dans ce cours.
Avant d’envoyer l’interruption suivante, le contrôleur attend d’avoir reçu le signal
INTA, indiquant que le processeur a bien traité l’interruption en cours.
5.2.4. Déroulement d’une interruption externe masquable
Reprenons les différents évènements liés à la réception d’une interruption masquable :
1. Un signal INT est émis par un périphérique (ou plutôt par l’interface gérant celuici).
2. Le contrôleur d’interruptions reçoit ce signal sur une de ses bornes IRQ i. Dès que cela est
possible (suivant les autres interruptions en attente de traitement), le contrôleur envoie un
signal sur sa borne INT.
3. Le MPU prend en compte le signal sur sa borne INTR après avoir achevé l’exécution de
l’instruction en cours (ce qui peut prendre quelques cycles d’horloge). Si l’indicateur
IF=0, le signal est ignoré, sinon, la demande d’interruption est acceptée.
4. Si la demande est acceptée, le MPU met sa sortie INTA au niveau 0 pendant 2 cycles
d’horloge, pour indiquer au contrôleur qu’il prend en compte sa demande.
5. En réponse, le contrôleur d’interruption place le numéro de l’interruption associé à la
borne IRQi sur le bus de données.
6. Le processeur lit le numéro de l’interruption sur le bus de données et l’utilise pour trouver
le vecteur d’interruption. Ensuite, tout se passe comme pour un appel système
(interruption logicielle, voir page 65), c’est à dire que le processeur :
(a) sauvegarde les indicateurs du registre d’état sur la pile;
(b) met l’indicateur IF à 0 (masque les interruptions suivantes);
(c) sauvegarde CS et IP sur la pile;
(d) cherche dans la table des vecteurs d’interruptions l’adresse du traitant
d’interruption, qu’il charge dans CS:IP.
7. La procédure traitant l’interruption se déroule. Pendant ce temps, les interruptions sont
masquées (IF=0). Si le traitement est long, on peut dans certains cas ré-autoriser les
interruptions avec l’instruction STI.
8. La procédure se termine par l’instruction IRET, qui restaure CS, IP et les indicateurs à
partir de la pile, ce qui permet de reprendre le programme qui avait été interrompu.
5.3.
Exemple : gestion de l’heure sur PC
L’horloge d’un PC peut être considéré comme un “périphérique” d’un type particulier. Il s’agit
d’un circuit électronique cadencé par un oscillateur à quartz (comme une montre ordinaire), qui
est utilisé entre autre pour gérer l’heure et la date, que de nombreux programmes utilisent.
L’horloge envoie une interruption matérielle au processeur toutes 0,055 secondes (soit 18,2 fois
par secondes). Le vecteur correspondant est le numero 08H.
Pour gérer l’heure, le BIOS installe un traitant pour l’interruption 08H. Ce traitant incrémente
simplement un compteur, nombre entier codé sur 32 bits et toujours rangé à l’adresse 0040:006C
en mémoire principale.
Ainsi, si un programme désire connaitre l’heure, il lui suffit de lire cet emplacement mémoire,
qui change “automatiquement” 18,2 fois par secondes. Une simple division permet alors de
convertir ce nombre en heures et minutes.
Remarque :
1. Les programmes usuels utilisent des appels systèmes du DOS plus pratiques, qui se basent
sur la valeur de la mémoire 0040:006C et effectuent les conversions nécessaires.
En langage C, on pourra utiliser la fonction time() qui appelle elle même le DOS.
2. En modifiant le vecteur d’interruption 08H, on peut faire en sorte que le PC exécute
n’importe quelle tâche de façon régulière. En pratique, il est déconseillé de modifier
directement le vecteur 08H. Le traitant d’horloge standard du système BIOS appelle une
autre interruption (logicielle), qui est prévue pour être déroutée par les utilisateurs.
5.4.
Entrées/Sorties par interruption
En général, les périphériques qui recoivent des données de l’extérieur mettent en œuvre un
mécanisme d’interruption : clavier, liaisons séries (modem, souris...) et parallèles
(imprimantes), interfaces réseau, contrôleurs de disques durs et CD-ROMS, etc.
Nous étudierons dans le chapitre suivant le cas de la liaison série.
5.4.1. Un exemple
Etudions ici très schématiquement le cas d’une lecture sur disque dur, afin de comprendre
comment l’utilisation d’une interruption permet de construire un système d’exploitation plus
efficace.
Soit un programme lisant des données sur un disque dur, les traitant et les affichant sur l’écran.
Voici l’algorithme général sans utiliser d’interruption : – Répéter :
1. envoyer au contrôleur de disque une demande de lecture d’un bloc de données.
2. attendre tant que le disque ne répond pas (scrutation);
3. traiter les données;
4. afficher les résultats.
Cette méthode simple est appelée entrée/sortie par scrutation. L’étape 2 est une boucle de
scrutation, de la forme :
–
–
Répéter :
regarder si le transfert du disque est terminé; – Tant qu’il n’est pas terminé.
La scrutation est simple mais inefficace : l’ordinateur passe la majorité de son temps à attendre
que les données soit transférées depuis le disque dur. Pendant ce temps, il répète la boucle de
scrutation.
Ce temps pourrait être mis à profit pour réaliser une autre tâche. Très grossièrement, les
entrées/sorties par interruption fonctionnent sur le modèle suivant :
1. Installer un traitant d’interruption disque qui traite les données reçues et les affiche;
2. envoyer au contrôleur de disque une demande de lecture des données;
3. faire autre chose (un autre calcul ou affichage par exemple).
Dans ce cas, dès que des données arrivent, le contrôleur de disque envoie une interruption (via
le contrôleur d’interrruptions) au processeur, qui arrète temporairement le traitement 3 pour
s’occuper des données qui arrivent. Lorsque les données sont traitées, le traitement 3 reprend
(IRET). Pendant l’opération (lente) de lecture du disque dur, le processeur peut faire autre chose
(par exemple jouer aux échecs!).
Dans la pratique, les choses sont un peu plus compliquées : il faut avoir plusieurs tâches à faire
en même temps pour que l’utilisation des interruptions permettent un gain intéressant. Ce
principe est surtout mis à profit dans les systèmes multi-tâches comme UNIX ou Windows NT,
que nous étudierons en deuxième année.
6.
Les entrées/sorties
Les ordinateurs sont utilisés pour traiter et stocker des informations. Nous avons jusqu’ici décrit
le fonctionnement du processeur et la mémoire principale. Nous allons maintenant étudier
comment un ordinateur peut échanger de l’information avec son environnement; ces échanges
d’informations sont nommés entrées/sorties (ou IO, Input/Output en anglais).
Il peut s’agir d’un flux d’informations de l’extérieur vers l’ordinateur (acquisition via le clavier,
une connexion réseau, un disque dur, etc.), ou d’un flux de l’ordinateur vers l’extérieur (écran,
réseau, disque, etc.).
Les techniques d’entrées/sorties sont très importantes pour les performances de l’ordinateur.
Rien ne sert d’avoir un un processeur calculant très rapidement s’il doit souvent perdre son
temps pour lire des données ou écrire ses résultats.
Durant une opération d’entrée/sortie, de l’information est échangée entre la mémoire principale
et un périphérique relié à l’ordinateur. Nous étudierons plus loin dans ce cours le
fonctionnement de certains périphériques (disques durs, clavier, écran). Cet échange nécessite
une interface ou contrôleur, circuit électronique gérant la connexion. L’interface réalise des
fonctions plus ou moins complexes suivant le type de périphérique. Son but est surtout de
décharger le processeur pour améliorer les performances du système.
A la fin de cette partie, nous décrivons pour illustrer les concepts présentés le circuit d’interface
série asynchrone 8250, qui équipe tous les PC.
6.1.
Les bus du PC
Nous avons dans les chapitres précédents décrit de façon simplifiée les bus reliant le processeur
à la mémoire principale. Nous avons distingué le bus d’adresse, le bus de données et le bus de
commandes (signaux de commandes type R/W).
En fait, la plupart des échanges d’informations dans l’ordinateur se font sur des bus : connexions
processeur/mémoire, mais aussi connexions entre le processeur et les interfaces d’entrées
sorties. Il existe une grande variété de bus; chacun est caractérisé par sa largeur (nombre de bits)
et sa fréquence (nombre de cycles par secondes, en Méga-Hertz).
6.1.1. Bus local
Le bus local est le bus le plus rapide, sur lequel sont directement connectés le processeur et la
mémoire principale. Il regroupe un bus de données un bus d’adresse et de signaux de
commandes (voir le chapitre 1).
Le bus local est aussi relié aux contrôleurs des bus d’extensions, et parfois à des contrôleurs de
mémoire cache (voir le chapitre 9).
6.1.2. Bus d’extension du PC
Les bus d’extensions (ou bus d’entrés/sorties) permettent de connecter au PC des contrôleurs
d’extensions (cartes) grâce à des connecteurs spéciaux (slots sur la carte mère).
Les contrôleurs d’extensions sont utilisés pour relier le PC aux périphériques d’entrées/sorties.
Depuis l’apparition du PC au début des annés 80, plusieurs standards de bus d’extension ont
étés proposés : ISA, MCA, EISA...
MPU
M
P
BUS LOCAL
Controleur bus
d’extension (ISA)
CARTE
GRAPHIQUE
CARTE
SO
N
FIG. 6.1 – Bus local et bus d’extension type ISA.
Le bus ISA
Le bus d’extension ISA (Industry Standard Architecture) est le plus répandu sur PC. De
fréquence relativement basse et de caractéristiques peu puissantes, il est utilisé pour connecter
des cartes relativement lentes (modems, cartes sons, ...).
Les principales caractéristiques du bus ISA (PC-AT) sont : 16 bits de données, 24 bits d’adresse,
16 lignes d’interruption, fréquence 8 MHz.
6.1.3. Bus local PCI
Les périphériques d’entrées/sorties “modernes” demandent des transferts d’information très
importants entre la mémoire principale (MP) et le contrôleur. Par exemple, une carte graphique
SVGA récente possède une mémoire vidéo de 1 à 8 Mo, et met en œuvre des transferts entre
cette mémoire et la MP à 60 Mo/s.
Pour permettre de tels débits, il est nécessaire de connecter le contrôleur de périphérique
directement sur le bus local. Le contrôleur bénéficie ainsi du haut débit de ce bus; de plus, il
peut en prendre le contrôle pour effectuer des transferts directement avec la MP sans passer par
le processeur.
Le premier bus PC basé sur ces principes a été le bus VLB (VESA Local Bus), qui est
actuellement remplacé par le bus PCI (Peripheral Component Interface).
Le bus PCI équipe la grande majorité des PC récents. Notons qu’il n’est pas réservé au
processeurs INTEL, puisqu’il est aussi utilisé sur les Macintosh à base de processeurs PowerPC.
Le principe du bus PCI est justement de dissocier le processeur et les bus. Cette séparation
permet d’utiliser une fréquence de bus différente de celle du processeur et facilite l’évolution
des machines.
Les caractéristiques du bus PCI sont : 32 ou 64 bits de données, 32 bits d’adresse, fréquence de
33 MHz. Il permet de débits de 132 Mo/s en 32 bits, ou 264 Mo/s en 64 bits.
MPU
M
P
BUS LOCAL
BUS LOCAL PCI
CONTROLEUR
BUS PCI
PONT PCI/ISA
CARTE
MODEM
CARTE
VIDE
O
CARTE
SC
SI
CARTE
SO
N
F I .6.2 –PCavecbusPCI.
G
La figure 6.2 représente l’architecture d’un PC avec bus PCI.
Le contrôleur PCI est la plupart du temps intégré sur la carte mère (il s’agit d’un circuit intégré
complexe dont les performances sont cruciales pour celles du PC).
Les connecteurs (slot) PCI sont réservés aux périphériques demandants de hauts débits : cartes
vidéo, contrôleurs SCSI, cartes réseaux haut débit.
6.2.
Bus de périphériques
Ces bus permettent de relier une interface (contrôleur) de l’ordinateur à un ou plusieurs
périphériques (généralement à l’extérieur de l’ordinateur).
6.2.1. Bus SCSI
Le bus SCSI (Small Computer System Interface) est un bus d’entrées/sorties parallèles qui n’est
pas limité aux ordinateurs PC, ni même aux micro-ordinateurs.
Il permet de connecter de 1 à 7 périphériques de toutes natures (Disques durs, lecteurs
CD/ROM, digitaliseurs (scanners), lecteurs de bandes (streamers), ... ).
La version SCSI 1 permet un taux de transfert de 4 Mo/s (largeur 8 bits). La version SCSI 2
permet d’obtenir jusqu’a 40 Mo/s en 32 bits.
Le bus SCSI équipe en standard tous les ordinateurs Apple Macintosh, et la grande majorité des
stations de travail. Sur PC, il faut installer une carte d’interface, connectée soit au bus ISA soit
au bus PCI suivant les performances désirées.
6.2.2. Bus PCMCIA
Le bus PCMCIA (Personal Computer Memory Card International Association) est un bus
d’extension utilisé sur les ordinateurs portables. Il permet la connexion de périphériques de
taille très réduite (format carte bancaire, 3 à 10 mm d’épaisseur, connecteur 68 broches).
6.3.
Les entrées/sorties sur PC
6.3.1. Généralités
Les données échangées entre un périphérique et le processeur transitent par l’interface (ou
contrôleur) associé à ce périphérique.
L’interface possède de la mémoire tampon pour stocker les données échangées (suivant le type
d’interface, cette mémoire tampon fait de 1 seul octet à quelques méga-octets).
L’interface stocke aussi des informations pour gérer la communication avec le périphérique :
– des informations de commande, pour définir le mode de fonctionnement de l’interface :
sens de transfert (entrée ou sortie), mode de transfert des données (par scrutation ou
interruption), etc. Ces informations de commandes sont communiquées à l’interface lors
de la phase d’initialisation de celle-ci, avant le début du transfert.
– des informations d’état, qui mémorisent la manière dont le transfert s’est effectué (erreur
de transmission, réception d’informations, etc). Ces informations sont destinées au
processeur.
On accède aux données de chaque interface par le bias d’un espace d’adresses d’entrées/sorties,
auquel on accède par les instructions IN et OUT du 80x86.
IN AL, adresse E/S lit l’octet d’adresse spécifiée dans l’espace d’entrées/sorties et le transfère
dans le registre AL.
OUT adresse E/S, AL écrit le contenu de AL à l’adresse spécifiée de l’espace d’entrées/sorties.
Lors de l’exécution des instructions IN et OUT, le processeur met à 1 sa borne IO/M et présente
l’adresse E/S sur le bus d’adresse. Le signal IO/M indique aux circuits de décodage d’adresses
qu’il ne s’agit pas d’une adresse en mémoire principale, mais de l’adresse d’une interface
d’entrées/sorties.
6.3.2. Modes de transfert
Le transfert des données entre le processeur et l’interface peut s’effectuer de différentes
manières.
On distingue les transferts sans condition et les transferts avec condition au périphérique. Les
transferts sans condition sont les plus simples; ils concernent les périphériques très simples
(interrupteurs, voyants lumineux, ...) qui n’ont pas de registre d’état et sont toujours prêts.
Les transferts avec condition sont plus complexes : avant d’envoyer ou de recevoir des
informations, le processeur doit connaitre l’état du périphérique (par exemple, en réception sur
une liaison réseau, on doit savoir si un octet est arrivé avant de demander la lecture de cet octet).
On distingue ici deux méthodes, les transferts par scrutation et les transferts par interruption,.
6.4.
L’interface d’entrées/sorties séries asynchrones
L’interface entrées/sorties séries équippe tous les PC et permet l’échange d’informations à faible
débit avec un périphérique comme un modem, ou avec un autre PC, sur des distances inférieures
à quelques dizaines de mètres.
6.4.1. Pourquoi une transmission série?
Sur des distances supérieures à quelques mètres, il est difficile de mettre en œuvre une
transmission en parallèle : coût du cablage, mais surtout interférences électromagnétiques entre
les fils provoquant des erreurs importantes. On utilise alors une liaison série, avec un seul fil
portant l’information dans chaque sens.
Sur des distance supérieures à quelques dizaines de mètres, on utilisera des modems aux
extrémités de la liaison et on passera par un support de transmission public (réseau téléphonique
ou lignes spécialisées) (voir figure 6.3).
FIG. 6.3 – Différents types de transmissions pour relier simplement deux PC.
6.4.2. Principe de la transmission série asynchrone
En l’abscence de transmission, le niveau de la liaison est 1 (niveau de repos).
Les bits sont transmis les un après les autres, en commençant par le bit de poids faible b0. Le
premier bit est précédé d’un bit start (niveau 0). Après le dernier bit, on peut transmetre un bit
de parité (voir cours de réseaux), puis un ou deux bits stop (niveau 1).
Chaque bit a une durée de ∆, qui fixe le débit transmission. Le nombre de changements de
niveaux par seconde est appelé rapidité de modulation (RM), et s’exprime en Bauds (du nom
de Baudot, l’inventeur du code TELEX). On a
et aussi débit binaire = bits/s
Le récepteur détecte l’arrivée d’un octet par le changement de niveau correspondant au bit start.
Il échantillonne ensuite chaque intervalle de temps ∆ au rythme de son horloge.
Comme les débits binaires de transmission série de ce type sont faibles (< 19600 bits/s) et que
les horloges de l’émetteur et du récepteurs sont suffisament stables (horloges à quartz), il n’est
pas nécessaire de les synchroniser. C’est la raison pour laquelle ce type de transmission série
est qualifié d’asynchrone.
Lorsque les débits sont plus importants, la dérive des horloges entrainerait des erreurs, et on
doit mettre en œuvre une transmission synchrone (voir cours de réseaux).
Niveau logique
de la liaison
S
T
A
R
T
1
0
b
0
b
1
b
2
b
3
∆
Déb
ut
transmission
b
4
b
5
b
6
b
7
8
∆
P
A
R
I
T
E
S
T
O
P
∆
∆
tem
ps
Fi
n
transmission
durée de transmission de l’octet
FIG. 6.4.1 – Transmission d’un octet b7b6b5b4b3b2b1b0 en série.
6.4.3. L’interface d’E/S séries 8250
Le composant électronique chargé de la gestion des transmissions séries asynchrones dans les
PC est appelé UART (Universal Asynchronous Receiver Transmitter).
Nous décrivons dans ce cours le circuit Intel 8250.
Bornes de l’interface
HORLOGE
BUS DE
DONNEES
BU
SD’ADRESSES
Controleur d’interruptions
D
0.
UART
D.
7
825
A
0
0
A
1
A
2
C
S
INTRPT
SOU
TSI
N
DS
R
DT
R
RT
SCT
SC
D
R
I
EMISSION (Serial OUTput)
RECEPTION (Serial INput)
Data Set Ready (Modem pret a communiquer)
Data Terminal Ready (MPU pret a communiquer)
Request To Send (Demande d’emission)
Clear To Send (Modem pret a emettre)
Carrier Detected (le modem recoit)
Ring Indicator (appel détecté)
FIG. 6.4.3 – Bornes du circuit UART 8250.
Les bornes de l’interface UART 8250 sont présentées sur la figure 6.4.3. Seules les bornes
essentielles à la compréhension du fonctionnement de l’interface sont représentées.
7.
Les périphériques
Nous étudions dans cette partie les périphériques d’entrées/sorties les plus couramment utilisés
: clavier, écran et gestion des modes graphiques, disques durs et autres mémoires secondaires.
Pour chaque type de périphérique, nous décrivons le principe de fonctionnement et mentionnons
les performances des modèles actuellement en vente.
Si les principes fondamentaux de fonctionnement restent les mêmes, il faut noter que les
performances (vitesse, capacité) de la plupart des périphériques informatiques évoluent très
rapidement; les chiffres donnés ici sont donc à prendre comme des ordres de grandeur typiques
du matériel utilisé à la fin des années 90.
7.1.
Terminaux interactifs
Les micro-ordinateurs possèdent tous, sauf exception, un clavier et un écran uniques. Ce n’est
pas le cas des ordinateurs plus gros, qui sont habituellement reliés à plusieurs terminaux
(quelques dizaines ou centaines). Un terminal interactif est un périphérique permettant à un
usager (humain) de communiquer avec un ordinateur. La communication se fait par
l’intermédiaire d’un écran (ou moniteur), d’un clavier et éventuellement d’une souris.
Le terme “interactif” indique que l’échange utilisateur/ordinateur à lieu en temps réel, de façon
interactive (l’ordinateur répond immédiatement aux commandes de l’utilisateur). Dans le passé,
on utilisait aussi des terminaux non interactif, par exemple à base de cartes perforées, et l’on
devait attendre plusieurs minutes (ou heures) avant de prendre connaissance des résultats d’une
commande par le bias d’une imprimante.
7.1.1. Claviers
Le clavier est le périphérique le plus commode pour saisir du texte.
La figure 7.1 représente le principe de fonctionnement d’un clavier. Chaque touche est un
interrupteur, normalement en position ouverte. Lorsque qu’une touche est appuyée, un signal
électrique est envoyée vers le codeur, circuit électronique très simple qui associe à chaque
signal un code (par exemple le code ASCII de la touche). Le code est associé à chaque touche
par le bias de connexions ouvertes ou fermées dans la matrice du codeur.
0
CODEUR
0
0
1
CLAVIER
Niveau
1
0
1
0
0
1
1
KeyDown
FIG. 7.1 – Principe de fonctionnement d’un clavier. La pression d’une touche fait passer à 1 le
signal KeyDown, et le code ASCII correspondant est présentée sur le bus de sortie du codeur.
Seules trois touches sont représentées.
Le codeur est relié à un bus d’entrées/sorties. Il génère aussi un signal KeyDown pour indiquer
qu’une touche est appuyée. Ce signal peut être utilisé pour envoyer une interruption au
processeur afin qu’il traite l’information.
Les codeurs réellement utilisés assurent des fonctionS supplémentaires, comme la répétition
automatique des touches appuyées longtemps, la gestion d’une mémoire tampon de quelques
dizaines de caractères, l’allumage de voyants, le verrouillage des majuscules, etc.
7.1.2. Ecrans et affichage
L’écran de l’ordinateur, aussi appelé moniteur, est le périphérique de sortie le plus répandu.
Suivant les cas, il est utilisé pour afficher du texte ou des graphiques.
Un écran est constitué d’un tube cathodique 10, dont le principe est le même que celui d’un tube
d’oscilloscope (voir figure 8.2).
Le faisceau d’électron agit comme un pinceau, controlé par le signal vidéo émis par le contrôleur
d’affichage de l’ordinateur. Chaque point de l’écran ne reste allumé qu’un
Pixel allumé
canon
à
électro
ns
Déflexio
n
vertical
e
Déflexio
n
Horizontal
e
ECRAN
TUBE
FIG. 7.2 – Tube cathodique : un faisceau d’électrons accélérés est défléchi verticalement puis
horizontalement par des champs électriques; l’impact de ces électrons sur l’écran, constitué
d’une fine couche de phosphore sur du verre, allume un petit point.
court instant; le pinceau doit donc “repeindre” en permanence l’écran, environ 50 fois par
seconde. Ce processus, appelé balayage, démarre du coin en haut à gauche de l’écran, et
descend ligne par ligne jusqu’à arriver en bas à droite. C’est le contrôleur d’affichage (“carte
graphique”) de l’ordinateur qui génère le signal de balayage11.
Le signal vidéo est donc défini par deux fréquences importantes : la fréquence de balayage
horizontal, qui mesure combien de fois par seconde le faisceau revient en début de ligne, et la
c’est pourquoi les écrans sont parfois nommés CRT, pour Cathodic Ray Tube, tube cathodique.
Remarque : il existe deux modes de balayage, dits entrelacé et non-entrelacé; nous ne décrivons que le mode nonentrelacé.
10
11
fréquence de balayage vertical, qui indique combien de fois par seconde le faisceau revient en
haut à gauche de l’écran.
Les écrans ont des caractéristiques variables :
– taille : comme pour les télévisions, on mesure la diagonale de l’écran, dont la longueur
est exprimée en pouces 12. Les écrans d’entrée de gamme mesurent 14 pouces; les
ordinateurs dits “multimédia” et les stations de travail utilisent des écran 17”, et les
graphistes des écrans 21”.
– finesse (ou pitch) : indique le nombre de points par unité de longueur de l’écran, qui est
donné par la finesse de la grille et la précision des faisceaux d’électrons. Plus la finesse
est grande, plus l’image est précise, et plus on pourra afficher de pixels.
– fréquence maximale de balayage : plus l’écran est rafraichi fréquemment, plus
1ere
ligne
FIG. 7.3 – Balayage des points de l’écran.
l’image va apparaitre stable. Une fréquence de rafraichissement de 50 Hz, utilisé sur les
écrans bas de gamme, donne une image avec des “battements” presque imperceptibles,
mais qui fatiguent les yeux de l’utilisateur et sont très gênant si l’on visualise des images
animées. Bien entendu, augmenter cette fréquence suppose d’utiliser une électronique
plus couteuse; les écrans haut de gamme arrivent à une fréquence de balayage verticale
de 120 Hz.
7.1.3. Mode alphanumérique et mode graphique
L’affichage sur écran peut s’effectuer en mode texte (alphanumérique), ou bien en mode
graphique.
12
un pouce (”, inch) mesure 2,54 centimètres.
Affichage en mode texte
Le mode texte est le plus simple, tant d’un point vue programmation que d’un point de vue
implémentation. Par contre, il donne des résultats très pauvres. Ce mode d’affichage était le
seul en usage jusqu’à une époque récente.
En mode texte, on affiche 24 lignes de 80 caractères. Chaque caractère est codé sur 8 bits, ce
qui permet d’afficher les caractères ASCII (7 bits), plus un certain nombre de caractères
spéciaux dont les codes ne sont pas normalisés (donc l’effet va varier d’un type d’ordinateur à
l’autre). Ces caractères spéciaux permettent d’afficher des pseudographiques (barres
horizontales, obliques, symboles divers).
1
0
FIG. 7.4 – Affichage des caractères en mode texte.
Le contrôleur graphique doit maintenir une mémoire de 24x80 octets, qui permet de générer le
signal vidéo. Chaque caractère est affiché sur un nombre fixe de lignes (une
dizaine), comme indiqué sur la figure 8.4. La mémoire vidéo est lue en séquence par le
contrôleur pour générer le signal de chaque ligne.
La gestion d’attribus comme la couleur, l’inversion vidéo, le clignotement peut se faire
en ajoutant des bits supplémentaires au codage des caractères en mémoire vidéo.
Affichage en mode graphique
L’affichage en mode graphique en apparu durant les années 70 sur certaines stations de
travail haut de gamme, mais ne s’est généralisé qu’avec l’apparition des ordinateurs
Apple Macintosh en 1983, puis du système Windows sur PC au début des années 90. Le
PC garde la trace de cette évolution, puisque le DOS fonctionne en mode texte, ainsi
que de nombreuses applications encore en usage en 1997 (par exemple Turbo C version
3).
Dans ce mode, les logiciels d’affichage ne manipulent plus des caractères mais des
pixels. Chaque pixel correspondant à un point sur l’écran, et est caractérisé par sa
couleur.
L’affichage est défini par le nombre de lignes, le nombre de colonnes, et le nombre de
couleurs différentes. Le nombre de lignes et colonnes varie de 640x480 (mode VGA sur
PC) à 1600x1200, voire d’avantage.
Le nombre de couleurs est lié au nombre de bits par pixels. En noir et blanc (2 couleurs),
1 bit par pixel suffit. Pour afficher simultanément 65536 couleur, il faut 16 bits par pixel.
Les modes les plus sophistiqués utilisent 32 bits par pixel, l’intensité trois couleurs
fondamentales (Rouge, Vert, Bleu) étant codée chacune sur 8 bits, les 8 bits restant
pouvant coder la transparence de la couleur.
Le passage du codage d’un pixel sur n bits au signal de couleur vidéo peut être effectué
de différentes manières. En 24 ou 32 bits/pixel, on travaille en “couleur directe” : chaque
valeur code une couleur unique (spécifiée par les composantes RVB). Par contre, en 8
ou 16 bits, on utilise une table associant à chaque valeur (entre 0 et 2n) une couleur RVB.
Cette table (nommée Look Up Table (LUT) ou palette) peut être changée en cours
d’utilisation; à chaque instant, on peut afficher 2n couleurs parmi 224.
Mémoire vidéo La taille de la mémoire vidéo est ici beaucoup plus importante qu’en
mode texte : le mode 1600x1200 en 256 couleurs demande environ 1.8 Mo, contre moins
de 2 Ko pour un affichage texte. De ce fait, le volume d’information échangé entre la
mémoire principale et le contrôleur graphique est très important, et l’on doit utiliser des
bus d’entrées/sortie très performants pour atteindre une vitesse d’affichage satisfaisante.
7.2.
Mémoires secondaires
Les mémoires secondaires (ou auciliaires) sont des périphériques permettant de stocker
et de retrouver de l’information de manière durable : l’information est conservée même
en l’absence d’alimentation électrique, contrairement à ce qui se passe pour la mémoire
principale (RAM).
Les mémoires secondaires ont généralement une capacité stockage plus importante que
les mémoires principales.
Parmi les mémoires secondaires les plus courantes, citons les disquettes et les disques
durs, basés sur un enregistrement magnétique, les CD-ROM, utilisant une lecture
optique, et divers types de bandes magnétiques.
7.2.1. L’enregistrement magnétique
Le principe de l’enregistrement magnétique est utilisé pour les cassettes audio et vidéo,
ainsi pour les disquettes et disques durs informatiques. Il consiste à polariser un milieu
magnétique (couche d’oxyde de fer déposée sur la bande ou le disque) à l’aide d’un
champ électromagnétique créé par une bobine.
FIG. 7.5 – Chaque cellule magnétique se comporte comme un aimant, et peut coder un
bit.
Un matériau magnétique (comme un aimant) possède la propriété intéressante de
conserver durablement sa polarisation (orientation des particules magnétiques). La
polarisation ne peut prendre que deux directions; chaque aimant peut donc être utilisé
pour stocker 1 bit d’information.
L’enregistrement consiste à exploiter l’information rémanente (durable) créée par une
tête de lecture/écriture. Cette tête comporte une bobine qui crée un champ magnétique
dont l’orientation dépend du sens de circulation du courant électrique qui la parcourt.
La surface du support (bande ou disque) est divisée en petits emplacements qui vont se
comporter individuellement comme des aimants (figure 8.5`). Chaque emplacement
code un bit. Pour lire l’information, on fait défiler le support sous la tête de lecture, qui
mesure l’orientation du champ magnétique (qui crée un courant induit dans une bobine),
de laquelle on déduit l’information stockée sur chaque emplacement.
Densité d’enregistrement magnétique
Le volume d’information (nb de bits) que l’on peut stocker sur une longueur donnée de
surface magnétique dépend de la densité longitudinale d’enregistrement, que l’on
mesure en BPI (bits per inchs, bits par pouces). Cette densité est limitée par le nombre
maximum de renversements d’orientation de la polarisation par unité de longueur, qui
dépend du type de couche magnétique, et par la taille de la tête de lecture.
Les densités typiques sont de l’ordre de 10 000 BPI. la distance entre la tête de
lecture/écriture et le support est alors de l’ordre de 0,2 µm, ce qui impose une très grande
propreté de la surface (voir figure 8.6).
Les disques durs, qui utilisent une densité d’enregistrement très élevée, sont scellés afin
éviter toute entrée de poussière.
CHEVEU
Tete de
lecture
Fumé
e
Empreint
digital
e
e
Couche
magnétique
Poussièr
e
SUPPORT
FIG. 7.6 – Les diverses particules de poussières sont très gènantes pour l’utilisation d’un
support magnétique : sont ici représentés à la même échelle la tête de lecture, une
particule de fumée, une trace d’empreinte digitale, une poussière et un cheveu.
7.2.2. Les disques durs
Les premiers disques durs ont été développés par IBM en 1957 et ont connu un grand
succès jusqu’à maintenant. Ils permettent en effet de stocker de grands volumes
d’information tout en conservant un temps d’accès assez faible, et un rapport
prix/capacité avantageux. Les micro-ordinateurs sont tous équipés de disques durs
depuis la fin des années 80.
La capacité d’un disque dur typique de coût 4000 francs est passé de de 20 Mo en 1988
à 3 Go en 1996, soit une multiplication par 150 en dix ans!
Principe d’un disque dur
Une unité de disque dur est en fait constituée de plusieurs disques, ou plateaux, empilés
et en rotation rapide autour du même axe (figure 8.7).
Chaque face d’un plateau est lue ou écrite par une tête de lecture. Afin de simplifier le
mécanisme, toutes les têtes se déplacent en même temps, radialement (seule la distance
tête-axe de rotation varie).
Les disques sont structurés en pistes et en secteurs, comme indiqué sur la figure 8.8.
Le nombre de pistes est fixé par la densité transversale (nombre de pistes par unité de
longueur radiale). Cette densité dépend essentiellement de la précision du
positionnement de la tête sur le disque.
Chaque piste ou secteur contient le même nombre d’octets (en fait, toutes les pistes n’ont
pas la même longueur, mais la densité est plus grande sur les pistes du centre, de façon
à obtenir le même volume d’information sur chaque piste). L’unité de lecture ou
d’écriture sur le disque est le secteur.
Le système complet est constitué d’une ensemble de disques empilés, comme représenté
sur la figure 8.7. Le contrôleur du disque doit être capable d’écrire ou de lire
FIG. 7.7 – Les plateaux d’un disque dur et les têtes de lectures (à droite), qui se déplacent
toutes en même temps.
1
secteu
Le disque dur est divisé en pistes
(ici 7 pistes)
Chaque piste est divisée en secteurs
(ici 8 secteurs par piste)
FIG. 7.8 – Division d’un plateau de disque dur en pistes et en secteurs.
n’importe quel secteur. Pour repérer un secteur, il faut connaitre son plateau, le numéro
de sa piste, et le numéro du secteur dans la piste. La plupart des systèmes introduisent
la notion de cylindre : un cylindre est formé par l’ensemble des pistes de même position
sur tous les plateaux.
Un secteur est alors repéré par (figure 7.9) :
– numéro de cylindre (donnant la distance tête-axe de rotation);
– numéro de piste (en fait le numéro de tête de lecture à utiliser);
– numéro du secteur (lié à l’angle).
Temps d’accès
Le temps d’accès pour lire ou écrire un secteur du disque dur dépend de la vitesse de
rotation du disque, de la vitesse de déplacement des têtes et de la dimension du disque.
Chaque transfert (lecture ou écriture d’un secteur) demande les opérations suivantes :
1. si les têtes ne sont pas déjà sur le bon cylindre, déplacement des têtes. On définit
le temps de positionnement minimum (passage d’un cylindre au cylindre voisin),
et le
5
4
5
6
3
0
1 2
3
45
4
6
tete de
lecture
3
tete de
lecture
tete de
lecture
2
1
2
7
1
0
tete de
lecture
0
Numéro de piste
Numeros de secteur
tete de
lecture
rotation
déplacement des tetes
VUE DE DESSUS
VUE DE PROFIL
FIG. 7.9 – Repérage d’un secteur du disque dur.
temps de positionnement moyen (passage à un cylindre quelconque, donc parcours
en moyenne de la moitié du rayon).
2. attendre que le début du secteur visé arrive sous la tête de lecture : en moyenne, il
faut que le disque tourne d’un demi-tour. Ce temps est appelé demi délai
rotationnel.
3. transfert des données, qui dure le temps nécessaire pour faire défiler le secteur
entier sous la tête de lecture.
Le débit d’information maximal est déterminé par la vitesse de rotation du disque, la
densité d’enregistrement longitudinale, et parfois limitée par le débit du bus
d’entrées/sorties reliant le disque à l’ordinateur.
Les fabriquants de disques durs indiquent en général le temps d’accès moyen et le taux
de transfert maximum (débit).
Cas des disquettes
Les lecteurs de disquettes fonctionnent sur les mêmes principes que les disques durs,
mais il n’y a que deux faces, la vitesse de rotation est beaucoup plus faible et la densité
d’écriture moindre.
Les disquettes actuelles ont une capacité de 1,4 Mo; il est probable qu’elles soient
remplacées dans les années à venir par des disques durs extractibles miniaturisés,
pouvant stocker plusieurs centaines de Mo.
7.2.3. Lecteurs de CD-ROM
Les CD-ROM (Compact Disc Read Only Memory), se sont imposés ces dernières années
comme des mémoires secondaires en lecture seule. Leur capacité est de 650 Mo (soit
l’équivalent de 450 disquettes). Le format de stockage est identique à celui utilisé pour
les disques audio.
Leur (relativement) grande capacité en fait le support idéal pour livrer les logiciels de
grande taille, mais aussi pour stocker des bases de données et programmes de toute
nature
(édition électronique,...).
La spécificité du CD-ROM est que l’on ne peut pas y modifier les informations, inscrites
en usine.
Un disque CD-ROM est constitué d’une piste en spirale qui est lue par un faisceau laser
de faible puissance. La piste est recouverte d’une fine couche de métal réfléchissant, sur
laquelle sont percés des trous. La lecture s’effectue en mesurant le reflet du faisceau
laser sur la piste, ce qui permet la détection des trous, donc la reconnaissance des bits 0
ou 1.
Le temps d’accès et le débit des lecteurs de CD-ROM sont essentiellement déterminés
par la vitesse de rotation du disque, qui est elle même limitée par la difficulté à guider
le laser sur la piste. ces informations sont souvent exprimées relativement à un lecteur
de première génération; on parle ainsi de lecteur “double-vitesse”, “quadruple-vitesse”,
voire “x12” ou “x24”.
7.2.4. Autres supports optiques : WORM, magnéto-optiques
Outre le CD-ROM, il existe plusieurs autres types de support optiques. Les disques
WORM (Write Once, Read Many, écrire une fois, lire plusieurs) utilisent un second laser
plus puissant qui permet de former des “trous” sur la surface réfléchissante; on peut ainsi
écrire de l’information une seule fois. Les disques WORM sont vendus vierges, sous
l’appellation CD-R (CD enregistrable).
Les disques magnéto-optiques sont basés sur une technologie différente. Les trous sont
remplacés par des différences de magnétisation d’un milieu spécial, ayant la propriété
de modifier la polarité de la lumière suivant le sens de magnétisation. On associe donc
un champ magnétique et un faisceau laser.
Ces disques sont ré-inscriptibles à volonté; ils ont été présentés à la fin des années 80
comme les successeurs des disques durs, mais leur faible vitesse d’accès en limite
actuellement l’usage aux applications d’archivage ou de sauvegarde.
7.2.5. Bandes magnétiques
Les bandes magnétiques peuvent aussi être utilisées comme mémoire secondaires. La
principale différence avec les disques est que l’accès à une bande est nécessairement
séquentiel : si un fichier est enregistré à la fin d’une bande, il faut la rembobiner
entièrement avant de d’y accéder. De ce fait, le temps d’accès moyen à un disque dur
est de l’ordre de 10 ms, tandis que le temps d’accès sur une bande est de quelques
secondes (100 à 1000 fois plus lent).
Les bandes sont cependant très utilisées car elle permettent un stockage à très faible coût
de très grandes quantité d’information (exemple : une cassette de 8mm contient 7 Go et
vaut environ 100 F).
Il existe un très grand nombre de standards différents pour les lecteurs de bandes, de
cartouches ou de cassettes. La capacité d’une bande est déterminée par sa longueur, son
nombre de pistes, et la densité d’écriture
Notons enfin que certains lecteurs de bandes effectue une compression automatique
des données avant écriture, ce qui permet de gagner un facteur 2 environ sur des
données non préalablement compressées.
7.3.
LE PROCESSEUR
Le processeur est un composant électronique que nous considérons comme
le cerveau ou cœur pensant de l’ordinateur car c’est lui qui exécute toutes les tâches
(instructions) demandées à la machine (ordinateur). Il a pour rôle d’exécuter les
programmes stockés en mémoire centrale en chargeant les instructions, en les décodant
et en les exécutants l’une après l’autre.
1. unités fonctionnelles
Le processeur est constitué d’un ensemble d’unités fonctionnelles reliées entre elles.
 Unité d’instruction ou unité de commande qui lit les données arrivant, les
décode puis les envoie à l’unité d’exécution.
Cette unité est constituée des éléments suivants :
-
Un Séquenceur (ou bloc logique de commande) chargé de
synchroniser l’exécution des commandes au rythme d’une horloge. Il
est ainsi chargé de l’envoi des signaux de commandes
-
Un Compteur ordinal contenant l’adresse de la prochaine instruction.
C’est un registre contenant l’adresse de l’instruction à rechercher et
pointe sur la prochaine à exécuter
-
Un Registre d’instruction contenant l’instruction à exécuter et
contient celle en cours d’exécution
-
Un décodeur qui détermine l’opération à effectuer parmi toutes celles
disponibles
-
Une horloge synchronise toutes les actions du processeur
 Unité d’exécution ou unité de traitement qui accomplit les tâches que lui
a données l’unité d’instruction. Cette unité est composée de :
-
L’unité arithmétique et logique qui assure les fonctions de calcul
arithmétique et des opérations logiques
-
L’unité de virgule flottante qui accomplit les calculs complexes non
entiers que ne peut réaliser l’unité arithmétique et logique
-
Le registre d’état (PSW : Processor Status Word) qui stocke des
indicateurs sur l’état du système
Le registre accumulateur qui stocke les résultats des opérations
arithmétiques et logiques
 Unité de gestion des bus ou unité d’entrée-sortie gère les flux
d’informations.
-
-
Chargement de la prochaine instruction à exécuter depuis la mémoire
jusque dans le registre d’instruction.
-
Modification du compteur ordinal pour qu'il pointe sur l'instruction
suivante.
-
Décodage de l'instruction que l'on vient de charger.
-
Localisation dans la mémoire des éventuelles données utilisées par
l'instruction.
-
Chargement des données dans les registres internes de l'unité centrale.
-
Exécution de l'instruction.
-
Stockage des résultats à leurs destinations respectives.
7.3.1. Paramétrage du processeur

Vérifiez si aucune patte n'est pliée, sinon, redressez là avec une petite pince
avant.

Insertion du processeur dans le socket en respectant les détrompeurs.

Appuyez à fond sur le processeur

En gardant le doigt sur le processeur, abaissez le levier de blocage du
processeur.

Utilisez la pâte thermique directement collée sur le ventilateur ou grattez cette
pâte sur le ventilateur (avec un tournevis plat, il ne doit plus en rester) et posez
de la pâte thermique sur le processeur.

Positionnez le ventilateur sur le processeur.

Insérez le connecteur d'alimentation du ventilateur dans le socket.
7.3.2. Caractéristiques du microprocesseur
Le microprocesseur des PC est composé de plusieurs unités qui travaillent en parallèle.
On appel pipeline la possibilité des unités indépendantes de travailler sur plusieurs
instructions en même temps. Dans un premier temps la première unité traite la
première instruction. Dans un deuxième temps la première unité traite la deuxième
instruction et la deuxième unité traite la première instruction. Dans un troisième temps,
la première unité traite la troisième instruction, la deuxième unité traite la deuxième
instruction et la troisième unité traite la première instruction...
Toutes ces unités ne sont pas présentes sur tous les processeurs. Nous verrons quelles
unités sont présentes sur chacun des processeurs les plus courants.
 L’unité d’anticipation
L’unité d’anticipation s’occupe d’aller chercher dans la mémoire les instructions à
exécuter.
Ces instructions sont d’abord recherchées dans la mémoire cache interne du
processeur. Si elle ne s’y trouve pas, l’unité d’anticipation s’adresse à l’unité
d’interface de bus afin qu’elles soient lues dans la mémoire centrale. Lors de cette
opération, le contenu des adresses suivantes de la mémoire est lu également et placé
dans la mémoire cache du processeur.
De cette façon, les prochaines instructions recherchées seront disponibles plus
rapidement.
L’unité d’anticipation place l’instruction dans une queue et s’occupe d’aller chercher
la suivante. Grâce à ce dispositif, l’unité d’exécution n’a pratiquement jamais besoin
d’attendre que les instructions à exécuter lui soient amenées.
 L’unité de décodage
L’unité de décodage traduit les instructions se trouvant dans la queue en une forme
compréhensible par l’unité d’exécution.
 L’unité de contrôle et de test de protection
L’unité de contrôle et de test de protection supervise l’exécution des instructions.
Elle vérifie en particulier que les accès en mémoire sont valides et ne risque pas de
provoquer des conflits.
 L’unité de virgule flottante
L’unité de virgule flottante exécute les calculs qui relèvent de sa spécialité. S’il est
absent, les calculs en virgule flottante sont exécutés sous forme de sous programmes,
ce qui peut prendre cent fois plus de temps.
 L’unité arithmétique et logique
L’unité arithmétique et logique exécute les instructions, à l'exception de celles prisent
en charge par l’unité de calcul en virgule flottante.
 Registres
Les registres sont des espaces de travail directement accessible par l’unité
arithmétique et logique, ils constituent la mémoire la plus rapide de l’ordinateur. Il y a
deux sortes de registre ceux qui sont accessibles par un programmeur en assembleur
et les registres internes qui ne sont pas accessibles.
 Les unités de pagination et de segmentation
Les unités de pagination et de segmentation traduisent les adresses logiques (lettes
qu’elles sont manipulées par les programmes) en adresses physiques (correspondant
aux positions réelles en mémoire).
 Mémoire cache
La mémoire cache retient deux types d’éléments : les données et les programmes.
Certains processeurs ont des caches internes indépendants pour les données et les
programmes. Le contrôleur de mémoire cache doit prédire à l’aide d’algorithmes
sophistiqués les données et les instructions qui seront nécessaires afin qu’elles soient
placées dans la mémoire cache pour être plus rapidement accessibles.
 Mémoire cache ou antémémoire
La mémoire Cache conçue sous la technologie RAM n’est qu’une catégorie
technique car elle ne sert que de tampon entre la mémoire centrale et le
microprocesseur ou mieux entre le processeur et sa périphérie.
-
cache primaire (L1) ou cache de niveau 1 : Interne au processeur, il est le
plus rapide. C’est une mémoire intégrée directement dans le processeur et
stocke séparément les programmes des données utilisées.
-
Cache secondaire (L2) ou cache de niveau 2 : interne ou externe au
processeur dépendant du type du processeur et de la carte en présence. cette
mémoire sert d’intermédiaire entre la mémoire cache de niveau 1 et la RAM.
-
Cache tertiaire (L3) ou cache de niveau 3 : externe au processeur et atteint
déjà 2 Mo à 8 Mo de capacité avec pentium IV. Elle est constituée de la SRAM
implantée directement sur la carte mère.
 Multiplicateur de fréquence
Le multiplicateur de fréquence permet à certains processeurs de fonctionner
à une fréquence interne différente de la fréquence externe.
 L’unité d’interface de bus
L’unité d’interface de bus gère tous les échanges entre le microprocesseur et les autres
composants, reliés par l’intermédiaire du bus.
 L’unité de prédiction de branchement
L’unité de prédiction de branchement permet de traiter une instruction
conditionnelle, c’est-à-dire le choix d’une d’instructions en fonction d’un test logique,
il mémorise le choix effectué. S’il doit repasser par ce test ultérieurement, il emprunte
le même chemin, quitte à revenir sur ses pas (en abandonnant le travail effectuer entre
temps) si le résultat n’est pas celui qu’il supposait. Ainsi, les unités, servants à la
préparation des instructions avant l’exécution ne se vident pas en attendant le résultat
du test (résultat qui est souvent identique entre deux passages successifs, par exemple
lors de l’exécution d’une boucle).
 Temps d’accès
Le temps d’accès est le temps qui s’écoule entre la demande d’information et le début
de la réception de celle-ci. Un petit temps d’accès améliore la performance d’une
mémoire. Les unités utilisées pour le temps d’accès sont le milli-seconde (ms), le micro
seconde (ms) et le nano-seconde (ns).
1 ms = 10-3 s = 0,001 s = 10-6 s = 0,000001 s
1 ns = 10-3 ms = 10-6 ms = 10-9 s = 0,00000001 s
 Vitesse de transfère
La vitesse de transfert est la quantité d’information qui peut être transféré par la
mémoire dans une seconde. Elle s’exprime généralement en Kilo-octets par seconde
(KB/s), Megaoctets par secondes (MB/s), kilobits par secondes (Kb/s) et mégabits par
secondes (Mb/s). Remarquez que le symbole pour octets est ‘B’ et que le symbole pour
bit est ‘b’.
On distingue généralement deux types de mémoire : la mémoire centrale (mémoire
principale ou mémoire réelle) et la mémoire secondaire (mémoire auxiliaire, mémoire
de masse).
 Calcul du temps d’accès effectif d’une mémoire avec cache. Ae = T * Ac +
(1 - T) * Am
-
Ae : Temps d’accès efficace de la mémoire avec cache
-
T : Probabilité de trouver l’information dans la mémoire cache
-
Ac : Temps d’accès de la mémoire cache
-
Am : Temps d’accès de la mémoire centrale
Exercice : Quel va être le temps d’accès efficace d’une mémoire avec cache si le temps
d’accès à la mémoire cache est de 15 ns et le temps d’accès à la mémoire
centrale est de 60 ns et la probabilité de trouver l’information dans la
mémoire cache est de 95%.
Ac = 15 ns
Am = 60 ns
T = 95%
Ae = 0,95 * 15 ns + 0,05 * 60 ns
Ae = 14,25 ns + 3 ns
Ae = 17,25 ns
Pour aller plus loin : Calcul de la probabilité de trouver l’information dans la
mémoire cache.
T: Probabilité de trouver l’information dans la mémoire cache
Mm: Nombre de bits effectifs du bus d’adresse de la mémoire principale Mc :
Nombre de bits effectifs du bus d’adresse de la mémoire cache.
Exercice : Quelle est la probabilité de trouver l’information dans la mémoire cache si
celle-ci a 256 KB et que la mémoire centrale est de 32 MB ?
 Fréquence
La fréquence d’horloge appelée également cycle correspond au nombre d’impulsions
par seconde. Un ordinateur à 1 Ghz possède une horloge envoyant 1000000000 de
battements par seconde.
Cycle de base = 1 / Fréquence interne
Si nous avons un processeur de 50 MHz son cycle de base est de 20 ns. Cycle de base
= 1 / (50 * 106 ) s
Cycle de base = (1/5) * 10-7 s
Cycle de base = 20 * 10-9 s = 20 ns
Voici quelques fréquences des microprocesseurs :
A chaque impulsion (top), le processeur exécute une action sous une puissance
caractérisant le nombre d’instructions traitées par seconde et s’exprime en MIPS
(Millions
d’Instructions
Par
Seconde)
correspondant
à
la
fréquence
du
microprocesseur que divise le CPI. L’indicateur CPI (Cycle Par Seconde) permet de
représenter le nombre moyen de cycles d’horloge nécessaire à l’exécution d’une
instruction sur le microprocesseur.
V.E= Fréquence / CPI en MIPS
8.
Architecture de microprocesseur
La plupart des processeurs utilisent l’une de deux architectures ci-dessous ou les deux
par émulation. Ces architectures sont actuellement améliorées par les différentes
technologies.
 CISC (Complex Instruction Set Computer ou ordinateur à jeu d’instruction
complexe) consiste à câbler dans le processeur des instructions complexes,
difficiles à créer à partir des instructions de base.
Cette architecture est utilisée par les processeurs de type 80X86 (80286,
80386, 80486). Ce type d’architecture possède un coût élevé dû aux
fonctions évoluées imprimées sur le silicium.

RISC (Reduced Instruction Set Computer ou Ordinateur à jeu d’instructions
réduit) n’a pas de fonctions évoluées câblées. Les programmes doivent être traduites en
instructions simples, ce qui entraîne un développement plus difficile et /ou un
compilateur plus puissant. Une telle architecture possède un coût de fabrication réduit
par rapport aux processeurs CISC. De plus, les instructions sont exécutées en un seul
cycle d’horloge ce qui rend l’exécution des programmes plus rapide
CHAPITRE 6 : LES MEMOIRES
6.1
Généralités
Une mémoire est un dispositif permettant d’enregistrer, de conserver et de restituer
de l’information.
Voici les unités utilisées pour designer des quantités de mémoire. On parle en fait de
quantité adressable dans le sens ou` généralement on ne peut accéder `à l’information
bit par bit : on lit ou on ´écrit en mémoire un groupe de bits. Historiquement, ce groupe
est de taille 8 et on parle d’un octet. Maintenant, on parle de mot mémoire et ces mots
sont de taille 16, 32 ou 64 bits.
La taille de ces mots est `à distinguer de celle des mots traites par le processeur (16
bits, 32 bits, 64 bits). La taille de ces deux types de mots n´étant pas nécessairement (ou
théoriquement) liée.
 unité de base : 1 bit (0 ou 1)
 octet (byte) = groupe de 8 bits
 mot = regroupement d’octets (8 bits, 16 bits, 32 bits, ...) ⇒ unité
d’information adressable en mémoire.
 un Kilooctet = 210 octets = 1024 octets = 1 Ko
 un Megaoctet = 210 Ko = 1 Mo
 un GigaOctet = 210 Mo = 1 Go
 un TeraOctet = 210 Go = 1 To
La notion de mémoire pour un ordinateur regroupe différents matériels et ne
correspond pas qu’`a un seul dispositif permettant de stocker de l’information.
Ces dispositifs peuvent être de différentes natures, de différentes technologies, ceci
leur donnant des caractéristiques différentes.
— différentes technologies :
 Electronique
 Magnétique
 Optique
— différentes caractéristiques :




6.1.1
capacité
temps d’accès
débit
volatilité
Performances d’une mémoire
Voici quelques-unes des grandeurs caractérisant les mémoires. Le temps d’accès est
ce qui mesure la latence entre l’ordre donne à la mémoire (écriture/lecture) et
l’exécution effective de cette ordre.
 temps d’accès : temps qui sépare une demande de
lecture/´écriture et sa réalisation ta
 temps de cycle : temps minimum entre deux accès à la
mémoire tc On a ta < tc (stabilisation des signaux,
synchronisation, ...)
 débit (ou bande passante) : nombre de bits maximum
transmis par seconde
En cas d’accès en temps uniforme aux données
n est le nombre de bits transférés par cycle
Le temps de cycle est le temps minimum séparant la réalisation de deux opérations
successives.
6.1.2
Types de mémoires
Pour des raisons technologiques (l’augmentation de la taille d’une mémoire
s’accompagne toujours de l’augmentation du temps d’accès) et des raisons
´économiques (plus vite = plus cher), on utilise différents types de mémoires. La vitesse
d’une mémoire (temps d’accès et débit) est inversement proportionnelle à sa taille
“usuelle”. On a le schéma suivant :
vitesse
−
+
Registres
Cache
Mémoire centrale
Disques durs
−
Bandes-Disques optiques
+
Capacité
registres
vitesse
(temps
d’accès)
< 1 ns
cache
2 - 5 ns
mémoire
centrale
disque
dur
6.1.3
vitesse
(débit)
capacité
> 50
Go/s
5 - 20
Go/s
< 100
octets
100 Ko
- 1 Mo
20 ns
1 Go/s
1-10 ms
300
Mo/s
256 Mo
- 4 Go
50 Go 500 Go
Localisations
Voici la disposition des différentes mémoires dans un ordinateur.
Les registres, qui constituent la “mémoire de travail” du processeur, se trouvent en
son sein.
La mémoire cache (copie rapide de la m´mémoire centrale) est souvent décomposée
en plusieurs parties, l’une collée sur le processeur et l’autre toute proche mais sur la
carte mère. Toujours sur la carte mère, la mémoire centrale (appelée mémoire vive ou
RAM) qui stocke données et programmes.
Finalement, hors de la carte mère, la mémoire de masse (appelée mémoire morte ou
ROM) stockant les informations, généralement sous forme de fichiers.
mém
oire
de
mass
e
Processeur
cac
he
Carte mère
92
6.1.4
Méthodes d’accès
La méthode d’accès décrit comment accéder à une information en connaissant
sa position.
L’accès direct est similaire à l’accès à une case d’un tableau, on accède
directement à n’importe quelle case directement par son indice.
L’accès séquentiel est similaire à l’accès d’une information dans une liste
chainée, il faut parcourir toutes les cellules précédant l’information d’intérêt.
— Accès séquentiel
 pour accéder à une information, il faut parcourir toutes les
informations qui la précède
 exemple : bandes magnétiques
— Accès direct
 chaque information possède une adresse propre, à laquelle on peut
accéder directement
 exemple : mémoire centrale de l’ordinateur
— Accès semi-séquentiel




intermédiaire entre séquentiel et direct
exemple : disque dur
accès direct au cylindre
accès séquentiel au secteur sur un cylindre
— Accès associatif
 une information est identifiée par sa clé
 on accède `à une information via sa clé
 exemple : mémoire cache
6.2
Types de mémoire
Sur la carte mère cohabitent
— Mémoires persistantes (mémoires mortes - ROM)
 leur contenu est fixé (ou presque)
 et conservé en permanence même hors alimentation électrique
— Mémoires volatiles (mémoires vives - RAM)
— leur contenu est modifiable
93
— et perdu hors alimentation électrique
ROM = Read Only Memory
6.2.1
RAM = Random Access Memory
Mémoires mortes (ROM)
Les différents types de ROM
 ROM (Read Only Memory) : information stockée au moment de la
conception du circuit.
 PROM (Programmable Read Only Memory) : mémoire
programmable par un utilisateur final mais une seule fois
 EPROM (Erasable Programmable Read Only Memory) : mémoire
(re)programmable et effaçable par ultraviolet.
 EEPROM (Electrically Erasable Programmable Read Only Memory)
: mémoire (re)programmable et effaçable ´électriquement.
— exemple : Bios (“flashable”)
- lecteur MP3
6.2.2 Mémoires volatiles (RAM)
On a deux grands types de RAM
DRAM : Dynamic RAM Mémoire ´électronique `à réalisation très simple : 1
bit = 1 transistor + 1 condensateur, le condensateur stocke l’information. Le
problème est que les condensateurs ont le d´défaut de se d´décharger (perdre
lentement sa charge) et ils doivent ˆêtre rechargés fréquemment
(rafraichissement). Durant ces temps de rechargement, la m´mémoire ne peut ˆêtre
ni lue, ni ´écrite, ralentissant donc son fonctionnement (d’où` le terme de
Dynamique). C’est une m´mémoire volatile car sans alimentation, les données
sont perdues. Peu couteuse elle est principalement utilisée pour la m´mémoire
centrale de l’ordinateur.
SRAM : Static RAM Les SRAM n’ont pas besoin de rafraichissement car un
bit est stocké par une bascule : 1 bit = 4 transistors = 2 portes NOR. Elle est donc
´également volatile. Elle est plus couteuse qu’une DRAM et est notamment
utilisée pour les m´mémoires caches du processeur Ceci correspond `à la notion
94
de bascule utilisée pour stocker une information. — Statique : l’information n’a
pas besoin d’être rafraichie — réalisation :
—
— Bascule RS (ou D) qui stocke l’information beaucoup plus rapide que
la DRAM
beaucoup plus cher que la DRAM
6.3 Registres
Le processeur traite des informations; les registres sont utilisés pour stoker
l’information qui va être traitées ou qui vient d’être traitées. Ils stockent les
informations relatives `à une instruction : les opérandes n´nécessaires `à
l’instruction, les résultats produits par l’instruction.
Les registres sont au cœur du processeur, on peut donc en mettre peu (¡ 20). Ils
doivent ˆêtre très rapide (cadencés `à la vitesse du processeur). Ce sont en fait les
mémoires les plus rapides et les plus chères.
Réalisation :
— registre 1-bit = 1 bascule RS (ou D)
— registre n-bits = n bascules RS (ou D) en parallèle
6.4
Bancs de registres
6.4.2Bancs de registres
Un banc de registres de hauteur n et de largeur k est
— un ensemble de n registres de k bits
— une m´mémoire de n adresses Exemple :
95
Un banc de n registres de 3 bits avec
— un port d’´écriture
— deux ports de lecture (lors d’une lecture le contenu de deux registres est lu
même temps.)
Sur ce banc de registres, on note les 2 (bus de) sorties, qui vont permettre de
lire en même temps deux contenus de registres qui vont ˆêtre stockés dans les deux
registres A et B d’entrées de l’ALU. L’ALU réalise alors l’opération (ici une
somme) et le résultat est place dans le registre de sortie de l’ALU. Finalement, le
contenu de ce registre de sortie d’ALU est placé sur l’entrée du banc de registre
pour ˆêtre lu par ce dernier.
Ici, on voit que les entrées et les sorties sont représentées par des flèches
´épaisses : il s’agit de bus, plusieurs fils en parallèle regroupant plusieurs bits
d’information traités en parallèle.
CHAPITRE 7 : ASSEMBLEUR
7.1
Langage d’assemblage
Un langage d’assemblage ou langage assembleur est un langage de bas niveau qui
représente le langage machine sous une forme lisible par un humain. Les combinaisons
de bits du langage machine sont représentées par des symboles dits ” mnémoniques ” ,
c’est-`a-dire faciles à retenir.
Le programme assembleur convertit ces mnémoniques en langage machine en vue
de créer par exemple un fichier exécutable. Le langage machine est le seul langage
qu’un processeur puisse exécuter. Chaque famille de processeur utilise un jeu
d’instructions différent. Ainsi le langage assembleur, représentation exacte du langage
machine, est spécifique `à chaque architecture de processeur.
Le langage machine est le langage directement interprétable par le processeur. Il est
défini par un ensemble d’instructions que le processeur exécute directement.
Chaque instruction correspond `à un nombre (codé selon le cas sur un octet, un mot
de 16 bits,... : le format de l’instruction) et ce décompose en :
 une partie codant l’opération `a exécuter appelée opcode ou code opération
 une partie pour les opérandes
Code op
Opérandes
Un programme en langage machine est une suite de mots codant opérations et
opérandes Chaque processeur possède son propre langage machine.
D’un point de vue de la programmation, le processeur offre :
 un certain jeu d’instructions qu’il sait exécuter.
 un certain nombre de registres :
utilisables/modifiables directement par le programme : registres de
travail - pointeur de segment
Il s’agit de registres vus par le jeu d’instructions
modifiables indirectement par le programme : compteur ordinal pointeur de pile registre d’instruction - registre d’´états ces registres sont
manipulés implicitement par le jeu d’instructions
 un certain nombre de manière d’accéder `à la mémoire : modes d’adressage
7.1.1
Jeu d’instructions
Le jeu d’instructions est l’ensemble des opérations ´élémentaires qu’un processeur
peut accomplir. Le type de jeu d’instructions d’un processeur d´détermine son
architecture. On distingue deux types d’architectures
 RISC (Reduced Instruction Set Computer) PowerPC, MIPS, Sparc
 CISC (Complex Instruction Set Computer) Pentium 87
Leurs caractéristiques sont les suivantes :
 RISC :




jeu d’instructions de taille limitée
instructions simples
format des instructions petit et fixé
modes d’adressage réduits
 CISC :
 jeu d’instructions de taille importante
 instructions pouvant ˆêtre complexes
 format d’instructions variables (de 1 `a 5 mots) — modes
d’adressages complexes.
Ces deux types ont leurs avantages et leurs inconvénients :
1.
CISC
 Programmation de plus haut niveau
 Programmation plus compacte (´écriture plus rapide et plus ´élégante des
applications)
 Moins d’occupation en mémoire et `à l’exécution complexifie
le
processeur taille des instructions ´élevée et variable : pas de structure fixe
exécution des instructions : complexe et peu performante.
2. RISC
 Instructions de format standard
 Traitement plus efficace
 Possibilité de pipeline plus efficace programmes plus volumineux
compilation plus compliquée
Modes d’adressage
7.1.2
Les instructions du langage machine manipulent des données. Selon ou` ces données
se trouvent, on parle de différents modes d’adressage.
Code op
Opérandes
Comment interpréter Opérandes pour trouver les données de l’instruction Code op?
adressage implicite : l’instruction opère sur une donnée qui se trouve `à
un emplacement précis et d´exterminé du processeur (par exemple
l’accumulateur). Dans ce cas, il n’est pas n´nécessaire de spécifier l’adresse du
registre en question.
adressage par registres : Opérandes contient le(s) numéro(s) du (des)
registre(s) ou` se trouvent les données manipulées par l’instruction.
adressage direct (ou direct restreint) : Opérandes est l’adresse (ou un
fragment de l’adresse) ou` se trouve la donnée en m´mémoire.
-
adressage relatif : Opérandes contient un d´déplacement relatif par
rapport `à une adresse qui se trouve dans un registre précis (par exemple, le
compteur ordinal PC).
adressage indirect : Opérandes contient le numéro d’un registre dont le
contenu est l’adresse ou` se trouve la donnée en m´mémoire.
adressage (indirect) indexé : Opérandes contient le numéro d’un registre
contenant une adresse a. La donnée est en m´mémoire `à l’adresse a+i, ou` i
est le contenu d’un autre registre dans Opérandes ou d’un registre spécifique,
appelle registre d’index
adressage immédiat : Opérandes est la valeur utilisée par l’instruction
-
7.1.3
Cycle d’exécution d’une instruction
Voici les différentes ´étapes de l’exécution d’une instruction.
1. Récupérer (en mémoire) l’instruction `à exécuter : RI ← Mémoire [PC]
L’instruction à exécuter est présente en mémoire `à l’adresse contenue dans le
compteur de programme PC et est placée dans le registre d’instruction RI.
99
2. Le compteur de programme est incrémenté : PC ← PC + 4
Par d´défaut, la prochaine instruction `à exécuter sera la suivante en
m´mémoire (sauf si l’instruction est un saut). Pour cet exemple nous avons
choisi PC + 4, on suppose donc que les instructions sont codées sur 4 octets.
3.
L’instruction est décodée : On identifie les opérations qui vont devoir ˆêtre
réalisées pour exécuter l’instruction
4.
L’instruction est exécutée : elle peut modifier les registres (opérations
arithmétiques lecture en m´mémoire), la m´mémoire (´écriture), le registre
PC (instructions de saut)
7.2
Assembleur MIPS
Nous allons travailler avec le langage assembleur MIPS, qui est l’assembleur
du processeur MIPS R2000 (processeur de type RISC)
Ces processeurs sont utilisés par exemple par NEC, SGI, Sony PSP, PS2. Le
langage assembleur MIPS est proche des autres assembleurs RISC.
7.2.1
Processeur MIPS
Processeur 32 bits constitué de
 32 registres de 32 bits
 une mémoire vive adressable de 232 octets
 un compteur de programmes PC (Program Conter) sur 32 bits
 un registre d’instruction RI sur 32 bits
Le programme est stocké en mémoire, l’adresse de l’instruction en cours
d’exécution est stockée dans le registre PC et l’instruction en cours d’exécution
est stockée dans le registre RI
NB : une instruction est donc codée sur 32 bits.
7.2.2
Mémoire
Mémoire de 232 octets = 230 mots de 32 bits. Les mots mémoires sont donc
adresses par des adresses qui sont des multiples de 4.
100
 bus d’adresses de 32 bits
 bus de données de 8 bits
7.2.3
Registres MIPS
Le processeur MIPS contient 32 registres. Hormis le registre $0, appelé $zero,
qui contient toujours la valeur 0, même après une ´écriture, les autres registres sont
interchangeables, mais pour garantir l’interopérabilité entre pro- grammes
assembleurs produits par des compilateurs différents, on a fixé des conventions
d’usage qui sont d´détaillées comme suit.
 Les registres $a0...$a3 sont utilisés pour passer les premiers 4
paramètres d’une fonction lors d’un appel.
 Les registres $v0 et $v1 sont utilisés pour le renvoi de résultats.
 Lors de l’appel de programme, les registres $s0-$s7 sont considérés
comme sauvegardes par le programme appelant et les registres $t0-$t9
comme non sauvegardés.
 Les pointeurs $sp, $fp contiennent les pointeurs vers la pile, et $gp des
pointeurs vers les données.
 Les registres $k0-$k1 sont réservés par le noyau et $at par l’assembleur.
 Enfin, le registre $ra contient l’adresse de retour après l’appel `à une
fonction. Voici le récapitulatif du nom des registres, de leur code et de
leur description.
101
7.2.4 Instructions MIPS
Nous donnons ici quelques exemples d’instructions. Vous pouvez vous référer
`à la documentation MIPS pour avoir l’ensemble des instructions.
7.2.4.1Arithmétique
Code C
Assembleur
A=B+C
add $s0, $s1, $s2
Toutes les opérandes se trouvent dans des registres.
Ici, A→$s0, B→$s1, C→$s2.
Pour les instructions arithmétiques, le résultat est toujours placé dans la
première opérande.
Code C
A=B+C+D
E=F-A
Assembleur
add $t0, $s1, $s2
add $s0, $t0, $s3
sub $s4, $s5, $s0
Ici, A→$s0, B→$s1, C→$s2, D→$s3, E→$s4, F→$s5.
Le jeu d’instruction MIPS contient toutes les opérations arithmétiques et
booléennes de base.
7.2.5Pseudo-instruction move
Comment traduire A=B?
Sachant que A→$s0, B→$s1 et que le registre $0 vaut toujours 0 on peut
´écrire : add $s0, $0, $s1
Il vaut mieux utiliser l’instruction move :
Code C
Assembleur
A=B
move $s0, $s1
Move est une pseudo-instruction : sa traduction en langage machine est celle
de add $s0, $0, $s1.
7.2.6Pseudo-instruction li
li r, imm (load immediate) charge la valeur imm (sur 32 bits) dans le registre r.
102
7.2.7
Lecture-Ecriture dans la mémoire principale
Les deux instructions lw (load word = lecture) et sw (store word = ´écriture)
permettent les ´échanges entre la mémoire centrale et les registres.
Syntaxe lw $2, 10($3) copie dans le registre $2 la valeur située dans la
mémoire principale `à l’adresse m obtenue en ajoutant 10 au nombre stocké
dans la registre $3.
sw $2, 15($1) copie la valeur présente dans le registre $2 dans dans la mémoire
principale à l’adresse m obtenue en ajoutant 15 au nombre stocké dans le
registre $1.
7.2.8
Branchements conditionnels
Syntaxe
bne $t0, $t1, Label
Si la valeur contenue dans le registre $t0 n’est pas ´égale `à celle stockée dans
le registre $1 alors la prochaine instruction `à exécuter est celle placée après
l’´étiquette Label beq $t0, $t1, Label
Si la valeur contenue dans le registre $t0 est ´égale `à celle stockée dans le
registre $1 alors la prochaine instruction `a exécuter est celle placée après
l’´étiquette Label
103
Ici, i→$s0, j→$s1, h→$s2.
7.2.9
Branchements inconditionnels
Syntaxe
j Label
La prochaine instruction à exécuter est celle placée après l’´étiquette Label :
PC ← Label.
jr registre
La prochaine instruction `a exécuter est celle `à l’adresse se trouvant dans le
registre registre : PC ← registre.
jal Label
La prochaine instruction `a exécuter est celle placée après l’´étiquette Label et
l’adresse de l’instruction suivant l’instruction courante (adresse de retour est
stockée dans $ra : $ra ← PC +4, PC ← Label.
En utilisant ces instructions, on peut effectuer des branchements plus
complexes que le if ...then.
Voici par exemple comment programmer un if ... then ... else.
104
Ici, i→$s4, j7→$s5, h→$s6.
On peut ´également programmer des boucles. Voici l’exemple d’une boucle
while.
li registre, valeur charge la valeur valeur dans le registre registre
7.2.10Appel de sous-programmes
L’instruction jal SP permet d’exécuter le sous-programme de label SP, la
sauvegarde de l’adresse de retour ´étant réalisée par cette instruction (dans le
registre $31 ou $ra).
105
Cependant :
-
Le sous-programme peut affecter les valeurs contenues dans les
registres au moment de l’appel : pas de notion de variables locales et de
portée/masquage de variables.
-
La sauvegarde de l’adresse de retour dans un registre ne permet pas
l’enchainement des appels `a des sous-programmes, encore moins des
sous-programmes récursifs Solution :
-
Sauvegarder la valeur des registres (en m´mémoire) de l’appelant
et restaurer ces valeurs `à l’issue de l’appel
-
Sauvegarder l’adresses de retour du programme appelant en
mémoire On sauvegarde les (une partie des) registres en mémoire dans
une pile.
Les registres $a0-$a3 sont ceux qui ne sont pas sauvegardés car ils contiennent
lors de l’appel la valeur des paramètres effectifs et au retour les valeurs retournés
par le sous-programme.
Appel de sous-programmes : pile Une pile est une ´mémoire qui se manipule
via deux opérations :
-
push : empiler un ´élément (le contenu d’un registre) au sommet de
la pile
-
pop : dépiler un ´élément (et le récupérer dans un registre)
Ces deux instructions n’existent pas en assembleur MIPS, mais elles peuvent
ˆêtre “simulées”
-
en utilisant les instructions sw et lw
-
en stockant l’adresse du sommet de pile dans le registre $sp (le
pointeur de pile) Traditionnellement, la pile croît vers les adresses les
moins ´élevées.
106
Appel de sous-programmes : politique de gestion de la pile
Deux politiques de sauvegarde des registres :
sauvegarde par l’appelant : le programme appelant sauvegarde
tous les registres sur la pile (avant l’appel).
-
sauvegarde par l’appelé : le programme appelant suppose que tous
les registres seront préservés par le sous-programme appelé.
Quel que soit la politique utilisée, Un sous-programme doit rendre la pile
intacte
7.2.11
Appel de sous-programmes : exemple
On a deux sous-programmes B et C, le programme B appelle le programme C.
Avant d’appeler C on souhaite sauvegarder les valeurs des registres $s0, $s1, et
l’emplacement ou` se fera le retour de B dans le programme principal, stocké dans
le registre $ra. Initialement, le sommet de la pile est pointe par $sp. On sauvegarde
d’abord $s0 `a cet emplacement de la pile, puis $s1 `à l’emplacement suivant
(donne par $sp-4) et enfin $ra est stocké en $sp-8. Avant d’appeler C, on place
correctement le pointeur $sp pour qu’il puisse ˆêtre utilisé par C, on le place au
prochain emplacement libre (soit $sp-12). On appelle ensuite le sous-programme
C (instruction jal C). Après exécution de C, le pointeur $sp est identique `a avant
l’appel (sinon le programme est incorrect). On restaure donc facilement les
paramètres sauvegardés dans la pile en chargeant les valeurs contenues dans $sp+4
pour $ra, $sp+8 pour $s1, et $sp+12 pour $s0. Enfin, avant de terminer B, on remet
le pointeur $sp `a sa position initiale $sp+12.
Voici un fragment du sous-programme B :
107
Le schéma suivant représente la pile au début de B, puis au début de C et enfin
à la fin de B.
7.3
De l’assembleur à l’exécution
7.3.1Format d’instructions MIPS
Rappel : les instructions du langage machine MIPS sont codées sur 32 bits
6 bits
Code op
6
2 = 64 operateurs possibles
26 bits
Opérandes
108
Trois formats d’instructions :
 Instructions de type immédiat (Format I) utilisé pour les instructions
spécifiant un opérande immédiat, les transferts m´mémoire, les
branchements conditionnels
 Instructions de type saut (Format J) utilisé pour les sauts
inconditionnels
 Instructions de type registre (Format R) utilisé pour coder les
instructions `a trois registres (comme les opérations arithmétiques par
exemple)
Cours de structure des Ordinateurs
Les 6 bits du Code op déterminent le format de l’instruction.
7.3.1.1 Format d’instructions I
 rs : registre source
 rt : registre cible / condition de branchement
 immédiat/adresse : opérande immédiate ou déplacement d’adresse
 lui r, imm (load upper immédiate) utilise les 16 bits de imm pour initialiser les 16 bits
de poids fort du registre r, les 16 bits de poids faible ´étant mis `a 0.
7.3.1.2 Format d’instructions J
Codage des adresses
Les adresses dans les instructions ne sont pas sur 32 bits!
-
Pour les instructions de type I : 16 bits
=⇒ Adresse = PC + signé (16 bits) * 4
adressage relatif
- Pour les instructions de type J : 26 bits
=⇒ On obtient l’adresse d’un mot m´mémoire (de 32 bits) en ajoutant devant les 26 bits les
4 bits de poids fort de PC (Il faut multiplier par 4 pour l’adresse d’un octet)
7.3.1.3 Format d’instructions R
 rs : registre source 1
 rt : registre source 2
 rd : registre destination
Ass MUSENG Kayij Elie Ingénieur En Système D’information
Cours de structure des Ordinateurs
 sa : nombre de décalage à effectuer (shift amount)
 fu : identificateur de la fonction
 sub $1,$2,$3 : soustrait $3 de $2 et place le résultat dans $1.
 slt $1,$2,$3 (set less than) : met $1 à 1 si $2 est inférieur à $3 et `a 0 sinon.
7.3.2
Exemple
Avec i → $19, j→ $20, k→ $21 et $10 est initialise à 4.
Programme chargé à l’adresse 80000 et Tstart vaut 1000
Car
—
— 20000 ∗ 4 = 80000
Ass MUSENG Kayij Elie Ingénieur En Système D’information
Cours de structure des Ordinateurs
EXERCICES
Exercice 1 :
1)
a.
Déterminer l’équation du circuit de la figure suivante :
b. Dresser la table de vérité de ce circuit
c. Quelle est la fonction logique réalisée et quel est son symbole ?
2) Mêmes questions pour le circuit de la figure suivante :
3) Mêmes questions pour le circuit de la figure suivante :
Exercice 2 :
1) Complétez la table de vérité correspondante au circuit logique suivant :
Ass MUSENG Kayij Elie Ingénieur En Système D’information
Cours de structure des Ordinateurs
C
B
A
0
0
0
0
0
1
0
1
0
0
1
1
1
0
0
1
0
1
1
1
0
1
1
1
S
2) Extraire l’équation de S à partir de la table de vérité.
3) Complétez le chronogramme suivant :
A
B
C
Exercice 3 :
Démontrer les relations suivantes l’aide des théorèmes de l’algèbre de Boole:
Ass MUSENG Kayij Elie Ingénieur En Système D’information
Cours de structure des Ordinateurs
3)
Exercice 4 :
Simplifier les équations logiques suivantes :
Ass MUSENG Kayij Elie Ingénieur En Système D’information
Cours de structure des Ordinateurs
Exercice 5 :
a) CONVERSION DANS D’AUTRES BASES
3. Écrire 101101102 en décimal.
4. Écrire 3456 en binaire, puis
5. Convertir 1011 1100
en hexadécimal.
0000 1000 1100 en décimal
b) CODAGE EN COMPLEMENT A 2
Sur 8 bits, donner les codages en complément à 2, lorsque c’est possible, des nombres
suivants
c) ARITHMETIQUE BINAIRE
Sur 8 bits, effectuer la somme en binaire : 101101012 + 110000112 et interpréter le résultat en
écriture décimale, en arithmétique signée et non signée.
Indiquer dans chaque cas s’il y a débordement.
d) Complétez le tableau ci-dessous.
L'indice indique la base dans laquelle le nombre est écrit
e) Codez les entiers relatifs suivants sur 8 bits (16 si nécessaire) :
456, -1, -56, -5642
Ass MUSENG Kayij Elie Ingénieur En Système D’information
Téléchargement