В чем преимущество многоступенчатой ​​подкачки в x86 над одной страницей? - PullRequest
1 голос
/ 01 мая 2020

Рассмотрим 32-битную схему подкачки x86 для конкретного примера. Из руководства разработчика Intel я нашел следующий рисунок, на котором описано, как 32-разрядный пейджинг может преобразовывать линейный адрес в физический адрес.

Paging diagram

I не понимают преимущества этого трехэтапного процесса, например, над большей частью линейного адреса, используемого для индексации страницы, и затем младших 12 бит, используемых для индексации этой страницы.

Причина Я не понимаю, что необходимость в трехэтапном процессе заключается в том, что, конечно, он не может каким-то образом получить доступ к большему количеству страниц, чем 2 ^ 20, так как он имеет только такое количество бит в линейном адресе (исключая страницу смещение). Помимо отсутствия доступа к другим страницам, я не могу представить, что он будет иметь более высокую производительность.

1 Ответ

3 голосов
/ 01 мая 2020

Имейте в виду, что этот дизайн взят из Intel 80386, выпущенного в 1985 году, и с тех пор практически не изменился.

Запись таблицы страниц занимает 4 байта. Если вам нужно 2 ^ 20 записей таблицы страниц, это 4 МБ памяти только для вашей таблицы страниц. Сегодня это может показаться разумным, но по стандартам 1985 года это возмутительно. Память в те дни стоила около 1000 долларов за мегабайт , и большинство людей привыкли иметь 640K или меньше.

Кроме того, если вы собираетесь использовать многозадачность, которая была основным достижением 386, вам нужна отдельная таблица страниц для каждой задачи. Умножьте это на $ 4000, умноженное на другое большое число; Unix пользователи уже привыкли бы к возможности запуска десятков процессов одновременно.

Большинству процессов не потребовалось бы где-то около 4 ГБ виртуальной памяти: опять же, вряд ли кто-то имел где-либо подобное много физической памяти или даже дискового пространства. Настоящему борову памяти (возможно, Emacs?) Мог понадобиться один или два мегабайта. При двухуровневой структуре вам нужно только столько записей таблицы страниц, сколько фактически используется страниц памяти, плюс немного больше для каталога страниц. Большинство записей каталога страниц не понадобятся и могут быть помечены как неиспользуемые, без необходимости указывать страницу таблицы страниц. Таким образом, вашей памяти может потребоваться всего несколько килобайт для накладных расходов на подкачку.

Конечно, для достижения дополнительного уровня требуется еще несколько циклов, но это разумный компромисс для экономии памяти на тысячи долларов. Как бы то ни было, процессор кэшировал записи таблицы страниц, поэтому ему не приходилось часто просматривать их в памяти.

...