5.1 KiB
Введение в ядро 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:
- Токен capability помещается в очередь.
- При следующем page fault'е VMM обрабатывает накопленные отзывы.
- Все VMA, связанные с отозванным токеном, аннулируются.
6. Минималистичный дизайн
#![no_std]— никакой стандартной библиотеки.#![no_main]— точка входаkmain.- Все структуры данных, аллокаторы и драйверы написаны с нуля.
- Единственные внешние зависимости:
limine(bootloader протокол),embedded-graphics(шрифты),bitflags.