资源简介
操作系统实验三,主存空间的分配与回收,包括首次适应算法、最佳和最坏适应算法,内含完整文档和源码,编译即可执行。
代码片段和文件信息
#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个文件信息
- 上一篇:片上网络NOC基本架构
- 下一篇:企业工资管理系统 数据库课程设计源码+课程设计
相关资源
- 白盒测试 实验报告
- 操作系统设计与实现 课后习题答案
- 分布式操作系统陆丽娜版课后习题
- 操作系统-时钟中断-模拟时钟中断的产
- 用多线程同步方法解决哲学家就餐问
- 操作系统中模拟磁盘调度算法的源代
- 华南理工大学操作系统实验六:实现
- 先进先出FIFO页面置换算法
- 《操作系统概念》课后答案.pdf
- 广工数据结构课程设计实验-二叉树的
- 东南大学接口实验报告
- 编译方法实验报告2.doc
- 全自动洗衣机实验报告PLC
- 计算机操作系统答案 方敏版
- 算法实验报告:罗密欧与朱丽叶迷宫
- 操作系统实验四主存空间的分配与回
- 哈工大 操作系统实验二 linux0.01添加系
- 操作系统汤子瀛版课后答案
- 华南理工大学操作系统课设
- 东南大学io 汇编部分实验
- 编译原理实验报告完整版词法语法语
- 系分经典教材 计算机系统知识、软件
- 机器人操作系统ROS-典型功能代码详解
- 广工人工智能实验报告
- 操作系统实验报告_读者写者问题.do
- 罗宇版本的操作系统课后习题答案
- 词法分析实验报告含代码
- PL0语言编译器分析实验报告
- 并行计算基础实验报告
- 2007年东北大学博士入学考试试题-分布
评论
共有 条评论