Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лек СРВ от Анн.doc
Скачиваний:
11
Добавлен:
09.11.2019
Размер:
2.26 Mб
Скачать

13.3 Управление виртуальной памятью в usix

USIX поддерживает виртуальную организацию памяти, кото­рая основана на концепции объектов памяти, регионов и сегмен­тов. Каждый процесс состоит из ряда сегментов, отображаемых на регионы. Регион является фрагментом физической памяти, начинающейся с границы страницы и содержащей целое число страниц. В общем случае регион может быть распределен между оперативной памятью, пространством выгрузки и файлом на диске.

Система управления памятью использует ряд структур дан­ных, которые могут рассматриваться как массивы, оформленные в виде связных списков.

Физические страницы объединяются в следующие списки:

Системные страницы — страницы, необходимые системе.

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

Чистые страницы — страницы, которые имеют копии на диске и могут выделяться процессам, так как не требуют их сохранения на диске.

Модифицированные страницы — страницы, которые требуется сохранить на диске, так как перед осво­бождением этих страниц из рабочего набора они были модифицированы. Свободные страницы — страницы, доступные для распреде­ления без всяких ограничений. По­сле загрузки ядра все страницы, не занятые системой, являются свобод­ными.

Страницы рабочего набора — страницы физической памяти, распределенные (доступные) для неко­торого процесса в текущий момент времени.

Читаемые страницы — страницы, в данный момент читае­мые с диска в оперативную память. Записываемые страницы — страницы, в данный момент записываемые из оперативной памяти на диске.

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

При создании процесса ему, как правило, назначаются следу­ющие регионы, связанные с соответствующими сегментами:

  • регион стека;

  • регион текста процесса;

  • регион данных процесса;

  • регионы текста и данных разделяемой системной библиотеки.

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

• в оперативной памяти, если она уже выделялась или считывалась для какого-либо процесса;

•в файле на диске;

•в файле выгрузки на диске, если она была выгружена в резуль­тате предыдущих действий системы.

Если страница находится на диске, она будет загружена (про­читана) в память, включена в рабочий набор, и выполнение про­цесса продолжится. Таким образом, в памяти оказываются толь­ко страницы, действительно необходимые для текущего процес­са. Страницы, доступные процессу в данный момент, образуют рабочий набор, отображение которого восстанавливается при пе­реключении процессов.

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

Можно провести некоторую аналогию в использовании кэш­памяти и рассматриваемых списков страниц. И тот, и другой ме­ханизм за счет временного сохранения данных в области, непо­средственно доступной системе, позволяет повысить ее произво­дительность. В обоих случаях эффективность в значительной ме­ре зависит от размеров и активности процессов.

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

Когда процессу требуется физическая страница, система про­веряет соотношение между числом доступных (суммой свобод­ных и чистых) страниц и значением LowWater. Если соотношение позволяет выделить страницу, система пытается получить стра­ницу из списка свободных страниц, а если он пуст, — из списка чистых страниц.

Если число доступных страниц станет равным значению LowWater или меньше его, то система определяет страницу для выгрузки из оперативной памяти. Страница выбирается из спис­ка модифицированных страниц и, если он пуст, из списка стра­ниц рабочего набора. Каждая физическая страница в оператив­ной памяти имеет свой рейтинг, равный сумме приоритетов всех процессов, содержащих данную страницу в своем рабочем набо­ре. Система выбирает из списка рабочего набора страницу с наи­меньшим значением рейтинга. Изменяя значение LowWater, сис­темный администратор может поддерживать наилучшее исполь­зование оперативной памяти для определенного состава процес­сов в соответствии с их активностью.

Рассмотрим работу с разделяемыми страницами. Система уп­равления виртуальной памятью обеспечивает режим работы «сору-оn-write» (копировать для записи) с разделяемыми страни­цами. Типичным примером разделения является наследование сегментов данных и стека порожденным процессом при систем­ном вызове fork. В этом случае система не копирует данные сег­менты, а процесс-отец и процесс-сын используют одни и те же страницы в оперативной памяти до тех пор, пока один из них не попытается смодифицировать какую-либо из этих страниц.

В общем случае несколько процессов, разделяющих страницу, используют один экземпляр такой страницы в оперативной па­мяти. Система обеспечивает два варианта работы с разделяемой страницей: разделение и «сору-оn-write». Примером разделения является файл, отображенный в адресном пространстве несколь­ких процессов. Процессы производят всю коррекцию в единст­венной копии страницы оперативной памяти. Такие страницы не требуют места в области выгрузки и записываются только в файл на диске. Сегменты данных и стека являются примерами вариан­та «сору-оn-write». Когда один из процессов пытается записать страницу, система копирует разделяемую страницу в новую стра­ницу, назначенную записывающему процессу. Остальные про­цессы продолжают использовать старый единственный экземп­ляр разделяемой страницы. Техника «сору-оn-write» позволяет использовать единственную копию страницы продолжительное время, чаще всего до завершения одного из процессов.

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

Так как любой файл в USIХ представляет собой регион, это позволяет обеспечивать кэширование диска на уровне связанных с файлами объектов памяти, а не на уровне дисковых блоков.

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

Лекция 14. Организация вычислительных процессов в USIX