Friday, May 18th

Last update12:13:00 PM GMT

Вы находитесь на: FreeBSD Управление памятью Процесс подкачки

Процесс подкачки

Операции подкачки выполняются процессом подкачки, swapper (процесс 0). Этот процесс является первым, который система создает при своем запуске. Политика подкачки swapper воплощена в процедуре scheduler(). Эта процедура подкачивает процессы обратно в память, когда она доступна и когда процессы готовы к запуску. В любое время планировщик подкачки (swapper) находится в одном из трех состояний.

1. Простой (idle): нет готовых к запуску выгруженных процессов. Простой является нормальным состоянием.

2. Подкачка (swapping in): по крайней мере один процесс выгружен и scheduler() пытается найти для него память.

3. Выгрузка (swapping out): система испытывает недостаток памяти или недостаточно памяти для подкачки процесса. В этих условиях scheduler() пробуждает демон выгрузки страниц, чтобы освободить страницы и выгружать остальные процессы до тех пор, пока недостаток памяти не ослабнет.

Если готово к запуску более одного выгруженного процесса, первой задачей swapper является решение вопроса о том, какой процесс загрузить. Это решение может повлиять на решение о том, нужно ли выгружать другой процесс. Каждому выгруженному процессу назначается приоритет, основанный на:

· продолжительности времени нахождения его в выгруженном состоянии;

· значении его относительного приоритета (nice);

· количестве времени, которое он провел в состоянии сна с момента последнего запуска.

Вообще процесс, который больше всего находился в выгруженном состоянии или был выгружен из-за того, что долго спал перед этим, будет закачан в первую очередь. Когда процесс выбран, swapper проверяет, достаточно ли свободной памяти, чтобы закачать процесс. Исторически система требовала такого количества доступной памяти, которое процесс занимал до своей выгрузки. Для FreeBSD это требование было снижено до требования, чтобы число страниц в свободном списке и списке кеша было равно по крайней мере минимальному порогу свободной памяти. Если есть достаточно свободной памяти, процесс загружается обратно в память. Сразу же подкачивается структура пользователя, но оставшуюся часть своего рабочего набора процесс загружает из резервного хранилища через подкачку по требованию. Таким образом, не вся память, которая нужна процессу, используется немедленно. Более ранние системы BSD отслеживали предстоящие запросы памяти и загрузили бы готовые к исполнению процессы, лишь когда для выполнения их ожидающихся потребностей становилось достаточно свободной памяти. FreeBSD разрешает подкачивать все выгруженные готовые к выполнению процессы, как только будет достаточно памяти для загрузки их структуры пользователя и стеков потоков.

Процедура подкачки процесса обратно процедуре его выгрузки.

1. Выделяется память для структуры пользователя и стека ядра для каждого из его потоков, и они считываются обратно из пространства подкачки.

2. Процесс помечается как резидентный, а его готовые в выполнению потоки возвращаются в очередь запуска (т. е. те потоки, которые не остановлены и не являются спящими).

После завершения подкачки процесс готов к запуску, как любой другой, за исключением того, что у него нет резидентных страниц. Он будет загружать нужные страницы, вызывая отказы страниц.


Похожие:
Еще по теме:
Советуем прочитать:

Сейчас 52 гостей онлайн