Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Вопросы к экзамену СМО(ответы. Еличева).doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
8.96 Mб
Скачать

Производительность

Последней целью проекта Windows NT было достижение высокой производи­тельности. Приложения с большим объемом вычислений, такие как графичес­кие пакеты, средства моделирования и пакеты финансового анализа требуют достаточно высокой производительности, чтобы обеспечить пользователю хо­рошее время отклика. Одного быстродействующего оборудования для этого не­достаточно. ОС тоже должна быть быстрой и эффективной.

Производительность постоянно имелась в виду при разработке всех ком­понентов Windows NT. Проводилось тестирование и моделирование быстродей­ствия компонентов, критичных для производительности системы. Системные вызовы, страничные ошибки и другие критические участки вычислений тща­тельно оптимизировались для достижения максимальной скорости обработки.

Защищенные подсистемы, серверы, которые выполняют функции ОС, должны часто взаимодействовать друг с другом и с приложениями-клиентами. Чтобы это взаимодействие не снижало производительность серверов, в состав ОС был включен высокоскоростной механизм передачи сообщений, так назы­ваемый локальный вызов процедур (local procedure call, LPC).

Каждая защищенная подсистема, обеспечивающая среду ОС, или подсис­тема среды (environment subsystem), была тщательно спроектирована, чтобы часто используемые системные вызовы выполнялись как можно быстрее.

Критические компоненты сетевой поддержки Windows NT для улучшения производительности были встроены в привилегированную часть ОС. Несмотря на это, они могут загружаться и выгружаться динамически .

  1. Модели 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. Одной из задач Win­dows NT было предоставить API Win32, MS-DOS, 16-разрядной Win­dows, POSIX и OS/2. Реализация каждого API в отдельном сервере устра­няет конфликты и дублирование в исполнительной системе и позволя­ет легко добавлять новые API.

• Повышает надежность. Каждый сервер выполняется как отдельный про­цесс, имеющий собственную память, и, таким образом, защищен от дру­гих процессов. Более того, так как серверы работают в пользовательс­ком режиме, они не имеют непосредственного доступа к аппаратуре и не могут изменить содержимое областей памяти, занятых исполнитель­ной системой.

• Прекрасно соответствует модели распределенных вычислений. Так как сетевые компьютеры используют модель клиент-сервер и общаются друг с другом посредством передачи сообщений, локальные серверы легко могут посылать сообщения удаленным машинам при обработке запросов от клиентских приложений. Клиентам не требуется знать, об­служивается их запрос локально или удаленно.

Рис. 2-А. Клиент-серверная структура Windows NT.