Адресация виртуальной памяти
Linux использует трехуровневую структуру таблицы страниц, состоящую из следующих типов таблиц (каждая отдельная таблица имеет размер, равный одной странице).
• Каталог страниц. Активный процесс имеет единый каталог страниц, размер которого равен одной странице. Каждая запись в каталоге страниц указывает на одну страницу промежуточного каталога страниц. Каталог страниц активного процесса должен находиться в активной памяти.
• Промежуточный каталог страниц. Промежуточный каталог страниц может охватывать несколько страниц. Каждая запись промежуточного каталога указывает на одну страницу таблицы страниц.
• Таблица страниц. Таблица страниц также может охватывать несколько страниц. Каждая запись таблицы страниц указывает на одну виртуальную страницу процесса.
Для использования трехуровневой структуры таблицы страниц виртуальный адрес в Linux рассматривается как состоящий из четырех частей. Левое (наиболее значащее) поле используется в качестве индекса в каталоге страниц; следующее поле служит в качестве индекса в промежуточном каталоге страниц. Третье поле представляет собой индекс таблицы страниц, а четвертое — смещение в пределах страницы памяти.
Структура таблицы страниц Linux платформонезависима и разработана для работы с 64-битовым процессором Alpha, который обеспечивает аппаратную поддержку трехуровневой страничной организации. При использовании 64-битовых адресов использование только двух уровней может привести к тому, что таблицы и каталоги страниц будут очень большими. 32-битовая архитектура Pentium/x86 обладает только двухуровневым механизмом страничной организации, и программное обеспечение Linux использует двухуровневую схему путем определения размера промежуточного каталога, равного одной странице.