Sep 8
今年暑假的课程设计可真麻烦啊,前几天好不容易完成了数据库的课程设计,现在还在奋战操作系统,累死了,可是还没有做完。
老师的要求是参考Unix的文件系统,然后用一个文件模拟磁盘,在一级文件系统下实现一个二级文件系统,在这个二级文件系统里面可以像Unix一样建立文件,打开文件,删除文件等操作,也就是给出该文件系统下的系统调用。
基本要求是:
- 使用Unix源代码中的数据结构、算法和思想。
- 磁盘驱动用一级文件系统针对大文件的读写代替
- 要求在文件系统和磁盘之间设置高速缓存。
- 实现的系统API:void ls(); int fopen(); void fclose(); int fread(); int fwrite(); int lseek(); int fcreate(); int fdelete();
- 所有的数据结构和子程序放在自己设计的库中,并设计小程序调用自己的二级文件系统。
高级要求:
- 使用面向对象的方法实现文件系统(我们知道Unix是用C语言写的,要化成面向对象的程序也不容易)。
- 如果可以的话,可以不使用二级文件系统,二直接编写一级文件系统,做到可以直接启动U盘的。
我现在的目标是实现到高级要求的第一点。为了做这个作业,《莱昂氏UNIX源代码分析》是必看的,这些天我边看边在pdf文件上用acrobat作了注释,下面就是我对bmap()函数的注释,很多也是参考了莱昂氏的,不过都搞明白了,看起来蛮壮观的。
莱昂氏注释的是Unix V6的源码,而且只是核心的近10000行源码。这几天看下来,如醍醐灌顶,当初上课时很多东西都没有搞懂,现在看到了源码,才知道它们之间千丝万缕的联系。现在我对Unix的源码的感觉是:
- 语法很奇特。也许是早期版本的C语言吧,里面的用法和现在有很多不一样的地方。如对很多事不声明类型的,而直接默认为int;函数的形式参数如果声明类型不是在括号里面声明的,竟然是夹在函数名和函数体之间,就像上图里第6426行;函数类型非常通用,貌似我看了这么久只发现了两种基本数据类型:int 和char,而且int竟然和char*可以等价,一切指针都是16位的数据类型,也就是说int可以表示指针,而char*也可以表示一个整形。
- 代码极为俭省。俭省的一个方面是变量名非常短,其实这是非常不好的,因为短的变量名很难实现“自解释”,我想这可能和早期的编译器有关,早期的编译器对变量名的长度有严格的要求,不能过长。另一方面的俭省是代码很俭省,能少写的不会多想,而其对资源的利用很节省,不会轻易开辟很大的资源,算法也尽量做到最优,可谓缺一字不可,真是“一字千金”啊。我想,一方面和当时的计算机资源现状有关,另一方面操作系统作为底层软件必须足够节约。
- 注释很少,这一点也是莱昂氏代码分析的价值所在。
- 编程技巧很高,我想这一点是Unix代码值得称道的地方,同时也是缺点之一。其中令我印象深刻的是对&和|的使用,发挥到了淋漓尽致,用它实现比较,除法,取模。但有些地方并不值得推荐,我觉得有些地方的处理对理解和模块化实现很不利。所以,Unix的代码是天才写的代码,但很多时候,代码要很多人合作,这是注重的是可交流性,而Unix代码在这一点上并不优秀。
资料已经看了一个多星期了,今天才试着开始编码,遇到了很多问题,不过都在解决之中。相信这个课程设计完成以后,我对Unix的了解会加深很多。
旧一篇:« 我为什么要考研
新一篇:猫猫书画网站管理系统投入使用 »
与 作业 学习总结 操作系统 相关的文章
to "操作系统课程设计:模拟Unix的二级文件系统"
-
tom Says:
2009-9-8 9:29:15 回复该留言unix很强大,你们的课程设计也很强大!
-
翔子 Says:
2009-9-8 12:54:00 回复该留言学习学习了 !! 博客不错 以后我会常来的~
-
海天无影 Says:
2009-9-9 11:17:24 回复该留言汗 头晕的啊……
-
中国 Says:
2009-9-9 16:52:01 回复该留言小猫很认真
-
网站改版 Says:
2009-9-15 18:52:08 回复该留言小猫是高手!
-
游客 Says:
2009-9-20 17:40:11 回复该留言我觉得int 和 char* 并不等价。
int 相当于 现在的 short int
char* 相当于 现在的 unsigned short int毛帅 于 2009-9-21 19:28:33 回复我的感觉是,莱昂氏代码里面对数据类型没有严格的概念,只有位数的概念,也就是说只要是16位的数据类型都可以看成一样的,而int 和 char*都是16位,所以可以互通,int 和char*可以表示一切类型的指针。


程序易写,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)