4.2.2. Работа механизма защиты данных при трансляции сегментов.В работе механизма защиты обращений к данным можно выделить два этапа:
Загрузка сегментов данных (включая стековые) производится командами "Загрузка указателя в регистр смещения". Это команда типа регистр - память: (LDS, LES, LFS, LGS, LSS) reg, mem Сегментный регистр определяется кодом операции. В адресной части команд полем "reg" задается один из регистров общего назначения, полем "mem" - адрес полного указателя операнда: смещение в сегменте и селектор сегмента. Команда выбирает из ячеек памяти, начиная с адреса mem, величину смещения некоторого операнда и селектор. При положительных результатах проверок механизма защиты смещение загружается в РОН, заданный полем "reg", а селектор - в сегментный регистр, заданный полем mem. Загрузка селектора в сегментный регистр сопровождается чтением из таблицы дескрипторов (локальной или глобальной в зависимости от значения бита G/L) дескриптора сегмента, заданного полем index селектора и записи его в дескрипторный регистр, ассоциированный с заданным сегментным регистром. Непосредственно эта команда не предусматривает каких-либо действий по использованию выбранного смещения. Со схемой выполнения команды загрузки сегментного регистра можно познакомится или по рисунку (рис. 7) или по экранной модели (мод. 1). Обращение к сегменту данных для чтения или записи операндов при выполнении команд программы. После успешной загрузки селектора, при выполнении команд, предусматривающих обращение к памяти за данными, процессор производит проверки:
При загрузке селектора в сегментный регистр стека процессор
несколько ужесточает правило защиты: загрузка разрешается, если только
значение DPL сегмента стека точно равно значению CPL и RPL. Это связано
с использованием отдельных стеков для каждого уровня привилегий.
Кроме этого, загрузка селектора в регистр SS производится, если только выбираемый сегмент допускает операции считывания и записи, а также присутствует в памяти (бит Р присутствия в дескрипторе сегмента должен находиться в состоянии 1). Это связано с тем, что стек участвует в сохранении состояния процессора при передачах управления программам обработки прерывания, и недоступность стека по записи и/или чтению парализует работу системы прерывания. Последующие проверки по обращению к стеку с операциями чтения или записи не производятся, так как необходимый контроль был произведен при загрузке селектора. Механизм защиты допускает возможность размещения данных (констант) непосредственно в кодовом сегменте. Это может быть желательным при хранении кода и данных в ПЗУ. Обращение к этим данным (только по чтению) возможно при помощи использования префикса переопределения сегмента, определенному как "читаемый".
|