操作系统文件系统的设计与实现课程设计_第1页
操作系统文件系统的设计与实现课程设计_第2页
操作系统文件系统的设计与实现课程设计_第3页
操作系统文件系统的设计与实现课程设计_第4页
操作系统文件系统的设计与实现课程设计_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、操作系统文件系统的设计与实 现课程设计课程设计题目:文件系统的设计与实现学院:信息工程学院系别:计算机系专业:计算机科学与技术2011年12月30日内蒙古工业大学课程设计任务书学院(系):信息学院计算机系 课程名称:操作系统课程设计指导教师(签名): 学号:200920201039专业班级: 计算机09 2学生姓名一、课程设计题目文件系统的设计与实现二、课程设计的目的通过设计一个小型文件系统,进一步掌握文件管理的方法和技术,使学生 初步具有研究、设计、编制和调试操作系统模块的能力。三、课程设计的主要内容和要求(包括原始数据、技术参数、设计要求、工作 量要求等)原始数据:文件目录项结构体,盘块结

2、构体。技术参数:Windows XP系统,VC+6. 0开发工具。设计要求:1. 设计基于位示图的文件连续分配算法;2. 设计显示文件目录、建立文件、显示文件内容、复制和删除文件算法;3. 画出以上算法流程图;4. 编程实现算法功能;5. 编写课程设计说明书。工作量要求:完成以上设计要求中的所有算法功能。四、工作进度安排周一:布置、讲解题目,收集资料;周二:系统分析,算法设计;周三:编制、调试程序;周四:测试系统,形成设计结论,编写课设报告;周五:系统及材料验收,课设答辩。五. 主要参考文献1 张尧学编.计算机操作系统教程(第三版)习题解答与实验指导.北京:清 华大学出版社,20062 汤子瀛

3、主编.计算机操作系统(第三版).西安:西安电子科技大学出版社, 20013 张坤等编.操作系统实验教程.北京:清华大学出版社,2008目录第一章设计内容11.1设计目的11. 2设计要求11. 3程序设计思想1第二章数据结构、算法和算法流程图22. 2程序功能图32. 3程序流程图3第三章程序运行结果及分析83. 1程序运行结果83. 2程序分析10第四章心得体会10参考文献11附录程序清单132第一章设计内容1. 1设计目的通过设计一个小型文件系统,进一步掌握文件管理的方法和技术, 使学生初步具有研究、设计、编制和调试操作系统模块的能力。1. 2设计要求(1) 问题描述在任一 os下,建立一

4、个大文件,把它假想成一张盘,在其中实现 一个简单的小型文件系统。(2) 基本要求该文件系统没有子目录机制,文件连续分配,不考虑换“盘”和分 区。做一个简单的操作界面,提供五条简单的命令:dir. inkfile, type、 copy、delfile,分别用于显示文件目录、建立文件、显示文件内容、复制 和删除一个文件。13程序设计思想阅读操作系统方面的书籍,了解操作系统的文件系统原理。结合分 析课程设计要求,确定实体以及它们之间的关系。实体关系有三张表(磁 盘空间分配表、文件表、打开文件表)、一个模拟磁盘的数组、命令服 务和用户构成。用户负责输入命令。命令服务实现命令的解释、命令检 査、命令帮

5、助以及调用相关模块执行相应的命令功能。建立一个系统文件(模拟盘),并对此进行盘块的划分,第一个盘 块存放文件目录,第二盘块存放盘块位示图,自第三个盘块开始存放各 具体文件的内容,文件目录存放文件的名字,文件的扩展名,开始盘块 号,所占用的盘块数目,文件的大小;盘块位示图用来标记盘块是否被 占用。构造这些实体的关系图,数据流图、程序流程图来进行具体的设计。第二章数据结构、算法和算法流程2.1数据结构数据结构说明:本程序所运用的主要有两个数据结构,分别如下: 文件目录结构:struct filename char name9;char ext4;int i;磁盘块号lilt Amount; lon

6、g int size;盘块结构:struct empty int map100;int filenum;文件目录项结构体/文件名扩展名文件所占用磁盘块的第一个文件所占用磁盘块的块数文件大小盘块结构体盘块位示图文件数量22. 2程序功能图文件系统提供的文件操作有建立文件(inkfile).复制文件(copy)、显示文件 所有内容(type)、删除文件(delfile)。可以通过键盘输入命令来模拟文件的操作。2. 3程序流程图(1) 主程序流程图:ra o o8(2)初始化模块流程图:(4)显示目录流程图:(3)写入磁盘流程图:I(5)显示文件流程图:(7)复制文件流程图:(6)删除文件流程图:(

7、8)创建文件流程图:第三章程序运行结果及分析3. 1程序运行结果(1)程序主界面?请选择一个功能: 1.Init Sysf ile.: 2.Dir.:3.Create a file.:4Type.:5.Copy.: 6.DeIfile.:7.Exit.:(2) 创建一个文件,输入“3力显示“输入文件内容,按键保存且退出L晴输入文件内容,按e犍保存且退岀(3)往文件里写内容:Hello World!示文件长度,并要求给文件命名,命名后保 存返回主界面28鲁输入文件内容,按e键保存且退出?Hello World?0 lies .txt仆请选择一个功能小1.I nit Sysf ile.2.Dir.

8、3.Create a f ile.4.Type.5.Copy.6.De Ifile.7.Exit.(4) 读取刚才写入的文件,结果正确4hes.txta. a请输入文件名二I Q /I(5) 删除刚写入的文件,测试成功备输入文件名:醫输入扩展名=是否删除文件a ly/n ly 淮备删除文fra.a 3. 2程序分析本程序使用一个Windows下的文件来模拟一个磁盘,向磁盘中装入文件并 进行相关操作。采用了以空间换时间的算法,文件的大小在系统中是固定的,虽 然会浪费一些空间,但文件的存取速率会加快。第四章心得体会操作系统课程设计是本课程重要的实践教学环节。课程设计的目的,一方面使 学生更透彻地理

9、解操作系统的基本概念和原理,使之由抽象到具体;另一方面,通 过课程设计加强学生的实验手段与实践技能,培养学生独立分析问题、解决问题、 应用知识的能力和创新精神。与本课程的实验教学相比,课程设计独立设课,具有 更多的学时,给学生更多自行设计、自主实验的机会,充分放手让学生真正培养学 生的实践动手能力,全面提高学生的综合素质。在设计的过程中遇到问题,可以说得是困难重重,难免会遇到过各种各样的问 题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够 深刻,掌握得不够牢固,不过设计终于顺利完成了,在设计中遇到了很多编程问题, 最后在老师的辛勤指导下,终于游逆而解。同时,在老师的身上

10、我学得到很多实用 的知识,再次我表示感谢!同时,对给过我们帮助的所有同学和各位指导老师再次 表示忠心的感谢!在设计过程中,査询了不少相关资料,不断的发现问题、提出问题、解决问题。 在对自己所编写的源程序段的纠错的过程中,使我更好的理解了操作系统中文件系 统的理论知识,同时在编程时用到了模块化的设计思想,这种编程方法可以使我们 的编程变的更简单,可以使我们的査错与纠错变的更方便。总的来说通过这次的设 计的学习使我学到了很多在平时的学习中学不到的很多东西,通过这次课程设计, 使我对操作系统和编程产生兴趣,我想我会在这条路上继续前进下去。我相信,只 要不断的严格要求自己,注意培养自己的思维能力,就一

11、定会有更大更辉煌的发展 和提高。参考文献1.教材1张尧学主编.计算机操作系统教程(第三版).北京:清华大学出版社,20062.主要参考书1 张尧学编.计算机操作系统教程(第三版)习题解答与实验指导.北 京:清华大学出版社,20062 汤子瀛主编.计算机操作系统(第三版).西安:西安电子科技大学 出版社,20013 张坤等编.操作系统实验教程.北京:清华大学出版社,20084 张丽芬等编.操作系统实验教程.北京:清华大学出版社,20065 Andrew S.Tanenbaiim. Modern Operating Systems, SecondEdition.Englewood Cliffs,N

12、.J,Prentice Hall, 20016 屠祁等编.操作系统基础(第三版).北京:清华大学出版社,20007 冯耀霖等编.操作系统.西安:西安电子科技大学出版社,20018 左万历.计算机操作系统教程(第二版).北京:高等教育出版社,2004附录程序清单#include ,iostream.hH#include string11#include stdio.h extern C void exit(lnt);struct filenamej文件目录项结构体char name12; char ext8;int i;int Amount; long int size;fe20;文件名扩展名扩

13、展名较小设为10文件所占用磁盘块的第一个磁盘块号文件所占用磁盘块的块数文件大小int num;struct empty int map20;盘块结构体盘块位示图int filenum;文件数量Jemptytable;模块说明: void Systeinlnit() j模拟磁盘文件初始化函数for(int i=2;l19;i+) emptytable.mapl=O;初始化存放位示图的盘块empty table.mapO=l;emptytable.map 1=1;emptytable.filenum=O;町LE *fp;if(fp=fopen(,niesvs,wb+,)=NULL) /wb+:为读

14、写建立一个”新文件;打开 系统文件将文件目录疵块和用打开的文件只能向该文件写入。若打开的文件不存在,则以指定的文件名建立该文件,若打开的文件已经存在,则将该文件删去, 重建一个新文件。+:读和写位示图盘块写入系统文件printf(f,can not open file ntr);exit(O);fseek(fp,512L,0);/ lilt fseek(FILE *strea叫 long offset, int fromwhere);函数设置文件指针stream的位置。如果执行成功,stream将指向以froinwhere (偏 移起始位置:文件头0,当前位置1,文件尾2)为基准,偏移offs

15、et (指针偏移量) 个字节的位置。如果执行失败(offset超过文件自身大小),则不改变stream指向的位 置。成功,返回0,否则返回其他值。fwrite(&emptytable,sizeof(struct empty),l,fp);把结构体 emptyable 中的内容写入到fp中,数聶项的大小为struct empty,数据项的个数为1fclose(fp);print!初始化系统成珈N);void VVriteFile()将目录以及空闲盘块表写入磁盘FILE *fp;if(fp=fopen(,ffllesys,f/lrb+tt)=NULL)printf(,fcan not open f

16、ile ntf);exit(O);rewind(fp);将文件内部的位置指针重新指向一个流(数据流/文件)的开头for(int i=0;inum;i+)文件目录位示图显示文件目录fwrite(&flle邛 izeof(struct Filename), l,Fp); fseek(fp,512L,0);fwrite( &emptytable9sizeof(struct empty),l,Fp); fclose(fp);void dir() int ij;FILE *fp; if(fp=fopen(ftfilesysM/lrbtl)=NULL) printf(Hcan not open file

17、nlf);exit(O);fseek(fp,512L,0);f read( &empty table 目 izeof(struct empty), 1 ,fp); rewind(fp);num=emptytable.fllenum;for(i=0;inum;i+)fread(声 izeof(struct filename)J,fp); if (num!=0) printf系统所有文件:n”);for(i=OJ=l;inum;l+J+)printf(,f%s.%s ,filei.ext); if(J=5) printf(,tnM);J=l;空闲盘块表的定位文件目录表的定位p

18、rintf(,n 文件数量为 %d ,num);fclose(fp);void type()FILE *fp;int ij;if(fp=fopen(,tfllesys,t/rbt,)=NULL) printf(,fcan not open file ntr);exit(O);fseek(fp,512L,0);fread(&emptytable9sizeof(struct empty),fp); rewind(fp);num=emptytable.filenum; for(i=0J=0;inum;i+J+)fread(&filei,sizeof(struct filename),l,fp);pr

19、intf(f,%s.%s ,fllei.ext); if(J=5) printf(nnH);显示文件内容prlntf(f,nM);char name129extl8;printfC*请输入所要査询的文件名:n“);gets(name);/scanf(M % sf 19name) ;/getchar();print请输入扩展名:);gets(extl);/scanf(11 % sM ,ext 1 );getchar();if(*(name+O)=Ot)printf文件名不能为空! nM); return;lf(*extl=,O,)strcpyCextl/xt11);int

20、sign=O;for(i=0;inum;i+)if(strcmp(9name)=O) & (strcmp(fllei.ext,extl)=O) priiitfC*所找文件为第d个文件-iri+l);slgn=l; break;if(sign=O) print” 无此文件 n“); return;显示文件int b,m,n;b=filei.i;n=fllei.size;printfC*该文件位于第/d块n”,b+l);printfC*从文件读出的文件长度为:%d-AnMi);fseek(fp,b*512L,0);char cc;printfC*文件内容为:n“);printf

21、(ft tf);for( in=OJ=l; inn; m+J+)fseek(fp,b*512L+m,0);/fread(&cc9sizeof(char)9l9fp);cc=fgetc(fp);printf(tl%ctcc);if(J % 40=0)printf(f,n11);printf(r,nf,);fclose(fp);删除一个文件void delflleOFILE *fp;inti;if(fp=fopen(ftfilesys,/,r,t)=NULL)printf(f,can not open file ntf); exit(O);fseek(fp,512L,0);f read (& em

22、pty table 声 izeof(struct empty 人 1 ,fp); rewlnd(fp);niin=emptytable.fllenum; for(i=0;inum;i+) fread(&fileIizeof(struct filename),lfp); char name12,extl8;printfC请输入文件名:n“); gets(name);/scantC % s,name);getchar();printfC*请输入扩展名:n“);gets(extl);/scanf(,f%sft,extl);getchar(); if(*name=,0,) printfC文件名不能为空

23、W); return;if(*extl=O) strcpy(extl/ftxtft);char Judge;printf(,f是否删除文件%s.%s y/n”,name,extl); scanf(tt%c,&Judge); getchar();lf(Jiidge=,y,)ll(Judge=tY,)printf(准备删除文件%s.%s !n,name,ext 1); else if(Judge=ln,)ll(Ju(Ige=,N,) return; elseprintfC*系统默认放弃!n“);return;lilt sign=0;for(i=0;inum;i+)if(strcmp(filei.n

24、amejiame)=O)&(strcmp(fllei.ext,extl)=O) sign=l;break;if(sign=O) printf(”文件名错 iT);return;回收空间int b=filei.i;lilt Amount=filei.Amount;int J;for(J=0;JAmount;j+) emptytable.mapb+=O;for( j=i;Jnum-l;J+) strcpy(,flleJ+l.iiame); strcpy(flleJ.ext,fileJ+l.ext);flleU.i=flle|J+l.i;fileJ.size=flleJ+l.si

25、ze; fileJ.Amount=filej+l.Amount;emptytable.filenum=emptytable.filenum-1; num=emptytable.filenum;WriteFileO;printfC删除成功! n“); fclose(fp);void copy()复制一个文件FILE *fq;int ij,sign; if(fq=fopen(,fllesysn/,rb+tt)=NULL) printf(f,can not open file ntf);exit(O);fseek(fq,512L,0);f read (& empty table,sizeof(str

26、uct empty ),1 ,fq); rewind(fq);niim=emptytable.fllenum;for(i=0;lnum;i+)fread(&fllei9sizeof(struct filename) J, fq);/forchar SourceName 121DestName 121,ext 1 8.ext28;prlntfC谓输入源文件名L); gets(SoiirceName);printfC1请输入源文件扩展名:); gets(extl);printfCi#输入目标文件名:,J; gets(DestName);printf请输入目标扩展文件名“); gets(ext2);

27、 getchar();if(*ext2=l0l) strcpy(ext2/ftxtft);/scanfC%s,SourceName);getchaF();/scanf(,%slextl);getchar();/scanf(f,%s,DestName);getchar();/scanf(tf % s1 ex t2); getcha r ();if(*SourceName)=,Of II (*DestName)=,O) printf(”错误!文件名不能为空!MT); return;if(strcmp(SourceName,DestName)=0) priMf(错误!两个文件名不能相同!MT); r

28、eturn;sign=0;for(i=0;lnum;i+) if(strcmp(SourceName5flleI.name)=0) sign=l;strcpy(,DestName); strcpy(filenum.ext5ext2); /filenum.i=filei.i; filenum.size=filei.size; filenumAmount=filei.Amount; break;/forif(sign=O)printf(不存在源文件n”);return;if (inum)printf(输入的文件名与第(1个源文件相等(i从0开始) 空间分配sign=0;fo

29、r(lnt m=2 ; m0; J-)寻找一连续的空闲盘块if(emptytable.mapm+J-l=l)sign=l;break;/if/forif(sign=O) break;m+=j-l;sign=O;/ forif (m = 19-fllenum.Amount)for(j=0;J fileninn.Amount;J+) emptytable.mapm+j=l; filenum.i=m;elseprintfC*没有足够的连续的盘块数“);写数据FILE *fql;rewind(fq);fql=fq;fseek(fq,(fllei.i) * 512L,0);printfn源文件的起始盘块

30、号:%d,fllei.i);/rewind(fpl);fseek(fq 1 /filenum.i) * 512L,0);printf(nn复制文件的起始盘块号:%d,filenum.i);char cc;printf(Hn源文件内容为:Wf); for(int k=0 ; kfilei.size;k+) fseek(fq,(flleiJ) * 512L+k,0);fread(&cc9sizeof(char)4,fq);printf(f,%cfcc);fseek(fqlXfllenumJ) 512L+k,0); fwrite( & cc,slzeof(char),l ,fq 1);prlntf(

31、HnM); num=num+l; emptytable.fllenum=niim;WriteFileO;写目录及位示图fclose(fq); fclose(fql);void inkfile()建立一个文件 FILE *fp;If(fp=fopen(HfllesysH,Mr+M)=NULL)printf(ftcan not open fileXnpleace Initialization at firstnn); exit(O);struct strNode数据块 char word 64;struct strNode *next;* head,*p,*q;char name9,extl4;i

32、nt i=0J=0;head=p=q=nevv struct strNode; 申请结构体内存空间char ch;printfC*请输入文件内容,按键保存且退出!n“);dofor(i=0;i wordi=ch; jf(ch=f)break;if(ch!=ll)p=new struct strNode;q-next=p;q=p;J+;while(ch!=,);getchar();int numl, size=(J*64+i)*sizeof(char); / 为结构体的个数,i 为不足一个结构 体的字符数/printf(”文件长度为:%dnize);char judge=n;doprintf(”

33、请输入文件的英文名字:”);gets(name);/scanf(t,%stname);getchar();printfC*请输入文件的扩展名:”); gets(extl);/scanf(f 1 % s” 9extl );getchar();if(*extl=,Ot) strcpy(extl,t,txt,t);judge=ty,;if(*name=,O,)printfC*错误!文件名不能为空!nj;printfC*是否放弃此文件Y/N ”);scanf(H%ct,&Judge);getchar();if( (judge=y) II (Judge=,Y,) return;while( (judge

34、=tn,) II(Judge=,Nt); fseek(fp,512L,0);f read (& empty table 声 izeof(struct empty ),1 ,fp);rewind(fp);num=emptytable.filenum;/*for(i=0;inum;i+)f read (& fllelizeof(struct filename), 1 ,fp); printf(M%s.%sn,,fllei.ext);*/for (i=0;i0) numl=numl+l;strcpy(,name);/printf(ft%d %s %s,nu

35、m,,name); strcpy(filenum.ext,extl);flleniim.size = size;flleniim.Amount=num 1;int sign=O ,n=0;空间分配for(tnt m=2 ;m 0; n-)if(emptytable.mapm+n-1=1)slgn=l;break;/if/forif(sign=O)break;m+=n-l;sign=O;/if/form;if(m=10-numl)filenum.i=和* else printf(H 空间不足!nn); return;for(J=0;J 0;J) ch=p-wordi+;fwrite(&ch,sizeof(char),l,fp);if(i=64) 1=0;p=p-next;/ cycle-;rewind(fp);for(J=03=0;lnum;i+%s ,fllei.ext); if(j=5) printf(,nM);fclose(fp);void rename()FILE *fp;If(fp=fopen(,fflIesys,f/,rb+ft)=NULL)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论