跳转到内容

架构概览

OpenOS 采用微内核架构,这是现代操作系统设计的一种方法。与宏内核(如 Linux)不同,微内核仅在内核空间运行最核心的服务,而将驱动和大部分系统服务放在用户空间运行。

最小化内核

内核仅包含最核心的服务:内存管理、任务调度、IPC 通信。其他功能(驱动、文件系统、网络)运行在用户空间。

故障隔离

用户空间的驱动崩溃不会导致内核崩溃。每个服务运行在独立的地址空间中,相互隔离。

最小可信计算基

内核代码量小,更容易进行形式化验证和安全审计。seL4 微内核已经过形式化验证。

灵活的服务组合

服务可以独立重启、升级和替换。系统可以根据需要动态组合不同的服务。

OpenOS 内核由以下核心模块组成:

模块文件职责
GDTgdt.rs全局描述符表,段选择子,TSS
IDTinterrupts.rs中断描述符表,异常和 IRQ 处理
PICpic8259.rs可编程中断控制器初始化
APICapic.rs高级可编程中断控制器
IOAPICioapic.rsI/O APIC 控制器
SYSCALLsyscall.rsSYSCALL/SYSRET MSR 配置
Per-CPUpercpu.rs每 CPU 数据区域
驱动文件职责
VGAvga.rs帧缓冲文本渲染
串口serial.rsUART 16550 驱动
键盘keyboard.rsPS/2 键盘驱动
PCIpci.rsPCI 总线枚举
VirtIO-Netvirtio_net.rs网络设备驱动
VirtIO-Blockvirtio_block.rs块设备驱动
模块文件职责
堆分配器allocator.rslinked_list_allocator
帧分配器frame_alloc.rs物理帧分配
虚拟内存mod.rs页表管理,内存隔离
模块文件职责
任务task.rsTaskId,TaskState,SavedContext
调度器scheduler.rs抢占式调度,SMP 支持
用户模式user.rsRing 3 切换,ELF 加载
模块职责
Handle64 位打包,Rights 位掩码
HandleTableBTreeMap 存储
模块职责
Channel同步会合,消息传递
模块文件职责
VFSvfs.rs虚拟文件系统抽象,挂载点
ramfsramfs.rs内存文件系统
ext2ext2.rsext2 文件系统(读写)
块缓存block_cache.rs块设备缓存
模块文件职责
DHCPdhcp.rsDHCP 客户端
DNSdns.rsDNS 解析
Socketsocket.rs套接字抽象
TCPtcp.rsTCP 协议
UDPudp.rsUDP 协议
模块职责
Spinlock自旋锁
Mutex互斥锁
模块职责
分发器54 个系统调用分发
编号系统调用号常量
BIOS/UEFI → bootloader → kernel_main()
├─ 1. VGA 初始化
├─ 2. 串口初始化
├─ 3. 架构初始化 (GDT, IDT, APIC)
├─ 4. 内存初始化 (堆, 帧分配器)
├─ 5. 文件系统初始化 (VFS, ramfs, ext2)
├─ 6. 网络初始化 (VirtIO-Net)
├─ 7. 块设备初始化 (VirtIO-Block)
├─ 8. IPC 初始化
├─ 9. Per-CPU 初始化
├─ 10. 任务调度器初始化
├─ 11. 挂载文件系统 (ramfs at /, ext2 at /disk)
└─ 12. 启动用户空间服务

OpenOS 实现 54 个系统调用:

类别数量编号范围说明
Channel50x01-0x05IPC 消息传递
Handle30x10-0x12能力管理
Process70x30-0x36进程生命周期 + 内存管理
Thread30x40-0x42线程管理
Socket90xA0-0xA8网络套接字
硬件访问50xB0-0xB4用户空间驱动支持
文件系统元数据60xC0-0xC5文件操作
事件40xF2-0xFC事件信号
服务发现20xF5-0xF6端点注册/发现
文件系统 I/O50xF7-0xFF文件读写
网络20xFD-0xFE网络 I/O
调试30xF0-0xF1, 0xF4控制台 I/O