Как Linux поддерживает более 512 ГБ диапазона виртуальных адресов в x86-64?

Пользовательское виртуальное адресное пространство для x86-64 с Linux имеет длину 47 бит. По сути, это означает, что Linux может отображать процесс с диапазоном виртуальных адресов около 128 ТБ.

Однако меня смущает то, что архитектура x86-64 поддерживает определенную ISA 4-уровневую иерархическую таблицу страниц (организованную в виде дерева счисления) для каждого процесса. Корень таблицы страниц может отображать только до 512 ГБ непрерывного виртуального адресного пространства. Так как же Linux может поддерживать более 512 ГБ диапазона виртуальных адресов? Использует ли он несколько таблиц страниц для каждого процесса? Если да, то что для процесса должен содержать CR3 (регистр x86-64, содержащий адрес базы таблицы страниц) для любого данного процесса? Я что-то пропустил?

5
задан Andrew Tomazos 30 June 2012 в 13:57
поделиться