欢迎来到装配图网! | 帮助中心 装配图网zhuangpeitu.com!
装配图网
ImageVerifierCode 换一换
首页 装配图网 > 资源分类 > DOC文档下载
 

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

  • 资源ID:70609163       资源大小:779.50KB        全文页数:28页
  • 资源格式: DOC        下载积分:10积分
快捷下载 游客一键下载
会员登录下载
微信登录下载
三方登录下载: 微信开放平台登录 支付宝登录   QQ登录   微博登录  
二维码
微信扫一扫登录
下载资源需要10积分
邮箱/手机:
温馨提示:
用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
支付方式: 支付宝    微信支付   
验证码:   换一换

 
账号:
密码:
验证码:   换一换
  忘记密码?
    
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

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

学校代码: 学 号:课程设计题 目:文件系统的设计与实现 学生姓名:学 院:系 别:计算机系 专 业:班 级:指导教师: 内蒙古工业大学课程设计任务书(一)学院(系):信息学院计算机系 课程名称:操作系统课程设计 指导教师(签名): 专业班级: 软件工程 学生姓名: 学号: 一、课程设计题目文件系统的设计与实现二、课程设计的目的通过设计一个小型文件系统,进一步掌握文件管理的方法和技术,使学生初步具有研究、设计、编制和调试操作系统模块的能力。 三、课程设计的主要内容和要求(包括原始数据、技术参数、设计要求、工作量要求等) 原始数据:文件目录项结构体,盘块结构体。 技术参数:Windows XP系统,VC+6.0开发工具。设计要求: 1 设计基于位示图的文件连续分配算法;2 设计显示文件目录、建立文件、显示文件内容、复制和删除文件算法;3 画出以上算法流程图;4 编程实现算法功能;5编写课程设计说明书。 工作量要求:完成以上设计要求中的所有算法功能。四、工作进度安排 周四:布置、讲解题目,收集资料;周五:系统分析,算法设计;周一:编制、调试程序;周二:测试系统,形成设计结论,编写课设报告;周三:系统及材料验收,课设答辩。五、主要参考文献1 张尧学编计算机操作系统教程(第三版)习题解答与实验指导北京:清华大学出版社,20062 汤子瀛主编计算机操作系统(第三版)西安:西安电子科技大学出版社,2001 3 张坤等编操作系统实验教程北京:清华大学出版社,2008审核批准意见系(教研室)主任(签字) 目 录第一章 设计内容11.1系统环境11.2设计目的11.3程序设计思想1第二章 实现文件管理的数据结构22.1数据结构22.2 程序功能图2第三章 算法和算法流程图43.1整个系统的流程图43.2每个功能块的算法思想和流程图53.2.1初始化盘块53.2.2用户选择功能53.2.3显示文件目录53.2.4创建文件53.2.5显示文件内容63.2.6复制文件73.2.7删除文件7第四章 程序调试及运行情况84.1初始化系统84.2创建文件84.3显示文件目录94.4显示文件内容104.5复制文件104.6删除文件114.7退出系统12第五章 课程设计出现的问题及解决的方法13第六章 课程设计的体会与自我评价总结146.1课程设计的体会146.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 FCBchar name10;/文件名char ext4;/扩展名int i;/开始块号int amount;/所用总块数long int size;/文件大小struct FCB *next;FCB; /盘块结构体struct empty /盘块结构体 int map100; /盘块位示图 int filenum; /文件数量table; /模拟盘块的结构体(每个结构为一个盘块,共100个盘快)struct piece char text2;/每个盘块的大小为2个字节piec200;2.2 程序功能图文件系统提供的文件操作具有显示文件目录,建立文件,显示文件内容,复制文件和删除文件五项功能,用户可以通过输入每个功能的选项来进入每个功能块,完成相应的功能。如下为整个程序的功能图。 图2.1程序功能图第三章 算法和算法流程图 3.1整个系统的流程图文件系统提供的文件操作具有显示文件目录,建立文件,显示文件内容,复制文件和删除文件五项功能,用户可以通过输入每个功能的选项来进入每个功能块,完成相应的功能。开始初始化盘块输入命令分析命令有无该命令?显示错误信息创建文件显示目录显示内容复制文件删除文件有无执行命令结束图2.1系统流程图3.2每个功能块的算法思想和流程图3.2.1初始化盘块建立一个系统文件(模拟盘),并对此进行盘块的划分,第一个盘块存放文件目录,表示为table.map0=1;第二盘块存放盘块位示图,表示为table.map1=1,自第三个盘块开始存放各具体文件的内容,用table.mapi=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+),顺序将文件内容存放于盘块中,当文件内容的字节数为奇数时,且每个盘块存放两个字节,因此用语句piecpoint-1.text1='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.mapi=0;/0表示盘快可用 table.map0=1;/0号盘块被目录占用 table.map1=1;/1号盘块被位示图占用 table.filenum=0;第六章 课程设计的体会与自我评价总结6.1课程设计的体会课程设计是培养学生综合运用所学知识,发现,提出,分析,提出和解决实际问题,锻炼实践能力重要环节,是对学生实际工作能力的具体训练和考察过程,回顾起这次为期一个星期的操作系统课程设计,使我感慨颇多,从选题到分析,从理论到实践,在整整一个星期的日子里,可以说是苦多于甜,但是可以学到很多很多的东西,同时不仅可以巩固以前学过的知识,而且学到了很多在书本上所没有学过的知识。通过这次课程设计使我懂得了理论和实践相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识同实践相结合起来,从理论中得出结论,才能真正学以致用,从而提高自己实际动手能力和独立思考的能力。在设计中遇到的问题可以说是困难重重,期间遇到各种各样的问题,同时在设计过程中也发现了自己的不足之处,对以前所学过的知识理解不够深刻,掌握的不够牢固,通过这次课程设计之后,把以前所学过的知识重新温故了一遍。6.2自我评价与总结通过这次为期一周的操作系统课程设计,我从中收获了很多,同时也发现了自己有很多的不足之处。在做一个系统设计时,在编程之前应该全面细致的了解题目,进行充分的理解,全面的设计,包括系统的每一个功能块都因做出详细的设计。否则,一边编程一边设计容易浪费时间与精力,打乱整个系统设计的思路。在写个文件系统时,数据结构的表示方法也是比较难掌握的,在做这个课程设计时,我要不时的翻书来察看我们所需的知识点,在做的过程中,会不时的在结构体上再添加有关的内容,因为在第一次写的时候,还没有完全考虑好整个结构。这周的课程设计从设计到最后书写实验报告,我学习到了许多书本上学习不到的知识,而且巩固了理论知识,将理论和实践结合起来,锻炼了自己独立思考的能力。同时,在完成这次操作系统的课程设计中,发现自己掌握的知识远远不够,即使学习过的东西掌握的程度也不够。在今后的学习中更加努力的学习,弥补自己的不足。 参考文献1 严蔚敏 吴伟民编数据结构C语言版北京:清华大学出版社,20062 汤子瀛主编计算机操作系统(第三版)西安:西安电子科技大学出版社,2001 3 张坤等编操作系统实验教程北京:清华大学出版社,20084 张丽芬等编操作系统实验教程北京:清华大学出版社,20065 Andrew S.Tanenbaum. Modern Operating Systems, Second Edition.Englewood Cliffs,N.J,Prentice Hall, 20016 屠祁等编.操作系统基础(第三版)北京:清华大学出版社,20007 冯耀霖等编.操作系统.西安:西安电子科技大学出版社,20018 左万历计算机操作系统教程(第二版)北京:高等教育出版社,2004附 录程序清单#include<stdio.h>#include<string.h>typedef struct FCB/文件控制块char name10;/文件名char ext4;/扩展名int i;/开始块号int amount;/所用总块数long int size;/文件大小struct FCB *next;FCB;FCB *first,*end;/分别指向第一个和最后一个文件的FCBstruct emptyint map100;int filenum;table;/模拟盘快的结构体(每个结构为一个盘块,共100个盘快)struct piecechar text2;/每个盘快的大小为2个字节piec200;int point=2;/顺序分配盘块时指示已分配到的盘块(因为0、1号盘块已被系统占用,所以从2开始)void MainView()printf("-简单文件系统-nn");printf("*输入0退出*n");printf("*输入1显示文件目录*n");printf("*输入2建立文件*n");printf("*输入3显示文件内容*n");printf("*输入4复制文件*n");printf("*输入5删除文件*nn");/初始化盘块void SystemInit() for(int i=2;i<100;i+)table.mapi=0;/0表示盘快可用table.map0=1;/0号盘块被目录占用table.map1=1;/1号盘块被位示图占用 table.filenum=0;/判断文件是否重名bool DeFileName(char *name,char *ext)FCB *p1;p1=first->next;while(p1!=NULL)if(strcmp(p1->name,name)=0)&&(strcmp(p1->ext,ext)=0)printf("n文件重名,非法操作!n");return false;p1=p1->next;return true;/创建文件的函数void CreFile()int num;/临时存放所用块数char tex100;/临时存放文件内容FCB *p1;p1=new FCB;printf("请输入文件名:");scanf("%s",p1->name);printf("请输入扩展名:");scanf("%s",p1->ext);if(DeFileName(p1->name,p1->ext) printf("请输入文件内容:"); scanf("%s",tex); num=(strlen(tex)%2)?(strlen(tex)/2+1):(strlen(tex)/2); p1->amount=num; p1->i=point;for(int i=0;i<strlen(tex);i+)piecpoint.text0=texi;piecpoint.text1=tex+i;table.mappoint=1;point+;if(strlen(tex)%2)piecpoint-1.text1='0'p1->size=strlen(tex)*sizeof(char);end->next=p1;end=p1;end->next=NULL;table.filenum+;printf("n文件创建成功!nn");/显示文件目录的函数void Display()FCB *p1;printf("文件名t初始块号t所占块数t文件大小n");p1=first->next;while(p1!=NULL)printf("%s.%st%dt%dt%dn",p1->name,p1->ext,p1->i,p1->amount,p1->size);p1=p1->next;printf("nn"); /显示文件内容的函数void ShowText()FCB *p1;p1=first->next;printf("系统现有文件如下: n");while(p1!=NULL)printf("%s.%sn",p1->name,p1->ext);p1=p1->next; char name10;char ext4;printf("请输入要查看的文件名:");scanf("%s",name);printf("请输入要查看的文件扩展名:");scanf("%s",ext);p1=first->next;while(p1!=NULL)if(strcmp(p1->name,name)=0)&&(strcmp(p1->ext,ext)=0)printf("n文件%s.%s的内容为:n",p1->name,p1->ext);for(int i=p1->i;i<(p1->i+p1->amount);i+)/printf("%d",i);printf("%c",pieci.text0);printf("%c",pieci.text1);printf("nn");break;p1=p1->next;if(p1=NULL)printf("不存在此文件!n");/复制文件的函数void CopyFile()FCB *p1,*p2; char name10;char ext4;p1=first->next;printf("系统现有文件:n");while(p1!=NULL)printf("%s.%sn",p1->name,p1->ext);p1=p1->next;printf("n请输入要复制的文件名:");scanf("%s",name);printf("请输入要复制的文件扩展名:");scanf("%s",ext);p2=first->next;while(p2!=NULL)if(strcmp(p2->name,name)=0)&&(strcmp(p2->ext,ext)=0)break;p2=p2->next; if(p2!=NULL)printf("请输入目标文件名:");scanf("%s",name);printf("请输入目标文件扩展名:");scanf("%s",ext);if(DeFileName(name,ext)p1=new FCB; strcpy(p1->name,name);strcpy(p1->ext,ext);p1->i=point;p1->amount=p2->amount;p1->size=p2->size;for(int i=p2->i;i<(p2->i+p2->amount);i+)piecpoint.text0=pieci.text0;piecpoint.text1=pieci.text1;table.mappoint=1;point+;end->next=p1;end=p1;end->next=NULL;table.filenum+;printf("文件复制成功!n");elseprintf("要复制的文件不存在!n");/删除文件的函数void DelFile()FCB *p1,*p2;char name10;char ext4;printf("请输入要删除的文件名:");scanf("%s",name);printf("请输入要删除的文件扩展名:");scanf("%s",ext);p1=first->next;p2=first;while(p1!=NULL)if(strcmp(p1->name,name)=0)&&(strcmp(p1->ext,ext)=0)break;p1=p1->next;/*if(p1!=NULL)printf("%sn",p1->name);*/if(p1=NULL)printf("不存在要删除的文件!n");elsewhile(p2->next!=p1)p2=p2->next;p2->next=p1->next;if(p1=end)end=p2;for(int i=p1->i;i<(p1->i+p1->amount);i+)table.mapi=0;table.filenum-;printf("删除文件成功!n");void main()int flag;/标识操作类型first=end=new FCB;end->next=NULL;SystemInit();printf("初始化系统完成!nn");MainView();scanf("%d",&flag);while(flag)switch(flag)case 1: Display();break;/显示文件目录case 2: CreFile();break;/创建文件case 3: ShowText();break;/显示文件内容case 4: CopyFile();break;/复制文件case 5: DelFile();break;/删除文件default:printf("输入错误,请重新输入!n");MainView();scanf("%d",&flag);

注意事项

本文(操作系统课程设计文件系统的设计与实现)为本站会员(沈***)主动上传,装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知装配图网(点击联系客服),我们立即给予删除!

温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!