Сегменты, страницы и системные вызовы
Все допускаемые этими правилами комбинации прав могут быть закодированы при помощи четырех бит в дескрипторе страницы (табл. 5.1). Переключение режимов осуществляется командами СНМК, СНМЕ, CHMS и CHMU. Эти команды помещают слово состояния процессора и счетчик команд в стек, соответствующий новому режиму, сохраняют предыдущий режим в специальном поле слова состояния (зачем нужно сохранять режим в двух местах, мы поймем чуть позже), устанавливают новый режим и, наконец, передают управление по фиксированному адресу, аналогично команде SYSCALL в системах с двумя уровнями доступа.
Таблица 5.1. Коды защиты для различных режимов доступа процессора VAX. Цитируется по [Прохоров, 1990].
Код | Kernel | Executive | Supervisor | User |
---|---|---|---|---|
0000 | - | - | - | - |
0001 | Не предсказуем | |||
0010 | RW | - | - | - |
0011 | R | - | - | - |
0100 | RW | RW | RW | RW |
0101 | RW | RW | - | - |
0110 | RW | R | - | - |
0111 | R | R | - | - |
1000 | RW | RW | RW | - |
1001 | RW | RW | R | - |
1010 | RW | R | R | - |
1011 | R | R | R | - |
1100 | RW | RW | RW | R |
1101 | RW | RW | R | RW |
1110 | RW | R | R | R |
1111 | R | R | R | R |
R – право чтения, W – право записи, - – отсутствие прав.
Передача управления по фиксированному адресу позволяет нам защититься от бесконтрольного повышения уровня доступа, а все предыдущие операции дают возможность вернуться на предыдущий уровень доступа с одновременной передачей управления, используя специальную команду REI, которая восстанавливает и счетчик команд, и слово состояния. Команды СHМ(Х) обычно используются для повышения уровня доступа, а REI может использоваться только для его понижения или возврата на тот же уровень (рис. 5.6).
Рис. 5.6. Переключение режимов процессора VAX