Поддержка механизма модульности. Уровни доступа. Слова расширения. Использование команд CAS/CAS2 в системных программах, страница 2

+-------------------------------------------------------+

+$14  ¦ ____     Сохраненное значение указателя стека   ____  ¦

¦                                                       ¦

+-------------------------------------------------------+

+$18  ¦                                                       ¦

¦                 Аргументы (необязательны)             ¦

¦                                                       ¦

L-------------------------------------------------------Рис. D-3.Стековое окно вызова модуля

Сохраненное значение программного счетчика  представляет  собой адрес  команды, следующей за командой CALLM. Поля дискриминанта и типа определяют соответственно способ передачи  аргументов  и тип  стекового  окна  модуля и копируются в окно из дескриптора модуля командой CALLM; если поля дискриминанта и типа имеют недопустимые  значения,  то  при выполнении команды RTM возникнет ошибка формата. Значение уровня доступа запрашивается от  внешнего  устройства  и сохраняется в стековом окне командой CALLM;

это  значение  восстанавливается  командой  RTM. Поле Суммарной длины  аргументов устанавливается командой CALLM и используется командой RTM для удаления аргументов из стека вызывающего модуля. Содержимое CCR сохраняется командой CALLM и  восстанавливается  командой  RTM. Поле Сохраненного указателя стека содержит значение указателя стека на момент  начала  выполнения  команды

CALLM; это значение восстанавливается командой RTM. Поле Сохраненного указателя области данных модуля содержит значение этого указателя для вызывающего модуля.

D.2 УРОВНИ ДОСТУПА

Механизм модульности процессора MC68020 поддерживает более тонкое управление правами доступа, нежели то, которое определяется просто различием режимов пользователя и супервизора. Этот механизм  позволяет модулю с ограниченными правами доступа вызывать модуль с большими правами доступа. С помощью внешнего устройства процессор может проверить, допустимо ли повышение  в  правах доступа, а также выявить попытки модуля получить права доступа, которые не были ему предоставлены.

Тип $01 дескрипторов модуля и стековых окон модулей  свидетельствует о наличии запроса на смену уровня доступа. При обработке окна или дескриптора типа $01 команды CALLM и RTM устанавливают связь с внешним устройством управления доступом посредством обращения  к  пространству  ЦП. При таком обращении адресные биты

[19:16] устанавливаются равными 0001. На Рис.D-4 показана карта адресов для таких обращений к пространству ЦП. Если  при  одном из этих обращений во время выполнения команд CALLM или RTM возникнет  ошибка шины, то процессором будет возбуждено исключение ошибки формата.

31              23                                      0

----------------T-----------------------------------------¬

$00 ¦   CL          ¦   (не используется, зарезервировано)    ¦

+---------------+-----------------------------------------+

$04 ¦   AS          ¦   (не используется, зарезервировано)    ¦

+---------------+-----------------------------------------+

$08 ¦   IAL         ¦   (не используется, зарезервировано)    ¦

+---------------+-----------------------------------------+

$0C ¦   DAL         ¦   (не используется, зарезервировано)    ¦

L---------------+---------------------------------------------------------------------------------------------------¬

$40 ¦   адрес дескриптора для случая функционального кода 0   ¦

+---------------------------------------------------------+

$44 ¦   адрес дескриптора для случая функционального кода 1   ¦

¦           (пространство данных пользователя)            ¦

+---------------------------------------------------------+

$48 ¦   адрес дескриптора для случая функционального кода 2   ¦

¦         (программное пространство пользователя)         ¦

+---------------------------------------------------------+

$4C ¦   адрес дескриптора для случая функционального кода 3   ¦

+---------------------------------------------------------+

$50 ¦   адрес дескриптора для случая функционального кода 4   ¦

¦            (пространство данных супервизора)            ¦

+---------------------------------------------------------+

$54 ¦   адрес дескриптора для случая функционального кода 5   ¦

¦          (программное пространство супервизора)         ¦

+---------------------------------------------------------+

$58 ¦   адрес дескриптора для случая функционального кода 6   ¦

+---------------------------------------------------------+

$5C ¦   адрес дескриптора для случая функционального кода 7   ¦

¦                    (пространство ЦП)                    ¦

L---------------------------------------------------------Рис.D-4. Внешние регистры управления уровнем доступа

Регистр текущего уровня доступа (CL) содержит код уровня доступа  выполняемого  в  настоящий момент модуля. Через регистр IAL

процессором запрашивается повышение уровня доступа,  соответственно,  через регистр DAL - его понижение. Формат этих трех регистров безразличен для центрального процессора, однако предполагается, что информация, считанная из дескриптора модуля, поля

CCR стекового окна либо из регистра  текущего  уровня  доступа, осмысленна и может быть записана в регистры повышения или понижения  уровня  доступа.  Регистр статуса доступа (AS) позволяет процессору проверить корректность предполагаемого уровня доступа. В Таблице D-1 приведен перечень допустимых значений регистра статуса доступа.

Таблица D-1. Коды регистра статуса уровня доступа

----------T---------------T-----------------------------------¬

¦Значение ¦ Допустим -    ¦      Действия процессора          ¦

¦  кода   ¦   недопустим  ¦                                   ¦

+---------+---------------+-----------------------------------+

¦   00    ¦  недопустим   ¦ ошибка формата                    ¦

+---------+---------------+-----------------------------------+

¦   01    ¦   допустим    ¦ нет изменения прав доступа        ¦

+---------+---------------+-----------------------------------+

¦  02-03  ¦   допустим    ¦ изменить права доступа            ¦

¦         ¦               ¦ без изменения указателя стека     ¦

+---------+---------------+-----------------------------------+

¦  04-07  ¦   допустим    ¦ изменить права доступа            ¦

¦         ¦               ¦ с изменением указателя стека      ¦