Les microprocesseurs ne sont pas tous capables de gérer la même
quantité de mémoire ; cela dépend du nombre de lignes
d'adresses.
- Le 8080 avec un bus d'adressage de 16 lignes pouvait adresser 216
= 64 ko
- Les 8088 et 8086 des premiers PC avait 20 lignes d'adresses, 220
= 1 Mo
- Les 80286 pouvaient adresser jusqu'à 16 Mo ( adresse en 24 bits)
- Les 80386 peuvent gérer 4 Go ( adresses 32 bits)
- Les Pentium ont 36 bits d'adresse
Le MS-DOS a été développé pour les 8088 et
8086. Ces microprocesseurs traitaient des mots de 16 bits et le bus d'adressage
en comptait 20. Cela a deux conséquences :
- la segmentation de l'adresse
- l'impossibilité de former des adresses
de plus de 20 bits.
1° La segmentation des adresses
Puisqu'il n'y avait pas de registre assez large pour contenir une adresse
de 20 bits il a fallu codifier ces adresses au moyen de deux nombres.
Elles sont exprimées sous la forme segment:offset
.
Le segment est ici un bloc mémoire dont
l'adresse est un multiple de seize. L'offset exprime
un déplacement par rapport à cette adresse de base. La correspondance
entre l'adresse physique et l'adresse sous forme
segment : offset est la suivante :
Adresse physique = Segment * 16 + Offset
Ainsi, l'adresse physique B8000 s'écrit
sous la forme B000:8000 mais elle pourrait tout
aussi bien s'écrire B800:0000 . Le calcul
est relativement simple, à condition bien sûr d'écrire
ces nombres en hexadécimal. La multiplication de la valeur du segment
par 16 se fait en décalant ce nombre d'un chiffre hexadécimal
(4 bits) vers la gauche. On ajoute ensuite la valeur de l'offset.
Segment * 16 + Offset = Adresse physique |
B000 + 8000 B8000 |
B800 + 0000 B8000 |
Le DOS n'a pas été prévu pour exploiter plus d'un
méga octets ( 1 Mo)
Seuls les premiers 640 ko pouvaient servir pour y charger les applications,
c'est ce qu'on appelait la mémoire conventionnelle.
Les derniers 384 ko ( la mémoire supérieure
ou UMA, Upper Memory Area) étaient
réservés pour la mémoire vidéo, la ROM du
BIOS et des plages mémoires à attribuer aux cartes d'extension.
Le DOS occupait de 40 à 90 ko au début de la mémoire. Le reste des 640 ko était occupé par quelques petits programmes résidents et par une application ( DOS était monotâche et mono-utilisateur)
N.B. Les
applications se contentaient souvent de quelques dizaines de ko. A l'époque,
pour exploiter la mémoire restée libre, on avait la possibilité
d'y créer un disque virtuel. Celui-ci, puisqu'il utilisait
la mémoire au lieu d'un disque physique, avait une vitesse extraordinaire.
Les temps ont bien changé puisque actuellement malgré les
centaines de méga bytes de mémoire dont nous disposons nous
recourons aujourd'hui à de l'espace sur le disque pour y faire
un complément de mémoire virtuelle.
Les processeur 80286 et suivants disposent de 24 lignes d'adresse ou
plus. L'espace mémoire disposé au-delà du premier
Mo est appelé mémoire étendue
( XMS Extended Memory Specification).
Les systèmes d'exploitation plus récents gèrent la
mémoire étendue qu'ils partagent entre les applications.
Ces OS sont multitâches, il leur faut un mode de fonctionnement
spécial : le mode protégé.
Le système d'exploitation joue le rôle d'arbitre qui distribue
la mémoire aux applications en veillant à ce qu'aucune n'interfère
dans les zones mémoires réservées aux autres.
Ce mode n'est pas accessible au DOS qui lui continue de fonctionner en
mode réel comme si le processeur n'était rien
de plus qu'un 8086.
Le mode virtuel 8086 est quant à
lui le mode opératoire où l'on se trouve quand on passe
en mode invite de commande à partir de Windows. Le système
d'exploitation simule l'environnement dont MS-DOS a besoin tout en l'empêchant
d'outrepasser les possibilités d'un simple 8086.
![]() | |
Remarque préalable : | Les explications qui suivent cherchent uniquement à démystifier les instructions sibyllines que vous risquez de rencontrer dans les fichiers CONFIG.SYS et AUTOEXEC.BAT. Soyons clair, la bonne méthode pour utiliser efficacement la mémoire d'un PC est bien entendu d'utiliser un système d'exploitation récent. |
La mémoire paginée
Ce système développé conjointement par Lotus, Intel
et Microsoft offrait une mémoire supplémentaire baptisée
EMS (Expanded Memory Specification) qui
ne devait pas nécessairement être contiguë avec le premier
Mo. Cet espace de stockage était accessible via un segment de 64
ko à l'adresse D 0000 ou E 0000 de la mémoire haute, accessible
au DOS puisqu'elle se trouvait en deçà de la limite du Mo.
Ce segment de 64 ko était subdivisé en quatre fenêtres
de 16 ko contenant chacune une copie d'une partie de la mémoire
EMS. Pour y accéder, on utilisait un gestionnaire de périphérique
appelé EMM (Expanded Memory Manager- gestionnaire
de mémoire paginée) installé au démarrage
par la directive telle que DEVICE = EMM386.SYS
inscrite dans le fichier CONFIG.SYS .
Le gestionnaire de mémoire HIMEM.SYS
Une autre façon d'utiliser cette mémoire étendue sous DOS est de s'en servir comme cache disque. Le disque étant un élément très lent les performances du PC sont nettement améliorées si des accès aux disques peuvent être remplacés par des accès rapides dans des tampons mémoires. C'est pour cette raison que les fichiers AUTOEXEC.BAT sous DOS faisaient systématiquement appel à l'utilitaire SMARTDRV. Le fichier CONFIG.SYS contient quant à lui un appel au gestionnaire de mémoire HIMEM.SYS qui gouverne toute la mémoire étendue et la redistribue aux applications qui se conforment aux spécifications XMS.
Utiliser les emplacements libres dans la mémoire supérieure
Nous avons vu que la mémoire supérieure,384 Ko entre les
adresses A0000 et FFFFF est réservée au matériel
: le BIOS de la carte mère, les BIOS et des RAM de cartes d'extension
( réseau, vidéo, audio ...). Dans les faits, tout l'espace
disponible n'est pas utilisé. Il y a donc des zones disponibles
appelées Upper Memory Blocks
UMB.
D'autre part, quand on compare la mémoire physique installée
avec la mémoire reconnue par le système, c'est à
dire la mémoire conventionnelle plus la mémoire étendue,
on constate qu'il manque bien souvent 384 ko ! Ces 384 ko de la mémoire
haute ne peuvent cohabiter avec les octets des barrettes RAM qui se trouvent
aux mêmes adresses. Ils sont donc ignorés.
Les blocs UMB inutilisés correspondent donc bien à des zones
de la RAM qui seraient exploitables. On peut y loger des programmes résidants
et des gestionnaires de périphérique. C'est faisable à
partir des 386 en installant le driver HIMEM.SYS et le gestionnaire EMM386.EXE
puis en indiquant "DOS=UMB" dans CONFIG.SYS
Utiliser la mémoire haute
La mémoire haute HMA High Memory Area
est une zone mémoire qui est accessible en mode protégé
bien qu'elle soit au-delà du premier Mo. Il s'agit des 64 ko situés
à partir du segment FFFF, autrement dit depuis l'adresse FFFF:0000
jusqu'en FFFF:FFFF.
Cette zone est utilisable en installant le driver HIMEM.SYS. L'instruction
DOS=HIGH dans CONFIG.SYS commande au DOS
de se placer en mémoire haute pour laisser plus de place en mémoire
conventionnelle. Il est aussi possible de placer des gestionnaires de
périphériques en mémoire haute par les instructions
DEVICEHIGH dans CONFIG.SYS ou LOADHIGH dans AUTOEXEC.BAT.