- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
连续磁盘存储空间的分派和收受接管
连续磁盘存储空间的分配和回收
连续磁盘存储空间的分配与回收模拟
一、实验目的
深入理解在可变分区管理方式下如何实现磁盘空间的分配与回收。
二、 实验内容
连续磁盘存储空间分配与回收,分配时采用首次适应算法。
三、数据结构及流程
用到的数据结构
①本程序用到的数据结构为空闲表,其组成元素为结构体,其中用来存放空闲表的数组元素定义为:struct
{float address; /*分区起始地址*/
float lenth; /*空闲长度,单位为块*/
int flag; /*空闲表登记栏标志,用“0”表示空栏目,“1”表示未分配*/
} table[n]; /*空闲表*/
其中实型address作为分区起始块号,用于记录个空闲分区的起始块号,在程序开始时,数组第0项address被初始化为0(默认起始块号)其他元素对应项在初始化是不赋值。第二项length表示所对应的项的长度,单位为块,在进程请求磁盘空间时,就是根据这一项大小为其分配合适的地址块,在初始化,第0元素该项被值为1000(默认地址块数),其他项不被置值,最后一项flag用于空闲表登记栏标志,用”0”表示空栏目,表明此项不用于指示磁盘空闲区,则该项其他元素都无效,“1”表示未分配,表明此项其他元素代表磁盘区域,可用于分配给文件,在初始化实第0项被初始化为1,其他项被初始化为0,表示为空。
②另一个结构体used_table,用于表示已分配表,从中可以看出已分配得的使用情况。其中address表示已分配分区起始块号,length表示已分配分区长度,单位为字节,在初始化使所有项该元素都不赋值,flag表示已分配区登记栏标志,用“0“表示空栏目,表明该项所有元素都无效,若不为0则代表该磁盘区域分配给的文件名,在初始化时由于没有文件,所以全为0。
(2)主程序流程
①系统初始化,输入a的值。
②选择需要的服务类型。如a=1转③,否则若a=2,转④,否则若a=3转⑤,否则退出。
③输入文件的名字和所需空间大小,为其分配磁盘区域。转②。
④输入需要撤销的文件的名字,将其所占有的磁盘回收,转②。
⑤将磁盘空闲表和磁盘分配区表打印,转②。
⑥输入a的值,返回②。
⑦结束。
磁盘分配流程
①输入文件的名字name和所需空间大小length,i=0.
②当in且right=0时,判断table[i].flag 是否为1且table[i].length〉length,若满足则将right置为1,i项为分配的磁盘区域。
③在空闲表中找一空标志项j,将其address置为table[i].address,长度为文件所需长度,flag置为文件名。
④将table[i].address置为table[i].address+length,
table[i].length置为table[i].length-length.
(4)磁盘回收流程
①输入想撤销的文件的名字。
②在used_table中寻找flag 为name的项。若找不到。则报错。若找到,继续,
③将used_table[i]的起始块号分别负给head,tail,用于判断磁盘中该区域的上下相临区域是否被占用,若无,则分情况将其合并。
四、源代码
#define n 10
#define m 10
#define area 1000
#define minisize 50
#include stdio.h
void main()
{struct
{float address; /* 已分分区起始块号*/
float length; /* 已分分区长度,单位为字节*/
int flag; /*已分配区表登记栏标志,用0表示空栏目,已分配用文件名表示*/
}used_table[n]; /*已分配区表*/
struct
{float address; /*分区起始块号*/
float length; /*空闲区长度,单位为块*/
int flag; /*空闲表登记栏标志,用0表示空栏目,1表示未分配*/
}table[n]; /*空闲表*/
int i,a,name,j=0,flag=0,right=0,h;
float length,head,tail;
for(i=0;in;i++)
used_table[i].flag=0; /*已分配区表初始化*/
table[0].address=0.0;
table[0].length=1000.0;
table[0].flag=1; /*空闲表初始化*/
for(i=1;im;i++)
table
您可能关注的文档
最近下载
- 四年级数学上册(人教版)周周练(附答案).pdf VIP
- 水利工程软件:MIKE二次开发_(4).MIKE11模块介绍.docx VIP
- UL1557标准中文版-2018半导体UL中文版标准.docx
- 国民经济行业分类 .pdf VIP
- 7-中国石化动土作业安全管理规定(中国石化制〔2022〕14 号).pdf VIP
- 富平县林业发展十五五规划定稿2.docx
- 2023届高考地理二轮复习课件微专题3大气的水平运动——风.pptx VIP
- 领导干部政治理论考试100题及答案.doc VIP
- 人教B版高中数学选择性必修第一册1-1-1空间向量及其运算课件.ppt VIP
- 慢性心力衰竭及药物治疗.pptx VIP
文档评论(0)