64 -битная карта виртуальной памяти x86 разделяет адресное пространство на две части :нижняя секция (с верхним битом, установленным на 0 )является пользовательским -пространством, верхняя секция (со значением верхнего бита 1 )— это пространство ядра -. (Обратите внимание, что x86 -64 определяет «канонические» адреса «младшей половины» и «старшей половины» с числом битов, фактически ограниченным 48 или 57; подробности см. в Википедии .)
Полная карта подробно документирована в ядре ; в настоящее время это выглядит как
Начальный адрес | Смещение | Конечный адрес | Размер | Описание области ВМ |
---|---|---|---|---|
0000_0000_0000_0000 | 0 | 0000_7fff_ffff_ffff | 128 ТиБ | пользователь -пространство виртуальная память |
0000_8000_0000_0000 | +128 ТиБ | ffff_7fff_ffff_ffff | ~16 М ТиБ | не -канонический |
ffff_8000_0000_0000 | -128 ТиБ | ffff_ffff_ffff_ffff | 128 ТиБ | ядро -виртуальная память пространства |
с 48 -битными виртуальными адресами. 57-битный вариант -имеет ту же структуру.с 64 ПиБ доступного адресного пространства по обе стороны от отверстия 16 КБ:
Начальный адрес | Смещение | Конечный адрес | Размер | Описание области виртуальной машины |
---|---|---|---|---|
0000_0000_0000_0000 | 0 | 00ff_ffff_ffff_ffff | 64 ПиБ | пользователь -пространство виртуальная память |
0100_0000_0000_0000 | +64 ПиБ | feff_ffff_ffff_ffff | ~64K ПиБ | неканонический | не -
ff00_0000_0000_0000 | -64 ПиБ | ffff_ffff_ffff_ffff | 64 ПиБ | ядро -виртуальная память пространства |
(Обратите внимание, что 16KPiB = 16MTiB = 2 64 байт. Подавляющее большинство доступного адресного пространства не является -каноническим.)
Обе эти схемы обеспечивают доступ к одному и тому же физическому адресному пространству, используя 52 адресных строки (4 ПиБ ). Пейджинг уровня 4 -обеспечивает доступ только к подмножеству 256 ТиБ в любой момент времени; Пейджинг уровня 5 -обеспечивает доступ ко всему физическому адресному пространству. Текущие процессоры x86 могут обрабатывать гораздо меньше; насколько мне известно, максимальный размер процессора с одним сокетом составляет 6 ТБ.
В отличие от случая с 32 -битами, карта памяти «64 -бит» является прямым отражением аппаратных ограничений.
64 -бит ARM имеет аналогичное различие адресов в аппаратном обеспечении :верхние двенадцать или шестнадцать битов равны 0 для пространства пользователя -, 1 для пространства ядра -. Linux использует 39, 42 или 48 бит для виртуальных адресов, в зависимости от количества уровней таблицы страниц и размера страницы. В ARMv8.2 -LVA добавляются еще четыре бита, что приводит к 52 -битным виртуальным адресам.
Это также подробно описано в ядре .