🦀 Koros 架构分析

四架构 `#![no_std]` Rust 微内核 — 9 个 crate 的分层组合式设计

① Crate 依赖关系图 koros 内核二进制 (composition root) korhv Type-1 Hypervisor 二进制 kor-arch 架构特定代码 kor-sched 抢占式调度器 kor-ext2 ext2 文件系统 kor-ramfs 内存文件系统 kor-fs VFS 基础设施 kor-alloc Slab 堆分配器 kor-frame Buddy 物理帧分配 kor 底层抽象层:traits + registries(无 arch 代码,无子系统实现) ② 架构抽象模型 — Runtime Trait-Object Dispatch 共享 crate(无 #[cfg(target_arch)]) kor::ArchProvider kor::arch::current() → &'static dyn ArchProvider 所有下游 crate 通过 trait object 调用架构接口,从不直接 cfg 选择模块 这使 kor / kor-frame / kor-alloc / kor-fs / kor-sched 完全架构无关 kor-arch(唯一的 cfg 点) riscv64 x86_64 aarch64 loong64 cfg_if! 选择活动架构 每个架构 impl 相同的 ArchProvider trait 通过 provider() / interrupt_controller() / console() 暴露 install ③ 分层架构 — 从硬件到应用 🖥️ 硬件层 riscv64 · x86_64 · aarch64 · loongarch64 | QEMU 虚拟平台 kor-arch — 启动 + 硬件抽象 boot.S → MMU → 高半核 | trap.S → 中断/异常分发 | 时钟 | 中断控制器(PLIC/GIC/APIC) | UART | 上下文切换 kor-frame — 物理内存管理 Buddy 帧分配器 | 4K/2M 页 | add_region / alloc_page kor-alloc — 内核堆 7 size-class Slab 堆 | #[global_allocator] | 大对象回退到帧分配 kor-fs — VFS 基础设施 块缓存 | 挂载表 | 路径解析 | fd 抽象 | FS 驱动注册 kor-sched — 调度 + 同步 抢占式多核调度 | WaitQueue | Semaphore | Mutex | Channel kor-ext2 / kor-ramfs — 具体文件系统 ext2 读写(兼容 Linux mkfs.ext2) | 内存 ramfs | 注册为 FS 驱动 kor / koros / korhv — 组合层 kor: trait 定义 + 注册表 | koros: 内核组合根(kernel_main) | korhv: Type-1 Hypervisor 组合根(hyp_main) kor — 最底层抽象 ArchProvider · InterruptController · Console · TrapCallbacks · BlockDevice · VFS traits · FDT · cmdline · PlatformConfig ④ 设计意图 🎯 组合优于继承 🧩 零 cfg 分支 ⚡ 双二进制复用 🔒 形式化验证

④ 设计意图详解

🎯 组合优于继承 (Composition over Inheritance)

9 个 crate 各司其职,koroskorhv 作为"组合根"在 kernel_main / hyp_main 中组装所有组件。新增文件系统?写一个新 crate 实现 FileSystemDriver trait,在组合根注册即可,不改任何已有代码。

🧩 零 cfg 分支架构抽象

共享 crate 中没有一行 #[cfg(target_arch)]。架构差异完全封装在 kor-arch 中,通过 ArchProvider trait object 分发。添加新架构?只需在 kor-arch/src/ 下加一个目录实现 trait,共享代码零修改。

⚡ 双二进制复用 (koros + korhv)

同一套底层 crate(kor + kor-frame + kor-alloc)支撑两个完全不同的产品:常规内核 koros 和 Type-1 Hypervisor korhv。Hypervisor 不重新发明轮子,直接复用内存管理和抽象层。

🔒 形式化验证就绪

分配器模块(帧分配器、slab 堆)有独立的 Verus 形式化验证副本(verified/)。#![no_std] + 纯函数式设计让关键模块可以被形式化推理。

🏗️ 为什么这样设计?