从零开始的操作系统教程
让计算机初级程序员能够从零开始,逐步学习并实现一个64位操作系统
快速开始
5分钟看到效果:
cd 00-快速体验/
./run.sh从头学起:
- 先完成 01-环境准备 配置开发环境
- 阅读 02-基础知识 补充前置知识
- 从 03-BIOS与启动 开始动手
学习路线图
第一阶段:引导启动
00-快速体验 → 5分钟体验最终效果
01-环境准备 → 搭建开发环境
02-基础知识 → CPU、内存、汇编速成
03-BIOS与启动 → 理解计算机启动过程
04-编写Bootloader → 第一个引导程序
05-进入保护模式 → 从16位到32位
第二阶段:内核基础
06-加载内核 → 从磁盘加载C内核
07-内核初始化 → C语言内核框架
08-屏幕输出 → VGA文本模式输出
第三阶段:硬件交互
09-中断处理 → IDT和异常处理
10-键盘输入 → 键盘驱动
第四阶段:内存管理
11-物理内存管理 → 内存分配器
12-虚拟内存 → 分页机制
第五阶段:进程与调度
13-进程管理 → 进程结构
14-任务调度 → 调度器实现
15-用户程序 → 运行第一个用户态程序
技术栈
| 工具 | 用途 |
|---|---|
| C语言 | 内核主要语言 |
| NASM | x86-64汇编 |
| GCC | 编译器 |
| Make | 构建工具 |
| QEMU | 虚拟机测试 |
| GDB | 调试器 |
目录结构
├── 00-快速体验/ 5分钟体验版
├── 01-环境准备/ 开发环境配置
├── 02-基础知识/ 必备前置知识
├── 03-BIOS与启动/ 计算机启动过程
├── 04-编写Bootloader/ 第一个引导程序
├── 05-进入保护模式/ 从16位到32位
├── 06-加载内核/ 从磁盘加载内核
├── 07-内核初始化/ C语言内核
├── 08-屏幕输出/ VGA文本模式
├── 09-中断处理/ IDT和中断
├── 10-键盘输入/ 键盘驱动
├── 11-物理内存管理/ 内存分配器
├── 12-虚拟内存/ 分页机制
├── 13-进程管理/ 进程结构
├── 14-任务调度/ 调度器
├── 15-用户程序/ 运行用户程序
├── 附录A-调试大全/ 完整调试指南
├── 附录B-工具链详解/ 深入理解工具
├── 附录C-扩展路线图/ 15章之后的方向
├── 附录D-术语表/ 专业术语解释
└── code-repository/ 所有章节代码
适合谁
- 计算机初级程序员
- 对操作系统原理感兴趣的学习者
- 有一定编程基础但缺乏底层开发经验的开发者
学习建议
- 按顺序学习 - 每章建立在前章基础上,不要跳章
- 动手实践 - 亲自敲代码、编译、运行,不要只看
- 善用调试 - 遇到问题先查”常见错误.md”,再用GDB调试
- 做练习题 - 至少完成🟢基础练习,巩固核心概念
- 对比检查点 - 卡住时对比检查点代码找出差异
预计学习时间
| 阶段 | 章节 | 时间 |
|---|---|---|
| 引导启动 | 00-05 | 2-3周 |
| 内核基础 | 06-08 | 1.5-2周 |
| 硬件交互 | 09-10 | 1-1.5周 |
| 内存管理 | 11-12 | 1.5-2周 |
| 进程调度 | 13-15 | 2-3周 |
| 总计 | 8-12周 |