序
最初接触到自制操作系统的书是《30天自作操作系统》,因为这本书,我对如何制作操作系统有了基本的了解。 但这本书有些本末倒置了,重点的内存管理、进程管理、文件系统等方面介绍得太少,反而把大篇幅花在了gui和shell上。
我看的第二本自制操作系统的书是《一个64位操作系统的设计与实现》,64位操作系统在不少地方与32位操作系统不同,比如进程切换的方式,不过在用C语言编程时对此没有多大感触 。这个操作系统的代码不够精简,不宜阅读,我并没有读完这本书。
后来想看看实际的操作系统源代码,首选的肯定是linux,但如今linux的代码上百万行,不易阅读。但早期版本的linux源代码倒是不多,而且网上有相关的书作指导,最后我选择了linux0.11版本作为研究对象,《linux内核完全注释:基于0.11内核》作为辅导书,开始研读代码。
操作系统的代码量很大,不易理解,尤其是文件系统方面,多次阅读我还是不得其中门路,有些灰心丧气。
这时,我认为可以从零重新实现linux0.11,逐渐地理解操作系统设计的思路和解决各种问题的方法。
将要面临的问题
目前,我已经修改了linux0.11的代码,并编译出可运行的内核,但在执行shell时会损坏文件系统,由于没有shell的代码,也就没法调试,我准备自己写一个简陋的shell。
linux0.11的可执行文件是a.out格式的,网上关于编译a.out格式可执行文件的资料太少,我会将linux0.11支持的可执行文件格式改为elf格式。elf格式可执行文件的运行还要牵扯到静态库,动态库,怎么调用系统调用也是一个问题。
linux0.11在bochs中运行时需要插入一个文件系统磁盘,接着就不能用gui界面调试了,为了解决这个问题,我准备将内核与文件系统放在同一个硬盘中,这样的话就需要改改bootloader,让它在文件系统中找到kernel。
如何一步步写出linux0.11也是一个考验。我也只是一个操作系统的新手,对于如何整体把握操作系统的逐步实现需要花费大把时间思考。
最后祝愿大家能在操作系统上更上一层楼。