Итак, процессор ограничивает передачи управления исключительно в пределах кольца с текущим уровнем привилегий. Однако во многих случаях возникает необходимость передачи управления между кольцами. Необходимость такой передачи в первую очередь связана с доступом пользовательских программ к обслуживаньям ОС, процедуры которых обычно размещают на уровне привилегий PL1. (об услугах ОС можно судить по MS-DOS, которая через прерывание Int21h предоставляет пользователям более 150 разнообразных обслуживаний). Поэтому при реализации межсегментных передач управления без исключений из правила обойтись не удается. Наиболее распространенным способом передачи управления между уровнями привилегий является использование шлюзов вызова - системного объекта, содержащего адрес разрешенной точки входа в более привилегированную процедуру. Способы передачи управления при межсегментных обращениях рассматриваются ниже.
Для доступа к сегменту стека также требуется, чтобы уровень привилегий сегмента назначения DPL был равен текущему уровню привилегий CPL
DPL = CPL, т.е. программа не может использовать стек даже с меньшими привилегиями.
На рис. представлена общая схема межсегментных обращений в пределах колец защиты и между ними.
В сложных многозадачных системах задачи с разными уровнями привилегий могут использовать одни и те же процедуры или данные, в которых отдельные задачи имеют общие разделяемые со всеми другими задачами области памяти с данными и процедурами. Для доступа к таким общедоступным сегментам каждая задача может иметь собственный селектор.
Перед началом цикла обмена при межсегментных обращениях программа загружает селектор в один из сегментных регистров, при этом аппаратно проверяется возможность обращения к адресуемому операнду. Если критерий защиты удовлетворен, процессор считывает содержимое дескриптора с базовым адресом адресуемого сегмента и загружает его в соответствующий кэш-регистр сегмента. После этого нормальным способом осуществляется формирование физического адреса операнда. Нетрудно заметить, что межсегментные обращения с контролем возможности доступа к сегменту являются достаточно сложными и требуют значительных временных затрат. "К счастью", межсегментные обращения в реальных программах встречаются не так часто. Большинство обращений к памяти при выполнении программы являются внутрисегментными. При их реализации проверка уровня привилегий сегмента назначения не производится. Это связано с тем, что дескриптор выбранного сегмента загружен в соответствующий кэш-регистр сегмента при первом обращении к сегменту и любые последовательные проверки защиты одного и того сегмента не требуют дополнительных обращений к памяти. В виду того, что проверка и трансляция адреса осуществляются одновременно, потери производительности процессора малы или отсутствуют.
Непосредственно перед каждым циклом обмена, в том числе и внутрисегментном, дополнительно аппаратным путем проверяется еще ряд параметров защиты. В их число входят проверка предела (границы) сегмента, проверка типа дескриптора, определение ограничений доступа к данным и некоторые другие. Большинство параметров защиты хранится в байте доступа и в поле “предел” дескриптора. Нарушение любого параметра защиты предотвращает начало цикла обмена и приводит к обработке особого случая.
2. Проверка границы. Проверка границы предназначена для предотвращения адресации в область вне адресуемого сегмента памяти.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.