文件系统的设计与实现.docx
《文件系统的设计与实现.docx》由会员分享,可在线阅读,更多相关《文件系统的设计与实现.docx(25页珍藏版)》请在冰豆网上搜索。
文件系统的设计与实现
学校代码:
学号:
课程设计
题目:
文件系统的设计与实现
学生姓名:
学院:
系别:
计算机系
专业:
班级:
指导教师:
内蒙古工业大学课程设计任务书
(一)
学院(系):
信息学院计算机系课程名称:
操作系统课程设计指导教师(签名):
专业班级:
软件工程学生姓名:
学号:
一、课程设计题目
文件系统的设计与实现
二、课程设计的目的
通过设计一个小型文件系统,进一步掌握文件管理的方法和技术,使学生初步具有研究、设计、编制和调试操作系统模块的能力。
三、课程设计的主要内容和要求(包括原始数据、技术参数、设计要求、工作量要求等)
原始数据:
文件目录项结构体,盘块结构体。
技术参数:
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