Как многоуровневая таблица страниц сохраняет пространство памяти?
Я пытаюсь понять, как многоуровневая таблица страниц сохраняет память. По моему мнению, многоуровневая таблица страниц в общей сложности потребляет больше памяти, чем одноуровневая таблица страниц.
Пример. Рассмотрим систему памяти с размером страницы 64 КБ и 32-разрядным процессором. Каждая запись в таблице страниц составляет 4 байта.
Одностраничная таблица страниц: 16 (2 ^ 16 = 64 КБ) бит должны представлять смещение страницы. Таким образом, остальные 16 бит используются для индексации в таблицу страниц. Итак,
* Размер таблицы страниц = 2 ^ 16 (# страниц) * 4 байта (размер каждой записи в таблице) = 2 ^ 18 байтов *
Таблица многоуровневых страниц. В случае двухуровневой таблицы страниц можно использовать первые 10 самых значащих битов для индексации в таблицу страниц первого уровня. Следующие 10 бит для индексации в таблицу страниц второго уровня, которая имеет номер страницы для сопоставления числа кадров. Rest 12-бит представляет смещение страницы.
Размер таблицы страниц второго уровня = 2 ^ 10 (# записей) * 4 байта (размер каждой записи) = 4 КБ
Общий размер всех таблиц страниц второго уровня = 2 ^ 10 (# таблиц страниц второго уровня) * 4 КБ (размер каждой таблицы страниц второго уровня) = 4 МБ
Размер таблицы страниц первого уровня = 2 ^ 10 (# записей) * (10/8) Байт (размер каждой записи) = 1,25 КБ
Общая память, необходимая для хранения таблиц страниц первого и второго уровня = 4 МБ + 1,25 КБ
Поэтому нам нужно больше памяти для хранения многоуровневых таблиц страниц.
Если это так, как многоуровневые таблицы страниц сохраняют пространство памяти?
Ответы
Ответ 1
- В одноуровневой раскладке вам нужна вся таблица для доступа к небольшому количеству данных (меньше ссылок на память). т.е. 2 ^ 20 страниц, каждый PTE занимает 4 байта, как вы предполагали.
Пространство, необходимое для доступа к любым данным, составляет 2 ^ 20 * 4 байта = 4 МБ
- Пейджинговые страницы - это многоуровневый пейджинг. В многоуровневой подкачке более конкретно, вы можете с помощью многоуровневой организации решить, какую конкретную страницу среди 2 ^ 20 страниц ваши данные существуют, и выбрать ее. Поэтому здесь вам нужно только, чтобы определенная страница была в памяти во время запуска процесса.
В двухуровневом случае, который вы обсуждали, вам нужен 1-й уровень, а затем 1 из 2 ^ 10 pagetables на втором уровне.
Так,
Размер 1-го уровня = 2 ^ 10 * 4 байта = 4 КБ
2-го уровня нам нужно только 1 среди 2 ^ 10 pagetables = так что размер 2 ^ 10 * 4bytes = 4KB
Требуемый общий размер: 4 КБ + 4 КБ = 8 КБ.
Окончательное сравнение - 4 МБ против 8 КБ.
Ответ 2
Вот основное преимущество многоуровневых таблиц страниц:
Сначала нарисуйте таблицу страниц в единицах размера страницы; то, если не указана целая страница записей таблицы страниц (PTE), не размещайте эту страницу в таблице страниц.
Источник (раздел 20.3)
Таким образом, объем памяти, необходимый для таблицы страниц, не определяется размером адресного пространства, а объемом памяти, который использует этот процесс.
Кроме того, страница записей таблицы страниц сама может быть выгружена, если физическая память заполнена - в памяти всегда присутствует только каталог страниц.
Ответ 3
В первую очередь необходимы многоуровневые таблицы, потому что если структура памяти в Intel-land.
Предположим, что у вас 32-битная система, и вы делите адресное пространство, чтобы верхняя часть была зарезервирована для системы, а нижняя половина - для адресов пользователей.
При таком разделении вам понадобится записи смежных страниц таблицы на 2 ГБ в каждой таблице пользовательских страниц для достижения системных адресов.
Старый VAX - простой подход к этому. Он разделял адресное пространство 4 ГБ на 4 региона (2 пользователя, 1 система, одна непригодная для использования). У трех используемых областей была своя таблица страниц.
В каждом регионе была своя таблица страниц. Поскольку имелось выделенное системное адресное пространство, таблицы пользовательских страниц могли быть виртуальными адресами, поэтому они не требовали бы непрерывной памяти.
Первой фазой перевода адреса был просмотр двух битов адреса высокого порядка для выбора используемой таблицы страниц.
Вместо отдельных таблиц страниц Intel-land разбивает таблицу страниц. Это уменьшает проблемы (1) необходимости непрерывной памяти для таблицы; (2) требует, чтобы таблица страниц охватывала полное адресное пространство; (3) позволяет определять адреса ядра, которые могут быть разделены всеми процессами.