计算机操作系统内存管理系统可变分区存储管理方式的内存分配回收内容摘要:

存在空闲表中有上邻,将其合并 (7)、 空闲区有两个长度分别为 20B 和 18B 的未分配烂,现为作业 6 分配 14B 的内存,用最佳分配算法找到空闲区。 13 制作界面的实现截图 14 十 、源程序: include include //全局变量 float minsize=5。 int count1=0。 int count2=0。 define m 10 //假定系统允许的空闲区表最大为 m define n 10 //假定系统允许的最大作业数量为 n //已分配表的定义 struct {float address。 //已分分区起始地址 float length。 //已分分区长度,单位为字节 int flag。 //已分配区表登记栏 标志, 0表示空栏目 }used_table[n]。 //已分配区表 对象名 //空闲区表的定义: 15 struct {float address。 //空闲区起始地址 float length。 //空闲区长度,单位为字节 int flag。 //空闲区表登记栏标志,用 0表示空栏目,用 1表示未分配 }free_table[m]。 //空闲区表 对象名 //函数声明 void initialize(void)。 int distribute(int, float)。 int recycle(int)。 void show()。 //初始化两个表 void initialize(void) { int a。 for(a=0。 a=n1。 a++) used_table[a].flag=0。 //已分配表的表项全部置为空表项 free_table[0].address=1000。 free_table[0].length=1024。 free_table[0].flag=1。 //空闲区表的表项全部为 未分配 } //最优分配算法实现的动态分区 int distribute(int process_name, float need_length) { int i, k=1。 //k 用于定位 在 空闲表中 选择 的未分配栏 float ads, len。 int count=0。 i=0。 while(i=m1) //循环找到最佳的空闲分区 { if(free_table[i].flag==1 amp。 amp。 need_length =free_table[i].length) { count++。 if(count==1||free_table[i].length free_table[k].length) 16 k=i。 } i=i+1。 } if(k!=1) { if((free_table[k].lengthneed_length)=minsize) //整个分配 { free_table[k].flag=0。 ads=free_table[k].address。 len=free_table[k].length。 } else { //切割空闲区 ads=free_table[k].address。 len=need_length。 free_table[k].address+=need_length。 free_table[k].length=need_length。 } i=0。 //循环寻找内存分配表中标志为空栏目的项 while(used_table[i].flag!=0) {i=i+1。 } if(i=n1) //找到, 在已分配区表中登记 一个表项 { used_table[i].address=ads。 used_table[i].length=len。 used_table[i].flag=process_name。 count1++。 } else //已分配区表长度不足 { if(free_table[k].flag == 0) //将已做的整个分配撤销 { free_table[k].flag=1。 free_table[k].address=ads。 free_table[k].length=len。 17 } else //将已做的切割分配撤销 { free_table[k].address=ads。 free_table[k].length+=len。 } cout内存分配区 已满,分配失败。 \n。 return 0。 } } else { cout 无法为该作业找。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。