欢迎来到天天文库
浏览记录
ID:6633309
大小:182.00 KB
页数:7页
时间:2018-01-20
《可变分区存储管理代码》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、实验三可变分区存储管理方式的内存分配回收#include"iostream.h"#include"stdio.h"#include"stdlib.h"#include"conio.h"#definen10//假定系统允许的最大作业数量为n#definem10//假定系统允许的空闲区表最大为m#defineminisize100struct{floataddress;//已分分区起始地址floatlength;//已分分区长度,单位为字节intflag;//已分分区表登记栏标志,用"0"表示空栏目,实验中只支持一个字符的作业名}used_table[n];//已分分区表struct{float
2、address;//空闲区起始地址floatlength;//空闲区长度,单位为字节intflag;//空闲区表登记栏标志,用"0"表示空栏目,用"1"表示未分配}free_table[m];//空闲区表intallocate(charJ,floatxk)//采用最有分配法分配xk大小的空间//charJ;//floatxk;{inti,k;floatad;k=-1;for(i=0;i=xk&&free_table[i].flag==1)if(k==-1
3、
4、free_table[i].len
5、gth6、ength=free_table[k].length-xk;ad=free_table[k].address+free_table[k].length;}//修改分配区表i=0;while(used_table[i].flag!=0&&i=n){cout<<"无表目填写已分分区,错误"<7、+xk;return0;}else{used_table[i].address=ad;used_table[i].length=xk;used_table[i].flag=J;}return1;}//内存分配函数结束}intreclaim(charJ)//回收作业名为J的作业所占内存空间//charJ;{inti,k,j,s,t;floatS,L;//寻找已分分区表中对应登记项s=0;while((used_table[s].flag!=J8、9、used_table[s].flag==0)&&s=n)//在已分分区表中找不到名字为J的作业{cout<<"找不到该作业"<10、11、12、k==-1)){if(free_table[i].flag==0){if(free_table[i].address+free_table[i].length==S)k=i;//找到上邻if(free_table[i].address==S+L)j=i;//13、找到下邻}i++;}if(k!=-1)if(j!=-1)//上邻空闲区,下邻空闲区,三项合并{free_table[k].length=free_table[j].length+free_table[k].length+L;free_table[j].flag=0;}else//上邻空闲区,下邻非空闲区,与上邻合并free_table[k].length=free_table[k].length+L;else
6、ength=free_table[k].length-xk;ad=free_table[k].address+free_table[k].length;}//修改分配区表i=0;while(used_table[i].flag!=0&&i=n){cout<<"无表目填写已分分区,错误"<7、+xk;return0;}else{used_table[i].address=ad;used_table[i].length=xk;used_table[i].flag=J;}return1;}//内存分配函数结束}intreclaim(charJ)//回收作业名为J的作业所占内存空间//charJ;{inti,k,j,s,t;floatS,L;//寻找已分分区表中对应登记项s=0;while((used_table[s].flag!=J8、9、used_table[s].flag==0)&&s=n)//在已分分区表中找不到名字为J的作业{cout<<"找不到该作业"<10、11、12、k==-1)){if(free_table[i].flag==0){if(free_table[i].address+free_table[i].length==S)k=i;//找到上邻if(free_table[i].address==S+L)j=i;//13、找到下邻}i++;}if(k!=-1)if(j!=-1)//上邻空闲区,下邻空闲区,三项合并{free_table[k].length=free_table[j].length+free_table[k].length+L;free_table[j].flag=0;}else//上邻空闲区,下邻非空闲区,与上邻合并free_table[k].length=free_table[k].length+L;else
7、+xk;return0;}else{used_table[i].address=ad;used_table[i].length=xk;used_table[i].flag=J;}return1;}//内存分配函数结束}intreclaim(charJ)//回收作业名为J的作业所占内存空间//charJ;{inti,k,j,s,t;floatS,L;//寻找已分分区表中对应登记项s=0;while((used_table[s].flag!=J
8、
9、used_table[s].flag==0)&&s=n)//在已分分区表中找不到名字为J的作业{cout<<"找不到该作业"<
10、11、12、k==-1)){if(free_table[i].flag==0){if(free_table[i].address+free_table[i].length==S)k=i;//找到上邻if(free_table[i].address==S+L)j=i;//13、找到下邻}i++;}if(k!=-1)if(j!=-1)//上邻空闲区,下邻空闲区,三项合并{free_table[k].length=free_table[j].length+free_table[k].length+L;free_table[j].flag=0;}else//上邻空闲区,下邻非空闲区,与上邻合并free_table[k].length=free_table[k].length+L;else
11、
12、k==-1)){if(free_table[i].flag==0){if(free_table[i].address+free_table[i].length==S)k=i;//找到上邻if(free_table[i].address==S+L)j=i;//
13、找到下邻}i++;}if(k!=-1)if(j!=-1)//上邻空闲区,下邻空闲区,三项合并{free_table[k].length=free_table[j].length+free_table[k].length+L;free_table[j].flag=0;}else//上邻空闲区,下邻非空闲区,与上邻合并free_table[k].length=free_table[k].length+L;else
此文档下载收益归作者所有