文件系统的设计与实现

  • 格式:doc
  • 大小:836.51 KB
  • 文档页数:28

学校代码:学号:课程设计题目:文件系统的设计与实现学生姓名:学院:系别:计算机系专业:班级:指导教师:内蒙古工业大学课程设计任务书(一)学院(系):信息学院计算机系课程名称:操作系统课程设计指导教师(签名):专业班级:软件工程学生姓名:学号:目录第一章设计内容 (1)1.1系统环境 (1)1.2设计目的 (1)1.3程序设计思想 (1)第二章实现文件管理的数据结构 (2)2.1数据结构 (2)2.2 程序功能图 (2)第三章算法和算法流程图 (4)3.1整个系统的流程图 (4)3.2每个功能块的算法思想和流程图 (5)3.2.1初始化盘块 (5)3.2.2用户选择功能 (5)3.2.3显示文件目录 (5)3.2.4创建文件 (5)3.2.5显示文件内容 (6)3.2.6复制文件 (7)3.2.7删除文件 (7)第四章程序调试及运行情况 (8)4.1初始化系统 (8)4.2创建文件 (8)4.3显示文件目录 (9)4.4显示文件内容 (10)4.5复制文件 (10)4.6删除文件 (11)4.7退出系统 (12)第五章课程设计出现的问题及解决的方法 (13)第六章课程设计的体会与自我评价总结 (14)6.1课程设计的体会 (14)6.2自我评价与总结 (14)参考文献 (15)附录 (16)程序清单 (16)第一章设计内容1.1系统环境工具:C语言。

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

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

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

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

做一个简单的操作界面,提供五条简单的命令:dir、mkfile、type、copy、delfile,分别用于显示文件目录、建立文件、显示文件内容、复制和删除一个文件。

1.3程序设计思想参阅操作系统方面的书籍,了解操作系统的文件系统原理。

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

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

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

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

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

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

//文件控制块typedef struct FCB{char name[10];//文件名char ext[4];//扩展名int i;//开始块号int amount;//所用总块数long int size;//文件大小struct FCB *next;}FCB;//盘块结构体struct empty { //盘块结构体int map[100]; //盘块位示图int filenum; //文件数量}table;//模拟盘块的结构体(每个结构为一个盘块,共100个盘快)struct piece{char text[2];//每个盘块的大小为2个字节}piec[200];2.2 程序功能图文件系统提供的文件操作具有显示文件目录,建立文件,显示文件内容,复制文件和删除文件五项功能,用户可以通过输入每个功能的选项来进入每个功能块,完成相应的功能。

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

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

图2.1系统流程图3.2每个功能块的算法思想和流程图3.2.1初始化盘块建立一个系统文件(模拟盘),并对此进行盘块的划分,第一个盘块存放文件目录,表示为table.map[0]=1;第二盘块存放盘块位示图,表示为table.map[1]=1,自第三个盘块开始存放各具体文件的内容,用table.map[i]=0表示盘块可用。

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

3.2.2用户选择功能创建一个友好界面void MainView(),清晰的列出各项功能块,用户通过输入选项进行功能选择,在主函数中调用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(int i=0;i<strlen(tex);i++),顺序将文件内容存放于盘块中,当文件内容的字节数为奇数时,且每个盘块存放两个字节,因此用语句piec[point-1].text[1]='\0';来避免出错。

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

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

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

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

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

图3.3 复制文件流程图3.2.7删除文件这个功能通过void DelFile()函数实现,通过输入要删除的文件名与文件扩展名来确定所要删除的文件。

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

void SystemInit(){for(int i=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自我评价与总结通过这次为期一周的操作系统课程设计,我从中收获了很多,同时也发现了自己有很多的不足之处。

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

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

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

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