Horbynz hub

「从零到一」实现一个 x86 的内核

Word count: 839Reading time: 2 min
2025/01/02
loading

内核与操作系统

在开始之前,我需要先定义下内核要做什么东西。比如说,内核和操作系统是同一个概念吗?我的观点,内核是最基础的功能,操作系统囊括了内核。那内核负责什么功能?什么功能可以称得上最基础?答案是管理任务,也即内核等同于任务管理器

广义上,我们需要一个操作系统,除了是想借助计算机去做一些计算以外,另一个关键的需求是任务管理,我们希望可以一边在浏览器上网上冲浪,另一边还挂着网易云来听音乐。按这个思路出发,当我们实现了一个软件,这个软件可以记录当前系统有多少个任务、可以完成任务的调度,那么就可以称得上是内核了

在此之后,加入协议栈、交互接口、设备驱动等等,就可以称得上是操作系统了

内核需要实现的模块

从机器通电启动,到内核最终运行起来,中间存在很重要的一个阶段:

最后内核运行起来,其最终目标是管理任务。围绕这一点,需要设计一种机制来将某个确切任务记录下来,记录的地方必定是内存,因此,需要实现内存管理模块。其次,还要考虑任务的调度,即怎样中断与怎样继续执行,这便是中断模块和调度模块。在这个过程中,像中断模块是软件硬件结合的,还会涉及设备驱动的实现。完成这些事情之后,后续要考虑的就是将任务保存下来,并提供一些接口来访问任务,即实现文件系统与内置命令,至此内核的模块便划分为如下六个模块:

因此,这个系列将会分为 7 篇文章

hoo

当知道了内核要做些什么东西后,这个 项目 就诞生了,我给它取了一个名字:hoo。但是也要指出,这个项目的初衷只是学习,内核里的每一个东西想要深究,都可以挖得很深。比如磁盘驱动,一开始只需要实现磁盘读写就够了,但往后可以去考虑对磁盘信息(ATA IDENTIFY DATA)的读取、对磁盘设备类型的兼容(ATA 标准)等等;又比如任务的调度一开始只需要实现 FIFO 就够了,但往后可以考虑任务优先级的抢占式调度等等。这是一个 0-1 和 1-100 的过程,这个系列命名为从零到一,用意也是在这里

参考资料

CATALOG
  1. 1. 内核与操作系统
  2. 2. 内核需要实现的模块
  3. 3. hoo
  4. 4. 参考资料