操作系统(英语: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 的好处在此就体现出来了。