Научная литература
booksshare.net -> Добавить материал -> Физика -> Александров Е.К. -> "Микропроцессорные системы" -> 100

Микропроцессорные системы - Александров Е.К.

Александров Е.К., Грушвицкий Р.И., Купрянов М.С., Мартынов О.Е. Микропроцессорные системы — Спб.: Политехника, 2002. — 935 c.
ISBN 5-7325-0516-4
Скачать (прямая ссылка): mikroprocessorniesistemi2002.djvu
Предыдущая << 1 .. 94 95 96 97 98 99 < 100 > 101 102 103 104 105 106 .. 528 >> Следующая

загруженного в сегментный регистр при обращении к соответствующему
сегменту. Этот уровень устанавливается выполняемой программой, которая с
помощью данного селектора обращается к памяти системы.
Текущий уровень привилегий CPL задается битами 0, 1 селектора,
размещенного в регистре сегмента программ CS. Определяет уровень
привилегий выполняемого в настоящий момент сегмента программы.
Напомним, что меньшее значение DPL, RPL, CPL соответствует более высокому
уровню привилегий (защиты). Наиболее защищенный сегмент имеет значение
DPL = 0, наименее защищенный - DPL = 3. Для наименее привилегированных
программ пользователя CPL = 3, наиболее привилегированные программы ядра
ОС имеют CPL = 0.
Процессор имеет специальную команду ARPL, используемую для коррекции
значения RPL селектора. Данная команда выполняет сравнение двух младших
битов селекторов, предварительно загруженных в адресуемые командой
регистры или ячейку памяти. Результатом команды является селектор, в
котором эти биты имеют максимальное из значений, заданных в исходных
селекторах.
Программы
пользователя
Служебные
программы
Ядро ОС
Утилиты ОС
Рис. 2.48. Уровни привилегий и защиты
ПРОЦЕССОРЫ ОБЩЕГО НАЗНАЧЕНИЯ И СИСТЕМЫ НА ИХ ОСНОВЕ
Обращение к сегментам программ и данных в защищенном режиме производится
с учетом описанной выше системы привилегий. При этом правила обращения
зависят от типа сегмента.
Обращение к сегментам данных производится с помощью селекторов,
загружаемых в регистры DS, ES, FS, GS. При обращении анализируются
значения RPL селектора и CPL текущей программы. Эффективный уровень
привилегий для запроса данных в этом случае определяется как максимальное
из значений RPL и CPL. Обращение к запрашиваемому сегменту данных
разрешается, если его уровень защиты DPL >= max(RPL, CPL). Нарушение
этого правила при обращении вызывает исключение типа #GP ("нарушение
общей защиты").
Таким образом, задавая определенное значение RPL в селекторе, можно
управлять доступом текущей программы к сегментам данных, имеющим
различный уровень защиты. Например, при RPL = 0 доступ к данным будет
определяться значением CPL текущей программы. Если задать RPL = 3, то при
любом CPL программа может обратиться только к наименее защищенным
сегментам данных, относящимся к кольцу 3.
Обращение к сегменту стека выполняется путем загрузки селектора в регистр
SS. Этот селектор должен выбирать дескриптор сегмента с разрешенной
записью, т. е. бит 1 в байте доступа должен иметь значение W = 1 (см.
рис. 2.43, б). Значения RPL и DPL должны быть равны CPL. Нарушение этих
правил (обращение к сегменту, для которого W = 0; использование
селекторов и дескрипторов, имеющих значения RPL и DPL, не равные CPL)
приводит к исключению типа #GP. При обращении к дескриптору, имеющему
значение бита присутствия Р = 0 (отсутствующий сегмент) возникает
исключение типа #SS ("ошибка обращения к стеку").
Обращение к сегментам программ (передача управления) реализуется при
выполнении команд межсегментного перехода JMP, вызова подпрограммы CALL и
возврата из подпрограммы RET, прерывания INT и возврата из прерывания
IRET. Правила обращения к сегментам программ зависят от значения бита
подчиненности С в байте доступа дескриптора (см. рис. 2.43, а).
Обращение к подчиненным сегментам, для которых установлено значение С =
1, допускается только из программ, имеющих такой же или более низкий
уровень привилегий. Таким образом, в программах с текущим уровнем
привилегий CPL могут выполняться межсегментные команды JMP, CALL с
передачей управления подчиненному сегменту, имеющему DPL= < CPL. При
такой передаче значение CPL сохраняется, т. е. сохраняется уровень
привилегий исходной (вызывающей) программы.
Обычно бит подчиненности С = 1 устанавливается для сегментов, которые
могут использоваться программами с различными уровнями привилегий,
например для системных библиотек. При этом подчиненные сегменты должны
размещаться в кольце защиты с номером, соответствующим максимальному
уровню привилегий (минимальному значению CPL) вызывающих программ.
Обращение к неподчиненным сегментам, имеющим значение С = 0, с помощью
команд JMP и CALL допускается только в случае, если уровень привилегий
текущей программы равен уровню защиты сегмента: CPL = DPL.
Обращение через шлюз используется для вызова неподчиненных сегментов
программ с более высоким уровнем привилегий, чем текущая программа. Для
реализации таких вызовов служат специально установленные точки входа в
программы, которые называются шлюзами (или вентилями) вызова. Менее
привилегированная процедура может вызвать более привилегированную,
обращаясь к ней через дескриптор шлюза вызова, определяющий доступную
точку входа. Этот способ обращения позволяет программам пользователя
обращаться за обслуживанием к операционной системе. При этом допускаются
обращения только к определенным процедурам, которые санкционируются путем
введения в систему
РАБОТА ПРОЦЕССОРА В ЗАЩИЩЕННОМ И РЕАЛЬНОМ РЕЖИМАХ
Предыдущая << 1 .. 94 95 96 97 98 99 < 100 > 101 102 103 104 105 106 .. 528 >> Следующая

Реклама

c1c0fc952cf0704ad12d6af2ad3bf47e03017fed

Есть, чем поделиться? Отправьте
материал
нам
Авторские права © 2009 BooksShare.
Все права защищены.
Rambler's Top100

c1c0fc952cf0704ad12d6af2ad3bf47e03017fed