Call gates (procedure gates ).



Это шлюз вызова процедур со сменой уровня привилегий.

0101 - Task gates - шлюз переключения задач;

0110 - Interrupt gates- шлюз прерываний (с взведением бита запрета прерываний ).

1000 – Trap gates – шлюзы ловушек – отличаются от шлюза прерываний тем, что

 в этом случае не выполняется запрета прерываний.

Фактически шлюзы 0110 и 1000 находятся в IDT, так как механизм переключений осуществляется не через TSS, а дескриптор в IDT и вектор в нем.

Процедуры преобразования виртуальных адресов в физические

1.

1. Читается 3 бит в селекторе адреса команды.

1.1. Если бит = 0 ( то GDT, иначе LDT) регистре GDTR читается базовый адрес расположения таблицы GDT.      

 

 1.2. Выполняется сложение содержимого Base и index и находится физический адрес дескриптора сегмента, к которому относится виртуальный адрес команды.

 

 

1.3. По найденному адресу находится дескриптор сегмента, в полях которого находятся базовый адрес сегмента ОЗУ, его размер, DPL (descriptor privilege level ) и другие биты.

1.4. Проверяется совместимость типа загружаемого селектора с типом сегментного регистра.

В CS должен быть только селектор кода, в DS - данных, SS - стек.

В другие – любые.

1.5. Проверяется корректность селектора команды на размер.

Для чего сравнивается содержимое полей offset команды и limit дескриптора.

1.6. Выполняется проверка прав доступа к сегменту по содержимому полей RPL селектора команды и DPL дескриптора сегмента. Доступ возможен при RPL > = DPL.

При нарушении прав доступа и границы сегмента происходит прерывание.

1.7. Проверяется наличие сегмента программы в ОЗУ по биту Р=1 (present ) в дескрипторе.

Если нет – прерывание.

1.8. Если все условия выполняются, то выполняется вычисление физического линейного адреса команды - складываются содержимое полей offset в коде команды и base в дескрипторе сегмента и по найденному значению осуществляется доступ к ячейке ОЗУ.

Если нет нужного сегмента программы в ОЗУ (Р = 0), то управление передается диспетчеру памяти .

Всякий раз при загрузке сегмента программы в ОЗУ в таблице дескрипторов сегментов устанавливается адрес его начала ( базовый адрес ) и устанавливается бит присутствия.

При его отсутствии (Р=0) возникает задача, что ( какой сегмент ) выгрузить на ЖД.

Существует ряд дисциплин :  

При выборе из имеющих свободных выбирается 1-й подходящий или удаляется на диск1-й неподходящий.

При выгрузке:

1. FIFO - first input first output.

2. LRU least response used (дольше всех неиспользовавшийся ).

3. LFU least frequency used (по наименьшей частоте использования ).

4. RANDOM.

 

Диспетчер памяти ведет учет по частоте и длительности использования сегмента.

LDT

 

В этом случае регистр LDTR указывает на дескриптор сегмента косвенно через таблицу GDT.

Поэтому виртуальный адрес преобразуется в физический через дополнительный цикл.

Вначале находится физический адрес дескриптора в таблице LDT через дескриптор в GDT по ранее рассмотренной схеме через таблицу GDT.

 


Дата добавления: 2018-08-06; просмотров: 302; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!