Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
8.10.11.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
6 Мб
Скачать
☆

Подкачка страниц

Зачастую, чтобы раскрыть внутреннее устройство компонента ОС, достаточно задать два важных вопроса:

• Какие механизмы использует этот компонент для выполнения своей задачи?

• Какой стратегии подчиняются эти механизмы?

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

Часто процессор предоставляет примитивные механизмы подкачки стра­ниц, которые дополняет система виртуальной памяти. Средство подкачки (pager), код диспетчера виртуальной памяти, перемещающий страницы между памятью и диском, является важным промежуточным звеном между аппаратными меха­низмами и стратегией, определяемой программными средствами:

•Когда происходит страничная ошибка, оно делает недействительную страницу действительной (например, путем загрузки ее с диска).

•Оно обеспечивает страничную защиту для недействительных страниц и расширяет аппаратные возможности защиты действительных.

•Оно поддерживает и обновляет структуры данных управления памятью.

Помимо этого, средство подкачки обеспечивает выполнение стратегии под­качки, определяемой диспетчером виртуальной памяти.

50. Механизмы подкачки страниц. Механизмы подкачки страниц

Все процессоры, которые поддерживают виртуальную память, делают это по-разному. Таким образом, код, непосредственно работающий с аппаратным обеспечением виртуальной памяти, не является переносимым, и его приходит­ся изменять для каждой новой аппаратной платформы. В лучшем случае, как в Windows NT, этот код невелик и хорошо изолирован.

Информация из данного раздела специфична для MIPS R4000 и являет со­бой пример взаимодействия между диспетчером виртуальной памяти и процес­сором. Большая часть этой информации применима и для CISC-процессоров Intel, но для простоты процессоры Intel здесь подробно не обсуждаются.

MIPS R4000 содержит два модуля: 32-разрядный RISC блок вычислений (называемый СР1) и отдельный модуль, выполняющий трансляцию адресов и обработку исключений (СРО). СРО автоматически перехватывает любой исполь­зуемый программой адрес и транслирует его в физический адрес. Если страни­ца, содержащая адрес, является действительной (находится в памяти), то СРО находит ее и считывает информацию. Если страница недействительна (отсут­ствует в памяти), то СРО генерирует страничную ошибку, и вызывается средство подкачки диспетчера виртуальной памяти.

рис. 6-9. Обращение к справочному буферу трансляции.

Для ускорения доступа к памяти MIPS R4000 (так же как и процессоры Intel) имеет массив ассоциативной памяти , так называемый справочный буфер трансляции (translation lookaside buffer , TLB). Ассоциативная память , каковой является TLB , - это вектор , ячейки которого могут одновременно считываться и сравниваться с целевым значением . В случае TLB вектор содержит отображение виртуальных адресов в физические для страниц , которые использовались самыми последними , а так же атрибуты защиты для каждой из них. Упрощённая схема TLB показана на рисунке 6-9.

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

Для поиска страниц , отсутствующих в TLB , ядро и диспетчер виртуальной памяти используют таблицы страниц , создаваемые программно. Таблицы страниц используются большинством систем виртуальной памяти; в одних случаях они реализованы аппаратно , в других – программно. Концептуально таблица страниц напоминает структуру данных , приведённую на рис.6-10.

Вход таблицы страниц (page table enter , PTE) содержит всю информацию , необходимую системе виртуальной памяти для поиска страницы , когда поток обращается по адресу к ней. В простой системе виртуальной памяти недействительный вход означает , что страница отсутствует в физической памяти и её нужно загрузить с диска. Генерируется исключение страничной ошибки , программное обеспечение подкачки страниц загружает запрашиваемую страницу в память и обновляет таблицу страниц. Процессор повторно исполняет команду вызвавшую страничную ошибку. На этот раз, однако, вход таблицы страниц яв­ляется действительным, и обращение к памяти выполняется успешно.

MIPS R4000 использует 32-разрядные адреса , т. е. для каждого процесса доступно 232 виртуальных адресов. Процессор объединяет виртуальные адреса в страницы длиной 212 байт (4 Кбайт), что дает 220, или 1.048.576 страниц в каждом адресном пространстве. Если один вход таблицы страниц имеет размер 4 байт (212), то для отображения всей виртуальной памяти требуется 1024 (210) страничных фрей­ма (220 умножить на 22 и разделить на 212). Причем это всего лишь для одного адресного пространства! У каждого процесса имеется отдельное адресное про­странство. Чтобы вся память не ушла лишь на хранение таблиц страниц, диспет­чер виртуальной памяти по необходимости перемещает эти таблицы на диск и обратно в память.

Процессор MIPS R4000 позволяет ОС использовать такой формат таблицы страниц, который ей наиболее удобен. В противоположность этому, процессор Intel 386 определяет его аппаратно. Чтобы обеспечить максимальную переноси­мость между процессорами MIPS и Intel, диспетчер виртуальной памяти приме­няет двухуровневую структуру таблицы страниц, напоминающую формат Intel. Таблица первого уровня, называемая каталогам страниц (page directory), со­держит указатели на страницы в таблице второго уровня. В последней находятся указатели на фактические страничные фреймы, как показано на рис. 6-11.

При поиске входа таблицы страниц диспетчер виртуальной памяти (и ядро NT) транслирует виртуальный адрес формата MIPS в адрес формата Intel, используя разные части адреса как смещения в структуре таблицы страниц. Кро­ме того, один вход TLB всегда содержит виртуальный базовый адрес каталога страниц исполняемого в данный момент процесса. (По этой причине один пользовательский процесс не может "видеть" адресное пространство другого. У них разные каталоги страниц, указывающие на разные таблицы страниц.),

Рис. 6-10. Концептуальная схема таблицы страниц.

рис . 6- 11. Структура таблицы страниц на Intel 386 и MIPS R4000

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

Входы таблицы страниц NT являются расширением входов абстрактной таблицы , показанной выше . Каждый вход таблицы (и каталога) страниц содержит признак переходного состояния. Когда вход таблицы страниц отмечен как недействительный и установлен признак переходного состояния , данная страница является кандидатом на повторное использование , но её содержимое по прежнему действительно . Переходную страницу можно очень быстро снова сделать действительной , так как диспетчеру виртуальной памяти не надо считывать её с диска. Входы таблицы страниц также содержат флаги , отмечающие тип страничной защиты , назначенный каждой из страниц диспетчером виртуальной памяти.

Если страничный фрейм совместно используется двумя процессами , то диспетчер виртуальной памяти вводит дополнительный уровень косвенности в свои таблицы страниц, как показано на рис. 6—12. Дополнительная структура данных, которую он вставляет, называется прототипным входом таблицы страниц (prototype page table entry), или прототипным РТЕ. Прототипный РТЕ, 32-разрядная структура, которая сходна с нормальным входом таблицы страниц, позволяет диспетчеру виртуальной памяти управлять совместно используемыми страницами, не обновляя таблицы страниц всех процессов, использующих страницу. Допустим, в определенный момент време­ни страница совместно используемого кода или данных была откачана на диск. При считывании ее обратно в память диспетчеру виртуальной памяти необхо­димо обновить только указатель, хранящийся в прототипом РТЕ, чтобы он ука­зывал на новое местоположение страницы. Вносить изменения в таблицы стра­ниц всех процессов, совместно использующих данную страницу, не требуется. Прототипные РТЕ размещаются в нерезидентной системной памяти, поэтому, как и обычные входы таблицы страниц, они могут быть при необходимости выгружены на диск.

Рис. 6-12. Трансляция адреса совместно используемой памяти.