Files
Elyz/kernel/docs/overview/introduction.md
2026-07-07 16:40:41 +03:00

5.1 KiB
Raw Blame History

Введение в ядро Elyz (LISA)

Концептуальная модель

Elyz (LISA) — это модульное, capability-ориентированное ядро для x86-64, спроектированное вокруг следующих архитектурных принципов:

1. Capability-ориентированная безопасность

Вместо традиционной модели «всё или ничего» (ring 0 vs ring 3), Elyz использует систему capabilities (дескрипторов прав). Каждый дескриптор представляет собой неподделываемый токен, дающий доступ к конкретному объекту ядра (фрейму памяти, CNode, PMActor) с определёнными правами.

  • Capability — это не просто число; это структура с полями object, rights, relation, token_sig.
  • Capability можно создавать (mint) с урезанными правами от родительского дескриптора.
  • Capability можно отозвать (revoke), что каскадно уничтожает всех потомков.
  • Система гарантирует, что access — это всегда наличие capability.

2. Многоуровневое управление памятью

Управление физической памятью разделено на три уровня:

Уровень Компонент Ответственность
1 (глобальный) BitmapPMM Владение всей физической памятью, аллокация/освобождение по 4KiB фреймам. Инициализируется из карты памяти bootloader'а.
2 (распределённый) PMActor Актёр физической памяти — владеет диапазоном физической памяти, использует BuddyAllocator для аллокации внутри этого диапазона. Каждый PMActor — изолированный аллокатор.
3 (виртуальный) AddressSpace (VMM) Управляет виртуальными адресными пространствами (PML4 + VMA-деревья). Использует PMM для аллокации PT-страниц и lazy demand-paging.

Эти уровни связывает PM Router — lock-free система каналов для асинхронной пересылки запросов и ответов между исполнителями.

3. Асинхронная модель акторов

PMActor следует модели CSP (Communicating Sequential Processes):

  • Каждый актор имеет lock-free MPSC-очередь входящих сообщений.
  • Потоки/процессы отправляют запросы (Alloc/Free/Carve) в очередь актора.
  • Когда актор получает CPU time, он вызывает process_messages() и отправляет ответы через PM Router.
  • PM Router использует 65536 предварительно выделенных каналов для lock-free маршрутизации результатов.

4. Виртуальная память с Copy-on-Write

AddressSpace поддерживает:

  • Lazy demand-paging: физическая страница выделяется только при page fault'е.
  • Copy-on-Write (COW): при fork'е адресного пространства страницы разделяются между родителем и потомком; копирование происходит при первой записи.
  • Zero-copy shared mappings: физические страницы, принадлежащие capability, могут быть отображены в другое адресное пространство без копирования. Владелец страниц — capability, а не VMA.

5. Отзыв (Revocation) через lock-free очередь

Система отзыва дескрипторов использует глобальную lock-free кольцевую очередь MMU_REVOCATION_QUEUE. При отзыве capability:

  1. Токен capability помещается в очередь.
  2. При следующем page fault'е VMM обрабатывает накопленные отзывы.
  3. Все VMA, связанные с отозванным токеном, аннулируются.

6. Минималистичный дизайн

  • #![no_std] — никакой стандартной библиотеки.
  • #![no_main] — точка входа kmain.
  • Все структуры данных, аллокаторы и драйверы написаны с нуля.
  • Единственные внешние зависимости: limine (bootloader протокол), embedded-graphics (шрифты), bitflags.