欢迎来到天天文库
浏览记录
ID:16460242
大小:197.00 KB
页数:15页
时间:2018-08-10
《模拟实现用位示图法管理文件存储空间的分配与回收》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、合肥学院计算机科学与技术系课程设计报告20011~2012学年第1学期课程名称操作系统原理课程设计名称模拟实现用位示图法管理文件存储空间的分配与回收专业班级学生姓名学生学号指导教师20011年11月实验题目模拟用位示图法管理文件存储空间的分配与回收一、实验目的:1)理解文件存储空间的分配与回收的基本概念,掌握产生文件存储空间的分配与回收的几种方法,体会位示图算法是管理文件存储空间的分配与回收的一种行之有效的方法。2)通过编写程序实现位示图算法,进一步理解位示图算法的原理和执行过程,掌握位示图算法的描述和应用,进一步熟练掌握文件存储空间的分配与回收的方法。二、实验
2、内容:(1)首先对位示图算法原理进行深刻的理解和掌握;(2)程序首先要给出位示图初态。分配时,参数为文件名及需要分配的块数。回收时,参数为文件名。(3)回答信息:分配时,能够分配时,给出文件名和分配的具体块号。否则,给出无法分配的信息。显示位示图。(4)回收时:给出回收的具体块号。显示位示图。三、实验环境Windows系统,在C++的环境下来运行这儿程序四、实验主要步骤1、初始化及使用数据结构对数组WST[]元素初始化为0。定义以下3个链表并初始化。空闲区结构体定义free_link、申请空间作业结构体定义office、相关位示图操作的结构体定义work。位示图
3、算法是利用二进制的一位来表示磁盘中的一个盘块的使用情况。在外存上建立一张位示图(bitmap),记录文件存储器的使用情况。每一位仅对应文件存储器上的一个物理块,取值0和1分别表示空闲和占用。文件存储器上的物理块依次编号为:0、1、2、…。定义为一维数组WST[],操作起来更为方便。下表号与盘块号对应。在输出的时候控制输出为二维形式。01234567891011121314150110001110010111010001111110000111211100011111100003┇15位示图2、申请空间算法首先要输入文件名和大小,查找与已存在的文件是否重名。没有,
4、则比较空闲区中空闲块数是否大于欲分配的块数。有的话分配。分配的时候该作业要记录下自己所占盘块的其实盘号和所占用的盘快数。并修改对应盘块的位示图的值。m=r->start_location;//空闲区的起始地址s->begin_location=r->start_location;//作业从空闲区的起始地址开始分配r->start_location=r->start_location+s->office_number;//改变空闲区空闲块数的起始地址r->free_number=r->free_number-s->office_number;//改变空间区块数的大
5、小n=(r->start_location-1);//新的空间区的起始地址-1for(i=m;i<=n;i++)//模拟分配WST[i]=1;3、回收空间算法首先输入文件名,查找申请空间作业链表找到该作业。找到该作业时回收该盘块。回收时要判断盘块前后的是否为空。决定回收的盘块来加入哪个空闲区。(1)if((WST[s->begin_location-1]==0&&WST[s->begin_location+s->office_number]==1&&s->begin_location-1>=0)
6、
7、(WST[s->begin_location-1]==0&&s-
8、>begin_location+s->office_number==256&&s->begin_location-1>=0)){//前面为空盘块区,后面为已分配,并入前面(2)if((WST[s->begin_location-1]==1&&WST[s->begin_location+s->office_number]==0&&s->begin_location+s->office_number<256)
9、
10、(s->begin_location==0&&WST[s->begin_location+s->office_number]==0&&s->begin_lo
11、cation+s->office_number<256)){//后面为空盘,并入后面区域(3)if(WST[s->begin_location-1]==0&&WST[s->begin_location+s->office_number]==0&&s->begin_location-1>=0&&s->begin_location+s->office_number<256){//前后都空,合为一个空盘区(4)if((WST[s->begin_location-1]==1&&WST[s->begin_location+s->office_number]==1&&s->
12、begin_locati
此文档下载收益归作者所有