|
Несмотря на то, что в системах с
замещением страниц по запросу
обращение с памятью отличается
большей гибкостью по сравнению с
системами подкачки процессов,
возможно возникновение ситуаций,
в которых "сборщик" страниц и
программа обработки отказов
из-за недоступности данных
начинают мешать друг другу из-за
нехватки памяти. Если сумма
рабочих множеств всех процессов
превышает объем физической
памяти в машине, программа
обработки отказов обычно
приостанавливается, поскольку
выделять процессам страницы
памяти дальше становится
невозможным. "Сборщик" страниц
не сможет достаточно быстро
освободить место в памяти, ибо
все страницы принадлежат
рабочему множеству.
Производительность системы
падает, поскольку ядро тратит
слишком много времени на верхнем
уровне, с безумной скоростью
перестраивая память.
Ядро в версии V манипулирует
алгоритмами подкачки процессов и
замещения страниц так, что
проблемы соперничества перестают
быть неизбежными. Когда ядро не
может выделить процессу страницы
памяти, оно возобновляет работу
процесса подкачки и переводит
пользовательский процесс в
состояние, эквивалентное
состоянию "готовности к запуску,
будучи зарезервированным". В
этом состоянии одновременно
могут находиться несколько
процессов. Процесс подкачки
выгружает один за другим целые
процессы, пока объем доступной
памяти в системе не превысит
верхнюю отметку. На каждый
выгруженный процесс приходится
один процесс, загруженный в
память из состояния "готовности
к выполнению, будучи
зарезервированным". Ядро
загружает эти процессы не с
помощью обычного алгоритма
подкачки, а путем обработки
отказов при обращении к
соответствующим страницам. На
последующих итерациях процесса
подкачки при условии наличия в
системе достаточного объема
свободной памяти будут
обработаны отказы, полученные
другими пользовательскими
процессами. Применение такого
метода ведет к снижению частоты
возникновения системных отказов
и устранению соперничества: по
идеологии он близок к методам,
используемым в операционной
системе VAX/VMS. |
|