Je travaille sur un petit noyau x86. J'accède et tente de lire la carte de mémoire fournie par GRUB dans l'en-tête multiboot. J'ai un processeur Intel i3 et 4 GiB de RAM. Lors de l'exécution sur cette machine, je lis la carte mémoire suivante:Carte mémoire affiche plus de RAM que physiquement disponible
--Base Address-- --Length-- --Type--
0x0000000000000000 0x000000000009d000 0x1
0x000000000009d000 0x0000000000003000 0x2
0x00000000000e0000 0x0000000000020000 0x2
0x0000000000100000 0x00000000bb53f000 0x1
0x00000000bb63f000 0x0000000000080000 0x2
0x00000000bb6bf000 0x0000000000100000 0x4
0x00000000bb7bf000 0x0000000000040000 0x3
0x00000000bb7ff000 0x0000000000001000 0x1
0x00000000bb800000 0x0000000004800000 0x2
0x00000000e0000000 0x0000000010000000 0x2
0x00000000feb00000 0x0000000000004000 0x2
0x00000000fec00000 0x0000000000001000 0x2
0x00000000fed10000 0x0000000000004000 0x2
0x00000000fed18000 0x0000000000002000 0x2
0x00000000fed1b000 0x0000000000005000 0x2
0x00000000fee00000 0x0000000000001000 0x2
0x00000000ffe80000 0x0000000000180000 0x2
0x0000000100000000 0x0000000038000000 0x1
Quand je total les zones de mémoire disponible, je reçois ...
0x1 (Disponible)-3893,8 MiB
Ce qui semble à peu près juste, laissant le dernier MiB 200ish réservé aux autres appareils. Le seul problème est le total des autres types de mémoire:
0x2, 0x3, 0x4 à 331,5 MiB
Mettre ma quantité totale de RAM à 4225,3 MiB ou un peu plus de 4,1 Gio, qui me conduit à mes questions:
Pourquoi suis-je totalisant plus de 4GiB de RAM quand je n'ai 4GiB installé?
Pourquoi la dernière adresse de base dans la carte mémoire 0x0000000100000000? Avec seulement 4 Go de RAM, 32 bits devraient être la taille d'adresse maximale nécessaire pour répondre à tous. Suis-je mal compris quelque chose ici?
De nombreuses plages d'adresses ne sont pas nécessairement mémoire réelle, ils peuvent à la carte DMA/affichage/etc. –
True, mais cela crée-t-il un besoin de 0,875 Go pour être en dehors de la plage de 32 bits? – Joel