一个基于微内核架构的操作系统内核
特性 • 快速开始 • 架构设计 • 构建指南 • 贡献指南
minikernel OS 是一个从零开始构建的微内核操作系统项目,遵循 Linux 微内核核心文档的设计原则。本项目旨在提供一个清晰、模块化、易于理解的操作系统内核实现,适合操作系统学习者和爱好者深入研究。
- 最小化内核 - 内核只负责最核心的功能:地址空间管理、线程调度、IPC、低级资源管理、异常/中断处理
- 用户态服务 - 将复杂逻辑(文件系统、网络栈、驱动程序、策略)移至用户空间运行
- 分层清晰 - 代码按职责严格分层:
arch/、kernel/、lib/、user/、tools/、docs/ - 接口契约 - 强制 IPC/ABI 接口规范,便于并行开发与多语言互操作
- 基础内核框架 - 完整的内核启动流程和初始化序列
- 多级页表虚拟内存管理 - x86_64 4级页表支持
- 完全公平调度器 (CFS) - 基于红黑树的 O(log n) 调度算法
- 伙伴系统内存分配 - 高效的物理页面分配器
- 进程管理和上下文切换 - 完整的进程生命周期管理
- 基础系统调用接口 - fork、exec、wait、exit、mmap 等
- 双向链表和红黑树数据结构 - 内核级数据结构实现
- 中断和异常处理框架 - IDT 配置与中断处理
- 完整的 VFS 实现
- 网络协议栈
- 进程间通信机制 (IPC)
- 用户态驱动支持
- 内核模块加载
- 信号机制
- 文件系统支持
- 多处理器支持 (SMP)
| 工具 | 最低版本 | 用途 |
|---|---|---|
| GCC | 9.0+ | C 编译器 |
| NASM | 2.14+ | 汇编器 |
| Binutils | 2.34+ | 链接器、objcopy、objdump |
| QEMU | 4.0+ | 虚拟机运行环境 |
| Make | 4.0+ | 构建工具 |
Ubuntu/Debian:
sudo apt update
sudo apt install build-essential gcc nasm binutils qemu-system-x86Arch Linux:
sudo pacman -S base-devel gcc nasm qemu-system-x86Fedora:
sudo dnf install gcc nasm binutils qemu-system-x86# 克隆项目
git clone https://github.com/assumeengagetry/minikernel.git
cd minikernel
# 检查工具链
make check-tools
# 构建内核
make all
# 在 QEMU 中运行
make qemu# 启动 QEMU 并等待 GDB 连接
make debug
# 在另一个终端中连接 GDB
gdb bin/kernel.elf -ex 'target remote localhost:1234'minikernel/
├── .github/ # GitHub 配置
│ ├── workflows/ # CI/CD 工作流
│ └── ISSUE_TEMPLATE/ # Issue 模板
├── arch/ # 架构相关代码
│ └── x86_64/
│ ├── boot/ # 引导代码、链接脚本
│ ├── cpu/ # CPU 特定代码
│ └── mm/ # 架构相关页表实现
├── kernel/ # 内核核心代码
│ ├── core/ # 微内核核心模块
│ │ ├── process/ # 进程管理
│ │ ├── thread/ # 线程管理
│ │ ├── sched/ # 调度器
│ │ └── ipc/ # 进程间通信
│ ├── include/ # 内核头文件
│ ├── interrupt/ # 中断处理框架
│ ├── mm/ # 内存管理(非架构相关)
│ └── drivers/ # 内核态驱动
├── include/ # 公共头文件
├── lib/ # 内核与用户态共用库
├── src/ # 主要源代码
│ ├── kernel/ # 内核实现
│ └── mm/ # 内存管理实现
├── user/ # 用户态组件
│ ├── services/ # 用户态服务
│ │ ├── init/ # 初始化进程
│ │ ├── vfsd/ # VFS 服务
│ │ ├── netd/ # 网络服务
│ │ └── devd/ # 设备管理服务
│ ├── apps/ # 用户程序示例
│ └── libs/ # 用户态库
├── tests/ # 测试代码
│ ├── kernel-unit/ # 内核单元测试
│ └── integration/ # 集成测试
├── tools/ # 构建和辅助工具
├── scripts/ # 自动化脚本
├── docs/ # 文档
│ ├── design/ # 设计文档
│ ├── dev-setup.md # 开发环境配置
│ └── roadmap.md # 项目路线图
├── cross/ # 交叉编译配置
├── examples/ # 示例代码
├── build/ # 构建输出目录
├── Makefile # 主构建文件
├── meson.build # Meson 构建配置
├── conanfile.py # Conan 依赖管理
└── README.md # 本文件
┌─────────────────────────────────────────────────────────────────┐
│ 用户空间 (User Space) │
├─────────────────────────────────────────────────────────────────┤
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌───────┐ │
│ │ init │ │ vfsd │ │ netd │ │ devd │ │ shell │ │
│ │ (PID 1) │ │ (VFS) │ │ (网络) │ │ (设备) │ │ │ │
│ └────┬────┘ └────┬────┘ └────┬────┘ └────┬────┘ └───┬───┘ │
│ │ │ │ │ │ │
│ └────────────┴────────────┴────────────┴───────────┘ │
│ │ IPC │
├──────────────────────────────┼──────────────────────────────────┤
│ 系统调用接口 │
├─────────────────────────────────────────────────────────────────┤
│ 内核空间 (Kernel) │
│ ┌───────────────────────────────────────────────────────────┐ │
│ │ 微内核核心 │ │
│ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │
│ │ │ 调度器 │ │ 内存管理 │ │ IPC核心 │ │ 中断处理 │ │ │
│ │ │ (CFS) │ │ (Buddy) │ │ │ │ │ │ │
│ │ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │ │
│ └───────────────────────────────────────────────────────────┘ │
├─────────────────────────────────────────────────────────────────┤
│ 硬件抽象层 (HAL) │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ x86_64 │ │ 页表 │ │ GDT/IDT│ │ 上下文 │ │
│ │ 启动 │ │ 管理 │ │ 管理 │ │ 切换 │ │
│ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │
└─────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ 硬件 │
│ CPU • 内存 • 磁盘 • 网卡 • 键盘 • 显示器 │
└─────────────────────────────────────────────────────────────────┘
基于 Linux CFS (Completely Fair Scheduler) 设计的调度器实现:
- 调度策略:
SCHED_NORMAL,SCHED_FIFO,SCHED_RR,SCHED_BATCH,SCHED_IDLE - 优先级: 支持 nice 值 (-20 到 +19)
- 数据结构: 红黑树管理可运行任务,保证 O(log n) 时间复杂度
- 负载均衡: 基于虚拟运行时间 (vruntime) 的公平调度
- 伙伴系统: 物理页面分配,最大阶数为 11 (2^11 = 2048 页)
- 虚拟内存: 4级页表管理,支持按需分页
- 内存区域: DMA、Normal、HighMem 三个内存区域
- 页面标志: locked、referenced、dirty、buddy 等状态管理
- task_struct: 完整的进程描述符
- 进程状态: RUNNING, INTERRUPTIBLE, UNINTERRUPTIBLE, STOPPED, ZOMBIE 等
- Clone 标志: 支持 CLONE_VM, CLONE_FILES, CLONE_THREAD 等
- 信号处理: 基础信号框架
# 完整构建
make all
# 仅编译内核 ELF
make bin/kernel.elf
# 生成二进制镜像
make bin/kernel.bin
# 生成 ISO 镜像 (需要 grub-mkrescue)
make bin/kernel.iso
# 清理构建产物
make clean
# 深度清理
make distclean# 安装依赖
conan install . --output-folder=build --build=missing
# 配置
meson setup build --cross-file=cross/x86_64-none.ini
# 编译
meson compile -C build| 选项 | 默认值 | 描述 |
|---|---|---|
kernel_debug |
true | 启用调试功能 |
serial_debug |
true | 启用串口调试输出 |
kernel_optimize |
2 | 优化级别 (0/1/2/3/s) |
max_cpus |
8 | 最大 CPU 数量 |
enable_tests |
false | 构建单元测试 |
# 在 QEMU 中运行
make qemu
# 调试模式运行
make debug
# 生成反汇编
make disasm
# 生成符号表
make symbols
# 查看内核大小
make size
# 代码统计
make stats
# 显示配置
make config当前支持的系统调用:
| 编号 | 名称 | 描述 |
|---|---|---|
| 0 | read |
读取文件 |
| 1 | write |
写入文件 |
| 2 | open |
打开文件 |
| 3 | close |
关闭文件 |
| 39 | getpid |
获取进程 ID |
| 56 | clone |
创建进程/线程 |
| 57 | fork |
创建子进程 |
| 58 | vfork |
创建子进程 (共享地址空间) |
| 59 | execve |
执行程序 |
| 60 | exit |
退出进程 |
| 61 | wait4 |
等待子进程 |
| 62 | kill |
发送信号 |
| 63 | uname |
获取系统信息 |
| 24 | sched_yield |
让出 CPU |
| 12 | brk |
调整堆大小 |
| 9 | mmap |
内存映射 |
| 11 | munmap |
解除内存映射 |
| 99 | sysinfo |
获取系统状态 |
# 运行所有测试
make test
# 运行内核单元测试
cd tests/kernel-unit && make
# 运行集成测试
cd tests/integration && make test我们欢迎任何形式的贡献!请阅读 CONTRIBUTING.md 了解详细信息。
- Fork 本仓库
- 创建特性分支 (
git checkout -b feature/amazing-feature) - 提交更改 (
git commit -m 'Add some amazing feature') - 推送到分支 (
git push origin feature/amazing-feature) - 创建 Pull Request
- 遵循 Linux 内核编码风格
- 缩进: 4 空格 (不使用 Tab)
- 行宽: 最大 80 字符
- 使用
.clang-format进行代码格式化
本项目采用 MIT 许可证 - 详见 LICENSE 文件。
MIT License
Copyright (c) 2024 minikernel Development Team
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction...
- OSDev Wiki - 操作系统开发资源
- Linux Kernel - 设计参考
- seL4 - 微内核设计参考
- 所有贡献者和支持者
- Issues: GitHub Issues
- Discussions: GitHub Discussions
用 ❤️ 构建 | Made with ❤️