Многоуровневые и инвертированные таблицы страниц
Проблема размера
Одноуровневая таблица должна иметь запись на каждую возможную виртуальную страницу:
| Архитектура | Страниц | Размер таблицы |
|---|---|---|
| 32 бита, страница 4 КиБ, запись 4 Б | 2²⁰ | 4 МиБ на процесс |
| 48 бит, страница 4 КиБ, запись 8 Б | 2³⁶ | 512 ГиБ на процесс! |
Но процесс использует ничтожную часть адресного пространства: код внизу, стек вверху, между ними пустота.
Многоуровневая таблица
Номер страницы делится на части. Первая часть — индекс в таблице верхнего уровня, её запись указывает на таблицу следующего уровня, и так далее. Для пустых участков таблицы нижних уровней не создаются.
i386: два уровня
1024 записи по 4 байта = 4 КиБ — каждая таблица ровно в одну страницу.
x86-64: четыре уровня
512 записей по 8 байт = 4 КиБ. 48-битное пространство = 256 ТиБ. Новые процессоры поддерживают и 5 уровней (57 бит).
Цена многоуровневости
Каждый уровень — ещё одно обращение к памяти. При промахе TLB в 4-уровневой схеме, чтобы прочитать одну ячейку, нужно 4 + 1 = 5 обращений.
Задача 7
«4-х уровневая организация таблиц страниц» означает: каждый промах TLB стоит 4 служебных обращения к памяти — по одному на чтение записи каждого уровня. Это главный множитель в ответе.
Поэтому критически важен TLB — следующий урок. Дополнительно процессоры кешируют записи верхних уровней (кеши структур подкачки), но в учебных задачах этим обычно пренебрегают.
Инвертированная таблица страниц
Другой подход к размеру: хранить запись не на каждую виртуальную страницу, а на каждый физический кадр.
| Плюсы | Минусы |
|---|---|
| размер пропорционален физической памяти, а не виртуальной, и не зависит от числа процессов | поиск по виртуальному адресу медленный — нужен хеш, коллизии |
| одна таблица на систему | сложно разделять кадр между процессами (у кадра одна запись) |
| при промахе всё равно нужно знать, где страница на диске, — ядро хранит обычные структуры процесса |
Используется: PowerPC (хешированная таблица страниц, которую аппаратура просматривает при промахе TLB), IA-64 (как вариант), исторически IBM System/38 и RT PC.
В ядрах ОС с прямыми таблицами тоже есть структура «по кадру»: в Linux — массив struct page (по одному на физический кадр) с обратными отображениями (rmap) «какие PTE ссылаются на этот кадр». Страничному демону это нужно, чтобы при вытеснении кадра найти и исправить все отображения.
Задача 2: инвертированная таблица страниц
Это структура данных ядра уровня управления физическими ресурсами: она описывает физические кадры памяти. На архитектурах вроде PowerPC её просматривает и аппаратура при промахе TLB — тогда это ещё и аппаратный уровень. Обычная таблица страниц — уровни ядра и аппаратуры (MMU обходит её на x86).
Итог
- Одноуровневая таблица слишком велика; многоуровневая создаёт таблицы только для используемых участков.
- i386: 2 уровня по 10 бит; x86-64: 4 уровня по 9 бит; число записей = страница / размер записи.
- Каждый уровень — одно обращение к памяти при промахе TLB.
- Инвертированная таблица — запись на физический кадр, одна на систему, поиск через хеш; PowerPC.
Практика решено 0 из 6
Сколько обращений к памяти нужно MMU, чтобы обойти 4-уровневую таблицу страниц при промахе TLB (не считая самого обращения к данным)?
Страница 512 байт, запись таблицы — 8 байт, таблица каждого уровня занимает ровно одну страницу. Сколько записей в одной таблице?
При параметрах из предыдущего задания и 4 уровнях: сколько бит виртуального адреса транслируется (смещение + индексы)?
Сравните обычную (прямую) и инвертированную таблицы страниц.
| Прямая (многоуровневая) | Инвертированная | |
|---|---|---|
| Одна запись на виртуальную страницу | ||
| Одна запись на физический кадр | ||
| Своя таблица у каждого процесса | ||
| Одна таблица на всю систему | ||
| Размер зависит от объёма физической памяти | ||
| Поиск по номеру страницы — прямой индекс | ||
| Поиск — через хеш по (PID, номер страницы) | ||
| Легко отобразить один кадр в несколько процессов |
Чем хороша многоуровневая таблица по сравнению с одноуровневой?
Где используется инвертированная (хешированная) таблица страниц?
Войдите, чтобы отмечать пройденные уроки.