Vous êtes sur la page 1sur 30

Architecture des ordinateurs et systèmes d’exploitation

Classe de L3 EEA

Première partie : Architecture


Chapitre I. Les microprocesseurs et architectures internes
a. Présentation du microprocesseur
b. Fonctionnement du microprocesseur
c. Notion d’instruction
d. Les Registres
e. Signaux de commande
f. La mémoire Cache ou mémoire tampon ou antémémoire
g. Unités fonctionnelles
h. Microprogrammation
i. Le pipeline (pipelining)
j. Notion de transistor
k. Processeur et circuits intégrés
l. Les architectures CISC et RISC des microprocesseurs, Problématique de la
diversité des jeux d’instructions
Chapitre II. La programmation assembleur (jeu d’instructions standard)
m. Les modes d’adressage : implicite, immédiat, relatif, direct, indirect.
n. Les jeux d’instructions conventionnels
o. Problématique de l’affichage des nombres
p. Programmation modulaire et passage de paramètres
Deuxième partie : Programme de base
Chapitre III. Notion de système d’exploitation
q. Historique des systèmes d’exploitation
r. La gestion des périphériques
s. La gestion de la mémoire
t. La gestion de l’espace disque (FAT, NTFS, Linux Est2, …)
u. La gestion des processus

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.

f. La mémoire Cache ou mémoire tampon ou antémémoire


Elle se distingue par sa rapidité d’accès avec une réduction considérable des délais
d'accès aux informations stockées en mémoire vive, comparativement à la mémoire centrale
de l’ordinateur qui possède une vitesse bien moins importante. Des mémoires existent, plus
rapides que la mémoire cache, mais avec un prix d’acquisition plus élevé. Pour réduire les
temps de réponse des utilisateurs, l’utilisation de la mémoire à accès rapide à proximité du
microprocesseur est requise pour stocker temporairement les principales données qui doivent
3
être traitées par ce processeur. Il existe plusieurs niveaux de mémoire cache dans les
ordinateurs de dernières génération :
- Le cache L1 ou mémoire cache de premier niveau directement incrustée à l’intérieur du
processeur, qui est très rapide d’accès avec un délai d’accès proche de celui des registres
internes. Le cache L1 est divisé en 2 parties :
o le cache d'instructions, qui contient les instructions issues de la mémoire vive
décodées lors de passage dans les pipelines.
o le cache de données, qui contient des données issues de la mémoire vive et les
données récemment utilisées lors des opérations du processeur.
- Le cache L2 ou mémoire cache de second niveau, moins rapide que le cache L1, il est
situé dans la puce qui contient le microprocesseur et sert de zone intermédiaire entre le
cache interne du microprocesseur et la mémoire vive. Le cache L2 est plus rapide d'accès
que la mémoire vive.
- Le cache L3 ou mémoire cache de troisième niveau est celui de la mémoire vive et est
situé sur la carte mère de l’ordinateur.

L’utilisation du système de cache permet de réduire les temps de réponse à travers la


réduction des temps d’accès aux différentes mémoires lors du traitement et du transfert des
informations. Le système est basé sur la communication possible qui peut s’établir entre le
contrôleur de cache de premier niveau avec celui de second niveau pour faire des transferts
d'informations sans bloquer le microprocesseur, lorsque ce dernier est occupé à exécuter des
opérations spécifiques. Cette communication est également possible entre le cache de second
niveau et celui de la mémoire vive ou cache de troisième niveau, pour permettre des transferts
sans bloquer le fonctionnement normal du 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).

Chaque phase du pipeline nécessite 1 à 2 cycles d'horloge (rarement plus) :


- 10 cycles d'horloge maximum par instruction.
- 12 cycles d'horloge maximum pour 2 instructions (10+2=12 au lieu de 10*2=20), car la
précédente instruction était déjà dans le pipeline. Les deux instructions sont donc en
traitement dans le processeur, avec un décalage d'un ou deux cycles d'horloge.
- 14 cycles d'horloge seront ainsi nécessaires pour 3 instructions,
- etc.

Il existe différents types de pipelines, de 2 à 40 étages avec le même principe de


fonctionnement.
Analogie :
Le principe du pipeline est comparable à une chaîne de production en série dans les
usines. L’objet fabriqué passe d'un poste de travail à un autre en suivant la chaîne de montage
et sort complètement assemblée à la fin de la chaîne. La compréhension du principe nécessite
de regarder la chaîne dans son ensemble, non pas objet par objet. Si la production d’un objet
prend 3 heures, il est possible de faire sortir un objet de l’usine toutes les minutes !

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

- -

Illustration des électrodes internes d’un transistor

k. Processeur et circuits intégrés

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
- ...

l. Architecture RISC (Reduced Instruction Set Computer)

De façon générale, la présentation de l’architecture d’un processeur consiste en la


spécification fonctionnelle de ce processeur, une spécification utilisable par le programmeur
en langage machine. La notion d’architecture renvoie à la connaissance de l’environnement
du processeur, notamment la connaissance du jeu d’instructions du processeur, de l’ensemble
de ses registres qui sont visibles par le programmeur, de l’organisation de la mémoire et des
entrées/sorties, …
Le caractère micro-codé du jeu d'instruction des machines classiques et
l’enrichissement considérable de ce jeu d’instruction entrainent un nombre important de
cycles de lecture de la ROM des micro – codes. L’architecture RISC a été élaborée par la
société IBM dans le but de réduire les cycles de lecture à travers la réduction du jeu
d’instructions, d’où le nom donné à cette architecture de « machine à jeu d'instructions
réduit ». Les caractéristiques de cette architecture sont les suivantes :
1. chaque cycle de lecture de la ROM des micro – codes est associé à une seule
instruction. De ce fait, le jeu d'instruction doit être limité, de même que la taille des
programmes,
2. les instructions doivent avoir un format fixe qui simplifie considérablement le
décodage et la réalisation d'un séquenceur câblé et non micro-codé,
3. les instructions "LOAD" et "STORE" utilisent l'indirection sur registres et sont les
seules instructions pour l'accès à la mémoire. Ces indirections exigent un nombre
assez important de registres. Pour limiter le nombre d'accès à la mémoire lors de
passages de paramètres aux procédures, des fenêtres de registres sont utilisées avec
des formes linéaire ou circulaire.
4. Exemples :
o la version RISC I de Berkeley utilise 10+128 registres de 32 bits organisés en 8
fenêtres recouvrantes. 6 registres sont utilisés en entrée et en sortie pour le
transfert d'arguments.

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).

Exemple du microprocesseur Motorola 68040

D’un point de vue architecture, le microprocesseur M68040 dispose :


- d’une unité de traitement optimisée,
- d’une unité pour virgule flottante intégrée,
- de deux caches d’instructions et de données de 4Koctets. Ces caches maintiennent la
cohérence des informations en cas de fonctionnement multi-processeur. Un contrôleur
assure que le trafic avec les caches reste prioritaire,
- d’une unité de contrôle pour un accès mémoire distinct pour les instructions et les
données,
- d’une horloge de base de 25 MHz à 50 Mhz équipée de 179 pattes,
- d’une capacité d’environ 1,3 instruction/cycle,
- de deux pipe-lines indépendants,
- d’une occupation des bus externes minimale.

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

Figure 1. Structure interne du microprocesseur M68040

Exemple du microprocesseur i860 d’Intel

Dans son architecture interne, le microprocesseur i860 dispose :


1. d’une unité graphique avec la capacité de traiter des changements d'échelle, des
rotations, des réglages de luminosité, ...
2. d’une unité de gestion de la mémoire (MMU) avec un adressage sur 32 bits. Le TLB
de la MMU dispose de 64 entrées et assure une pagination mémoire à deux niveaux,
3. d’une unité de contrôle pipe-line à quatre étages "fetch", "decode", "execute" et
"store",
4. d’un additionneur et d’un multiplicateur flottants possédant trois niveaux de pipe-line,
la séparation de ces deux composants offre une possibilité de parallélisme entre
instructions flottantes et les autres,

Le fonctionnement du microprocesseur i860 est basé sur :


1. un jeu d’instruction typiquement RISC avec des instructions toutes codées sur 32 bits.
Le format des instructions peut comporter trois opérandes,
o l'instruction "load" s'exécute en 1 cycle,
o le processeur est équipé d’un mécanisme "scoreboarding" de marquage de
registres qui permet de garder la trace des registres qui sont en attente de
chargement de telle sorte qu’il n'y ait pas de cycle d'attente (wait) si la donnée
est déjà dans le cache. Les instructions suivantes utiliseront le marquage pour
décider de l’attente ou pas,
o le compilateur joue un rôle primordial,
o le jeu d'instructions est doté de branchements différés,
o le codage des nombres flottants et des entiers se fait sur 32 et 64 bits,
2. une possibilité pour le programmeur d’exécuter des instructions en mode "dual
instruction",
3. une possibilité d'exécuter en parallèle une addition et une multiplication flottante (dual
operation),
4. une possibilité d'exécuter 3 opérations par cycle de base.

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

Figure 2. Structure interne du microprocesseur i860

m. Architecture CISC (Complex Instruction Set Computer)

A la différence de l’architecture RISC qui propose un jeu d’instruction réduit, des


modes d’adressage simples, l’architecture CISC propose de nombreux modes d’adressage,
dont certains sont souvent complexes avec un jeu d’instructions fourni. Les initiales CISC
renvoient à un ordinateur à jeu d’instruction complexe. Cette architecture consiste en un
câblage à l’intérieur du processeur d’instructions complexes qui sont difficiles de création à
partir des instructions de base. Le coût de cette architecture est élevé du fait des fonctions
évoluées qui sont imprimées sur le silicium.
Le jeu d’instructions de l’architecture CISC peut comporter des instructions de
longueur variable qui nécessitent parfois plusieurs cycles d’horloge. Du fait qu’un processeur
basé sur une telle architecture ne peut exécuter qu’une seule instruction à la fois, le temps
d’exécution devient alors non négligeable.

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

II.2. Modes d’adressage en assembleur

Le mode d’adressage représente la syntaxe de spécification d’une donnée dans une


instruction, et qui a une incidence sur la taille de l’instruction qui varie de 1 à 4 octets. 5
modes d’adressage sont disponibles :
- l’implicite,
- l’immédiat,
- le relatif,
- le direct,
- l’indirect.

a. Le mode d'adressage implicite

Ce mode d’adressage correspond à une instruction qui ne comporte aucun opérande.


L'instruction est composée du code de l’opération uniquement avec une taille de 1 à 2 octets.
De telles instructions portent généralement sur des registres, à l’exemple des opérations
d'incrémentation ou de décrémentation d'un registre.
Format :
code opération (sur 1 ou 2 octets)

b. Le mode d'adressage immédiat

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).

code opération (sur 1 ou 2 octets) code opérande (sur 1 ou 2 octets)

c. Le mode d'adressage relatif

L'adressage relatif fait référence à l’utilisation d’un champ opérande contenant un


entier relatif appelé déplacement qui porte sur un octet. Cet adressage est utilisé pour les
sauts, l’entier désigne la longueur du saut que le processeur doit effectuer dans les
instructions.

code opération (sur 1 octet) code opérande (sur 1 octet)

d. Le mode d'adressage direct

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.

code opération (sur 1 ou 2 octets) code opérande (2 octets)

e. Le mode d'adressage indirect

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]

II.3. Les instructions du langage assembleur


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 :
12
- Les instructions d’accès mémoire : accès à la mémoire par le programme ou transferts de
données entre registres.
Exemple : MOV destination, source

- Les instructions d’opérations arithmétiques : addition, soustraction, division,


multiplication.
Exemple : ADD destination, source
00101100
ET
00000100
MUL destination, source
DIV destination, source
SUB destination, source
MOD destination, source
INC destination
DEC destination

- Les instructions d’opérations logiques : ET, OU, NON, OU exclusif …


Exemple : OR destination, source
AND destination, source
NOR destination, source
NAND destination, source
XOR destination, source

- Les instructions de contrôle : contrôles de séquence, branchements conditionnels et


inconditionnels ...
Instruction de création d’une étiquette dans un programme assembleur
Nometiquette :
CMP destination, source
JL etiquette
JLE etiquette
JG etiquette
JGE etiquette
JE etiquette
JNE etiquette
JMP etiquette

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.

Squelette d’un programme assembleur


Assume DS:Data,CS:Code
Data segment

Data Ends
Code segment

Code ends

Syntaxe de déclaration d’une variable


nomVariable db
dw

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

; Affichage du quotient si non nul


CMP BH, 0
JE Suite
MOV DL, BH
ADD Z, 48
MOV AH, 2
INT 21h
Suite :
; Affichage du reste
MOV DL, BL
ADD Z, 48
MOV AH, 2
INT 21h
Code ends

Ecrire un programme qui permet de lire et d’afficher un nombre X (sur 2 octets)


de taille quelconque
X <= 65535 (sur 2 octets, représentation non signée)
Exemple : séquence de lecture de 12345
X=0
X = X*10 + 1 => X = 1
X = X*10 + 2 => X = 12
X = X*10 + 3 => X = 123
X = X*10 + 4 => X = 1234
X = X*10 + 5 => X = 12345
Répétition de la lecture du chiffre et de son insertion dans X : 5 fois
Par convention :
- l’utilisateur du programme saisira un chiffre <= 65535
- CH = Compteur du nombre de répétition de 1 à 5

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

Ecrire un programme assembleur qui prend les entiers X, Y et Z en entrée et les


affiche par ordre croissant.

Programme de lecture d’un nombre de 4 chiffres


Assume DS:Data,CS:Code
Data segment
Compteur db
Acc dw
Data Ends
Code segment
Mov Acc, 0
Mov Compteur, 0
Repeter :
MOV AH, 1
INT 21h
Sub AL, 48
Mul Acc, 10
Add Acc, Al
Inc Compteur
Cmp Compteur, 3
Jle Repeter
Code ends

Instruction assembleur Signification Contenu des variables et


registres
Mov Acc, 0 Acc ← 0 Acc = 0
MOV AH, 1 Lecture du premier AH = 1
INT 21h nombre = 1 AL = 1
Sub AL, 48 Acc = 0
Mul Acc, 10 Placer le premier nombre AH = 1
Add Acc, Al lu dans l’accumulateur AL = 1
Acc = 0*10+1=1
MOV AH, 1 Lecture du deuxième AH = 1
INT 21h nombre = 2 AL = 2
17
Sub AL, 48 Acc = 1
Mul Acc, 10 Placer le deuxième AH = 1
Add Acc, Al nombre lu dans AL = 2
l’accumulateur Acc = 1*10+2=12
MOV AH, 1 Lecture du troisième AH = 1
INT 21h nombre = 3 AL = 3
Sub AL, 48 Acc = 12
Mul Acc, 10 Placer le troisième AH = 1
Add Acc, Al nombre lu dans AL = 3
l’accumulateur Acc = 12*10+3=123
MOV AH, 1 Lecture du quatrième AH = 1
INT 21h nombre = 4 AL = 4
Sub AL, 48 Acc = 12
Mul Acc, 10 Placer le quatrième AH = 1
Add Acc, Al nombre lu dans AL = 4
l’accumulateur Acc = 123*10+4=1234
Principe d’affichage du nombre lu
L’un des principes utilisés repose sur l’inversion du nombre à afficher avant de
procéder à l’affichage unité par unité du nombre inversé. L’inversion se fait en divisant
successivement le nombre par 10, à placer le reste dans un accumulateur, jusqu’à un quotient
nul. L’affichage du nombre ainsi inversé se fait également en divisant successivement le
nombre par 10, à afficher le reste à l’écran, jusqu’à un quotient nul.

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

L’utilisation d’une machine passe par un schéma de commande-réponse. Une


commande (ou tâche lorsqu’elle est encours d’exécution) est un ordre donné à la machine par
l’utilisateur, auquel la machine est tenue d’apporter une réponse. Les commandes peuvent être
classées en deux catégories selon qu’elles soient :
- incorporées au noyau du système d’exploitation. Ce noyau est chargé en mémoire
RAM à partir d’un disque de stockage permanent lors de la phase de démarrage de la
machine,
- sous forme de fichiers autonomes qui doivent être recherchés et chargés en mémoire
lorsque l’utilisateur sollicite leur exécution.

Le microprocesseur est le composant interne d’un PC chargé d’exécuter les


commandes. Présentées sous un autre aspect, les commandes sont synonymes de programmes,
c'est-à-dire un ensemble d’instructions élémentaires qui concourent à la réalisation d’une
tâche spécifique. Une commande se présente ainsi sous forme de fichier exécutable dont la
production en informatique suit le schéma suivant :

Code source Code


Compilateur exécutable

Figure 12 : Etapes de production de fichiers exécutables

- Le code source est un ensemble d’instructions de base écrit par un programmeur en


utilisant les lettres de l’alphabet, les chiffres, les symboles et en respectant la syntaxe
d’un langage de programmation. Il se présente sous forme de fichier généralement de
type texte.
- Le compilateur est un programme chargé d’effectuer la conversion du code source
vers le code compréhensible par la machine appelé code exécutable. Il se présente
sous forme de fichier exécutable.
- Le code exécutable est une série de bits qui représentent les ordres élémentaires
compréhensibles par la machine. Le code exécutable est produit ou généré dans un
fichier exécutable.

Dans sa perception modulaire, un système d’exploitation est un ensemble de fichiers,


dont des fichiers exécutables. Il comporte un noyau constitué de fichiers qui sont installés en
mémoire RAM à partir d’un disque de stockage permanent lors de la phase de démarrage de
la machine. La façade visible d’un système d’exploitation par un utilisateur est entre autres,
l’interpréteur de commande qui peut être en mode texte appelé aussi mode interactif. Ce mode
était utilisé par excellence par le passé avec les anciennes versions des systèmes
d’exploitation tels que le MS-DOS ou l’environnement terminal d’Unix et ses dérivées. Dans
le mode texte ou mode ligne ou mode interactif, les commandes sont principalement lancées
avec le clavier. L’utilisateur saisit le nom de la commande suivi éventuellement de paramètres
et/ou d’arguments et valide l’ensemble en appuyant sur la touche "Entrée". L’appui sur cette
touche lance le processus d’exécution de la commande.

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

Figure 13 : Cycle d’exécution des commandes

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.

III.2. Gestion de la mémoire

La mémoire RAM peut être considérée sans différenciation de ses caractéristiques


techniques et de ses divers modes de fonctionnement, comme l’espace dans lequel transitent
nécessairement les programmes pour être exécutés par le microprocesseur. L’évitement de la

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.

La mémoire est un constituant fondamental de l’ordinateur auquel est assignée la


performance de rapidité d’accès. Son temps d’accès doit dans l’idéal être inférieur au temps
d’exécution d’une instruction, de façon à ne pas freiner la CPU. Le second critère de
performance assigné à la mémoire est celui de la disponibilité de son espace en quantité
suffisante. Pour satisfaire ces deux critères, la mémoire est construite comme une hiérarchie
de couches. La couche supérieure est constituée de registres internes du processeur fabriqués
dans les mêmes matériaux que ce dernier et donc de même niveau de performance. Leur
capacité de stockage varie de 32 bits x 32 bits sur un processeur 32 bits à 64 bits x 64 bits sur
un processeur 64 bits.
La mémoire cache principalement contrôlée par le matériel est divisée en lignes de
cache, généralement de 64 octets chacune et adressées de manière contigüe. A la demande
d’accès à une case mémoire émanent d’un programme, le système d’exploitation vérifie
d’abord que la ligne est dans le cache sur deux cycles d’horloge, le cas échéant, l’accès à la
mémoire principale est nécessaire avec plus de temps requis.
La mémoire RAM est la mémoire principale dont le temps d’accès est meilleur que
celui d’un disque dur, lui-même meilleur qu’un accès à une bande magnétique.

Temps d’accès Capacité

1 nano seconde (ns) < 1Ko


Registres
2 ns 1 Mo
Cache
10 ns Mémoire principale > 512 Mo

10 milli seconde Disque dur multiple de 100 Go

100 secondes Bande magnétique > 100 Go

23
III.3. Notion de processus

Lorsqu’un utilisateur sollicite l’exécution d’une commande, la commande étant par


exemple un fichier représentant un programme, ce fichier est transféré de son support de
stockage permanent (disque dur, clé USB, CD-ROM, …) vers la mémoire RAM en subissant
une transformation. Lorsqu’une commande représentée par un fichier est transférée en
mémoire pour être exécutée, elle prend le nom et la forme de processus. Un processus se
définit comme l’image d’un programme en cours d’exécution. Chaque processus est pourvu
d’un espace d’adressage dans lequel il peut lire et écrire. Il occupe un ensemble d’adresses
mémoire allant de 0 à une limite donnée. Cet espace mémoire contient le code du programme
à exécuter, les données manipulées par le programme, ainsi que des données qui sont propres
à l’environnement matériel.

Quatre événements provoquent la création d’un processus :


1. L’initialisation du système,
2. L’exécution d’un appel système de création de processus par un processus en cours
d’exécution,
3. Une requête utilisateur sollicitant la création d’un nouveau processus,
4. L’initialisation d’un travail de traitement par lot.

Les formes de fin d’un processus sont :


1. Arrêt normal (par le processus lui-même),
2. Arrêt pour cause d’erreur (par le processus lui-même),
3. Arrêt pour cause d’erreur fatale (involontaire),
4. Arrêt par un autre processus (involontaire).

III.4. Les états d’un processus

En cours
d’exécution
1
3
2
Bloqué Prêt
4

Figure 26 : Graphe des transitions des états d’un processus [2]


Légende :
1. Le processus est bloqué en attente d’une donnée,
2. L’ordonnanceur choisit un autre processus dans la file d’attente,
3. Un processus est élu par choix de l’ordonnanceur,
4. La donnée attendue par le processus bloqué devient disponible.

III.5. Gestion de l’espace disque

Le stockage des données

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 :
-+-----+-++---+--++--+---++-++++-+++-+-+

L’organisation du stockage sur disque

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

Le formatage logique consiste à placer un système de fichiers sur un espace disque.


Lorsqu'une partition de disque a été formatée, elle est référencée en tant que volume. Le
système de fichiers placé sur l’espace disque consiste en des structures nécessaires au
stockage et à la gestion de données. Ces structures comportent généralement un
enregistrement d'amorçage du système d'exploitation. Cet enregistrement contient toutes les
informations nécessaires au chargement du système et aussi les informations relatives aux
opérations de lecture/écriture qui seront réalisées par le système. Ces structures sont
composées entre autres de tables, de fichiers et des répertoires. De façon générale, un système
de ficher permet de :
- suivre l'espace disque libre et l'espace disque alloué,
- gérer les répertoires et l’attribution de noms aux fichiers et répertoires,
- suivre l'emplacement dans lequel les différentes parties de chaque fichier sont
physiquement stockées sur le disque.

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).

Les types de systèmes de fichiers

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.

Le système de fichiers NTFS


Il est implanté sous les versions Windows Nt/2000/Xp et utilise la table permanente de
fichiers MFT (Master File Table) ainsi que des clusters, sans dépendance entre la taille d’un
cluster et la taille du volume. La taille d’un cluster peut être inférieure à 512 octets qui est la
taille d’un secteur. L'utilisation des clusters de plus petite taille réduit la quantité d'espace
perdue. Le système NTFS améliore nettement les performances du système FAT. Il permet
d’exploiter les dispositifs de sécurité des fichiers et des dossiers (répertoires), tout en intégrant
un dispositif de compression de dossiers avec la possibilité pour les fichiers compressés de
rester utilisables. La taille maximale théorique d’une partition NTFS est de 2 à la puissance 64
octets, c'est-à-dire 16 téraoctets. Le système de fichiers NTFS rajoute des propriétés
supplémentaires d'un fichier par rapport à ceux des autres systèmes, notamment la notion de
propriétaire, de groupes d’utilisateurs et de droits d’accès aux fichiers et répertoires.

Les autres systèmes de fichiers


La liste des systèmes de fichiers est très étendue et peut être complétée de façon
exhaustive par :
- Le système de fichiers NetWare File System (NWFS) intégré dans le système
d’exploitation Novell.
- Le système de fichiers Linux Ext 2 intégré dans les versions d’Unix pour ordinateurs
personnels.
- Les autres systèmes de fichiers, notamment UNIX, le HPFS (High Performance File
System), XENIX, l’AFS (Acer Fast file System), l’EAFS (Extended Acer Fast file System),

Représentation des répertoires


La structure ci-dessus représentant l’implantation physique d’un fichier ne porte pas le
nom du fichier. Ce nom est associé à la table du répertoire auquel le fichier appartient. La
table de répertoire permet de mettre en correspondance un nom de fichier avec un i-node. Le
répertoire est considéré comme un fichier ordinaire, disposant d’un i-node, avec la restriction
qui impose que seul le système puisse le modifier. Dans ces précédentes versions des
systèmes de fichiers, un fichier de type répertoire comporte 16 octets pour chaque fichier
membre de ce répertoire : 2 octets pour l'i-node, et 14 pour le nom du fichier, ce qui a pour
effet de limiter le nom d'un fichier à au plus 14 caractères. Les systèmes de fichiers ont

26
évolué en permettant un nombre plus grand de caractères dans les noms des fichiers et
répertoires.

Table des fichiers et répertoires

Nom Propriétés N° inode


… … …
… … …

Table des i-nodes

Mode Liens Données


… … …
… … …
Axe de rotation

Plateaux du disque dur

Figure 35 : Liaison table des fichiers et répertoires, table des i-nodes, disque

La création d'un répertoire se traduit par l’association automatique par le système à ce


répertoire, de deux fichiers qui sont eux-mêmes des répertoires. Le premier est nommé ".."
représentant le répertoire père, le second nommé "." est le répertoire lui-même. Soit
l’exemple d’une arborescence dans laquelle figurent deux répertoires de noms Etudiant et
Stagiaire. Le premier contient les fichiers Algo et tp, le second, les fichiers Emploi et
Travaux. La représentation arborescente donne la figure suivante :

Etudiant Stagiaire

Algo tp Emploi Travaux

Figure 31 : Exemple d’une arborescence partielle

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

Figure 32 : Répertoire Etudiant Répertoire Stagiaire

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.

Principe d’accès à un fichier

L’i-node est la première information utilisée pour accéder à un fichier. Le système


d’exploitation utilise le numéro d’i-node du répertoire de départ, puis y accède, pour chercher
le nom du prochain répertoire du chemin à emprunter. Avec le nom retrouvé, le système
récupère le i-node de ce répertoire et le mécanisme d’accès est appliqué au nouvel i-node,
ainsi de suite, jusqu’à l’inode de l’objet recherché.

Exemple : Soit à accéder au fichier /usr/include/stdio.h de l’arborescence décrite ci-dessous.


Table du répertoire : /

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

Table du répertoire : include

de i-node : 80
I-node Nom
81 stdio.h
90 .

Figure 33 : Représentation des répertoires

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.

Cette opération constituant le mécanisme de chargement n’est effectuée qu’à


l’ouverture du fichier. L’i-node du fichier à charger est recopié en mémoire dans une table du
système d’exploitation, ainsi qu’une copie à jour du super-bloc. La commande sync permet à
l’utilisateur de lancer la mise à jour des i-nodes et des blocs de données des fichiers ouverts.
Cette mise à jour est recommandée de façon fréquente. Tout de même, le système procède à
ses propres mises à jour périodiquement. Du fait que l’ouverture d’un fichier occasionne
plusieurs accès au disque, pour l’amélioration des temps d’accès, il est recommandé de
limiter un répertoire à 64 fichiers pour qu’il tienne dans un seul bloc de données.

Notion de chemin d’accès absolu ou méthode absolue d’accès aux objets


Un chemin désigne la liste des répertoires à traverser pour aller d’un point de départ
vers une destination. Le chemin d’accès absolu constitue la liste des répertoires à traverser
pour aller à l’objet de destination à partir de la racine. Son point de départ est la racine. De ce
fait, sous Unix, un chemin d’accès absolu commence toujours par le caractère ‘/’ appelé
"slash". Puisque la racine d’un système de fichiers est unique, le chemin d’accès absolu de
tout objet est unique quelque soit le répertoire dans lequel se trouve l’utilisateur (appelé
répertoire courant). Dans un chemin d’accès absolu ou relatif, les caractères ‘/’ utilisés en
dehors du début du chemin ne sont que de simples séparateurs. Les chemins d’accès aux
objets sont le plus souvent utilisés comme argument des commandes de manipulation des
fichiers et répertoires, ou pour désigner explicitement leur emplacement au système.
Exemple :
Dans l’arborescence de la figure 34 précédente, supposons que le répertoire courant d’un
utilisateur soit /bin. La commande pwd lui permet d’en obtenir la confirmation. Pour exécuter
la commande représentée par le fichier calc.exe en utilisant le chemin d’accès absolu, la
syntaxe de la commande à taper est la suivante :
/home/Etudiant/calc.exe
Pour visualiser le contenu du fichier factoriel.c en utilisant le chemin d’accès absolu, la
commande more est utilisée avec le chemin d’accès absolu à ce fichier comme argument,
conformément à la syntaxe suivante :
more /home/Etudiant/tp/factoriel.c

Notion de chemin d’accès relatif ou méthode relative d’accès aux objets


Le chemin d’accès relatif est constitué de la liste de répertoires à traverser pour aller à
l’objet de destination à partir du répertoire courant. Son point de départ est le répertoire
courant de l’utilisateur. De ce fait, un chemin d’accès relatif ne commence jamais par ‘/’ et
varie en fonction du répertoire dans lequel se trouve l’utilisateur. En rappel, les caractères ‘/’
non en début de chemin sont utilisés comme séparateurs des noms des objets. De même, les
chemins d’accès relatifs peuvent également accompagner les commandes en position
d’arguments ou pour désigner explicitement l’emplacement des objets sur une ligne de
commande.
Exemple :
En reprenant le texte de l’exemple précédent avec /bin comme répertoire courant, et en
remplaçant les chemins d’accès absolus par les chemins relatifs, la commande d’exécution du
fichier calc.exe est la suivante :
../home/Etudiant/calc.exe

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

Vous aimerez peut-être aussi