不知道正在阅读本文的你,是否是因为想自己动手写一个操作系统。我觉得可能每个程序员都有个操作系统梦,或许是想亲自动手写出来一个,或许是想彻底吃透操作系统的知识。不论是为了满足程序员们自带的成就感,还是为了面试找工作时能更深入地和面试官探讨(装逼)。
那写一个操作系统究竟有多难呢?我结合自己的经历给大家讲一讲。
写一个操作系统有多难先说一句废话:会者不难,难者不会。
冷启动对于零基础的人,甚至是计算机知识零基础的人来说,难。难点并不在于操作系统的代码量本身,而在于任何一个事物发展初期都会遇到的困境,冷启动。
我不知道应该看哪本书作为入门书籍,甚至不知道应该看书还是看网络上的文章,还是找一个领路者带你入门,甚至还在被一些讨论自己做一个操作系统到底有没有意义这个问题纠结着。
好多人在这个冷启动时期,就被弄得没脾气了。
你可能比较幸运,找到了一本入门书籍,刚好作者的文笔和思路比较对你的胃口,于是度过了冷启动时期。
但你也可能不太幸运,找了一本难读的书籍,或者是优秀的作品但刚好不对你的胃口,于是就从入门到放弃了。
我当时的第一本启蒙书籍,是《30 天自制操作系统》,好多人的第一本可能也是这个,因为书的标题就直戳了当地写了 自制操作系统 这几个字,而且一看哇 30 天就能搞定,一下让好多不敢跨出第一步的人有了信心。
这本书会把读者当作完全没有计算机基础的小白,所以很多地方非常友好,跟着它走一遍完全可以让你度过冷启动时期了。
但这本书同样也有让人想中途放弃的一些点,比如我就很烦这些地方。一个是它从官网上下载的源码是日语注释的,搞的当时我好多地方还找我朋友帮我翻译。另一个是他用的工具都是这个作者自己写的,这固然比较牛逼,但我就想难不成做操作系统连个现成的业界常用的工具也没有么,我学了你的工具也没有普适性啊。再有就是作者后面的篇幅花好多时间讲图形界面要怎么做,怎么在屏幕上画一个个方框作为窗口,还想互不影响。这个因人而异吧,我是觉得不必花费如此大的篇幅,这不是想写操作系统的人的痛点所在。
总之,通过一本书,或者一篇文章,或者一个领路人的带领之下,你迈出了第一步,度过了冷启动时期,来到了初期。
初期你照葫芦画瓢,一个指令都不敢修改,终于照着书上的代码,成功在一个虚拟机或者真机上看到了“hello world”,或者牛逼一点看到了 AAABBB 线程切换方式交替打印的字符串。
这时候你写操作系统的恐惧已经没有了,但你不满足于现状,因为这个“hello world”并不是你自己的东西,你甚至都不知道里面的代码是什么含义,可能当时只是 copy 过来的。
你不在需要一个手把手教你的书籍,更多的是需要告诉你通用的原理,以及操作系统思想的书籍。
我在这个时期的书籍是《操作系统真相还原》,这本书一上来就讲述了一些你可能感到困惑的问题,
0.1 操作系统是什么
0.2 你想研究到什么程度
0.3 写操作系统,哪些需要我来做
0.4 软件是如何访问硬件的
0.5 应用程序是什么,和操作系统是如何配合到一起的
0.6 为什么称为“陷入”内核
0.7 内存访问为什么要分段
0.8 什么是平坦模型
我一看这目录我的妈呀,这不就是我读完《30 天自制操作系统》后所产生的疑问么!于是这本书可以说是我在这条路上,读的最爽的书,一个个疑问就是在这本书里被一一找到答案的。
不过其实我觉得对于有计算机基础并且还不错的人来说,这本书完全可以作为冷启动时期的第一本书了。
这本书不会像 30 天一样,在手把手这种细节上下太大功夫,比如 30 天这本书很逗,居然在教你如何用键盘按出 512 个 0 这个问题上写了好多行,还说你家如果有小猫的话可以棒棒忙。所以这本书的篇幅会放在一些真正重点的问题上。