Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Контроль предела

Дескрипторные таблицы

Дескрипторные таблицы - это массивы памяти переменной длины, содержащие восьмибайтные элементы - дескрипторы. Дескрипторная таблица может иметь длину от 8 байт до 64Кбайт и в каждой таблице может быть до 8192 дескрипторов. Старшие 13 битов селектора используются как индекс в таблице дескрипторов. Поскольку эти таблицы обслуживает операционная система, то команды загрузки таблицы дескрипторов являются привилегированными командами.

Существуют две обязательных дескрипторных таблицы - глобальная дескрипторная таблица (Global Descriptor Table - GDT) и дескрипторная таблица прерывания (Interrupt Descriptor Table - IDT),- а также множество (до 8191) локальных дескрипторных таблиц (Local Descriptor Table - LDT), из которых в один момент времени процессору доступна только одна. Расположение дескрипторных таблиц определяется регистрами процессора GDTR, IDTR, LDTR. Регистры GDTR и IDTR - 6-байтные, они содержат 32 бита линейного базового адреса дескрипторной таблицы и 16 бит предела таблицы. Программно доступная часть регистра LDTR (16 бит) содержит селектор LDT. Дескрипторы LDT находятся в GDT.

GDT содержит дескрипторы, доступные всем задачам в системе. GDT может содержать дескрипторы любых типов: и дескрипторы сегментов, и системные дескрипторы (кроме шлюзов прерываний и ловушек). Первый элемент GDT (с нулевым индексом) не используется. Ему соответствует нуль-селектор, обозначающий "пустой" указатель.

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

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

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

 

Типы системных дескрипторов
  резерв   резерв
  доступный 16-битный TSS   доступный 32-битный TSS
  LDT A резерв
  занятый 16-битный TSS B занятый 32-битный TSS
  16-битный шлюз вызова C 32-битный шлюз вызова
  шлюз задачи D резерв
  16-битный шлюз прерывания E 32-битный шлюз прерывания
  16-битный шлюз ловушки F 32-битный шлюз ловушки

Дескрипторы TSS (сегмента состояния задачи) и LDT так же, как и дескрипторы сегментов содержат 32-битный линейный базовый адрес и 20-битный предел. Дескрипторы шлюзов содержат в битах 16-31 селектор вызываемого сегмента кода, а в битах 0-15 и 48-63 смещение точки входа (в шлюзе задачи не используется), а биты 32-39 зарезервированы и должны содержать 0 (для шлюза вызова биты 32-36 определяют количество параметров, передаваемых в стек вызываемой процедуры).

Для обеспечения совместимости с МП 80286 поддерживаются все 16-битные дескрипторы МП 80286. Дескрипторы МП 80286 содержат 24-разрядный адрес и 16-разрядную границу. С другой стороны, дескрипторы 32-битных процессоров имеют 32-разрядный базовый адрес, 20-разрядную границу и бит дробности G. Таким образом, если старшее слово дескриптора равно нулю, то это дескриптор МП 80286.

 

Контроль пределя является частью механизма защиты на уровне сегментов, поэтому важную роль в контроле предела играет дескриптор сегмента.

В проверке контроля предела участвуют следующие биты из дескриптора сегмента:

· бит 55 - бит гранулярности (Granularity, G);

· бит 54 - размер по умолчанию (Default Size, D) (для сегментов стека);

· бит 42 - расширение вниз (Expand-down, E) (для сегментов данных).

Когда бит гранулярности G сброшен, предел задается 20-битным значением в байтах и варьируется от 00000 до FFFFFh (1Мбайт). Когда бит гранулярности G установлен, процессор сдвигает 20-битное значение предела на 12 бит влево. В этом случае предел сегмента задается в 4Кбайтных страницах и варьируется от FFFh (предел равен 0) до FFFFFFFFh (предел равен FFFFFh). Именно в этом случае размер сегмента может достигать 4Гбайт. Когда выставлен бит гранулярности, процессор не подвергает контролю младшие 12 бит линейного адреса. Например, при пределе 0 смещения 00000000-00000FFFh не вызывают исключения.

Для всех типов сегментов, кроме сегментов данных, расширяемых вниз (E=1), предел - это максимальное смещение в сегменте, по которому допустимо чтение одного байта. Т.е. значение предела на 1 меньше размера сегмента. Нарушение общей защиты возникнет, если программа попытается прочитать:

· один байт по смещению, превышающему предел сегмента;

· одно 16-битное слово по смещению, превышающему предел сегмента - 1;

· одно двойное (32-битное) слово по смещению, превышающему предел сегмента - 3;

· одно четверное (64-битное) слово по смещению, превышающему предел сегмента - 7 и т. п.

В сегментах данных, расширяемых вниз, (обычно это сегменты стека) значение предела играет противоположную роль. Значение предела соответствует минимальному смещению, обращение по которому вызывает исключение. Таким образом, для 16-битных сегментов (D=0) допустимым диапазоном адресов является "предел+1"... FFFFh, а для 32-битных сегментов (D=1) - "предел+1"... FFFFFFFFh. Для таких сегментов размер максимален, когда предел равен 0.

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

В дополнение к контролю пределов сегментов, процессор контролирует пределы дескрипторных таблиц (GDT, LDT, IDT) и сегментов состояния задач (TSS). Таким образом, программа не может обратиться к памяти по селектору сегмента, дескриптор которого не попадает в предел дескрипторной таблицы.

<== предыдущая лекция | следующая лекция ==>
 | Контроль типа
Поделиться с друзьями:


Дата добавления: 2014-01-07; Просмотров: 317; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.01 сек.