Как разделить виртуальное адресное пространство 64-битного процесса в Linux?

12

На следующем рисунке показано, как разделено виртуальное адресное пространство 32-разрядного процесса:

введите описание изображения здесь

Но как разделить виртуальное адресное пространство 64-битного процесса?

Кристофер
источник

Ответы:

10

Карта 64-битной виртуальной памяти x86 разделяет адресное пространство на две части: нижняя часть (с верхним битом, установленным в 0), является пользовательским пространством, верхняя часть (с верхним битом, установленным в 1), является пространством ядра. (Обратите внимание, что x86-64 определяет «канонические» адреса «младшая половина» и «верхняя половина», с количеством битов, ограниченным 48 или 56; подробности см. В Википедии .)

Полная карта подробно документирована в ядре ; в настоящее время это выглядит как

========================================================================================
    Start addr    | Offset  |     End addr     |  Size   | VM area description
========================================================================================
                  |         |                  |         |
 0000000000000000 |    0    | 00007fffffffffff |  128 TB | user-space virtual memory
__________________|_________|__________________|_________|______________________________
                  |         |                  |         |
 0000800000000000 | +128 TB | ffff7fffffffffff | ~16M TB | non-canonical
__________________|_________|__________________|_________|______________________________
                  |         |                  |         |
 ffff800000000000 | -128 TB | ffffffffffffffff |  128 TB | kernel-space virtual memory
__________________|_________|__________________|_________|______________________________

с 48-битными виртуальными адресами. (56-битный вариант имеет такую ​​же структуру, с 64 ПБ доступного адресного пространства по обе стороны от отверстия 16 КБ.)

В отличие от 32-битного случая, «64-битная» карта памяти является прямым отражением аппаратных ограничений.

Стивен Китт
источник
Чтобы уточнить: это ограничение наложено на оборудование. В настоящее время нет реализации 64-битного процессора, которая не оставляет огромную дыру в непригодных для использования адресах в середине виртуального адресного пространства. Объем физической памяти, который могут
обрабатывать
Спасибо @Johan, я попытался выделить это.
Стивен Китт