Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Процессор х86.docx
Скачиваний:
21
Добавлен:
23.04.2019
Размер:
725.45 Кб
Скачать
  1. Формат вентиля вызова и исключения. Область применения вентилей вызова.

Для переходов с изменением уровня привилегий используются вентили (Gate), называемые также шлюзами. Для каждого способа косвенной межсегментной передачи управления имеются соответствующие вентили. Их использование позволяет процессору автоматически осуществлять контроль защиты. Вентили вызова (Call Gates) используются для вызова процедур со сменой уровня привилегий. Вентили задач (Task Gates) используются для переключения задач. Вентили прерываний (Interrupt Gates) и ловушек (Trap Gates) определяют процедуры обслуживания прерываний.

Вентили вызова позволяют автоматически копировать заданное число слов из старого стека в новый. Вентили прерываний отличаются от вентилей ловушек только тем, что они запрещают прерывания (сбрасывают флаг IF), а вентили ловушек – нет. Для каждого типа вентилей используются соответствующие дескрипторы вентилей (Gate Descriptors). Формат дескрипторов вентилей приведен на рисунке 1.7.

В байте управления доступом у этих дескрипторов бит Р определяет действительность (Р = 1) или недействительность (Р = 0) содержимого сегмента. Поле DPL задает уровень привилегий. Поле type_seg определяет тип вентиля:

o 4 – вентиль вызова 80286 (Call Gate),

o 5 – вентиль задачи 80286 (Task Gate),

o 6 – вентиль прерывания 80286 (Interrupt Gate),

o 7 – вентиль ловушки 80286 (Trap Gate),

o C – вентиль вызова 386+ (Call Gate),

o D – вентиль задачи 386+ (Task Gate),

o E – вентиль прерывания 386+ (Interrupt Gate), 20

o F – вентиль ловушки 386+ (Trap Gate)

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

80286 слова 16-битные, для 386+ – 32-битные. Поле Destination Selector для вентилей вызова, прерываний и

ловушек задает селектор целевого сегмента кода, а для вентиля задачи – селектор целевого TSS.

Поле Destination Segment задает смещение (адрес) точки входа в целевом сегменте.

При использовании вентилей может возникнуть исключение #GP, которое означает, что селектор указывает на некорректный тип дескриптора. При попытке использования недействительного вентиля (Р = 0) возникает исключение #NP (см. раздел 1.4).

  1. Основные исключения защиты; обработка исключения отсутствие страницы в памяти.

При попытке обращения к не присутствующей в оперативной памяти странице процессор вырабатывает исключение (page fault exception). Исключение приводит к передаче управления по заранее определённому операционной системой адресу. Вызывается программа обработчик исключения. Обработчик загружает страницу в оперативную память по какому либо физическому адресу и корректирует запись в таблице страниц. После этого обработчик возвращает управление и операция, которая привела к исключению, повторяется. Операционная система также отвечает за выгрузку страниц на диск для освобождения памяти. При этом каждый раз выбирается страница, обращение к которой производилось наиболее давно. Схема загрузки страниц по запросу приводится на рисунке 6.