В этой статье рассматривается архитектура Windows в общих чертах. В следующих уроках рассмотрим каждый элемент архитектуры более подробно.
Архитектура Windows
Как вы уже знаете в операционной системе Windows есть 2 режима работы: пользовательский и режим ядра. При этом сама операционная система состоит из подсистем. В настоящее время Windows поддерживает две подсистемы: подсистему для Windows приложений и подсистему для Linux приложений. В будущем возможно появление и других подсистем, так как разработчики Mikrosoft разработали технологию, которая облегчает им добавлять различные подсистемы.
Чтобы лучше понять архитектуру Windows я подготовил такой рисунок:
При запуске Windows приложения идет обращение к «Подсистеме Windows«, а уже от туда идет обращение к «Исполнительной системе«, которая запустит процесс для этого приложения.
Microsoft также разработали «Подсистему для Linux» (WSL). Для этого в режим ядра поместили два драйвера: Lxss.sys и Lxcore.sys. Эти драйвера эмулируют ядро Linux. А также, в пользовательском режиме работает специальный менеджер — LX Manager. Этот менеджер обрабатывает приложения для Linux.
Когда вы запускаете Linux приложение, например bash.exe, то идет обращение через LX Manager к драйверам эмулирующим ядро Linux. И уже это ядро запускает и обслуживает данный процесс.
То-есть для Windows приложений существует «Подсистема Windows» в пользовательском режиме и «Исполнительная система» в режиме ядра. А для Linux приложений существует LX Manager в пользовательском режиме и специальные драйвера в режиме ядра.
Помимо «Исполнительной системы» и драйверов эмулирующих работу ядра Linux в режиме ядра работают:
- драйвера устройств или приложений, которые являются исполняемыми файлами с расширением .sys;
- ядро операционной системы;
- HAL — прослойка между ядром (или драйверами) и оборудованием (системной платой).
Ядро
В системе Windows ядро не выполняет все задачи, которые выполняются в режиме ядра. Ядру помогает «Исполнительная система«. Подробнее про неё будет написано в следующей статье. А пока посмотрим чем занимается само ядро.
Ядро состоит из набора функций Ntoskrnl.exe, которые являются фундаментальными в операционной системе. Эти функции используются компонентами исполнительной системы.
А также ядро поддерживает работу с оборудованием, например работу с прерываниями и процессором. И ещё ядро следит за синхронизацией процессоров в многопроцессорной системе.
С другим оборудованием ядро работает через HAL.
HAL
HAL — слой абстрагирования от оборудования. Он представляет собой загружаемый модуль режима ядра hal.dll, и является прослойкой между ядром и оборудованием. Под оборудованием я подразумеваю системную плату или платы расширения, а не периферию. Так драйвера принтеров работают напрямую с принтерами, а не через HAL.
Таким образом ядро и драйвера не работают напрямую с материнской платой, а вызывают функции HAL.
Для Windows x86 включена пара библиотек HAL, но загружается одна в зависимости от типа системной платы:
- halacpi.dll — платы с поддержкой acpi, но без поддержки apic;
- halmacpi.dll — платы с поддержкой acpi и apic.
Для Windows x64 существует только один образ hal:
- hal.dll — платы с поддержкой x64 всегда поддерживают acpi и apic.
Windows поддерживает расширения hal — это дополнительные библиотеки, которые могут загружаться при наличии конкретного оборудования, запрашивающего эти библиотеки. Например:
- HalExtPL080.dll — расширение для контроллера DMA PL080;
- HalExtIntcLpioDMA.dll — для некоторых платформ intel с пониженным энергопотреблением.
Создание расширений HAL требует сотрудничества с компанией MicroSoft. В связи с этим расширения снабжаются цифровой подписью.