Свопинг и виртуальная память

На рисунке 6.7 показан график зависимости коэффициента загрузки процессора от числа одновременно выполняемых процессов и доли времени, проводимого этими процессами в состоянии ожидания ввода-вывода.

Рисунок 6.7 - Зависимость загрузки процессора от числа задач и интенсивности ввода-вывода

 

Большое количество задач, необходимое для высокой загрузки процессора, требует большого объема оперативной памяти. Когда для обеспечения приемлемого уровня мультипрограммирования имеющейся оперативной памяти недостаточно, был предложен метод организации вычислительного процесса, при котором образы некоторых процессов целиком или частично временно выгружаются на диск – виртуализация оперативной памяти.

Виртуализация оперативной памяти осуществляется совокупностью программных модулей ОС и аппаратных схем процессора и включает решение следующих задач:

- размещение данных в запоминающих устройствах разного типа, например часть кодов программы - в оперативной памяти, а часть - на диске;

- выбор образов процессов или их частей для перемещения из оперативной памяти на диск и обратно;

- перемещение по мере необходимости данных между памятью и диском;

- преобразование виртуальных адресов в физические.

Все эти действия выполняются автоматически.

Виртуализация памяти может быть осуществлена на основе двух различных подходов:

- свопинг (swapping) - образы процессов выгружаются на диск и возвращаются в оперативную память целиком;

- виртуальная память (virtual memory) - между оперативной памятью и диском перемещаются части (сегменты, страницы и т. п.) образов процессов.

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

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

Из-за указанных недостатков свопинг как основной механизм управления памятью почти не используется в современных ОС.

Используют более совершенный механизм виртуальной памяти - при нехватке места в оперативной памяти на диск выгружаются только части образов процессов.

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

- Страничная виртуальная память.

- Сегментная виртуальная память.

- Сегментно-страничная виртуальная память.

Для временного хранения сегментов и страниц на диске отводится специальная область, или специальный файл, которые во многих ОС продолжают называть областью, или файлом свопинга. Другое название этой области - страничный файл (page file, или paging file). Текущий размер страничного файла является важным параметром и оказывает влияние на возможности операционной системы: чем больше страничный файл, тем больше приложений может одновременно выполнять ОС (при фиксированном размере оперативной памяти). Однако необходимо понимать, что увеличение числа одновременно работающих приложений за счет увеличения размера страничного файла замедляет их работу, так как значительная часть времени при этом тратится на перекачку кодов и данных из оперативной памяти на диск и обратно. Размер страничного файла в современных ОС является настраиваемым параметром и выбирается для достижения компромисса между уровнем мультипрограммирования и быстродействием системы.