NeptuneOS
Neptune OS — это операционная система общего назначения, построенная на микроядре seL4 разрабатываемая Chang Liu из г. Провиденс, США, штат Род-Айленд.
Поэтически выражаясь, это «переосмысление» того, чем могла бы стать Windows NT, если бы seL4 был доступен ещё в 1988 году. Оригинальная архитектура NT находилась под сильным влиянием архетипного дизайна Mach и состояла из набора системных служб, называемых NT Executive, расположенных поверх минимального микроядра, отвечающего только за базовые примитивы. Однако аппаратные ограничения конца 1980-х годов вынудили NT пойти по пути «гибридного» ядра, где Executive, микроядро и драйверы устройств находились в пространстве ядра ради производительности. Цель Neptune OS — исправить этот исторический компромисс, используя основанный на возможностях, формально верифицированный и высокопроизводительный IPC seL4 для реализации первоначального замысла NT: чистой микроядерной архитектуры, где системные компоненты существуют как изолированные серверы в пользовательском режиме.
Содержание
Обзор
Для достижения этой цели Neptune OS переписывает NT Executive как процесс пользовательского пространства под управлением seL4. Этот процесс выступает в роли корневой задачи и предоставляет через IPC seL4 высокоуровневый интерфейс системных служб (известный как NT Native API) клиентским процессам. Этот API, предоставляемый Executive, достаточно универсален, чтобы поддерживать как то, что в архитектуре NT называется подсистемами окружения, такими как Win32 и POSIX, предоставляющими привычные интерфейсы программирования для пользовательских приложений, так и подсистемы драйверов устройств, которые позволяют непромодифицированным или минимально модифицированным драйверам устройств ядра Windows и Linux работать нативно (то есть НЕ в виртуальной машине) в качестве изолированных непривилегированных процессов пользовательского пространства под управлением Neptune OS. Эти подсистемы драйверов устройств являются главным архитектурным преимуществом проекта перед оригинальной гибридной NT, поскольку они гарантируют, что крах драйвера остаётся локальным событием, которое не может поставить под угрозу стабильность остальной системы.
Последний релиз проекта — v0.4. Доступны демонстрационные видео, показывающие непромодифицированные драйверы GPU и Ethernet ядра Linux (amdgpu, i915, virtio_gpu, e1000e), работающие как обычные процессы пользовательского пространства в Neptune OS.
Статус проекта
Текущий статус проекта: реализовано достаточно компонентов NT Executive для поддержки следующего:
- Запуск нетривиальных драйверов устройств ядра Linux нативно в пользовательском пространстве. Протестированные драйверы:
- Драйверы DRM (GPU): i915, radeon, amdgpu. Протестированы только modesetting и отображение framebuffer, так как 3D-рендеринг требует компонентов mesa в пользовательском пространстве, которые ещё не портированы.
- Ethernet: Intel e1000e и Realtek r8169. Базовая передача/приём Ethernet-пакетов работает.
- Контроллер USB xHCI. Протестирована только энумерация портов.
- Драйверы шин ACPI и PCI, портированные из ReactOS, для обеспечения управления питанием (выключение и перезагрузка через ACPI) и энумерации шины PCI.
- Базовая стековая поддержка клавиатуры (драйвер класса клавиатуры kbdclass.sys и драйвер порта PS/2 i8042prt.sys).
- Достаточно полный стек драйверов хранения и файловой системы с поддержкой упреждающего чтения и отложенной записи, портированный из Windows и ReactOS. Включает:
- Пару драйверов класса хранения (classpnp.sys и disk.sys), взятых из официального открытого репозитория драйверов Microsoft Windows.
- Драйвер порта storport.sys, взятый из ReactOS и модифицированный для исправления ошибок и добавления минимальной реализации API Win8+ для поддержки драйверов storahci и stornvme.
- Драйвер минипорта хранения AHCI storahci.sys от Microsoft.
- Драйвер минипорта хранения NVME stornvme.sys от Open Fabrics Alliance.
- Драйвер менеджера разделов (partmgr.sys) и драйвер менеджера монтирования (mountmgr.sys).
- Драйвер контроллера гибких дисков fdc.sys для стандартного контроллера гибких дисков на ПК.
- Драйвер файловой системы FAT12/16/32 fatfs.sys.
- Базовый Session Manager smss.exe и NT native командная строка ntcmd.exe с поддержкой большинства распространённых команд оболочки.
- Утилита для бенчмаркинга дисков umtests.exe
- Наконец, драйвер beep.sys, издающий раздражающий звук через динамик ПК.
Минимальные системные требования
Для систем amd64 требуется как минимум процессор Intel Ivy Bridge или эквивалент AMD. По умолчанию ядро seL4 собирается с включённой инструкцией fsgsbase, которая поддерживается только на Ivy Bridge и более поздних процессорах. Можно отключить использование инструкции fsgsbase при сборке ядра seL4 (см. private/ntos/cmake/sel4.cmake), но это не тестировалось на реальной машине.
Для систем i386 требуется как минимум процессор Core 2 Duo или эквивалент AMD, так как ядро seL4 предполагает, что процессор поддерживает глобальные страницы (бит PGE в CR4), и требует как минимум ACPI 3.0 для определения количества узлов CPU. ACPI 3.0 не стал широко доступным до эпохи Core 2 Duo.
Как запустить в Qemu
- Архитектура: x86_64
- Модель CPU: IvyBridge
- Тип машины: q35
- Контроллер: IDE
Примерная команда:
qemu-system-x86_64 -name neptuneos -m 512 -machine q35 -cpu IvyBridge -smp sockets=1,cores=2,threads=1 -device VGA -cdrom /home/petr/neptune-os-0.4.0004-amd64-reldbginfo-boot.iso -boot order=dca,menu=on -display sdl
Ссылки
См. так же
| OSFree | ||
|---|---|---|
| osFree | Архитектура • План работ • Компоненты • Используемые проекты • Связанные проекты • Экраны • FreePM • L4 • Скриншоты | |
| Загрузчик | [ Последовательность загрузки: поток выполнения • изменение карты памяти ] • Загрузочный сектор • L4Ka::Kickstart | |
| Personalities | OS/2 personality | VIO API • FamilyAPI |
| Win16 personality | Win16API | |
| MVM | MVM API | |
| Разработка | Получение исходных кодов • Сборка • Отладка • Отправка отчетов | |
| API | TPCrt | |
| Сообщество | IRC • Новости проекта | |
| OS/2 | Presentation Manager • IFS • Петиции к IBM | |
| Статьи | Микроядро L4 как основа ядра ОС | |
| Родственные проекты | os2host32 • NeptuneOS | |