资源简介

操作系统实验三,主存空间的分配与回收,包括首次适应算法、最佳和最坏适应算法,内含完整文档和源码,编译即可执行。

资源截图

代码片段和文件信息

#include
#include
#include
#include
#define getAREA() (AREA*)(malloc(sizeof(AREA)))
#define getJCB() (JCB*)(malloc(sizeof(JCB)))

typedef struct area  //可用空闲分区链结点
{
int num; //分区序号
int base;//首地址
int size;//大小
int state; //状态
struct area *first; //前向指针
struct area *next;  //后向指针
}AREA;
AREA *pm;//可用分区链的头结点
AREA *area[10]={NULL}; //该指针数组各个元素指向各个空闲分区,按容量从小到大排序

typedef struct JCB  //作业链结点
{
char name[10];     //作业名
int size;          //所需空间大小
int base;          //起始地址
    struct JCB *next;
}JCB;
JCB *head=NULL;  //作业链的表头

int get()//让用户只能输入正整数
{
int n=-1;
scanf(“%d“&n);
while(n<0)
{
     printf(“输入只能为正整数,请重新输入\n“);
scanf(“%d“&n);
}
return n;
}

void sort()  //对指针数组排序,按照下标的递增顺序,所指的空闲分区容量也递增
{
AREA *p*temp;
int ij;
for(i=1p=pm->next; p ;i++p=p->next) //初始化,先让每个指针指向一个不同分区
area[i]=p;
area[i]=NULL;
if(pm->next&&pm->next->next) //排序
{
for(i=1;area[i];i++)
     for(j=1;area[j+1];j++)
{
if(area[j]->size>area[j+1]->size)
{
temp=area[j];
area[j]=area[j+1];
area[j+1]=temp;
}

}

}

}

JCB *check(char *name)  //检查作业是否存在,若存在则返回指向该作业的指针
{
    JCB *p*q;
p=head; q=p;
if(head)
{
while(p)
{
if(strcmp(head->namename)==0)
{
head=head->next;
return p;
}
else if(strcmp(p->namename)!=0)
{
q=p;
p=p->next;
}
else 
{
q->next=p->next;
return p;
}
}
}
return NULL;
}

void release(int base int size)  //释放内存空间
{
AREA *temp*p = pm;
while(p->next)  //寻找释放区的前一个空闲区p
{
if(base + size <= p->next->base)
break;
p = p->next;
}
if(base == p->base + p->size) //低地址相邻
{
if(p ->next && p->next->base == base + size)//释放区上下都与空闲区相邻
{
     if(base==0)
{
p->next->base=0;
p->next->size = size + p->next->size;
sort();
}
else
{
p->size += size + p->next->size;
        temp = p->next;
     p->next = p->next->next;
if(p->next!=NULL)
             p->next->first=p;
sort();
     for(;p->next;p=p->next) //空闲分区序号整理
     p->next->num-=1;
}
}
else //仅与低地址相邻
{
if(base==0) //释放区的首地址是0,插入空闲分区结点
{
temp = getAREA();
         temp->size = size;
         temp->base = base;
         temp->state = 0;
         temp->num = p->num+1;
         temp->next = p->next;
if(p->next!=NULL)
     p->next->first=temp;
          p->next = temp;
sort();
         for(p=temp;p->next;p=p->next) //空闲分区序号整理
         p->next->num+=1;
}
else
{
     p->size += size;
sort();
}
}
}
else if (p->next && p->next->base == base +size) //仅与高地址相邻
{
p->next->base = base;
p->next->size += size;
sort();
}
else  //释放区上下与空闲区都不相邻
{
temp = getAREA();
temp->size = size;
temp->base = base;
temp->state = 0;
temp->num = p->num+1;
temp->next = p->next;
if(p->next!=NULL)
p->next-

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件     568320  2013-06-21 17:15  主存空间的分配与回收\实验报告.doc

     文件      16710  2012-11-26 18:35  主存空间的分配与回收\最佳适应算法\Debug\123.obj

     文件      41984  2012-11-26 20:32  主存空间的分配与回收\最佳适应算法\Debug\vc60.idb

     文件      53248  2012-11-26 20:32  主存空间的分配与回收\最佳适应算法\Debug\vc60.pdb

     文件     223776  2012-11-26 20:32  主存空间的分配与回收\最佳适应算法\Debug\最佳适应算法.ilk

     文件      18260  2012-11-26 20:32  主存空间的分配与回收\最佳适应算法\Debug\最佳适应算法.obj

     文件     221744  2012-11-25 20:32  主存空间的分配与回收\最佳适应算法\Debug\最佳适应算法.pch

     文件     435200  2012-11-26 20:32  主存空间的分配与回收\最佳适应算法\Debug\最佳适应算法.pdb

     文件       7257  2013-06-21 17:14  主存空间的分配与回收\最佳适应算法\最佳适应算法.cpp

     文件       4352  2012-11-26 19:21  主存空间的分配与回收\最佳适应算法\最佳适应算法.dsp

     文件        532  2012-11-25 14:22  主存空间的分配与回收\最佳适应算法\最佳适应算法.dsw

     文件      41984  2012-11-26 22:59  主存空间的分配与回收\最佳适应算法\最佳适应算法.ncb

     文件      48640  2012-11-26 22:59  主存空间的分配与回收\最佳适应算法\最佳适应算法.opt

     文件        925  2012-11-26 20:32  主存空间的分配与回收\最佳适应算法\最佳适应算法.plg

     文件      33792  2012-11-26 20:38  主存空间的分配与回收\最坏适应算法\Debug\vc60.idb

     文件      53248  2012-11-26 20:34  主存空间的分配与回收\最坏适应算法\Debug\vc60.pdb

     文件     185676  2012-11-26 20:34  主存空间的分配与回收\最坏适应算法\Debug\最坏适应算法.ilk

     文件      18260  2012-11-26 20:34  主存空间的分配与回收\最坏适应算法\Debug\最坏适应算法.obj

     文件     221744  2012-11-26 20:04  主存空间的分配与回收\最坏适应算法\Debug\最坏适应算法.pch

     文件     427008  2012-11-26 20:34  主存空间的分配与回收\最坏适应算法\Debug\最坏适应算法.pdb

     文件       7256  2013-06-21 17:13  主存空间的分配与回收\最坏适应算法\最坏适应算法.cpp

     文件       4358  2012-11-26 20:11  主存空间的分配与回收\最坏适应算法\最坏适应算法.dsp

     文件        532  2012-11-26 19:56  主存空间的分配与回收\最坏适应算法\最坏适应算法.dsw

     文件      41984  2012-11-26 23:02  主存空间的分配与回收\最坏适应算法\最坏适应算法.ncb

     文件      48640  2012-11-26 23:02  主存空间的分配与回收\最坏适应算法\最坏适应算法.opt

     文件        925  2012-11-26 20:34  主存空间的分配与回收\最坏适应算法\最坏适应算法.plg

     文件      33792  2012-11-26 23:07  主存空间的分配与回收\首次适应算法\Debug\vc60.idb

     文件      53248  2012-11-26 19:49  主存空间的分配与回收\首次适应算法\Debug\vc60.pdb

     文件     188476  2012-11-26 19:49  主存空间的分配与回收\首次适应算法\Debug\首次适应算法.ilk

     文件      16836  2012-11-26 19:49  主存空间的分配与回收\首次适应算法\Debug\首次适应算法.obj

............此处省略18个文件信息

评论

共有 条评论