Свопинг и виртуальная память
В мультипрограммном режиме имеются приостановленные процессы, находящиеся в ожидании завершения ввода-вывода или освобождения ресурсов, и процессы, стоящие в очереди к процессору.
Виртуализация оперативной памяти осуществляется совокупностью программных модулей ОС и аппаратных схем процессора и включает решение следующих задач:
• размещение данных в запоминающих устройствах разного типа, например часть кодов программы — в оперативной памяти, а часть — на диске;
• выбор образов процессов или их частей для перемещения из оперативной памяти на диск и обратно;
• перемещение по мере необходимости данных между памятью и диском; преобразование виртуальных адресов в физические.
Все действия по организации совместного использования диска и оперативной памяти осуществляются операционной системой и аппаратурой процессора автоматически.
Виртуализация памяти может быть осуществлена на основе двух различных подходов:
• свопинг (swapping) — образы процессов выгружаются на диск и возвращаются в оперативную память целиком;
• виртуальная память (virtual memory) — между оперативной памятью и диском перемещаются части образов процессов.
Свопинг представляет собой частный случай виртуальной памяти. Когда ОС решает активизировать процесс, для его выполнения не требуется загружать в оперативную память все его сегменты полностью, а достаточно загрузить небольшую часть кодового сегмента с подлежащей выполнению инструкцией и частью сегментов данных, с которыми работает эта инструкция, а также отвести место под сегмент стека.
При освобождении памяти для загрузки нового процесса часто достаточно вытеснить на диск только часть образа процесса. Перемещение избыточной информации замедляет работу системы, а также приводит к неэффективному использованию памяти. Кроме того, системы, поддерживающие свопинг, имеют еще один недостаток: они не способны загрузить для выполнения процесс, виртуальное адресное пространство которого превышает имеющуюся в наличии свободную память.
Ключевой проблемой виртуальной памяти, возникающей в результате многократного изменения местоположения в оперативной памяти образов процессов или их частей, является преобразование виртуальных адресов в физические. В настоящее время все множество реализаций виртуальной памяти может быть представлено тремя классами.
Страничная виртуальная память организует перемещение данных между памятью и диском страницами — частями виртуального адресного пространства, фиксированного и сравнительно небольшого размера.
Сегментная виртуальная память предусматривает перемещение данных сегментами — частями виртуального адресного пространства произвольного размера, полученными с учетом смыслового значения данных.
Сегментно-страничная виртуальная память использует двухуровневое деление: виртуальное адресное пространство делится на сегменты, а затем сегменты делятся на страницы. Единицей перемещения данных здесь является страница. Этот способ управления памятью объединяет в себе элементы обоих предыдущих подходов.
Для временного хранения сегментов и страниц на диске отводится или специальная область, или специальный файл, которые во многих ОС называют областью, или файлом свопинга, хотя перемещение информации между оперативной памятью и диском осуществляется уже не в форме полного замещения одного процесса другим, а частями. Другое популярное название этой области — страничный файл (page file, или paging file). Текущий размер страничного файла является важным параметром, оказывающим влияние на возможности операционной системы: чем больше страничный файл, тем больше приложений может одновременно выполнять ОС. Однако необходимо понимать, что увеличение числа одновременно работающих приложений за счет увеличения размера страничного файла замедляет их работу, так как значительная часть времени при этом тратится на перекачку кодов и данных из оперативной памяти на диск и обратно. Размер страничного файла в современных ОС является настраиваемым параметром, который выбирается администратором системы для достижения компромисса между уровнем мультипрограммирования и быстродействием системы.