3299 ПЕРЕКЛЮЧЕНИЕ МИКРОПРОЦЕССОРА В ЗАЩИЩЕННЫЙ РЕЖИМ

1. ПЕРЕКЛЮЧЕНИЕ МИКРОПРОЦЕССОРА

В ЗАЩИЩЕННЫЙ РЕЖИМ

1.1. Защищенный режим работы микропроцессора

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

Ключевым объектом защищенного режима является специальная структура – дескриптор сегмента, который содержит следующие атрибуты:

- расположение сегмента в памяти;

- размер сегмента;

- уровень привилегий;

- тип доступа (назначение сегмента);

- другие.

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

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

Работу микропроцессора в защищенном режиме обеспечивают системные регистры, которые можно разделить на три группы:

-         четыре регистра управления;

-         четыре регистра системных адресов;

-         восемь регистров отладки.

Регистры управления

В группу регистров управления входят 4 регистра: cr0, cr1, cr2, cr3. Регистры доступны только программам с уровнем привилегий 0.

Регистр cr0 содержит системные флаги, управляющие режимами работы микропроцессора и отражающие его состояние:

-бит 0 показывает, в каком режиме работает микропроцессор в данный момент ( 0 – реальный, 1 – защищенный);

- бит 1  отражает наличие сопроцессора (всегда 1);

-бит 3 отражает переключение микропроцессора на выполнение другой задачи;

- бит 18 – маска выравнивания;

- бит 30 – запрещение КЭШ-памяти;

-         бит 31 разрешает или запрещает страничное преобразование при страничной организации памяти.

Регистр cr1 зарезервирован.

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

Регистр cr3 содержит 20-битный физический адрес каталога страниц текущей задачи.

Регистры системных адресов

Регистры предназначены для защиты программ и данных в мультизадачном режиме работы микропроцессора.

В указанную группу регистров входят:

- регистр таблицы глобальных дескрипторов  gdtr, имеет размер 48 бит и содержит базовый адрес глобальной дескрипторной таблицы GDT и ее размер в байтах;

- регистр таблицы локальных дескрипторов ldtr, имеет размер 16 бит и содержит так называемый селектор (указатель) дескриптора локальной дескрипторной таблицы LDT. Селектор содержит адрес дескриптора, расположенного в GDT, который описывает сегмент, содержащий локальную дескрипторную таблицу LDT.

- регистр таблицы дескрипторов прерываний idtr, имеет размер 48 бит и содержит базовый адрес и размер дескрипторной таблицы прерываний IDT;

- регистр задачи tr, имеет размер 16 бит и содержит селектор (указатель) дескриптора, расположенного в GDT, который описывает сегмент состояния задачи TSS, выполняемой в данный момент.

Регистры отладки

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

1.2. Структура таблиц дескрипторов

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

Указатель на дескриптор сегмента в одной из таблиц GDT или LDT помещается в один из шести сегментных регистров: DS, CS, SS, ES, GS, FS. Локализация таблиц осуществляется с использованием системных регистров gdtr, ldtr, idtr.

Для того чтобы собрать информацию о всех программных объектах, находящихся в данный момент в памяти и в системе в целом, их дескрипторы объединяют в таблицы, которые представляют собой массивы 8-байтовых элементов.

Микропроцессор аппаратно поддерживает три типа дескрипторных таблиц:

1) таблица GDT (Global Descriptor Table) – глобальная дескрипторная таблица.

Это основная общесистемная таблица, к которой допускается обращение со стороны программ, обладающих достаточными привилегиями. Расположение таблицы GDT в памяти локализуется с помощью специального регистра gdtr. В таблице могут содержаться следующие типы дескрипторов:

- дескрипторы сегментов кодов программ;

- дескрипторы сегментов данных программ;

- дескрипторы стековых сегментов программ;

- дескрипторы сегментов состояния задач (ТSS);

- дескрипторы для локальных дескрипторных таблиц (LDT);

- шлюзы вызова;

- шлюзы задач;

2) таблица LDT (Local Descriptor Table) – локальная дескрипторная таблица.

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

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

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

В таблице LDT могут содержаться следующие типы дескрипторов:

- дескрипторы сегментов кодов программ;

- дескрипторы сегментов данных программ;

- дескрипторы стековых сегментов программ;

- шлюзы вызова;

- шлюзы задач;

3) таблица IDT (Interrrupt Descriptor Table) – дескрипторная таблица прерываний.

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

Расположение таблицы IDT в памяти локализуется с помощью специального регистра idtr. Элементы данной таблицы называются шлюзами и бывают трех типов:

- шлюзы задач;

- шлюзы прерываний;

- шлюзы ловушек.

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

Любой сегментный регистр содержит 16 разрядов, из которых 13 используются для адресации дескрипторов в сегменте, 1 разряд (TI) – для указания на таблицу (GDT или LDT), где расположен дескриптор, и 2 разряда (RPL) определяют запрашиваемый уровень привилегий. Структура сегментного регистра показана на рис.1

15                                                                         4      3      2      1   0

 

 

 

 

 

TI

 

RPL

 

 

Адрес дескриптора (селектор)

 

 

 

Рис.1.Структура сегментного регистра в защищенном режиме

Если бит TI = 0,  то сегментный регистр содержит селектор, указывающий на дескриптор в глобальной дескрипторной таблице GDT.

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

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

1.3. Структура дескриптора

Дескриптор представляет собой структуру размером в 8 байт (рис.2).

31                                                                       15                                                 0

Базовый адрес сегмента

(base_1)

Размер сегмента

(limit_1)

 

31                                 2    3              19             15                 8                             0

Базовый адрес

Сегмента (base_3)

G

D

0

U

limit_2

Байт   AR

(atr_)

Базовый адрес

сегмента (base_2)

Рис.2. Структура дескриптора сегмента

Для записи базового адреса сегмента в дескрипторе выделены 4 байта, занимающих три поля: base_1, base_2, base_3.

Размер сегмента записывается в два поля: limit_1 и limit_2. Оба поля занимают 20 бит в дескрипторе. В определении размера сегмента принимает участие  бит G дескриптора.

Если бит G=0, то размер сегмента определяется в байтах, а если G=1, то в страницах. Таким образом, размер сегмента может быть определен или в пределах 1 Мб, или 4 Гб (размер страницы 4 Кб).

Бит D в поле дескриптора определяет разрядность операндов и режим адресации. Если D=0,то в программе используются 16-разрядные операнды и режимы 16-разрядной адресации. Если D=1, то в программе используются 32-разрядные операнды и режимы 32-разрядной адресации.

Бит U является битом пользователя и не имеет специального назначения.

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

Структура байта AR представлена на рис.3.

 

7      6      5       4      3       2            1          0


P

 

DPL

 

 

S

 

I

C

ED

R

W

 

A

Рис.3. Структура байта AR

 

Поле DPL используется для защиты сегмента по привилегиям. В зависимости от содержимого поля сегмент может находиться на одном из уровней приоритета: 0, 1, 2 или 3.  Высшему приоритету соответствует код00.

Бит А доступа к сегменту устанавливается аппаратно при обращении к сегменту.

Бит R/W несет разную функциональную нагрузку в зависимости от типа сегмента.

Для сегмента кода бит R определяет, возможно ли чтение из сегмента: 0 – чтение запрещено, 1- чтение разрешено.

Для сегмента данных бит W определяет возможность записи: 0 – модификация данных в сегменте запрещена, 1 – модификация данных в сегменте разрешена.

Бит C/ED также трактуется по-разному в зависимости от типа сегмента. Если дескриптор описывает сегмент кода, то бит С определяет подчиненность кода: 1 – подчиненный сегмент кода, 0 – обычный сегмент кода.

Для сегмента данных бит ED служит для различения сегментов стека и данных: 0 – сегмент данных, 1 – сегмент стека.

Бит I определяет тип сегмента: 0 – сегмент данных или стека, 1 – сегмент кода.

Бит S определяет, какой объект описывает дескриптор: 1 – дескриптор описывает сегмент, 0 – дескриптор описывает специальный системный объект, который может и не быть сегментом в памяти.

Бит присутствия Р определяет, где находится в данный момент сегмент: 0 – сегмента нет в оперативной памяти; 1 – сегмент находится в оперативной памяти.

В таблице 1 приведены комбинации состояний разрядов 3,2,1 и соответствующие им характеристики сегментов.

 

 

 

Таблица 1

Состояние

Назначение сегмента

I

C/ED

R/W

0

0

0

Cегмент данных только для чтения

0

0

1

Сегмент данных с разрешением записи и чтения

0

1

0

Не определено

0

1

1

Сегмент стека с разрешением записи и чтения

1

0

0

Сегмент кода с разрешением только выполнения

1

1

0

Подчиненный сегмент кода с разрешением выполнения

1

1

1

Подчиненный сегмент кода с разрешением выполнения и чтения из него

1

0

1

Сегмент кода с разрешением  выполнения и чтения из него



 
данную программу базировались. серверов Скачать бесплатно. обои Изображения высокого