操作系统(英语:operating system,缩写:OS)是管理计算机硬件与软件资源的计算机程序,同时也是计算机系统的内核与基石。操作系统需要处理如管理与配置内存、决定系统资源供需的优先次序、控制输入与输出装置、操作网络与管理文件系统等基本事务。操作系统也提供一个让使用者与系统互动的操作界面。        —— 维基百科

操作系统最重要的任务就是管理硬件然后给上层用户提供一个封装良好的使用环境,使得上层用户可以直接使用操作系统提供的某些抽象概念而不需要去了解底层的硬件的操作与交互。

一般来说,操作系统对硬件的管理会涉及到以下的管理方式以及一些概念的抽象:

硬件 抽象
处理器 多进程
内存 分段、分页
磁盘 文件系统
各种其他硬件 外设

从零开始写个操作系统吧(目录)

  1. 从零开始写个操作系统吧 - 通过BIOS中断在屏幕上打印出一行启动信息
  2. 从零开始写个操作系统吧 - 通过 BIOS 中断读取磁盘数据到内存
  3. 从零开始写个操作系统吧 - 从 16 位实模式到 32 位保护模式

需要注意的是,在写操作系统之前需要一些基础知识,比如CPU的工作方式,一定的汇编语言基础和C语言基础,如果你觉得自己基础有所欠缺,推荐阅读以下两本书:

如果有能力的话,能把深入理解计算机系统(原书第2版)读一遍也是极好的。

本系列所针对的CPU都是Intel的x86系列的,使用的汇编是nasm格式的汇编(一直觉得AT&T的汇编有点反人类 :|)。使用的操作系统是Linux(cinnamon发行版),事实上Windows和MacOS也是可以的,但是我选用Linux写代码的原因是Liunx下的工具比较多并且使用起来都比较方便,如果可以的话,也推荐你最好也使用Linux来进行开发工作。在开发的过程会使用到以下的软件:

  • qemu - 运行我们的操作系统的虚拟机
  • nasm - 汇编器
  • gcc以及一些编译链接的套件 - 编译C语言并生成可执行文件

以上这些工具都可以使用Debian的包管理工具apt-get进行安装,Linux的好处在此就体现出来了。