Files
Elyz/kernel/docs/architecture.md
2026-07-06 00:25:49 +03:00

3.1 KiB

Архитектура ядра LISA

LISA — capability-based микроядро. Вся физическая память управляется через систему capability (прав доступа к объектам). Ядро использует загрузчик Limine (протокол Limine boot protocol).

Общая схема

kmain()
  ├── BitmapPMM.init()             ── глобальный менеджер фреймов
  ├── LAPIC.init()                 ── доступ к Local APIC
  ├── PageTable::activate()        ── включение страничной памяти
  ├── SlabAllocator.init()         ── куча ядра
  ├── VMM::init_kernel_space()     ── адресное пространство ядра
  ├── IDT::load()                  ── обработчики прерываний
  ├── PMRouter::init()             ── 65536 каналов
  ├── CNode (cap тест)             ── insert → mint → revoke
  │     └── RevocationQueue.push() ── уведомление VMM
  └── PMActor тест
        ├── PMRouter.alloc_channel()
        ├── PMActor.submit_request()
        ├── PMActor.process_messages()
        └── BuddyAllocator (внутри PMActor)

Поток ревокации

CNode::revoke()
  → RevocationQueue.push(token_sig)
  → (page fault handler)
      → process_deferred_mmu_events()
          → AddressSpace::process_pending_revocations()
              → RevocationQueue.pop()
              → AddressSpace::revoke_by_token(token)  // анмаппинг VMA
              → TLB flush

Поток PMActor запроса

1. PMRouter::alloc_channel() → получаем channel_id
2. PMActor::submit_request(Allocate { channel_id, ... })
3. (актор обрабатывает) PMActor::process_messages()
4. PMActor::handle_allocate() → BuddyAllocator::alloc_pages()
5. PMRouter::route_responses([PMResponse { channel_id, result }])
6. PMRouter::wait_for_response(channel_id) → spin до READY
7. Возврат результата клиенту

Ключевые принципы

  • Lock-free очереди — MPSC кольцевые буферы везде, где возможен контеншен (PMActorQueue, RevocationQueue, PMRouter channels)
  • Double-write logging — каждое сообщение дублируется в фреймбуфер (консоль) и последовательный порт
  • HHDM — Higher Half Direct Map: весь физическая память отображена 1:1 в верхней половине адресного пространства через HHDM offset
  • ASID/PCID — аппаратная изоляция TLB между адресными пространствами
  • Распределённое управление памятью — PMM выделяет только сырые фреймы, PMActor управляет диапазонами через BuddyAllocator