红联Linux门户
Linux帮助

操作系统课程设计完成感想

发布时间:2008-02-21 10:15:27来源:红联作者:Flindzvt
  作者:菊花飘香

  经过近三个星期的假期,终于完成了操作系统课程设计。这个课程设计可以说是至今我所遇到过的最困难的一个课程设计,也是耗时最长的一个课程设计,也第一次让我写了一份64页的实验文档共万多字(当然有60%是代码)。

  课程设计的工作最早开始在07年12月,当时只是利用零散时间完成了Windows平台的I/O设备项目。由于当时还要完成原理课的实验,所以没有足够的时间去完成和思考选题的内容。

  上学期考试前夕,听完了尹老师的指导课后,喜欢尝试新事物的我决定了以Linux作为主要的开发环境,而且选择了文件系统项目。

  在此需要感谢尹老师对我选题提出建议,并借给我一些参考资料。他建议我可以做两件事情:一是修改Linux内核,对EXT2文件系统的功能做删减;二是自己动手做一个最简单的文件系统。

  开始我打算完成前者,并以为用假期前一个星期的时间可以完成。但最后证明这是不可行的。这一个星期只够我与队友讨论如何细化选题,如何分工。但由于我与队友掌握的资料不同,另外文件系统整体性以及假期相互通信的不便,让我们难以分工合作完成一个文件系统。队友最后转去完成内核定时器部分。我认为这是本次课程设计的最大缺陷。

  头一个星期,我学习了EXT2文件系统的总体框架,以及一些重要的内核代码,并动手完成文献中的例子。虽然能成功地完成内核编译,但可能是因为文献的系统内核是2.4.18而我机器上的是2.6.15,实例中需要的文件和语句,在我的内核代码中却找不到。比如实例中要修改include/linux/ext2_fs_sb.h,而我的内核中没有这个文件。更重要的是实例要在fs.h中的“struct ext2_inode_info …”后添加语句,而内核代码根本就没有这段语句,无法插入。工作做了一半,只好停下来。虽然不成功,但也让我了解了EXT2文件系统,知道超级块、i节点对应原理课的哪些概念。这算是理论联系实践,也对后面的工作有很大的帮助。更重要的是,这让我对Linux内核编程产生了兴趣,并希望能参加《典型操作系统设计与分析》的学习。

  之后,我决定自己动手,参考教材对应的实验指导,完成一个最小型的文件系统。这主要会遇到两个困难:一是这样的系统(所设计的系统一共有将近20个模块),需要用多文件结构进行编程,才能让程序可读性强、有模块化,但我不会make和makefile的知识,这需要学习(其实我还要学习如何在“简陋”的Linux下进行编程);二是一个文件系统不管有多么地小都要涉及一些基本的典型算法和典型数据结构。本文件系统就涉及了二级文件目录管理法、成组链接法、索引结构、系统已打开文件表……

  所以我边做边参考网上资料,学习Linux使用、make使用,最深印象是我在makefile中因缺输入TAB,而make频频出错说缺少分隔符;一边看参考代码也一边回顾教材的论述。

  经过一个星期,我看懂了参考代码,也完成了设计工作,开始调试。调试是一项困难的工作,特别是在Linux这个“简陋”环境,因为没有VC的Debug 。我是靠gdb和打印一些重要信息来“过日子”的。调试的这段时间也是最快乐的,虽然曾为一个错误调试了将近2天。一个表现出来的错误往往是由于多个错误引起的,发现一个问题,解决一个,又发现再解决……这有一种“环环相扣”、“越陷越深”的快感。我觉得调试是一种很有趣的工作,像福尔摩斯破案一样,一步步缩小检查的范围,直至解决问题,有时还要回到文档检查整个系统的总体设计。

  当然我的作品还有一些问题,这些问题现在还在修正。如文件系统的SHELL方式中,键入read filename时会产生指针向空位置的错误(“段错误”),由于自身的技术问题与时间的原因,该错误至今尚未解决。现在估计在调用read函数前某些参数改变了,比如操作标志f_flag。另外在整个完成过程中时间也是控制不当,造成“前松后紧”的局面,在工作前期没有抓紧时间,但完成期限迫在眉睫时,才抓紧时间。不过似乎感到在这段时间工作效率特别高,可能人有时候要逼出来吧。

  通过这次课程设计,我对进一步学习产生兴趣。我认为这才是最大的收获!
文章评论

共有 0 条评论