РАБОЧИЕ СТАНЦИИ
РАБОЧИЕ СТАНЦИИ Рис. 1-1. Соединение разнородных систем. Windows NT существует не в вакууме. Она может взаимодействовать с другими ОС Microsoft, с Apple Macintosh и с UNIX-подобными ОС по сетям различного типа, в том числе Microsoft LAN Manager. Пример сетевой конфигурации показан на рис. 1-1. В этой конфигурации серверы могут предоставлять системные средства, такие как работа с файлами, печать или функции управления системами, либо средства приложений, например, обслуживание баз данных. Приложение может даже обращаться к серверу для выполнения задач пользователя, хотя последний и не подозревает о таком взаимодействии. Сконфигурированная как сервер, Windows NT может служить многопользовательской сетевой ОС. Каждая рабочая станция может работать с одним интерактивным пользователем и несколькими удаленными, причем каждый пользователь (или приложение) должен зарегистрироваться в системе, прежде чем получит доступ к ней.
2. Цели проекта Windows NT: расширяемость и переносимость.
Проект Windows NT требовал тщательной предварительной проработки. Чтобы система удовлетворяла требованиям рынка, критически важно с самого начала было придать ей такие свойства, как поддержка POSIX и наличие защиты. Прежде чем начать писать несколько сотен тысяч строк кода, из которых должна была состоять Windows NT, проектировщики системы тщательные образом сформулировали цели проекта. Предварительное определение целей помогло в принятии тысяч технических решений, задающих внутреннюю структуру большого программного проекта. При наличии двух альтернативных решений из них выбирали то, которое лучше отвечало этим целям. Ниже перечислены свойства системы, которых стремились достичь проектировщики Windows NT: • Расширяемость. Код должен быть написан так, чтобы его удобно было дополнять и модифицировать при изменении требований рынка. • Переносимость. В соответствии с требованиями рынка код должен легко переноситься с одного процессора на другой. • Надежность и устойчивость. Система должна защищать себя как от внутренних сбоев, так и от внешнего вторжения. Она должна всегда вести себя предсказуемо, и у приложений не должно быть возможности повредить ОС или нарушить ее функционирование. • Совместимость. Несмотря на то, что Windows NT призвана расширять существующую технологию, ее пользовательский интерфейс и API должны быть совместимы с существующими системами Microsoft. • Производительность. Система должна отвечать другим целям проекта, но при этом быть максимально быстрой и обеспечивать минимальное время отклика на каждой аппаратной платформе. Расширяемость Операционные системы обязательно изменяются с течением времени. Изменения обычно вносятся постепенно; это может быть, например, добавление поддержки новых аппаратных устройств, таких как компакт-диски; способности работать с другим типом сети; поддержки новых программных технологий, таких как графические интерфейсы пользователя и объектно-ориентированные среды программирования. Гарантировать целостность кода Windows NT по мере изменения ОС с течением времени было основной целью проекта. Уникальный подход к решению этой проблемы нашли для ОС Mach: создать основу, которая реализует примитивные средства ОС. Прикладные программы, называемые серверами, обеспечивают дополнительные системные средства, включая полные API. При изменении требований базовая часть системы не меняется, а серверы модернизируются или создаются новые (Здесь термин "сервер" обозначает процесс на локальной машине, и его не следует путать с удаленными компьютерами в сети, предоставляющими файловые или сетевые сервисы.). Windows NT позаимствовала этот подход. Она состоит из привилегированной исполнительной системы (executive) и набора непривилегированных серверов, называемых защищенными подсистемами (protected subsystems). Термин привилегированный указывает на режим работы процессора. Большинство процессоров имеют привилегированный режим (возможно, несколько), в котором разрешено выполнение всех машинных команд и доступны системные области памяти, а также непривилегированный, в котором некоторые команды запрещены, а системные области памяти недоступны. В терминологии Windows NT привилегированный режим называется режимам ядра (kernel mode), а непривилегированный — пользовательским режимам (user mode).
Обычно ОС работает только в режиме ядра, а прикладные программы — только в пользовательском режиме, за исключением тех моментов, когда они вызывают системные сервисы. Однако Windows NT уникальна в том плане, что ее защищенные подсистемы выполняются в пользовательском режиме, как и обычные приложения. Такая структура позволяет модифицировать или добавлять защищенные подсистемы, не нарушая целостности исполнительной системы. Кроме защищенных подсистем, Windows NT имеет множество других свойств, гарантирующих ее расширяемость: • Модульность. Исполнительная система представляет собой набор отдельных компонентов, взаимодействующих друг с другом только посредством функциональных интерфейсов. Новые компоненты добавляются к исполнительной системе как новые модули, обращающиеся к интерфейсам других компонентов. • Использование объектов для представления системных ресурсов. Объекты (objects), абстрактные типы данных, доступ к которым осуществляется только через специальный набор сервисов объектов, позволяют однотипно управлять системными ресурсами. Добавление новых объектов не нарушает работу старых и не требует изменения существующего кода. • Загружаемые драйверы. Подсистема ввода-вывода Windows NT поддерживает драйверы, которые могут добавляться к системе в процессе работы. Для поддержки новых файловых систем, устройств и сетей необходимо написать драйвер устройства, драйвер файловой системы или драйвер транспорта и загрузить его в систему. • Средство удаленного вызова процедур (RPC), позволяющее приложениям вызывать удаленные сервисы независимо от их расположения в сети. Новые сервисы, установленные на любую машину в сети, немедленно становятся доступными для приложений на других машинах. Переносимость Вторая цель проекта — обеспечить переносимость — тесно связана с расширяемостью. Расширяемость позволяет легко добавлять в систему новые возможности, тогда как переносимость обеспечивает использование всей ОС целиком на машине с другим процессором или конфигурацией при минимальных изменениях исходного текста. Хотя ОС часто делят на "переносимые" и "непереносимые", вообще говоря, переносимость в той или иной степени свойственна всем им. Вопрос не в том, можно ли перенести программу (как правило, в конечном счёте можно), а в том, насколько сложно это сделать. Написание системы, которую легко будет переносить, сходно с написанием любой переносимой программы — нужно следовать определенным правилам. Во-первых, максимально возможный объем кода должен быть написан на языке, доступном на всех машинах, на которые планируется переносить систему. Обычно это значит, что код следует писать на языке высокого уровня, предпочтительно на одном из стандартизованных. Язык ассемблера по своей природе не переносим, если только Вы не собираетесь переносить программу исключительно на машины, обратно совместимые с исходной по набору команд (например, с Intel 80386 на Intel 80486). Во-вторых, следует учесть, в какие физические среды планируется переносить программное обеспечение. Любая аппаратура накладывает свои ограничения на ОС. Например, ОС, разработанную для 32-разрядной адресации, не удастся перенести на машину с 16-разрядными адресами — разве что ценой огромных усилий. В-третьих, важно минимизировать и, где только возможно, вообще удалить код, работающий непосредственно с аппаратурой. Аппаратурная зависимость может принимать различные формы. Примеры очевидных зависимостей — прямое манипулирование регистрами и другими аппаратурными структурами либо ориентация на некоторую аппаратурную конфигурацию или емкость. В-четвертых, везде, где аппаратурно-зависимого кода нельзя избежать, его следует изолировать в небольшом количестве легко определяемых модулей. Такой код следует разбросать по всей системе. Два последних правила тесно связаны друг с другом. Например, можно скрыть аппаратурно-зависимую структуру в абстрактном типе данных, определенном в программе. Другие модули системы будут работать с этим типом данных посредством абстрактных процедур, а не напрямую с аппаратурой. При переносе ОС необходимо изменить только абстрактный тип данных и связанные с ним процедуры. Windows NT была спроектирована так, чтобы упростить ее переносимость. Для этого использовали следующие подходы: • Переносимый язык С. Система написана в основном на языке С (стандарт ANSI X3.159-1989) с расширениями для поддержки архитектуры обработки исключений Windows NT. Разработчики выбрали язык С, поскольку он стандартизован, и для него широко доступны компиляторы и средства разработки. Помимо С, небольшие части системы написаны на C++, в том числе графические компоненты среды Windows и фрагменты сетевого пользовательского интерфейса. Язык ассемблера использовался только для тех частей ОС, которые должны работать непосредственно с оборудованием (например, обработчик ловушек), и для компонентов, требующих максимальной скорости выполнения (таких, как целочисленная арифметика повышенной разрядности). Однако непереносимый код был тщательно изолирован внутри использующих его компонентов. • Изоляция от процессора. Некоторые низкоуровневые фрагменты ОС должны работать с зависимыми от процессора структурами данных и регистрами. Однако такой код содержится в небольших модулях, которые можно заменить аналогичными модулями для других процессоров. • Изоляция от платформы. Платформенно-зависимый код в Windows NT инкапсулирован внутри динамически подключаемой библиотеки, известной как слой абстрагирования от оборудования, (hardware abstraction layer, HAL). Платформенно-зависимыми называются свойства, которые могут различаться на двух рабочих станциях, построенных на одном типе процессора разными производителями. HAL обеспечивает абстрагирование оборудования, например кэша и контроллеров прерываний, при помощи слоя низкоуровневого программного обеспечения, так что при переносе на другую платформу не требуется изменять код более высокого уровня. Windows NT написана так, чтобы облегчить ее перенос на машины, использующие 32-разрядную линейную адресацию и обеспечивающие поддержку виртуальной памяти. Ее можно перенести и на другие машины, но это потребует больших усилий.
3. Цели проекта Windows NT: надежность, совместимость и производительность.
Третьей целью проекта Windows NT была надежность. Под надежностью подразумеваются два взаимосвязанных момента. Во-первых, ОС должна быть устойчивой, дающей предсказуемый отклик на ошибочные состояния, даже если они вызваны сбоями аппаратуры. Во-вторых, ОС должна активно защищать себя и своих пользователей от вреда со стороны пользовательских программ, случайного или умышленного. Структурная обработка исключений (structured exception handling) — это метод перехвата ошибочных состояний и унифицированной их обработки. Она является основным способом защиты Windows NT от программных или аппаратных ошибок. Всякий раз, когда возникает ненормальное событие, ОС или процессор возбуждают исключение; код обработки исключений, присутствующий по всей системе, вызывается в таком случае автоматически, гарантируя, что пользовательским программам и самой системе не будет нанесен вред из-за не обнаруженной ошибки. Повышению устойчивости способствуют и другие свойства ОС: • Модульная структура, разделяющая исполнительную систему на группы хорошо организованных пакетов. Отдельные компоненты системы взаимодействуют друг с другом через тщательно разработанные программные интерфейсы. Какой-либо компонент, например, диспетчер памяти, можно извлечь и заменить другим диспетчером памяти, реализующим те же самые интерфейсы. • Для Windows NT разработана новая файловая система, называемая файловой системой NT (NT file system, NTFS). NTFS способна к восстановлению после всех типов дисковых ошибок, включая ошибки в критически важных секторах диска. Для обеспечения восстанавливаемости в ней используется избыточное хранение данных и обработка транзакций. Перечисленные ниже средства защищают Windows NT от внешнего вторжения: • Архитектура защиты от несанкционированного доступа, основанная на требованиях правительства США, которая предоставляет разнообразные механизмы защиты: регистрация пользователей в системе, квоты на ресурсы и защита объектов. Виртуальная память (virtual memory), предоставляющая каждой программе большой объем адресного пространства. При обращении программы по виртуальным адресам диспетчер памяти отображает (транслирует) их в настоящие адреса памяти. Так как ОС управляет расположением в памяти каждой программы, она предотвращает чтение или изменение одним пользователем памяти, занимаемой другим пользователем, если только они явно не объявили ее совместно используемой. Совместимость Совместимость программного обеспечения — четвертая цель проекта Windows NT. В основном под совместимостью понимают способность ОС выполнять программы, написанные для другой ОС или для предыдущих версий той же самой системы. В Windows NT совместимость имеет несколько форм. Существует разница между двоичной совместимостью и совместимостью на уровне исходных текстов приложений. Двоичная совместимость достигается тогда, когда можно взять некоторый исполняемый файл и успешно запустить его в другой ОС. Совместимость на уровне исходных текстов требует предварительной перекомпиляции программы. Будет ли новая ОС двоично совместима со старой или совместима с ней на уровне исходных текстов, зависит от нескольких факторов. Главный среди них — это архитектура процессора новой системы. Если новый процессор использует тот же набор команд (возможно, с расширениями) и ту же адресацию, что и старый, то может достигаться двоичная совместимость. Добиться двоичной совместимости между двумя процессорами разных архитектур не столь просто. Каждая процессорная архитектура обычно несет с собой новый машинный язык. Это означает, что двоичная совместимость достигается только при помощи программы-эмулятора, преобразующей один набор машинных команд в другой. При отсутствии эмулятора все приложения, переносимые со старой архитектуры, должны быть заново скомпилированы и скомпонованы (и, вероятно, вновь отлажены). При помощи защищенных подсистем Windows NT предоставляет среду для выполнения приложений, которые используют API — интерфейс, отличный от ее основного интерфейса программирования Win32. При работе на процессорах Intel защищенные подсистемы Windows NT обеспечивают двоичную совместимость приложениям для существующих ОС Microsoft, включая MS-DOS, 16-разрядную Windows, OS/2 и LAN Manager. На RISC-процессорах MIPS совместимость на двоичном уровне достигается для приложений MS-DOS, 16-разрядной Windows и LAN Manager (используется эмулятор). Кроме того, Windows NT обеспечивает совместимость на уровне исходных текстов для приложений POSIX, которые используют POSIX-интерфейсы ОС, определенные стандартом IEEE 1003.1.
Для обеспечения совместимости 16-разрядных приложений для Windows на компьютерах с RISC-процессорами используется эмуляция работы процессоров Intel. До версии 3.51 включительно эмулировался режим работы 286-го процессора, что не позволяло исполнять многие 16-разрядные приложения (например, Word for Windows 6.0). Начиная с версии 4.0 обеспечивается эмуляция работы 486—го процессора, что достаточно для выполнения большинства 16-разрядных программ для Windows.
В дополнение к совместимости по программным интерфейсам, Windows NT поддерживает ряд существующих файловых систем, включая файловую систему MS-DOS (FAT), высокопроизводительную файловую систему (HPFS) OS/2, файловую систему для компакт-дисков (CDFS), а также новую, восстанавливаемую файловую систему NT (NTFS). Производительность Последней целью проекта Windows NT было достижение высокой производительности. Приложения с большим объемом вычислений, такие как графические пакеты, средства моделирования и пакеты финансового анализа требуют достаточно высокой производительности, чтобы обеспечить пользователю хорошее время отклика. Одного быстродействующего оборудования для этого недостаточно. ОС тоже должна быть быстрой и эффективной. Производительность постоянно имелась в виду при разработке всех компонентов Windows NT. Проводилось тестирование и моделирование быстродействия компонентов, критичных для производительности системы. Системные вызовы, страничные ошибки и другие критические участки вычислений тщательно оптимизировались для достижения максимальной скорости обработки. Защищенные подсистемы, серверы, которые выполняют функции ОС, должны часто взаимодействовать друг с другом и с приложениями-клиентами. Чтобы это взаимодействие не снижало производительность серверов, в состав ОС был включен высокоскоростной механизм передачи сообщений, так называемый локальный вызов процедур (local procedure call, LPC). Каждая защищенная подсистема, обеспечивающая среду ОС, или подсистема среды (environment subsystem), была тщательно спроектирована, чтобы часто используемые системные вызовы выполнялись как можно быстрее. Критические компоненты сетевой поддержки Windows NT для улучшения производительности были встроены в привилегированную часть ОС. Несмотря на это, они могут загружаться и выгружаться динамически.
4. Модели 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.
5. Объектная модель. Симметричная мультипроцессорная обработка.
Многозадачность — это техника, применяемая ОС для использования одного процессора несколькими потоками управления. Однако, если у компьютера имеется более одного процессора, то от модели многозадачности следует перейти к модели мультипроцессорной обработки (multiprocessing). Компьютер, имеющий два процессора, может выполнять два потока одновременно. Таким образом, если многозадачная ОС только создает иллюзию одновременного выполнения нескольких потоков, то ОС с мультипроцессорной обработкой в действительности выполняет несколько потоков одновременно — по одному потоку на каждом процессоре. ОС с мультипроцессорной обработкой делятся на две категории — с асимметричной либо симметричной обработкой, как показано на рис. 2-5. Операционные системы с асимметричной мультипроцессорной обработкой (asymmetric multiprocessing, ASMP) обычно выбирают для исполнения собственного кода один и тот же процессор (например А), в то время как другие процессоры выполняют только пользовательские задачи. Так как код ОС исполняется на одном процессоре, то ОС ASMP довольно просто создать, усовершенствовав существующую однопроцессорную ОС. Особенно хорошо ОС ASMP подходят для работы на асимметричном оборудовании, например, процессоре, к которому подключен сопроцессор, или на двух процессорах, совместно использующих не всю доступную память. Однако такую ОС трудно сделать переносимой. Аппаратура разных производителей (и даже разные версии аппаратуры одного производителя) имеет тенденцию различаться по типу и степени асимметрии. Либо производители оборудования должны ориентироваться на одну ОС, либо ОС придется постоянно переписывать для каждой аппаратной платформы. Системы с симметричной мультипроцессорной обработкой (symmetric multiprocessing, SMP), к которым относится и Windows NT, позволяют коду ОС системы выполняться на любом свободном процессоре или на всех процессорах одновременно, причем каждому из процессоров доступна вся память. Такой подход полнее реализует возможности нескольких процессоров, так как сама ОС может использовать значительную часть процессорного времени компьютера, в зависимости от того, какие приложения на нем исполняются. Исполнение ОС только на одном процессоре может сильно загружать его, в то время как остальные простаивают, что уменьшит производительность системы; при увеличении числа процессоров в системе возрастает вероятность того, что узким местом станут именно действия, выполняемые ОС. Помимо равномерного распределения системной загрузки, системы SMP сокращают время простоя из-за неисправностей, так как при сбое одного процессора код ОС может исполняться на других. Наконец, поскольку симметричная аппаратура реализуется разными производителями сходным образом, имеется возможность создания переносимой ОС SMP. В отличие от ASMP, системы SMP обычно проектируются и пишутся полностью заново, так как, чтобы гарантировать правильную работу, их код должен следовать строгим правилам. Конкуренция за ресурсы и другие вопросы производительности принимают в мультипроцессорных системах более острую форму, чем в обычных ОС, и должны учитываться при проектировании системы. Windows NT обладает свойствами, которые принципиально важны для мультипроцессорной ОС: • Код ОС может выполняться на любом из доступных процессоров и на нескольких процессорах одновременно. За исключением ядра, которое выполняет планировку потоков и обработку прерываний, весь код ОС может быть вытеснен (принужден к освобождению процессора) потоком с более высоким приоритетом. Асимметричная Симметричная
Рис. 2-5. Асимметричная и симметричная мультипроцессорная обработка.
• В одном процессе может быть несколько потоков управления. Потоки позволяют процессу выполнять разные части его программы на нескольких процессорах одновременно. • Серверные процессы могут использовать несколько потоков для одновременной обработки запросов от нескольких клиентов. • Имеются удобные механизмы совместного использования объектов разными процессами и гибкие возможности коммуникаций между процессами, включая совместно используемую память и оптимизированное средство передачи сообщений.
Структура Windows NT: 6. Защищенные подсистемы. Исполнительная система.
Термин "сервер" подразумевает, что каждая защищенная подсистема обеспечивает API, который могут использовать программы. Когда приложение (или другой сервер) вызывает некоторую процедуру API, серверу, реализующему данную процедуру, посылается сообщение при помощи средства локального вызова процедур (local procedure call, LPC) — оптимизированного механизма исполнительной системы NT для локальной передачи сообщений. Сервер же посылает ответное сообщение вызывающей программе.
В Windows NT имеется два типа защищенных подсистем: подсистемы среды (environment subsystems) и неотъемлемые подсистемы (integral subsystems). Подсистема среды — это сервер пользовательского режима, реализующий API некоторой ОС. Когда приложение вызывает функцию API, этот вызов доставляется посредством LPC подсистеме среды. Та исполняет вызов и возвращает результаты прикладному процессу, посылая другой LPC. Самая важная подсистема среды в Windows NT — это подсистема Win32, которая предоставляет прикладным программам API 32-разрядной Windows. Кроме того, подсистема среды Win32 реализует графический интерфейс пользователя Windows NT и управляет всем вводом пользователя и выводом приложений. В Windows NT также имеются подсистемы среды POSIX, Рис. 2-6. Блок-схема Windows NT. OS/2, 16-разрядной Windows и MS-DOS (две последние не показаны на рис. 2-6). Данные подсистемы предоставляют свои API, но используют для получения пользовательского ввода и отображения результатов подсистему Win32. Другие защищенные подсистемы — неотъемлемые подсистемы — это серверы, выполняющие важные функции ОС. В процессе разработки Windows NT некоторые неотъемлемые подсистемы появлялись и исчезали, но одна присутствовала всегда: подсистема защиты. Подсистема защиты исполняется в пользовательском режиме и регистрирует правила контроля доступа, определенные для локального компьютера. Например, она отслеживает, какие учетные записи пользователей имеют особые привилегии, доступ к каким системным ресурсам подлежит аудиту и должны ли генерироваться сообщения или предупреждения аудита. Кроме того, подсистема защиты ведет базу данных учетных записей пользователей, содержащую идентификаторы пользователей, пароли, группы, к которым отнесен пользователь, и особые привилегии, которыми он обладает. Она также принимает регистрационную информацию пользователя и инициирует аутентификацию подключения пользователя к системе. Некоторые компоненты сетевого обеспечения Windows NT также реализованы как защищенные подсистемы. Заслуживают упоминания две из них: сервис рабочей станции и сервис сервера. Каждый из этих сервисов (services), как часто называют сетевые подсистемы, является процессом пользовательского режима, реализующим API для доступа и управления, соответственно, сетевым редиректором и сервером LAN Manager. Редиректор — это сетевой компонент, ответственный за посылку запросов ввода-вывода по сети, если файл или устройство, к которому осуществляется обращение, не является локальным. На удаленной машине такие запросы принимаются сервером. И редиректор, и сервер LAN Manager реализованы как драйверы файловых систем — т. е. являются частью системы ввода-вывода NT. Исполнительная система Исполнительная система NT (NT executive) — это часть Windows NT, исполняющаяся в режиме ядра; за исключением пользовательского интерфейса, она сама по себе является законченной ОС. Исполнительная система состоит из ряда компонентов, причем каждый из них реализует два набора функций: системные сервисы, к которым могут обращаться как подсистемы среды, так и компоненты исполнительной системы, а также внутренние процедуры, доступные только компонентам исполнительной системы. Эти интерфейсы изображены на рис. 2-7. Хотя исполнительная система и предоставляет системные сервисы, похожие на API, она фундаментально отличается от подсистем среды. Исполнительная система не исполняется постоянно в собственном процессе, а работает в контексте некоторого существующего процесса, завладевая выполняющимся потоком, когда происходит важное системное событие. Например, когда поток вызывает системный сервис и перехватывается процессором, или когда внешнее устройство вызывает прерывание процессора, ядро получает управление потоком, который выполнялся процессором. Оно вызывает соответствующий системный код для обработки события, выполняет его и затем возвращает управление коду, выполнявшемуся перед прерыванием. Компоненты исполнительной системы поддерживают независимость друг от друга, для чего каждый из них создает необходимые системные структуры данных и работает с ним. Так как интерфейсы между компонентами тщательно контролируются, можно полностью удалить некоторый компонент и заменить другим, работающим иначе. Если новый компонент корректно реализует все системные сервисы и внутренние интерфейсы, то ОС работаеткак прежде. Сопровождение ОС также упрощается, поскольку компоненты исполнительной системы NT взаимодействуют предсказуемым образом. Ниже перечислены различные компоненты исполнительной системы и их области ответственности: • Диспетчер объектов. Создает, поддерживает и уничтожает объекты исполнительной системы NT — абстрактные типы данных, представляющие системные ресурсы. • Справочный монитор защиты. Гарантирует выполнение политики защиты на локальном компьютере. Оберегает ресурсы ОС, обеспечивая защиту объектов и аудит во время выполнения. • Диспетчер процессов. Создает и завершает процессы и потоки. Кроме того, приостанавливает и возобновляет исполнение потоков, хранит и выдает информацию о процессах и потоках NT. • Средство локального вызова процедур (LPC). Передает сообщения между клиентскими и серверными процессами, расположенными на одном и том же компьютере. LPC — это гибкая, оптимизированная версия удаленного вызова процедур (remote procedure call, RPC), средства коммуникации между клиент
|