Иллюстрированный самоучитель по теории операционных систем

Сегменты, страницы и системные вызовы

– О, порождение Земли и Тьмы, мы приказываем тебе отречься… – твердым,
повелительным тоном начал Гальдер.
Смерть кивнул.
– ДА, ДА, ЗНАЮ Я ВСЕ ЭТО. ВЫЗЫВАЛИ-ТО ЧЕГО?

Т. Пратчетт

Реализовав страничную или сегментную виртуальную память, мы сталкиваемся с той же проблемой, о которой шла речь в разд. "Системы с базовой виртуальной адресацией": пользовательские программы не имеют доступа к адресным пространствам друг друга и к таблице дескрипторов, но ведь им надо иметь возможность вызывать системные сервисы и передавать им параметры!

Один из основных способов решения этой проблемы сродни методу, применяемому в системах с базовой адресацией: вводятся два режима работы процессора, "системный" и "пользовательский", в которых используются разные таблицы дескрипторов. Переключение из пользовательского режима в системный осуществляется специальной командой, которая вызывает определенную процедуру в системном адресном пространстве.

Известную сложность при этом представляет передача параметров: как отмечалось выше, пользовательское адресное пространство может быть отображено на физические адреса весьма причудливым образом. Для разрешения указателя в этом адресном пространстве нам либо необходимо анализировать пользовательскую таблицу дескрипторов вручную, либо каким-то способом временно переключить диспетчер памяти на использование этой таблицы.

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

Некоторые архитектуры предоставляют и более изощренные способы реализации системных вызовов и передачи управления между системой и прикладной программой.

Виртуальная память и режимы процессора VAX

Например, миникомпьютеры VAX имеют четыре режима работы процессора (в порядке возрастания прав доступа): режим пользователя (User), режим супервизора (Supervisor), режим исполнителя (Executive) и режим ядра (Kernel) Режим работы определяется битами 22 и 23 в слове состояния процессора (рис. 5.5). Каждый из режимов имеет собственный указатель стека. Операционная система VAX/VMS использует три из доступных режимов (пользовательский, исполнительный и ядра), а BSD Unix – только два.

Каждая страница адресного пространства может иметь различные права доступа для разных режимов. При этом соблюдаются следующие правила.

  1. Допустимы только права чтения и записи.
  2. Право записи всегда выдается вместе с правом чтения.
  3. Каждый более привилегированный режим всегда имеет те же права, которые имеют менее привилегированные режимы, плюс, возможно, какие-то еще. Такая организация доступа называется кольцами защиты.

Иллюстрированный самоучитель по теории операционных систем › Сегментная и страничная виртуальная память › Сегменты, страницы и системные вызовы
Рис. 5.5. Слово состояния процессора VAX

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.