NT club. Часть 6. Архитектура NT
NT club. Часть 6. Архитектура NT
— Дядя Вова, цапу надо крутить, цапу.
— На! Сам делай!
— Нельзя. Я чатланин.
— Уйди отсюда! Как советовать, так все чатлане, как работать, так...
(с) "Кин-Дза-Дза"
Пролог
Следующим этапом изучения ОС семейства 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!
Creator,
creator_vom@tut.by
— Дядя Вова, цапу надо крутить, цапу.
— На! Сам делай!
— Нельзя. Я чатланин.
— Уйди отсюда! Как советовать, так все чатлане, как работать, так...
(с) "Кин-Дза-Дза"
Пролог
Следующим этапом изучения ОС семейства 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!
Creator,
creator_vom@tut.by
Компьютерная газета. Статья была опубликована в номере 14 за 2003 год в рубрике soft :: win