Сегментация


Сегмент — это блок адресного пространства памяти определенного назначе­ния. К элементам сегмента возможно обращение с помощью различных инструк­ций процессора, использующих разные режимы адресации для формирования адреса в пределах сегмента. Максимальный размер сегмента для процессоров 8086 и 80286 составлял 64 Кб, в 32-разрядных процессорах этот предел отодви­гается до 4 Гб. Сегменты памяти выделяются задачам операционной системой, но в реальном режиме любая задача может переопределить значение сегментных регистров, задающих положение сегмента в пространстве памяти, и «залезть  в чужую область данных или кода.

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

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

• использовать сегменты не по назначению (например, пытаться трактовать область данных как коды инструкций);

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

• адресоваться к элементам, выходящим за лимит сегмента;

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

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

Загрузка...