是从10年7 8月份的时候开始读这本书,之前读过于渊的那本自已动手写操作系统,然后觉得0.11内核或许是一个比较适合自已水平的选择,然后就开始动手了,本来预计大抵应该是半年的,没想到一下子花了差不多两年时间,中间由于工作的缘故,断断续续的,去年因为头疼也中断了大半年,工作以后,学习甚为不易,如果有机会的话,在学校里面会更珍惜时间的。关于工作和学习,题外太多,收住。
以下是个人的学习过程和心得:
这本书主要分成三部分,第一部分是1-5章,第二部分是6章以后是源代码,第三部分实验环境设置。
第一部分是理论基础,第3章说是编程的事情,第4章关于保护模式,第5章关于内核结构的,全书最难的部分
由于之前对保护模式有一定了解,所以前面几部分上手还行,第5章当时看的时候是一扫而过的,后来不断的回来翻,才发现有些内容,当你懂以后你就能够看懂,不懂的时候,死活也看不懂。。
第二部分开始,我个人是从bootsect.s开始,采用增量的方法,一点点的照着书的代码开始往里面加,从最开始在屏幕上显示loading...到最后shell实行起来,中间是由无数次的make和debug实现的。中间碰到了无数的问题,如开始的时候没有printf函数,自已参照别的书,在setup.s里面加了一个disp_str函数,后来实现printf时候,直接在里面裹了disp_str,然后自已忘记了,结果在move_to_user_mode以后,由于栈的问题一调用就出错退出,自已找了好久才发现,此类种种问题,有苦亦有乐。
第三部分是环境的搭建,如果不需要自已动手实现的话,可以不用看。我个人说说我自已的经验,我整个环境是用vmware里面装的redhat 9来作为编译环境的,然后代码是在windows下面用souceInsight看的,然后辅以editplus和ultraedit。secureCRT登到虚拟机上面编译,vim有时候用用,因为不怎么熟悉。
最关键的工具是调试工具,开始的时候用的是bochs自带的调试,因为最开始的boot部分是汇编写得,所以很适合,到了main函数以后因为代码基本上C代码了,所以感觉很费劲。进度慢了很多,碰到问题有时候要找很久,后来用了gdb 以后,确实很爽,非常推荐。
每天做的时候,都大概写一下工作日志,说明当天主要解决了什么问题,下一步还有难题。然后代码是用svn存得,最后总结的工作日志不到2万字,svn里面的版本号是100多个。
个人觉得书里面最难理解的是关于进程切换的TSS切换部分,当时有很多概念,书上看的时候模模糊糊,但实际上根本没有懂,然后通过调试一步步看寄存器和内存的变化,才慢慢的理解一些,所以说纸上得来终觉浅,自已试试还是有好处的。关于内存管理和文件系统,算法什么的其它操作系统书得很详细,都可以参考。
个人看得时候用的一些参考书目,供参考:
Linux内核设计的艺术
UNIX操作系统设计
Linux内核设计与实现 (LKD)
自已动手写操作系统(第二版叫Orange's,从策划上来说远不第一位版本的名字好)
现代操作系统
当然,这个论坛帮助也很大:http://www.oldlinux.org/oldlinux/
That's all.