Архитектура ос windows кратко

Обновлено: 18.05.2024

В этой статье рассматривается архитектура Windows в общих чертах. В следующих уроках рассмотрим каждый элемент архитектуры более подробно.

Архитектура Windows

Как вы уже знаете в операционной системе Windows есть 2 режима работы: пользовательский и режим ядра. При этом сама операционная система состоит из подсистем. В настоящее время Windows поддерживает две подсистемы: подсистему для Windows приложений и подсистему для Linux приложений. В будущем возможно появление и других подсистем, так как разработчики Mikrosoft разработали технологию, которая облегчает им добавлять различные подсистемы.

Чтобы лучше понять архитектуру Windows я подготовил такой рисунок:

архитектура 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.dll, и является прослойкой между ядром и оборудованием. Под оборудованием я подразумеваю системную плату или платы расширения, а не периферию. Так драйвера принтеров работают напрямую с принтерами, а не через HAL.

Таким образом ядро и драйвера не работают напрямую с материнской платой, а вызывают функции HAL.

Для Windows x86 включена пара библиотек HAL, но загружается одна в зависимости от типа системной платы:

Для Windows x64 существует только один образ hal:

Windows поддерживает расширения hal — это дополнительные библиотеки, которые могут загружаться при наличии конкретного оборудования, запрашивающего эти библиотеки. Например:

  • HalExtPL080.dll — расширение для контроллера DMA PL080;
  • HalExtIntcLpioDMA.dll — для некоторых платформ intel с пониженным энергопотреблением.

Создание расширений HAL требует сотрудничества с компанией MicroSoft. В связи с этим расширения снабжаются цифровой подписью.


История Windows



В начале 80 годов прошлого века компания IBM работала над персональным компьютером на базе процессора Intel 8088. С середины 70 годов компания Microsoft была основным поставщиком Basic для восьмибитных микрокомпьютеров. Когда IBM обратилась к Microsoft для лицензирования Basic для их нового компьютера IBM PC, Microsoft согласилась, а также посоветовала обратиться к компании Digital Research для лицензирования операционной системы CP/M. Но, получилось так, что глава Digital Research не нашел в своем графике времени для встречи для IBM, и IBM снова обратилась к Microsoft, теперь уже с просьбой решить вопрос операционной системы для IBM PC. Microsoft купила клон ОС CP/M у компании Seattle Computer Products и перенесла её на IBM PC. Итоговым названием получившейся ОС стало MS-DOS 1.0.



Windows 1.01

Windows 9x


Windows NT

В целом, к концу 80-х годов в Microsoft появилось понимание о необходимости разработки операционной системы не на базе MS-DOS. Параллельно с разработкой софта, связанного с MS-DOS, Microsoft наняла команду инженеров из компании DEC для разработки новой 32-битной операционной системы. Главой группы стал Дэйв Катлер — один из главных разработчиков ОС VMS. Новая система была названа NT — от сокращения New Technology. Основной упор при разработке NT делался на безопасность и надежность системы, а также на совместимость с Windows на MS-DOS. Так получилось, что опыт при разработке VMS повлиял на NT и сходство между ними стало причиной спора между DEC и Microsoft. По итогу спор был решен во внесудебном порядке.


Дэйв Катлер

Первая система Windows называлась Windows NT 3.1 и была выпущена в 1993 году. Это была первая ОС от Microsoft. Индекс 3.1 был выбран для соответствия Windows 3.1 на MS-DOS. Эта версия не имела особого успеха. Для NT требовалось больше памяти, 32-разрядных приложений на рынке было мало, возникали проблемы с совместимостью драйвером. Достичь поставленных целей смогли в NT 3.5. А первым серьезным обновлением для NT стала версия 4.0 в 96 году. Теперь эта система была мощна, надежна и безопасна, а также обеспечивала тот же интерфейс, что и Windows 95 (которая к тому моменту была чрезвычайно популярной).


Windows NT 3.1

В 2000 году вышла новая версия Windows — Windows 2000. Она развивала идеи, заложенные в системы NT. Был добавлена технология Plug-and-Play, управление электропитанием и улучшен интерфейс пользователя.


Windows 2000


Следующий проект Microsoft пал жертвой собственных амбиций. Через пять лет после Windows XP, в 2006 году на свет вышла Windows Vista. В ней был переделан графический интерфейс, переработаны и добавлены функциональные возможности в плане безопасности. Была улучшена производительность, надежность.


Windows Vista

Проблемы Vista были учтены при разработке Windows 7. Microsoft уделила большее внимание тестированию и производительности новой системы. Windows 7 быстро вытеснила Vista, а затем и XP, став самой популярной версией Windows до появления Windows 10 (сейчас Windows 7 на втором месте по популярности).




Технические аспекты

Архитектура

Во многих многопользовательских операционных системах сама ОС отделяется от приложений. Код ядра ОС выполняется в привилегированном режиме процессора (режим ядра). Для него доступны системные данные и оборудование. В непривилегированном режиме (пользовательский режим) выполняется код приложений. Ему предоставляется ограниченный набор интерфейсов и ограниченный доступ к системным данным. Прямой доступ к оборудованию заблокирован. При вызове программой пользовательского режима системной функции процессор выполняет специальную команду, переключающую вызывающий поток (последовательность команд внутри процесса, планируемая Windows для исполнения) в режим ядра. Когда системная функция завершается, операционная система переключает контекст потока обратно в пользовательский режим и дает возможность вызывающей стороне продолжить работу.

Рассмотрим ключевые системные компоненты, формирующие архитектуру системы. На рисунке ниже представлена упрощенная схема, на которой опущены некоторые элементы, например, сетевые компоненты и различные уровни драйверов. Первое, на что стоит обратить внимание — это линия, разделяющая части пользовательского режима и режима ядра. Как упоминалось выше, потоки пользовательского режима выполняются в закрытом адресном пространстве процессов. На время выполнения в режиме ядра они получают доступ к системному пространству. Таким образом, системные процессы, пользовательские процессы, процессы служб и подсистемы среды обладают собственным закрытыми адресными пространствами.


Упрощенная схема архитектуры Windows

Четыре базовых типа процессов пользовательского режима:

  • Пользовательские процессы. Эти процессы относятся к одному из следующих типов: 32- или 64-разрядные приложения Windows (приложения Windows Apps, работающие на базе среды Windows Runtime в Windows 8 и выше, включаются в эту категорию), 16-разрядные приложения Windows 3.1, 16-разрядные приложения MS-DOS, 32- и 64-разрядные приложения POSIX. Заметим, что 16-разрядные приложения могут выполняться только в 32-разрядных версиях Windows, а приложения POSIX в Windows 8 уже не поддерживаются.
  • Процессы служб. В эту категорию входят процессы, являющиеся хостами для служб Windows (например, службы планировщика задач и диспетчер печати). Обычно к службам предъявляется требование независимости выполнения от входа пользователя. Многие серверные приложения Windows (например, Microsoft SQL Server и Microsoft Exchange Server) также включают компоненты, выполняемые как службы.
  • Системные процессы. Фиксированные процессы, такие как процесс входа или диспетчер сеансов, не являются службами Windows. Другими словами, они не запускаются диспетчером служб.
  • Серверные процессы подсистем среды. Такие процессы реализуют часть поддержки среды ОС, предоставляемой пользователю и программисту. Изначально в Windows NT было три подсистемы среды: Windows, POSIX и OS/2. Подсистема OS/2 включалась только до Windows 2000, подсистема POSIX в последний раз была включена в Windows XP.Ultimate- и Enterprise-выпуски клиента Windows 7. Все серверные версии Windows 2008 R2 включают поддержку расширенной подсистемы POSIX, называемой SUA (Subsystem for UNIX-based Applications). Сейчас подсистема SUA не поддерживается и уже не включается как необязательное часть в версии Windows (Windows 10 версии 1607 включает подсистему Windows для Linux — WSL, Windows Subsystem for Linux).

Компоненты режима ядра:

  • Исполнительная система. Она содержит базовые сервисные функции ОС: управление памятью, управление процессами и потоками, безопасность, ввод/вывод, сетевая поддержка и межпроцессные коммуникации.
  • Ядро Windows. Низкоуровневые функции ОС: планирование потоков, диспетчеризация прерываний и исключений и многопроцессорная синхронизация. Также ядро предоставляет набор функций и базовых объектов, которые используются исполнительной системой для реализации высокоуровневых конструкций.
  • Драйверы устройств. Сюда входят как драйверы физических устройств, преобразующие вызовы пользовательских функций ввода/вывода в конкретные запросы ввода/вывода к устройству, так и драйверы устройств, не относящихся к физическому оборудованию, например драйверы файловой системы или сетевые драйверы.
  • Слой абстрагирования оборудования (HAL). Прослойка кода, изолирующее ядро, драйверы устройств и прочий исполняемый код Windows от платформенно-зависимых различий в работе оборудования, например различий между системными платами.
  • Оконная и графическая система. Реализация функций графического интерфейса (GUI), также известных как функции GDI: работа с окнами, элементы пользовательского интерфейса и графический вывод.
  • Уровень гипервизора. Включает всего-навсего один компонент: сам гипервизор. В этой среде нет ни драйверов, ни других модулей. При этом сам гипервизор состоит из нескольких внутренних уровней и служб: собственный диспетчер памяти, планировщик виртуальных процессов, управление прерываниями и таймером, функции синхронизации, разделы (экземпляры виртуальных машин) и внутрипроцессные коммуникации (IPC, Inter-Process Communication) и многие другие.
Имя файла Компоненты
Ntoskrnl.exe Исполнительная система и ядро
Hal.dll HAL
Win32k.sys Часть подсистемы Windows режима ядра (GUI)
Hvix64.exe (Intel), Hvax64.exe (AMD) Гипервизор
.sys в \SystemRoot\System32\Drivers Основные файлы драйверов: DirectX, Volume Manager, TCP/IP и поддержка ACPI
Ntdll.dll Внутренние вспомогательные функции и заглушки диспетчеризации системных сервисных функций
Kernel32.dll, Advapi32.dll, User32.dll, Gdi32.dll Dll основных подсистем Windows

Windows API

Windows API (Application Programming Interface) — это программный интерфейс пользовательского режима для Windows. До появления 64-разрядной версии операционной системы программный интерфейс 32-разрядных версий Windows назывался Win32 API в отличие от исходного 16-разрядного Windows API (программный интерфейс для исходных 16-разрядных версий Windows). На данный момент термин Windows API или Win32 API относят как к 32-разрядным, так и к 64-разрядным версиям.

WinRT

В Windows 8 появился новый API и исполнительная среда поддержки Windows Runtime (WinRT). WinRT состоит из платформенных сервисов, предназначенных для разработчиков приложений Windows Apps (приложения Windows Apps подходят для устройств, начиная от миниатюрных IoT-устройств до телефонов, планшетов, десктопных систем, ноутбуков и даже Xbox One и Microsoft HoloLens).


Windows представляет собой операционную систему с гибридным ядром (см. лекцию 1 "Введение в операционные системы"). В ней основные системные функции по управлению процессами, памятью, устройствами, файловой системой и безопасностью реализованы в компонентах, работающих в режиме ядра; но существует ряд важных системных компонентов пользовательского режима, например системные процессы входа в систему, локальной аутентификации, диспетчера сеансов, а также подсистемы окружения.

Архитектура Windows представлена на рис.4.1 [5; 2].

Архитектура Windows

Компоненты пользовательского режима

В пользовательском режиме работают следующие виды процессов:

  • системные процессы (system processes) – компоненты Windows, отвечающие за решение критически важных системных задач (т. е. аварийное завершение одного из этих процессов вызывает крах или нестабильную работу всей системы), но выполняемые в пользовательском режиме. Основные системные процессы:
    • Winlogon.exe – процесс входа в систему и выхода из неё;
    • Smss.exe (Session Manager – диспетчер сеансов) – процесс выполняет важные операции при инициализации системы (загрузка необходимых DLL, запуск процессов Winlogon и Csrss и др.), а затем контролирует работу Winlogon и Csrss;
    • Lsass.exe (Local Security Authentication Subsystem Server – сервер подсистемы локальной аутентификации) – процесс проверяет правильность введенных имени пользователя и пароля;
    • Wininit.exe – процесс инициализации системы (например, запускает процессы Lsass и Services);
    • Userinit.exe – процесс инициализации пользовательской среды (например, запускает системную оболочку – по умолчанию, Explorer.exe);
    • Services.exe (SCM, Service Control Manager – диспетчер управления службами) – процесс, отвечающий за выполнение служб – см. ниже;
    • собственно Windows – при помощи данной подсистемы выполняются 32 разрядные приложения Windows (Win32), а также 16 разрядные приложения Windows (Win16), приложения MS DOS и консольные приложения (Console). За подсистему Windows отвечает системный процесс Csrss.exe и драйвер режима ядра Win32k.sys;
    • POSIX (Portable Operating System Interface for UNIX – переносимый интерфейс операционных систем UNIX) – подсистема для UNIX-приложений. Начиная с Windows Server 2003 R2 компонент, реализующий эту подсистему, называется SUA (Subsystem for UNIX-based Applications). Компонент не устанавливается в Windows по умолчанию.

    Все перечисленные процессы пользовательского режима (кроме подсистемы POSIX 1 Подсистема POSIX использует библиотеку Psxdll.dll. ) для взаимодействия с модулями режима ядра используют библиотеки 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 приложениях (Graphical User Interface – графический интерфейс пользователя);
    • Gdi32.dll – функции графического пользовательского интерфейса (Graphics Device Interface, 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 ), которые реализуют основные задачи операционной системы:

    • диспетчер процессов (process manager) – управление процессами и потоками (см. лекцию 6 "Процессы и потоки");
    • диспетчер памяти (memory manager) – управление виртуальной памятью и отображение её на физическую (см. лекцию 8 "Управление памятью");
    • монитор контроля безопасности (security reference monitor) – управление безопасностью (см. лекцию 9 "Безопасность");
    • диспетчер ввода вывода (I/O manager), диспетчер кэша (cache Manager), диспетчер Plug and Play (PnP Manager) – управление внешними устройствами и файловыми системами (см. лекцию 10 "Управление устройствами" и лекцию 11 "Файловая система NTFS");
    • диспетчер электропитания (power manager) – управление электропитанием и энергопотреблением;
    • диспетчер объектов (object manager), диспетчер конфигурации (configuration manager), механизм вызова локальных процедур (local procedure call) – управление служебными процедурами и структурами данных, которые необходимы остальным компонентам.

    Ядро ( Kernel ) содержит функции, обеспечивающие поддержку компонентам исполнительной системы и осуществляющие планирование потоков (см. лекцию 7 "Планирование потоков"), механизмы синхронизации, обработку прерываний.

    Компонент Windows USER и GDI отвечает за пользовательский графический интерфейс (окна, элементы управления в окнах – меню , кнопки и т. п., рисование), является частью подсистемы Windows и реализован в драйвере Win32k.sys.

    Взаимодействие диспетчера ввода вывода с устройствами обеспечивают драйверы (drivers) – программные модули, работающие в режиме ядра, обладающие максимально полной информацией о конкретном устройстве (драйверы подробнее рассматриваются в лекции 10 "Управление устройствами").

    Однако, и драйверы, и ядро не взаимодействуют с физическими устройствами напрямую – посредником между программными компонентами режима ядра и аппаратурой является HAL ( Hardware Abstraction Layer ) – уровень абстрагирования от оборудования, реализованный в Hal . dll . HAL позволяет скрыть от всех программных компонентов особенности аппаратной платформы (например, различия между материнскими платами), на которой установлена операционная система .

    Резюме

    В лекции представлена архитектура операционной системы Windows и описаны основные компоненты пользовательского режима и режима ядра.

    После краткого обзора исходных замыслов проектирования и компоновки Windows рассмотрим основные компоненты системы, составляющие ее архитектуру. Упрощенная версия архитектуры показана на рис. 2.1. Нужно иметь в виду, что эта схема носит общий характер и не отображает все компоненты. (Например, на ней не показаны сетевые компоненты и иерархия различных типов драйверов устройств.)

    архитектура-windows

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

    Как уже говорилось, потоки пользовательского режима выполняются в защищенном адресном пространстве процесса (когда они выполняются в режиме ядра, у них есть доступ к системному пространству). Таким образом, у вспомогательных системных процессов, у процессов служб, у пользовательских приложений и у подсистем среды окружения, — у всех есть свое собственное закрытое адресное пространство.

    Четырем основным процессам пользовательского режима можно дать следующие описания:

    • Фиксированные (или реализованные на аппаратном уровне) вспомогательные системные процессы, такие как процесс входа в систему и администратор сеансов — Session Manager, которые не входят в службы Windows (они не запускаются диспетчером управления службами).
    • Служебные процессы, реализующие такие службы Windows, как Диспетчер задач (TaskScheduler) и спулер печати (PrintSpooler). Как правило, от служб требуется, чтобы они работали независимо от входов пользователей в систему. Многие серверные приложения Windows, такие как Microsoft SQL Server и Microsoft Exchange Server, также включают компоненты, работающие как службы.
    • Пользовательские приложения, которые могут относиться к одному из следующих типов: для 32- или 64-разрядной версии Windows, для 16-разрядной версии Windows 3.1, для 16-разрядной версии MS-DOS или для 32- или 64-разрядной версии POSIX. Следует учесть, что 16-разрядные приложения могут запускаться только на 32-разрядной версии Windows.
    • Серверные процессы подсистемы окружения, которые реализуют часть поддержки среды операционной системы или специализированную часть, представляемую пользователю и программисту. Изначально Windows NT поставляется тремя подсистемами среды: Windows, POSIX и OS/2. Но подсистемы POSIX и OS/2 последний раз поставлялись с Windows 2000. Выпуски клиентской версии Windows Ultimate и Enterprise, а также все серверные версии включают поддержку для усовершенствованной подсистемы POSIX, которая называется подсистемой для приложений на основе Unix (Unix-based Applications, SUA).

    В Windows входят следующие компоненты, работающие в режиме ядра:

    • Исполняющая система Windows содержит основные службы операционной системы, такие как управление памятью, управление процессами и потоками, безопасность, ввод-вывод, сеть и связь между процессами.
    • Ядро Windows состоит из низкоуровневых функций операционной системы, таких как диспетчеризация потоков, диспетчеризация прерываний и исключений и мультипроцессорная синхронизация. Оно также предоставляет набор подпрограмм и базовых объектов, используемых остальной исполняющей системой для реализации высокоуровневых конструктивных элементов.
    • К драйверам устройств относятся как аппаратные драйверы устройств, которые переводят вызовы функций ввода-вывода в запросы ввода-вывода конкретного аппаратного устройства, так и неаппаратные драйверы устройств, такие как драйверы файловой системы и сети.
    • Уровень аппаратных абстракций (hardware abstraction layer, HAL), являющийся уровнем кода, который изолирует ядро, драйверы устройств и остальную исполняющую систему Windows от аппаратных различий конкретных платформ (таких как различия между материнскими платами).
    • Система организации многооконного интерфейса и графики, реализующая функции графического пользовательского интерфейса (graphical user interface, GUI), более известные как имеющиеся в Windows USER- и GDI-функции, предназначенные для работы с окнами, элементами управления пользовательского интерфейса и графикой.

    В таблице перечислены имена файлов основных компонентов операционной системы Windows. (Вам нужно знать эти имена файлов, потому что на некоторые системные файлы мы будем ссылаться по именам.) Каждый из этих компонентов будет более подробно рассмотрен позже.

    Основные системные файлы Windows.

    Имя файлаКомпоненты
    Ntoskrnl.exeИсполняющая система и ядро
    Ntkrnlpa.exe (только
    в 32-разрядных системах)
    Исполняющая система и ядро с поддержкой расширения
    физического адреса — Physical Address Extension (PAE),
    позволяющего 32-разрядным системам осуществлять
    адресацию вплоть до 64 Гб физической памяти и помечать
    память как не содержащую исполняемый код
    Hal.dllУровень аппаратных абстракций
    Win32k.sysЧасть подсистемы Windows, работающей в режиме ядра
    Ntdll.dllВнутренние вспомогательные функции и заглушки диспетчера системных служб к исполняющим функциям
    Kernel32.dll, Advapi32.dll,
    User32.dll, Gdi32.dll
    Основные Windows-подсистемы DLL-библиотек

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

    Читайте также: