操作系统文件系统的设计与实现课程设计.docx

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

操作系统文件系统的设计与实现课程设计.docx

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

操作系统文件系统的设计与实现课程设计.docx

操作系统文件系统的设计与实现课程设计

操作系统文件系统的设计与实现课程设计

 

课程设计

 

题目:

文件系统的设计与实现

学院:

信息工程学院

系别:

计算机系

专业:

计算机科学与技术

2011年12月30日

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

学院(系):

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

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

专业班级:

计算机09-2学生姓名:

学号:

************

一、课程设计题目

文件系统的设计与实现

二、课程设计的目的

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

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

原始数据:

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

技术参数:

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

设计要求:

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

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

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

4.编程实现算法功能;

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

工作量要求:

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

四、工作进度安排

周一:

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

周二:

系统分析,算法设计;

周三:

编制、调试程序;

周四:

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

周五:

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

五、主要参考文献

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

清华大学出版社,2006

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

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

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

清华大学出版社,2008

审核批准意见

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

 

第一章设计内容

1.1设计目的

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

1.2设计要求

(1)问题描述

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

(2)基本要求

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

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

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

1.3程序设计思想

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

结合分析课程设计要求,确定实体以及它们之间的关系。

实体关系有三张表(磁盘空间分配表、文件表、打开文件表)、一个模拟磁盘的数组、命令服务和用户构成。

用户负责输入命令。

命令服务实现命令的解释、命令检查、命令帮助以及调用相关模块执行相应的命令功能。

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

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

第二章数据结构、算法和算法流程图

2.1数据结构

数据结构说明:

本程序所运用的主要有两个数据结构,分别如下:

文件目录结构:

structfilename{//文件目录项结构体

charname[9];//文件名

charext[4];//扩展名

inti;//文件所占用磁盘块的第一个磁盘块号

intAmount;//文件所占用磁盘块的块数

longintsize;//文件大小

};

盘块结构:

structempty{//盘块结构体

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

intfilenum;//文件数量

};

2.2程序功能图

文件系统提供的文件操作有建立文件(mkfile)、复制文件(copy)、显示文件所有内容(type)、删除文件(delfile)。

可以通过键盘输入命令来模拟文件的操作。

2.3程序流程图

(1)主程序流程图:

 

(2)初始化模块流程图:

(3)写入磁盘流程图:

 

(4)显示目录流程图:

(5)显示文件流程图:

(6)删除文件流程图:

(7)复制文件流程图:

(8)创建文件流程图:

图2.9

 

第三章程序运行结果及分析

3.1程序运行结果

(1)程序主界面

(2)创建一个文件,输入“3”显示“输入文件内容,按@键保存且退出!

(3)往文件里写内容:

HelloWorld!

显示文件长度,并要求给文件命名,命名后保存返回主界面

 

(4)读取刚才写入的文件,结果正确

(5)删除刚写入的文件,测试成功

3.2程序分析

本程序使用一个Windows下的文件来模拟一个磁盘,向磁盘中装入文件并进行相关操作。

采用了以空间换时间的算法,文件的大小在系统中是固定的,虽然会浪费一些空间,但文件的存取速率会加快。

 

第四章心得体会

操作系统课程设计是本课程重要的实践教学环节。

课程设计的目的,一方面使学生更透彻地理解操作系统的基本概念和原理,使之由抽象到具体;另一方面,通过课程设计加强学生的实验手段与实践技能,培养学生独立分析问题、解决问题、应用知识的能力和创新精神。

与本课程的实验教学相比,课程设计独立设课,具有更多的学时,给学生更多自行设计、自主实验的机会,充分放手让学生真正培养学生的实践动手能力,全面提高学生的综合素质。

在设计的过程中遇到问题,可以说得是困难重重,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,不过设计终于顺利完成了,在设计中遇到了很多编程问题,最后在老师的辛勤指导下,终于游逆而解。

同时,在老师的身上我学得到很多实用的知识,再次我表示感谢!

同时,对给过我们帮助的所有同学和各位指导老师再次表示忠心的感谢!

在设计过程中,查询了不少相关资料,不断的发现问题、提出问题、解决问题。

在对自己所编写的源程序段的纠错的过程中,使我更好的理解了操作系统中文件系统的理论知识,同时在编程时用到了模块化的设计思想,这种编程方法可以使我们的编程变的更简单,可以使我们的查错与纠错变的更方便。

总的来说通过这次的设计的学习使我学到了很多在平时的学习中学不到的很多东西,通过这次课程设计,使我对操作系统和编程产生兴趣,我想我会在这条路上继续前进下去。

我相信,只要不断的严格要求自己,注意培养自己的思维能力,就一定会有更大更辉煌的发展和提高。

 

参考文献

1.教材

[1]张尧学主编.计算机操作系统教程(第三版).北京:

清华大学出版社,2006

2.主要参考书

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

清华大学出版社,2006

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

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

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

清华大学出版社,2008

[4]张丽芬等编.操作系统实验教程.北京:

清华大学出版社,2006

[5]AndrewS.Tanenbaum.ModernOperatingSystems,SecondEdition.EnglewoodCliffs,N.J,PrenticeHall,2001

[6]屠祁等编.操作系统基础(第三版).北京:

清华大学出版社,2000

[7]冯耀霖等编.操作系统.西安:

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

[8]左万历.计算机操作系统教程(第二版).北京:

高等教育出版社,2004

 

附录程序清单

#include"iostream.h"

#include"string"

#include"stdio.h"

extern"C"voidexit(int);

structfilename//文件目录项结构体

{

charname[12];//文件名

charext[8];//扩展名//扩展名较小设为10

inti;//文件所占用磁盘块的第一个磁盘块号

intAmount;//文件所占用磁盘块的块数

longintsize;//文件大小

}file[20];

intnum;

structempty//盘块结构体

{intmap[20];//盘块位示图

intfilenum;//文件数量

}emptytable;

//模块说明:

voidSystemInit()//模拟磁盘文件初始化函数

{

for(inti=2;i<19;i++){//初始化存放位示图的盘块

emptytable.map[i]=0;

}

emptytable.map[0]=1;

emptytable.map[1]=1;

emptytable.filenum=0;

FILE*fp;

if((fp=fopen("filesys","wb+"))==NULL)//wb+:

为读写建立一个"新"文件;打开系统文件将文件目录盘块和用“w”打开的文件只能向该文件写入。

若打开的文件不存在,则以指定的文件名建立该文件,若打开的文件已经存在,则将该文件删去,重建一个新文件。

+:

读和写

{//位示图盘块写入系统文件

printf("cannotopenfile\n");

exit(0);

}

fseek(fp,512L,0);//intfseek(FILE*stream,longoffset,intfromwhere);函数设置文件指针stream的位置。

如果执行成功,stream将指向以fromwhere(偏移起始位置:

文件头0,当前位置1,文件尾2)为基准,偏移offset(指针偏移量)个字节的位置。

如果执行失败(offset超过文件自身大小),则不改变stream指向的位置。

成功,返回0,否则返回其他值。

fwrite(&emptytable,sizeof(structempty),1,fp);//把结构体emptyable中的内容写入到fp中,数据项的大小为structempty,数据项的个数为1

fclose(fp);

printf("初始化系统成功");

}

voidWriteFile()//将目录以及空闲盘块表写入磁盘

{

FILE*fp;

if((fp=fopen("filesys","rb+"))==NULL)

{

printf("cannotopenfile\n");

exit(0);

}

rewind(fp);//将文件内部的位置指针重新指向一个流(数据流/文件)的开头

for(inti=0;i

{

fwrite(&file[i],sizeof(structfilename),1,fp);//文件目录

}

fseek(fp,512L,0);

fwrite(&emptytable,sizeof(structempty),1,fp);//位示图

fclose(fp);

}

voiddir()//显示文件目录

{inti,j;

FILE*fp;

if((fp=fopen("filesys","rb"))==NULL)

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

当前位置:首页 > 人文社科 > 广告传媒

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

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