连续磁盘存储空间的分派和收受接管.docVIP

连续磁盘存储空间的分派和收受接管.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 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

文档评论(0)

jgx3536 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:6111134150000003

1亿VIP精品文档

相关文档