Skip to content

我们将实现什么

在开始构建操作系统之前,我们先快速了解一下我们将要实现的功能。

1000 行代码的操作系统的功能

在本书中,我们将实现以下主要功能:

  • 多任务处理(Multitasking):在进程间切换以允许多个应用程序共享 CPU。
  • 异常处理器(Exception handler):处理需要操作系统干预的事件,如非法指令。
  • 分页(Paging):为每个应用程序提供独立的内存地址空间。
  • 系统调用(System calls):允许应用程序调用内核功能。
  • 设备驱动(Device drivers):抽象硬件功能,如磁盘读写。
  • 文件系统(File system):管理磁盘上的文件。
  • 命令行 Shell:供人类使用的用户界面。

未实现的功能

本书中不会实现以下主要功能:

  • 中断处理(Interrupt handling):相反,我们将使用轮询方法(定期检查设备上的新数据),也称为忙等待。
  • 定时器处理(Timer processing):不实现抢占式多任务。我们将使用协作式多任务,即每个进程自愿让出 CPU。
  • 进程间通信(Inter-process communication):不实现管道、UNIX domain socket 和共享内存等功能。
  • 多处理器支持:仅支持单处理器。

源代码结构

我们将从零开始逐步构建,最终的目录结构如下:

├── disk/     - 文件系统内容
├── common.c  - 内核/用户共用库:printf、memset 等
├── common.h  - 内核/用户共用库:结构体和常量的定义
├── kernel.c  - 内核:进程管理、系统调用、设备驱动、文件系统
├── kernel.h  - 内核:结构体和常量的定义
├── kernel.ld - 内核:链接器脚本(内存布局定义)
├── shell.c   - 命令行 shell
├── user.c    - 用户库:系统调用函数
├── user.h    - 用户库:结构体和常量的定义
├── user.ld   - 用户:链接器脚本(内存布局定义)
└── run.sh    - 构建脚本

TIP

在本书中,"user land"有时简写为"user"。将其理解为"应用程序",不要与"用户账户"混淆!