译 者 序
想要了解一项技术,除了阅读相关的技术文档之外,最好的办法就是造“轮子”。接近 于圆形的轮子当然能跑起来,而接近于方形的轮子也有可能跑起来,只是费力一些。造“轮 子”的目的不是获得轮子这个结果,而是掌握制造的过程。在这个过程中, 一定会碰到问 题。无论是用了完美的还是略显笨拙的方法来解决这些问题,都将转化为制造者的知识。
本书就是这种“做中学”思维的成果。从专业的角度来看, MikanOS这个操作系统有些 过于简略。但是,任何参天大树都是从一颗种子成长起来的。一颗种子能长成多高、多大的 树,与信心和付出的时间相关。我们翻译这本书,就是为了给读者引一引路,并增加一些可 参考的材料。
由于译者水平有限,如果读者发现了什么错漏,那不必怀疑:正确往往归于读者,错误 往往归于译者。
引 言
本书的主题是自制操作系统。从零开始,用30章做出一个简单的操作系统:MikanOS 。 在30章结束之后,你将看到下图所示的效果。图中的一切都是依照本书的内容实现的。当 然,这些功能都是独立运行的,没有使用其他操作系统。
30天后的MikanOS
图中显示了一些在MikanOS上运行的应用。其中,左上显示的是 MikanOS的用户手册(日 文);左下是一个旋转的彩色立方体;中间是一个黑色背景的终端;右下是富士山的 JPEG照 片。此外,还有几个小型应用正在运行。例如,右上角有一个窗口,显示操作系统启动后的 运行时间(单位为0.01s),其上还有一个鼠标指针。总的来说,看起来是不是很真实?
V
操作系统(Operating System)是计算机中的基础软件,比如常见的Windows 、macOS和 Linux。操作系统在计算机的使用过程中发挥着重要作用——它通过提供网络浏览器和文字处 理器等常用功能来支持应用开发,通过分配计算资源来实现多个应用的同时使用,并且提供 了统一的操作方法。操作系统使计算机更加强大,更易于使用。
本书的目标是制作一个无须借助其他操作系统即可运行的操作系统,而不是在既有的操 作系统(如 Windows)上运行的应用。不借助其他操作系统的功能意味着,比如在操作鼠标 时,自己编写鼠标指针(箭头)在屏幕上移动的过程;使用键盘输入命令并按下回车键时, 自己编写启动命令的进程。此外,还必须创建一个函数来探知并管理计算机的内存。几乎所 有的处理过程都是自己完成的,这就是自制操作系统。是不是很激动人心?
乍一看,自制操作系统似乎是在浪费时间。虽然现在已经有了很多功能强大的操作系 统,自制操作系统是在模仿它们,但是自制操作系统能给你带来宝贵的经验。探索计算机系 统的工作原理会激发你的求知欲。从实用的角度来看,了解硬件和操作系统的工作原理将拓 宽软件工程师的工作范围:研究操作系统如何工作,并探索如何创建高效运行的应用。或 者,在调查系统故障原因时,可以利用调试操作系统的经验来深入研究。当需要阅读 Linux 内核的代码时,如果有制作操作系统的经验,那么读起来会容易得多。
现在我们用专业术语介绍一下 MikanOS的功能:MikanOS是一个通过UEFI BIOS启动的 操作系统,以 64位模式运行,具有抢占式多任务、窗口系统、分页内存管理和系统调用等 功能。如果你不知道这些专业术语的含义,也不要紧,本书的任务就是在实践中解释它们的 含义。
目标读者
如今,个人可以创建复杂的网络服务和支持VR的游戏。如果你购买了一台面向物联网的 小型计算机,就可以立即开始从事十年前无法想象的高级电子工作了。以如何构建编译器和 CPU为主题的书也已出版。
虽然制作各种东西变得更加容易,但制作操作系统却变得更加困难。这是随着计算机的 日益复杂而演变出的结果。本书的目的就是揭示隐藏在黑暗中的操作系统原理,确保自制的 乐趣依然存在。为什么不与作者一起手工制作操作系统呢?
本书是2006年出版的《30天自制操作系统》的衍生成果。这是一本非常好的书,2021年 仍在印刷。但自该书出版以来,个人计算机已经发生了很大的变化,有些信息(尤其是与硬 件相关的信息)已经过时。于是,我决定写一本新书1 。因此,本书的内容是在编写此书时市 面上销售的计算机上进行测试的(但不保证在所有型号的计算机上都能正常工作)。
本书的目标读者是写过简单程序的人。如果你有几百行代码的编写经验,那么应该可以 毫无顾虑地阅读本书。但如果你从未编写过程序,那将会很吃力。
本书中的MikanOS是用C++编写的。对于那些不熟悉C++的读者,书中会提供一些解 释。要了解更多,可以参考本书中的说明,也可以参考相关的入门书籍和网站信息。你可能 决心在开发操作系统之前完全学会C++,但作者认为,在开发的过程中根据需要学习 C++ , 会更容易保持积极性。脚踏实地,勇往直前吧!