Académique Documents
Professionnel Documents
Culture Documents
Classe de L3 EEA
1
Chapitre I. Les microprocesseurs et architectures internes
a. Présentation du microprocesseur
Le processeur appelé CPU (Central Processing Unit) représente l’unité de traitement
de l'ordinateur. Il a pour rôle de traiter les informations sous format numérique (codée en
binaire) et d'exécuter les instructions stockées en mémoire. Dans sa première version (Intel
4004) inventée en 1971, le microprocesseur était d’abord une unité de calcul de 4 bits avec
une fréquence d’horloge de 108 kHz.
b. Fonctionnement du microprocesseur
C’est un circuit électronique intégré dont le fonctionnement est soumis au rythme
d'une horloge interne utilisant un cristal de quartz soumis à un courant électrique et qui envoie
des impulsions appelées aussi « top » d’horloge. La fréquence d'horloge ou cycle correspond
au nombre d'impulsions par seconde et s'exprime en Hertz (Hz). Par exemple, un ordinateur à
500 MHz dispose d’une horloge qui envoie 500 millions de battements par seconde. La carte
mère dispose de sa propre fréquence d’horloge appelée fréquence système ou FSB (Front-
Side Bus). La fréquence d'horloge du microprocesseur est généralement un multiple de celle
de la carte mère.
Le microprocesseur exécute une action à chaque top d'horloge. Il peut s’agir d’une
instruction ou une partie d'une instruction. Le CPI (Cycles Par Instruction) est un indicateur
qui permet de représenter le nombre moyen de cycles d’horloge nécessaire à l’exécution
d’une instruction sur un microprocesseur. La puissance du processeur est caractérisée par le
nombre d'instructions qu'il est capable de traiter par seconde, exprimée en MIPS (Millions
d'Instructions Par Seconde).
L'unité MIPS = fréquence du processeur / CPI
c. Notion d’instruction
L’opération élémentaire que le processeur peut accomplir est appelée instruction.
L’exécution des instructions par le microprocesseur nécessite qu’elles soient stockées en
mémoire. Une instruction se décompose en 2 parties :
- La première partie représente le code de l’opération, représentant l'action que le
processeur doit exécuter;
- La seconde partie constitue le code opérande dépendant de l'opération et qui définit les
paramètres de l'action, à l’exemple d'une donnée ou d'une adresse mémoire.
Syntaxe générale d’une instruction :
Code opération Champ opérande
Le nombre d'octets d'une instruction varie de 1 à 4 octets selon le type de donnée. De façon
générale, il existe plusieurs catégories d’instructions. Les principales sont :
- Les instructions d’accès mémoire : accès à la mémoire par le programme ou transferts de
données entre registres.
- Les instructions d’opérations arithmétiques : addition, soustraction, division,
multiplication, modulo
- Les instructions d’opérations logiques : ET, OU, NON, OU exclusif …
- Les instructions de contrôle : contrôles de séquence, branchements conditionnels et
inconditionnels ...
Les instructions sont exécutées par cycle processeur. Le registre ICC (Instruction
Cycle Code) du microprocesseur contient l’état du processeur en termes de cycle, pour
coordonner les séquences de micro-opérations entre elles. L’ICC peut porter sur 2 bits donc 4
cycles, est modifié en fin de chacun des 4 cycles. Ses différentes valeurs peuvent prendre les
significations suivantes :
2
00 fetch
01 indirect
10 execute
11 interrupt
d. Les Registres
Le microprocesseur dispose de petites mémoires internes à accès rapide de 8, 16, 32
ou 64 bits appelées registres. Ces registres contiennent temporairement les données
nécessaires à l’exécution des instructions. Le nombre de registres varie de la dizaine à
plusieurs centaines en fonction du type et de la version du microprocesseur. Les principaux
registres sont :
- l'accumulateur ACC qui permet de stocker les résultats des opérations arithmétiques et
logiques ;
- le registre d'état PSW (Processor Status Word), pour le stockage des indicateurs sur d'état
du système (retenue, dépassement, etc.) ;
- le registre instruction RI qui comporte l'instruction en cours d’exécution ;
- le compteur ordinal CO ou PC (Program Counter) qui contient l'adresse de la prochaine
instruction à exécuter ;
- le registre tampon qui stocke temporairement les données provenant de la mémoire ;
- les registres de travail, au moins au nombre de 4, AX, BX, CX, DX pouvant chacun être
subdivisé en 2 parties, la partie haute commençant par la même lettre et se terminant par
un "H" et la partie basse se terminant par un "L". Exemple AX se subdivise en AH et AL.
Si AX fait 16 bits par exemple, AH représente les 8 bits de poids fort et AL les 8 autres
bits de poids faible.
Problématique de la modification des registres pointeurs d’instructions par un appel de
procédure
RI = 1.1
CO = 1.2
RI = 8
CO = 9
e. Signaux de commande
Ce sont des signaux électriques qui organisent la communication entre les différentes
unités du microprocesseur qui participent à l'exécution d'une instruction. Le séquenceur assure
la distribution de ces signaux. Par exemple, le signal Read/Write (lecture/écriture) permet de
solliciter la mémoire en réponse à la nécessité de procéder à la lecture écriture d’une
information en mémoire par le microprocesseur.
g. Unités fonctionnelles
L'architecture du microprocesseur varie selon les versions et les constructeurs. Le
microprocesseur est essentiellement composé d'un ensemble d'unités fonctionnelles reliées
entre elles dont les principales unités sont :
- l’unité de commande ou unité d'instruction : elle intervient dans la lecture des données qui
arrivent au processeur, puis dans le décodage de ces données avant de les envoyer à l'unité
d'exécution. L'unité de commande se compose :
o d’un séquenceur appelé aussi bloc logique de commande avec pour rôle de
synchroniser l'exécution des instructions au rythme de l’horloge par envoi des
signaux de commande,
o d’un compteur ordinal qui contient l'adresse de l'instruction en cours d’exécution,
o d’un registre d'instruction qui contient la prochaine instruction à exécuter.
- l'unité de traitement ou d'exécution chargée d’accomplir les tâches soumises par l'unité
d'instruction. Cette unité est composée :
o d’une unité arithmétique et logique (UAL ou ALU pour Arithmetical and Logical
Unit). L'UAL réalise les calculs arithmétiques et les opérations logiques (ET, OU,
Ou exclusif, etc.),
o d’une unité de virgule flottante FPU (Floating Point Unit) destinés aux calculs
complexes non entiers qui ne peuvent être réalisés par l'unité arithmétique et
logique,
o d’un registre d'état,
o d'un registre accumulateur.
- l'unité d’entrées/sorties ou de gestion des bus qui gère les flux d'informations entrant et
sortant et sert d’interface avec la mémoire vive du système.
4
h. Microprogrammation
La microprogrammation apparue au début des années 1950 a pour but de permettre
une extension du code d'instruction au delà des simples possibilités du matériel. Une première
application de la microprogrammation résulte de la possibilité de fournir une gamme de
produits qui apparaissent compatibles aux yeux de l'utilisateur, tandis qu'ils diffèrent
considérablement de part le matériel utilisé. Une autre application est liée à l’émulation
possible de l'architecture de plusieurs machines sur un même matériel. De façon générale,
deux catégories de microprogrammation peuvent être distinguées :
- la microprogrammation dite verticale à travers laquelle une "macro – instruction" peut être
interprétée à l'aide de plusieurs instructions de base,
- la microprogrammation dite horizontale où l'interprétation des instructions (de base ou
étendues) se fait à l'aide de plusieurs commandes qui s'exécutent simultanément (en
parallèle).
i. Le pipeline (pipelining)
Elle permet d’accroître de façon considérable la vitesse d'exécution des instructions au
moyen d’une parallélisation des étapes. Les phases d'exécution d'une instruction pour un
processeur contenant un pipeline « classique » à 5 étages sont les suivantes :
LI : Lecture de l'Instruction depuis le cache (FETCH instruction),
DI : Décodage de l'Instruction (DECODe instruction) et recherche des opérandes (Registre ou
valeurs immédiate),
EX : Exécution de l'Instruction (EXECute instruction), à l’exemple de la somme, de la
soustraction, etc.
MEM : Accès mémoire (MEMory access), écriture dans la mémoire si nécessaire ou
chargement depuis la mémoire,
ER : Ecriture (Write instruction) de la valeur calculée dans les registres.
Dans la mémoire, les instructions sont organisées en file d'attente et sont chargées de
façon séquentielle, les unes après les autres. L'ordre des étapes d’exécution est invariable (LI,
DI, EX, MEM et ER). De ce fait, il est possible de créer dans le processeur des circuits
spécialisés pour chacune des phases. Le pipeline permet de réaliser chaque étape en parallèle
avec les étapes amont et aval : lire une instruction (LI) lorsque
- la précédente est en cours de décodage (DI),
- celle d'avant est en cours d'exécution (EX),
- celle située encore précédemment accède à la mémoire (MEM),
- la première de la série est déjà en cours d'écriture dans les registres (ER).
5
j. Notion de transistor
Les composants internes d’un ordinateur tels que la carte mère ou autres circuits
imprimés sont constitués d’un ensemble d’équipements électroniques de base à l’exemple des
résistances ou des condensateurs. Ces différents éléments collaborent pour permettre au PC
d’exécuter des instructions qui lui sont soumises, cette exécution étant le rôle du principal
composant qu’est le microprocesseur.
Le jeu d’instructions est un ensemble d'instructions qui permettent au microprocesseur
de traiter les informations qui lui sont soumises, ceci grâce à la technologie des circuits
électroniques. De façon physique, ce sont de petits interrupteurs ou semi conducteurs utilisant
l’effet transistor qui réalise ce jeu d’instructions. Un transistor (transfer resistor) ou résistance
de transfert est donc un composant électronique semi conducteur doté de 3 électrodes parmi
lesquelles une électrode de commande qui lui permet de modifier le courant qui le traverse. Il
constitue ainsi un composant actif du fait de cette faculté de modification du courant, à
l’opposé des composants passifs à l’instar des résistances ou des condensateurs qui sont
bipolaires, c'est-à-dire possédant seulement 2 électrodes.
Il existe plusieurs types de transistors dont le transistor MOS (métal, oxyde, silicium)
utilisé par excellence pour la réalisation des circuits imprimés. Ce transistor possède une zone
chargée positivement qui sépare deux autres zones ayant des charges négatives. La zone
tampon chargée positivement est appelée "substract" et est surmontée d’une électrode de
commande appelée "porte" qui permet d’appliquer une tension sur la zone. Les autres zones
chargées négativement sont appelées respectivement "source" avec un potentiel quasi-nul et
"drain" avec un potentiel de 5V.
Dans son fonctionnement, le transistor agit à l’image d’un interrupteur programmable
grâce à l'électrode de commande. Si une tension est appliquée à cette électrode, le MOS agit
en interrupteur fermé, le cas contraire il réalise un interrupteur ouvert. Le principe est le
suivant : à l’absence de tension appliquée à l’électrode de commande (porte), le substract
chargé positivement empêche aux électrons d'aller de la source vers le drain, telle une
barrière. Dans le cas où la tension est appliquée à la porte, les charges positives du substrat
sont repoussées et un canal de communication s'établit entre la source et le drain.
Electrode de commande +
5v 0v
- -
Les circuits logiques sont constitués de transistors assemblés. Assemblés à leur tour,
ils permettent de fabriquer des processeurs à l’image du tout premier mis au point par la
société Texas instruments en 1958.
Des tranches de silicium traitées de façon successives sont utilisées pour réaliser des
transistors MOS. Un "circuit" est constitué de tranches de silicium découpées de façon
rectangulaire de l’ordre de micromètres (microns). Lorsque placés dans des boîtiers
6
comportant des connecteurs d'entrée-sortie, ces circuits forment un "circuit intégré", avec une
contrainte imposée par la physique de la densité des transistors utilisés par unité de surface.
De façon générale, dans les dernières versions des processeurs, ce sont plusieurs millions de
transistors qui sont assemblés sur un seul processeur. La loi de Gordon Moore (société Intel)
connue sous le nom de loi de Moore vérifiable encore de nos jours prévoyait initialement en
1965 que le nombre de transistors intégrés sur silicium doublerait tous les 12 mois. Dans sa
version révisée en 1975, le nombre de mois est ramené à 18. L’augmentation du nombre de
transistors implique nécessairement l’amélioration considérable des performances des
processeurs.
Le terme "puce électronique" qui désigne couramment les circuits intégrés découle des
broches d'entrée-sortie ressemblant à des pattes dont dispose le boîtier rectangulaire.
Il existe plusieurs familles de processeur avec pour chaque type, son propre jeu
d'instruction :
- La famille des 8086, 8088, 80386, 80486, 80586, 80686, etc.
- La famille des ARM
- La famille des IA-64
- La famille des MIPS
- La famille des Motorola 6800
- La famille des PowerPC
- La famille des SPARC
- ...
7
o le Cypress CY601 met en œuvre l'architecture Sparc. Il est doté de 128
registres organisés en 8 groupes de 24 registres de 32 bits avec 8 registres en
entrée et 8 en sortie.
o Les premiers IBM PC-RT sont équipés d’un Bus multiplexé de 32 bits adresses
et données par demi-cycle d'horloge ainsi qu’un jeu de 118 instructions, mais
constitue plutôt une architecture non totalement RISC.
La nécessité d’utiliser des compilateurs puissants sur des architectures RISC découle
du fait que les programmes doivent être traduits en instructions simples. Le coût de
fabrication de cette architecture est réduit. La simplicité des instructions permettent qu’elles
soient exécutées en un seul cycle d’horloge, ce qui améliore les temps d’exécution des
programmes. Un autre avantage de l’architecture RISC est la possibilité offerte au processeur
d’exécuter plusieurs instructions simultanément (en parallèle).
D’un point de vue fonctionnement, les caractéristiques du M68040 sont les suivantes :
- optimisation du séquencement des instructions les plus utilisées.
- dédoublement des unités de lecture et de décodage dans le pipe-line pour le traitement des
branchements.
- l'unité flottante ajoute 11 registres au jeu de registres de l'unité de traitement. 8 sont des
registres 80 bits, et les autres constituent des registres de contrôle, d'état et de commande.
- la gestion de la mémoire est assurée par les MMU, notamment la mémoire virtuelle
paginée avec des pages de 4 ou 8Ko.
- chaque MMU est doté d'un cache de traduction appelé TLB (Translation Lookaside
Buffer) ou ATC (Address Translation cache) de 64 entrées. Les options de gestion du
TLB sont les suivantes :
1. l’option "Write Through" permet une écriture simultanée en mémoire,
2. l’option "Copy Back" ou "write back" ne permet la recopie qu’en cas de nécessité,
3. une option permet d'inhibé le cache,
4. une autre option permet d'inhibé le cache lors des entrées/sorties. Le snooper est une
unité de scrutation du bus qui vérifie la nécessité de mettre le cache à jour, dans le cas
d'un accès en DMA par exemple.
8
Unité Lecture
MMU + ATC /
Flottante
d’instruction cache
Décodage instructions
Conversion
Calcul
Exécution
d’adresse
Ecriture Accès aux
opérandes MMU + ATC /
Exécution cache
données
Ecriture
9
Cache 8K MMU Cache 8K
Instructions Données
128
64 32 32 32 32
64
Contrôle de Unité de Unité
bus contrôle flottante
32 registres 32 registres
32 bits 32 bits
64
64
64
Unité Additionneur Multiplieur
graphique
10
Chapitre II. La programmation assembleur (jeu d’instructions standard)
II.1. Le microprocesseur
- CPU (Central Processing Unit) représente l’unité de traitement
- Comporte entre autres composants, les registres de travail, au moins au nombre de 4,
AX, BX, CX, DX pouvant chacun être subdivisé en 2 parties, la partie haute
commençant par la même lettre et se terminant par un "H" et la partie basse se
terminant par un "L". Exemple AX se subdivise en AH et AL. Si AX fait 16 bits par
exemple, AH représente les 8 bits de poids fort et AL les 8 autres bits de poids faible.
AH AL
AX
Supposons que AX soit de 16 bits, et que la valeur 200 lui est affectée. Si les bits contenus
dans AH et AL doivent être convertis en binaire de façon indépendante, quelles seront ces
valeurs.
AX = 200 = 0000000011001000
AH = 00000000
AL = 11001000
AX = 256 = 0000000100000000
AH = 00000001
AL = 00000000
Dans ce mode d'adressage, le code opérande contient une donnée dont la taille peut
varier de 1 à 2 octets. Ce type d'instruction met en jeu un registre et une valeur. Il peut s’agir
d'une affectation, d’une addition, d’une soustraction ou d’une comparaison. De ce fait, la
taille de l'opérande dépendra du type de registre utilisé, registre 8 bits ou 16 bits. Par exemple,
11
dans le cas de l'instruction MOV BX, 8 l'opérande 8 sera codé sur 16 bits puisqu'il faut
l'affecter à un registre 16 bits (BX).
Dans le mode d’adressage direct, le code opérande d'une instruction contient l'adresse
d'une donnée en mémoire. L’opérande ne contient donc pas la donnée comme pour
l’adressage immédiat, mais son adresse mémoire. Une adresse étant codée sur 16 bits, la taille
du champ opérande est de 2 octets. Il peut s’agir de l'affectation à un registre d'une donnée
contenue dans une case mémoire. Ce mode d’adressage implique un temps d’exécution de
l’instruction plus long du fait que l'accès à la mémoire principale est plus long que l'accès à un
registre.
Dans le mode d'adressage indirect, la donnée est accédée par l'intermédiaire d'un
registre qui contient son adresse (le registre BX). L’adressage indirect est utile lors de
l'utilisation de tableaux et du parcours de ses cases, qui se fait simplement en incrémentant le
registre BX de la taille d'une case du tableau pour passer d'une case à une autre...
Dans l’adressage direct, au registre accumulateur (AX) est affectée directement l'adresse d'une
donnée.
Exemple : MOV AX, [110]
Dans l’adressage indirect, à AX est affectée une donnée dont l'adresse est contenue dans le
registre BX.
Exemple : MOV AX, [BX]
Instruction Signification
MOV X, Y Affectation : X ← Y
ADD X, Y Addition : X ← X + Y
MUL X, Y Multiplication : X ← X * Y
SUB X, Y Soustraction : X ← X - Y
DIV X, Y Division, calcul du quotient : X ← X / Y
MOD X, Y Division, calcul du reste : X ← reste de (X / Y)
OR X, Y Ou logique : X ← X OU Y (Voir table de vérité du OU logique)
AND X, Y Et logique : X ← X ET Y (Voir table de vérité du ET logique)
NOR X, Y Non Ou logique : X ← NON (X OU Y)
NAND X, Y Non Et logique : X ← NON (X ET Y)
XOR X, Y Ou exclusif logique : X ← (X OUEXCLUSIF Y)
(Voir table de vérité du OU EXCLUSIF logique)
Nometiquette : Création d’une étiquette dans un programme (marquer une ligne)
CMP X, Y Comparer X et Y, l’instruction positionne automatiquement le registre
13
d’Etat du micro processeur, X et Y ne sont pas modifiés
JL etiquette Jump if Less : Continuer l’exécution du programme à l’emplacement
indiqué par "etiquette" si la comparaison précédente indique que X < Y,
sinon, continuer l’exécution du programme à la ligne suivante en dessous
JLE etiquette Jump if Less or Equal : Continuer l’exécution du programme à
l’emplacement indiqué par "etiquette" si la comparaison précédente
indique que X <= Y, sinon, continuer l’exécution du programme à la ligne
suivante en dessous
JG etiquette Jump if Greater : Continuer l’exécution du programme à l’emplacement
indiqué par "etiquette" si la comparaison précédente indique que X > Y,
sinon, continuer l’exécution du programme à la ligne suivante en dessous
JGE etiquette Jump if Greater or Equal : Continuer l’exécution du programme à
l’emplacement indiqué par "etiquette" si la comparaison précédente
indique que X <= Y, sinon, continuer l’exécution du programme à la ligne
suivante en dessous
JE etiquette Jump if Equal : Continuer l’exécution du programme à l’emplacement
indiqué par "etiquette" si la comparaison précédente indique que X = Y,
sinon, continuer l’exécution du programme à la ligne suivante en dessous
JNE etiquette Jump if Not Equal : Continuer l’exécution du programme à l’emplacement
indiqué par "etiquette" si la comparaison précédente indique que X ≠ Y,
sinon, continuer l’exécution du programme à la ligne suivante en dessous
JMP etiquette Jump : Continuer l’exécution du programme à l’emplacement indiqué par
"etiquette" sans aucune condition. Cette instruction ne nécessite pas de
comparaison (l’usage de CMP avant) contrairement à toutes les autres.
Data Ends
Code segment
Code ends
Opérations d’entrée/sortie :
Instruction de lecture au clavier d’un caractère
MOV AH, 1
INT 21h
A la fin de l’exécution de l’interruption, lorsqu’un caractère est tapé au clavier, le code
ascii du caractère est disponible dans le registre AL.
Code ascii de 0 = 48
…
code ascii 9 = 57
Instruction d’affichage d’un caractère à l’écran
DL doit recevoir le code ascii du caractère à afficher
MOV AH, 2
INT 21h
14
Exemple d’illustration
Ecrire un programme qui lit deux chiffres de 2 octets chacun X et Y et affiche la somme Z.
Par restriction, la somme est supposée portée sur 1 seul chiffre.
Assume DS:Data,CS:Code
Data segment
X dw
Y dw
Z dw
Data Ends
Code segment
; Lecture de X
MOV AH, 1
INT 21h
SUB AL, 48
MOV X, AL
; Lecture de Y
MOV AH, 1
INT 21h
SUB AL, 48
MOV Y, AL
; Calcul de Z
MOV Z, X
ADD Z, Y
; Affichage de Z
MOV DL, Z
ADD Z, 48
MOV AH, 2
INT 21h
Code ends
Ecrire un pgm avec les mêmes contraintes que précédemment, qui calcule X = Y + Z + T
Ecrire un pgm qui lit 3 chiffres au clavier et affiche leur somme
Assume DS:Data,CS:Code
Data segment
X db
Y db
Z db
T db
Data Ends
Code segment
; Lecture de X
MOV AH, 1
INT 21h
SUB AL, 48
MOV X, AL
; Lecture de Y
MOV AH, 1
INT 21h
SUB AL, 48
MOV Y, AL
15
; Lecture de Z
MOV AH, 1
INT 21h
SUB AL, 48
MOV Z, AL
; Calcul de Z
MOV T, X
ADD T, Y
ADD T, Z
; Calcul des quotient et reste
MOV BH, T
DIV BH, 10 ; BH contient le quotient
MOV BL, T
MOD BL, 10 ; BL contient le reste
16
Assume DS:Data,CS:Code
Data segment
X dw
Data Ends
Code segment
MOV X, 0
MOV CH, 1
Lecture :
MOV AH, 1
INT 21h
SUB AL, 48
MUL X, 10
ADD X, AL
INC CH
CMP CH, 5
JL Lecture
Code ends
Inversion du nombre
Instruction assembleur Signification Contenu des variables et
registres
Mov AccInverse, Acc AccInverse = 1234
Mov Quotient, AccInverse Quotient = 1234
Mov Reste, Quotient Reste=Quotient = 1234
Div Quotient, 10 Quotient = 123
Mod Reste, 10 Reste= 4
Mul AccInverse, 10
Add AccInverse, Reste AccInverse = 0*10+4=4
Mov Reste, Quotient Reste=Quotient = 123
Div Quotient, 10 Quotient = 12
Mod Reste, 10 Reste= 3
Mul AccInverse, 10
Add AccInverse, Reste AccInverse = 4*10+3=43
Mov Reste, Quotient Reste=Quotient = 12
Div Quotient, 10 Quotient = 1
Mod Reste, 10 Reste= 2
Mul AccInverse, 10
Add AccInverse, Reste AccInverse = 43*10+2=432
Mov Reste, Quotient Reste=Quotient = 1
Div Quotient, 10 Quotient = 0
Mod Reste, 10 Reste= 1
Mul AccInverse, 10
Add AccInverse, Reste AccInverse = 432*10+1=4321
18
Affichage du nombre inversé
Instruction assembleur Signification Contenu des variables et
registres
Mov Quotient, AccInverse Quotient = 4321
Mov Reste, Quotient Reste=Quotient = 4321
Div Quotient, 10 Quotient = 432
Mod Reste, 10 Reste= 1
Mov Dl, Reste
Add Dl, 48 Ecran :
Mov Ah, 2 1
Int 21h
Mov Reste, Quotient Reste=Quotient = 432
Div Quotient, 10 Quotient = 43
Mod Reste, 10 Reste= 2
Mov Dl, Reste
Add Dl, 48 Ecran :
Mov Ah, 2 12
Int 21h
Mov Reste, Quotient Reste=Quotient = 43
Div Quotient, 10 Quotient = 4
Mod Reste, 10 Reste= 3
Mov Dl, Reste
Add Dl, 48 Ecran :
Mov Ah, 2 123
Int 21h
Mov Reste, Quotient Reste=Quotient = 4
Div Quotient, 10 Quotient = 0
Mod Reste, 10 Reste= 4
Mov Dl, Reste
Add Dl, 48 Ecran :
Mov Ah, 2 1234
Int 21h
Programme global
Assume DS:Data,CS:Code
Data segment
Compteur db
Acc dw
AccInverse dw
Reste dw
Quotient dw
Data Ends
Code segment
;Lecture du nombre
Mov Acc, 0
Mov Compteur, 0
Repeter :
MOV AH, 1
INT 21h
Sub AL, 48
Mul Acc, 10
Add Acc, Al
19
Inc Compteur
Cmp Compteur, 3
Jle Repeter
; inversion
Mov AccInverse, Acc
Mov Quotient, AccInverse
Boucle2 :
Mov Reste, Quotient
Div Quotient, 10
Mod Reste, 10
Mul AccInverse, 10
Add AccInverse, Reste
Cmp Quotient, 0
Jne Boucle2
;Affichage du nombre inverse
Mov Quotient, AccInverse
Boucle3 :
Mov Reste, Quotient
Div Quotient, 10
Mod Reste, 10
Mov Dl, Reste
Add Dl, 48
Mov Ah, 2
Int 21h
Cmp Quotient, 0
Jne Boucle3
Code ends
20
Chapitre III. Notion de système d'exploitation
III.1. Généralités
21
Le cycle d’exécution d’une commande peut être représenté par la figure suivante :
2
1 4
Utilisateur 3
Système
6 d’exploita- Matériel
tion 5
1. En cette première phase, l’utilisateur lance une commande : soit en tapant le nom du
fichier exécutable en mode ligne suivi de l’appui sur la touche "Entrée", soit en
utilisant le double-clique de la souris sur une icône qui représente ce programme.
2. Dans cette deuxième phase, le programme dont le fichier est incorporé au noyau du
système d’exploitation existe déjà en mémoire. Par conséquent, le système
d’exploitation crée un contexte spécial par attribution d’une partie de la mémoire, pour
permettre d’exécuter une instance de ce programme. Il en est de même pour les
commandes déjà lancées et en cours d’exécution. Le fichier du programme à exécuter
non lancé et non incorporé au noyau doit être recherché sur un des supports de
stockage permanent. Le système d’exploitation recherche d’abord le fichier dans le
répertoire dans lequel se trouve l’utilisateur (répertoire courant). La notion de
répertoire émane de l’organisation logique en des sous parties de l’espace disque. En
cas de succès, il le charge en mémoire et passe à la prochaine étape de son exécution.
Dans le cas contraire, le système d’exploitation parcoure un à un tous les chemins
d’accès aux fichiers contenus dans un emplacement de la mémoire (référencé avec le
nom de variable). Cet emplacement fait partie des "variables d’environnement". Le
nom de cette variable spécifique est PATH. Ces chemins sont séparés par des
caractères tels que ":" ou ";". La première occurrence du fichier qui sera retrouvée sera
chargée en mémoire. De ce fait, le système peut passer à l’étape 3 relative à
l’exécution du programme. Le cas échéant, le système passe directement à l’étape 6
pour spécifier l’absence du fichier à l’utilisateur au moyen de messages tels que "nom
de fichiers ou de commandes incorrects", "commande introuvable", "fichier
introuvable", …
3. Le système d’exploitation demande au microprocesseur d’exécuter le fichier chargé en
mémoire.
4. Le microprocesseur exécute le fichier représentant le programme. Lorsque le
programme a besoin d’une entrée/sortie, par exemple d’une donnée qui doit provenir
de l’utilisateur et/ou d’un périphérique, il établit un dialogue avec l’utilisateur ou avec
le périphérique concerné en passant à nouveau par le système d’exploitation.
5. Le microprocesseur renvoie la réponse de l’exécution du programme au système
d’exploitation.
6. Le système d’exploitation renvoie le résultat de l’exécution du programme à
l’utilisateur.
22
saturation de la mémoire peut être retenu comme un objectif qui potentiellement peut être visé
par un utilisateur qui utilise les mécanismes manuels de gestion de la mémoire.
A intervalle régulier, sur la base d'une horloge temps réel de décompte des quanta de
temps, le noyau du système d’exploitation élit une tâche à exécuter à partir de la file
d'ordonnancement, dans un système multitâche. Une solution qui permet d’obtenir un
supplément d’espace mémoire consiste à retenir une partie de l’espace disque dur pour
accueillir temporairement des programmes en cours d’exécution. Cet espace porte le nom de
mémoire virtuelle ou mémoire secondaire. La mémoire virtuelle a pour fonction principale
d’accueillir des programmes en cours d’exécution, qui sont potentiellement mis en attente
d’un périphérique ou en attente de données d’un utilisateur, ou simplement en attente
d’activation par un utilisateur, ainsi que pour toute autre raison propre au système
d’exploitation. La mémoire virtuelle peut également être définie comme un espace de
stockage temporaire dans lequel le système d’exploitation exécute des programmes dont les
besoins en mémoire dépassent la mémoire disponible. Le mécanisme qui consiste à décharger
un programme de la mémoire vive vers la mémoire virtuelle porte dans certains systèmes le
nom de "swapping". Lorsque l’espace disponible sur le disque dur se réduit, le système met
difficilement en œuvre le mécanisme de "swapping". Une des solutions au problème de
restriction de l’espace mémoire peut donc passer par l’extension de l’espace disque, par ajout
de disque dur secondaire ou par remplacement du disque existant.
23
III.3. Notion de processus
En cours
d’exécution
1
3
2
Bloqué Prêt
4
De façon générale, les ordinateurs enregistrent les données sur un disque dur en tant
que série de bits, chaque bit étant représenté par une charge électromagnétique positive ou
négative sur le revêtement d'oxyde de fer.
24
Exemple : Considérons la correspondance d’une charge électromagnétique positive à un 1
binaire et celle négative à un 0 binaire. Soit la séquence suivante de caractères stockés sur un
disque. Les correspondances qui suivent la série des charges peuvent être établies par simple
conversion binaire-décimale, suivie d’une lecture dans la table ASCII :
Série de bits enregistrés sur le disque dur :
-+-----+-++---+--++--+---++-++++-+++-+-+
Les fichiers constituent une séquence particulière de bits dans l’ensemble des
possibilités offertes par la capacité de stockage des disques durs. L’optimisation du temps de
réponse lié à leur lecture et/ou écriture sur le disque physique nécessite des opérations
préalables de préparation de l’espace de stockage. Etant donné que le disque dur permet de
stocker de milliards de bits, les opérations d’initialisation pour l’optimisation de son temps
d’accès consistent à son formatage physique, à la création des partitions et à son formatage
logique, pour que les données puissent être écrites sur les plateaux et au besoin récupérées
rapidement.
Le formatage logique
Il existe divers systèmes de fichiers tels que les systèmes FAT 16, FAT 32 et NTFS
utilisés sous Windows. Le pilotage d’un disque dur via un système de fichiers dépend de la
version du système de fichiers, du fait que les tailles des disques durs évoluent dans le temps.
Ce problème de pilotage lié à la taille des disques durs provient à la fois des aspects matériels,
mais d’un point de vue logiciel, il découle de la limitation de la taille logique imposée par les
variables faisant partie des superstructures propres aux systèmes de fichiers. Par exemple,
l’ancien système de fichiers FAT 16 limite la taille logique de la partition d’un disque dur à 2
Go. Les nouveaux systèmes de fichiers tels que FAT32 et NTFS peuvent gérer des partitions
de plusieurs téraoctets (To).
Le système FAT 16
Il est utilisé par les systèmes d’exploitation MS-DOS, Windows 3.x/95/NT, OS/2. Il
est basé sur l’utilisation d’une table d'allocation de fichiers et des clusters. Les clusters
représentent la plus petite unité d’allocation et de stockage et peut regrouper plusieurs
secteurs. Le terme "unité d’allocation" désigne la plus petite partie du disque dur qu’un
système d’exploitation peut attribuer à un programme qui lance le processus d’enregistrement
25
de ses données sur le support physique. La FAT 16 ne peut gérer que 65535 clusters. Quelque
soit la taille du volume, la taille du cluster doit être suffisamment grande pour que tout
l'espace disponible puisse être inclus dans les 65535 clusters. Il en résulte que plus la taille du
disque est grande, plus la taille du cluster est grande, ce qui conduit immanquablement à un
gaspillage d’espace. Sous le système de fichiers FAT 16, les propriétés d'un fichier
comportent entre autres son nom, sa date et heure de création ou de dernière modification, le
numéro du cluster de départ, et d’autres attributs à l’exemple de ceux qui rendent le fichier
apparent ou caché.
Le système FAT 32
C’est une amélioration du système FAT 16. Il est utilisé dans les versions mises à jour
du MS-DOS, de Windows 3.1/95/98/NT. Le système de fichiers FAT 32 est basé sur des
entrées de la table d'allocation de fichiers de 32 bits au lieu de 16, ce qui permet une gestion
de volumes allant jusqu'à 2 Téra octets. Il utilise des clusters plus petits que le système FAT
16 (4 Ko pour des volumes allant jusqu'à 8 Go) et contient des doubles des enregistrements
d'amorçage avec un répertoire racine de n'importe quelle taille situé n'importe où dans le
volume. Le système de fichiers FAT 32 reprend les propriétés des fichiers instanciés par le
système FAT 16.
26
évolué en permettant un nombre plus grand de caractères dans les noms des fichiers et
répertoires.
Figure 35 : Liaison table des fichiers et répertoires, table des i-nodes, disque
Etudiant Stagiaire
La structure suivante peut être utilisée pour la représentation interne de ces deux
répertoires :
27
I-node Nom I-node Nom
8 .. 8 ..
9 . 20 .
33 Algo 45 Emploi
78 tp 78 Travaux
Les fichiers tp et Travaux ont le même numéro de i-node. Il s’agit de deux noms
différents pour un même fichier physique sur le disque, appelés "liens". Un lien pour un
fichier est un autre nom de ce fichier ayant le même numéro de i-node. Les deux répertoires
Etudiant et Stagiaire ont le même répertoire père spécifié par son numéro de i-node. La
structure du système de fichiers telle que définie correspond à une structure arborescente
avec comme point de départ, sa racine notée "\" sous Windows ou "/" sous Unix.
de i-node : 2
I-node Nom Table du répertoire : usr
40 usr de i-node : 40
60 sys I-node Nom
75 fich1
80 include
82 fichin
de i-node : 80
I-node Nom
81 stdio.h
90 .
28
Le processus démarre avec la récupération par le système d’exploitation de l’i-node de
la racine, qui est toujours 2. A partir de l’i-node 2 et de ses blocs de données, le système
recherche le répertoire de nom usr, puis récupère son i-node qui est 40 dans cet exemple. Les
blocs de données rattachés à l’i-node 40 sont accédés pour rechercher le répertoire include.
L’i-node de ce répertoire est 80. Il sera utilisé par le système pour retrouver le fichier stdio.h
et son i-node 81. L’i-node 81 donne l’implantation physique du fichier stdio.h.
29
Les ".." permettent au système de quitter /bin pour aller à la racine "/", puis de descendre vers
home, ensuite vers Etudiant, avant de retrouver le fichier calc.exe.
La visualisation du contenu du fichier factoriel.c en utilisant le chemin d’accès relatif se fera
avec la même commande more accompagnée du chemin d’accès relatif à ce fichier en
argument, conformément à la syntaxe suivante :
more ../home/Etudiant/tp/factoriel.c
Les chemins d’accès absolu et relatifs permettent d’accéder aux mêmes objets, la
différence d’un cas à l’autre est le point de départ du chemin. Le déplacement dans
l’arborescence se fait avec des remontées en utilisant les caractères ".." autant de fois que
nécessaire et en les séparant par le caractère "/". Les descentes dans l’arborescence se font en
appelant les objets par leur nom lorsque le chemin est à leur niveau. Les méta-caractères
peuvent également être utilisés pour atteindre les objets.
30