虚拟文件系统的实现.

上传人:我** 文档编号:114482570 上传时间:2019-11-11 格式:DOC 页数:33 大小:235KB
返回 下载 相关 举报
虚拟文件系统的实现._第1页
第1页 / 共33页
虚拟文件系统的实现._第2页
第2页 / 共33页
虚拟文件系统的实现._第3页
第3页 / 共33页
虚拟文件系统的实现._第4页
第4页 / 共33页
虚拟文件系统的实现._第5页
第5页 / 共33页
点击查看更多>>
资源描述

《虚拟文件系统的实现.》由会员分享,可在线阅读,更多相关《虚拟文件系统的实现.(33页珍藏版)》请在金锄头文库上搜索。

1、渤海大学操作系统课程设计实验报告书题 目:虚拟文件系统的实现题目编号:院 系:软件服务与外包学院班 级:11级2班小组成员:陈镜欢学号:111810040王晨学号:1118100352013-06-30目 录一、课程设计任务划分1二、基本原理12.1主要操作函数12.2数据结构12.3算法流程图3三、基本思路43.1 设计简介43.2 设计方案论述43.3 文件基本操作4四、调试及实验结果5运行结果分析7五、个人体会9 一、课程设计任务划分陈镜欢:主要编写代码熟悉课题的任务和要求,查阅相关文献和资料,并做好编码准备,调试,验收王晨:程序编码、调试和测试,书写报告二、基本原理2.1主要操作函数i

2、nt create(char *name); int open(char *name); int close(char *name); int write(int fd,char *buf,int len); int read(int fd,char *buf); int del(char *name); int mkdir(char *name); int rmdir(char *name); void dir(); int cd(char *name); void print(); void show(); 2.2数据结构struct fatitem /* size 8*/ int ite

3、m; /*存放文件下一个磁盘的指针*/ char em_disk; /*磁盘块是否空闲标志位0 空闲*/ ; struct direct /*-文件控制快信息-*/ struct FCB char name9; /*文件/目录名8位*/ char property; /*属性1位目录0位普通文件*/ int size; /*文件/目录字节数、盘块数)*/ int firstdisk; /*文件/目录起始盘块号*/ int next; /*子目录起始盘块号*/ int sign; /*1是根目录0不是根目录*/ directitemMSD+2; ; struct opentable struct

4、 openttableitem char name9; /*文件名*/ int firstdisk; /*起始盘块号*/ int size; /*文件的大小*/ openitemMOFN; int cur_size; /*当前打文件的数目*/ ; 2.3算法流程图开始初始化磁盘登录YN创建文件打开文件关闭文件读文件写文件列文件目录删除文件注销用户退出系统提示错误指令成功执行?N三、基本思路3.1 设计简介本系统是模拟实现多用户多目录的文件系统,在系统出现登录后 ,输入用户与口令,在用户登录系统后,可建立文件卷,将用户输入的文件保存在指定的文件中。系统的命令与其命令的具体实现,此模拟系统共提供了

5、上述命令,并根据命令的含义与要求,用C+编程来完成所有具体操作。该系统可以模拟完成用户的登陆和验证,列出文件和目录,新建目录,改变目录,创立和编写文件,删除文件和退出系统等功能3.2 设计方案论述 本文件系统采用两级目录,其中第一级对应于用户账号,第二级对应于用户帐号下的文件。另外,为了简便文件系统未考虑文件共享,文件系统安全以及管道文件与设备文件等特殊内容。 首先应确定文件系统的数据结构:主目录、子目录及活动文件等。主目录和子目录都以文件的形式存放于磁盘,这样便于查找和修改。 用户创建的文件,可以编号存储于磁盘上。如:file0,file1,file2并以编号作为物理地址,在目录中进行登记。

6、3.3 文件基本操作 创建文件:创建一个新文件时,系统首先要为新文件申请必要的外存空间,并在FAT中为文件分配一个目录项。目录项中应记录新建文件的文件名、文件总容量、当前已经使用的容量、文件属性、文件在磁盘中的起始位置。 删除文件:当已不在需要某文件时,可将它从文件系统中删除。在删除时,首先在FAT的文件链表中找到与该文件对应的文件结点,然后确认文件是否处于关闭状态,若以上条件都满足,则系统就可以把结点从文件链表中删除,然后回收改结点对应的磁盘空间。 打开文件:只有处于打开状态的文件才能被读取、写入、重复关闭且不能被删除。 关闭文件:只有处于关闭状态的文件才能被删除,且不能被重复关闭。 列文件

7、目录:用户只能获取自己建立的文件或其他用户共享的文件的列表,并可以查看所用户建立的文件列表。 写文件:用户可以把相关数据写入到用户自定义的文件中(磁盘上);待写文件必须处于打开状态,且不能是其他用户共享的文件。读文件:用户可以把文件中存储的数据读取出来;待读文件必须处于打开状态;用户既可以读取自己建立的文件,也可以读取其他用户共享的文件。建子目录:输入目录名,若存在于该文件名相同的目录,这创建失败;若无,则查找空闲的磁盘,将该磁盘置为分配状态,填写目录项,分配地址后,子目录创建成功。删除目录:输入名字,查找是否存在该文件或目录,若为文件,则不能删除;若存在,找到起始盘块号,并将其释放,修改目录

8、项,删除成功。四、调试及实验结果(1)login 用户登录(2)mkdir创建子目录(3)cd进出目录(4)create创建文件(5)close关闭文件(6)open打开文件(7)write写文件(8) read读文件(9) dir列目录(10)delete删除文件(11)rmdir删除子目录运行结果分析从上述运行过程可以看出,用户登录系统后,界面将显示文件或目录的基本操作,然后根据相应操作,完成系统的基本要求。本次程序的运行结果与预期结果最终达到了一致。自运行阶段,虽然每次都能得到运行结果,但是操作界面有时不是很完美,于是通过修改程序代码,不断执行程序,进行完善,直到得出满意的操作界面为止。

9、在该过程中,验证了本次课程设计所要求的基本功能,虽然有些操作不是很完善,但大体上都能实现。其中最令我不满意的是dir功能。该功能只是列出目录名,不能显示目录其他信息,是本次课程设计最大败笔。五、个人体会课程设计是对我们平时学习的一种考察,我们要正确地对待。不断地锻炼自己动手动脑的能力、把知识赋予实践就是我们学习的目标!既然学校给我们这么好的机会,让我们自己在实验室作操作,我们应该好好抓住机会,把我们平时学习的东西用自己的作品展现出来。这次,给了我们充分锻炼的机会。我们会用自己学到的东西的设计出一副好的作品。而对于我们来说,这种最灵活的知识却是最难掌握的。也因为对其基本知识掌握的不好,在这一次的

10、设计过程中遇到很多的困难,特别是物理盘块和逻辑文件之间的对应。在经过与同学进行沟通和交流并反复的测试之后,才明白了设计的函数,而且完善了部分函数的主要功能。通过两星期的操作系统课程设计实习,让我们对Linux文件系统有了深层次的了解和掌握,也通过了自己的能力体会到了编程的乐趣。最重要的是学会了关于设计分析和以前C语言学习过程中没有及时巩固的知识,对C程序设计又有了更进一步的认识,对一些细节的结构体语句有了更深刻的理解。所以这是一次很难得的实践机会,让我们真正用心编程,学到了课本以外更深刻更重要的实践经验。非常感谢老师提供这次机会,在这个课程设计过程中我受益匪浅,希望以后在这样的锻炼中不断成长,

11、提高自己各方面的能力,我们相信通过我们以后很加刻苦的学习,我们会更加热爱我们的专业课程。8渤海大学计算机科学与技术学院 实验设计报告书附录主要代码源程序:#include #include #include #define MEM_D_SIZE 1024*1024 /总磁盘空间为M#define DISKSIZE 1024/磁盘块的大小K#define DISK_NUM 1024/磁盘块数目K#define FATSIZE DISK_NUM*sizeof(struct fatitem)/FAT表大小#define ROOT_DISK_NO FATSIZE/DISKSIZE+1/根目录起始盘块号

12、#define ROOT_DISK_SIZE sizeof(struct direct)/根目录大小#define DIR_MAXSIZE 1024/路径最大长度为KB#define MSD 5/最大子目录数#define MOFN 5/最大文件深度为#define MAX_WRITE 1024*128/最大写入文字长度KB struct fatitem /* size 8*/ int item; /*存放文件下一个磁盘的指针*/ char em_disk; /*磁盘块是否空闲标志位0 空闲*/ ; struct direct /*-文件控制快信息-*/ struct FCB char nam

13、e9; /*文件/目录名8位*/ char property; /*属性1位目录0位普通文件*/ int size; /*文件/目录字节数、盘块数)*/ int firstdisk; /*文件/目录起始盘块号*/ int next; /*子目录起始盘块号*/ int sign; /*1是根目录0不是根目录*/ directitemMSD+2; ; struct opentable struct openttableitem char name9; /*文件名*/ int firstdisk; /*起始盘块号*/ int size; /*文件的大小*/ openitemMOFN; int cur_size; /*当前打文件的数目*/ ; struct fatitem *fat; /*FAT表*/ struct direct *root; /*根目录*/ struct direct *cur_dir; /*当前目录*/ struct opentable u_opentable; /*文件打开表*/ int fd=-1; /*文件打开表的序号*/ char *bufferdir; /*记录当前路径的名称*/ char *fdisk; /*虚拟磁盘起始地址*/ void initfile(); void format(); void enter(); void halt();

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号