模拟实现一个简单的固定(或可变)分区存储管理系统

来源:百度知道 编辑:UC知道 时间:2024/06/24 06:24:31
要求:
(1)建立相关的数据结构,作业控制块、已分配分区及未分配分区
(2)实现一个分区分配算法,如最先适应分配算法、最优或最坏适应分配算法
(3)实现一个分区回收算法
(4)给定一批作业/进程,选择一个分配或回收算法,实现分区存储的模拟管理。
各位大侠!谢了我有急用啊!!
用c或者c++写的!!!

int i,j,flag,t;
printf("请输入新申请内存空间的作业名和空间大小:"); scanf("%s",job_name); scanf("%d",&job_length); flag=0;
for(i=0;i<free_quantity;i++) { if(frees[i].length>=job_length) //如果空闲空间I的长度>=作业长度 {
flag=1; //空闲标志位就置1 }
} if(flag==0) { printf("对不起,当前没有能满足你申请长度的空闲内存,请稍候再试!\n"); } else { t=0; i=0;
while(t==0) //为空闲区间的时候 {
if(frees[i].length>=job_length) {

t=1;
}
i++;//如果空闲空间I的长度不大于作业长度,I加1,判断下一个空间 } i--;
occupys[occupy_quantity].front=frees[i].front;//把未用的空闲空间的首地址付给已用空间的首地址
strcpy(occupys[occupy_quantity].data,job_name);//已用空间的内容为作业名 occupys[occupy_quantity].length=job_length;//已用空间的长度为作业的长度 occupy_quantity++; //已用空间数量加1
if(frees[i].length>job_length) //如果空间的长度大于作业的长度, {

frees[i].front+=job_length; //空闲空间的起始首地址=原空闲区间的起始长度加

作业长度 frees[i].length-=job_lengt