《高级操作系统实验报告课程设计15486.docx》由会员分享,可在线阅读,更多相关《高级操作系统实验报告课程设计15486.docx(51页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、高级操作系系统实验验报告姓 名: 学 号: 专 业: 任 课 教 师师: 2014年年01 月188 目 录一、课程设设计题目目和目的的1二、课程设设计要求求1三、程序设设计思想想1四、文件系系统的实实现21.数据结结构设计计22.程序功功能图33.实体关关系图34.数据流流图45.程序流流程图5(1) 建立文文件:ccreaate(文文件名,记记录长度度)6(2) 写文件件:wrritee(文件件名,开开始位置置,字符符串)7(3) 读文件件:reead(文文件名,开开始位置置,长度度)8(4) 显示文文件所有有内容 typpe(文文件名)8(5) 删除文文件deelette(文文件名)9(
2、6) 重命名名文件rren(文件名名,新文文件名)10(7) 查询文文件属性性askk(文件件名)11(8) 关闭文文件cllosee(文件件名)12五、程序运运行结果果及分析析13六、课程设设计总结结15七、参考文文献16八、附录17北京联合大学一、课程设设计题目目和目的的通过模拟文文件系统统的实现现,深入入理解操操作系统统中文件件系统的的理论知知识, 加深对对教材中中的重要要算法的的理解。同时通通过编程程实现这这些算法法,更好地地掌握操操作系统统的原理理及实现现方法,提高综综合运用用各专业业课知识识的能力力。二、课程设设计要求求通过组长分分工,我我主要完完成了如如下几个个功能的的操作:1创
3、建文文件:从从命令中中得到文文件名,得得到该文文件的文文件长度度,建立立文件。修修改目录录表。4读文件件:reead 文件件名 显示示开始字字节 显示示的字节节数 ,直接接显示所所需要的的字节数数。5写文件件:wrritee 文文件名 插插入的位位置 插入入的内容容6修改属属性:修修改文件件属性 文件件名,文文件权限限,文件件长度等等。三、程序设设计思想想阅读操作系系统方面面的书籍籍,了解解操作系系统的文文件系统统原理。结结合分析析课程设设计要求求,确定定实体以以及它们们之间的的关系。实实体关系系有三张张表(磁磁盘空间间分配表表、文件件表、打打开文件件表)、一一个模拟拟磁盘的的数组、命命令服务
4、务和用户户构成。用用户负责责输入命命令。命命令服务务实现命命令的解解释、命命令检查查、命令令帮助以以及调用用相关模模块执行行相应的的命令功功能。文件夹打开开是则把把文件夹夹名称及及其地址址压入打打开文件件夹栈,文文件关闭闭则把文文件夹名名称及其其地址从从打开文文件夹栈栈中抛出出。文件打开则则把文件件的名称称及其父父指针写写到文件件列表同同时置文文件打开开标志为为1,文文件关闭闭则把文文件从打打开列表表中删除除,同时时置文件件打开指指针为00,文件件读取和和写入都都要检查查文件是是否在文文件打开开列表中中,未打打开文件件不能读读写,只只读文件件不能写写,只写写文件不不能读。文件夹和文文件创建建,
5、文件件夹和文文件的创创建首先先检验目目录是否否为空,为为空则把把文件夹夹或文件件连接到到该目录录下,不不为空则则把检查查目录下下是否有有同名文文件夹或或文件,有有则提示示创建不不成功,没没有则把把文件夹夹或文件件连接到到该目录录下的最最后一个个子节点点,作为为它的兄兄弟节点点。文件夹和文文件的删删除,文文件夹下下没有打打开的文文件或文文件没有有打开才才能删除除,否则则删除失失败,删删除文件件夹时利利用了中中序历遍遍来删除除子树。四、文件系系统的实实现1.数据结结构设计计通过分析课课程设计计要求,具具体设计计出如下下数据结结构: typeddef strructt uoof /文文件属性性cha
6、rr fiilennamee144; /文件名名字int mmodee; /文件件的权限限0-rreaddonlly;11-wrriteeonlly;22-reead/wriiteint lenngthh; /文件长长度int adddr; /物理理块号int sstatte; /0-建立,11-建立立int reaadpttr; ;通过结构体体,将文文件名字字、文件件在磁盘盘的开始始位置、文文件长度度、文件件最大长长度、文文件类型型、创建建时间结结合在一一起。文文件类型型,本模模拟程序序使用ttxt类类型。设设置一个个线性表表来存储储文件。2.程序功功能图 模拟文件系统创建文件删除文件条件读
7、取写入文件查询属性显示内容显示目录重命名文件关闭文件文件系统提提供的文文件操作作有建立立文件(creeatee)、删删除文件件(deelette)、条条件读取取文件(reaad)、写写入文件件(wrritee)、查查询文件件的属性性(assk)、显显示文件件所有内内容(ttypee)、重重命名文文件(rren)、关闭闭文件(cloose)。可以以通过键键盘输入入命令来来模拟文文件的操操作。通通过exxit命命令退出出程序。3.实体体关系图图用 户命令服务模拟磁盘磁盘空间分配表文件表打开文件表 命令服务务使得用用户能够够输入命命令,在在需要时时提供命命令的帮帮助。同同时能够够分析命命令,调调用相
8、应应的命令令模块对对模拟磁磁盘、磁磁盘空间间分配表表、文件件表、打打开文件件表进行行操作。磁盘空间分配表记录模拟磁盘的使用情况。文件表记录文件的信息和在磁盘里的位置等信息。打开文件表记录已打开的文件,对应文件表中的文件信息,和文件表里的文件节点类似,记录了文件在模拟磁盘中的信息。4.程序流流程图模拟文件件系统提提供的文文件操作作有建立立(crreatte),读读取(rreadd),显显示(ttypee),删删除(ddeteele),写写入(wwritte),关闭(cclosse),重命名名(reen)和和查询(askk)。在在模拟程程序中可可从键盘盘上输入入文件操操作命令令来模拟拟各用户户程序
9、中中所调用用的各种种文件操操作,用用一个结结束命令令(exxit)停停止程序序的执行行。开始系统格式化Y/N/输入命令命令表中有该命令?分析命令显示:命令帮助无创建删除读取显示重命名写入查询列表关闭退出程序(exit)执行命令执行命令(1) 创建文件件:crreatte(文文件名,记记录长度度)模拟文件系系统进行行“创建文件件”的处理理流程如如下:开始查询文件表文件表中有名字?返回有显示重命申请磁盘空间空间申请成功?显示失败否返回无在磁盘分配表中登记登记:长度=0,最大长度=申请长度,开始位置申请节点位置空闲情况占用在文件表中登记登记:长度=0,最大长度=建立长度,开始位置分配位置文件类型tx
10、t,时间当前时间在打开文件表中登记登记:信息和文件表中类似显示创建成功返回(2) 写文件件:wrritee(文件件名,开开始位置置,字符符串)模拟文件系系统进行行“建立文文件”的处理理流程如如下:开始查询打开文件表查询文件表在打开文件表里?不在在文件表里?显示无文件返回不在写进模拟磁盘在在读取文件记录write参数合法?合法显示成功返回显示参数非法非法(3) 读文件件:reead(文文件名,开开始位置置,长度度)模拟文件系系统进行行“读取文件件”的处理理流程如如下:开始查询文件表在打开文件表里?不在在文件表里?显示无文件返回不在在在读取文件记录read参数合法?非法显示参数非法返回根据参数读取
11、模拟磁盘里的记录返回合法五实验程程序说明明:1.创建文文件:2.打开文文件:3.写文件件:4.修改文文件属性性:六、课程设设计总结结通过本次的的课程设设计,使使我能够够正确运运用操作作系统课课程中所所学的基基本理论论和知识识,加深深了对文文件系统统基本概概念的理理解,以以及磁盘盘文件系系统的文文件操作作。还有有让我感感受挺深深的是对对软件工工程方法法的应用用。设计计一个软软件,先先要做好好需求分分析,这这一点很很重要,如如果没有有分析好好需求,到到软件设设计的最最后,发发现所做做的功能能不符合合要求,那那么一切切都得重重做,前前面所有有的努力力都付诸诸东流。在在程序设设计的开开始,由由于分析析
12、工作做做得不够够深入和和细致,吃吃了点小小苦头。对对于这样样一个小小设计来来说,都都会吃苦苦头,要要是大工工程更是是无法想想像,有有可能会会项目失失败。以以后得加加强对软软件工程程的学习习。另外外在运用用C语言言的时候候,感觉觉有点生生疏,在在组织语语言时时时而出错错,在编编程和调调试的过过程中,经经常会出出现意想想不到的的问题,并并非每个个问题都都可以从从相关资资料中找找到解决决方法,有有些问题题是无法法预料到到的,这这就需要要通过自自己理性性的分析析得出问问题的解解决方案案。 在设设计过程程中,查查询了不不少相关关资料,不不断的发发现问题题、提出出问题、解解决问题题。在对对自己所所编写的的
13、源程序序段的纠纠错的过过程中,使使我更好好的理解解了操作作系统中中文件系系统的理理论知识识,同时时在编程程时用到到了模块块化的设设计思想想,这种种编程方方法可以以使我们们的编程程变的更更简单,可可以使我我们的查查错与纠纠错变的的更方便便。总的的来说通通过这次次的设计计的学习习使我学学到了很很多在平平时的学学习中学学不到的的很多东东西,通通过这次次课程设设计,使使我对操操作系统统和编程程产生兴兴趣,我我想我会会在这条条路上继继续前进进下去。我我相信,只只要不断断的严格格要求自自己,注注意培养养自己的的思维能能力,就就一定会会有更大大更辉煌煌的发展展和提高高。七、参考文文献1美美Abbrahham
14、 Sillberrschhatzz Peeterr Baaer Gallvinn Grreg Gaggne 郑扣根根 译.OPEERATTINGG SYYSTEEM CCONCCEPTTSSSixtth EEdittionn 操操作系统统概念.高等教教育出版版社,220044,0112(美美)Roogerr S.Preessmman 著 梅梅宏 译译.软件件工程-实践者者的研究究方法.机械工工业出版版社,220022,0993蔡启启先.CC语言程程序设计计教程(第第二版).重庆大大学出版版社,220033,0774朱战战立.数数据结构构.西安安电子科科技大学学出版社社,20003,05八、附录
15、1.程序序源代码码及注释释/ 编编译工具具:Viisuaal cc+ 6.00 / / 作作者:小楚*smiill 、蓝蓝色的天天空 / 邮邮件:qqvb22097741551m / / 复复制、传传播请保保留作者者信息,谢谢谢! / /#inclludee #inclludee #inclludee #inclludee #inclludee void filleCrreatte(ccharr *ffileeNamme,iint filleLeenghht); /创建建文件void filleDeel(ccharr *ffileeNamme); /删除除文件void filleReead(c
16、haar *filleNaame,intt poostiion,intt leenghht);void filleWrritee(chhar *fiileNNamee,innt pposiitioon,ccharr *ss); /函数数声明void filleAssk(ccharr *ffileeNamme); /查询询文件属属性void filleTyype(chaar *filleNaame); /显示示文件内内容void filleReen(ccharr *ffileeNamme,ccharr *nnewNNamee); /重命命名文件件void filleDiir(); /列出出所有文
17、文件void filleCllosee(chhar *fiileNNamee); /关闭闭一个文文件int reqquesstDiisk(intt *sstarrtPoosittionn,innt *maxxLenngthh); /分分配磁盘盘空间/模拟磁磁盘空间间char dissk1100000; /磁盘空空间管理理 strucct ffreeeDisskTaablee int staart; /开开始位置置int lenngthh; /占占用长度度int maxxLenngthh; /最最大长度度int useeFlaag; /使使用标志志,1为为占用,00为空闲闲;/文件表表struc
18、ct ffileeTabblecharr fiileNNamee200; /文件名名字int staart; /开始位位置int lenngthh; /文件长长度int maxxLenngthh; /最大长长度 ccharr fiileKKindd8; /文件种种类,此此默认为为txttstruuct tm *tiimeiinfoo; /文件件创建时时间;/打开文文件表strucct oopennFilleTaableecharr fiileNNamee200; /文件件名字charr fiileKKindd8; /文件件类型int staart; /文件件开始位位置int lenngthh;
19、 /文件件长度int maxxLenngthh; /最大大长度int opeenCoountt; /打开开文件的的进程数数struuct tm *tiimeiinfoo; /文件件创建时时间;/typeddef strructt frreeDDiskkTabble LinnDattaTyype; /定义链链表的数数据类型型#inclludee LLinLListt.h /链链表操作作集合SLNodde *freeeDiiskTTablleHeead; /定定义磁盘盘分配表表链表 头指针针#defiine MaxxSizze 1100 /定定义线性性表 最最大长度度typeddef strruc
20、tt fiileTTablle SSeqDDataaTyppe; /定定义线性性表数据据类型#inclludee SSeqLListt.h /线性性表操作作集合SeqLiist L; /文文件表,模模拟文件件操作嘛嘛,文件件数不多多,故可可以用 线性表表,简化化操作_strucct oopennFilleTaablee OFFT110; /打开开文件表表数组int OOFT_couunt=0; /打开开文件表表占用长长度void maiin()struuct ordderTTablle /命命令表chaar nnamee8; ;charr orrderrInpput30; /存储用用户输入入的
21、命令令字符串串charr orrderrNamme88; /命令名名字charr fiileNNamee200; /命命令参数数1,是是文件名名字charr paarammeteer26; /命命令参数数2,是是个数字字charr paarammeteer330; /命命令参数数3,是是字符串串或数字字struuct ordderTTablle uu9; /命命令表int i=00; int flaag=00; /用户户输入串串 读写写位置 标志int flaagOrrderr=-11;/ LinLListtIniitiaate(&frreeDDiskkTabbleHHeadd);/磁盘盘空间
22、分分配键表表初始化化struuct freeeDiiskTTablle ttempp; tempp.leengtth=00;tempp.maaxLeengtth=1100000;tempp.sttartt=0;tempp.usseFllag=0;if(!LinnLisstInnserrt(ffreeeDisskTaableeHeaad,00,teemp)priintff(初初始磁盘盘空闲表表失败!);sysstemm(ppausse);exiit(00);/文件件表初始始化SeqLListtIniitiaate(&L); /初始始化 文文件表/for(i=00;i2;ii+) for(intt
23、 j=0;jj2;j+)sysstemm(ccoloor ffc);priintff(nnnnnnnnnnnn 计 0046 何珠举举 操作作系统课课程设计计n);forr(innt kk=0;k33000000000;kk+);sysstemm(ccls);sysstemm(ccoloor ff3);priintff(nnnnnnnnnnnn 计 0046 何珠举举 操作作系统课课程设计计n);forr(k=0;kk);ffllushh(sttdinn); /清空空缓冲区区getts(oordeerInnputt); /获取取用户输输入串if(!sttrcmmp(oordeerInnputt
24、,eexitt)exiit(00); /当当用户输输入 eexitt 退出出程序sysstemm(ccls); /清屏forr(i=0;oordeerInnputti!= &orrderrInpputi!=0;i+)/以空格格为界 分解用用户输入入串orrderrNammeii=oordeerInnputti;flaag=ii;/保存读读写指针针if(flaag66) /命命令名长长度 小小于6prrinttf(输入的的命令有有误,请请重新输输入!n);coontiinuee ;ordderNNameei=0;flaagOrrderr=-11; /初初始化标标志位,fflaggOrdder 指
25、明命命令在命命令表中中的位置置forr(i=0;ii9;i+)iff(!sstrccmp(ordderNNamee,ui.namme)fflaggOrdder=i; /记录录命令的的位置,以以便访问问bbreaak;if(flaagOrrderr=-1)prrinttf(你输入入的命令令有误!请重新新输入!n);coontiinuee ;/以以空格为为界,分分解字符符串,分分解出第第一个字字符串放放到fiileNNamee中forr(i=flaag+11;orrderrInpputi!= &ordderIInpuutii!=00;ii+)fiileNNameei-flaag-11=oordee
26、rInnputti;filleNaamei-fflagg-1=0; /为字符符串数组组 置一一个结束束标志/flaag=ii; /下一一个字符符串 读读写指针针if(!sttrcmmp(ffileeNamme,?) /显示示命令帮帮助swwitcch(fflaggOrdder)caase 0: pprinntf(创建建一个文文件 格格式 ccreaate fiilennameeffileelenngthhnn);pprinntf(例如如: ccreaate a1 10000 ,将创建建名为aa1,长长度为110000字节的的文件n);bbreaak;caase 1:pprinntf(删除除一个
27、文文件 格格式 ddeleete fiilennamee n);pprinntf(例如如: ddeleete a1,将删除除名为aa1的文文件nn);bbreaak;caase 2: pprinntf(读取取一个文文件 格格式 rreadd ffileenammeposstioonlenngthhnn);pprinntf(例如如: rreadd a11 8 3,从从a1文文件第88个字节节开始,显显示3字字节内容容n);bbreaak;caase 3:pprinntf(写一一个文件件 格式 wriite fiileNNameepposttionnccontten nn);pprinntf(例始
28、始: wwritte aa1 115 ttestt,从aa1文件件第155字节开开始写入入 teest 字符串串n);bbreaak;caase 4:pprinntf(显示示文件的的属性,格式 askk ffileenammen); pprinntf(例如如 assk aa1 ,将显示示文件 a1的的属性n);bbreaak; caase 5:pprinntf(显示示文件的的所有内内容,格格式 ttypee ffileenammen);pprinntf(例如如 tyype a1,将显示示文件 a1的的所有内内容nn);bbreaak;caase 6:pprinntf(重命命名一个个文件,格式
29、renn ooldFFileeNammenewwFilleNaamen);pprinntf(例如如renn a11 b11 ,将将a1改改名为bb1nn);bbreaak;caase 7:pprinntf(显示示所有文文件,例例如 ddir,将显示示所有文文件nn);bbreaak;caase 8:pprinntf(关闭闭文件,格格式 cclosse filleNaamen);pprinntf(例如如,cllosee a11,将关关闭文件件a1n);bbreaak;deefauult:pprinntf(命令令错误);geetchh();elsseswwitcch(fflaggOrdder)/对
30、对相应的的命令 进行参参数处理理caase 0:intt Teemp4=1,10,1000,10000;intt suum=00;intt leen=00;forr(i=flaag+11;orrderrInpputi!= &ordderIInpuutii!=00;ii+)parrameeterr2ii-fllag-1=ordderIInpuutii;parrameeterr2ii-fllag-1=00; /为为字符串串数组 置一个个结束标标志flaag=ii; lenn=sttrleen(pparaametter22); /求求字符串串数组的的长度forr(i=0;iileen;ii+) /把
31、第第二个参参数 字字符串变变成整数数summ=suum+(innt)pparaametter22leen-ii-1-488)*TTemppi;filleCrreatte(ffileeNamme,ssum); /将命命令和参参数 传传给建文文件模块块执行bbreaak;caase 1:filleDeel(ffileeNamme); /删除文文件 breeak;caase 2:intt Teemp4=1,10,1000,10000;intt suum=00;intt leen=00;intt suum2=0;/forr(i=flaag+11;orrderrInpputi!= &ordderIInpuutii!=00;ii+)parrameeterr2ii-fllag-1=ordderIInpuutii;parrameeterr2ii-fllag-1=00;flaag=ii; lenn=sttrleen(pparaametter22); /求求字符串串数组的的长度forr(i=0;iileen;ii+)