Микроядерная структура - основа стабильности системы
При разработке структуры Windows NT была в значительной степени использована концепция микроядра. В соответствии с этой идеей ОС делится на несколько подсистем-серверов, каждая из которых выполняет отдельный набор сервисных функций - например, сервис памяти, сервис по созданию процессов или сервис по планированию процессов. Каждый сервер выполняется в пользовательском режиме, выполняя циклическую проверку, не появился ли запрос от клиента на одну из его сервисных функций. Клиент, которым может быть либо другая компонента ОС, либо прикладная программа, запрашивает сервис, посылая сообщение на сервер. Этот запрос перехватывается ядром, которое из-за ограниченности выполняемых функций в случае такой организации называется микроядром. Ядро ОС, работая в привилегированном режиме, доставляет сообщение нужному серверу. Сервер выполняет операцию, после чего ядро возвращает результаты клиенту с помощью другого сообщения (рисунок 1.1). Микроядро играет роль регулировщика - оно проверяет сообщения, пересылает их между серверами и клиентами и предоставляет доступ к аппаратуре.
Рис. 1.1. Структура ОС на базе микроядра
Использование концепции микроядра способствует переносимости операционных систем, поскольку весь машинно-зависимый код изолирован в микроядре, а значит для переноса системы на новый процессор требуется меньше изменений, и все они логически сгруппированы вместе. Операционная система Windows NT может работать на компьютерах, построенных на базе процессоров Intel, PowerPC, DEC Alpha, MIPS.
Технология микроядер является основой построения множественных прикладных сред, которые обеспечивают совместимость программ, написанных для разных ОС. Абстрагируя интерфейсы прикладных программ от расположенных ниже операционных систем, микроядра позволяют гарантировать, что вложения в прикладные программы не пропадут в течение нескольких лет, даже если будут сменяться операционные системы и процессоры. В среде Windows NT, кроме "родных" 32-битовых приложений, могут выполняться приложения MS-DOS, 16-битовые Windows-приложения, Posix- и OS/2-приложения.
Однако, такая гибкость не дается даром. Пересылка сообщений не так быстра, как обычные вызовы функций, и ее оптимизация является критическим фактором успеха операционной системы на основе микроядра. Поэтому разработчики Windows NT отказались от модели микроядра в ее чистом виде. Кроме собственно микроядра, в привилегированном режиме работает часть Windows NT, называемая executive - исполнительная подсистема. Она включает ряд компонентов, которые управляют виртуальной памятью, объектами, вводом-выводом и файловой системой (включая сетевые драйверы), взаимодействием процессов и, частично, системой безопасности. Часть Windows NT, работающая в пользовательском режиме состоит из серверов Windows NT, называемых также защищенными подсистемами (рисунок 1.2).
Рис. 1.2. Структура Windows NT
Так как защищенные подсистемы автоматически не могут совместно использовать память, они общаются друг с другом посредством посылки сообщений. Сообщения могут передаваться как между клиентом и сервером, так и между двумя серверами. Все сообщения проходят через executive. Защищенные подсистемы Windows NT работают в пользовательском режиме и создаются Windows NT во время загрузки операционной системы. Сразу после создания они начинают бесконечный цикл своего выполнения, отвечая на сообщения, поступающие к ним от прикладных процессов и других подсистем. Для упрощения на рисунке взаимодействие приложений с защищенными подсистемами иллюстрируется стрелками, соединяющими их напрямую, однако в действительности взаимодействие приложений с защищенными подсистемами реализуется через ядро путем обмена сообщениями.
Поддержку защищенных подсистем обеспечивает исполнительная часть Windows NT - executive, которая работает в пространстве ядра и никогда не сбрасывается на диск. Ее составными частями являются:
- Менеджер объектов. Создает, удаляет и управляет объектами NT executive - абстрактными типами данных, используемыми для представления ресурсов системы.
- Монитор безопасности. Устанавливает правила защиты на локальном компьютере. Охраняет ресурсы операционной системы, выполняет защиту и регистрацию исполняемых объектов.
- Менеджер процессов. Создает и завершает, приостанавливает и возобновляет процессы и нити, а также хранит о них информацию.
- Менеджер виртуальной памяти.
- Средства локального вызова процедур. Передают сообщения между клиентскими и серверными процессами одного и того же компьютера.
- Подсистема ввода-вывода. Включает в себя следующие компоненты: 1) менеджер ввода-вывода предоставляет средства ввода-вывода, независимые от устройств; 2) файловые системы, NT-драйверы, выполняющие файл-ориентированные запросы на ввод-вывод, транслирующие их в вызовы обычных устройств; 3) сетевой редиректор и сетевой сервер, драйверы файловых систем, передающие удаленные запросы на ввод-вывод на машины сети и получающие запросы от них; 4) драйверы устройств NT executive, низкоуровневые драйверы, которые непосредственно управляют устройством; 5) менеджер кэша, реализующий кэширование диска.
Исполнительная часть в свою очередь основывается на службах нижнего уровня, предоставляемых ядром (его можно назвать и микроядром) NT. В функции ядра входит:
- планирование нитей,
- обработка прерываний и исключительных ситуаций,
- синхронизация процессоров для мультипроцессорных систем,
- восстановление системы после сбоев.
Обратиться к ядру можно только посредством прерывания. Ядро расположено над уровнем аппаратных абстракций (Hardware Abstraction Level HAL), который концентрирует в одном месте основную часть машинно-зависимых процедур. Располагается HAL между NT executive и аппаратным обеспечением и скрывает от системы такие детали, как контроллеры прерываний, интерфейсы ввода/вывода и механизмы взаимодействия между процессорами. Такое решение позволяет легко переносить Windows NT с одной платформы на другую путем замены только слоя HAL.
Среди всех защищенных подсистем можно выделить так называемые подсистемы окружения - Win32, 16-битный Windows, DOS, OS/2, Posix. Каждая из этих подсистем реализует соответствующий прикладной программный интерфейс. Windows NT использует подсистемы окружения со следующими целями:
- Обеспечить несколько программных интерфейсов (APIs), сохраняя как можно более простым базовый программный код (NT executive).
- Экранировать базовую операционную систему от изменений или расширений в поддерживаемых API.
- Объединить часть глобальных данных, требуемых всем API, и в то же время отделить данные, требуемые одному API от данных, требуемых другим API.
- Защитить окружение каждого API от приложений, а также от окружений других API и защитить базовую операционную систему от различных окружений.
- Позволить операционной системе расширяться в будущем за счет новых API.