本页面提供了“Build Your Own X”代码库中收集的操作系统开发教程的全面指南。它涵盖了从零开始创建操作系统的资源,范围从简单的引导加载程序到完整的操作系统实现。有关容器化和 Docker 的信息,请参阅Docker 和容器。
此处列出的教程旨在通过指导您构建自己的操作系统组件来揭示操作系统基础知识的奥秘。这些动手项目涵盖了引导加载程序、内核、内存管理以及跨 x86、ARM 和 RISC-V 等各种架构的完整操作系统。
操作系统开发涉及创建管理硬件资源并为计算机程序提供服务的软件。从零开始构建操作系统需要理解硬件接口、内存管理、进程调度和系统调用。
操作系统架构概述
大多数操作系统开发教程都遵循从基本引导加载程序到更复杂系统组件的渐进式路径
操作系统开发教程按主要实现语言分组,每种语言在性能、安全性以及学习曲线方面都提供了不同的权衡。
汇编语言提供了对硬件的直接控制,但需要详细了解处理器架构。
| 教程 | 平台 | 重点 | 难度 |
|---|---|---|---|
| 编写一个微型 x86 引导加载程序 | x86 | 创建最小引导加载程序 | 初学者 |
| Baking Pi – 操作系统开发 | 树莓派 | 基于 ARM 的操作系统基础 | 中级 |
C语言是操作系统开发中最常用的语言,因为它在低级控制和可读性之间取得了平衡。
| 教程 | 平台 | 重点 | 难度 |
|---|---|---|---|
| 操作系统:从0到1 | x86 | 完整的操作系统开发 | 中级 |
| 关于操作系统开发的小册子 | x86 | 操作系统基础 | 初级-中级 |
| 开发你自己的玩具级 UNIX-clone 操作系统 | x86 | UNIX-like 操作系统实现 | 中级 |
| 内核101 – 让我们编写一个内核 | x86 | 基本内核创建 | 初学者 |
| 内核201 – 带I/O的内核 | x86 | 键盘和屏幕支持 | 中级 |
| 为 ARM 构建一个最小多任务内核 | ARM | 多任务实现 | 高级 |
| 如何从零开始创建操作系统 | x86 | 逐步构建操作系统 | 初级-中级 |
| Malloc 教程 | 通用 | 内存分配 | 中级 |
| 探索虚拟内存 | 通用 | 虚拟内存实现 | 高级 |
| 使用 Linux 内核和树莓派进行操作系统开发 | 树莓派 | 基于 Linux 的方法 | 中级 |
| 操作系统开发傻瓜书 | x86 | 简化操作系统概念 | 初学者 |
C++ 提供了面向对象的抽象,同时保持了低级控制。
| 教程 | 平台 | 重点 | 难度 |
|---|---|---|---|
| 编写你自己的操作系统 | x86 | 完整的操作系统实现 | 中级-高级 |
| 编写一个引导加载程序 | x86 | 引导加载程序开发 | 中级 |
Rust 在提供内存安全保证的同时,保持了与 C 语言相当的性能。
| 教程 | 平台 | 重点 | 难度 |
|---|---|---|---|
| 用 Rust 编写操作系统 | x86_64 | 内存安全的操作系统开发 | 中级 |
| RISC-V Rust 操作系统教程 | RISC-V | RISC-V 操作系统开发 | 高级 |
| 教程 | 平台 | 重点 | 难度 |
|---|---|---|---|
| 从零开始的 Linux | x86 | 构建一个 Linux 系统 | 高级 |
来源:README.md278
本教程涵盖了各种重要的操作系统组件
引导加载程序是计算机启动时执行的第一段代码,负责初始化硬件并加载内核。
来源:README.md260-261 README.md275
内核是操作系统的核心组件,负责管理内存、进程和设备交互。
本教程涵盖了各种处理器架构,每种架构都具有不同的特性。
| 架构 | 特性 | 推荐教程 |
|---|---|---|
| x86/x86_64 | 最常见的桌面架构,复杂指令集 | 操作系统:从0到1,关于操作系统开发的小册子 |
| ARM | 节能,常用于移动设备 | 为 ARM 构建一个最小多任务内核,Baking Pi |
| RISC-V | 开放指令集架构,日益流行 | RISC-V Rust 操作系统教程 |
这些教程共同涵盖了以下重要的操作系统开发主题
内存管理涉及为进程分配和释放内存、处理虚拟内存以及实现内存保护。
| 教程 | 关键内存概念 |
|---|---|
| Malloc 教程 | 动态内存分配 |
| 探索虚拟内存 | 虚拟内存,分页 |
| 用 Rust 编写操作系统 | 内存安全分配器 |
来源:README.md270-271 README.md276
进程管理涉及进程的创建、调度和终止,以及促进进程间通信。
| 教程 | 关键进程概念 |
|---|---|
| 为 ARM 构建一个最小多任务内核 | 进程创建,多任务 |
| 开发你自己的玩具级 UNIX-clone 操作系统 | 进程调度 |
设备驱动程序为操作系统提供与硬件组件通信的接口。
| 教程 | 关键 I/O 概念 |
|---|---|
| 内核201 | 键盘和屏幕交互 |
| 使用 Linux 内核和树莓派进行操作系统开发 | 硬件接口 |
成功构建操作系统需要专门的工具
| 工具类型 | 目的 | 示例 |
|---|---|---|
| 汇编器 | 将汇编代码翻译成机器码 | NASM, GAS |
| 编译器 | 编译高级语言代码 | GCC, Clang, MSVC |
| 模拟器 | 无需真实硬件即可测试操作系统 | QEMU, Bochs, VirtualBox |
| 调试器 | 查找并修复问题 | GDB, LLDB |
| 交叉编译器 | 为不同架构构建 | ARM/RISC-V 工具链 |
构建自己的操作系统是最具挑战性但也是最有成就感的软件项目之一。这些教程通过直接实现操作系统内部机制,提供了结构化的学习路径。无论您对引导加载程序、内存管理还是完整系统感兴趣,总有一个教程能与您的经验水平和兴趣相符。