Все рассмотренные подходы к построению операционных систем имеют свои достоинства и недостатки. В большинстве случаев современные операционные системы используют различные комбинации этих подходов. Так, например, ядро операционной системы Linux представляет собой монолитную систему с элементами микроядерной архитектуры. При компиляции ядра можно разрешить динамическую загрузку и выгрузку очень многих компонентов ядра – так называемых модулей. В момент загрузки модуля его код загружается на уровне системы и связывается с остальной частью ядра. Внутри модуля могут использоваться любые экспортируемые ядром функции.
Другим примером смешанного подхода может служить возможность запуска операционной системы с монолитным ядром под управлением микроядра. Так устроены 4.4BSD и MkLinux, основанные на микроядре Mach. Микроядро обеспечивает управление виртуальной памятью и работу низкоуровневых драйверов. Все остальные функции, в том числе взаимодействие с прикладными программами, осуществляется монолитным ядром. Данный подход сформировался в результате попыток использовать преимущества микроядерной архитектуры, сохраняя по возможности хорошо отлаженный код монолитного ядра.
Наиболее тесно элементы микроядерной архитектуры и элементы монолитного ядра переплетены в ядре Windows NT. Хотя Windows NT часто называют микроядерной операционной системой, это не совсем так. Микроядро NT слишком велико (более 1 Мбайт), чтобы носить приставку "микро". Компоненты ядра Windows NT располагаются в вытесняемой памяти и взаимодействуют друг с другом путем передачи сообщений, как и положено в микроядерных операционных системах. В то же время все компоненты ядра работают в одном адресном пространстве и активно используют общие структуры данных, что свойственно операционным системам с монолитным ядром. По мнению специалистов Microsoft, причина проста: чисто микроядерный дизайн коммерчески невыгоден, поскольку неэффективен.
Таким образом, Windows NT можно с полным правом назвать гибридной операционной системой.
Когда в 1989 году Microsoft приступила к разработке Windows NT, было выдвинуто несколько ключевых требований к новой операционной системе. Это должна была быть полностью 32-разрядная ОС, способная работать на многочисленных аппаратных платформах с разной архитектурой.
Кроме того, от NT требовалось выполнение большинства существующих 16-разрядных приложений для MS-DOS и Windows 3.х.
В целях обеспечения эффективности и целостности работы ОС в системе Windows NT реализуются два режима работы (см. схему) :
· режим ядра (kernel mode)
· режим пользователя (user mode)
Режим ядра - это привилегированный режим работы, в котором код получает прямой доступ ко всем аппаратным ресурсам и всей памяти, включая адресные пространства всех процессов режима пользователя. Функциональные возможности компонентов режима ядра включают:
· прямой доступ к оборудованию;
· прямой доступ ко всем видам памяти компьютера;
· возможность работы без передачи на жесткий диск в файл подкачки виртуальной памяти;
· более высокий приоритет исполнения, чем процессы режима пользователя.
Функционирование режима ядра Windows NT обеспечивается исполняющей системой Windows NT (Windows NT Executive), состоящей из следующих компонентов :
· сервис исполняющей системы- управление памятью, процессами, потоками, безопасностью, вводом/выводом, межпроцессорными обменами (см. схему);
· ядро Windows NT (ntoskrnl.exe) выполняет низкоуровневые функции операционной системы: диспетчеризация потоков, прерываний и исключений, синхронизация процессоров, отложенный вызов процедур. В отличие от остальной исполняемой части операционной системы, ядро никогда не выгружается из оперативной памяти, его выполнение никогда не прерывается другими потоками. Код ядра написан в основном на Си, а части, дающие наибольшую нагрузку на процессор, на языке Ассемблера. Ядро расположено между слоем системных служб и HAL;
· слой абстракции от оборудования (HAL - Hardware Abstraction Layer) изолирует ядро, драйверы устройств и исполняемую часть NT от аппаратных платформ, на которых должна работать операционная система. Этот программный слой позволяет скрыть особенности аппаратных платформ, предоставив ОС стандартные точки входа в процедуры, благодаря чему для нее исчезают различия между платформами и архитектурами. Поэтому ОС может функционировать на разных платформах с разными процессорами (остались только Intel и Alpha). Кроме того, Windows NT способна работать на одно- и многопроцессорных компьютерах;
Кроме того в режиме ядра работают :
· драйверы устройств включают как файловую систему, так и аппаратные драйверы, которые транслируют пользовательские вызовы функций ввода/вывода в запросы физических устройств ввода/вывода;
· функции графического интерфейса пользователя работают с окнами, элементами управления и рисунками.
Режим пользователя - менее привилегированный по сравнению с режимом ядра работы процессора.
· не имеет прямого доступа к аппаратуре. Это сделано в целях защиты от неверно работающих приложений или от несанкционированного доступа. Запросы на использование аппаратных ресурсов должны быть разрешены компонентом режима ядра;
· ограничен размерами выделенного адресного пространства, что позволяет обеспечить дополнительную защиту ОС. Системные службы он вызывает через интерфейсы прикладных программ (Application Program Interface - API);
· может быть выгружен из физической памяти в виртуальную память на жестком диске. Виртуальная память (virtual memory, VRAM) использует пространство на жестком диске как дополнительную оперативную память;
· Приоритет процесса пользовательского типа ниже, чем у процессов режима ядра. Поэтому в сравнении с последним ему, как правило, предоставляется меньше процессорного времени. Это предохраняет ОС от снижения производительности или возникновения задержек, связанных с ожиданием завершения работы приложений.
Имеется четыре базовых типа пользовательских процессов :
· Специальные процессы поддержки системы, например, процесс регистрации пользователя и менеджер сессий, которые не являются службами NT;
· Процессы сервера, которые являются службами NT (аналог демонов в ОС Unix). Примером может быть регистратор событий (Event Logger);
· Подсистемы среды, которые обеспечивают пользовательским приложениям среду других операционных систем. Windows NT поставляется с тремя подсистемами: Win32, Posix и OS/2 2.1;
· Пользовательские приложения одного из пяти типов: Win32, Windows 3.1 (Win16), MS-DOS, Posix или OS/2 2.1.
4. Вычислительный процесс и его реализация с помощью ОС
Мультипрограммирование (многозадачность) – это способ организации вычислительного процесса, при котором на одном процессоре попеременно выполняются сразу несколько программ. Эти программы совместно используют не только процессор, но и оперативную память, данные, устройства ввода-вывода, т.е. ресурсы. Мультипрограммирование призвано повысить эффективность использования ВС. Критерями эффективности ВС являются:
- пропускная способность – количество задач, выполняемых ВС в единицу времени;
- удобство работы пользователей, заключающееся, в частности, в том, что они имеют возможность интерактивно работать одновременно с несколькими приложенияи на одной машине
- реактивность системы – способность системы выдерживать заранее заданные интервалы времени между запуском программы и получением результата.
В зависимости от выбранного критерия эффективности ОС мы делили на:
- системы с пакетной обработкой
- системы разделения времени
- системы ревального времени
- мультипроцессорные.
Процесссо стороны пользователя – это исполняемый модуль, выполняющий задачу, поставленную ОС (нестрогое определение).
Примерами процессов являются: прикладные программы пользователей, утилиты и другие системные обрабатывающие программы. Процессами могут быть редактирование какого-либо текста, трансляция исходной программы, ее компоновка, исполнение. Причем трансляция какой-нибудь исходной программы является одним процессом, а трансляция следующей исходной программы – другим процессом.
Для реализации мультипрограммирования, ОС должна определить и оформить для себя те внутренние единицы работы, между которыми будет разделяться процессор и другие ресурсы компьютера. В настоящее время в большинстве ОС определены два типа единиц работы.
Процесс(задача) – это более крупная единица работы ОС, требующая для своего выполнения нескольких более мелких работ, для обозначения которых используют термины «поток», или «нить».
Поток(нить) – это последовательность команд, выполняемых в процессе.
Для ОС процесс представляет собой единицу работы, заявку на потребление системных ресурсов.
Процесс (задача) со стороны ОС - абстракция, описывающая выполняющуюся программу и ее данные.