Následující obrázek ukazuje, jak je rozdělen virtuální adresní prostor 32bitového procesu:
Ale jak je rozdělen virtuální adresní prostor 64bitového procesu?
Přijatá odpověď:
x86
64bitová mapa virtuální paměti x86 rozděluje adresní prostor na dva:spodní část (s horním bitem nastaveným na 0) je uživatelský prostor, horní část (s horním bitem nastaveným na 1) je prostor jádra. (Všimněte si, že x86-64 definuje „kanonické“ adresy „dolní poloviny“ a „vyšší poloviny“ s počtem bitů efektivně omezeným na 48 nebo 56; podrobnosti naleznete na Wikipedii.)
Kompletní mapa je podrobně zdokumentována v jádře; aktuálně to vypadá
Spustit adr | Odsazení | Ukončit adresu | Velikost | Popis oblasti virtuálního počítače |
---|---|---|---|---|
0000_0000_0000_0000 | 0000_7fff_ffff_ffff | 128 TiB | virtuální paměť uživatelského prostoru | |
0000_8000_0000_0000 | +128 TiB | ffff_7fff_ffff_ffff | ~16M TiB | nekanonický |
ffff_8000_0000_0000 | -128 TiB | ffff_ffff_ffff_ffff | 128 TiB | virtuální paměť v prostoru jádra |
se 48bitovými virtuálními adresami. (56bitová varianta má stejnou strukturu s 64 PiB použitelného adresního prostoru na každé straně otvoru 16K PiB.)
(Upozorňujeme, že 16KPiB =16MTiB =2 bajty.)
Na rozdíl od 32bitového případu je „64bitová“ mapa paměti přímým odrazem hardwarových omezení.
ARM
64bitový ARM má podobné rozlišení adres v hardwaru:horních šestnáct bitů je 0 pro uživatelský prostor, 1 pro kernel-space. Linux používá pro virtuální adresy 39, 42 nebo 48 bitů v závislosti na počtu úrovní tabulky stránek a velikosti stránky. S ARMv8.2-LVA jsou přidány další čtyři bity, což vede k 52bitovým virtuálním adresám.
To je také podrobně zdokumentováno v jádře.