Архитектура Windows
Общая схема архитектуры
Windows представляет собой операционную систему с гибридным ядром (см. лекцию 1 "Введение в операционные системы"). В ней основные системные функции по управлению процессами, памятью, устройствами, файловой системой и безопасностью реализованы в компонентах, работающих в режиме ядра; но существует ряд важных системных компонентов пользовательского режима, например системные процессы входа в систему, локальной аутентификации, диспетчера сеансов, а также подсистемы окружения.
Архитектура Windows представлена на
. Архитектура Windows
Компоненты пользовательского режима
В пользовательском режиме работают следующие виды процессов:
· системные процессы (systemprocesses) – компоненты Windows, отвечающие за решение критически важных системных задач (т. е. аварийное завершение одного из этих процессов вызывает крах или нестабильную работу всей системы), но выполняемые в пользовательском режиме. Основные системные процессы:
o Winlogon.exe – процесс входа в систему и выхода из неё;
o Smss.exe (SessionManager – диспетчер сеансов) – процесс выполняет важные операции при инициализации системы (загрузка необходимых DLL, запуск процессов Winlogon и Csrss и др.), а затем контролирует работу Winlogon и Csrss;
o Lsass.exe (LocalSecurityAuthenticationSubsystemServer – сервер подсистемы локальной аутентификации) – процесс проверяет правильность введенных имени пользователя и пароля;
o Wininit.exe – процесс инициализации системы (например, запускает процессы Lsass и Services);
o Userinit.exe – процесс инициализации пользовательской среды (например, запускает системную оболочку – по умолчанию, Explorer.exe);
o Services.exe (SCM, ServiceControlManager – диспетчер управления службами) – процесс, отвечающий за выполнение служб – см. ниже;
|
· службы (сервисы, services) – приложения, работающие в фоновом режиме и не требующие взаимодействия с пользователем. Службы могут быть как частью операционной системы (например, WindowsAudio – служба для работы со звуком, или PrintSpooler – диспетчер печати), так и частью пользовательского приложения (например, служба СУБД SQL Server). За службы отвечает системный процесс Services.exe;
· пользовательские приложения (userapplications) – прикладные программы, запускаемые пользователем;
· подсистемы окружения (environmentsubsystems) – компоненты, предоставляющие доступ приложениям к некоторому подмножеству системных функций. Windows поддерживает две подсистемы окружения:
o собственно Windows – при помощи данной подсистемы выполняются 32 разрядные приложения Windows (Win32), а также 16 разрядные приложения Windows (Win16), приложения MS DOS и консольные приложения (Console). За подсистему Windows отвечает системный процесс Csrss.exe и драйвер режима ядра Win32k.sys;
o POSIX (PortableOperatingSystemInterfacefor UNIX – переносимый интерфейс операционных систем UNIX) – подсистема для UNIX-приложений. Начиная с WindowsServer 2003 R2 компонент, реализующий эту подсистему, называется SUA (Subsystemfor UNIX-basedApplications). Компонент не устанавливается в Windows по умолчанию.
Все перечисленные процессы пользовательского режима (кроме подсистемы POSIX1) для взаимодействия с модулями режима ядра используют библиотеки Windows DLL (Dynamic Link Library – динамически подключаемая библиотека). Каждая DLL экспортирует набор Windows API функций, которые может вызывать процесс.
Windows API (Windows Application Programming Interface, WinAPI) – это способ взаимодействия процессов пользовательского режима с модулями режима ядра. WinAPI включает тысячи функций и хорошо документирован [10].
|
Основные Windows DLL следующие:
· Kernel32.dll – базовые функции, в том числе работа с процессами и потоками, управление памятью и вводом выводом;
· Advapi32.dll – функции, в основном связанные с управлением безопасностью и доступом к реестру;
· User32.dll – функции, отвечающие за управление окнами и их элементами в GUI приложениях (GraphicalUserInterface – графический интерфейс пользователя);
· Gdi32.dll – функции графического пользовательского интерфейса (GraphicsDeviceInterface, GDI), обеспечивающие рисование на дисплее и принтере графических примитивов и вывод текста.
Библиотека Ntdll. dll экспортирует в большинстве своем недокументированные системные функции, реализованные, в основном, в Ntoskrnl.exe. Набор таких функций называется Native API ("родной" API).
Библиотеки Windows DLL преобразуют вызовы документированных WinAPI функций в вызовы функций Native API и переключают процессор на режим ядра.
Компоненты режима ядра
Диспетчер системных сервисов (System Service Dispatcher) работает в режиме ядра, перехватывает вызовы функций от Ntdll. dll, проверяет их параметры и вызывает соответствующие функции из Ntoskrnl.exe.
Исполнительная система и ядро содержатся в Ntoskrnl.exe (NT Operating System Kernel – ядро операционной системы NT) (по поводу использования термина " ядро " в Windows см. лекцию 1 "Введение в операционные системы").
Исполнительная система (Executive) представляет собой совокупность компонентов (называемых диспетчерами – manager), которые реализуют основные задачи операционной системы:
|
· диспетчер процессов (processmanager) – управление процессами и потоками (см. лекцию 6 "Процессы и потоки");
· диспетчер памяти (memorymanager) – управление виртуальной памятью и отображение её на физическую (см. лекцию 8 "Управление памятью");
· монитор контроля безопасности (securityreferencemonitor) – управление безопасностью (см. лекцию 9 "Безопасность");
· диспетчер ввода вывода (I/O manager), диспетчер кэша (cacheManager), диспетчер PlugandPlay (PnPManager) – управление внешними устройствами и файловыми системами (см. лекцию 10 "Управление устройствами" и лекцию 11 "Файловая система NTFS");
· диспетчер электропитания (powermanager) – управление электропитанием и энергопотреблением;
· диспетчер объектов (objectmanager), диспетчер конфигурации (configurationmanager), механизм вызова локальных процедур (localprocedurecall) – управление служебными процедурами и структурами данных, которые необходимы остальным компонентам.
Ядро (Kernel) содержит функции, обеспечивающие поддержку компонентам исполнительной системы и осуществляющие планирование потоков (см. лекцию 7 "Планирование потоков"), механизмы синхронизации, обработку прерываний.
Компонент Windows USER и GDI отвечает за пользовательский графический интерфейс (окна, элементы управления в окнах – меню, кнопки и т. п., рисование), является частью подсистемы Windows и реализован в драйвере Win32k.sys.
Взаимодействие диспетчера ввода вывода с устройствами обеспечивают драйверы (drivers) – программные модули, работающие в режиме ядра, обладающие максимально полной информацией о конкретном устройстве (драйверы подробнее рассматриваются в лекции 10 "Управление устройствами").
Однако, и драйверы, и ядро не взаимодействуют с физическими устройствами напрямую – посредником между программными компонентами режима ядра и аппаратурой является HAL (Hardware Abstraction Layer) – уровень абстрагирования от оборудования, реализованный в Hal. dll. HAL позволяет скрыть от всех программных компонентов особенности аппаратной платформы (например, различия между материнскими платами), на которой установлена операционная система.
Контрольные вопросы
1. К какому типу ядер в большей степени относится Windows NT, к монолитным или микроядрам? Ответ обоснуйте.
2. Перечислите основные компоненты пользовательского режима.
3. Перечислите основные компоненты режима ядра.
4. Что такое Windows API? Где можно найти информацию по этому вопросу?
5. Каковы основные функции исполнительной системы, входящей в состав Ntoskrnl.exe?
6. Каковы основные функции ядра, входящего в состав Ntoskrnl.exe?
7. Что такое HAL?