Jak to się dzieje, że dany adres wirtualny (tylko przykład):
Adres wirtualny ffffffffa08f9533
odpowiada adresowi fizycznemu: 0x24a5adff8
Mam tylko 0x200000000 (8 gb) ilości fizycznejpamięć (zakładając, że pierwszy adres to zero - prawdopodobnie błędne założenie), więc zwrócony adres fizyczny znajduje się poza moją prawdziwą pamięcią fizyczną. Co ja robię źle?
Funkcje, których używam to:
virt_to_phys
& phys_to_virt
Dzięki
Odpowiedzi:
0 dla odpowiedzi № 1Komputery PC mają pewne przestrzenie adresowe, które nie sązwiązane z rzeczywistą pamięcią RAM. Kilka dni temu zainstalowałem kartę graficzną z 4 GB pamięci RAM. Ale są też inne urządzenia na PC z własną pamięcią, do której CPU może nadal uzyskać dostęp: kontrolery RAID, karty sieciowe, karty I / O obsługujące DMA.
W czasach przed 64-bitowych te obszary pamięci musiały być mapowane gdzieś w fizycznej przestrzeni adresowej pamięci RAM. Co oznaczało, że można zainstalować więcej niż 3,5 GB pamięci RAM na komputerze, ale nie można go użyć.
W procesorach 64-bitowych wszystkie te obszary pamięci mogą być teraz mapowane gdzieś poza rzeczywistą / normalną pamięcią RAM.
W systemie Linux można uzyskać bieżący układ 64-bitowej pamięci fizycznej /proc/iomem
Związane z: Pobieranie mapy pamięci każdego urządzenia w systemie Linux