Основные принципы управления памятью на уровне сигментов

10.09.2014

Подсистемы управления памятью

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

Сигмент - это непрерывный фрагмент памяти, характеризующийся базовым адресом и изменяемыми размерами.

Между сегментами может находиться неиспользуемое адрессное пространство или сигменты могут перекрываться.

В отличие от сигмента размер страницы фиксированый. Перекрытие страниц и использование межстраничного пространства не возможно.

Управление памятью на уровне сигментов реализуется на уровне пользователей. Управление памятью на уровне страниц реализуется в ядре ОС.

Основные принципы управления памятью на уровне сигментов

Каждый из сосуществующих сигментов имеет свой описатель (дискриптор). В наиболее общем виде дискриптор сегмента имеет следующий вид:

       
   
Информативный бит

 

 


Размер сигмента отражает его текущий размер. Базовый адрес варьируется. Информационный бит описывают тип сигмента и допустимые над ним операции.

 

Р - бит присутствия, указывает на наличие сигмента в оперативной памяти.

DPL - уровень определения дискриптора, определяют привелегированость содержимого сигмента соотнося его с одним из 4 колец защиты ОС. Чем меньше его значение, тем более привелегированным является содержимое сигмента.

 

В некоторых ОС существуют только 0 кольцо и 3.

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

R - определяет возможность или невозможность считывания определенного сигмента.

ED - признак стекового сигмента. Для таких сигментов смещение меньше, чем его бызовый адрес, а для обычных сигментов - больше.

 

W - записываемость сигментов.

А - признак обращения к сигменту.

Дискрипторы всех сигментов находяться в ОП не произвольно, а собираются в так называемые дискрипторные таблицы. Существует 2 типа таких таблиц: глобальная дискрипторная таблица (GDT), локальные дискрипторные таблицы (LDT).

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

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

 

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

Преобразование логического адреса (ЛА) в физический адрес (ФА) с использованием GDT реализуется следующим образом.

 

Логический адрес представляет собой базовый адрес сигмента и смещение в нем.

Базовый адрес выделяют 3 поля: поле индекса, определяющее порядковый номер дискриптора сигментов GDT. Индикаторы таблицы (TI). Запрашиваемый уровень привелегий.

В процесе преобразования адреса RPL участия не принимает. Как и любой объект управления в виртуальной памяти сигментированного типа GDT тоже помещается сигмент. Базовый адрес такого сигмента и текущий размер помещается в специализированный регистр процесора (GDTR).

Основные этапы преобразования ЛА в ФА следующий: Из базового адреса ЛА выделяется индексное поле, умножается на размер дискриптора сигмента в байтах и прибавляется к базовому адресу GDT. Если полученное таким образом значение не превышает текущий размер GDT, то из проиндексированного дискриптора выделяется базовый адрес и к нему прибавляется смещение. В результате этого сложения получается ФА. В противном случае, генерируется особый случай выхода за пределы GDT.

 

17.09.2014

Индексирование LDT сложнее. Сложность объясняется тем, что таких таблиц может быть несколько. Основные этапы обращения к LDT практически такие же, как и при обращении к GDT.

 

Процесс преобразования логического адреса в физический с использованием LDT заключается в последовательной реализации следующих основных этапов: из регистра LDTR, содержащего индекс дискриптора сигмента с LDT выделяется считывается текущее значение, умножается на размер дискриптора сигмента в байтах и прибавляется к базовому адресу GDT; если полученное таким образом значение превышает размер GDT, то фиксируется особый случай. В противном случае из GDT выделяется считывается дискриптор сегмента, содержащего LDT. Содержимое этого дискриптора является аналогом содержимого регистра GDTR. Из этого дискриптора выделяется базовый адрес и к нему прибавляется индексное поле с селектора логического адреса, умноженного на размер дискриптора сигмента в байтах. Если полученное значение превышает размеры LDT, то фиксируется особый случай. В противном случае из LDT считывается дискриптор сигмента, из него выделяется его базовый адрес и к нему прибывляется внутрисигментное смещение, представляющее собой вторую составляющую логического адреса. Полученное значение представляет собой физический адрес.

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