操作系统课程设计-文件系统目录管理.docx

上传人:李司机 文档编号:1834606 上传时间:2022-12-21 格式:DOCX 页数:49 大小:213.78KB
返回 下载 相关 举报
操作系统课程设计-文件系统目录管理.docx_第1页
第1页 / 共49页
操作系统课程设计-文件系统目录管理.docx_第2页
第2页 / 共49页
操作系统课程设计-文件系统目录管理.docx_第3页
第3页 / 共49页
操作系统课程设计-文件系统目录管理.docx_第4页
第4页 / 共49页
操作系统课程设计-文件系统目录管理.docx_第5页
第5页 / 共49页
点击查看更多>>
资源描述

《操作系统课程设计-文件系统目录管理.docx》由会员分享,可在线阅读,更多相关《操作系统课程设计-文件系统目录管理.docx(49页珍藏版)》请在三一办公上搜索。

1、操作系统课程设计-文件系统目录治理文件治理系统一目录文件治理的设计目录第一章课程设计目的和要求11课程设计目的12课程设计要求12.1 课程设计思想原理12.2 课程题目12.3 提交课程设计报告2第二章课程设计内容31文件治理系统结构32文件系统采用索引文件结构32.1 磁盘模拟32.2 文件的逻辑结构32.3 目录结构324用户接口5第三章详细设计71程序功能模块图72实体关系图73数据流图84数据结构设计85程序流程图115.1 建立文件目录(mkdr)程序流程图115.2 删除文件目录(rmdir)程序流程图12第四章程序运行与测试131程序运行主界面132用mkdirdirname命

2、令仓IJ立子目录133用IS命令显示当前目录下信息134用rmdirdirname命令删除子目录.145用Cddirname命令改名当前目录14第五章课程设计总结16附录1参考文献17附录11程序清单18第一章课程设计目的和要求1课程设计目的操作系统课程主要讲述的内容是多道操作系统的原理与技术,与其它计算机原理、编译原理、汇编语言、计算机网络、程序设计等专业课程关系十分密切.本课程设计的目的综合应用学生所学知识,建立系统和完整的计算机系统概念,理解和稳固操作系统根本理论、原理和方法,掌握操作系统开发的根本技能.通过模拟文件系统的实现,深入理解操作系统中文件系统的理论知识,加深对教材中的重要算法

3、的理解.同时通过编程实现这些算法,更好地掌握操作系统的原理及实现方法,提升综合运用各专业课知识的水平.2课程设计要求2.1 课程设计思想原理阅读操作系统方面的书籍,了解操作系统的文件系统原理.结合分析课程设计要求,确定实体以及它们之间的关系.实体关系有三张表(磁盘空间分配表、文件表、翻开文件表)、一个模拟磁盘的空间、命令效劳和用户构成.用户负责输入命令.命令效劳实现命令的解释、命令检查以及调用相关模块执行相应的命令功能.磁盘空间分配表,采用链表结构,每个节点保存模拟磁盘的一个逻辑块的信息,包括块的最大长度,文件占用长度,占用标志.如果占用标志为0,即该空间可分配给文件.初始化磁盘空间分配表链表

4、,首先把整个模拟磁盘作来一块,并置占用位为0.当有进程申请磁盘空间时,从头开始遍历,检查占用位,如果该块为可分配,那么检查块大小,假设块长度大于或等于申请空间大小,那么把块的前一局部(等于申请大小)分配给文件,并置标志位为占用.剩下的大小作来一个新块,作来一个新节点插入到原节点的后边,标志位为可用.这样就实现了模拟磁盘的线性分配.构造这些实体的关系图,数据流图、程序流程图来进行具体的设计.2.2 课程题目要求设计一个文件系统目录模拟程序,通过该程序能够实现简单的目录治理操作: 创立多级目录设计树型目录结构,能够从根目录开始创立树状的多级子目录. 删除子目录实现删除当前目录下的子目录操作. 显示

5、当前目录下信息能够实现显示当前目录下子目录及文件信息的操作. 更改当前目录通过操作可以改变当前目录,返回上级目录或进入下级子目录. 在目录下创立文件能够在目录下实现创立文件的操作.2.3提交课程设计报告在规定的时间完成课程设计各阶段的任务,最后提交详细的课程设计报告.第二章课程设计内容1文件治理系统结构 文件的逻辑结构 文件的物理结构 目录结构 磁盘分配回收 文件的保护 用户接口2文件系统采用索引文件结构2.1 磁盘模拟磁盘是断电后内容不丧失的,因此用文件模拟磁盘.要求模拟系统存在两块硬盘: 用一个文件FAT1.模拟磁盘C 磁盘的每个盘块512字节,模拟磁盘共有128块. 磁盘中第O块存放专用

6、块内容,第1、2块存放根目录,其余存放子目录和文件.2.2 文件的逻辑结构文件的逻辑结构采用流式结构;文件的内容均采用文本文件,系统中有两种文件:一种是存放任意字符的文件一种是可执行文件:可执行文件的内容就是系统内进程的程序体.2.3 目录结构目录结构采用树型目录结构.2.3.1 目录项内容(16个字节):目录名、文件名:6个字节; 扩展名:3个字节(可执行文件扩展名为混新目录没有扩展名); 目录、文件属性:1字节; 文件长度:2字节(目录没有长度,字节数). 地址:直接地址项1个,一级索引项1个; 预留1字节1.1.2 根目录根目录位置固定,占用磁盘2块,大小固定,共16项,占用模拟磁盘第1

7、、2块;1.1.3 子目录位置不固定,大小不固定(至少建立一级子目录,最好支持多级子目录).1.1.4 磁盘分配 磁盘的分配采用混合索引结构的分配方式.系统采用成组链接法记录磁盘空间的使用情况. 空闲块每组登记10个空闲块,专用块占用第0块. 索引块中每个盘块号占用4字节,登记32块15图21文件系统目录映射方式图22文件块的分配2.4用户接口用户接口提供用户接口操作命令,要求实现以下命令:(1)创立目录:mkdirdirname在当前目录下建立子目录,假设有同名文件夹存在或目录己满,那么程序进行提示,并拒绝创立.(2)删除目录:rmdirIdirname在删除目录前,系统要求用户进行确认删除

8、(3)显示当前目录下信息:Is输入Is命令后,系统会显示当前目录下所有子目录和文件的信息,包括文件名,文件类型等信息(4)改变当前目录:cddirname通过该命令可改变当前目录,进入上级目录或下级子目录(5)创立文件:create1.ename在目录下创立一个文本文件文件 .5屏幕显示屏幕显示要求包括:(1)用户命令接口,用于系统运行时用户输入命令;(2)磁盘目录显示,要求显示磁盘的树型目录结构;(3)磁盘使用情况,显示磁盘每一个磁盘块的空间是否空闲.第三章详细设计1程序功能模块图文件系统提供的目录操作有建立目录(mkdir)、删除目录(皿曲)、显示目录下内容(Is)、改变当前目录?办、创立

9、文件(Create).可以通过键盘输入命令来模拟文件的操作.通过exit命令退出程序.图31模拟文件系统模块图2实体关系图图3-2实体关系图命令效劳使得用户能够输入命令,在需要时提供命令的帮助.同时能够分析命令,调用相应的命令模块对模拟磁盘、磁盘空间分配表、文件表、翻开文件表进行操作.磁盘空间分配表记录模拟磁盘的使用情况.文件表记录文件的信息和在磁盘里的位置等信息.打开文件表记录已翻开的文件,对应文件表中的文件信息,和文件表里的文件节点类似,记录了文件在模拟磁盘中的信息.3数据流图图3-3敷据布图4数据结构设计通过分析课程设计要求,具体设计出如下数据结构:(1)定义常量constchar*Fi

10、1.ePath=C:myfi1.es”;constintB1.ockSize=512;盘块大小constintB1.ockCount=128;盘块数constintDiskSize=B1.ockSize*B1.ockCount;磁盘大小constintB1.ockFcbCount=B1.ockSize/sizeof(FCB);目录文件的最多FCB数通过定义常量确定模拟文件系统磁盘的路径,以及文件块的大小,盘块数,以及分配的磁盘大小和目录文件的最多文件限制块0人8)数目.(2)文件限制块结构体定义structFCB文件限制块charfname16;文件名chartype;文件类型intsize;

11、文件大小intfatherBIockNum;父目录块号intCurrentB1.ockNum;当前的盘块voidchushihua()(strcpy(fname,0);type=NU1.1.;size=O;fatherBIockNum=CurrentB1.ockNum=O;;通过结构体类型定义了文件限制块,文件限制块包括文件名,文件类型,文件大小,父目录块号,以及当前盘块,并且对文件限制块进行了初始化操作.文件限制块用来对文件进行治理.(3)目录文件结构structdirFi1.e(structFCBfcbB1.ockFcbCount;voidinit(int_FatherB1.ockNum,

12、int_CurrentB1.ockNum,char*name)父块号,当前块号,目录名(strcpy(fcb0.fname,name);本身的FCBfcb0.fatherB1ockNum=_FatherBIockNum;fcb0.CurrentB1.ockNum=_CurrentB1.ockNum;fcb0.type=DIRECTORY;标记目录文件for(inti=1.;iject考目录下共I婴起宥。个攵本文件,2个文件夹fc:XindirayfiIes当前目录下不存在该子目录?IfC:*ndirInyf口8roroject修目录下共有。个文本文件.1个文件夹图4-4rmdir命令运行结果5

13、用Cddirname命令改名当前目录通过该图可看到当前目录已从C:变为Cproject,命令执行成功P15Project文件夹.*目录下共有。个文本文件,1个文件夹C=cdprojectC:XprojectX图4-5Cd命令运行结果ttXcdproject-XpioJect5eateq:IfC-XprojectXis,工文本文件.除目录卜共有1个文本文件,O个文件夹图4-6在子目录下创立文件第五章课程设计总结通过本次的课程设计,使我能够正确运用操作系统课程中所学的根本理论和知识,加深了对文件系统根本概念的理解,以及磁盘文件系统的文件操作.还有让我感受挺深的是对软件工程方法的应用.设计一个软件,

14、先要做好需求分析,这一点很重要,如果没有分析好需求,到软件设计的最后,发现所做的功能不符合要求,那么一切都得重做,前面所有的努力都付诸东流.还有比拟重要的是,写好E-R图,至少画出语境级的数据流图,以及仔细画好程流程图.在程序设计的开始,由于分析工作做得不够深入和细致,吃了点小苦头.对于这样一个小设计来说,都会吃苦头,要是大工程更是无法想像,有可能会工程失败.以后得增强对软件工程的学习.另外在运用C语言的时候,感觉有点生疏,在组织语言时时而出错,在编程和调试的过程中,经常会出现意想不到的问题,并非每个问题都可以从相关资料中找到解决方法,有些问题是无法预料到的,这就需要通过自己理性的分析得出问题

15、的解决方案.在设计过程中,查询了不少相关资料,不断的发现问题、提出问题、解决问题.在对自己所编写的源程序段的纠错的过程中,使我更好的理解了操作系统中文件系统的理论知识,同时在编程时用到了模块化的设计思想,这种编程方法可以使我们的编程变的更简单,可以使我们的查错与纠错变的更方便.总的来说通过这次的设计的学习使我学到了很多在平时的学习中学不到的很多东西,通过这次课程设计,使我对操作系统和编程产生兴趣,我想我会在这条路上继续前进下去.我相信,只要不断的严格要求自己,注意培养自己的思维水平,就一定会有更大更辉煌的开展和提升.附录I参考文献1张尧学等编著.计算机操作系统教程,北京:清华大学出版社,200

16、6.02汤子瀛等编著.计算机操作系统.西安:西安电子科技出版社,1996.12网陈向群编著.操作系统教程.北京:北京大学出版社,2007.014罗宇等编著.操作系统课程设计.北京:机械工业出版社,2005.9附录11程序清单tinc1.ude#inc1.udeftinc1.ude# inc1.udeusingnamespacestd;# defineGENERA1.1普通文件# defineDIRECTORY2目录文件# defineNU1.1.0空文件structFCB文件限制块(charfname16;文件名chartype;文件类型intsize;文件大小intfatherBIockNu

17、m;父目录块号intCurrentB1.ockNum;当前的盘块voidchushihua()strcpy(fname,0);type=NU1.1.;size=O;fatherB1.ockNum=CurrentB1.ockNum=O;);定义常量constchar*Fi1.ePath=constintB1.ockSize=512;盘块大小constintOPEN_MAX=5;能翻开最多的文件数constintB1.ockCount=128;盘块数constintDiskSize=B1.ockSize*B1.ockCount;磁盘大小constintB1.ockFcbCount=B1.ockSi

18、zesizeof(FCB);/目录文件的最多FCB数intOpenFi1.eCount=0;structOPEN1.IST用户文件翻开表intfi1.es;当前翻开文件数FCBfOPEN_MAX;FCB复制open1.ist()fi1.es=0;for(inti=0;iOPEN_MAX;i+)fi.fatherB1.ockNum=-1.;/为分配翻开fityPe=GENERA1.;);目录文件结构structdirFi1.estructFCBfcbB1.ockFcbCount;voidinit(int_FatherB1.ockNum,int_CurrentB1.ockNum,char*name

19、)父块号,当前块号,目录名strcpy(fcb0.fname,name);本身的FCBfcb0.fatherB1.ockNum=_FatherB1.ockNum;fcb0.currentB1.ockNum=_CurrentB1.ockNum;fcb0type=DIRECTORY;/标记目录文件for(inti=1.;iformat();翻开文件列表初始化de1.eteopen1.ist;open1.ist=newOPEN1.IST;/*保存到磁盘上myfi1.es*/fp=fopen(Fi1.ePath,w+”);fwrite(BaseAddr,sizeof(char),DiskSize,fp

20、);fc1.ose(fp);Printf(nnz,);return1;创立子目录intmkdir(char*sonfname)判断是否有重名寻找空白子目录项寻找空白盘块号当前目录下增加该子目录项分配子目录盘块,并且初始化修改fat表inti,temp,iFAT;structdirFi1.e*dir;当前目录的指针if(current=2)dir=&(osPoint-root);e1.sedir=(structdirFi1.e*)(osPoint-datacurrent-3);为了防止该目录下同名文件夹for(i=1;ifcbi.type=DIRECTORY&strcmp(dir-fcbi.fn

21、ame,sonfname)=0)(Printf(该文件夹下已经有同名的文件夹存在了!小);return0;)查找空白fCb序号for(i=1.;ifcbi.type=NU1.1.)break;)if(i=BIockFcbCount)(printf(该目录已满!请选择新的目录下创立!n);returnO;)temp=i;for(i=3;iFAT1.i=O)break;if(i=B1.ockCount)Printf(磁盘已满!n);returnO;)iFAT=i;接下来进行分配osPoint-FAT1.iFAT=osPoint-FAT2iFAT=2;2表示分配给下级目录文件填写该分派新的盘块的参数

22、strcpy(dir-fcbtemp.fname,sonfname);dir-fcbtemp.type=DIRECTORY;dir-fcbtemp,fatherB1.ockNum=current;dir-fcbtemp,currentB1ockNum=iFAT;/初始化子目录文件盘块dir=(structdirFi1.e*)(osPoint-dataiFAT-3);定位到子目录盘块号dir-init(current,iFAT,sonfname);/iFAT是要分配的块号,这里的current用来指要分配的块的父块号printf(nr);return1;删除当前目录下的文件夹intrmdir(c

23、har*sonfname)inti,temp,j;保证当前目录下有该文件,并记录下该FCB下标structdirFi1.e*dir;当前目录的指针if(current=2)dir=&(osPoint-root);e1.sedir=(structdirFi1.e*)(osPoint-datacurrent-3);for(i=1.;ifcbEi.type=DIRECTORY&strcmp(dir-fcbi.fname,sonfname)=0)break;temp=i;if(i=BIockFcbCount)Pntf(当前目录下不存在该子目录!n);return0;j=dir-fcbtemp.Curr

24、entB1.ockNum;structdirFi1.e*sonDir;当前子目录的指针sonDir=(structdirFi1.e*)(osPoint-dataj-3);网络操作系统课程设计for(i=1.;ifcbi.type!=NU1.1.)(printf(该文件夹为非空文件夹,为保证平安,请清空后再删除!n);return0;)删除子目录osPoint-FAT1.j=osPoint-FAT2j=0;/fat清空char*p=osPoint-dataj-3;格式化子目录memset(p,0,B1.ockSize);dir-fcbtemp.chushihua();回收子目录占据目录项prin

25、tf(nn);return1;查询子目录intIistshowOinti,DirCount=O,Fi1.eCount=O;搜索当前目录structdirFi1.e*dir;当前目录的指针if(current=2)dir=&(osPoint-root);e1.sedir=(structdirFi1.e*)(osPoint-datacurrent-3);for(i=1.;ifcbi.type=GENERA1.)(查找普通文件Fi1.eCount+;文本文printf(%s件n”,dir-fcbi.fname);if(dir-fcbi.type=DIRECTORY)查找目录文件DirCount+;p

26、rintf(%s文件夹n”,dir-fcbi.fname);printf(,/该目录下共有%d个文本文件,%d个文件夹nn,Fi1.eCount,DirCount);printf(rn);return1;进入当前目录下的子目录intChangePath(char*sonfname)(structdirFi1.e*dir;当前目录的指针if(current=2)dir=&(osPoint-root);e1.sedir=(structdirFi1.e*)(osPoint-datacurrent-3);*回到父目录*/if(strcmp(sonfname,.)=0)(if(current=2)(Pr

27、intf(你现已经在根目录下!r);return0;currentdir-fcbO.fatherBIockNum;CurrentPath=网络操作系统课程设计CurrentPath.substr(O,CurrentPath.size()一str1.en(dir-fcbO.fname)-1);return1;)/*进入子目录*/inti,temp;保证当前目录下有该目录,并且记录下它的FCB下标for(i=1;ifcbi.type=DIRECTORY&strcmp(dir-fcbi.fname,sonfname)=0)temp=i;break;if(i=BIockFcbCount)(printf

28、(不存在该目录!n);return0;网络操作系统课程设计修改当前文件信息currentzzdir-fcbtemp.CurrentB1.ockNum;CurrentPath=CurrentPath+dir-fcbtemp,fname+“”;printf(nn);return1;退出系统intexit()(将所有文件都关闭/保存到磁盘上C:myfi1.esfp=fopen(Fi1.ePath,w+”);fwrite(BaseAddr,sizeof(char),DiskSize,fp);网络操作系统课程设计fc1.ose(fp);释放内存上的虚拟磁盘free(osPoint);释放用户翻开文件表d

29、e1.eteopen1.ist;Printf(nr);return1;voidmain()printf欢送进入文件系统模拟程序n);Printf(n);Printf(pritf(目录治理n);printf(mkdir录n);printf ( rmdir录n);Printf ( Is目录下信息n);printf ( cd目录n);dirname:创立子目dirname:删除子目dirname:显示当前dirname:更改当前Printf(n);Printf(open1.ist=newOPEN1.IST;创立用户文件打开表BaseAddr=(char*)ma1.1.oc(DiskSize);申请文

30、件系统空间并初始化osPoint=(structDISK*)(BaseAddr);if(fp=fopen(FiIePath,r,z)!=NU1.1.)fread(BaseAddr,sizeof(char),DiskSize,fp);加载文件e1.seformat。;第一次使用需对文件系统进行初始化Printf(加载文件系统成功,可以进行操作nn9;whi1.e(1.)coutcmd;if(cmd=mkdir)cinconamand;mkdir(command);e1.seif(Cmd=zrmdirzz)cincommand;rmdir(command);e1.seif(cmd=1.s)IistshowO;网络操作系统课程设计e1.seif(cmd=cd)cincommand;ChangePath(command);e1.seif(cmd=create)cincommand;create(command);e1.seif(cmd=exit)exit();break;)e1.seCoUt”无效指令,请重新输入:end1.;

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号