From madore@news.ens.fr
Path: eleves!not-for-mail
From: madore@news.ens.fr (GroTeXdieck)
Newsgroups: ens.forum.alt.bavardage.louze
Subject: Re: biggest louze ever...
Date: 23 Apr 1999 18:28:27 GMT
Lines: 61
Sender: madore@clipper.ens.fr
Message-ID: <7fqe4b$bnq$1@clipper.ens.fr>
References: <7flou0$n9m$1@clipper.ens.fr> <7fnacv$2tf$1@clipper.ens.fr> <7fnmfg$gnd$1@clipper.ens.fr> <7fpbog$5rv$1@clipper.ens.fr> <7fpmo1$ftb$1@clipper.ens.fr>
NNTP-Posting-Host: clipper.ens.fr
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
X-Trace: clipper.ens.fr 924892107 12026 129.199.129.1 (23 Apr 1999 18:28:27 GMT)
X-Complaints-To: forum@clipper.ens.fr
NNTP-Posting-Date: 23 Apr 1999 18:28:27 GMT
X-Newsreader: Flrn (0.4pre1 - 03/99)
X-Censorship: no
Xref: eleves ens.forum.alt.bavardage.louze:179

Révisons nos classiques.

Le 8080 avait 16 bits de bus d'adresse, un point c'est tout.  Donc il
pouvait accéder à 64ko de mémoire.  Ses registres étaient
(principalement) de 16 bits.

Les 8086, pour faciliter le passage du 8080 au 8086, a introduit
l'adressage segmenté, où l'adresse référencée par segment:offset est
segment*0x10+offset.  Avec segment et offset tous deux sur 16 bits.  On
a donc 1Mo de mémoire adressable, divisée en segments de 64ko, un
segment commençant tous les 16 octets.  Le processeur a 4 registres de
segment : un pour le code, un pour les données, un pour la pile et un
supplémentaire (qui sert entre autres de destination dans les
instructions de copie de chaînes de caractères).  Intel introduit des
« modèles mémoire » : dans le modèle « tiny », tous les registres de
segments ont la même valeur et on accède donc effectivement à 64ko de
mémoire ; c'est le modèle utilisé par les exécutables .com et il imite
le modèle mémoire du 8080 de manière assez transparente.  Dans le
modèle « small », les registres ont des valeurs différentes mais ne
changent pas : on a donc 64ko pour le code, 64ko pour les données, 64ko
pour la pile.  Si on veut plus, il faut faire des accès « far »,
c'est-à-dire aller chercher le mot en mémoire en changeant d'abord la
valeur du registre de segment, puis en lisant le segment à l'offset
voulu ; le modèle « large » fait des accès far dans le code et les
données et donc utilise effectivement les 1Mo d'espace adressable ; les
modèles « medium » (64ko de données, plusieurs segments de code) et
« compact » (plusieurs segments de données, 64ko de code) sont des
compromis.  En tout cas, ça chie, et l'arithmétique des pointeurs est
lourde au possible.

De plus, comme le fait remarquer Bip, sur le PC, IBM a décidé de
limiter la mémoire vive aux premiers 640ko de mémoire (1Mo semblait
tellemeng gigantesque à l'époque) en plaçant la ROM en 0xf0000 et la
mémoire vidéo en 0xb0000...

Le 80286 brise la barrière des 640ko en introduisant le mode protégé :
les segments ne se réfèrent plus à l'adresse segment*0x10 mais à une
table (la GDT - ou la LDT) qui maintient en plus les informations de
protection.  L'espace adressable est de 16Mo, l'espace virtuel est
potentiellement de 1Go, mais il est découpé en petits bouts de 64ko (un
segment ne peut pas dépasser cette valeur).  En plus, le retour du mode
protégé au mode réel (le mode du 8086) n'est pas prévu et il faut
procéder par une magouille immonde comme MXK le remarque (forcer un
shutdown, qui sera suivi d'un reset provoqué par je ne sais plus quel
contrôleur secondaire, et demander au BIOS de ne pas vraiment
réinitialiser la machine mais de revenir à une certaine adresse
donnée).  Bref, le mode protégé, utilisé par OS/2, et (je crois)
Windows 2, n'a pas beaucoup de succès - pas plus que ces OS,
d'ailleurs.

Avec l'i386, Intel introduit un processeur 32 bits.  Les segments
peuvent être aussi gros que tout l'espace adressable, soit 4Go.  La
pagination vient s'ajouter à la segmentation.  (Il semblerait que
Windows NT utilise les deux ; Linux et les *BSD utilisent seulement la
segmentation, en mettant toute la mémoire dans un seul segment
(« flat » memory model) parce que l'adressage de pointeurs lointains
est trop pénible.)

Et maintenant, Intel a à nouveau des problèmes pour dépasser les 4Go
d'espace adressable.  Il semble que le PPro monte à 16Go mais je ne
sais pas bien comment (voir du côté des MTRR).

