总结与展望
你已经完成了什么
恭喜!你从零开始构建了一个真正的操作系统内核,涵盖了以下核心功能:
已实现的功能
| 章节 | 主题 | 核心实现 |
|---|---|---|
| 00 | 快速体验 | 运行预构建OS镜像 |
| 01 | 环境准备 | 工具链安装、Docker环境 |
| 02 | 基础知识 | CPU、汇编、C语言要点 |
| 03 | BIOS与启动 | 512字节启动扇区 |
| 04 | Bootloader | 磁盘读取、多扇区加载 |
| 05 | 保护模式 | GDT、32位模式切换 |
| 06 | 加载内核 | C语言内核、链接脚本 |
| 07 | 内核初始化 | 类型系统、端口I/O、字符串库 |
| 08 | 屏幕输出 | VGA文本模式驱动、printf |
| 09 | 中断处理 | IDT、ISR、PIC重映射 |
| 10 | 键盘输入 | PS/2键盘驱动、输入缓冲区 |
| 11 | 物理内存 | 位图分配器、kmalloc |
| 12 | 虚拟内存 | 分页、缺页处理 |
| 13 | 进程管理 | PCB、进程创建/销毁 |
| 14 | 任务调度 | PIT定时器、Round-Robin、上下文切换 |
| 15 | 用户程序 | TSS、系统调用、Ring 3 |
内核架构总览
┌─────────────────────────────────────────────────────────┐
│ 用户程序 (Ring 3) │
│ 通过INT 0x80系统调用 │
├─────────────────────────────────────────────────────────┤
│ 系统调用接口 │
│ exit | write | read | yield │
├────────────┬────────────┬────────────┬──────────────────┤
│ 进程管理 │ 内存管理 │ 设备驱动 │ 调度器 │
│ PCB │ PMM(位图) │ VGA屏幕 │ Round-Robin │
│ 创建/销毁 │ VMM(分页) │ PS/2键盘 │ 上下文切换 │
├────────────┴────────────┴────────────┴──────────────────┤
│ 中断/异常处理 (IDT + PIC + PIT) │
├─────────────────────────────────────────────────────────┤
│ GDT | TSS | 保护模式 │
├─────────────────────────────────────────────────────────┤
│ Bootloader (实模式 → 保护模式 → 内核) │
└─────────────────────────────────────────────────────────┘
扩展方向
短期扩展(难度:中等)
- 简单Shell: 基于键盘输入实现命令行界面
- 内存堆管理器: 替换bump allocator为真正的malloc/free
- 定时器优化: 实现sleep()和精确计时
- 串口输出: 用于调试和日志
中期扩展(难度:较高)
- 文件系统: 实现FAT12/FAT16文件系统
- 磁盘驱动: ATA/IDE硬盘读写
- 高半内核: 将内核映射到3GB处
- ELF加载器: 从”磁盘”加载用户程序
- 信号机制: 进程间信号通信
长期目标(难度:高)
- 网络栈: 实现TCP/IP协议栈
- 图形界面: VGA图形模式、窗口管理器
- SMP支持: 多核CPU支持
- 64位模式: 切换到Long Mode
- UEFI启动: 替换BIOS引导
推荐资源
书籍
- 《Operating Systems: Three Easy Pieces》(免费在线)
- 《Operating System Concepts》(恐龙书)
- 《Linux Kernel Development》Robert Love
在线教程
- OSDev Wiki - 最全面的OS开发参考
- James Molloy’s Kernel Tutorial
- Writing a Simple Operating System from Scratch
开源OS项目(学习)
- xv6: MIT的教学操作系统(RISC-V/x86)
- Minix: Tanenbaum的微内核教学OS
- ToaruOS: 一个功能完整的hobby OS
工具文档
最后的话
操作系统开发是计算机科学中最有挑战性也最有成就感的领域之一。通过这个教程,你已经理解了计算机最底层的工作原理——从CPU上电的第一条指令,到用户程序通过系统调用与内核交互。
这些知识将帮助你:
- 更深刻地理解Linux/Windows等操作系统的工作原理
- 成为更优秀的系统程序员
- 在面试中展现对底层原理的深入理解
- 在嵌入式开发、驱动开发等领域获得优势
继续探索,继续构建!