Диспетчер виртуальной памяти.

Развитие технологии ОС сводилось к поиску того, как сделать процессор занятым большую часть времени, и таким образом выполнять больший объем работы. Многозадачные ОС загружают в память несколько программ и поддерживают высокий уровень загрузки процессора, переключаясь между ними.
Распределение всей доступной памяти между процессами и, в то же время, защита кода и данных одного процесса от других и составляет задачу управления памятью, а в WinNT это управление виртуальной памятью.
Раньше не было возможности выполнять программу, размер которой превышает объем физического памяти компьютера.
Позже программисты стали писать оверлейные программы, которые выгружали одни части своего кода на диск и загружали другие части в память.
Виртуальная память - это централизованная система выгрузки на диск содержимого памяти при ее переполнении. Она позволяет программистам создавать и запускать программы, который требуют памяти больше, чем есть у компьютера. Компонент исполнительной системы NT, отвечающий за виртуальную память - это диспетчер виртуальной памяти (ДВП).
Память компьютера можно описать в двух терминах: физической структуры и логической структуры.
Физическая память организована как последовательность однобайтовых ячеек; байты пронумерованы от 0 до общего размера памяти. Этот набор чисел и составляет физическое адресное пространство компьютера.
Логическая память (виртуальная память) - способ представления памяти для программы и в современных ОС она редко совпадает с физической структурой памяти.
Виртуальное адресное пространство (ВАП) - это набор адресов памяти, которые могут использовать потоки процесса. Каждый процесс имеет отдельное адресное пространство, которое обычно гораздо больше размера физической памяти.
Вывод: диапазон физических адресов для компьютера ограничен объемом имеющейся у него памяти, а диапазон виртуальных адресов ограничен только количеством битов в адресе => несоответствие между физическим и виртуальным адресным пространством приводит к тому, что система виртуальной памяти (ДВП) обязательно должна выполнять следующие 2 задачи:

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

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

Задачи ДВП:

  1. Отображение виртуальных адресов в физические.
  2. Пересылка данных между ФАП и ЖМД.
  3. Обеспечение легкого и эффективного способа совместного использования памяти двумя процессами.
  4. Защита как совместной, так и "частной" памяти от несанкционированного доступа.
  5. (для WinNT) Обработка страничных ошибок от нескольких потоков одновременно.

 

№23