Подкачка

Процесс перемещения данных в ОЗУ и обратно называется подкачкой (paging). Когда физическая память заполняется и потоку требуется доступ к коду или данным, отсутствующим в настоящий момент в ОЗУ, VMM перемещает необходимые страницы из физической памяти в хранилище на диске, называемое файлом подкачки (рис. 4-7). VMM загружает код или данные, запрашиваемые потоком, в область физической памяти, освобождаемую VMM. Виртуальное адресное пространство, выделенное процессу, содержит действительные (valid) и недействительные (invalid) страницы. Первые находятся в физической памяти и доступны процессу, вторые не загружены в ОЗУ. Они не доступны процессу и не хранятся на диске. Когда поток запрашивает доступ к недействительной странице, процессор формирует ошибку страницы (page fault). VMM перехватывает ошибку, находит нужнуюстраницу в виртуальной памяти и загружает ее с диска на свободную страницу в ОЗУ. наоборот, чтобы освободить физическую память, VMM выгружает содержимое определенных страниц на диск.

VMM выполняет в процессе подкачки три задачи.

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