




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、操作系统文件系统的设计与实 现课程设计力孝Nj求表尊课程设计题目:文件系统的设计与实现学院:信息工程学院系另IJ:计算机系专业:计算机科学与技术2011年12月30日内蒙古工业大学课程设计任务书学院(系):信息学院计算机系 课程名称:操作系 统课程设计指导教师(签名): 学号:200920201039专业班级: 计算机09 2学生姓名:一、课程设计题目 文件系统的设计与实现二、课程设计的目的通过设计一个小型文件系统,进一步掌握文件管理的方法和技术,使学生初步具有研究、设计、编制和调试操作系统模块的能力。三、课程设计的主要内容和要求(包括原始数据、技术参数、设计要求、工作 量要求等)原始数据:文
2、件目录项结构体,盘块结构体。技术参数:Windows XP系统,VC+6.0开发工具。设计要求:1 .设计基于位示图的文件连续分配算法;2 .设计显示文件目录、建立文件、显示文件内容、复制和删除文件算法;3 .画出以上算法流程图;4 .编程实现算法功能;5 .编写课程设计说明书。工作量要求:完成以上设计要求中的所有算法功能。四、工作进度安排周一:布置、讲解题目,收集资料;周二:系统分析,算法设计;周三:编制、调试程序;周四:测试系统,形成设计结论,编写课设报告;周五:系统及材料验收,课设答辩。五、主要参考文献1张尧学编.计算机操作系统教程(第三版)习题解答与实验指导.北京:清 华大学出版社,2
3、0062汤子瀛主编.计算机操作系统(第三版),西安:西安电子科技大学出版社,20013张坤等编.操作系统实验教程.北京:清华大学出版社,2008审核批准意见系(教研室)主任(签字)目录第一章设计内容11.1设计目的11. 2设计要求11. 3程序设计思想1第二章数据结构、算法和算法流程图22. 2程序功能图32. 3程序流程图3第三章程序运行结果及分析83. 1程序运行结果84. 2程序分析10第四章心得体会10参考文献11附录程序清单132第一章设计内容1. 1设计目的通过设计一个小型文件系统,进一步掌握文件管理的方法和技术, 使学生初步具有研究、设计、编制和调试操作系统模块的能力。1.2设
4、计要求(1)问题描述在任一 os下,建立一个大文件,把它假想成一张盘,在其中实现 一个简单的小型文件系统。(2)基本要求该文件系统没有子目录机制,文件连续分配,不考虑换“盘”和分 区。做一个简单的操作界面,提供五条简单的命令:dir. inkfile. type copy、delfile,分别用于显示文件目录、建立文件、显示文件内容、复制 和删除一个文件。1.3程序设计思想阅读操作系统方面的书籍,了解操作系统的文件系统原理。结合分 析课程设计要求,确定实体以及它们之间的关系。实体关系有三张表(磁 盘空间分配表、文件表、打开文件表)、一个模拟磁盘的数组、命令服 务和用户构成。用户负责输入命令。命
5、令服务实现命令的解释、命令检 查、命令帮助以及调用相关模块执行相应的命令功能。建立一个系统文件(模拟盘),并对此进行盘块的划分,第一个盘 块存放文件目录,第二盘块存放盘块位示图,自第三个盘块开始存放各 具体文件的内容,文件目录存放文件的名字,文件的扩展名,开始盘块 号,所占用的盘块数目,文件的大小;盘块位示图用来标记盘块是否被 占用。构造这些实体的关系图,数据流图、程序流程图来进行具体的设计。第二章数据结构、算法和算法流程2. 1数据结构数据结构说明:本程序所运用的主要有两个数据结构,分别如下:文件目录结构:struct filename char name9;char ext4;int i;
6、磁盘块号int Amount;long int size;盘块结构:struct empty int map100;int filenum;文件目录项结构体文件名扩展名文件所占用磁盘块的第一个文件所占用磁盘块的块数文件大小/盘块结构体 盘块位示图 文件数量22. 2程序功能图文件系统提供的文件操作有建立文件(mkfile)、复制文件(copy)、显示文件 所有内容(type)、删除文件(delfile)。可以通过键盘输入命令来模拟文件的操作。2. 3程序流程图(1)主程序流程图:ra o o8(2)初始化模块流程图:(4)显示目录流程图:(3)写入磁盘流程图:I(5)显示文件流程图:(7)复制
7、文件流程图:(6)删除文件流程图:(8)创建文件流程图:皮123第三章程序运行结果及分析3. 1程序运行结果(1)程序主界面?请选择一个功能”?1.In it Sysf ile.2.Dir.3.Create a f ile.4.Type.5.Copy.6.De Ifile.7.Exit.(2)创建一个文件,输入“3”显示“输入文件内容,按键保存且退出!”请输入文件内容,按e键保存且退出(3)往文件里写内容:Hello World!显示文件长度,并要求给文件命名,命名后保 存返回主界面卷输入文件内容,按e键保存且退出?Hello World?0:a文件长度为:12 道出法件的英文名字:a 请输入
8、文1lies .txt?”请选择一个功能”?1.I nit Sysf ile.2.Dir.3.Create a f ile.4.Type.5.Copy.6.De Ifile.7.Exit (4)读取刚才写入的文件,结果正确4hes.txta. a请输入文件名= 请输入扩展名:a一从一找到孰个文件 秋。开始)一 一 -该文件位于第3从第0块开始块 L一口文件读出为文在长度为:12I文件内容为一Hello World?(5)删除刚写入的文件,测试成功番输入文件名:31清输入扩展名=是否删除文件a.a ty/nly港备删除文件a.a 3. 2程序分析本程序使用一个Windows下的文件来模拟一个磁盘
9、,向磁盘中装入文件并 进行相关操作。采用了以空间换时间的算法,文件的大小在系统中是固定的,虽 然会浪费一些空间,但文件的存取速率会加快。第四章心得体会操作系统课程设计是本课程重要的实践教学环节。课程设计的目的,一方面使 学生更透彻地理解操作系统的基本概念和原理,使之由抽象到具体;另一方面,通 过课程设计加强学生的实验手段与实践技能,培养学生独立分析问题、解决问题、 应用知识的能力和创新精神。与本课程的实验教学相比,课程设计独立设课,具有 更多的学时,给学生更多自行设计、自主实验的机会,充分放手让学生真正培养学 生的实践动手能力,全面提高学生的综合素质。在设计的过程中遇到问题,可以说得是困难重重
10、,难免会遇到过各种各样的问 题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够 深刻,掌握得不够牢固,不过设计终于顺利完成了,在设计中遇到了很多编程问题, 最后在老师的辛勤指导下,终于游逆而解。同时,在老师的身上我学得到很多实用 的知识,再次我表示感谢!同时,对给过我们帮助的所有同学和各位指导老师再次 表示忠心的感谢!在设计过程中,查询了不少相关资料,不断的发现问题、提出问题、解决问题。 在对自己所编写的源程序段的纠错的过程中,使我更好的理解了操作系统中文件系 统的理论知识,同时在编程时用到了模块化的设计思想,这种编程方法可以使我们 的编程变的更简单,可以使我们的查错与纠
11、错变的更方便。总的来说通过这次的设 计的学习使我学到了很多在平时的学习中学不到的很多东西,通过这次课程设计, 使我对操作系统和编程产生兴趣,我想我会在这条路上继续前进下去。我相信,只 要不断的严格要求自己,注意培养自己的思维能力,就一定会有更大更辉煌的发展 和提氤参考文献1 .教材1张尧学主编.计算机操作系统教程(第三版).北京:清华大学出版社,20062 .主要参考书1张尧学编.计算机操作系统教程(第三版)习题解答与实验指导.北 京:清华大学出版社,20062汤子瀛主编.计算机操作系统(第三版).西安:西安电子科技大学 出版社,20013张坤等编.操作系统实验教程.北京:清华大学出版社,20
12、084张丽芬等编.操作系统实验教程.北京:清华大学出版社,20065 Andrew S.Tanenbaum. Modern Operating Systems, SecondEdition.Englewood Cliffs,N.J,Prentice Hall, 20016屠祁等编.操作系统基础(第三版).北京:清华大学出版社,20007冯耀霖等编.操作系统.西安:西安电子科技大学出版社,20018左万历.计算机操作系统教程(第二版).北京:高等教育出版社,2004附录程序清单#include ,iostream.hH#include string”#include stdio.hextern
13、C void exit(int);文件目录项结构体文件名扩展名扩展名较小设为10文件所占用磁盘块的第一个磁盘块号文件所占用磁盘块的块数文件大小struct filenamechar name12;char ext8;int i;int Amount;long int size;fl!e20;int num;struct empty盘块结构体 int map20;盘块位示图int fllenum;文件数量Jemptytable;模块说明:void Systemlnito模拟磁盘文件初始化函数for(int 1=2;119;1+) 初始化存放位示图的盘块emptytable.mapl=O; (em
14、ptytable.mapO=l;empty table.map 1 =1;emptytable.filenum=O;FILE *fp;if(fp=fopen(,niesvs,wb+,)=NULL) wb+:为读写建立一个“新“文件;打开 系统文件将文件目录霖块和用“W”打开的文件只能向该文件写入。若打开的文件不存在,则以指定的文件名建立该文件,若打开的文件已经存在,则将该文件删去, 重建一个新文件。+:读和写(位示图盘块写入系统文件printf(f,can not open file ntr);exit(O);fseek(fp,512L,0);/ int fseek(FILE *stream,
15、 long offset, int fromwhere);函数设置文件指针stream的位置。如果执行成功,stream将指向以fromwhere (偏 移起始位置:文件头0,当前位置1,文件尾2)为基准,偏移offset (指针偏移量) 个字节的位置。如果执行失败(offset超过文件自身大小),则不改变stream指向的位 置。成功,返回0,否则返回其他值。fwrite(&emptytable,sizeof(struct empty)J,fp);把结构体 emptyable 中的内容写入到fp中,数菰项的大小为struct empty,数据项的个数为1”fclose(fp);printfC
16、!初始化系统成功!”);void VVriteFile()将目录以及空闲盘块表写入磁盘FILE *fp;if(fp=fopen(,ffllesys,tlrb+tt)=NULL)printf(,fcan not open file n,r); exit(O);rewind(fp);将文件内部的位置指针重新指向一个流(数据流/文件)的开头for(int i=0;inum;i+)fwrite(&fileiizeof(struct filename)文件目录fseek(fp,512L,0);fwrite(&emptytable,sizeof(struct empty),fp); fclose(fp);
17、位示图void dir() int ij;FILE *fp;if(fp=fopen(ftfilesysM/lrbtl)=NULL) printf(Hcan not open file nlf);exit(O);显示文件目录fseek(fp,512L,0);fread(&emptytablelzeof(struct empty), 1 ,fp);rewind(fp);nuin=emptytable.fllenum;for(i=0;inum;i+)fread(&fileiizeof(struct filename)J,fp); if (num!=O) pHntf(系统所有文件for(i=OJ=l;
18、inum;l+J+)(printf(H%s.%s ,filei.ext);if(J=5) printf(,tnM);J=l;空闲盘块表的定位文件目录表的定位printf(Hn 文件数量为 %d fclose(fp);void type()FILE *fp;int 1J;if(fp=fopen(,tfllesys,/rbt,)=NULL) printf(,fcan not open file nH);exit(O);显示文件内容fseek(fp,512L,0);fread(&emptytableizeof(struct empty),l,fp);rewind(fp);num
19、=emptytable.filenum;for(i=0J=0;inum;i+J+) fread(&filel,sizeof(struct filename), printf(f,%s.%s ,fllei.ext); if(J=5) printf(nnH);prlntf(f,nM);char name12,extl8;printf(”请输入所要查询的文件名:n”);gets(name);/scanf(M % sf 19name) ;/getchar();printf(请输入扩展名gets(extl);/scanf(11 % sM ,ext 1 );getchar();if(
20、*(name+O)=,Ot) (printf(文件名不能为空! nM);return;)if(*extl=,O,)strcpyCextl/xt11);int sign=O;for(l=0;inum;i+)if(strcmp(,name)=O) & (strcmp(filei.ext,extl)=O) printfC,一所找文件为第d个文件一sign=l;break;if(si 即=0) prhitf(”无此文件n”);return;)显示文件int b,m,n;b=filei.i;n=fllei.size;printfC该文件位于第d块nb+l);printfC,从文件读出
21、的文件长度为:/fseek(fp,b*512L,0);char cc;printfC 一文件内容为-An”);printf(ft );for( m=O,J=l; inn; m+J+) (fseek(fp,b*512L+m,0);/fread(&cc5sizeof(char),l5fp);cc=fgetc(fp);printf(tl%ctcc);if(J % 40=0)printf(f,n”);printf(nnH);fclose(fp);(删除一个文件void delflle()FILE *fp;inti;if(fp=fopen(ftfilesys,/,r,t)=NULL) (printf(f
22、,can not open file ntf);exit(O);fseek(fp,512L,0);fread (&emptytableizeof(struct empty),1 ,fp);rewlnd(fp);niin=emptytable.fllenum;for(i=0;inum;i+)fread(&fileIizeof(struct filename), 1 ,fp);char name12,extl8;prlntf(”请输入文件名:n);gets(name);/scanf(,%slt ,name);getchar();printf(请输入扩展名:n”);gets(extl);/scanf
23、(,l%stextl);getchar();if(*name=,0,) prhitfC文件名不能为空!n”); return;)if(*extl=,O,) strcpy(extl/ftxtM);char Judge;printf(是否删除文件ss y/n,name,extl);scanf(tt%c,&Judge); getchar();lf(Jiidge=,y,)ll(Judge=tY,)printf(准备删除文件%s.%s !n9name,extl);else if(Judge=ln,)ll(JucIge=,N,) return; elseprhitf(系统默认放弃!n); return;i
24、nt sign=0;for(i=0;inum;i+)if(strcmp(9name)=0)&(strcmp(fllei.ext9extl)=0) (sign=l;break;(if(slgn=O) piintfC 文件名错 n);return;回收空间int b=filei.i;int 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,fileU+l.ext)
25、;flleU.i=flle|J+l.i;fileJ.size=flleJ+l.size;fileJ.Amount=filej+l.Amount; emptytable.filenum=emptytable.filenum-l; num=emptytable.filenum;WriteFileO;printtr删除成功! n);fclose(fp); void copy()复制一个文件FILE *fq;int ij,sign;if(fq=fopen(,fllesysn,Hrb+tt)=NULL)printf(f,can not open file ntf);exit(O); fseek(fq,5
26、12L,0);fread(&emptytable5sizeof(struct empty) J,fq);rewind(fq);niim=emptytable.fllenum;for(i=0;lnum;i+)fread(&filei,sizeof(struct filename),fq);/forchar SourceNameF 12DestName 12,ext 1 8.ext28;pHntf(请输入源文件名产);gets(SoiirceName);piintfr请输入源文件扩展名:”);gets(extl);printf(”请输入目标文件名:”); gets(DestName);printf
27、(请输入目标扩展文件名”);gets(ext2); getchar();if(*ext2=0) strcpy(ext2,Mtxtft);scanf( s”,SourceName);getchar();/scanf(,%slextl);getchar();/scanf(f,%s,DestName);getchar();/scanf(tf % s1 ex t2); getcha r ();if(*SourceName)=tOt II (*DestName)=,O) printf(错误!文件名不能为空!n”); return;(if(strcmp(SourceName,DestName)=0)pri
28、ntf(错误!两个文件名不能相同!MT); return;sign=0;for(l=0;inum;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)printfC输入的文件名与第d个源文件相等(i从
29、0开始空间分配sign=0;for(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 filenuin.Amount;J+) emptytable.mapm+j=l; filenum.i=m;)elseprintf(没有足够的连续的盘块数);写数据FILE *fql;rewind(fq);fql=fq;fseek(fq,(fllei.i) * 512L.0)
30、;printf(”n源文件的起始盘块号:%dfllei.i);/rewind(fpl);fseek(fq 1 /filenum.i) * 512L,0);prlntf(”n-复制文件的起始盘块号:%d,filenum.i);char cc;printfn源文件内容为for(int k=0 ; kfilei.size;k+) fseek(fq,(flleiJ) * 512L+k,0);fread(&cc5sizeof(char)J,fq);q=p;J+;while(ch!=,);getchar();int numl, size=(J*64+i)*sizeof(char); / 为结构体的个数,i
31、 为不足一个结构 体的字符数/prlntf(文件长度为:%dnjSlze);char judge=,n;doprintf(”请输入文件的英文名字:“);gets(name);/scanf(t,%stname);getchar();printf (”请输入文件的扩展名:n);gets(extl);/scanf(f,%sf, ,extl);getchar();if(*extl=,Ot) strcpy(extl,t,txt,t);judge=ty,;if(*name=,0,)printfr错误!文件名不能为空八n”); printf(是否放弃此文件Y/N “);scanf(H%ct,&Judge);
32、getchar(); if( (Judge=y) II (Judge=Y) return;while( (judge=tn,) II (Judge=fNf);fseek(fp,512L90);f read (&emptytable,sizeof(struct empty),1 ,fp);rewind(fp);num=emptytable.filenum;/*for(i=0;inum;i+)fread (&fllelizeof(struct filename) J ,fp);printf(M%s.%sn,,fllei.ext);产/for (i=0;i0) numl=niin
33、l+l;strcpy(,name);/printf(ft%d %s %s,num,,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(empty table.map m+n-1 = 1)slgn=l;break;/if/forif(sign=O)break;m+=n-l;sign=O;/if/forif(m=10-numl) filenum.i=m;*else(p
34、rlntf(空间不足!n); return;)for(j=0;J 0;J-) ch=p-wordi+;fwrite(&ch,sizeof(char)J,fp);if(i=64)1=0;p=p-next;)/ cycle-;rewind(fp);for(J=03=0;lnum;i+,J+)printf( 断点 dn”,l);fread(&filei,sizeof(struct filename) J,fp);/prlntf(tf %sn,);printf(,f%s.%s ,fllei.ext);if(j=5) printf(,nM);(fclose(fp);void rename()FILE *fp;If(fp=fopen(,fflIesys,f/
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 通信原理简明教程(第2版)课件 第8章 同步原理
- 2025年河北省定州市辅警招聘考试试题题库附答案详解(完整版)
- 2025年Z世代消费习惯研究:新消费品牌如何提升用户忠诚度报告
- 2025年K2学校STEM课程实施与教师教学反思研究报告
- 膀胱肿瘤整块切除术手术技术2025
- 初中数学九年级下册统编教案 6.5相似三角形的性质(第1课时)
- 2025届高考物理大一轮复习课件 第九章 第49课时 专题强化:带电粒子在电场中的力电综合问题
- 抗炎缓解治疗药物
- 2025年父亲节小学生国旗下讲话稿-父爱如山温暖相伴
- 物流司机培训试题及答案
- 中国丝绸简述ppt课件
- 苏轼《浣溪沙》优秀课件
- 塑料包装袋购销合同
- 生产良率系统统计表
- 代理机构服务质量考核评价表
- 浅谈打击乐器在小学低段音乐课堂中的运用
- 2018年泸州市生物中考试题含答案
- S7、S9、S11系列变压器损耗表
- 消防电气检验批质量验收记录表
- 品控员作业指导书
- 医疗器械质量手册含程序文件
评论
0/150
提交评论