Extension d'adresse physique – comment fonctionnent les adresses virtuelles?

Je cours Debian Linux. uname -m dit i686 qui signifie machine d'architecture 32 bits avec drapeau pae activé. getconf LONG_BIT est 32 . La capacité RAM installée est de 6 Go.

Mon /proc/cpuinfo a une address sizes : 40 bits physical, 48 bits virtual input address sizes : 40 bits physical, 48 bits virtual . Cependant, mon programme ne génère que l'adresse 32 bits. (L' Address of x is 0xbfbaf5cc )

Je ne comprends pas la relation entre l'adresse virtuelle 48 bits affichée par cat /proc/cpuinfo et l'adresse virtuelle générée par le programme C. Des informations complètes sur le processeur peuvent être trouvées ici.

Quelqu'un pourrait-il expliquer?

PAE ne change rien aux adresses virtuelles. Comme son nom l'indique, il ne s'agit que d'adresses physiques. En tant que programmeur d'application, PAE ne change rien pour vous. Votre programme dispose toujours d'un espace d'adressage 32 bits, dont le kernel prend environ 1 bit (Linux octroie 1 Go, 2 Go ou 3 Go à l'espace user selon les options de compilation). Si vous souhaitez un espace d'adressage plus important, vous avez besoin d'un système 64 bits.

Le sharepoint PAE est de permettre au kernel d'adresser plus de 4 Go de RAM physique. Afin d'utiliser toute cette RAM, vous avez besoin de plusieurs process, dont chacun peut mapper au maximum 2 Go (ou 1 Go ou 3 Go).

En mode PAE, les tables MMU mappent des adresses virtuelles 32 bits en adresses physiques 40 bits, avec une table à trois niveaux (contrairement au mode non-PAE où les tables MMU mappent des adresses virtuelles 32 bits en adresses physiques 32 bits avec deux table de niveau).

L'indication "48 bits virtuel" fait reference aux capacités de la CPU. Je pense que cela signifie que le processeur est un 64 bits (c'est-à-dire celui qui prend en charge amd64 alias x86-64 ). Pour utiliser des adresses virtuelles 48 bits, vous devez exécuter un operating system 64 bits. Ici 48 bits est un peu déroutant pour un programmeur d'application: l'unité centrale ne traduit que 48 bits de l'adresse, mais l'adresse est codée en 64 bits – les pointeurs occupent 8 octets, pas 6. Les 16 bits supérieurs peuvent contenir des balises supplémentaires utilisées par le operating system .

Pae stand pour l'extension d'adresse physique et permettre un processeur avec un bus d'adresse 32 bits pour adresser plus de 4G.

Notez que si votre support /proc/cpuinfo ne supporte pas pae , vous devez utiliser un kernel compilé avec les options pae activées (par exemple: j'utilise un package Debian 3.16-2-686 pae)

Le model de memory / la disposition d'un process Linux est défini par le kernel Linux et est (ou peut être) différent entre les architectures, un process user ne verrait jamais toute la RAM physique (seulement le kernel), disons que le kernel peut autoriser le process pour utiliser théoriquement 2G, mais en réalité, ceux-ci ne sont utilisés qu'en cas de besoin avec des pages (généralement chacune de taille 4K ou 16K) que le kernel mappe du Ram physique dans le process.