<<
>>

Монолитные системы

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

Для построения монолитной системы необходимо скомпилировать все отдельные процедуры, а затем связать их в единый объектный файл с помощью компоновщика. Здесь, по существу, совсем не скрываются детали реализации — каждая процедура видит любую другую процедуру (в отличие от структуры, содержащей модули, в которых большая часть информации является локальной для модуля, и процедуры модуля можно вызвать только через специально определенные точки входа).

Однако даже такие монолитные системы могут иметь некоторую структуру.

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

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

Теперь самое время посмотреть на то, как выполняются системные вызовы. Вспомним, что вызов read выглядит следующим образом:

count = read(fd, buffer, nbytes);

Перед вызовом библиотечной процедуры read, фактически осуществляющей системный вызов read, вызывающая программа сначала помещает параметры в стек (шаги 1-3 на рис.

1.12). В силу исторических причин компиляторы языков С и C++ размещают параметры в обратном порядке (дело в том, что при передаче параметров функции print f первой в стеке должна располагаться форматная строка). Первый и третий параметры передаются по значению, а второй — по ссылке. Это означает, что процедура read получает адрес буфера (указываемый знаком &), а не его содержимое. Далее (на шаге 4) осуществляется фактический вызов библиотечной процедуры. Данная инструкция ничем не отличается от обычных вызовов процедур.

Рис- 1-12- Выполнение системного вызова read(fd, buffer, nbytes) за 11 шагов

Библиотечная процедура, возможно, написанная на языке ассемблера, обычно помещает номер системного вызова туда, куда требует операционная система (например, в регистр, как показано на шаге 5). Затем процедура исполняет инструкцию trap, чтобы переключиться из пользовательского режима в режим ядра и начать исполнение с определенного адреса внутри ядра (шаг б). Запущенный код ядра анализирует номер системного вызова и выбирает для него соответствующий обработчик, как правило, с помощью таблицы указателей на обработчики системных вызовов, индексируемой по номеру системного вызова (шаг 7). Затем выбранный обработчик запускается (шаг 8). По завершении его работы управление может быть возвращено библиотечной процедуре и передано инструкции, следующей за trap (шаг 9). Процедура, в свою очередь, возвращает управление программе пользователя так же, как любая другая процедура (шаг 10).

В завершение программа пользователя должна очистить стек: это действие всегда выполняется после возврата из процедуры (шаг 11). Предполагая, что стек растет сверху вниз, как это обычно бывает, скомпилированный код увеличивает указатель стека (Stack Pointer, SP) ровно настолько, чтобы удалить из него параметры, помещенные перед вызовом read.

После этого программа может смело приступать к выполнению следующих действий.

Описывая шаг 9, мы намеренно сказали, что управление «может быть возвращено библиотечной процедуре». Дело в том, что системный вызов способен блокировать выполнение вызвавшего процесса. Например, если вызов должен считать ввод с клавиатуры, но пользователь ничего не вводит, вызвавший процесс подлежит блокированию. В этом случае операционная система попытается найти процесс, который можно выполнить в образовавшейся паузе. Когда ожидаемый ввод, наконец, произойдет, система вернется к обработке блокированного процесса и выполнит шаги 9-11.

Такая организация операционной системы предполагает следующую структуру:

♦ Главная программа, которая вызывает требуемую служебную процедуру.

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

♦ Набор утилит, обслуживающих служебные процедуры.

В этой модели для каждого системного вызова имеется одна служебная процедура. Утилиты выполняют функции, которые нужны нескольким служебным процедурам. Деление процедур на три уровня иллюстрирует рис. 1.13.

Рис- 1-13- Простая структурная модель монолитной системы

1.5.1.

<< | >>
Источник: Э. ТАНЕНБАУМ, А. ВУДХАЛЛ. ОПЕРАЦИОННЫЕ СИСТЕМЫ Разработка и реализация 3-е издание. 2007

Еще по теме Монолитные системы:

  1. § 39 Классификация договоров в отдельных видах. – Римская классификация. – Система прусского закона, французского и австрийского кодекса. – Система русского свода. – Система настоящего изложения.
  2. Тема 15 Правова система і система права. Система законодавства та систематизація нормативно-правових актів
  3. Глава 4. Система права и система законодательства
  4. §5. Система военных судов в РФ как часть системы судов общей юрисдикции
  5. Единство и взаимосвязь правовой системы и системы правового общества
  6. § 1.3. Система трудового права і система трудового законодавства
  7. § 33 Общее правило о переходе наследства к детям. – Отличие отделенных от неотделенных. – Право представления. – Право родительское. – Право боковых родственников. – Римская система определения прав по классам и степеням. – Германская система определения прав по линиям и коленам.
  8. § 14 Отношения супругов по имуществу. – Германское начало общения имуществ в браке и римская система приданого. – Особое имущество жены. – Разнообразные системы западных законодательств. – Раздел имуществ по прекращении брака. – Ограничения брачных договоров и сделок между супругами. – Английский закон об отношениях супругов по имуществу.
  9. § 34 Смешанные системы в новейших законодательствах. – Происходящее от различия сих систем различие в порядке раздела и в допущении права представления. – Ограничение наследственного права пределами родства. – Ограничение женщин. – Разделение наследства между родами. – Возвращение подаренного родителями. – Наследование супругов и незаконных детей и родителей. – Закон наследования в Англии.
  10. Социальная система
  11. СИСТЕМА
  12. СИСТЕМА НЕРВНАЯ
  13. Тема 20. Смешанные правовые системы
  14. СИСТЕМА ТЕЙЛОРА