Иерархические таблицы страниц для отдельных процессов: почему бы нам не использовать простой линейный массив? - PullRequest
0 голосов
/ 18 июля 2011

Я хотел бы знать, почему нам нужны иерархические таблицы страниц в ОС, которые обрабатывают таблицы процессов для каждого процесса, используя регистры PTBR и PTLR в ЦП (обычно хранятся в печатной плате).
Благодаря PTLR я могу проверить ограничение размера таблицы страниц для текущего процесса, поэтому его таблица страниц будет содержать только записи для его пространства адресной памяти (которое будет не таким большим, как пространство памяти системного адреса).
Если виртуальное адресное пространство процесса не является разреженным (номера его виртуальных страниц равны 0, 1, 2, ...), у меня будет таблица страниц процесса не более чем из K записей: в целом его размер будет не более нескольких МБ и я думаю, что было бы лучше использовать простой непрерывный массив.
Итак, почему многие реальные решения (например, x86 и x64) основаны на многоуровневых таблицах страниц (или хэшированных таблицах страниц)?

Спасибо.

1 Ответ

0 голосов
/ 17 августа 2011

Поскольку разреженное виртуальное адресное пространство хорошо . Разреженное адресное пространство позволяет ОС аварийно завершать работу программы, которая преследует (некоторые) дикие указатели, и делает практичными предварительно связанные общие библиотеки, и, возможно, наиболее полезной из всех, это позволяет вашему стеку расти из «верхнего» конца памяти и вашей кучи с "нижнего" конца. Конечно, вы можете определить индекс таблицы страниц как целое число со знаком , что позволит вам реализовать последнюю функцию с помощью простого массива.

Кроме того, подумайте о распределении «переполнение памяти» - когда вы выделяете несколько гигабайт, ОС может сказать «конечно, хорошо!», Зная, что большинство программ, которые запрашивают несколько гигабайт, оказывается, используют только небольшую их часть , У вас могут быть проблемы с поддержкой таких вещей с простым массивом, который не слишком велик.

...