Les limites de mémoire théoriques sur les machines 16, 32 et 64 bits sont les suivantes:
16 bits = 65 536 octets (64 kilo-octets)
32 bits = 4 294 967 296 octets (4 gigaoctets)
64 bits = 18 446 744 073 709 551 616 (16 exaoctets)
Je me souviens de DOS / Windows 3.11 jours, que la mémoire 16 bits pouvait être séparée en segments, de sorte qu'une machine 16 bits pouvait accéder à une plus grande quantité de mémoire que 64 kilo-octets.
J'ai une machine avec 16 Go de mémoire, et je double le démarrage d'un système d'exploitation 32 bits et d'un système d'exploitation 64 bits. Je peux accéder à tous les 16 Go à partir de 64 bits, mais seulement 3,21 Go en 32 bits.
Donc, ma question est, si les systèmes d'exploitation 16 bits permettaient un accès à la mémoire supérieur à 64 Ko en raison de la segmentation de la mémoire, pourquoi les machines 32 bits ne suivent-elles pas le même principe?
Au lieu de l'expliquer moi-même, je vais laisser quelqu'un qui doit maintenir un noyau avec le support PAE parler de ses manières charmantes, Linus Torvalds
Gardez également à l'esprit que la prise en charge PAE dans les versions Windows 32 bits est très coûteuse. XP ne pourra même pas utiliser normalement 4 Go de RAM, car MS a choisi de ne pas activer les fonctionnalités PAE dessus. Un noyau étroitement lié, Windows 2003 Server, prend en charge PAE. Cependant, même là, votre «édition standard» ne prendra en charge que jusqu'à 4 Gio (mais en contournant le trou de mémoire du BIOS), tandis que les éditions plus chères autoriseront alors jusqu'à 64 Gio de RAM. Il en va de même pour Vista 32 bits .
Cependant, dans tous les cas, cette limitation n'est pas imposée par Windows. Si tel était le cas, le démarrage d'un noyau Linux compatible PAE vous permettrait tout de même d'utiliser les 4 Gio (ou plus). Non, certains fabricants de matériel ont choisi d'imposer cette limitation au niveau du BIOS, bien que le processeur et le chipset soient capables de gérer le PAE.
Juste une remarque: aucun des processeurs 64 bits actuels basés sur x86 ne peut même adresser physiquement la plage complète de l'espace d'adressage 64 bits (pour référence, voir cette question et réponses).
la source
Les processeurs 8 bits avaient généralement un bus d'adresse 16 bits. (Motorola avait un bus d'adresse unifié, une RAM et des E / S périphériques partageant le même espace d'adressage, Intel a choisi de diviser les deux. Dans le cas d'Intel, les limites d'adresse d'E / S des 8088 et 8086 ont reporté les limites du 8080 et 8085 processeurs.)
Les 8088 et 8086 d'Intel avaient un bus d'adresse mémoire de 20 bits (1 Mo), tandis que le 68000 de Motorola avait un bus d'adresse de 24 bits (16 Mo). IIRC, le [80] 286 est passé à un bus d'adresse 24 bits. Les deux se sont ensuite étendus à un bus d'adresse 32 bits avec respectivement [80] 386 et 68020.) Avec les puces Pentium, le bus d'adresse s'est étendu à 64 bits. (Je pense que les puces PowerPC de Motorola / IBM ont également utilisé un bus d'adresse 64 bits.)
La mémoire disponible ci-dessous et au maximum accessible directement par le CPU n'était limitée que par les puces matérielles (chipset) et le système d'exploitation pris en charge. Bill Gates était célèbre dans le passé pour avoir déclaré que personne n'avait besoin de plus de 640 Ko de RAM, donc DOS n'a jamais évolué pour accéder directement à plus de RAM. Avec HiMem.sys et EMM386, DOS a été étendu pour accéder à davantage de mémoire "supérieure", EMM386 étant utilisé pour accéder directement à toute la RAM disponible. HiMem.sys avait moins de flexibilité et pouvait essentiellement utiliser la RAM supplémentaire pour le stockage.
La mémoire dépassant cette limite a nécessité une MMU (Memory Management Unit) pour diviser la mémoire en segments et la mapper dans l'espace mémoire adressable de la CPU. C'est ainsi que le CoCo 3, le Commodore 128 et d'autres ordinateurs 8 bits pouvaient accéder à plus de 64 Ko de RAM.
Il est désormais plus avantageux d'utiliser la mémoire virtuelle pour étendre les limites de mémoire physique passées, bien qu'avec les limites imposées par le système d'exploitation.
la source
Parce qu'il n'y a aucune raison pratique de le faire. Les extensions d'adresse physique permettent à peu près la même fonctionnalité et leur utilisation est encore très limitée parmi les utilisateurs. Dans les jours Windows 3.1, il y avait des contraintes qui ne sont tout simplement pas présentes aujourd'hui.
la source
Le défaut fondamental ici est la notion que la "largeur de bit" du processeur, qui est généralement la taille des registres à usage général de la machine, est nécessairement la même que la largeur des adresses RAM.
Dans x86 avec la pagination activée, mais sans PAE, les adresses utilisées par le programme et le code du système d'exploitation sont appelées «adresses linéaires» par Intel - nous les appelons généralement «adresses virtuelles». Ils ont une largeur de 32 bits. Cela permet un espace d'adressage virtuel de 4 Gio.
Mais c'est plus ou moins une coïncidence, simplement un artefact du format des entrées de table de pages que la taille d'une adresse physique (RAM) est également de 32 bits.
Avec PAE, ce dernier est de 36 bits (au début ... plus large dans les implémentations ultérieures). Ainsi, ce n'est pas parce que c'est, par exemple, une "machine 32 bits" que les adresses de mémoire physique sont limitées à 32 bits.
L'industrie a une longue histoire de machines dont la "largeur de bit" ne correspond pas à leur taille d'adresse physique maximale. Par exemple, l'architecture VAX définit une machine 32 bits, et les adresses virtuelles (qui sont les adresses utilisées par le code une fois la traduction d'adresse activée) ont en effet une largeur de 32 bits ... mais les adresses physiques du VAX n'ont que 30 bits de largeur - et la moitié de l'espace d'adressage physique est consacrée aux registres de périphériques d'E / S, de sorte que la RAM maximale n'était que de 512 Mo.
Même sans matériel de traduction d'adresse, il n'est pas nécessairement vrai que la "largeur de bit" de la machine définit l'adresse RAM maximale. Exemple: La série CDC "Upper 3000" était constituée de machines 36 bits. Pensez-vous qu'ils pourraient traiter 64 Go de RAM? Pas à peine! Ces machines sont sorties au milieu des années 60! Heck, nous ne pouvions même pas avoir 64 Go d' espace disque à l'époque. (La série CDC 6000 était des machines 60 bits. Dois-je continuer?)
la source