文件系统的设计与实现.docx

上传人:b****3 文档编号:2845513 上传时间:2022-11-15 格式:DOCX 页数:25 大小:383.56KB
下载 相关 举报
文件系统的设计与实现.docx_第1页
第1页 / 共25页
文件系统的设计与实现.docx_第2页
第2页 / 共25页
文件系统的设计与实现.docx_第3页
第3页 / 共25页
文件系统的设计与实现.docx_第4页
第4页 / 共25页
文件系统的设计与实现.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

文件系统的设计与实现.docx

《文件系统的设计与实现.docx》由会员分享,可在线阅读,更多相关《文件系统的设计与实现.docx(25页珍藏版)》请在冰豆网上搜索。

文件系统的设计与实现.docx

文件系统的设计与实现

学校代码:

学号:

课程设计

 

题目:

文件系统的设计与实现

学生姓名:

学院:

系别:

计算机系

专业:

班级:

指导教师:

内蒙古工业大学课程设计任务书

(一)

学院(系):

信息学院计算机系课程名称:

操作系统课程设计指导教师(签名):

专业班级:

软件工程学生姓名:

学号:

一、课程设计题目

文件系统的设计与实现

二、课程设计的目的

通过设计一个小型文件系统,进一步掌握文件管理的方法和技术,使学生初步具有研究、设计、编制和调试操作系统模块的能力。

三、课程设计的主要内容和要求(包括原始数据、技术参数、设计要求、工作量要求等)

原始数据:

文件目录项结构体,盘块结构体。

技术参数:

WindowsXP系统,VC++6.0开发工具。

设计要求:

1.设计基于位示图的文件连续分配算法;

2.设计显示文件目录、建立文件、显示文件内容、复制和删除文件算法;

3.画出以上算法流程图;

4.编程实现算法功能;

5.编写课程设计说明书。

工作量要求:

完成以上设计要求中的所有算法功能。

四、工作进度安排

周四:

布置、讲解题目,收集资料;

周五:

系统分析,算法设计;

周一:

编制、调试程序;

周二:

测试系统,形成设计结论,编写课设报告;

周三:

系统及材料验收,课设答辩。

五、主要参考文献

[1]张尧学编.计算机操作系统教程(第三版)习题解答与实验指导.北京:

清华大学出版社,2006

[2]汤子瀛主编.计算机操作系统(第三版).西安:

西安电子科技大学出版社,2001

[3]张坤等编.操作系统实验教程.北京:

清华大学出版社,2008

审核批准意见

系(教研室)主任(签字)

第一章设计内容

1.1系统环境

工具:

C语言。

在WINDOWS环境下使用VC++进行编译及运行。

1.2设计目的

通过设计一个小型文件系统,进一步掌握文件管理的方法和技术,使学生初步具有研究、设计、编制和调试操作系统模块的能力。

在任一OS下,建立一个大文件,把它假想成一张盘,在其中实现一个简单的小型文件系统。

该文件系统没有子目录机制,文件连续分配,不考虑换“盘”和分区。

做一个简单的操作界面,提供五条简单的命令:

dir、mkfile、type、copy、delfile,分别用于显示文件目录、建立文件、显示文件内容、复制和删除一个文件。

1.3程序设计思想

参阅操作系统方面的书籍,了解操作系统的文件系统原理。

结合分析课程设计要求,确定各个功能块以及它们之间的关系。

详细设计三个功能块的具体实现,从而确定数据结构所包含的内容。

通过构造这些实体的关系图,数据流图、程序流程图来进行具体的设计。

建立一个系统文件(模拟盘),并对此进行盘块的划分,第一个盘块存放文件目录,第二盘块存放盘块位示图,自第三个盘块开始存放各具体文件的内容,文件目录存放文件的名字,文件的扩展名,开始盘块号,所占用的盘块数目,文件的大小;盘块位示图用来标记盘块是否被占用。

在具体编程之前,设计好每个功能块的具体实现方法,从而可以节省时间和精力,提高速率。

第二章实现文件管理的数据结构

2.1数据结构

设计该文件系统时,我用到了三个数据结构,分别是文件控制块FCB,盘块结构体和模拟盘块结构体,以下为三个数据结构的详细设计。

//文件控制块

typedefstructFCB

{

charname[10];//文件名

charext[4];//扩展名

inti;//开始块号

intamount;//所用总块数

longintsize;//文件大小

structFCB*next;

}FCB;

//盘块结构体

structempty{//盘块结构体

intmap[100];//盘块位示图

intfilenum;//文件数量

}table;

//模拟盘块的结构体(每个结构为一个盘块,共100个盘快)

structpiece

{

chartext[2];//每个盘块的大小为2个字节

}piec[200];

2.2程序功能图

文件系统提供的文件操作具有显示文件目录,建立文件,显示文件内容,复制文件和删除文件五项功能,用户可以通过输入每个功能的选项来进入每个功能块,完成相应的功能。

如下为整个程序的功能图。

图2.1程序功能图

第三章算法和算法流程图

3.1整个系统的流程图

文件系统提供的文件操作具有显示文件目录,建立文件,显示文件内容,复制文件和删除文件五项功能,用户可以通过输入每个功能的选项来进入每个功能块,完成相应的功能。

3.2每个功能块的算法思想和流程图

3.2.1初始化盘块

建立一个系统文件(模拟盘),并对此进行盘块的划分,第一个盘块存放文件目录,表示为table.map[0]=1;第二盘块存放盘块位示图,表示为table.map[1]=1,自第三个盘块开始存放各具体文件的内容,用table.map[i]=0表示盘块可用。

文件系统自动进行初始化工作。

3.2.2用户选择功能

创建一个友好界面voidMainView(),清晰的列出各项功能块,用户通过输入选项进行功能选择,在主函数中调用switch语句,用case语句清晰的调用各个功能块。

当用户输入错误信息时给予提示。

用default:

printf("输入错误,请重新输入!

\n");语句实现。

3.2.3显示文件目录

显示已经创建的文件的名字,文件的扩展名,开始盘块号,所占用的盘块数目,文件的大小。

通过这个功能可以查询文件是否创建成功,是否复制成功,是否删除成功。

3.2.4创建文件

这个功能块是整个程序的主要部分,每个盘块的字节为2,因此根据每个文件内容的大小应该合理的分配,避免造成文件内容的丢失,尤其是当又基数个字时,调用num=(strlen(tex)%2)?

(strlen(tex)/2+1):

(strlen(tex)/2)语句。

同时,在创建文件时,由于该文件系统没有子目录机制,应该考虑文件重名的问题,通过if语句进行判断。

整个文件系统是连续分配的,初始化point=2,从2号盘块开始连续存放,用for循环实现这个功能:

for(inti=0;i

接下来调节尾指针,通知用户文件创建成功。

如下为创建文件时的流程图。

图3.2创建文件流程图

3.2.5显示文件内容

显示文件内容是,先列出所有文件的清单,用户可以选择一个文件来进行查看其内容,通过输入文件名,文件扩展名来确认要查看的文件,接下来判断文件是否存在,若不存在则显示“不存在此文件“,若存在该文件,则通过输出语句输出该文件的内容。

3.2.6复制文件

这个功能块通过voidCopyFile()函数实现,先列出系统现有的文件,接下来用户输入要复制的文件名与文件扩展名,确认该文件存在后,可以输入目标文件与目标文件扩展名,利用文件控制块FCB创建新的文件,与创建文件时的实现方法一样。

如下为复制文件的流程图。

图3.3复制文件流程图

3.2.7删除文件

这个功能通过voidDelFile()函数实现,通过输入要删除的文件名与文件扩展名来确定所要删除的文件。

利用指针p2->next=p1->next删除。

第四章程序调试及运行情况

4.1初始化系统

4.2创建文件

 

 

4.3显示文件目录

文件目录存放文件的名字,文件的扩展名,开始盘块号,所占用的盘块数目,文件的大小

4.4显示文件内容

4.5复制文件

 

通过显示文件目录,查看文件是否复制成功

 

4.6删除文件

 

通过显示文件目录,查看文件是否删除成功

 

4.7退出系统

 

第五章课程设计出现的问题及解决的方法

1.在写个文件系统时,最难一点就是数据结构的表示方法,这是一个我们在大二学了数据结构以来,用到数据结构最全的,在做这个课程设计时,我们要不时的翻书来察看我们所需的知识点,在做的过程中,会不时的在结构体上再添加有关的内容,因为在第一次写的时候,还没有完全考虑好整个结构。

2.由于一开始设计模型时过于简单,没有考虑文件重名的情况,导致在显示文件内容和删除文件时出现问题,因此在加入了判断文件重名的程序段后很好的解决了这一问题。

3.在编写主函数时,参照老师给出的程序段,利用switch语句,将每个功能块清晰的呈现出来。

4..由于所设计的每个盘块的大小为两个字节,当创建文件的大小为奇数个数时,容易出现文件内容丢失的现象,添加如下这样的语句后可以避免文件内容丢失num=(strlen(tex)%2)?

(strlen(tex)/2+1):

(strlen(tex)/2);在通过运行实验时,或多或少的出现了很多问题,这些都是在通过调试,确定错误的根源,最后把错误都解决了。

5.设计思想中提到,建立一个系统文件(模拟盘),并对此进行盘块的划分,第一个盘块存放文件目录,第二盘块存放盘块位示图,自第三个盘块开始存放各具体文件的内容,通过如下程序段实现文件系统的初始化。

voidSystemInit()

{

for(inti=2;i<100;i++)

table.map[i]=0;//0表示盘快可用

table.map[0]=1;//0号盘块被目录占用

table.map[1]=1;//1号盘块被位示图占用

table.filenum=0;

}

第六章课程设计的体会与自我评价总结

6.1课程设计的体会

课程设计是培养学生综合运用所学知识,发现,提出,分析,提出和解决实际问题,锻炼实践能力重要环节,是对学生实际工作能力的具体训练和考察过程,回顾起这次为期一个星期的操作系统课程设计,使我感慨颇多,从选题到分析,从理论到实践,在整整一个星期的日子里,可以说是苦多于甜,但是可以学到很多很多的东西,同时不仅可以巩固以前学过的知识,而且学到了很多在书本上所没有学过的知识。

通过这次课程设计使我懂得了理论和实践相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识同实践相结合起来,从理论中得出结论,才能真正学以致用,从而提高自己实际动手能力和独立思考的能力。

在设计中遇到的问题可以说是困难重重,期间遇到各种各样的问题,同时在设计过程中也发现了自己的不足之处,对以前所学过的知识理解不够深刻,掌握的不够牢固,通过这次课程设计之后,把以前所学过的知识重新温故了一遍。

6.2自我评价与总结

通过这次为期一周的操作系统课程设计,我从中收获了很多,同时也发现了自己有很多的不足之处。

在做一个系统设计时,在编程之前应该全面细致的了解题目,进行充分的理解,全面的设计,包括系统的每一个功能块都因做出详细的设计。

否则,一边编程一边设计容易浪费时间与精力,打乱整个系统设计的思路。

在写个文件系统时,数据结构的表示方法也是比较难掌握的,在做这个课程设计时,我要不时的翻书来察看我们所需的知识点,在做的过程中,会不时的在结构体上再添加有关的内容,因为在第一次写的时候,还没有完全考虑好整个结构。

这周的课程设计从设计到最后书写实验报告,我学习到了许多书本上学习不到的知识,而且巩固了理论知识,将理论和实践结合起来,锻炼了自己独立思考的能力。

同时,在完成这次操作系统的课程设计中,发现自己掌握的知识远远不够,即使学习过的东西掌握的程度也不够。

在今后的学习中更加努力的学习,弥补自己的不足。

参考文献

[1]严蔚敏吴伟民编.数据结构[C

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 兵器核科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1