操作系统课程设计:模拟Unix的二级文件系统

学习札记 6 comments

        今年暑假的课程设计可真麻烦啊,前几天好不容易完成了数据库的课程设计,现在还在奋战操作系统,累死了,可是还没有做完。

        老师的要求是参考Unix的文件系统,然后用一个文件模拟磁盘,在一级文件系统下实现一个二级文件系统,在这个二级文件系统里面可以像Unix一样建立文件,打开文件,删除文件等操作,也就是给出该文件系统下的系统调用。

基本要求是:

  1. 使用Unix源代码中的数据结构、算法和思想。
  2. 磁盘驱动用一级文件系统针对大文件的读写代替
  3. 要求在文件系统和磁盘之间设置高速缓存。
  4. 实现的系统API:void ls(); int fopen(); void fclose(); int fread(); int fwrite(); int lseek(); int fcreate(); int fdelete();
  5. 所有的数据结构和子程序放在自己设计的库中,并设计小程序调用自己的二级文件系统。

高级要求:

  1. 使用面向对象的方法实现文件系统(我们知道Unix是用C语言写的,要化成面向对象的程序也不容易)。
  2. 如果可以的话,可以不使用二级文件系统,二直接编写一级文件系统,做到可以直接启动U盘的。

        我现在的目标是实现到高级要求的第一点。为了做这个作业,《莱昂氏UNIX源代码分析》是必看的,这些天我边看边在pdf文件上用acrobat作了注释,下面就是我对bmap()函数的注释,很多也是参考了莱昂氏的,不过都搞明白了,看起来蛮壮观的。

  

        莱昂氏注释的是Unix V6的源码,而且只是核心的近10000行源码。这几天看下来,如醍醐灌顶,当初上课时很多东西都没有搞懂,现在看到了源码,才知道它们之间千丝万缕的联系。现在我对Unix的源码的感觉是:

  1. 语法很奇特。也许是早期版本的C语言吧,里面的用法和现在有很多不一样的地方。如对很多事不声明类型的,而直接默认为int;函数的形式参数如果声明类型不是在括号里面声明的,竟然是夹在函数名和函数体之间,就像上图里第6426行;函数类型非常通用,貌似我看了这么久只发现了两种基本数据类型:int 和char,而且int竟然和char*可以等价,一切指针都是16位的数据类型,也就是说int可以表示指针,而char*也可以表示一个整形。
  2. 代码极为俭省。俭省的一个方面是变量名非常短,其实这是非常不好的,因为短的变量名很难实现“自解释”,我想这可能和早期的编译器有关,早期的编译器对变量名的长度有严格的要求,不能过长。另一方面的俭省是代码很俭省,能少写的不会多想,而其对资源的利用很节省,不会轻易开辟很大的资源,算法也尽量做到最优,可谓缺一字不可,真是“一字千金”啊。我想,一方面和当时的计算机资源现状有关,另一方面操作系统作为底层软件必须足够节约。
  3. 注释很少,这一点也是莱昂氏代码分析的价值所在。
  4. 编程技巧很高,我想这一点是Unix代码值得称道的地方,同时也是缺点之一。其中令我印象深刻的是对&和|的使用,发挥到了淋漓尽致,用它实现比较,除法,取模。但有些地方并不值得推荐,我觉得有些地方的处理对理解和模块化实现很不利。所以,Unix的代码是天才写的代码,但很多时候,代码要很多人合作,这是注重的是可交流性,而Unix代码在这一点上并不优秀。

      资料已经看了一个多星期了,今天才试着开始编码,遇到了很多问题,不过都在解决之中。相信这个课程设计完成以后,我对Unix的了解会加深很多。

 

旧一篇:« 我为什么要考研
新一篇:猫猫书画网站管理系统投入使用 »

作业  学习总结  操作系统  相关的文章

    程序易写,bug难调!  (2009-9-24 0:8:14)

    猫猫书画网站管理系统的设计  (2009-8-26 19:22:2)

    我的课程设计变成了持久战  (2009-8-22 3:49:25)

    Google OS要的不是市场份额  (2009-7-13 22:41:44)

    入侵检测课程设计  (2009-7-7 15:55:48)

    CPU、MS-DOS 与 IBM PC简史【转载】  (2009-5-9 23:1:57)

    数据库系统概论第三次作业  (2009-3-24 22:32:50)

    《数据库系统概论》实验报告——建立数据库及数据库完整性约束检测  (2009-3-14 20:6:1)

    信息隐藏第三次作业告竣,形势任务也出成绩了  (2009-1-4 1:36:5)

    信息隐藏作业终于做好了  (2008-11-11 0:41:46)

to "操作系统课程设计:模拟Unix的二级文件系统"

  1. tom Says:

    unix很强大,你们的课程设计也很强大!

  2. 翔子 Says:

    学习学习了 !! 博客不错 以后我会常来的~

  3. 海天无影 Says:

    汗 头晕的啊……

  4. 中国 Says:

    小猫很认真

  5. 网站改版 Says:

    小猫是高手!

  6. 游客 Says:

    我觉得int 和 char* 并不等价。
    int 相当于 现在的 short int
    char* 相当于 现在的 unsigned short int

    毛帅 于 2009-9-21 19:28:33 回复
    我的感觉是,莱昂氏代码里面对数据类型没有严格的概念,只有位数的概念,也就是说只要是16位的数据类型都可以看成一样的,而int 和 char*都是16位,所以可以互通,int 和char*可以表示一切类型的指针。

Leave a Reply

Entries RSS Comments RSS Login
猫猫晒课件 知识共享 除特别说明外,“猫猫的园地”采用知识共享“署名 2.5 中国大陆”许可协议授权。
沪ICP备08014016号|使用Z-Blog 1.8博客系统 |主题修改自GlossyBlue |由毛帅维护的博客(2007-2010)|关于本博客|我的主页