1569动态分区存储管理方式的主存分配回收------操作系统原理课程设计内容摘要:

N 图 1动态分区最优分配算法流程图 作业 j申请 xk 大小的主存空间 I=0。 k=1。 I 是空闲区表中一栏( I=m) ? 第 i 栏为“未分配”且满足作业 xk? 第 I栏空闲区为第一个满足需求的或小于第 k 栏长 度。 I=I+1 是否找到满足需求的分区 k。 主存分配失败 结束 K=i 继续分配 N Y N Y Y N Y Y N 图 2动态分区回收流程图 作业 j 归还空间 S=s+1 已分配区表第 s 栏状态为作业 j (s=n)? S=0 S为已分配区表中一栏。 未找到作业,回收失败 假设下邻空闲区在第 j 栏 j=1。 假设上邻空闲区在第 k 栏 k=1。 结束 I=0 I=I+1 第 i栏回收分区的上邻。 第 I 栏状态为“未分配”。 第 i 栏回收分区的下邻。 J=i J=i 代码部分: define n 10 //假定系统允许的最大作业数量为 n define m 10 //假定系统允许的空闲区表最大为 m define minisize 100 struct { float address。 //已分分区起始地址 float length。 //已分分区长度,单位字节 int flag。 //已分配区表登记栏标志,用“ 0”表示空栏目,本程序只支持一个字符的作业名 }free_table[n]。 //已分配区表 struct { float address。 //空闲区起始地址 float length。 //空闲区 长度,单位字节 int flag。 //空闲区表登记栏标志,用“ 0”表示空栏目,用“ 1”表示未分配 }free_table[m]。 //空闲区表 allocate(j,xk) //采用最优分配算法分配 xk大小的空间 char j。 float xk。 {int i,k。 float ad。 k=1。 for (i=0。 im。 i++) //寻找空间大于 xk的最小空闲区登记项 k if (free_table[i].length=xkamp。 amp。 free_table[i].flag==1) if (k==1|| free_table[i].length free_table[k].length) k=i。 if (k==1) //未找到可用空闲区,返回 {printf(“ 无可用空闲区 \n”)。 return。 } //找到可用空闲区,开始分配;若空闲区大小与要求分配的空间差小于 minisize大小,则空闲区全部分配;若空闲区大小与要求分配的空间差大于 minisize大小,则从空闲区划出一部分分配 if (free_table[k].lengthxk=minisize) {free_table[k].flag=0。 ad=free_table[k].address。 xk=free_table[k].length。 } else {free_table[k].length=free_table[k].lengthxk。 ad=free_table[k].address+ free_table[k].length。 } //修改已分配区表 i=0。 while(used_table[i].float!=0amp。 amp。 in) //寻找空表目 i++。 if (i=n)。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。