计算机科学与技术学院《操作系统》综合试验报告(2016/2017学年第一学期)学生姓名:学生专业:网络工程学生班级:网络班学生学号:2指导教师:2016年12月12日计算机科学与技术学院综合试验任务书课程设计名称《操作系统》课程设计课程设计题目模拟实现用位示图法管理文件存储空间的分配与回收学生姓名专业班级网学号2综合试验任务内容[问题描述]设计实现一个综合的应用程序。内容如下:(1)首先对位示图算法原理进行深刻的理解和掌握;(2)程序首先要给出位示图初态。分配时,参数为文件名及需要分配的块数。回收时,参数为文件名。(3)回答信息:分配时,能够分配时,给出文件名和分配的具体块号。否则,给出无法分配的信息。显示位示图。(4)回收时:给出回收的具体块号。显示位示图。[基本要求](1)理解文件存储空间的分配与回收的基本概念,掌握产生文件存储空间的分配与回收的几种方法,体会位示图算法是管理文件存储空间的分配与回收的一种行之有效的方法。(2)通过编写程序实现位示图算法,进一步理解位示图算法的原理和执行过程,掌握位示图算法的描述和应用,进一步熟练掌握文件存储空间的分配与回收的方法。[测试要求]对每一个模块的功能进行黑盒测试,保证各个模块功能的正确性。指导教师:时间:年月5日目录第一章功能需求描述..........................................11.1功能列表与说明..................................................11.2操作界面........................................................11.3界面操作........................................................1第二章系统设计描述..........................................22.1任务分解说明....................................................22.2主要数据结构设计说明............................................22.3主要函数接口说明................................................2第三章算法设计描述...........................................53.1主要函数和函数的流程图..........................................53.1.1.盘块的分配算法流程图..............................................53.2.2.盘块的回收算法流程图...............................................6第四章开发过程描述..........................................74.1程序源码........................................................74.2程序中遇到的错误及错误原因......................................74.3测试程序功能所用的数据和测试方法................................7第五章设计心得体会..........................................8附录1程序源代码............................................91第一章功能需求描述1.1功能列表与说明功能名称功能描述分配文件文件分配回收文件回收文件退出退出程序1.2操作界面文件的存取和回收1.分配文件2.回收文件3.退出请输入选项:1.3界面操作如图可以很清楚的看到可以输入123三个数分别对应分配文件、回收文件、退出三种操作。2第二章系统设计描述2.1任务分解说明1.位示图法系统初始化。2.位示图法分配与回收算法。2.2主要数据结构设计说明1.空闲区结构体定义typedefstructnode{intstart_location;//空闲区对象变量的开始位置intfree_number;//空闲区块数目structnode*next;//指向下一个空闲区的指针}free_link;2.申请空间作业结构体定义typedefstructlink{charoffice[20];//作业名intbegin_location;//作业申请空间后的开始位置intoffice_number;//作业申请空间区的数目structlink*next;//指向下一个申请空闲区的作业指针}office;3.相关位示图操作的结构体定义typedefstruct{free_link*p;//空间区链表指针office*q;//作业链表指针}work;2.3主要函数接口说明31.显示菜单函数voidmenu(){}2.置空位示图进行初始化voidzero_wst(){inti;for(i=0;i256;i++)WST[i]=0;}3.位示图输出显示将初始化或者申请或者回收后的位示图进行显示voidprint_wst(intWST[256]){}4.已经申请空间的作业相关情况输出显示包括:作业名、申请空间的开始位置和截至位置voidprint_office(work*w){}5.位示图操作的初始化包括:空闲区链表的初始化、作业链表的初始化work*start(){}6.申请空间操作work*request(work*w,intWST[256]){}7.回收空间操作work*delect(work*w,intWET[]){}8.主函数voidmain(){intflag;work*w;zero_wst();w=start();while(1){system(cls);print_wst(WST);print_office(w);4menu();cinflag;switch(flag){case1:w=request(w,WST);break;case2:w=delect(w,WST);break;case3:exit(0);default:printf(输入错误,请重新输入!\n);break;}}}5第三章算法设计描述3.1主要函数和函数的流程图3.1.1.盘块的分配算法流程图否是否是否是图3-1盘块的分配将该作业结点插入作业链表表尾,,从该区域分配出对应大小空间,修改位示图输入文件名,和块数.strcmp(s-office,u-office)==0该文件是否已存在r-free_number=s-office_number能否查找到一个足够的空闲区域当前空盘区块数是否分配完释放该空闲区结点,把修改work里面两个首地址返回Request()分配63.2.2.盘块的回收算法流程图是是否是否否是图3-2盘块的回收算法流程图Delect()回收输入要查找的文件名,查找能否找到对应文件要回收的单元前为空把该单元块数加入前一个空闲区结点要回收的单元后为空把空闲区起始地址该为当前开始盘块空闲区盘块增加要回收的单元前后都空结点空盘起始地址改为前一个,空闲区盘块增加要回收的单元自成空盘区结点把该结点插入空闲区链表修改位示图对应盘块的的内容,删除该文件结点.修改work里面两个首地址返回7第四章开发过程描述4.1程序源码由于源码较长,单独附加在后面,见附录1-程序源码4.2程序中遇到的错误及错误原因编程中几乎没有遇到什么大的问题,只有一些语法中的小错误,编译器就解决完毕。4.3测试程序功能所用的数据和测试方法此次测试使用黑盒测试方法,目的是测试功能是否跟预期一样测试用例预期输出实际输出输入1选择分配功能输出请输入文件名和块数输出请输入文件名和块数输入文件名和块数显示已有文件名:块数显示已有文件名:块数输入2选择回收输出请输入文件名输出请输入文件名8第五章设计心得体会1.准备越充分,实验越顺利。古人云,磨刀不误砍柴工。前期的知识储备、文献储备、材料准备、方法准备可以避免手忙脚乱,充分的预实验使你充满信心。一步一个脚印,就不必“从头再来”。最不能容忍的是在开始的几步偷懒,造成后面总有一些无法排除的障碍。2.交流是最好的老师做实验遇到困难是家常便饭。你的第一反应是什么?反复尝试?放弃?看书?这些做法都有道理,但首先应该想到的是交流。对有身份的人,私下的请教体现你对他的尊重;对同年资的人,公开的讨论可以使大家畅所欲言,而且出言谨慎。千万不能闭门造车。一个实验折腾半年,后来别人告诉你那是死路,岂不冤大头?3.一半时间做实验,一半时间看文献。千万不能把时间全部消耗在实验台上。看文献、看书、看别人的操作、听别人的经验、研究别人的思路,边做边思考。要学会比较,不要盲从。否则,会被一些小小的问题困扰许久。9附录1程序源代码#includestdio.h#includemalloc.h#includewindows.h#includestring.h///#includeiostream.h#includeiostreamusingnamespacestd;intWST[256];/*************************************空闲区结构体定义start_location空闲区对象变量的开始位置free_number空闲区块数目next指向下一个空闲区的指针**************************************/typedefstructnode{intstart_location;intfree_number;structnode*next;}free_link;/*************************************申请空间作业结构体定义office[]作业名begin_location作业申请空间后的开始位置office_number作业申请空间区的数目next指向下一个申请空闲区的作业指针**************************************/10typedefstructlink{charoffice[20];intbegin_location;intoffice_number;structlink*next;}office;/**************************************相关位示图操作的结构体定义p空间区链表指针q作业链表指针***************************************/typedefstruct{free_link*p;office*q;}work;/***************************************程序菜单****************************************/voidmenu(){printf(文件的存取和回收\n);printf(1--分配文件\n);printf(2--回收文件\n);printf(3--退出\n\t);printf(请输入选项:);}/***************************************置空位示图进行初始化****************************************/voidzero_wst(){11inti;for(i=0;i256;i++)WST[i]=0;}/****************************************位示图输出显示将初始化或者申请或者回收后的位示图进行显示*****************************************/voidprint_wst(intWST[25