Подкачка
Процесс перемещения данных в ОЗУ и обратно называется подкачкой (paging). Когда физическая память заполняется и потоку требуется доступ к коду или данным, отсутствующим в настоящий момент в ОЗУ, VMM перемещает необходимые страницы из физической памяти в хранилище на диске, называемое файлом подкачки (рис. 4-7). VMM загружает код или данные, запрашиваемые потоком, в область физической памяти, освобождаемую VMM. Виртуальное адресное пространство, выделенное процессу, содержит действительные (valid) и недействительные (invalid) страницы. Первые находятся в физической памяти и доступны процессу, вторые не загружены в ОЗУ. Они не доступны процессу и не хранятся на диске. Когда поток запрашивает доступ к недействительной странице, процессор формирует ошибку страницы (page fault). VMM перехватывает ошибку, находит нужнуюстраницу в виртуальной памяти и загружает ее с диска на свободную страницу в ОЗУ. наоборот, чтобы освободить физическую память, VMM выгружает содержимое определенных страниц на диск.
VMM выполняет в процессе подкачки три задачи.
- Определяет, какие страницы удалить из заполненного ОЗУ. VMM отслеживает резидентные страницы для каждого процесса. Эта группа страниц называется рабочим набором процесса. Для обмена страницами применяется правило ≪первым вошел, первым вышел≫ (first-in, firstout, FIFO). Первыми удаляются страницы, находившиеся в памяти дольше других. Когда поток генерирует ошибку страницы, VM М проверяет рабочий набор процесса этого потока и выгружает на диск страницу, находившуюся в физической памяти дольше других.
- Загружает страницы с диска в ОЗУ. Этот процесс называется выборкой (fetching). VMM также использует метод, известный как подкачка с кластеризацией. Подкачка по требованию с кластеризацией (demand paging with clustering) означает, что после ошибки страницы VMM загружает в память нужную, а также некоторые смежные страницы. Это помогает сократить количество ошибок страниц.
- Определяет, куда поместить считанные с диска страницы. Если физическая память не исчерпана, VMM загружает данные на первую свободную страницу. Если ОЗУ заполнено, VMM определяет, какую страницу выгрузить на диск, чтобы освободить место в ОЗУ памяти для считанных с диска страниц.