ROS Kernel
Ядро ReactOS
Ядро NT представляет из себя микроядро, поддерживает различные архитектуры (включая PPC, Alpha, X86-64, Itanium, MIPS) и используется в Windows NT, XP, 2003 и Longhorn. Его изначальными создателями являются Дэйв Катлер, Лу Пераццоли, Стив Вуд, Дэррил Хэвенс, Гэри Кимура, Том Миллер, Джим Келли и некоторые другие, в настоящий момент над ним работает намного большая команда. Если первую версию ядра можно было назвать настоящим микроядром, то в последующие версии было добавлено довольно много компонентов, предназначенных для поддержки подсистемы Win32 или выходящих за рамки микроядра; они включают в себя специфичные для win32k обратные вызовы, встроенные API для поддержки WMI, API для поддержки сети (в действительности в ядро встроены только подпрограммы для конвертирования IP->String), и т.д.
Архитектура ядра ReactOS основана на архитектуре ядра Microsoft Windows 2003 Server. В ней присутствуют асинхронные вызовы процедур (APC), отложенные вызовы процедур (DPC), процессы, потоки, мьютексы, семафоры, спин-блокировки, таймеры, и прочее.
Планировщик
Планировщик часто считается наиболее важной частью ядра. Планировщик ядра NT является планировщиком потоков, это означает, что он планирует именно потоки, а не процессы. Планировщик NT использует высокомасштабируемый дизайн упреждающей мультизадачности. Новый поток планируется при следующем системном прерывании, однако Отложенный Вызов Процедуры (DPC) всё равно будет выполнен. Время, в течении которого этот поток будет работать, называется "квант", и окончание кванта обычно означает, что будет запланирован новый поток. Потоки в NT имеют 3 основных состояния: Выполняется, Готов, Запланирован, и потоки всех трёх категорий могут быть опережены потоком с более высоким приоритетом, или прерваны DPC или APC в случае присутствия правильного окружения. По причине этой "нестабильности", разработчики ядра NT (а также пользовательского режима, хотя это менее заметно) не могут полагаться на то, что их поток будет контролировать CPU настолько долго, насколько это необходимо. Именно поэтому, в ОС имеются различные блокировки, синхронизации, уровни приоритета и средства маскирования прерываний. Эти средства легко позволяют производить блокировку ресурса, так что новый поток не сможет ему помешать, и обеспечивают невозможность прерывания нового потока при помощи APC, всё это не позволит потоку вытеснить (используя высший уровень приоритета), или даже полностью отключить любые системные прерывания и переключение задач поднятием уровня IRQL до максимума, тем самым маскируя все прерывания. Поток простоя (Idle Thread) - это поток по умолчанию, на который будет произведено переключение, если Планировщик не сможет обнаружить подходящий поток. Это также поток, который используется при первой фазе инициализации в то время, пока создаётся начальный системный поток.
Диспетчер
Диспетчером называется компонент ядра, который берёт на себя обработку объектов диспетчера, которые используются для синхронизации и оповещения. Диспетчер отвечает за оповещение этих объектов при их необходимости, поддержку ожидания этих объектов, управление ожидающими объектами и блокировкой их ожидания и выполняет само ожидание. Эти операции являются частью диспетчеризации. Их ни в коем случае не нужно путать с планированием.
- Событие - Действие, начатое, как правило, вне рамок программы.
- Семафор - Классический способ ограничения доступа к общим ресурсам.
- Поток - Самая малая функциональная единица кода, выполняющегося на центральном процессоре.
- Таймер - Счетчики, которые либо увеличиваются либо уменьшаются на определённой фиксированной частоте.
- Мьютекс - Объект, позволяющий нескольким потокам получать синхронный доступ к ресурсам и избегать одновременного использования общих ресурсов.
Исполнительная подсистема
Исполнительная подсистема NT - это подсистема, обеспечивающая драйверам высокоуровневый доступ к объектам диспетчера ядра, а также поддержку высокоуровневой функциональности процессов и потоков, такой, как маркеры (управляемые подсистемой защиты), объекты, дескрипторы, квоты, WIN32K, задания, порты (управляемые подсистемой вызова локальных процедур (LPC)) и т.д. Она содержит в себе интерфейс-оболочку для всех объектов диспетчера ядра и предоставляет несколько своих, таких, как быстрый мьютекс (fast mutex), обратные вызовы (callbacks) и блокировки с заталкиванием указателя (pushlocks). Также, она предоставляет высокоуровневый доступ к некоторым структурам управления памятью и функциям, например, выделению пула.