как работает пейджинг страниц в unix-системах?

Пытаюсь изучить книгу "Понимание ядра Linux", но остановился на разделе "Обычное пейджинг". Теперь я понял, зачем нужен пейджинг, что за понятие под ним, но... многого не могу понять. Зачем нужна подкачка страниц таблицы (страниц? Не помню) и как она работает? То есть да, размер одной страницы таблицы был бы слишком большим, но если при преобразовании между линейным и физическим адресом ядро ​​выбирает какую-то страницу таблицы по первой части lin. доп., он должен найти весь набор страниц таблицы где-то в оперативной памяти, так что... почему бы не сделать одну гигантскую страницу таблицы, если место уже потрачено впустую? И потом, в книге написано, что размерность каждой записи на странице таблицы 32 бита, но... если страницы 4кб, то почему бы не использовать этот факт? мы знаем, что последние 12 бит равны 0, так почему бы не оставить их неявными? Я знаю, что все эти вещи, которые я сказал, неверны, я сказал их только для того, чтобы лучше объяснить мои сомнения. (извините за корявый английский)


person umbesco    schedule 11.05.2020    source источник
comment
почему бы не использовать этот факт? мы знаем, что последние 12 бит равны 0, так почему бы не оставить их неявными? - Последние 12 бит фактически используются для неадресных вещей. См., например. osdev.   -  person Tsyvarev    schedule 11.05.2020


Ответы (1)


Разбиение дескрипторов страниц на несколько таблиц имеет следующие преимущества:

  1. Гранулярность. Если ваша программа использует только три страницы (текст, данные, стек), все эти дескрипторы страниц могут находиться в одной таблице страниц, а накладные расходы памяти будут очень низкими — одна таблица листовых страниц плюс несколько внутренних узлов.

  2. Разреженность. Подобно эффективности, корневая таблица (каталог) должна содержать только записи для действительных частей адресного пространства; остальные указатели таблицы могут быть установлены на недопустимые страницы, поэтому их не нужно заполнять.

  3. Обмен. Вполне возможно, что не только память, но и сами таблицы страниц могут быть разделены между процессами для больших объектов общей памяти. IIRC solaris назвал это «интимной общей памятью» (ISM). Точно так же такие вещи, как сопоставления ядра, могут быть полностью разделены между несколькими процессами.

  4. Представление. Обычные 64-битные архитектуры используют 47-битное адресное пространство. При степени детализации 4k страниц для линейной карты потребуется 2^35 дескрипторов страниц каждые 8 ​​байт. Простое обнуление этого количества оперативной памяти занимает 48 секунд на моем скрипящем Mac Pro. Это будет стоимость запуска процесса.

person mevets    schedule 13.05.2020