Как операционная система знает / отслеживает, какая часть физического ОЗУ свободна, чтобы она могла отобразить адрес виртуальной страницы в таблице страниц на физический фрейм в ОЗУ при ошибке страницы?

3 ответа3

3

Память отслеживается MMU (блоком управления памятью). MMU - это аппаратная часть, которая является частью процессора. С более старым оборудованием MMU может быть отделен от процессора.

MMU имеет то, что называется таблицей страниц. Таблица страниц отображает номера виртуальных страниц на номера физических страниц в основной памяти. Обычно каждая ячейка виртуальной памяти или "страница" занимает пару килобайт. Каждое из этих сопоставлений индивидуально отслеживается в таблице страниц. Они известны как записи таблицы страниц (PTE).

Когда происходит сбой страницы, MMU отправляет сигнал обратно в CPU, сообщая ему, что произошла ошибка. Затем ОС пытается найти запасной кадр ОЗУ и затем запрашивает PTE для сопоставления виртуального адреса с физическим адресом.

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

0

Чтобы немного расширить ответ DrZoo, операционная система несет полную ответственность за (каким-то образом ...) знание текущего статуса и владения всеми "страницами" физического хранилища. Он также отвечает за знание виртуальной ситуации каждого процесса.

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

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

0

ОС должна поддерживать структуры данных, отслеживая использование каждого фрейма страницы физической памяти. Однако это зависит от ОС - ниже приведено упрощенное описание того, как Linux это делает.

Ядро Linux имеет массив дескрипторов страниц, по одному для каждого фрейма страницы в оперативной памяти. Какому фрейму страницы соответствует дескриптор страницы, определяется индексом дескриптора страницы в массиве дескрипторов. Каждый дескриптор содержит, помимо прочего, набор флагов и счетчик ссылок, указывающий, свободна ли страница или нет.

В верхней части массива дескрипторов страниц в Linux реализована система распределения памяти друзей для группировки свободных фреймов страниц в списки, содержащие группы смежных фреймов страниц. Первый список содержит дескрипторы отдельных фреймов страницы, вторые группы из двух смежных фреймов страницы, третьи группы из четырех смежных фреймов страницы и так далее. Блоки всегда размещаются в размерах по 2 тыс. Страниц. При успешном выполнении запроса порядка k блок удаляется из свободного списка k. Если в списке k нет доступных блоков, блок в списке более высокого порядка можно разделить, а остальные части переместить в списки более низкого порядка, в зависимости от ситуации.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .