NT club. Часть 6. Архитектура NT
Автор: Creator
— Дядя Вова, цапу надо крутить, цапу.
— На! Сам делай!
— Нельзя. Я чатланин.
— Уйди отсюда! Как советовать, так все чатлане, как работать, так...
(с) “Кин-Дза-Дза”
Пролог
Следующим этапом изучения ОС семейства NT я решил сделать обзор их
архитектуры. Она со временем, конечно, изменялась, но базовые принципы
остались непоколебимы. Вообще архитектура Windows 2000 от XP ничем серьезно не
отличается (да и от NT 4.0 тоже). Как упоминалось ранее (“NT club. Часть 5.
Как это было”), серьезные изменения произошли только в NT 4.0, когда
графическая подсистема была перенесена в режим ядра. В процессе своих
рассуждений я не буду углубляться в дебри устройства ОС — это совершенно
неинтересно той аудитории читателей, на которую рассчитана данная статья.
Однако читателю придется-таки столкнуться с рядом терминов, значение которых
он может не знать. Тут лучше включить свою “соображалку”, так как ничего особо
сложного они собой не представляют. В конце данного материала я объясню, зачем
все-таки нужно пользователю в целом представлять устройство своей ОС (имеется
в виду домашний пользователь: у корпоративных есть свой бог и учитель —
Системный Администратор, который и решает все их проблемы). И последнее. В
подготовке статьи широко использовались материалы из книги Д. Соломона и М.
Руссиновича “Внутреннее устройство Microsoft Windows 2000”.

Ядерная реакция
Сначала я приведу очень упрощенную (рис.1), однако вполне достаточную для
понимания основных принципов функционирования ОС схему архитектуры Windows NT
(начиная с NT 4.0). Обратите внимание на линию, разделяющую части кода,
выполняющиеся в разных режимах процессора. Прямоугольники над этой линией
соответствуют процессам пользовательского режима, компоненты под ней —
сервисам режима ядра. Главное отличие этих режимов состоит в том, что код,
работающий в режиме ядра, получает доступ ко всем ресурсам ОС и оборудованию,
а код пользовательского режима способен лишь вызывать сервисы ОС для
манипуляции с оборудованием или внутренними структурами системы. Причем как
ядро, так и каждый процесс (задача, приложение) имеет собственное виртуальное
адресное пространство. Из всего этого делаем важный вывод: нарушить работу
системы может только код режима ядра, пользовательский же код при всем своем
желании не может повредить не только систему, но и другие работающие
приложения (за исключением разделяемой памяти). Еще один важный момент: ядро
ОС (точнее, исполнительная система и микроядро) и драйверы работают в одном
адресном пространстве, причем в целях повышения быстродействия в режиме ядра
не проводится никаких проверок на правильность передачи параметров процедурам
и т.д., что в случае некорректно работающего драйвера может привести к
катастрофе — сбою в режиме ядра (ошибка STOP, пользователи обычно называют это
Синим Экраном Смерти — BSOD, хотя машина еще вполне работоспособна, и с
помощью второго компьютера и отладчика можно найти и устранить проблему).
Таким образом, добавление драйвера устройства — единственный способ добавить в
систему код режима ядра и в то же время единственный способ “грохнуть”
по-настоящему вашу NT, так как при таких сбоях, во-первых, восстановление
почти невозможно, а во-вторых, дальнейшая работа может привести к еще большим
повреждениям, в том числе и пользовательских данных, что недопустимо. Для
предотвращения таких ситуаций Microsoft придумала систему верификации и
подписывания драйверов. Сначала компоненты драйвера проходят тест в
лабораториях WHQL (Windows Hardware Quality Laboratory) и в случае его
успешной сдачи подписываются этой лабораторией как совместимые с данной
версией Windows. При установке драйвера в систему ОС проверяет его подпись.
Если она есть и является верной и действительной, драйвер устанавливается без
вопросов, если есть какие-то проблемы с этим — все зависит от принятой
политики подписывания драйверов (отказ от установки, запрос пользователю на
установку, установка без запроса). Следует отметить, что данное нововведение
появилось в Windows 2000. Ну, а сейчас мы быстро пробежимся по основным
компонентам системы.
Пользовательские процессы
Фиксированные процессы поддержки системы, например, диспетчер сеансов.
Необходимы для нормальной работы системы. Имеют доступ напрямую к некоторым
сервисам ОС, т.е. являются привилегированными процессами.
Процессы сервисов (сервисы Win32). Иначе называются службами.
Пример — Планировщик задач. Работают в фоновом режиме, без интерактивного
взаимодействия с пользователем.
Пользовательские приложения. Бывают пяти видов: Win32, Windows
3.1, MS-DOS, POSIX и OS/2.
Подсистемы окружения. Образуют окружение операционной среды,
предоставляя сервисы ОС. Существует 3 подсистемы: Win32, POSIX и OS/2.
Обратите внимание на прямоугольник с DLL-подсистем. Дело в том, что процессы
пользовательского режима не могут вызывать сервисы ядра ОС напрямую, вместо
этого они используют DLL (Dynamically Loadable Library — динамически
загружаемая библиотека) соответствующих подсистем окружения.
Компоненты режима ядра
Исполнительная система. Содержит базовые сервисы ОС (управление памятью,
процессами и потоками, защиту, ввод/вывод и взаимодействие между процессами).
Ядро — низкоуровневые функции ОС (планирование потоков,
диспетчеризация прерываний и исключений и т.д.). Предоставляет набор процедур
и базовых объектов исполнительной системе для реализации более сложных
структур.
Драйверы устройств. Драйверы как аппаратных устройств,
транслирующих стандартные запросы программ в специфичные запросы ввода/вывода
к конкретному оборудованию, так и сетевые драйверы и драйверы файловых систем.
Уровень абстрагирования от оборудования. Изолирует другие
компоненты режима ядра от специфики оборудования данной платформы.
Подсистема поддержки окон и графики. Реализует функции графического интерфейса
пользователя (GUI). Обеспечивает поддержку окон, элементов управления
пользовательского интерфейса и отрисовку графики.
Тяжело в учении, легко в бою
К чему я все это вам рассказываю? Важно, чтобы пользователь понимал, где
произошел сбой, чтобы потом его устранить. Если вы знаете источник ошибки,
установить причину и ликвидировать ее не составит особого труда. Для примера
приведу случай, произошедший со мной полгода назад. У одного моего знакомого
на довольно мощной машине стояла Windows XP Home Edition. ОС я устанавливал
сам, так что за ее работоспособность отвечал тоже я. Сам знакомый и вся его
семья в компьютерах разбирается довольно слабо, но знаний для набора текста и
работы с Интернетом хватает. Однажды мне позвонил этот товарищ и рассказал
грустную историю примерно такого содержания. Установил он себе WarCraft III,
начал играться, но, как только к нему приближалось вражеское войско, машина
перезагружалась. Как будет рассуждать неосведомленный в архитектуре ОС
пользователь: ага, машина перезагружается — значит, глючит либо игрушка (что
скорее всего), либо Windows (как надоело это глюкало!). Методы решения
проблемы: переустанавливаем игру, не помогло — переустанавливаем Windows,
снова не помогло — удаляем либо игру, либо Windows (и наслаждаемся жизнью;)).
А вот логическая цепочка знающего пользователя (моя в данном случае):
компьютер перезагружается — значит, возникает серьезная ошибка класса STOP,
что приводит к появлению BSOD (Синего Экрана Смерти), но так как в опциях
системы по умолчанию стоит перезагрузка при таких ошибках, то синего экрана мы
не видим. Эту версию подтверждает сообщение после сброса и запись в системном
журнале. Далее: ошибки подобного рода могут возникать только в коде,
работающем в режиме ядра, т.е. либо в исполнительной системе ОС (что
маловероятно), либо в драйверах устройств. Информацию о сбойном драйвере можно
получить в системном журнале. Я же просто просмотрел в шестнадцатеричном
вьювере (Lister в Total Commander) файл дампа сбойного участка памяти (он
(файл) находится в папке %SystemRoot%\Minidump), где после ключевого слова
STOP и параметров ошибки были перечислены загруженные драйверы, а перед ними
шел наш виновник. Им оказался драйвер интегрированной звуковой карты.
Покопавшись в настройках игрушки, я обнаружил опцию Использовать 3D звук
(вроде так, а может, Использовать EAX). Тут мне стала ясна вся картина
происшедшего. Игра при появлении новых юнитов на горизонте пыталась сыграть их
звук, используя 3D-возможности аудиокарты, но либо сама плата такими
возможностями не обладает, либо они криво реализованы в плате или в драйвере —
в любом случае это приводило к плачевным последствиям. Варианты решения данной
проблемы: сменить драйвер или аудиокарту либо отключить 3D-звук в игре. Я как
ленивый человек выбрал последний вариант. В итоге все заработало без проблем.
Думаю, этот поучительный случай заставит вас логически думать при
возникновении подобных проблем.
В Сибирь...
А вот и обещанные ссылки:
-
http://support.microsoft.com/support — техническая поддержка продуктов
фирмы Microsoft. Microsoft Know-ledge Base — база данных проблем и их решений,
FAQ, бесплатные программы, обновления и исправления, on-line-поддержка,
телефоны.
-
http://www.microsoft.com/hcl — MS Win-dows 2000 Hardware Compatibility
List.
-
http://www.ntfaq.com или
http://www.windows2000faq.com —
обширный FAQ по NT/2000. Множество хорошо структурированных вопросов различной
тематики.
-
http://www.ntcompatible.com — FAQ по NT/2000, XP. Списки совместимых с NT/2000
приложений, игр и оборудования. Советы по устранению неполадок, если таковые
имеются. Ссылки, новости, обзоры.
-
http://www.swynk.com/windows — статьи о специфике работы в Win-dows NT/2000.
Обсуждение наиболее распространенных вариантов применения этих ОС и решение
возникающих при этом проблем. Скрипты, ссылки на форумы и другие ресурсы.
-
http://www.kellys-korner-xp.com — Windows XP from A to Z. Очень много
полезных советов.
Best regards!
Источник:
http://www.nestor.minsk.by/kg/
|