- •Общие сведения, ос 90-х годов.
- •Рабочие станции
- •Цели проекта Windows nt: расширяемость и переносимость.
- •Расширяемость
- •Переносимость
- •Цели проекта Windows nt: надежность, совместимость и производительность.
- •Совместимость
- •Производительность
- •Модели Windows nt: клиент-сервер.
- •Объектная модель. Симметричная мультипроцессорная обработка.
- •Защищенные подсистемы. Исполнительная система.
- •Исполнительная система
- •Основные понятия: сессия регистрации, подсистемы среды.
- •Сессия регистрации
- •Подсистемы среды
- •Базовые сервисы: объекты, объекты в памяти.
- •Объекты
- •Объекты размещаются в памяти ос.
- •Ввод-вывод и файловые системы
- •Интернационализация, регионы, Unicode.
- •Интернационализация
- •Регионы
- •Структурная обработка исключений.
- •Удержание объектов
- •Учет использования ресурсов
- •Методы объектов.
- •Защита объектов. Маркеры доступа.
- •Маркеры доступа
- •Списки контроля доступа. Общий принцип работы.
- •Как все это работает вместе
Производительность
Последней целью проекта Windows NT было достижение высокой производительности. Приложения с большим объемом вычислений, такие как графические пакеты, средства моделирования и пакеты финансового анализа требуют достаточно высокой производительности, чтобы обеспечить пользователю хорошее время отклика. Одного быстродействующего оборудования для этого недостаточно. ОС тоже должна быть быстрой и эффективной.
Производительность постоянно имелась в виду при разработке всех компонентов Windows NT. Проводилось тестирование и моделирование быстродействия компонентов, критичных для производительности системы. Системные вызовы, страничные ошибки и другие критические участки вычислений тщательно оптимизировались для достижения максимальной скорости обработки.
Защищенные подсистемы, серверы, которые выполняют функции ОС, должны часто взаимодействовать друг с другом и с приложениями-клиентами. Чтобы это взаимодействие не снижало производительность серверов, в состав ОС был включен высокоскоростной механизм передачи сообщений, так называемый локальный вызов процедур (local procedure call, LPC).
Каждая защищенная подсистема, обеспечивающая среду ОС, или подсистема среды (environment subsystem), была тщательно спроектирована, чтобы часто используемые системные вызовы выполнялись как можно быстрее.
Критические компоненты сетевой поддержки Windows NT для улучшения производительности были встроены в привилегированную часть ОС. Несмотря на это, они могут загружаться и выгружаться динамически .
Модели Windows nt: клиент-сервер.
Существует множество способов структурирования кода ОС. Один подход, особенно часто применяемый в небольших ОС, например в MS-DOS, состоит в организации системы как набора процедур, каждую из которых может вызывать любая пользовательская процедура. Такая монолитная структура не обеспечивает изоляции данных; в разных участках кода используется информация об устройстве всей системы. Расширение ОС этого типа затруднительно, так как изменение некоторой процедуры может вызвать ошибки в других частях системы, на первый взгляд не имеющих к ней отношения.
Во всех монолитных ОС, кроме самых простых, приложения отделены от собственно ОС. Иными словами, код ОС исполняется в привилегированном режиме процессора — в этой книге он называется режимом ядра (kernel mode) и имеет доступ к данным системы и к аппаратуре; приложения исполняются в непривилегированном, так называемом пользовательском режиме (user mode), в котором им предоставлен ограниченный набор интерфейсов и ограниченный доступ к системным данным. Когда программа пользовательского режима вызывает системный сервис, процессор перехватывает вызов и переключает вызывающий поток в режим ядра. Когда выполнение системного вызова завершается, ОС переключает поток обратно в пользовательский режим и дает возможность вызывающей программе продолжить выполнение. Структура монолитной ОС с разделением пользовательского режима и режима ядра показана на рис. 2-1.
Рис. 2-1. Монолитная операционная система.
Другой подход к структурированию системы предполагает разделение ее на модули, наслоенные один поверх другого. Каждый модуль предоставляет набор функций, которые могут вызываться другими модулями. Код, расположенный в некотором слое, вызывает код только из нижележащих слоев. В некоторых ОС, многослойность даже принудительно обуславливается аппаратурой (посредством использования иерархии режимов процессора). Одна из возможных послойных структур показана на рис. 2-2.
Рис. 2-2. Послойная операционная система.
Одним из преимуществ послойной организации ОС является то, что код каждого слоя получает доступ только к необходимым ему интерфейсам (и структурам данных) нижележащих слоев; таким образом уменьшается объем кода, обладающего неограниченной властью. Кроме того, такая структура позволяет при отладке ОС начинать с самого нижнего слоя и добавлять по одному уровню до тех пор, пока вся система не станет работать правильно. Послойная структура облегчает и расширение системы; можно целиком заменить любой уровень, не затрагивая остальных частей.
Третий подход к структурированию ОС — это модель клиент-сервер. Идея его состоит в разделении ОС на несколько процессов, каждый из которых реализует один набор сервисов: например, распределение памяти, создание процессов или планирование процессов. Каждый сервер (server) выполняется в пользовательском режиме, проверяя в цикле, не обратился ли к нему за обслуживанием какой-либо клиент. Клиент (client), которым может быть либо другой компонент ОС, либо прикладная программа, запрашивает выполнение сервиса, посылая серверу сообщение. Ядро (или микроядро) ОС, выполняющееся в режиме ядра, доставляет сообщение серверу; тот выполняет запрашиваемые действия, после чего ядро возвращает клиенту результаты в виде другого сообщения, как показано на рис. 2-3.
Рис. 2-3. Клиент-серверная операционная система.
При использовании клиент-серверного подхода получается ОС, состоящая из автономных компонентов небольшого размера. Поскольку все серверы выполняются как отдельные процессы пользовательского режима, авария (и, возможно, перезапуск) одного из них не нарушает работы остальных частей ОС. Более того, разные серверы могут выполняться на разных процессорах многопроцессорного компьютера или даже на разных компьютерах, что делает ОС пригодной для распределенных вычислительных сред.
Теоретическая модель, показанная на рис. 2-3, — это идеализированное изображение системы клиент-сервер, где ядро состоит только из средств передачи сообщений. В действительности существует целый спектр клиент-серверных систем, часть которых выполняют в режиме ядра малый объем работы, в то время как другие — больший. В структуре Windows NT есть элементы как послойной, так и клиент-серверной модели. Часть Windows NT, работающая в режиме ядра, называется исполнительной системой NT (NT executive). В нее входит набор компонентов, реализующих управление виртуальной памятью, управление объектами (ресурсами), ввод-вывод и файловые системы (включая сетевые драйверы), взаимодействие между процессами и фрагменты системы защиты от несанкционированного доступа. Эти компоненты взаимодействуют между собой главным образом как модули, а не как слои. Каждый компонент вызывает другие посредством набора тщательно оговоренных внутренних процедур.
Однако послойная модель применяется в системе ввода-вывода исполнительной системы NT, и в самых низкоуровневых частях исполнительной системы: ядре NT (NT kernel) и слое абстрагирования от оборудования (hardware abstraction layer, HAL). Все другие компоненты исполнительной системы NT расположены поверх этих двух. Ядро NT выполняет функции ОС низкого уровня,— например, планирование потоков, обработку прерываний и исключений, а также многопроцессорную синхронизацию. Оно также предоставляет набор процедур и базовых объектов, используемых остальными частями исполнительной системы для реализации конструкций более высокого уровня. Ниже ядра располагается динамически подключаемая библиотека (dynamic-link library, DLL) HAL — слой кода, изолирующий ядро и другие части исполнительной системы NT от платформенно-зависимых особенностей аппаратуры. HAL работает непосредственно с оборудованием.
Как показывает рис. 2-4, модель клиент-сервер используется в Windows NT главным образом для предоставления API и средств, которые обычно рассматривают как среду ОС. Хотя защищенная подсистема (сервер) Win32 обеспечивает пользовательский интерфейс и необходима для работы системы, другие серверы также могут подключаться к исполнительной системе, причем они могут загружаться и выполняться одновременно в любой желаемой комбинации. Серверы взаимодействуют с процессами приложений при помощи средства передачи сообщений, предоставляемого исполнительной системой NT.
Использование модели клиент-сервер дает следующие преимущества:
• Упрощает базу ОС — исполнительную систему NT. Одной из задач Windows NT было предоставить API Win32, MS-DOS, 16-разрядной Windows, POSIX и OS/2. Реализация каждого API в отдельном сервере устраняет конфликты и дублирование в исполнительной системе и позволяет легко добавлять новые API.
• Повышает надежность. Каждый сервер выполняется как отдельный процесс, имеющий собственную память, и, таким образом, защищен от других процессов. Более того, так как серверы работают в пользовательском режиме, они не имеют непосредственного доступа к аппаратуре и не могут изменить содержимое областей памяти, занятых исполнительной системой.
• Прекрасно соответствует модели распределенных вычислений. Так как сетевые компьютеры используют модель клиент-сервер и общаются друг с другом посредством передачи сообщений, локальные серверы легко могут посылать сообщения удаленным машинам при обработке запросов от клиентских приложений. Клиентам не требуется знать, обслуживается их запрос локально или удаленно.
Рис. 2-А. Клиент-серверная структура Windows NT.
