NeXon完成纪念

NeXon v0.0

项目地址

随笔

NeXon开发的设想要从大二下的操作系统实验课说起。在操作系统实验课上,即便老师已经将操作系统的理论讲述了一遍后,到我们做实验时却又感觉无从下手。根本原因在于我们手头上没有充分的指导资料来应对老师的需求。再加上我做的是保护模式,资料就更少了。这就导致了许多同学在选择实模式和保护模式的问题上倾向了实模式。而我在开发NeXon的过程中越来越感觉到只有做保护模式才能更好的理解现代操作系统的精髓。例如,保护模式的二级分页机制在实模式中并未涉及。同时,保护模式需要自己编写所有和硬件交互的程序,即驱动程序。编写驱动程序的过程是能够加深自己对操作系统本质的理解——操作系统是管理计算机硬件与软件资源的计算机程序。于是从lab2开始,我就在设想能不能够通过自己的努力来填补这一部分的空白。而在这种想法的指导下,我在写实验报告时就想到未来可能要将自己的报告作为tutorial的蓝本。因此,我详细地将所用到的基础知识和自己的理解记录下来,以致于到lab3的时候我给助教提交了68页的实验报告。有同学会说:“卷王!”。但我想说:”适千里者,三月聚粮。“于是后面在结课之后我也陆陆续续地在发展NeXon,到今天,NeXon具有了二级分页机制、内核线程、用户进程、线程/进程5状态模型、进程/线程回收、并发同步机制、动态内存分配、Ext2文件系统和Shell等。

nexon-architecture

实际上,NeXon的开发并不轻松。在最开始学习操作系统开发时,我是经常几本书交换着看。因为我讲过,我们手头上没有充分的指导资料来应对老师的需求。于是,我们一直是在近似老师的需求。毫无疑问,我们阅读的资料越多,近似程度就越高。在这其中,我看到了许多优秀的书籍,如《从实模式到保护模式》、《操作系统真象还原》(感谢郑戈涵提供的资料)等,这些优秀的书籍使得我得以快速地入门。但在入门之后,尤其是当熟悉了toolchain、nasm汇编和基本的硬件知识后,我开始出现了近似疯狂的代码洁癖。也就是说,我希望NeXon的共计6506行代码纯粹是自己写的。这在后期会严重拖慢开发速度,我甚至用了一个月的时间才最终实现fork,exit和wait。但随之而来的好处是,NeXon宣告了从代码模仿到代码原创的转变。NeXon和我所看的资料的一个显著区别是NeXon主要基于C++开发且不含有任何内联汇编,而《从实模式到保护模式》用的是纯汇编,《操作系统真象还原》用的是汇编、C和内联汇编,而且在后期出现大量goto语句,但goto语句一句也是不能容忍的。

最后,可能有同学会好奇为什么我的OS取名为NeXon。原因很简单,致敬。注意到Linus和Linux,就不难理解Nelson和NeXon。事实上,NeXon中有许多命名也是出于致敬的目的,例如NeXon上的Ext2文件系统标识为”19241112”,可以猜下是什么意思。

下面是Shell的一些截图,实际上许多重要的功能如动态内存分配、fork/wait/exit等需要从代码层面才能更好地展示。

示例1

示例2

示例3

示例4

示例5

示例6

示例7

示例8


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!