我这个学期最幸运的事情就是在王聪的帮助下听陈老师的讲课,系统地学习Linux操作系统知识。然而,Linux内容太庞大,而且大都不容易理解,加之自己基本功不好,所以“有幸登堂,无力入室”,虽然的确学到了不少知识,但是,距离真正的专业水平,还有相当大的差距。
我最遗憾的事情就是自己没有把陈老师的代码全部动手实践出来,即便实践过两个最简单的,也是看着王聪做完以后才找着他“临摹”出来的。而且,讲到驱动一章时,我因为考试,也未能去听课,实是一种遗憾。
不过,听完这一学期课后,我对Linux操作系统内部实现的确有了进一步的了解。对于我学到的东西,我暑假会用我自己认为的最通俗语言总结出来,和新成员一起分享,希望对大家会有所帮助。在这里,我对自己学习这本书的经验做一个简单的总结。
首先,学习操作系统知识离不开上机实践,所以我们必须搭建好自己的上机环境。我就是因为没有搭建好自己的上机环境,才导致许多代码没有得到实践,这是一种巨大的损失。要学好内核原理,对一个向我这样的初学者来说,搭建虚拟机是必须的。我在这里把自己的环境列出,希望以后的同学不再走我走过的弯路:
1.使用VMware Workstation是最明智的选择。
原因有三:其一,这个虚拟机可以使用优盘,这是VirtualPC所无法比拟的。其二,这个虚拟机的速度很快,我觉得在我的机器上可以达到真实系统速度的60%以上(已经很快了)。第三,这个虚拟机的图形界面做的很好,使用非常简单。
2.同时在虚拟机上安装2.4 和2.6 两种内核版本。现在2.6 已经渐渐成为主流,我们学习任何教材都是以原理为主,而真正应用时还是以市场为主导的,所以2.6必须学习。
3.一定要记得使用虚拟系统之前,把虚拟系统的文件备份出来,下次万一调试坏了,直接从Windows中复制粘贴就行了,不必再重新安装系统。用虚拟机装系统可是一件很消耗耐力的事情。这些文件是在你安装虚拟机时指定目录下的,但是要注意,Vmware的虚拟文件不支持2G以上的,所以,每个虚拟机实际上根据你安装的大小不同,存在许多个文件,一定要把它们的整个目录一起复制下来。我的两个系统安装下来的虚拟文件一共有6G。
4.这里再告诉大家VMware Workstation的另一个优点:你的那个备份文件可以在真正的Linux系统下使用。有一个很小的软件叫Vmplayer,这是一个虚拟机“播放器”,它不能够产生虚拟机文件,但是可以使用你上一步所备份的虚拟机文件。而且,这款软件的Linux版的图形界面和Win下的一样简单实用,你可以在Linux和Windows下使用同一份虚拟机文件。
请相信,这样的虚拟环境足以让你适应所有操作系统知识的学习了。
记得刚拿到《Linux操作系统原理与应用》这本书时,我和王聪说过,这本书很好,能够把自己以前的知识很好地衔接起来。但是,后来发现这本书后面的知识对我而言还是很有难度的。这本书是比较薄的,以往的经验是计算机类的教材薄对于初学者而言并非一件好事,因为你要完全理解其内容,必须查阅大量的资料,或是具备更多的基础知识。下面,我就从我的角度来谈谈学习这本书所需要的知识。
1.C语言。说实话,我没有系统地学习过C语言,我对C语言的认识都来自于C++(请注意,C++ 是C的超集这一说法是片面的)。因此,对于C中函数指针,类型转换以及C的设计风格的功底不扎实,导致我在后来的学习上吃了大亏。说句可能会让你笑我的话,我现在使用printf()函数都得看着手册,这样的基本功确实太不扎实了。因此,如果希望深入学习Linux的同学,C的功底一定要很好。
2.汇编语言。很庆幸我上个学期得到一本讲汇编的好书:《Professional Assembly Language》,这本书图书馆有中文的,红皮,讲的是AT&T格式的汇编。大二下半学期把这本书中绝大部分代码都一个一个地输到计算机里实践过,虽然好久不用了有些生疏,但是对于《Linux操作系统原理与应用》中所涉及的汇编代码基本上都看得懂。更重要的是,学完汇编,你对一段C代码在机器中如何实现会更清楚。举几个明显的例子,比如,对进程用户空间中的数据段、代码段这几个部分的理解,你可以不费太大的功夫,因为在学习汇编时.bss段,.data段和.text段的代码你都亲自写过,只要用心理解《Linux操作系统原理与应用》中操作系统的知识,就能很快理解。还有就是后面将系统调用和函数调用的区别时,你也能比较容易地理解其中原委,因为《Professional Assembly Language》中给了你一套用汇编进行系统调用的法则,和函数调用对比,你就明白其底层的不同了:一个是用系统中断,而另一个是用call指令。 我一直坚信要深刻地理解一门高级语言,汇编是必须掌握的,更何况是学习操作系统呢。
3.操作系统的基础理论。说实话,我以前学过操作系统,但是荒废了。我到听陈老师讲课之前,一直都认为“虚拟地址”这个概念就是我们Windows里用硬盘扩展RAM的那部分内存的地址,呵呵,太可笑了。其实,如果你没有操作系统的知识,《Linux操作系统原理与应用》也是一个不错的入门,但是,必须要下根大的功夫了。我还算看了一点操作系统理论,但还是对其中许多知识的理解感到很吃力。坦白的将,到现在我对内存中内核空间里的东西都很模糊,对内核中的同步和设备驱动还不甚了然,希望暑假能够补习上来。
总的来讲,我觉得陈老师的《Linux操作系统原理与应用》一书就像《C++Primer》一样,虽然名字叫的貌似简单,但是绝对不是一本容易掌握的书。除了学习和实践,还必须有其他的参考书,我在这里给出我的基本参考书供我们初学者参考:
《Professional Assembly Language》,上面提到过。
《自己动手写操作系统》。如果你和我一样,也是一个浮躁的人,建议找一本看看。这本书总体上其实并不好,因为我感觉作者是想到哪里写哪里,而且他介绍的虚拟环境也不适用。但是,他对你的帮助是对一些底层的硬件知识讲解的特别详细,而且都有汇编代码的实现,这是绝大多数书籍都没有的优点,因此拿来参考确实不错。
《Unix环境高级编程》、《Linux Kernel Development》、《Understanding the Linux kernel 3rd》。这三本书列在这里做参考资料其实有点不合适,因为坦白地讲,这三本书的分量都比《Linux操作系统原理与应用》要重。但是,跟着老师走,在这三本书上找出《Linux操作系统原理与应用》中提到过的但又没有进行深入讨论的知识进行学习,无疑可以为你以后读这三本书打下一个牢固的基础。记住一点,你要学习的是Linux,而不是任何一本书,这里没有考试,不用搞这个。
其实,书是死的,而人是活的,把自己不会的知识拿来向别人请教,把自己学到的东西分享给别人,是提高自己水平的最佳途径。这点我们Linux兴趣小组每个人都做得很好,每个人都很有热情。
认真地复习一下才发现,我自己至今对这本书中许多知识还没有掌握,希望在暑假的实践中能够得以弥补,也希望有这方面兴趣的同学可以通过我们小组的新闻组(http://groups.google.com/group/xiyoulinux)和我们一起学习。


hery_yang 于 2009-10-20 15:39:51发表:
唉,听你这么一说,我心都凉了,c语言学的差的就,怎么办?》
seasleeve 于 2009-10-10 00:04:07发表:
抽空也来听听陈老师的课,特别是我迷糊的地方
slayerzlvc 于 2009-10-09 18:31:25发表:
楼主用的软件,我公司电脑都用着……
js001sdx 于 2009-10-09 16:50:48发表:
好文!!帮顶一下