Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

2459

.pdf
Скачиваний:
0
Добавлен:
15.11.2022
Размер:
1.64 Mб
Скачать

страница

страница страница

страница

 

страница

 

 

 

страница

страница

 

 

 

 

 

 

 

 

ки

 

 

 

 

 

 

 

т

 

 

 

 

 

 

с

 

 

 

 

 

 

чи

 

 

 

 

 

о

 

 

 

 

 

ь

 

 

‘A

 

 

ел

 

а

 

 

 

т

 

г

 

 

 

а

 

ла

 

 

 

 

аз

 

 

 

 

 

 

к

 

 

ф

 

 

 

 

 

У

 

 

 

 

 

 

 

 

 

 

У

 

 

 

 

 

 

 

 

 

к

 

 

 

 

а

 

 

 

а

 

 

 

 

 

 

 

 

з

 

 

 

н

 

 

 

 

а

 

 

 

а

 

 

 

 

т

 

 

 

л

 

 

 

 

е

 

 

 

 

 

 

 

л

 

 

 

и

 

 

 

ь

 

 

 

 

з

 

 

 

 

 

 

 

 

а

 

 

 

 

 

 

 

 

т

 

 

 

 

 

 

 

 

 

о

 

 

 

 

 

 

 

 

 

р

 

 

 

 

 

 

 

 

 

а

страница

A=? D=?

Охват

страница

страница страница

страница

Рис. 14. Часовой алгоритм с двумя стрелками

 

Сканирование некоторого количества кадров

 

осуществляется периодически, после истечения

интервала

 

<

времени , как и в обычном часовом алгоритме. При этом у страницы, на которую ссылается указатель очистки флага обра-щений, просто сбрасывается флаг ‘A’ в записи таблицы трансляции, а для страницы, на которую ссылается указатель анализатора, выполняется обычная процедура анализа флагов, как и в обычном часовом алгоритме. При этом длительность интервала накопления данных об обращениях к памяти можно задавать не только скоростью сканирования, но и величиной ох-вата, в результате оптимальная величина интервала накопления данных об обращениях к памяти может выдерживаться без чрезмерного увеличения скорости сканирования.

61

3.4. Рабочее множество страниц процесса

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

Страницы процесса, загруженные в ОЗУ, образуют

резидентное множество страниц процесса.

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

резидентное множество следует уменьшать, потому, что при уменьшении резидентного множества увеличивается число одновременно запущенных процессов, следовательно, вероятность простоя процессора из-за отсутствия готовых процессов снижается;

резидентное множество следует увеличивать, потому, что при увеличении резидентного множества снижается вероятность страничной ошибки, следовательно,

62

снижаются общие накладные расходы на подкачку страниц и время простоя конкретных процессов в ожидании подкачки страниц.

От того, насколько близко к оптимальной величине удастся поддерживать размер резидентного множества

каждого

процесса,

существенно

зависит

общая

производительность компьютера.

 

 

 

 

Одним

из

первых

проблему

оптимизации

резидентного

множества

страниц процесса

исследовал

П. Деннинг

 

(P.J. Denning).

Основные

результаты

этих

исследований изложены в цикле статей и диссертации Деннинга в 1968 году [4]. Ключевым результатом исследований Деннинга стало введение понятия рабочего множества страниц процесса [3].

Деннинг определяет рабочее множество страниц

процесса

в момент

времени как множество

страниц( , ), к которым процесс выполнил хотя бы одно

обращение в интервале времени

.

Для того, чтобы понять

смысл рабочего множества и

 

( − , ]

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

На рис. 15 в качестве примера показано рабочее множество страниц компилятора gcc, полученное с использованием Valgrind.

63

70

60

50

40

30

20

10

0

2e+004

4e+004

6e+004

8e+004

1e+005

1.2e+005

1.4e+005

1.6e+005

1.8e+005

2e+005

Рис. 15. Рабочее множество страниц процесса gcc

64

На рис. 15 по оси абсцисс отложены номера инструкций программы, а по оси ординат – число страниц в рабочем множестве.

На графике рис. 15 хорошо видно, что рабочее множество имело периоды стабильности (горизонтальные участки графика), в течение которых оно не менялось на протяжении выполнения от нескольких тысяч до десятков тысяч инструкций программы. При этом переход между такими периодами стабильности (перестройка рабочего множества) занимал сравнительно мало времени.

Такое поведение рабочего множества определяет подход к оптимизации резидентного множества страниц процесса. Очевидно, что в периоды стабильности рабочего множества, оптимальное резидентное множество страниц процесса будет соответствовать его рабочему множеству. Увеличение резидентного множества страниц сверх рабочего множества не даст преимуществ в производительности и приведет лишь к перерасходу памяти, поскольку лишние страницы, не входящие в рабочее множество, не будут использоваться процессом. Если же резидентное множество будет меньше рабочего множества, то слишком часто будут возникать страничные ошибки, связанные с обращениями к отсутствующим в ОЗУ страницам рабочего множества, и производительность компьютера резко упадет. В худшем случае почти все процессорное время уйдет на обслуживание страничных ошибок, а не на выполнение программ – такую ситуацию называют пробуксовкой (trashing) [3].

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

65

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

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

Лучшим решением было бы установить для каждого процесса резидентное множество страниц в соответствии с его рабочим множеством. Но на пути реализации этой идеи

66

возникает проблема: рабочие множества страниц процессов неизвестны, более того, они не могут быть найдены явным образом на основании определения Деннинга по следующим причинам:

1) длительность временного окна в определении рабочего множества, при которой выявляются интервалы стабильности рабочего множества, должна быть индивидуально подобрана к каждой программе, что можно сделать, анализируя статистику обращений программы к памяти после ее завершения, но очень трудно реализовать в реальном времени во время работы программы;

2) даже если каким-то образом удастся найти оптимальную длительность временного окна , оценку рабочего множества по определению Деннинга можно будет получить только для прошедшего интервала времени ( − , ], в результате моменты перестройки рабочего множества будут обнаруживаться с опозданием, что не позволит оптимизировать резидентное множество страниц процесса.

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

Таким образом, частота страничных ошибок является простым и надежным индикатором недостаточности или несогласованности резидентного множества страниц. Если в

67

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

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

3.4.1. Дисциплина PFF (Page Fault Frequency) –

управление резидентным множеством на основе частоты появления страничных ошибок

Для оценки частоты появления страничных ошибок дисциплина PFF измеряет время между двумя последовательными страничными ошибками.

При возникновении страничной ошибки в некотором процессе, фиксируется виртуальное время ее возникновения. Виртуальное время процесса отсчитывается с момента запуска процесса и учитывает только время работы этого процесса (время, проведенное в ожидании процессора или в блокировке, не учитывается). Затем вычисляется интервал времени, прошедший с момента возникновения предыдущей страничной ошибки в этом же процессе. Время возникновения последней страничной ошибки хранится в структуре данных процесса.

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

68

Таким образом, резидентное множество страниц процесса увеличивается, если страничные ошибки в этом процессе возникают слишком часто.

Для сокращения резидентных множеств всех процессов периодически проводится «сборка мусора». Страничные кадры, которые давно не используются, исключаются из резидентного множества процессов и переносятся в глобальный список страничных кадров, доступных для перераспределения.

Таким образом, дисциплина PFF обеспечивает согласование резидентных и рабочих множеств процессов без прямой оценки величины рабочего множества.

Проанализируем работу дисциплины PFF. Рассмотрим три случая перестройки рабочего множества:

1)рабочее множество расширилось за счет включения в него новых страниц, при этом старые страницы по-прежнему используются;

2)рабочее множество изменилось за счет перехода к использованию новых страниц, при этом старые страницы больше не используются;

3)рабочее множество сократилось за счет того, что часть страниц больше не используется.

На рис. 16 показана динамика изменения величины резидентного множества страниц процесса для этих сценариев перестройки рабочего множества при использовании дисциплины PFF.

На рис. 16 пунктирной линией показано желаемое поведение резидентного множества процесса. Заштрихованная область показывает потери памяти из-за запаздывающей реакции сборщика мусора.

69

1

t

2

t

3

t

Интервал перестройки рабочего множества

Рис. 16. Изменение резидентного множества страниц процесса при различных сценариях

изменения рабочего множества при использовании PFF

70

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]