Структуры данных, используемые для описания сегментной модели
Для описания сегментной организации процесса используются структуры, содержащие дескрипторы отдельных сегментов и связанные с аппаратно-зависимой структурой (например, таблицей сегментов), данные которой используются при отображении виртуальных адресов в физические. Дескриптор сегмента содержит индивидуальные характеристики сегмента, в том числе:
- виртуальный адрес начала сегмента,
- размер сегмента, список операций, которые можно выполнять над данным сегментом,
- статус сегмента (например, в каком режиме к нему возможен доступ, допускается ли совместное использование и т.д.),
- указатель на таблицу отображения сегмента, связывающую адреса входящих в сегмент виртуальных страниц с соответствующими физическими или с адресами копий страниц во внешней памяти для виртуальных страниц, отсутствующих в основной памяти.
Имеется также несколько описательных структур на уровне страниц. Так для управления физической памятью поддерживается несколько списков страниц: свободных, модифицированных, не допускающих модификации и т.д., которые просматриваются для выбора нужной страницы в зависимости от ситуации. Дескриптор физической страницы также содержит копии признаков обращения и модификации страницы, вырабатываемых аппаратурой.
Введение подобной обобщенной модели организации виртуальной памяти и тщательное продумывание связи аппаратно-независимой и аппаратно-зависимой частей подсистемы управления виртуальной памятью позволило добиться того, что обращения к памяти, не требующие вмешательства операционной системы, производятся, как и полагается, напрямую с использованием конкретных аппаратных средств. Вместе с тем, все наиболее ответственные действия операционной системы, связанные с управлением виртуальной памятью, выполняются в аппаратно-независимой части с необходимыми взаимодействиями с аппаратно-зависимой частью.
Загрузка исполняемого файла (системный вызов exec) осуществляется обычно через отображение (mapping) его частей (кода, данных) в соответствующие сегменты адресного пространства процесса. После установления отображения, система начинает генерировать page fault'ы, в первую очередь для сегментов кода, данных и стека, подкачивая с диска необходимую информацию.
Как уже говорилось, сегмент данных динамически меняет свой размер. Пользователь, осуществляя аллокацию (библиотечный вызов malloc) или освобождение (free) динамических данных, фактически изменяет границу динамически выделенных процессу данных через системный вызов brk, который модифицирует значение переменной brk из структуры данных процесса. В результате происходит выделение физической памяти, а соответствующие строки таблиц страниц получают осмысленные значения. Ведение списков занятых и свободных областей памяти в сегменте данных пользователя осуществляется на уровне системных библиотек. На практике, освобожденная пользователем память (библиотечный вызов free) системе не возвращается, а резервируется для обслуживания возможных дальнейших запросов пользовательского процесса на выделение памяти.
Дата добавления: 2015-07-24; просмотров: 911;