К какому типу ядер в большей степени относится windows nt к монолитным или микроядрам

Обновлено: 04.07.2024

Ядро (kernel) это центральная и главная часть операционной системы которая обеспечивает архитектуру связи с приложениями, организует и регулирует доступ к ресурсам компьютера. Дополнительно, но не как правило предоставляет доступ к сетевым протоколам и к файловой системе. На картинке ниже я покажу как схематично работает ядро операционной системы и другие структуры внутри ОС

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

архитектура и типы ядер операционной системы

Классическая архитектура ядра очень сильно зависит от того какой тип ядра представлен в операционной системе. Типов ядер операционной системы бывает очень много и все различаются лишь по размеру и доступным функциям кроме базовых.

Монолитное ядро


монолитное ядро операционной системы представляет богатый выбор абстракций. все части или лучше сказать элементы находятся в одном адресном пространстве и представляют собой единый «Монолит». Все элементы которые были представлены выше на картинке спокойно взаимодействуют между собой и сообщаются. Это самое старое воплощение ядра в ОС.

Недостаток:

Обладает достаточно значимым минусом что при отказе работы одного элемента перестает работать всё ядро операционной системы и следовательно ОС.

Преимущества:

Из положительного момента — быстрая разработка и внедрение новых модулей а также скорость работы такого ядра. всё таки унификация всех элементов берет своё

Примеры ОС построенных на таких ядрах :LINUX, Unix, ms-dos

Модульное ядро

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

Микроядро


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

драйверы и модули, всё находиться в серверных процессах. Чтобы было понятно взгляните на картинку

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

Недостатки: увеличенное потребление ресурсов.

Из самых популярных операционных систем которое используют это
ядро операционной системы это MAC OS X.

Экзоядро


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

Ядро операционной системы WINDOWS

Вы спросите а к какому типу архитектуры тогда относиться операционная система windows?

относиться она к гибридному типу включая в себя как и микроядро так и монолитное
ядро операционной системы

Ядро́ (англ. kernel ) — центральная часть операционной системы (ОС), обеспечивающая приложениям координированный доступ к ресурсам компьютера, таким как процессорное время, память, внешнее аппаратное обеспечение, внешнее устройство ввода и вывода информации. Также обычно ядро предоставляет сервисы файловой системы и сетевых протоколов.

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

Описанная задача может различаться в зависимости от типа архитектуры ядра и способа её реализации.

Содержание

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

  • Достоинства: Скорость работы, упрощённая разработка модулей.
  • Недостатки: Поскольку всё ядро работает в одном адресном пространстве, сбой в одном из компонентов может нарушить работоспособность всей системы.

Примеры: Традиционные ядра UNIX (такие как BSD), Linux; ядро MS-DOS, ядро KolibriOS.

Некоторые старые монолитные ядра, в особенности систем класса UNIX/Linux, требовали перекомпиляции при любом изменении состава оборудования. Большинство современных ядер позволяют во время работы подгружать модули, выполняющие часть функций ядра. В этом случае компоненты операционной системы являются не самостоятельными модулями, а составными частями одной большой программы, называемой монолитным ядром (monolithic kernel), которое представляет собой набор процедур, каждая из которых может вызвать каждую. Все процедуры работают в привилегированном режиме.

Модульное ядро — современная, усовершенствованная модификация архитектуры монолитных ядер операционных систем.

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

Микроядро предоставляет только элементарные функции управления процессами и минимальный набор абстракций для работы с оборудованием. Бо́льшая часть работы осуществляется с помощью специальных пользовательских процессов, называемых сервисами. Решающим критерием «микроядерности» является размещение всех или почти всех драйверов и модулей в сервисных процессах, иногда с явной невозможностью загрузки любых модулей расширения в собственно микроядро, а также разработки таких расширений.

  • Достоинства: Устойчивость к сбоям оборудования, ошибкам в компонентах системы. Основное достоинство микроядерной архитектуры — высокая степень модульности ядра операционной системы. Это существенно упрощает добавление в него новых компонентов. В микроядерной операционной системе можно, не прерывая её работы, загружать и выгружать новые драйверы, файловые системы и т. д. Существенно упрощается процесс отладки компонентов ядра, так как новая версия драйвера может загружаться без перезапуска всей операционной системы. Компоненты ядра операционной системы ничем принципиально не отличаются от пользовательских программ, поэтому для их отладки можно применять обычные средства. Микроядерная архитектура повышает надежность системы, поскольку ошибка на уровне непривилегированной программы менее опасна, чем отказ на уровне режима ядра.
  • Недостатки: Передача данных между процессами требует накладных расходов.

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

  • Сервисные процессы (в принятой в семействе UNIX терминологии — «демоны») активно используются в самых различных ОС для задач типа запуска программ по расписанию (UNIX и Windows NT), ведения журналов событий (UNIX и Windows NT), централизованной проверки паролей и хранения пароля текущего интерактивного пользователя в специально ограниченной области памяти (Windows NT). Тем не менее, не следует считать ОС микроядерными только из-за использований такой архитектуры.

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

Возможность доступа к устройствам на уровне контроллеров позволит эффективней решать некоторые задачи, которые плохо вписываются в рамки универсальной ОС, например, реализация СУБД будет иметь доступ к диску на уровне секторов диска, а не файлов и кластеров, что положительно скажется на быстродействии.

Наноядро — архитектура ядра операционной системы, в рамках которой крайне упрощённое и минималистичное ядро выполняет лишь одну задачу — обработку аппаратных прерываний, генерируемых устройствами компьютера. После обработки прерываний от аппаратуры наноядро, в свою очередь, посылает информацию о результатах обработки (например, полученные с клавиатуры символы) вышележащему программному обеспечению при помощи того же механизма прерываний. Примером является KeyKOS — самая первая ОС на наноядре. Первая версия вышла ещё в 1983 году.

Гибридные ядра — это модифицированные микроядра, позволяющие для ускорения работы запускать «несущественные» части в пространстве ядра. Пример: ядра ОС Windows семейства NT.

Все рассмотренные подходы к построению операционных систем имеют свои достоинства и недостатки. В большинстве случаев современные операционные системы используют различные комбинации этих подходов. Так, например, сейчас ядро «Linux» представляет собой монолитную систему с отдельными элементами модульного ядра [1] . При компиляции ядра можно разрешить динамическую загрузку и выгрузку очень многих компонентов ядра — так называемых модулей. В момент загрузки модуля его код загружается на уровне системы и связывается с остальной частью ядра. Внутри модуля могут использоваться любые экспортируемые ядром функции.

Существуют варианты ОС GNU, в которых вместо монолитного ядра применяется ядро Mach (такое же, как в Hurd), а поверх него крутятся в пользовательском пространстве те же самые процессы, которые при использовании Linux были бы частью ядра. Другим примером смешанного подхода может служить возможность запуска операционной системы с монолитным ядром под управлением микроядра. Так устроены 4.4BSD и MkLinux, основанные на микроядре Mach. Микроядро обеспечивает управление виртуальной памятью и работу низкоуровневых драйверов. Все остальные функции, в том числе взаимодействие с прикладными программами, осуществляются монолитным ядром. Данный подход сформировался в результате попыток использовать преимущества микроядерной архитектуры, сохраняя по возможности хорошо отлаженный код монолитного ядра.

Смешанное ядро, в принципе, должно объединять преимущества монолитного ядра и микроядра: казалось бы, микроядро и монолитное ядро — крайности, а смешанное — золотая середина. В них возможно добавлять драйвера устройств двумя способами: и внутрь ядра, и в пользовательское пространство. Но на практике концепция смешанного ядра часто подчёркивает не только достоинства, но и недостатки обоих типов ядер.


Ядро системы каждый день помогает работе компьютера, но многие даже не знают, что это такое. Мы расскажем про все функции ядра и простыми словами объясним, для чего оно нужно.

Итак, что такое ядро операционной системы и за что оно отвечает в работе вашего компьютера? Разберемся подробнее.

  • Ядро — это согласующее звено между графическим интерфейсом, программным и аппаратным обеспечением. Ядро постоянно используется в работе компьютера и является центральным модулем операционной системы.
  • Ядро имеет разные слои. Нижний уровень формирует интерфейс к системному оборудованию, например, сетевым контроллерам или контроллерам PCI Express.
  • Следующий уровень отвечает за управление памятью и выделяет ее каждому процессу. Ваше программное обеспечение обычно включает в себя несколько таких процессов.

Windows использует ядро NT, которое контролирует несколько подсистем. Apple использует ядро XNU. Linux-системы, такие как Ubuntu и Android, используют ядро Linux.

  • Уровень «управления процессами» позволяет параллельно запускать несколько задач на вашем компьютере. Ядро обрабатывает все запросы, поступающие от программ, упорядочивает их во времени и прерывает, если возникают проблемы.
  • Верхний уровень — файловая система. Здесь процессам назначаются области на HDD (жестком диске) и в основной памяти компьютера.
  • Таким образом, ядро регулирует весь путь от системного оборудования до прикладного программного обеспечения, которым управляет пользователь через графический интерфейс (GUI). Но сама пользовательская область не является частью ядра и называется «shell», «ring» или «userland».
  • Компьютерная программа отправляет системные вызовы «System Calls» в ядро. Затем оно делает фактический запрос на машинном языке СPU. Ядро знает полный набор команд центрального процессора, то есть все машинные инструкции, которые он может выполнить. Такие системные вызовы запускаются, например, при чтении или записи файлов на компьютер. Эта простая задача постоянно решается даже в фоновом режиме.
  • В многопользовательских системах ядро также контролирует доступ к файлам и аппаратным компонентам.

Ядро является не ядром процессора, а ядром операционной системы.

Windows – одна из наиболее многогранных и гибких ОС, она работает на совершенно разных архитектурах и доступна в разных вариантах. На сегодня она поддерживает архитектуры x86, x64, ARM и ARM64. Windows в своё время поддерживала Itanium, PowerPC, DEC Alpha и MIPS. Кроме того, Windows поддерживает целый набор SKU, работающих в различных условиях; от дата-центров, ноутбуков, Xbox и телефонов до встраиваемых версий для интернета вещей, например, в банкоматах.

Самый удивительный аспект состоит в том, что ядро Windows практически не меняется в зависимости от всех этих архитектур и SKU. Ядро динамически масштабируется в зависимости от архитектуры и процессора, на котором оно работает, так, чтобы пользоваться всеми возможностями оборудования. Конечно, в ядре присутствует определённое количество кода, связанного с конкретной архитектурой, однако его там минимальное количество, что позволяет Windows запускаться на разнообразных архитектурах.

В этой статье я расскажу об эволюции ключевых частей ядра Windows, которые позволяют ему прозрачно масштабироваться от чипа NVidia Tegra низкого потребления, работающего на Surface RT 2012 года, до гигантских монстров, работающих в дата-центрах Azure.

Менеджер задач Windows, работающий на пререлизной машине класса Windows DataCenter, с 896 ядрами, поддерживающими 1792 логических процессора и 2 Тб памяти

Эволюция единого ядра

Перед тем, как обсудить детали ядра Windows, сделаем небольшое отступление в сторону рефакторинга. Рефакторинг играет ключевую роль в увеличении случаев повторного использования компонентов ОС на различных SKU и платформах (к примеру, клиент, сервер и телефон). Базовая идея рефакторинга – позволить повторно использовать одни и тем же DLL на разных SKU, поддерживая небольшие модификации, сделанные специально под нужный SKU, не переименовывая DLL и не ломая работу приложений.

Базовая технология рефакторинга Windows – мало документированная технология под названием "наборы API". Наборы API – это механизм, позволяющий ОС разъединять DLL и место их применения. К примеру, набор API позволяет приложениям для win32 продолжать пользоваться kernel32.dll, притом, что реализация всех API прописана в другой DLL. Эти DLL с реализацией также могут отличаться у разных SKU. Посмотреть наборы API в деле можно, запустив обход зависимостей на традиционной Windows DLL, например, kernel32.dll.

Закончив это отступление по поводу строения Windows, позволяющего системе максимизировать повторное и совместное использование кода, перейдём к техническим глубинам запуска ядра по планировщику, являющегося ключом к масштабированию ОС.

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

Windows NT – это, по сути, микроядро, в том смысле, что у него есть своё core Kernel (KE) с ограниченным набором функций, использующее исполняемый уровень (Executive layer, Ex) для выполнения всех политик высокого уровня. EX всё ещё является режимом ядра, так что это не совсем микроядро. Ядро отвечает за диспетчеризацию потоков, синхронизацию между процессорами, обработку исключений аппаратного уровня и реализацию низкоуровневых функций, зависящих от железа. Слой EX содержит различные подсистемы, обеспечивающие набор функциональности, который обычно считается ядром – IO, Object Manager, Memory Manager, Process Subsystem, и т.д.

Чтобы лучше представить себе размер компонентов, вот примерное разбиение по количеству строк кода в нескольких ключевых каталогах дерева исходников ядра (включая комментарии). В таблицу не вошло ещё много всего, относящегося к ядру.

Подсистемы ядра Строк кода
Memory Manager 501, 000
Registry 211,000
Power 238,000
Executive 157,000
Security 135,000
Kernel 339,000
Process sub-system 116,000

Более подробная информация об архитектуре Windows содержится в серии книг “Windows Internals”.

Планировщик

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

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

У планировщика Windows изначально была одна очередь готовности, из которой он выбирал следующий, наивысший по приоритету поток для запуска. Однако с началом поддержки всё большего количества процессоров, единственная очередь превратилась в узкое место, и примерно в районе выхода Windows Server 2003 планировщик поменял работу и организовал по одной очереди готовности на процессор. При переходе на поддержку нескольких запросов на один процессор единую глобальную блокировку, защищающую все очереди, делать не стали, и разрешили планировщику принимать решения на основе локальных оптимумов. Это означает, что в любой момент в системе работает один поток с наивысшим приоритетом, но не обязательно означает, что N самых приоритетных потоков в списке (где N – число процессоров) работают в системе. Такой подход оправдывал себя, пока Windows не начала переходить на CPU с низким энергопотреблением, например, на ноутбуки и планшеты. Когда на таких системах поток с наивысшим приоритетам не работал (например, поток переднего плана интерфейса пользователя), это приводило к заметным глюкам интерфейса. Поэтому в Windows 8.1 планировщик перевели на гибридную модель, с очередями для каждого процессора для потоков, связанных с этим процессором, и разделяемой очередью готовых процессов для всех процессоров. Это не сказалось на быстродействии заметным образом благодаря другим изменениям в архитектуре планировщика, например, рефакторингу блокировки базы данных диспетчера.

В Windows 7 ввели такую вещь, как динамический планировщик со справедливыми долями (Dynamic Fair Share Scheduler, DFSS); это в первую очередь касалось терминальных серверов. Эта особенность пыталась решить проблему, связанную с тем, что одна терминальная сессия с высокой загрузкой CPU могла повлиять на потоки в других терминальных сессиях. Поскольку планировщик не учитывал сессии и просто использовал приоритет для распределения потоков, пользователи в разных сессиях могли повлиять на работу пользователей в других сессиях, задушивая их потоки. Также это давало несправедливое преимущество сессиям (и пользователям) с большим количеством потоков, поскольку у сессии с большим количеством потоков было больше возможностей получить процессорное время. Была сделана попытка добавить в планировщик правило, по которому каждую сессию рассматривали на равных с другими по количеству процессорного времени. Подобная функциональность есть и в ОС Linux с их абсолютно честным планировщиком (Completely Fair Scheduler). В Windows 8 эту концепцию обобщили в виде группы планировщика и добавили в планировщик, в результате чего каждая сессия попадала в независимую группу. Кроме приоритетов для потоков, планировщик использует группы планировщика как индекс второго уровня, принимая решение по поводу того, какой поток запускать следующим. В терминальном сервере все группы планировщика имеют одинаковый вес, поэтому все сессии получают одинаковое количество процессорного времени вне зависимости от количества или приоритетов потоков внутри групп планировщика. Кроме того, такие группы также используют для более точного контроля над процессами. В Windows 8 рабочие объекты (Job) были дополнены так, чтобы поддерживать управление процессорным временем. При помощи специального API можно решать, какую часть процессорного времени может использовать процесс, должно это быть мягкое или жёсткое ограничение, и получать уведомления, когда процесс достигает этих ограничений. Это похоже на управление ресурсами в cgroups на Linux.

Начиная с Windows 7, в Windows Server появилась поддержка более 64 логических процессоров на одном компьютере. Чтобы добавить поддержку такому большому количеству процессоров, в системе ввели новую категорию, «процессорная группа». Группа – неизменный набор логических процессоров количеством не более 64 штук, которые рассматриваются планировщиком как вычислительная единица. Ядро при загрузке определяет, какой процессор к какой группе отнести, и у машин с количеством процессорных ядер менее 64 этот подход практически невозможно заметить. Один процесс может разделяться на несколько групп (например, экземпляр SQL-сервера), единственный поток в один момент времени может выполняться только в рамках одной группы.

Но на машинах, где число ядер CPU превышает 64, Windows начала демонстрировать новые узкие места, не дававшие таким требовательным приложениям, как SQL-сервер, масштабироваться линейно с ростом количества ядер процессора. Поэтому, даже при добавлении новых ядер и памяти, замеры скорости не показывали её существенного увеличения. Одной из главных проблем, связанных с этим, был спор по поводу блокировки базы диспетчера. Блокировка базы диспетчера защищала доступ к объектам, работу которых необходимо было запланировать. Среди этих объектов – потоки, таймеры, порты ввода/вывода, другие объекты ядра, подверженные ожиданию (события, семафоры, мьютексы). Под давлением необходимости разрешения таких проблем, в Windows 7 была проделана работа по устранению блокировки базы диспетчера и замене её на более точные подстройки, например, пообъектную блокировку. Это позволило таким замерам производительности, как SQL TPC-C, продемонстрировать рост скорости на 290% по сравнению с предыдущей схемой на некоторых конфигурациях. Это был один из крупнейших взлётов производительности в истории Windows, случившихся благодаря изменению единственной особенности.

Windows 10 принесло другую инновацию, внедрив наборы процессоров (CPU Sets). CPU Sets позволяют процессу разделять систему так, что процесс может распределиться на несколько групп процессоров, не позволяя другим процессам пользоваться ими. Ядро Windows даже не даёт прерываниям устройств пользоваться процессорами, входящими в ваш набор. Это гарантирует, что даже устройства не смогут исполнять свой код на процессорах, выданных группе вашего приложения. Это похоже на низкотехнологичную виртуальную машину. Понятно, что это мощная возможность, поэтому в неё встроено множество мер безопасности, чтобы разработчик приложения не допустил больших ошибок, работая с API. Функциональность наборов CPU используется в игровом режиме (Game Mode).

Наконец, мы приходим к поддержке ARM64, появившейся у Windows 10. Архитектура ARM поддерживает архитектуру big.LITTLE, гетерогенную по своей природе – «большое» ядро работает быстро и потребляет много энергии, а «малое» ядро работает медленно и потребляет меньше. Идея в том, что малозначительные задачи можно выполнять на малом ядре, экономя таким образом батарею. Для поддержки архитектуры big.LITTLE и увеличения времени работы от батареи при работе Windows 10 на ARM, в планировщик добавили поддержку гетерогенной планировки, учитывающую пожелания приложения, работающего с архитектурой big.LITTLE.

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

Работа от чужого имени [Work on Behalf]: в Windows довольно много работы на переднем плане осуществляется другими сервисами, работающими в фоне. К примеру, при поиске в Outlook сам поиск проводится фоновым сервисом Indexer. Если мы просто запустим все сервисы на малом ядре, пострадает качество и скорость работы приложений на переднем плане. Чтобы при таких сценариях работы она не замедлялась на архитектурах big.LITTLE, Windows отслеживает вызовы приложения, поступающие к другим процессам, чтобы выполнять работу от их имени. В таком случае мы выдаём приоритет переднего плана потоку, относящемуся к сервису, и заставляем его выполняться на большом ядре.

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

Продолжаем начатую лекцию по ОС Windows NT. Начало лекции можно посмотреть здесь.

Само ядро представим в виде трех слоев.

Это и спроектировали в HAL.

На рисунке ниже представлена упращенная схема ядра Windоws NT.

Ядро Windows NT

Упрощенная схема ядра Windows NT

В то время, когда проектировался сам Windows это было необходимостью, ведь не было понятно, какой доминирующей будет аппаратная платформа через год, 5лет…, а ОС должна ориентироваться на текущее и будущее аппаратное обеспечение. Тогда не был ясен тип платформы (х86 х64), и только благодаря свойству переносимости удалось выпустить Windows ARTI для планшетов (на базе ЦП ARM).

Таким образом запроектировано переносимое портабельное ядро с помощью слоя абстракции аппаратного обеспечения (HAL) .

На этом слое абстракции стоят следующие две части ядра:

  1. Драйвера устройств – они работают с устройствами через HAL и предоставляют свои сервисы, например устройства ввода/вывода – мышь, клавиатура, диск, сеть.
  2. Kernel – это не конкретно ядро, а его часть.

Ключевой принцип архитектуры ядра Windows

Это принцип подсистем окружения (или персоналий).

Программы пользователя НЕ используют сервисы ОС напрямую. Даже когда мы запускаем любое приложение под Windows напрямую, оно никогда не использует ядро напрямую, только через подсистему окружения Windows API, нет вызова ядра напрямую.

Библиотека подсистемы неким образом транслирует документированную API функцию в вызов недокументированной функции ОС.

За счет этого функции ОС можно менять под «сегодняшний» день, при этом оставлять обратную совместимость с теми приложениями, которые уже разработаны под ОС, за счет того, что есть документированное API, которое обязано работать.

Вначале было три подсистемы окружения: Windows, OS/2, POSIX

В Windows 2000 исчезла OS/2

В Windows XP исчезла POSIX

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

Kernel – самые низкоуровневые функции ОС: планирование потоков, обработка прерываний, мультипроцессорная синхронизация.

Kernel предоставляет низкоуровневые примитивы, на которые Executive реализует высокоуровневые конструкции

HAL – прослойка между аппаратным обеспечением и ядром.

Executive – стоит выше и реализует основные сервисы ОС: управление памятью, процессами, потоками, безопасность, ввод/вывод, межпроцессорное взаимодействие.

Драйвера устройств – реальные устройства – работа с аппаратурой, виртуальные устройства – драйвера (например сетевого стэка).

Другие модули ядра

  • Реализуют функции графического интерфейса
  • Реализуют оконную подсистему

Микроядро

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

Причины: производительность, слишком много переключений. По мнению MS нет ни одной коммерчески успешной ОС, которая была бы исключительно микроядро.

В Windows используется Гибридное ядро , так как обладает некоторыми характеристиками микроядра:

  • Подсистемы(персоналии) работают в собственных адресных пространствах
  • Компоненты ядра архитектурно изолированы, т.е. менеджер памяти, в его внутреннюю структуру из вне никто не вторгается, все пользуются тем API, которое предоставляет ММ. Тоже самое касается управлением процессами, потоками, конфигурациями, они архитектурно изолированы.

На рисунке выше «Упрощенная схема ядра» Kernel по сути и есть это микроядро, которое можно было бы Executive вынести в режим пользователя и разбить его на отдельные процессы. В ядре осталась бы только часть и это было бы классическое микроядро.

Но из за причины производительности Executive не стали выносить в режим пользователя и разбивать на отдельные процессы. Его скомпилировали, поместили в модуль, архитектурно все осталось в ядре.

Поэтому В Windows ядро Гибридное и достаточно интересно организовано.

В ядре и HAL есть небольшие включения на Ассемблере внутри слоя абстракции аппаратного обеспечения.

Последние 20лет ПК работают на х86 платформе, поэтому вопрос о переносимости перед разработчиками ОС не стоял.

Объектно-ориентированный подход

Ключевой принцип при проектировании Windows.

Любой ресурс системы представляется как некий объект. Ресурс – это любой ресурс который должен разделяться и к которому может быть доступ от нескольких процессов. Если ресурс используется в рамках одного процесса, то выделять его как объект не имеет смысла.

В основе Windows NT – объекты, унифицированная форма, имеющая:

  • Именование
  • Совместное использование
  • Учет

Зачем все так сделано?

Есть несколько типов ресурсов, в бедующем можно добавлять другие ресурсы в систему, и чтобы эта унифицировать и не переписывать все ядро, создали унифицированную форму: наименование, совместное использование, учет.

Любой разделяемый ресурс системы – это объект.

Внутри структуры самого execute – не объекты.

Менеджер объектов

Это часть execute, сокращенное название OB(Object Manager) – эти же самые названия используются в языке СИ.

  • Физ. файлы и директории;
  • Элементы реестра;
  • Процессы (поток).

Каждый ресурс предоставляется объектом

Операции над объектами:

  • Создание/удаление;
  • Защита доступа;
  • Подсчет ссылок (Reference counting).

Подсчет ссылок (Reference counting)

При создании или открытии объекта создается ссылка на объект, называемая хэндлом.

Хэндлы ассоциированы с процессом, но могут передаваться от одного процесса к другому, так как объектом можно пользоваться из разных процессов, то это разделяемый ресурс. Удобно передавать хэндлы.

По иерархии объектов существуют два класса объектов:

  1. executive – используются пользовательскими приложениями и компонентами самого executive (исполнительной подсистемы), их большинство, они общие.
  2. Kernel – представляют базовые ресурсы – физические устройства, примитивы синхронизации… Могут использоваться только в режиме ядра. Используются только ядром, т.е. с ними работает только ядро и больше никто.

Типы объектов Windows

Класс Executive

Что такое сам объект физически?

Сам объект – это набор каких-то данных. Каких – менеджеру объектов без разницы. Объект состоит из двух больших частей: тело, заголовок.

Тело – сами данные(они интересуют конкретного потребителя).

Заголовок – добавляется менеджером объектов, в нем хранится внутренняя информация для организации объекта, его хранения, наименования, учета, работы, прав доступа.

  • Имя
  • Директория, которая ему принадлежит
  • Дескриптор безопасности
  • Сколько раз были открыты хэдлы объекта
  • Список процессов, имеющих ссылку на данный объект
  • Количество этих ссылок
  • Тип

Все они нужны для работы менеджера объектов.

Объекты группируются в директории, чтобы их как то систематизировать. Строится все иерархическим образом, есть директории верхнего уровня(Root), потом есть ветви.

Файловая организация WindowsNT

  1. NTOSKRNL.EXE – ядро ОС (execute и kernel).
  2. HAL.DLL – абстракция аппаратного обеспечения. Так как в ОС изначально поддерживалась модульность, то слой абстракции аппаратного обеспечения располагается отдельным файлом.
  3. NTDLL.DLL – реализация Native API и системные вызовы – специальная библиотека, где хранятся системные вызовы, которые предоставляют пользователю удобный API интерфейс для работы.

Подключаемые файлы (подключаемые модули ядра) могут называться как угодно.

Модули ядра Windows NT нельзя вкомпилировать в само же ядро. В ОС Linex есть выбор, можно использовать их отдельно, можно вместе с ядром).

Для самой ОС три файла недостаточны, необходим еще ряд менеджеров и подсистем и всего прочего для того, чтобы организовать сложную архитектуру Windows NT, чтобы работало все подсистемное окружение.

Поэтому некоторые другие файлы тоже необходимы, они представлены ниже в порядке загрузки.

  • SMSS.EXE – процесс менеджера сессий.
  • WINLOGON.EXE – процесс управления аутентификацией пользователя (логон).
  • SERVICES.EXE – процесс управления службами (сервисами).
  • LSASS.EXE – процесс подсистемы Local Security Authority.
  • CSRSS.EXE – процесс подсистемы Windows.
  • WIN32R.SYS – часть подсистемы Win, работающая в режиме ядра. Драйвер, подключаемый модуль ядра, он реализует ту часть подсистемы окружения Win,которая работает в режиме ядра, т.е. это оконный менеджер и графическая подсистема.
  • KERNEL32.DLLUSER32.DLL GDI32.DLL – три ключевые динамические библиотеки подсистемы, реализуют пользовательскую часть подсистемы окружения Winвщцы. Для 64разрядной ОС применяются те же названия (с числом 32).

Подсистема Windows

CSRSS.EXE – процесс подсистемы окружения Windows, который управляет консольными приложениями и реализует вспомогательные функции

Win32K.SYS – драйвер режима ядра, реализуется:

Подсистема пользователя

  • Динамические библиотеки подсистемы: ADVPI32.DLL, USER32.DLL, GDI32.DLL, KERNEL32.DLL
  • Графические драйвера ( включая драйвер принтеров)

До Windows NT4.0 оконный менеджер и графическая подсистема были вынесены в режим пользователя. В силу слабых ПК от этого решения отказались.

Как все эти внутренности работают? Как это все увидеть с точки зрения программиста?

Инструменты

Инструменты – множество программ для исследования внутреннего устройства Windows и понимания принципа их работы.

Существуют утилиты, которые помогают разобраться в система Windows:

  • Дополнения от MS
  • Утилиты Sysinternals(MS) –автор Марк Россинович
  • Сторонних разработчиков Opensource, аналоги Taskmanager

Посмотрим какие есть утилиты.

можно скачать целый набор программ, который позволяет заглянуть во внутреннее устройство Windows, посмотреть что и как там сделано, что скрыто для пользовательской части. Эти программы в основном затрагивают мониторинг того, как работает ОС.

В настоящее время существует несколько семейств ( family ) операционных систем Windows , предназначенных для использования на разных типах компьютеров:

  • семейство клиентских операционных систем Windows NT (Windows XP, Windows Vista, Windows 7, Windows 8 и др.);
  • семейство серверных операционных систем Windows NT Server (Windows Server 2003, Windows Server 2008 и др.);
  • семейство мобильных операционных систем Windows Mobile и Windows Phone (Windows Mobile 6, Windows Phone 7 и др.);
  • семейство встроенных операционных систем реального времени Windows CE (Windows CE 7.0 и др.).

Кроме того, в прошлом выпускались 16 разрядные операционные системы ( Windows 1.0, Windows 2.х, Windows 3.х) и семейство операционных систем Windows 9x ( Windows 95, Windows 98, Windows Me).

В данной лекции представлен краткий обзор семейств операционных систем Microsoft Windows ( рис.2.1 ).

История развития семейств операционных систем Windows


увеличить изображение
Рис. 2.1. История развития семейств операционных систем Windows

16 разрядные Windows

Первой Windows была Windows 1.0, выпущенная в ноябре 1985 года. Это была не полноценная операционная система, а надстройка над операционной системой MS-DOS. Windows 1.0 предоставляла пользователю графический оконный интерфейс и возможность запускать несколько приложений одновременно (и то и другое отсутствовало в MS DOS). Сначала эту программу хотели назвать Interface Manager, но затем склонились к названию Windows ("окна"), как более точно отражающему суть работы с новой программой [ 7 ]. Минимальные системные требования к памяти ограничивались 256 КБ.

В Windows 2.0 (декабрь 1987 года) были введены некоторые улучшения графического интерфейса (в частности поддержка перекрывающихся окон) и работы с памятью. Также для большего удобства стали использоваться комбинации клавиш. В мае 1988 года и в марте 1989 года появляются соответственно Windows 2.10 и Windows 2.11, поддерживающие новые на то время процессоры Intel 80286 и Intel 80386 [ 16 ].

В мае 1990 года выходит Windows 3.0 с улучшенной графикой и поддержкой виртуальной памяти. В 1992 1993 гг. появляются версии Windows for Workgroups 3.1 и 3.11, в которых имеется поддержка работы в одноранговых сетях и сетях под управлением сервера. Это были последние версии 16 разрядных Windows.

В августе 1995 года выпускается Windows 95 – 32 разрядная клиентская операционная система, в которой была встроенная поддержка работы с Интернетом (браузер Internet Explorer) и модемными сетями, а также технология Plug-and-Play ("подключи и работай"), позволяющая быстро подключать к компьютеру различные устройства. Впервые появилась кнопка Пуск (Start) и Панель задач (Taskbar). Windows 95 требовала минимум 4 МБ оперативной памяти [ 7 ].

На смену Windows 95 в июне 1998 года приходит Windows 98 с множеством программ для работы с Интернетом (Internet Explorer 4, Outlook Express и др.), поддержкой DVD и USB, первым появлением Панели быстрого запуска программ (Quick Launch bar). Windows 98 была последней операционной системой, основанной на MS DOS [ 7 ].

Последней версией в семействе 9x стала Windows Me (Millennium Edition, сентябрь 2000 года). Эта система была нацелена на домашних пользователей, и, следовательно, имела широкую поддержку работы с мультимедиа (Windows Media Player 7, Windows Movie Maker), Интернетом и домашними сетями.

Другим направлением развития операционных систем Windows в 90 е годы стало семейство NT.

В июле 1993 года была выпущена первая операционная система семейства NT – Windows NT 3.1. Есть разные варианты объяснения названия NT, самый распространенный вариант – это аббревиатура от New Technology ("новая технология").

Разработка системы, основанной на новом ядре (не MS DOS), началась в 1989 году. К новой операционной системе предъявлялись следующие основные требования [ 5 ]:

  • 32 разрядность;
  • поддержка многопроцессорных систем;
  • поддержка вытесняющей многозадачности и виртуальной памяти;
  • высокая производительность;
  • возможность работы в качестве сервера и клиента;
  • переносимость;
  • совместимость с другими версиями Windows и MS DOS, а также частичная совместимость с UNIX;
  • безопасность;
  • надежность;
  • поддержка Unicode.

Windows NT 3.1 соответствовала всем этим требованиям, а на ядре этой системы (конечно, с изменениями) основаны все современные версии Windows, включая Windows 8.

Windows NT 3.1 поддерживала процессоры Intel 80386, Intel 80486, MIPS R4000 и DEC Alpha [ 5 ]. Существовали клиентская и серверная версии системы – Windows NT и Windows NT Advanced Server. Windows NT, помимо других файловых систем, поддерживала специально разработанную в Microsoft файловую систему NTFS (New Technology File System).

В 1994 1996 годах последовательно выходят операционные системы Windows NT 3.5, Windows NT 3.51 и Windows NT 4.0. Целями разработки Windows NT 3.5 были повышение производительности и надежности, а также уменьшение размера системы. В Windows NT 3.51 была включена поддержка процессора IBM PowerPC. Windows NT 4.0 обладала таким же графическим интерфейсом как и система Windows 95 [ 5 ].

Windows 2000, вышедшая в декабре 1999 года, разрабатывалась в качестве системы для профессиональных пользователей, объединяющей два направления – Windows 9x и Windows NT [ 7 ]. Система Windows 2000 включала Active Directory (служба и базу данных ресурсов для управления большими сетями) и поддержку значительного числа Plug-and Play устройств, в том числе беспроводных сетей, USB, IEEE 1394 и др. Существовало 4 версии Windows 2000 – одна клиентская (Professional) и три серверных (Server, Advanced Server и Datacenter Server). Windows 2000 была последней системой, для которой выпускались одновременно клиентские и серверные версии.

Следующим шагом стало объединение обоих направлений клиентских систем: и систем для профессиональных пользователей (Windows 2000 Professional), и систем для домашних пользователей (Windows Me). Результатом такого объединения стала операционная система Windows XP (август 2001 года). Благодаря своей стабильности, скорости и удобному интерфейсу, Windows XP стала (и до сих пор является) одной из самых распространенных операционных систем в мире. Важным шагом явилось появление 64 разрядных версий Windows XP (Windows XP 64-bit Edition). Количество строк кода в Windows XP – 45 миллионов [ 7 ].

В марте 2003 года выходит серверная операционная система Windows Server 2003, имеющая большую производительность и поддерживающая более мощное оборудование, чем Windows 2000. Система имеет 4 основные версии: Web, Standard, Enterprise и Datacenter. Например, версия Datacenter поддерживает 64 процессора и до 64 ГБ оперативной памяти (до 512 ГБ на 64 разрядных платформах).

Клиентская операционная система Windows Vista вышла в ноябре 2006 года. Акцент при разработке этой системы был сделан на безопасность – контроль учетных записей пользователей (User Account Control), шифрование дисков (BitLocker Drive Encryption), антишпионское программное обеспечение (Windows Defender) и др. В Windows Vista был также изменен пользовательский интерфейс, в частности поменяла вид кнопка Пуск (Start).

В феврале 2008 года появилась операционная система Windows Server 2008, основанная на коде Windows Vista – поэтому большая часть нововведений Windows Vista перешла и в Windows Server 2008.

В июле 2009 года выходит Windows 7, отличающаяся расширенной поддержкой ноутбуков и планшетов. Основные особенности Windows 7 – новые приемы работы с окнами, мгновенный поиск информации на компьютере, поддержка сенсорных экранов (Windows Touch), большие возможности по настройке оформления рабочей среды.

В 2012 году Microsoft выпускает новейшие версии операционных систем – клиентскую Windows 8 (октябрь 2012 года) и серверную Windows Server 2012 (сентябрь 2012 года). Windows 8 – операционная система, одинаково рассчитанная как на обычные настольные компьютеры и ноутбуки, так и на планшетные компьютеры, завоевавшие в последнее время существенную долю всего рынка персональных компьютеров (см. лекцию 3 "Windows 8").

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

Первая версия Windows CE 1.0 появилась в 1996 году и была разработана как урезанная версия Windows 95. В дальнейшем команда разработчиков Windows CE сотрудничала с командой Windows 2000, затем Windows CE развивалась как независимая система.

На сентябрь 2012 года последней версией является Windows CE 7.0.

Windows Mobile и Windows Phone

Windows Mobile – операционная система для смартфонов и карманных персональных компьютеров (КПК, Personal Digital Assistant – PDA), основанная на Windows CE.

Первые версии операционных систем этого семейства назывались Pocket PC (2000 год). С 2003 года утвердилось наименование Windows Mobile – были выпущены операционные системы Windows Mobile 2003, Windows Mobile 5, Windows Mobile 6. Последней версией с таким названием стала система Windows Mobile 6.5 (2009 год).

С октября 2010 года Microsoft выпустила новую операционную систему для мобильных устройств – Windows Phone 7, несовместимую с Windows Mobile, хотя и основанную также на Windows CE. В Windows Phone 7 появился новый пользовательский интерфейс, в настоящее время называемый Modern UI.

В октябре 2012 года ожидается выход Windows Phone 8, основанной на ядре Windows NT.

Общая схема архитектуры

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

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

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


Рис. 4.1. Архитектура 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 – диспетчер управления службами) – процесс, отвечающий за выполнение служб – см. ниже;
  • службы (сервисы, services) – приложения, работающие в фоновом режиме и не требующие взаимодействия с пользователем. Службы могут быть как частью операционной системы (например, Windows Audio – служба для работы со звуком, или Print Spooler – диспетчер печати), так и частью пользовательского приложения (например, служба СУБД SQL Server). За службы отвечает системный процесс Services.exe;
  • пользовательские приложения (user applications) ¬– прикладные программы, запускаемые пользователем;
  • подсистемы окружения (environment subsystems) – компоненты, предоставляющие доступ приложениям к некоторому подмножеству системных функций. Windows поддерживает две подсистемы окружения:
  • собственно 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 ) для взаимодействия с модулями режима ядра используют библиотеки 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 позволяет скрыть от всех программных компонентов особенности аппаратной платформы (например, различия между материнскими платами), на которой установлена операционная система .

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