fix: bugs
This commit is contained in:
56
kernel/docs/architecture.md
Normal file
56
kernel/docs/architecture.md
Normal file
@@ -0,0 +1,56 @@
|
||||
# Архитектура ядра 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
|
||||
Reference in New Issue
Block a user