Монолитные операционные системы являются противоположностью микроядерных ОС. В монолитной ОС, даже если она сильно структурирована, очень трудно удалить изменить или добавить уровень или модуль.
В общем случае организация монолитной системы представляет собой «большой беспорядок». Структура такой системы обычно отсутствует вообще. Монолитная операционная система написана в виде набора процедур, каждая из которых может вызывать другие, когда ей это нужно. При этом каждая из процедур имеет строго определенный интерфейс в терминах параметры–результаты. Здесь по существу полностью отсутствует попытка сокрытия деталей реализации системы – каждая процедура видит любую другую.
При обращении к системным вызовам, поддерживаемым операционной системой, параметры помещаются в строго определенные места – регистры или стек, после чего выполняется специальная команда, называемая вызовом ядра или вызовом супервайзера. Эта команда переключает машину из режима пользователя в режим ядра и передает управление операционной системе. Операционная система проверяет параметры вызова, определяет, какой системный вызов должен быть выполнен и обращается к таблице или массиву с номером системного вызова в качестве индекса. В соответствующем элементе массива или таблицы содержится ссылка на процедуру обработки этого вызова. Такая организация операционной системы предполагает наличие, все же, определенной структуры:
- главная программа, вызывающая требуемую служебную процедуру,
- набор служебных процедур, выполняющих системные вызовы,
- набор утилит, обслуживающих служебные процедуры.
На рисунке 4.4 изображена указанная структура разделения процедур на три уровня.
Рисунок 4.4 – Простая модель монолитной системы
Обобщением модели, изображенной на рисунке 1.5 является организация операционной системы в виде уровней иерархии и уровней абстракции [2]. В иерархической структуре современной операционной системы различные функции находятся на разных уровнях иерархии, в зависимости от их сложности, характеристик и уровня абстракции. Работа компонентов одного уровня основана на работе компонентов низших уровней. В идеале изменение одного уровня не должно влиять на все остальные уровни.