- •36. Подсистема Win32. 32-х разрядный api. Подсистема Win32
- •37. Структура.
- •38. Конструктивные изменения.
- •39. Api: ms-dos и 16-ти разрядной Windows. Виртуальные dos-машины. Api: ms-dos и 16-ти разрядной Windows.
- •Виртуальные dos-машины
- •44. Диспетчер. Виртуальная память. Диспетчер.
- •Виртуальная память
- •45. Средства пользовательского режима: управление памятью, совместное использование. Средства пользовательского режима
- •Управление памятью
- •Совместное использование памяти
- •46. Совместное использование: секции, проекции и проецируемые файлы. Секции, проекции и проецируемые файлы
- •47. Объект-секция. Способы защиты памяти. Объект-секция
- •Защита памяти
- •48. Собственная память процесса. Совместное использование памяти. Собственная память процесса
- •Совместное использование памяти
- •49. Адресное пространство. Подкачка страниц. Адресное пространство
- •Подкачка страниц
- •50. Механизмы подкачки страниц. Механизмы подкачки страниц
- •51. Стратегия подкачки и рабочие наборы. Стратегия подкачки и рабочие наборы
Подкачка страниц
Зачастую, чтобы раскрыть внутреннее устройство компонента ОС, достаточно задать два важных вопроса:
• Какие механизмы использует этот компонент для выполнения своей задачи?
• Какой стратегии подчиняются эти механизмы?
В состав механизмов виртуальной памяти входят способ, которым диспетчер виртуальной памяти транслирует виртуальные адреса в физические, и способ перемещения страниц в физическую память. Стратегия же виртуальной памяти, наоборот, определяет, к примеру, когда и в какое место памяти должна быть загружена страница.
Часто процессор предоставляет примитивные механизмы подкачки страниц, которые дополняет система виртуальной памяти. Средство подкачки (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. Трансляция адреса совместно используемой памяти.
