自制 os 极简教程1:写一个操作系统有多难 (2)

你读完这本书,结合着网上的资料和自己动手实践,已经可以用自由意志来对照葫芦画瓢的操作系统进行微调了。此时你已经成功度过了初期,开始向中期迈进!

不过别看一句话就总结完了,这中间你很可能会放弃,因为单单这本书的知识量就非常庞大了,如果之前从没有接触过,想要消化它,不是一件简单的事。

比如我在这个阶段,就中途放弃过两三次,因为我老想着跳过一些我觉得“没用的”章节,可往往都是看到后面,又要重新翻回来把前面的补上。有的时候也因为,明明和书上写的一样,但我的程序就是报错,导致后面的没法进行。操作系统就是这样,前面的加载 loader、设置中断、设置分段分页、进入保护模式这些步骤是串行的,每一步都不能出一丁点错误,否则后面的步骤会被前面的步骤卡住,遇到问题没法跳过,就像你做一张数学试卷,必须从第一题开始顺序做到最后一题,而且前面的正确了才能往后继续做一样。

自制 os 极简教程1:写一个操作系统有多难

中期

千辛万苦来到中期,这里的人可能已经不多了,但到了这里你会认识一大批和你一样在挣扎的人,新世界的大门可能就此打开,所以对你来说,其实你会觉得自己做操作系统的人好多啊,而且高手如云。

因为虽然你可以按照自己的意志对写好的操作系统有一些微调,也对操作系统的各个部分有了一个模糊的认识,但总是甩不开你所看的书的影子,简单说就是没见识

我当时呢,就被《操作系统真相还原》里的操作系统的思路舒服着,总是认为就应该把内核映射到内存高端的空间上,要用很取巧的办法设计页表。总之就是见识少,因为只知道一种实现方式,所以觉得天下的操作系统都是这个鬼样。

因为好歹是有点知识量在了,这个阶段一些操作系统领域的大牛(反正是比你厉害很多的人啦),会稍稍理一理你了,可能语气会从原来的拉黑,变成“哦”,再到现在的“嗯嗯”。

你也会加入到一些群或者一些社区当中,认识更多的大佬。你会发现,你眼中的这个操作系统,在他们眼里就是个其中一种很常规的或者说很过时的方式而已。于是乎你在慢慢的影响下,也打开了思路,决定了解更多的操作系统。

我呢,当时的选择是阅读 linux 源码,并尝试仿写一个(最后仿写这一步放弃了)。

这我感觉,只要这一步你的选择是了解一款经典的操作系统,那还能选什么呢,只能是 linux 吧哈哈。

这一时期的书籍呢,也比较多,我的话是通过《linux 内核设计的艺术》来简单了解 linux 的整个流程和脉络,再通过《linux 内核完全注释》配合着 linux 的源码进行重点源码逐行了解,还通过和一款开源操作系统 bookos 的作者进行交流,进一步了解一个成熟操作系统需要考虑的问题。

自制 os 极简教程1:写一个操作系统有多难

linux 有些了解后,便通过仿写的形式来进一步加深理解。但仿写最终放弃了,因为即便是 linux0.11 的源代码,里面都非常复杂,完全仿写还是很费时间的。于是便将自己认为纯苦力的工作简化,比如 linux 会根据内存大小来划分内存区域,我就直接写死了 32M 内存。再比如 linux 支持的硬盘数是动态变化的,我就直接只支持一块硬盘,这样里面好多数组,for 循环,就都展开了,我觉得对理解一个操作系统,这些工作无关紧要。

这里说个小插曲,读 linux 源码,有时候差点没把我气死。linus 这个人太调皮了,好多地方的注释写的大概是这种风格。/*_ emm,这里我也不知道有啥用,不过先写上吧,我乐意,嘿嘿 _/
对于正在苦苦理解源码的我,简直不友好

这时候找书便不再是你的难题了,你会自发的去找自己需要的书籍,并且每个人想关注的点不同,也会找不同的侧重点去深入了解。比如 linux 早期版本中是没有网络模块的,所以如果侧重点在网络编程,那就专门找如《linux 内核网络模型》这种书。有时候一些驱动程序,和一些比较好的操作系统变编程习惯,我也会通过如《一个 64 位操作系统的实现》这类书的部分章节来强化。

而且这个阶段你不在寂寞,会有很多同行者和你一起,也会有很多小白请教你问题。

后期

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpysff.html