ROS Kernel

Материал из Русский WINE
Перейти к: навигация, поиск

Ядро 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). Также, она предоставляет высокоуровневый доступ к некоторым структурам управления памятью и функциям, например, выделению пула.

См. также

ReactOS
Search.png
Доклады
О ReactOS • ARWINSS • ЧеЗа
Информация Новости Выпуски новостей • Переводы блогов • Новости проекта • Видео • ReactOS на Хабре • USB от Вадима Галянта
Разработка Руководство по программированию • Отсутствующая функциональность • Ветви разработки • Компоненты системы • ReactOS и Wine • План работ • Roadmap ядра by Vgal • Разработчики • Совместимость с dll Windows • Наиболее значимые изменения за год • Используемые проекты • Google Summer of Code • Известные проблемы
Порты AMD64 • ARM • Xbox • PowerPC
Компоненты Файловые системы • Режим совместимости • Отчеты об ошибках • Печать • USB • Ядро
Загрузчик Восстановление MBR • Загрузка из GRUB • Параметры загрузки
Прочее ARWINSS • Приложения в ReactOS • Оформление ReactOS • Координаторы • "Пасхальные яйца" • Монетизация
Другое Типы ядер • FreeWin95
Помощь
RAM-диск ReactOS по PXE • с жесткого диска
Разработка Стиль написания кода • Стандарты RC-файлов • Работа с документацией • Венгерская нотация • GNU Indent • [ Subversion : ветви • слияние • использование TortoiseSVN ] • Основы перевода • Отправка патчей
Репорты Отладка в VirtualBox • Отладка на экран • Добавление программы в менеджер приложений • Отправка отчетов
Отладка Com0com • GDB • Kdbg • Rossym.gdb • Roswin.gdb • WinDBG • Руководство по WinDBG • Включение трассировки ядра • Коды DPRINT • Удалённый отладчик ReactOS
Сборка CMake • RBuild • Файлы RBuild • Автоматическое копирование файлов • Сборка MINGW-w64 • Сборка модулей • Среда сборки
Тестирование VirtualBox • VMware • QEMU • Hyper-V • Необходимый объём диска • Перенос файлов на виртуальный диск • Установка ReactOS • Установка драйверов
Сеть Общие папки • Samba • NFS
Игры Установка DirectPlay
Обновление ReactOS • Загрузочная флешка • Чем можно помочь проекту • Создание нового пользователя • Звук и сеть в VirtualBox • Съемка и публикация видео • IRC-канал • Сторонние компоненты • FAQ • ReactOS как рабочая станция • ReactOS и UEFI
Обзоры Оболочка • NTVDM • WOW • Community Edition • История сайта • ReactOS Server • Криптография • ПО времен XP