Управление виртуальной памятью
|
|
n-му процессу не хватает памяти для загрузки на выполнение, поэтому ОП должна выполнить какие-либо действия, чтобы событие получило реакцию. Не важно, как грузятся процессы.
ОП может посмотреть, какой процесс может быть выгружен (ожидающий, остановленный, выполненный процесс).
Если задача одна и очень большая: адресуемое пространство продолжается на физическом устройстве, например, жестком диске.
Эта задача также разбивается на страницы, которые могут быть valid - правильные (загружаются в ОП), invalid – неправильные (лежат на внешней памяти).
При установки ОС, она автоматически создает .swp-файл.
Механизм работы .swp-файла:
Если не хватает места для .swp-файла, ОС добавляет ему памяти.
Рекомендуется делать .swp-файл размером 1.2-1.3 от ОП. Это позволяет ускорить доступ к .swp-файлу.
.swp-файл только нарастает, уменьшить его нельзя.
Появились программы, делающие .swp-файл целостным, дефрагментируют его.
Виртуальная память используется, когда не хватает оперативной памяти для выполнения программы.
Пусть имеется многозадачная система. Оперативная память должна выполнить какие-либо действия, чтобы это событие (нехватка памяти) получило соответствующую реакцию. Неважно, как грузятся процессы. Первая реакция оперативной памяти: желание выгрузить процесс, т.е. ставится вопрос о том, какой i-ый процесс может быть выгружен (например, остановленный, ожидающий, выполненный).
Если же задача одна, но очень большая (например, расположение объемного изображения в Автокаде под разными углами), то адресуемое пространство продолжается на каком-либо физическом устройстве (например, на жестком диске). Эта задача точно также разбивается на страницы. Эти страницы могут быть valid – правильные (загруженные в оперативную память) и invalid – не загруженные в оперативную память, а лежащие на внешней памяти. Эту внешнюю память называют Swap Space.
Механизм работы .swap-файла: .swap-файл лежит где-то на диске. Если не хватает памяти, то ОС постепенно добавляет для .swap-файла еще где-то место на диске.
Swap Space рекомендуется делать размером 1.2-1.3 от размера оперативной памяти.
Если Swap Space лежит на диске в одном месте непрерывно, а не «раскидано» по диску, то обращение к Swap Space дает более быстрый доступ.
.swap-файл можно только увеличить, уменьшить нельзя, также .swap-файл является неперемещаемым.
В результате вышеуказанных неудобств по использованию .swap-файла вскоре появился speed-диск, который позволяет регулировать .swap-файл и положить его в начало диска, делая его непрерывным.
Рассмотрим процесс перезагрузки: при перезагрузке определена некоторая задача, которая разбита на отдельные части (сегменты), которые должны грузиться в оперативную память, причем некоторые из них могут не умещаться в ОП.
|
30. Механизм работы при использовании виртуальной памяти: имеется некоторая область, где расписаны сегменты задачи (любым образом распределенная логическая память), таблица страниц, которая при работе с виртуальной памятью таблица имеет еще один бит (valid или invalid). Еще одна используемая таблица – это таблица страниц процесса, которая отображается на физической памяти.
Как только процесс обращается к какой-либо странице памяти, то обязательно определяется его физический адрес в ОП.
При обращении к логическому адресу первоначально проверяется, есть ли он в таблице страниц. Если есть и этот адрес – загруженная страница, то он копируется в физическую память и для него выделяется определенная страница.
Второй вариант – это, когда процесса в таблице страниц нет, тогда происходит обращение к таблице процессов, если адреса нет и там, то происходит его поиск в ОП. Если адрес найден, то он вписывается в таблицу страниц процессов, которая дублируется в таблицу страниц и бит invalid меняется на valid (сегмент В на рис 5.1). После появления сегмента В, которую мы рассматриваем, в физической памяти, появляется доступ к физической памяти.
Такой механизм дает следующее: задача может начинать выполняться, когда она не целиком загружена в память.
При больших задачах могут быть использованы отдельные сегменты при загрузке, при этом не требуется перезагружать страницы, если они уже есть в ОП.
Пусть, например, требуется загрузить сегмент Е в ОП и получить доступ к его логическому адресу. Первый вопрос, который встает перед ОП – это куда загружать С. После обращения к С, происходит поиск свободных страниц в физической памяти, затем С записывается в таблицу процессов (в очередной адрес, при этом добавляется смещение), затем С записывается в таблицу страниц и invalid меняется на valid.
Замещение страниц.
Эффект замещения страниц возникает тогда, когда оказывается, что вся физическая память занята. Т.е. при очередном обращении к логическому адресу не находится ни одного свободного места, куда мог бы войти очередной процесс. Тогда возникает ситуация страничной недостаточности. Разрешается она следующим образом: проверяется наличие бита invalid (valid). Если страница доступна, то идет обращение к физической памяти через базовый адрес. Если оказалось, что данная память не может быть загружена (все занято), тогда из таблицы страниц выбирается страница, которая выгружается из ОП в SWAP file.
Пусть, например, выгружается сегмент А, а надо загрузить сегмент F, который как раз может занять место А. Тогда сегмент А должен быть выгружен в виртуальную память, следовательно там, где находится А корректируется адрес в логической памяти.
Возможен и другой вариант: когда выгрузили, например, сегмент В, он уже в SWAP file, но не выполняется в данный момент (в таблице страниц он помечен как invalid), тогда при обращении к логическому адресу В проверяется его наличие, если его нет, но есть информация, что он в SWAP, тогда его адрес корректируется во всех таблицах и invalid меняется valid, и сегмент В становится доступным.
Для того чтобы это можно было осуществить, в таблице страниц вводится бит, показывающий модифицировалась ли страница или нет.
Если страница модифицировалась, то тогда получается двойная загрузка. Сначала из ОЗУ выгружается «страница-жертва» в SW, другая же страница загружена в ОЗУ, и ее адрес модифицируется в таблице страниц.
Этот бит нужен, для того чтобы те страницы, которые не модифицировались не выгружались из памяти, причем загружаемые страницы пишутся поверх них.
Дата добавления: 2016-07-18; просмотров: 1770;