位示图法2
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
操作系统功能模拟设计实验
题目:模拟用位示图法管理文件存贮空间的分配与回收(C++编写)学生姓名马章章
学号0904031049
专业网络工程
班级网络工程一班
实验题目模拟用位示图法管理文件存储空间的分配与回收
一、实验目的:
1)理解文件存储空间的分配与回收的基本概念,掌握产生文件存储空间的分配与回收
的几种方法,体会位示图算法是管理文件存储空间的分配与回收的一种行之有效的
方法。
2)通过编写程序实现位示图算法,进一步理解位示图算法的原理和执行过程,掌握位
示图算法的描述和应用,进一步熟练掌握文件存储空间的分配与回收的方法。二、实验内容:
(1)首先对位示图算法原理进行深刻的理解和掌握;
(2)程序首先要给出位示图初态。分配时,参数为文件名及需要分配的块数。回收时,参数为文件名。
(3)回答信息:分配时,能够分配时,给出文件名和分配的具体块号。否则,给出无法分配的信息。显示位示图。
(4)回收时:给出回收的具体块号。显示位示图。
三、实验环境
Windows系统,在C++的环境下来运行这儿程序
四、实验主要步骤
1、初始化及使用数据结构
对数组WST[]元素初始化为0。定义以下3个链表并初始化。空闲区结构体定义free_link、申请空间作业结构体定义office、相关位示图操作的结构体定义work。
位示图算法是利用二进制的一位来表示磁盘中的一个盘块的使用情况。在外存上建立一张位示图(bitmap),记录文件存储器的使用情况。每一位仅对应文件存储器上的一个物理块,取值0和1分别表示空闲和占用。文件存储器上的物理块依次编号为:0、1、2、…。定义为一维数组WST[],操作起来更为方便。下表号与盘块号对应。在输出的时候控制输出为二维形式。
2、申请空间算法
首先要输入文件名和大小,查找与已存在的文件是否重名。没有,则比较空闲区中空闲块数是否大于欲分配的块数。有的话分配。
分配的时候该作业要记录下自己所占盘块的其实盘号和所占用的盘快数。并修改对应盘块的位示图的值。
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;//改变空间区块数的大小
n=(r->start_location-1);//新的空间区的起始地址-1
for(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->b egin_location-1>=0)||(WST[s->begin_location-1]==0&&s->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->b egin_location+s->office_number<256)||(s->begin_location==0&&WST[s->begin_location+s->off ice_number]==0&&s->begin_location+s->office_number<256)){//后面为空盘,并入后面区域(3)if(WST[s->begin_location-1]==0&&WST[s->begin_location+s->office_number]==0&&s->be gin_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->b egin_location-1>=0&&s->begin_location+s->office_number<256)||(s->begin_location==0&&WS T[s->begin_location+s->office_number]==1&&s->begin_location+s->office_number<256)||(WS T[s->begin_location-1]==1&&s->begin_location+s->office_number==256&&s->begin_location-1>=0)||(s->begin_location==0&&s->begin_location+s->office_number==256)){//要回收的区域自成一个空盘结点
4.
否
否
五、记录实验结果并分析
1、在dos窗口界面下,我们看到的如下所示,这是程序初始化时出现的界面:
2现在我们对其进行操作:选择1—分配文件,出现如下界面:
我们不妨设文件名位“caozuoxitong”,并令块数为10,执行,得到如下的界面:
看到从第一行的第一列一直到第一行的第九列共10个盘块均已经被分配,并且令“0”该为“1”,表示盘块已分配。
盘块的分配已经完成,下面是盘块的回收:
选择2—回收文件,出现如下界面: