Прочитанная глава была посвящена
рассмотрению алгоритмов подкачки
процессов и замещения страниц,
используемых в версии V системы UNIX.
Алгоритм подкачки процессов
реализует перемещение процессов
целиком между основной памятью и
устройством выгрузки. Ядро
выгружает процессы из памяти, если
их размер поглощает всю свободную
память в системе (в результате
выполнения функций fork, exec и sbrk или в
результате естественного
увеличения стека), или в том случае,
если требуется освободить память
для загрузки процесса. Загрузку
процессов выполняет специальный
процесс подкачки (процесс 0),
который запускается всякий раз, как
на устройстве выгрузки появляются
процессы, готовые к выполнению.
Процесс подкачки не прекращает
своей работы до тех пор, пока на
устройстве выгрузки не останется
ни одного такого процесса или пока
в основной памяти не останется
свободного места. В последнем
случае процесс подкачки пытается
выгрузить что-нибудь из основной
памяти, но в его обязанности входит
также слежение за соблюдением
требования минимальной
продолжительности пребывания
выгружаемых процессов в памяти (в
целях предотвращения холостой
перекачки); по этой причине процесс
подкачки не всегда достигает
успеха в своей работе.
Возобновление процесса подкачки в
случае возникновения
необходимости в нем производит с
интервалом в одну секунду
программа обработки прерываний по
таймеру. В системе с замещением страниц по
запросу процессы могут
исполняться, даже если их
виртуальное адресное пространство
загружено в память не полностью;
поэтому виртуальный размер
процесса может превышать объем
доступной физической памяти в
системе. Когда ядро испытывает
потребность в свободных страницах,
"сборщик" страниц
просматривает все активные
страницы в каждой области, помечая
для выгрузки те из них, которые
достаточно "созрели" для
этого, и в конечном итоге
откачивает их на устройство
выгрузки. Когда процесс обращается
к виртуальной странице, которая в
настоящий момент выгружена из
памяти, он получает отказ из-за
недоступности данных. Ядро
запускает программу обработки
отказа, которая назначает области
новую физическую страницу памяти и
копирует в нее содержимое
виртуальной страницы. Повысить производительность
системы при использовании
алгоритма замещения страниц по
запросу можно несколькими
способами. Во-первых, если процесс
вызывает функцию fork, ядро
использует бит копирования при
записи, тем самым в большинстве
случаев снимая необходимость в
физическом копировании страниц.
Во-вторых, ядро может запросить
содержимое страницы исполняемого
файла прямо из файловой системы,
устраняя потребность в вызове
функции exec для незамедлительного
считывания файла в память. Это
способствует повышению
производительности, поскольку не
исключена возможность того, что
подобные страницы так никогда и не
потребуются процессу, и устраняет
излишнюю холостую перекачку,
имеющую место в том случае, если
"сборщик" страниц выгружает
эти страницы из памяти до того, как
в них возникает потребность. Предыдущая
глава || Оглавление
|| Следующая глава
9.4 ВЫВОДЫ