Код ядра windows находится в системном файле

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

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

Системные файлы

Весь код операционной системы располагается в нескольких бинарных файлов, которые мы рассмотрим в этой статье. Все системные файлы находятся в каталоге %systemroot%System32. Это очень важные файлы, а это значит, что без них система не сможет выполнять свои функции.

Следует помнить что удаление или порча любого из указанных файлов может повредить вашу систему!

Список файлов

В самом главном файле “Ntoskrnl.exe” находится код ядра и всех компонентов исполнительной системы. Да, ядро и исполнительная система находятся в одном файле, но логически их разделяют.

Ядро в своей работе использует библиотеку “Kernel32.dll“. Это библиотека ядра. Она предоставляет приложениям многие базовые API Win32, такие как управление памятью, операции ввода-вывода, создание процессов и потоков и функции синхронизации.

Существует библиотека которая расширяет API Windows. Она необходима некоторым приложениям, например MS Office. Эта библиотека называется “Advapi32.dll“.

А вот система HAL, необходимая для связи ядра и драйверов с материнской платой и картами расширения находится в другом файле – Hal.dll“.

Графическая подсистема, которая называется Win32 и также работает в режиме ядра. Эта подсистема отвечает за окошки (оконный менеджер). В общем, все графические приложения обращаются к этой подсистеме для от-рисовки своего графического интерфейса. А код этой графической подсистемы находится в файле “Win32k.sys“.

Вместе с тем, описанная выше графическая подсистема Win32 использует следующие библиотеки для расширения своих функций: “User32.dll” и “Gdi32.dll “.

Код гипервизора Hyper-V может находиться в разных файлах. Это зависит от того, какой процессор используется, на Intel – это файл “Hvix64.exe“, а на AMD – это файл “Hvax64.exe“.

Драйверы лежат в подкаталоге “drivers” и имеют расширение .sys. Про драйверы я писал в предыдущей статье.

В системе существует вспомогательная библиотека “Ntdll.dll“. В ней содержатся так называемые функции-заглушки. Они предоставляет интерфейс к службам исполняющей системы Windows, которые могут быть вызваны из пользовательского режима. А также этот файл содержит множество вспомогательных функций.


Вернуться к оглавлению

Сводка

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

Имя статьи

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

Описание

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

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

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

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

Объекты ядра.

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

За пределами ядра исполняющая система представляет потоки и другие ресурсы совместного использования в виде объектов. Эти объекты требуют некоторых издержек, например, на дескрипторы для управления ими, на проверки безопасности для их защиты и на ресурсные квоты, выделяемые при их создании.

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

Один набор объектов ядра, называемых «управляющими объектами», определяет семантику управления различными функциями операционной системы.

В этот набор включены объекты асинхронного вызова процедур — APC, отложенного вызова процедур — deferred procedure call (DPC), и несколько объектов, используемых диспетчером ввода-вывода, например, объект прерывания.

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

Область ядра, относящаяся к управлению процессором, и блок управления (KPCR и KPRCB).

Для хранения специфических для процессора данных ядром используется структура данных, называемая областью, относящейся к управлению процессором, или KPCR (KernelProcessorControlRegion). KPCR содержит основную информацию, такую как процессорная таблица диспетчеризации прерываний (interrupt dispatch table, IDT), сегмент состояния задачи (task-state segment, TSS) и таблица глобальных дескрипторов (globaldescriptortable, GDT). Она также включает состояние контроллера прерываний, которое используется вместе с другими модулями, такими как ACPI-драйвер и HAL.

Для обеспечения простого доступа к KPCR ядро хранит указатель на эту область в регистре fs на 32-разрядной системе Windows и в регистре gs на Windows-системе x64. На системах IA64 KPCR всегда находится по адресу 0xe0000000ffff0000.

KPCR также содержит вложенную структуру данных, которая называется блоком управления процессором (kernelprocessorcontrolblock, KPRCB). В отличие от области KPCR, которая документирована для драйверов сторонних производителей и для других внутренних компонентов ядра Windows, KPRCB является закрытой структурой, используемой только кодом ядра, который находится в файле Ntoskrnl.exe.

В этом блоке содержится:

  • информация о планировании (такая как текущий, следующий и приостановленный потоки, предназначенные для выполнения на процессоре);
  • предназначенная для процессора база данных диспетчера (включающая готовые очереди для каждого приоритетного уровня);
  • DPC-очередь;
  • информация о производителе центрального процессора и идентификационная информация (модель, степпинг, скорость, биты особенностей);
  • информация о топологии центрального процессора и о технологии доступа к неоднородной памяти — NUMA (информация об узле, о количестве логических процессоров в каждом ядре и т. д.);
  • информация о размерах кэш-памяти;
  • информация об учете времени (такая как время DPC и обработки прерывания) и многое другое.

В KPRCB также содержится вся статистика процессора, такая как статистика ввода-вывода, статистика диспетчера кэша, статистика DPC и статистика диспетчера памяти. И наконец, KPRCB иногда используется для хранения структур выравнивания границ кэша для каждого процессора, необходимых для оптимизации доступа к памяти, особенно на NUMA-системах. Например, система невыгружаемого и выгружаемого пула со стороны выглядит как списки, хранящиеся в KPRCB.

Эксперимент: просмотр KPCR и KPRCB.

Содержимое KPCR и KPRCB можно просмотреть, используя команды отладки ядра !pcr и !prcb. Без пометок отладчик по умолчанию покажет информацию для центрального процессора 0; но вы можете указать центральный процессор, добавив после команды его номер (например, !pcr 2).

В следующем примере показано, как выглядит вывод команд !pcr и !prcb.

Если в системе имелись задержанные DPC-вызовы, эта информация также будет отображена на экране.

lkd> !pcr

KPCR for Processor 0 at 81d09800:

Major 1 Minor 1

NtTib.ExceptionList: 9b31ca3c

NtTib.StackBase: 00000000

NtTib.StackLimit: 00000000

NtTib.SubSystemTib: 80150000

NtTib.Version: 1c47209e

NtTib.UserPointer: 00000001

NtTib.SelfTib: 7ffde000

SelfPcr: 81d09800

Prcb: 81d09920

Irql: 00000002

IRR: 00000000

IDR: ffffffff

InterruptMode: 00000000

IDT: 82fb8400

GDT: 82fb8000

TSS: 80150000

CurrentThread: 86d317e8

NextThread: 00000000

IdleThread: 81d0d640

DpcQueue:

lkd> !prcb

PRCB for Processor 0 at 81d09920:

Current IRQL – 0

Threads— Current 86d317e8 Next 00000000 Idle 81d0d640

Number 0 SetMember 1

Interrupt Count — 294ccce0

Times — Dpc 0002a87f Interrupt 00010b87

Kernel 026270a1 User 00140e5e

Для непосредственного вывода дампа структур данных _KPCR и _KPRCB можно воспользоваться командой dt, поскольку обе команды отладки дают вам адреса структур (которые для наглядности выделены в предыдущем выводе жирным шрифтом). Например, если нужно определить скорость процессора, можно с помощью следующей команды посмотреть на поле MHz:

lkd> dt nt!_KPRCB 81d09920 MHz

+0x3c4 MHz : 0xbb4

lkd> ? bb4

Evaluate expression: 2996 = 00000bb4

На данной машине процессор был запущен на частоте около 3 ГГц.

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

1.
Уровень абстрагирования от оборудования

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

Рис.
2.20. Упрощенная структура Windows XP

2.
Ядро операционной системы
.
Ядро содержит наиболее часто вызываемые
низкоуровневые функции операционной
системы: планирование и распределение
ресурсов между процессами, их переключение
и синхронизацию. В обязанности ядра
входит также управление прерываниями
и обработка ошибочных ситуаций при
функционировании операционной системы.
Код ядра Windows XP не разделяется на потоки,
а находится только в оперативной памяти
и не может быть выгружен на диск. Код
ядра Windows XP находится в системном файле
Ntoskrnl. exe.

3.
Драйверы устройств.

Драйверы представляют собой подпрограммы,
транслирующие вызовы, поступившие от
пользовательских программ в запросы
обработки данных для конкретных
устройств. Значительное число драйверов
входит в состав Windows XP (они располагаются
в подкаталоге Isystem32l drivers системного
каталога и имеют тип файла *.sys, например,
драйвер дисковой подсистемы находится
в файле disk.sys), а для нестандартных
периферийных устройств драйверы
находятся в комплектах поставки.

4.
Исполняющая подсистема (
NT
Executive). Модуль NT Executive состоит из микроядра
и подсистем диспетчеризации управления
программами с доступом к виртуальной
памяти, окнам и графической подсистеме.
Виртуальная память предоставляет
пользовательским программам виртуальные
адреса адресного пространства процессов
и соответствующие физические страницы
оперативной памяти компьютера. Графическая
подсистема предназначена для создания
оконного интерфейса, рисования элементов
управления, расположенных в окнах. К
исполняющей подсистеме относятся
системные файлы Ntkrnlpa.exe, Kernel32.dll,
Advapi32.dll, User32.dll, Gdi32.dll.

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

Недоступные
в пользовательском режиме операции и
приложения обращаются к системным
вызовам ядра операционной системы Win32
API. В состав API входит более 250 функций,
обращение к которым осуществляется при
помощи системных вызовов, основанных
на подпрограммах ядра операционной
системы. Все вызовы Win32 API обслуживаются
как системными службами NT, так и модулем
NT Executive – исполняющей системы Windows XP.
Модуль NT Executive представляет собой
несколько программных потоков, которые
выполняются в режиме ядра. Код практически
всех подсистем этого модуля находится
в файле ntoskrnl.exe (кроме подсистемы Win32,
код которой расположен в файле win32k.sys)
и уровне абстрагирования от оборудования
HAL, который содержится в файле hal.dll. В
модуле NT Executive сосредоточены все самые
важные части операционной системы.

Микроядро
отвечает за выделение памяти для
приложений и распределение процессорного
времени, т. е. за реализацию многозадачности.
Для этого в состав микроядра входит
планировщик потоков (threads scheduler), который
назначает каждому из потоков один из
32 уровней приоритета. Уровень 0
зарезервирован для системы. Уровни от
1-го до 15-го назначаются исполняемым
программам, а уровни от 16-го до 31-го могут
назначаться только администраторами.
Планировщик делит все процессорное
время на кванты фиксированного размера.
При этом каждый программный поток
выполняется только в течение отведенного
ему времени, и если по окончании кванта
он не освобождает процессор, планировщик
в принудительном порядке приостанавливает
этот поток и меняет программное окружение
процесса, настраивая его на выполнение
другого потока, обладающего тем же
приоритетом. Микроядро также осуществляет
всю работу, связанную с обработкой
программных и аппаратных прерываний.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #

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

Старт системы

Полностью компьютер выключен когда он отключен от питания и конденсаторы на материнской плате разрядились. До эры смартфонов мобильные телефоны часто глючили и если перезагрузка не лечила проблему, то приходилось доставать батарею и ждать 10 секунд, потому что сбрасывалось программное состояние ОС, в то время как чипы на материнской плате и контроллеры устройств оставались активными сохраняя состояние, драйвера ОС к ним просто реконнектились. 10 секунд — время на разрядку конденсаторов, состояние чипов сбрасывается только при полном отключении.
Если же ПК подключен к розетке или батарее, то он находится в режиме Stand-By, это значит что по шине питания подаётся маленькое напряжения (5В) от которого запитываются некоторые чипы на материнке. Как минимум это системный контроллер, по сути это мини-компьютер запускающий большой компьютер. Получив уведомление о нажатии кнопки Power он просит блок питания/батарею подать больше напряжения и после инициализирует весь чип-сет, в том числе и процессор. Инициализация включает в себя перекачку кода и данных прошивки материнки (BIOS/UEFI) в оперативную память и настройку CPU на её исполнение.
Думать что кнопка Power это рубильник который подаёт электричество на CPU и тот начинает исполнять с заранее известного адреса прошивку BIOS неправильно. Возможно старые компьютеры так и работали. Кнопка включения находится на своей плате, вместе со светодиодами состояний и к материнке она подключается через специальный разъём. На картинке ниже видны контакты для кнопки Power, Reset, а также светодиодов с состоянием Power и чтения жёсткого диска. Нажатие кнопки включения переводится в сигнал на контакты материнки, откуда он достигает системный контроллер.

Контакты на материнке для подключения кнопки включения, светодиодов состояния Power, жёсткого диска и динамиков.

Плата ноутбука с кнопкой включения и светодиодом состояния

Cистемный контроллер обладает огромными полномочиями – включать и выключать компьютер, исполнять код в режиме ядра. Помимо него могут быть и другие чипы со сравнимыми возможностями, такие как Intel Management Engine или AMD Secure Technology (часть CPU), которые так же работают когда компьютер «выключен». Чип с Intel ME имеет в себе x86 CPU с операционной системой MINIX 3. Что он может делать:

  1. Включать и выключать компьютер, т.е. выполнять программы имея доступ ко всей вычислительной мощности, периферии машины и сети.
  2. Обходить ограничения файервола.
  3. Видеть все данные в CPU и RAM, что даёт доступ к запароленным файлам.
  4. Красть ключи шифрования и получать доступ к паролям
  5. Логировать нажатия клавиш и движения мыши
  6. Видеть что отображается на экране
  7. Вредоносный код в Intel ME не может быть детектирован антивирусом, потому как на такой низкий уровень он добраться не может
  8. И конечно же скрытно отправлять данные по сети используя свой стек для работы с сетью.

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

Прикладная иллюстрация как блок питания получает сигнал от материнки на включение. Если вы задумаете установить мощную видеокарту (Nvidia 2070 S) на офисный ПК, то просто вставить её недостаточно, потому как она требует питание в 600W, в то время как такой ПК имеет блок на ~500W. Первое что придёт в голову – купить новый блок питания на 650W с отдельной линией для видеокарты. Но и здесь будут разочарования, потому как разъёмы материнки будут не совпадать с разъёмами БП, а если его отдельно воткнуть в розетку и подключить к видюхе тоже ничего не будет – в блоке питания вентилятор не крутится и изображения нет. Так происходит, потому что БП должен получить сигнал от материнки на полное включение. Очевидное решение – новая материнка с совместимыми разъёмами, однако она стоит ~$300. Есть решение проще, хоть оно и вызывает опасения пожаробезопасности. Берём скрепку, разгибаем и вставляем в зелёный (PS_ON) и один из чёрных пинов (COM). Теперь всё должно работать.

Поиск загрузчика ОС

Есть два вида прошивки материнки – BIOS (Basic Input Output System) на старых машинах и UEFI (Unified Extensible Firmware Interface) на новых. Windows 10 поддерживает обе и абстрагирует различия между ними. UEFI правильней называть ОС чем прошивкой, потому как он предлагает больше возможностей, к примеру богатый графический интерфейс вместо текстового, наличие мышки, больший объём доступной памяти, улучшенная модель безопасности и валидации файлов ОС, взаимодействие с железом через API, вместо прерываний как в BIOS.

Пример экрана монитора BIOS.

Программа BIOS хранится на отдельном чипе, подключенном к Южному мосту. Этот чип можно достать и перепрошить новой программой, по факту это просто носитель памяти, а не самостоятельный микрокомпьютер.

Настройки BIOS (системное время, например), хранятся на другом чипе который как правило находится возле круглой батарейки, которая на самом деле является литиевым аккумулятором, подзаряжающимся во время работы ПК. Называется он CMOS, что означает Complementary Metal Oxide Semiconductor, а по-русски просто — КМОП, что есть комплементарная структура металл-оксид-полупроводник.

Первым делом программа BIOS выполняет проверку подсистем, эта процедура называется POST – Power On Self Test. Тест может быть сокращённый либо полный, это задаётся в настройках BIOS. Процитирую Википедию, что в себя включают эти тесты:
Сокращённый тест включает:

  1. Проверку целостности программ BIOS в ПЗУ, используя контрольную сумму.
  2. Обнаружение и инициализацию основных контроллеров, системных шин и подключённых устройств (графического адаптера, контроллеров дисководов и т. п.), а также выполнение программ, входящих в BIOS устройств и обеспечивающих их самоинициализацию.
  3. Определение размера оперативной памяти и тестирования первого сегмента (64 килобайт).

Полный регламент работы POST:

  1. Проверка всех регистров процессора;
  2. Проверка контрольной суммы ПЗУ;
  3. Проверка системного таймера и порта звуковой сигнализации (для IBM PC — ИМС i8253 или аналог);
  4. Тест контроллера прямого доступа к памяти;
  5. Тест регенератора оперативной памяти;
  6. Тест нижней области ОЗУ для проецирования резидентных программ в BIOS;
  7. Загрузка резидентных программ;
  8. Тест стандартного графического адаптера (VGA или PCI-E);
  9. Тест оперативной памяти;
  10. Тест основных устройств ввода (НЕ манипуляторов);
  11. Тест CMOS
  12. Тест основных портов LPT/COM;
  13. Тест накопителей на гибких магнитных дисках (НГМД);
  14. Тест накопителей на жёстких магнитных дисках (НЖМД);
  15. Самодиагностика функциональных подсистем BIOS;
  16. Передача управления загрузчику.

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

Если всё прошло успешно, BIOS начинает процесс поиска загрузчика ОС. Для этого он начинает просматривать все подключенные к материнской плате жёсткие диски. Данные на физических дисках адресуются в единицах называемых сектор, обычно он 512 байт, однако современный стандарт – 4096 байт. Установщик Windows в самый первый сектор на диске записывает специальный программный код и данные о разделах. Этот сектор называется Master Boot Record. Диск разбивается на разделы (partitions), отформатированный своей файловой системой. Максимум 4 раздела, каждый из который может быть расширенным (extended partition), такой можно рекурсивно делить на 4 раздела и теоретически их число не ограничено. Как только BIOS находит Master Boot Record он считывает оттуда код и передаёт ему управление. Этот код поочередно просматривает данные о разделах и находит тот который помечен как активный, в нём находится код загрузчика Windows (Это не раздел с C:WindowsSystem32!), этот раздел называется system partition. Как правило он занимает 100Мб и скрыт от пользователя. В первом секторе этого раздела хранится загрузочный код, которому передаётся управление. Это volume boot sector, код в нём ищет файл Bootmgr, с которого и начинается процесс загрузки Windows. Файл Bootmgr создан через соединение в один файлов Startup.com и Bootmgr.exe.

Процессор начинает свою работу в режиме который называется «Реальный». Это режим совместимости, в нём CPU работает так же как и старые 16-bit процессоры, не имевшие поддержки виртуальной памяти и работавшие напрямую с физической памятью через 20-bit шину адресов, позволявшую адресовать 1Мб памяти. Простые MS-DOS программы выполнялись в этом режиме и имели расширение .COM. Первое что делает Startup.com (Bootmgr) – переключает процессор в режим «Защищённый», где под защитой понимается защита процессов друг от друга. В этом режиме поддерживается виртуальная память и 32х битные адреса, которыми можно адресовать 4Гб оперативной памяти. Следующим этапом Bootmgr заполняет таблицу виртуальных адресов на первые 16Мб RAM и включает трансляцию с виртуальных адресов в физические. В этом режиме и работает Windows. Поскольку на этом этапе подсистемы ОС ещё не созданы, Bootmgr имеет свою простую и неполную реализацию файловой системы NTFS, благодаря которой он находит BCD файл (Boot Configuration Data), в котором хранятся настройки параметров загрузки ОС. Вы можете редактировать его через утилиту BcdEdit.exe. В этих настройках BCD может быть указано, что Windows была в состоянии гибернации, и тогда Bootmgr запустит программу WinResume.exe, которая считывает состояние из файла Hyberfil.sys в память и перезапускает драйвера. Если BCD говорит, что есть несколько ОС, то Bootmgr выведет на экран их список и попросит пользователя выбрать. Если ОС одна, то Bootmgr запускает WinLoad.exe, этот процесс и выполняет основную работу по инициализации Windows:

  1. Выбирает соотвествующую версию ядра Windows. Можете думать о нём как о Windows10.exe, хотя на самом деле он называется NtOsKrnl.exe. Какие есть версии? Согласно википедии:
    • ntoskrnl.exe — однопроцессорное ядро Windows. без поддержки режима PAE
    • ntkrnlmp.exe (англ. NT Kernel, Multi-Processor version) — многопроцессорное ядро Windows. без поддержки режима PAE
    • ntkrnlpa.exe — однопроцессорное ядро Windows с поддержкой режима PAE.
    • ntkrpamp.exe — многопроцессорное ядро Windows с поддержкой режима PAE.

  2. Загружает HAL.dll (Hardware Abstraction Layer), который абстрагирует особенности материнки и CPU.
  3. Загружает файл шрифтов vgaoem.fon
  4. Загружает файлы в которых содержится инфомрация о представлениях даты времени, форматов чисел и пр. Эта функциональность называется National Language System.
  5. Загружает в память реестр SYSTEM, в нём содержится информация о драйверах которые надо загрузить. Информация о всех драйверах находится в HKLMSYSTEMCurrentControlSetServices. Драйвера которые надо загрузить имеют ключ start = SERVICE_BOOT_START (0). Об устройстве реестра мы поговорим в другой статье.
  6. Загружает драйвер файловой системы для раздела на котором располагаются файлы драйверов.
  7. Загружает драйвера в память, но пока не инициализирует их из-за круговых зависимостей.
  8. Подготавливает регистры CPU для выполнения ядра Windows выбранного на первом шаге – NtOsKrnl.exe.

Во время загрузки драйверов WinLoad проверяет их цифровые подписи и если они не совпадают, то будет синий (BSOD) или зелёный (GSOD, для insider preview сборок) «экран смерти».

Запуск на UEFI

Пример экрана загрузки UEFI

BIOS существует больше 30 лет и в попытках исправить его недостатки компания Intel в 1998 году создала стандарт Intel Boot Initiative, позже переименованный в EFI и в 2005 году пожертвованный организации EFI Forum. Недостатки BIOS:
• Работает только в 16-битном режиме
• Может адресовать только 1Mb оперативной памяти
• Часто имеет проблемы совместимости
• MBR ограничен только четырьмя главными разделами диска
• Диск с ОС не может быть больше чем 2.2Tb.
• Имеет очень ограниченные возможности для валидации загрузчика ОС.
На смену BIOS пришёл UEFI, по сути это миниатюрная ОС которая может работать и в 32-bit и в 64-bit. Для совместимости есть опция Compatibility Support Module, которая включается в настройках и эмулирует работу BIOS.

В UEFI загрузка происходит в родной для процессора битности – 32 или 64, есть доступ ко всей памяти, поддерживается виртуальная память, включен Secure Boot и есть возможность запустить antimalware до начала загрузки ОС. Порядок загрузки ОС в UEFI:

  1. Инициализация и запуск Firmware, запуск чип-сета.
  2. POST тест, аналогично BIOS
  3. Загрузка EFI-драйверов и поиск диска подпадающего под требования EFI для загрузочного диска
  4. Поиск папки с именем EFI. Спецификация UEFI требует чтобы был раздел для EFI System Partition, отформатированный под файловую систему FAT, размером 100Мб – 1Гб или не более 1% от размера диска. Каждая установленная Windows имеет свою директорию на этом разделе – EFIMicrosoft.
  5. Читает из настроек UEFI сохранённых в NVRAM (энергонезависимая память) путь к файлу загрузчика.
  6. Находит и запускает EFI/Microsoft/Boot/BootMgrFw.efi.
  7. BootMgrFw.efi находит раздел реестра BCD, который хранится в отдельном файле с именем BCD. Из него он находит WinLoad.efi, который расположен в C:WindowsSystem32winload.efi.

Чтобы посмотреть содержимое раздела EFI System Partition откройте консоль с правами админа (WinKey+X => Windows PowerShell (Admin)) и выполните команды mountvol Z: /s, Z:, dir. CD — меняет директорию.
Главное отличие компонентов BootMgr и WinLoad для UEFI от своих копий для BIOS тем что они используют EFI API, вместо прерываний BIOS и форматы загрузочных разделов MBR BIOS и EFI System Partition сильно отличаются.

Инициализация ядра

Напоминаю, что мы рассматриваем загрузку ПК в контексте работы клавиатуры, поэтому не стоит заострять внимание на всех этапах. Надо понять где в этом процессе находится клавиатура, важные для понимания этапы выделены.
На предыдущем этапе был запущен компонент WinLoad.exe/WinLoad.efi, который запускает NtOsKrnl.exe указав ему параметры загрузки в глобальной переменной nt!KeLoaderBlock (память режима ядра доступна всем процессам), которые WinLoad собрал во время своей работы. Они включают:

  1. Пути к System (загрузчик Windows) и Boot (C:WindowsSystem32) директориям.
  2. Указатель на таблицы виртуальной памяти которые создал WinLoad
  3. Дерево с описанием подключенного hardware, оно используется для создания HKLMHARDWARE ветки реестра.
  4. Копия загруженного реестра HKLMSystem
  5. Указатель на список загруженных (но не инициализированных) драйверов участвующих в старте Windows.
  6. Прочая информация необходимая для загрузки.

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

  • Первая фаза инициализации ядра:
    1. Слой Executive инициализирует свои объекты состояний – глобальные объекты, списки, блокировки. Производится проверка Windows SKU (Stock Keeping Unit), примеры Windows 10 SKU — Home, Pro, Mobile, Enterprise, Education.
    2. Если включен Driver Verifier, то он инициализируется.
    3. Менеджер памяти создаёт структуры данных, необходимые для работы внутренних API для работы с памятью (memory services), резервирует память для внутреннего пользования ядром.
    4. Если подключен отладчик ядра (kernel debugger) ему отправляется уведомление загрузить символы для драйверов загружаемых во время старта системы.
    5. Инициализируется информация о версии билда Windows.
    6. Старт Object Manager – позволяет регистрировать именованные объекты к которым могут получать доступ по имени другие компоненты. Яркий пример – мьютекс по которому приложение позволяет запустить единственный экземпляр. Здесь же создаётся храниться handle table, по которой устанавливается соответствие к примеру между HWND и объектом описывающим окно.
    7. Старт Security Reference Monitor подготавливает всё необходимое для создания первого аккаунта.
    8. Process Manager подготавливает все списки и глобальные объекты для создания процессов и потоков. Создаются процесс Idle и System (в нём исполняется “Windows10.exe” он же NtOsKrnl.exe), они пока не исполняются, потому как прерывания выключены.
    9. Инициализация User-Mode Debugging Framework.
    10. Первая фаза инициализации Plug and Play Manager. PnP – это стандарт который реализовывается на уровне производителей периферии, материнских плат и ОС. Он позволяет получать расширенную информацию о подключенных устройствах и подключать их без перезагрузки ПК.

  • Вторая фаза инициализации ядра. Она содержит 51 шаг, поэтому я пропущу многие из них:
    1. По завершению первой фазы главный поток процесса System (NtOsKrnl.exe) уже начал исполнение. В нём производится вторая фаза инициализации. Поток получает самый высокий приоритет – 31.
    2. HAL настраивает таблицу прерываний и включает прерывания.
    3. Показывается Windows Startup Screen, которая по умолчанию представляет из себя чёрный экран с progress bar.
    4. Executive слой инициализирует инфраструктуру для таких объектов синхронизации как Semaphore, Mutex, Event, Timer.
    5. Объекты для User-Mode Debugger проинициализированы.
    6. Создана symbolic link SystemRoot.
    7. NtDll.dll отображена в память. Она отображается во все процессы и содержит Windows APIs.
    8. Инициализирован драйвер файловой системы.
    9. Подсистема межпроцессного общения между компонентами Windows ALPC проинициализирована. Можете думать о ней как о named pipes или Windows Communication Foundation для межпроцессного общения.
    10. Начинается инициализация I/O Manager, который создаёт необходимые структуры данных для инициализации и хранения драйверов подключенной к компьютеру периферии. Этот процесс очень сложный.
      Здесь же инициализируются компоненты Windows Management Instrumentation и Event Tracing for Windows (на него полагается Windows Performance Analyzer). После этого шага все драйвера проинициализированы.
    11. Запускается процесс SMSS.exe (Session Manager Sub System). Он отвечает за создание режима пользователя, в котором будет создана визуальная часть Windows.

Запуск подсистем – SMSS, CSRSS, WinInit

SMSS.exe отличается от пользовательских процессов, это нативный процесс и это даёт ему дополнительные полномочия. SMSS.exe работает с ядром в обход Windows API, он использует то что называется Native API. Windows API – обёртка вокруг Native API. SMSS.exe первым делом запускает подсистему Windows (CSRSS.exe – Client Server Runtime Sub System) и заканчивает инициализацию реестра.

Процесс и потоки SMSS.exe помечены как критические, это значит что если они неожиданно завершаться, к примеру из-за ошибки, это приведёт к падению системы. Для общения с подсистемами, к примеру вызову API создающему новую сессию, SMSS создаёт ALPC-порт с именем SmApiPort. Загружаются из реестра переменные среды окружения, запускаются программы такие как Check Disk (autochk.exe, эти программы записаны в реестре HKLMSYSTEMCurrentControlSetControlSession ManagerBootExecute). SMSS.exe запускается для каждой пользовательской сессии. Глобальные переменные (очередь сообщений например) у каждой сессии своя за счёт механизма виртуальной памяти. В Windows есть контексты потока, процесса и сессии. Каждый SMSS.exe запускает свой экземпляр подсистемы, на данный момент это только CSRSS.exe (Windows), в прошлом поддерживались операционные системы OS/2 (os2ss.exe) и POSIX (psxss.exe), но эта идея была неудачной. Самый первый SMSS.exe засыпает в ожидании процесса WinInit.exe. Остальные экземпляры вместо этого создают процесс WinLogon который показывает UI для входа.

WinInit.exe инициализирует подсистемы для создания графической оболочки – Windows Station и десктопы, это не тот рабочий стол который вы видите, это иная концепция Windows. Далее он запускает процессы:

  1. Services.exe Services Control Manager (SCM) запускает сервисы и драйвера помеченные как AutoStart. Сервисы запускаются в процессах svchost.exe. Есть утилита tlist.exe, которая запущенная с параметром tlist.exe -s напечатает в консоли имена сервисов в каждом из svchost.exe.
  2. LSASS.exe – Local System Authority.
  3. LSM.exe – Local Session Manager.

WinLogon.exe – загружает провайдеры аутентификации (credential providers), которые могут быть password, Smartcard, PIN, Hello Face. Он порождает процесс LogonUI.exe который и показывает пользователю интерфейс для аутентификации, а после валидирует введённые данные (логин и пароль, PIN).

Если всё прошло успешно, то WinLogon запускает процесс указанный в ключе реестра HKLMSOFTWAREMicrosoftWindows NTCurrentVersionWinLogonUserinit. По умолчанию это процесс UserInit.exe, который:

  1. Запускает скрипты указанные в реестрах:
    • HKCUSoftwarePoliciesMicrosoftWindowsSystemScripts
    • HKLMSOFTWAREPoliciesMicrosoftWindowsSystemScripts
  2. Если групповая политика безопасности определяет User Profile Quota, запускает %SystemRoot%System32Proquota.exe
  3. Запускает оболочку Windows, по умолчанию это Explorer.exe. Этот параметр конфигурируется через реестр:
    • HKCUSoftwareMicrosoftWindows NTCurrentVersionWinlogonShell
    • HKLMSOFTWAREMicrosoftWindows NTCurrentVersionWinlogonShell

WinLogon уведомляет Network Provider о залогинившемся пользователе, на что тот восстанавливает и подключает системные диски и принтеры сохранённые в реестре. Network Provider представляет из себя файл mpr.dll из системной папки, который хостится в процессе svchost.exe, т.е. сервис Windows.

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

Где здесь клавиатура?

Во время запуска ядро Windows считывает из реестра информацию о контроллере системной шины, как правило это шина PCI (реже MSI), к ней подключены контроллеры портов ввода-вывода, в том числе и USB, PS/2. Информация о нём записывается во время установки Windows. Система загружает для него драйвер и рекурсивно обходит все порты так же загружая для каждого из них свой драйвер. Драйвера могут комбинироваться в узлы (driver node), к примеру драйвер клавиатуры, будет соединён с драйвером порта PS2. А вот порт USB сложнее — сначала драйвер порта, потом драйвер для работы с протоколом HID и только потом клавиатура.

Каждый порт контроллируется своим чипом, который мониторит подключение, принимает/отправляет сигналы между CPU и устройством. Если чип-сет Южный мост не встроен в CPU, как это часто делают в ноутбуках, а существует отдельным чипом на материнке, то правильней говорить: сигнал между Южным мостом и контроллером порта. Чип контроллирующий порт имеет выделенную линию с контроллером прерываний (PIC или APIC), по которой он может попросить обратить на себя внимание CPU, к примеру считать данные от клавиатуры (порт PS/2, с USB другая история). Поскольку ОС загрузила для порта драйвер, она может отдавать ему команды, читать и отправлять данные. В нашем примере был загружен драйвер из C:WindowsSystem32i8042prt.sys. Давайте вспомним предыдущую статью. В старых компьютерах с PIC на чипе Intel 8259 было 15 линий прерываний, где клавиатура была подключена к ножке IRQ1, таймер IRQ0, а мышка к IRQ12, который на самом деле был пятой ножкой второго чипа 8259, который мультиплексировал свои прерывания через ножку IRQ2 первого контроллера. В современных PIC могут быть 255 контактов для сигналов прерываний. Во время загрузки ОС программирует APIC/PIC возвращать определённое число когда скажем пришло прерывание от порта клавиатуры или USB и по этому номеру CPU находит в таблице векторов прерываний функцию которую надо выполнить. Номер прерываний определяют HAL и Plug’n’Play Manager. Контроллер прерываний ищет сигнал на своих ножках в определённом порядке, к примеру в бесконечном цикле проверяет напряжение на ножках от 1 до MAX_PIN. Этот порядок определяет приоритет, к примеру клавиатура будет замечена раньше мышки, а таймер раньше клавиатуры. Чтобы не зависеть от особенностей работы контроллеров прерываний Windows абстрагирует концепцию IRQ (Interrupt Request) в IRQL (Interrupt Request Level). Будь у контроллера прерываний хоть 15 хоть 255 линий они все будут отображены на 32 IRQL для x86 и 15 IRQL для x64 и IA64.

Что означают приоритеты IRQL:

  1. High – когда происходит краш системы, обычно это вызов функции KeBugCheckEx.
  2. Power Fail – не используется. Изначально был придуман для Windows NT.
  3. Interprocessor Interrupt – нужен отправить запрос другому CPU на мультипроцессорной системе выполнить действие, например обновить TLB cache, system shutdown, system crash (BSOD).
  4. Clock – нужен чтобы обновлять системные часы, а так же вести статистику сколько времени потоки проводят в режиме пользователя и ядра.
  5. Profile – используется для real-time clock (local APIC-timer) когда механизм kernel-profiling включен.
  6. Device 1 … Device N – прерывания от устройств I/O. Во время прерывания данные от клавиатуры, мыши и других устройств считываются в отдельные буфера и сохраняются в объектах типа DPC (Deferred Procedure Call), чтобы обработать их позже и дать возможность устройствам переслать данные. После приоритет снижается до Dispatch DPC
  7. Dispatch DPC — как только данные от устройств получены можно начинать их обрабатывать.
  8. APC — Asynchronous Procedure Call. Через этот механизм вы можете исполнить код когда поток будет спать вызвав WaitForSingleObject, Sleep и другие.
  9. Passive/Low — здесь исполняются все приложения в User Mode.

Если вы всегда программировали в режиме пользователя, то никогда не слышали про IRQL, потому что все пользовательские программы выполняеются с приоритетом Passive/Low (0). Как только происходит событие с большим уровнем приоритета (событие от клавиатуры, таймер планировщика потоков), процессор сохраняет состояние прерванного потока, которое представляет из себя значения регистров CPU, и вызывает диспетчер прерываний (interrupt dispatcher, просто функция), который повышает приоритет IRQL через API KeRaiseIrql в HAL и вызывает непосредственно сам код обработчика (interrupt’s service routine). После этого IRQL CPU понижается до прежнего уровня через функцию KeLowerIrql и прерванный поток начинает обработку с того же места где его прервали. На этом механизме основан планировщик потоков. Он устанавливает таймер, который с определённым интервалом (квант времени) генерирует прерывание с приоритетом DPC/Dispatch (2) и в своей interrupt’s service routine по определённому алгоритму назначает новый поток на исполнение.

Механизм IRQL реализовывается на уровне софта в Hardware Abstraction Layer (HAL.dll), а не железа. В Windows системах есть драйвер шины (bus driver), который определяет наличие устройств подключенных к шинам – PCI, USB и др. и номера прерываний которые могут быть назначены каждому устройству. Драйвер шины сообщает эту информацию Plug and play manager, который уже решает какие номера прерываний назначить каждому устройству. Далее арбитр прерываний внутри PnP Mgr (PnP interrupt arbiter) устанавливает связи между IRQ и IRQL.

Когда приходит прерывание от клавиатуры, любой исполняемый в данный момент поток (это может быть ваша программа) назначается на его обработку. Interrupt dispatcher повышает приоритет IRQL CPU до одного из уровней Device1-DeviceN. После этого менеджер виртуальной памяти не сможет найти страницу если она не загружена в RAM (не сможет обработать Page Fault), планировщик потоков не сможет прервать выполнение, потому что они все работают с меньшим уровнем IRQL. Главная задача драйвера клавиатуры в этот момент считать полученные данные и сохранить их для дальнейшей обработки. Данные записываются в объект типа _DPC (Deferred Procedure Call), который сохраняется в список DPC потока (что-то вроде std::list<DPC>, в ядре ОС вместо массивов используются связанные списки). Как только прерывания от всех внешних устройств обработаны, IRQL потока понижается до уровня DPC в котором и производится обработка отложенных процедур (DPC). В коде обработчика DPC для клавиатуры вызывается функция из драйвера клавиатуры Kbdclass.sys:

VOID KeyboardClassServiceCallback(
  _In_    PDEVICE_OBJECT       DeviceObject,
  _In_    PKEYBOARD_INPUT_DATA InputDataStart,
  _In_    PKEYBOARD_INPUT_DATA InputDataEnd,
  _Inout_ PULONG               InputDataConsumed
);

Так вот, драйвер клавиатуры (kbdclass.sys) получает данные от порта (USB, PS2) через прерывание и записывает их через WriteFile, компонент внутри ядра Windows просыпается, считывает их используя API ReadFile и добавляет в очередь сообщений с клавиатуры. API для работы с файлом могут использоваться для чтения данных с драйверов. С этого момента начинается обработка данных стеком ввода Windows, об этом в следующей статье.

Если у вас есть ПК с PS2 портом и вы умеете пользоваться WinDbg в режиме ядра, то можете легко найти обработчик прерываний клавиатуры напечатав команду !idt, которая выведет на экран всю таблицу векторов прерываний. Прерывание вклинивается в ход выполнения программы, слово вектор здесь подразумевает направление, направление исполнения программы. WinDbg был сделан специально для отладки Windows, самая последняя версия называется WinDbgX. Он имеет текстовый интерфейс, который отпугивает людей привыкших к Visual Studio, однако предоставляет гораздо больше возможностей, в частности исполнение скриптов. Прерывание фиолетового порта PS2 выделено красным. Функция которая его обрабатывает называется I8042KeyboardInterruptService, которая находится в файле i8042prt.sys.

BOOLEAN
I8042KeyboardInterruptService(
  IN  PKINTERRUPT Interrupt,
  IN  PVOID Context
  );

Routine Description:

    This is the interrupt service routine for the keyboard device when
    scan code set 1 is in use.

Arguments:

    Interrupt - A pointer to the interrupt object for this interrupt.

    Context - A pointer to the device object.

Return Value:

    Returns TRUE if the interrupt was expected (and therefore processed);
    otherwise, FALSE is returned.

Сейчас возникает вопрос, откуда у обработчика прерываний аргумент? Кто его передаёт? Ведь CPU ничего не знает о нём. Если поставите в неё breakpoint, то удивитесь ещё больше увидев несколько функций выше по стеку:

0: kd> kC
# Call Site
00 i8042prt!I8042KeyboardInterruptService
01 nt!KiCallInterruptServiceRoutine
02 nt!KiInterruptSubDispatch
03 nt!KiInterruptDispatch
04 nt!KiIdleLoop

Объяснение здесь простое – это не та функция которая сохранена в регистре IDT процессора. То что вы видите на картинке выше на самом деле объекты типа _KINTERRUPT. В таблице прерываний сохранён специальный ассемблерный код (nt!KiIdleLoop), который знает как найти объект описывающий прерывание в памяти. Что же интересного есть в нём?

  1. Указатель на объект представляющий драйвер в памяти.
  2. Указатель на функцию i8042prt!I8042KeyboardInterruptService, которая и вызывает код считывающий данные из порта PS2 через ассемблерную команду IN AL, 0x60 – сохранить значение из порта номер 0x60 в регистре AL.
  3. Функция dispatcher – ей передаётся указатель функцию из пункта №2 и она вызывает её.
  4. Состояние регистров CPU. Перед вызовом прерывания состояние CPU будет сохранено сюда, и отсюда же будет восстановлено.
  5. Приоритет прерывания. Не тот который определяет контроллер прерываний, а тот который Windows считает нужным. Это IRQL (Interrupt Request Level) – абстракция над IRQ.

Как только обработчик прерываний клавиатуры будет вызван, он уведомит драйвер клавиатуры о полученных данных, после чего будет уведомлено ядро ОС, которое обработав данные отправит их дальше по стеку ввода, где они могут быть доставлены приложению, которое на них отреагирует, или перед этим в обработчик языков (азиатские иероглифы, автокоррекция, автозаполнение).
Ядро ОС напрямую не взаимодействует с драйвером клавиатуры, для этих целей используется Plug’n’Play Manager. Этот компонент предоставляет API IoRegisterPlugPlayNotification, который вызовет предоставленную callback-функцию когда устройство будет добавлено или удалено.

Пару слов о USB

Ознакомление с работой порта USB потребовало бы отдельной статьи описывающей его работу и плюс описание обработки данных HID на Windows. Это очень сильно усложнило бы материал, к тому же уже есть хорошие статьи по теме, поэтому PS2 идеальный пример из-за своей простоты.

USB создавался как универсальный порт для всех устройств, будь то клавиатура, фотоаппарат, сканнер, игровой руль с педалями, принтер и пр. Вдобавок он поддерживает вложенность портов – USB материнки => монитор с USB => клавиатура с USB к которой подключена мышка, флешка и USB-hub к которому подключен жёсткий диск. Взглянув на контакты USB 2.0 вы увидите что они не заточены под передачу каких-то определённых данных, как у PS2. Их всего четыре – витая пара для передачи битов данных, плюс и минус питания.

Провода кабеля USB 2.0

USB 3.0 быстрее за счёт дополнительных пяти контактов. Как видите там нету линии CLOCK для синхронизации, поэтому логика передачи данных сложнее. Слева USB 2.0 и справа USB 3.0 для сравнения.

Все данные передаются через протокол HID (Human Interface Device), который описывает форматы, порядок взаимодействия и передачи данных и всё остальное. Стандарт USB 2.0 занимает 650 страниц, документ HID Class Specification, описывающий работу устройств (мыши, клавиатуры и пр) – 97 страниц, их рекомендуется изучить если вы работаете с USB.

Первым делом подключенное устройство должно рассказать о себе, для этого оно отправляет несколько структур данных, в которых указывается ID устройства и ID производителя по которым Plug’n’Play manager может найти в реестре информацию, загрузить и соединить драйвера. USB устройства пассивны, т.е. хост должен сам с определённым интервалом проверять наличие данных. Частота опроса и размер пакета данных задаются в одном из дескрипторов устройства USB. Максимальный размер пакета – 64 байта, что для информации о нажатых клавишах более чем достаточно.

В Windows есть встроенная поддержка HID, она не такая простая как связь драйвера порта PS2 с драйвером клавиатуры, потому что драйвер HID должен уметь обрабатывать все поддерживаемые протоколом сценарии. Вне зависимости от провайдера данных — порты PS2, USB или Remote Desktop или виртуальная машина – на самом верху driver node будет находится Kbdclass, от которого ядро ОС и будет получать информацию. Уведомление о подсоединении клавиатуры будет обрабатываться через Plug’n’Play Manager, так что для ядра Windows не имеет значение какой порт или источник данных от устройства используется.

ч.1 — Основы ОС и компьютера
ч.2 — Как работает материнская плата и клавиатура через порт PS2

3 ответа. Сам файл ядра — ntoskrnl.exe. Он находится в C: WindowsSystem32. Если вы просматриваете свойства файла, вы можете посмотреть на вкладке Details, чтобы увидеть действительный номер версии.

Где в компьютере находится ядро?

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

Обзор возможностей

Имя ядра Язык программирования создатель
Ядро Windows NT C Microsoft
XNU (ядро Дарвина) C, C ++, Корпорация Apple
СПАРТАНСКОЕ ЯДРО Якуб Джермар
Имя ядра создатель

Что такое ядро ​​Windows 10?

Первоначально Microsoft планировала установить Windows 10 на более чем миллиард устройств в течение трех лет после ее выпуска; в конечном итоге эта цель была достигнута почти пять лет спустя, 16 марта 2020 года.

ОС Windows 10.

Тип ядра Гибридный (то есть ядро ​​Windows NT; а с May 2020 Update дополнительно включает ядро ​​Linux)
Статус поддержки

Есть ли в Windows 10 ядро?

Обновление Windows 10 May 2020 Update теперь доступно со встроенным ядром Linux и обновлениями Cortana.

В винде есть ядро?

Ветвь Windows NT имеет гибридное ядро. Это ни монолитное ядро, где все службы работают в режиме ядра, ни микро-ядро, где все работает в пользовательском пространстве.

Какое ядро ​​лучше?

3 лучших ядра Android и почему вам нужно одно

  • Франко Кернел. Это один из крупнейших проектов ядра на сцене, и он совместим с довольно большим количеством устройств, включая Nexus 5, OnePlus One и другие. …
  • ElementalX. Это еще один проект, обещающий совместимость с широким спектром устройств, и до сих пор он сдержал это обещание. …
  • Ядро Линаро.

11 июн. 2015 г.

Ядро Windows основано на Unix?

Сегодня все операционные системы Microsoft основаны на ядре Windows NT. … В отличие от большинства других операционных систем, Windows NT не разрабатывалась как Unix-подобная операционная система.

Windows написана на C?

Microsoft Windows,

Ядро Microsoft Windows разработано в основном на языке C, с некоторыми частями на языке ассемблера. На протяжении десятилетий наиболее часто используемая операционная система в мире, занимающая около 90% рынка, была основана на ядре, написанном на C.

Какая версия Windows 10 лучше?

Windows 10 — какая версия вам подходит?

  • Windows 10 Домашняя. Скорее всего, это издание будет наиболее подходящим для вас. …
  • Windows 10 Профессиональная. Windows 10 Pro предлагает все те же функции, что и домашняя версия, а также предназначена для ПК, планшетов и устройств 2-в-1. …
  • Windows 10 Mobile. …
  • Windows 10 Корпоративная. …
  • Windows 10 Mobile Корпоративная.

Является ли Windows 10 монолитным ядром?

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

Какой номер последней версии Windows 10?

Последней версией Windows 10 является обновление за октябрь 2020 г., версия «20H2», которое было выпущено 20 октября 2020 г.

Выпускает ли Microsoft Windows 11?

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

Как узнать версию ядра в Windows 10?

Вариант 1. Доступ к окну «О Windows»

  1. Запустите диалоговое окно «Выполнить», нажав клавиши Windows + R на клавиатуре.
  2. Когда откроется диалоговое окно «Выполнить», введите «winver» (без кавычек), затем нажмите «ОК».
  3. Появится окно «О Windows». Во второй строке вы увидите сборку ОС и версию для вашей Windows.

16 ночей. 2018 г.

Заменит ли Linux Windows?

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

3 ответа. Сам файл ядра — ntoskrnl.exe. Это находится в C: WindowsSystem32 . Если вы просматриваете свойства файла, вы можете посмотреть на вкладке Details, чтобы увидеть действительный номер версии.

В винде есть ядро? Обзор возможностей

Имя ядра Язык программирования Поддержка нескольких архитектур (также см. Раздел ниже).
Ядро Windows NT C (до C99), C ++ (после того, как Microsoft сосредоточится на C ++ вместо поддержки C99 в Visual Studio) Да
XNU (ядро Дарвина) C, C ++, Да
СПАРТАНСКОЕ ЯДРО Да
Имя ядра Поддержка нескольких архитектур (также см. Раздел ниже).

Как узнать версию ядра в Windows 10?


Найти информацию об операционной системе в Windows 10

  1. Нажмите кнопку «Пуск»> «Настройки»> «Система»> «О системе». Откройте О настройках.
  2. В разделе «Характеристики устройства»> «Тип системы» проверьте, установлена ​​ли у вас 32-разрядная или 64-разрядная версия Windows.
  3. В разделе «Технические характеристики Windows» проверьте, какой выпуск и версия Windows работает на вашем устройстве.

Что такое ядро ​​винды?

Ядро Windows — это ключевая программа, которая имеет решающее значение для работы Windows. … Ядро выполняет ключевые службы, такие как планирование, запуск и завершение процессов; а также инициализация, запуск драйверов (программ, которые взаимодействуют с оборудованием) и обеспечение правильного распределения памяти.

Поделиться Все параметры общего доступа для: Обновление Windows 10 May 2020 теперь доступно с встроенное ядро ​​Linux и обновления Кортаны. Microsoft выпускает обновление Windows 10 May 2020 Update сегодня. … Самым большим изменением в May 2020 Update является то, что оно включает в себя подсистему Windows для Linux 2 (WSL 2) со специально созданным ядром Linux.

Есть ли в Windows такое же ядро, как у Linux?

С WSL 2 Microsoft начала включать в состав участников программы предварительной оценки Windows собственные внутренние версии, собственное ядро ​​Linux чтобы поддержать WSL. Другими словами, Microsoft теперь поставляет собственное ядро ​​Linux, которое работает вместе с Windows.

Что такое ядро ​​ПК?

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

Какая версия CMD у меня Windows 10?


Как проверить версию Windows 10 с помощью командной строки

  1. Перейдите в окно поиска Windows.
  2. Введите CMD, когда появится его значок, щелкните, чтобы открыть его.
  3. В командной строке введите winver.
  4. Откроется окно «О программе» с вашей версией Windows 10 и информацией о сборке ОС.

Как проверить версию сборки Windows с помощью CMD?

Winver — это команда, которая отображает запущенную версию Windows, номер сборки и установленные пакеты обновлений: нажмите Пуск — ВЫПОЛНИТЬ, введите «winver» и нажмите клавишу ВВОД.

Как узнать версию моей операционной системы Windows?

  1. Нажмите кнопку «Пуск» или «Windows» (обычно в нижнем левом углу экрана компьютера).
  2. Щелкните правой кнопкой мыши «Компьютер» и выберите в меню «Свойства». На появившемся экране отображается версия Windows.

Какое ядро ​​использует Microsoft?

Ядро Microsoft Linux основан на версии 4.19 Linux, которая представляет собой то же ядро, которое используется в технологии, используемой в Azure. По словам официальных лиц, исходный код ядра будет полностью открытым. Microsoft планирует внести обратно все изменения, которые она вносит в свое ядро.

Что такое ядро ​​и его функции?

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

Что за ядро ​​Windows 10?

Один из ярких примеров гибридное ядро — это ядро ​​Microsoft Windows NT, которое поддерживает все операционные системы семейства Windows NT, включая Windows 10 и Windows Server 2019, а также Windows Phone 8, Windows Phone 8.1 и Xbox One.

Какое ядро ​​использует Microsoft?

Ядро Microsoft Linux основано на версии 4.19 Linux., это то же ядро, которое используется в технологии, используемой в Azure. По словам официальных лиц, исходный код ядра будет полностью открытым. Microsoft планирует внести обратно все изменения, которые она вносит в свое ядро.

Есть ли в Windows 10 Linux?

Подсистема Windows для Linux (WSL) — это уровень совместимости для запуска двоичных исполняемых файлов Linux (в формате ELF) изначально на Windows 10, Windows 11 и Windows Server 2019.

Есть ли в Windows 11 ядро ​​Linux?

Но следующая Windows 11 основан на ядре Linux Это была бы гораздо более шокирующая новость, чем ядро ​​Microsoft Windows NT, чем выступление Ричарда Столлмана в штаб-квартире Microsoft.

Какой тип ядра использует ОС Windows?

Microsoft Windows использует Гибридная архитектура типа ядра. Он сочетает в себе черты монолитного ядра и архитектуры микроядра. Фактическое ядро, которое используется в Windows, — это Windows NT (новая технология).

В чем разница между ядром Linux и ядром Windows?

Основное различие между ядром Windows и ядром Linux заключается в том, что Ядро Windows, которое находится в операционной системе Windows, является коммерческим программным обеспечением, в то время как ядро ​​Linux, входящее в операционную систему Linux, является программным обеспечением с открытым исходным кодом. Ядро — это ядро ​​операционной системы.

В чем разница между ОС и ядром?

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

Какое назначение ядра в ОС?

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

Что такое ядро ​​в ОС с примером?

Ядро центральный модуль операционной системы (КОСТЬ). Это часть операционной системы, которая загружается первой и остается в основной памяти. … У каждой операционной системы есть ядро. Например, ядро ​​Linux используется во многих операционных системах, включая Linux, FreeBSD, Android и другие.

Как мне проверить мою версию CMD?


Проверка вашей версии Windows с помощью CMD

  1. Нажмите клавишу [Windows] + [R], чтобы открыть диалоговое окно «Выполнить».
  2. Введите cmd и нажмите [OK], чтобы открыть командную строку Windows.
  3. Введите systeminfo в командной строке и нажмите [Enter], чтобы выполнить команду.

Почему он называется 20H2?

Следовательно, Windows 10 версии 20H2 — «20H2». потому что он выйдет во второй половине 2020 календарного года. Это знакомый подход для участников программы предварительной оценки Windows, разработанный для обеспечения единообразия названий версий в выпусках для наших коммерческих клиентов и партнеров.

Как узнать, что у меня Windows 10 20H2?


Чтобы убедиться, что на вашем устройстве установлена ​​Windows 10 20H2, выполните следующие действия:

  1. Открыть настройки.
  2. Нажмите «Система».
  3. Щелкните О себе. Windows 10 20H2 проверьте настройки.

Понравилась статья? Поделить с друзьями:
  • Код ошибки программы почта windows live 0x800ccc92
  • Кодек mpeg 2 для видео windows 10
  • Код устройства windows 10 для чего
  • Кодек mp3 для windows 10 скачать
  • Код ошибки программы почта windows live 0x800ccc78