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

代码片段和文件信息
#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基本架构
- 下一篇:企业工资管理系统 数据库课程设计源码+课程设计
相关资源
- 升腾Win终端系统升级方法新版.doc
- Uninstall_Cortana_WINCLIENT.CN.rar
- 数学建模实验报告(八个全)
- STM32基于rt_thread操作系统的SDHC卡文件
- 数字逻辑与数字系统实验报告
- 多媒体综合设计报告(附作品)
- ubuntu9.10 可加载内核模块和字符设备驱
- 操作系统 LRU算法 实验报告 及 程序代
- [免费]车载CE6.0操作系统
- 分页系统模拟实验 操作系统 课程设
- 模拟段页式虚拟存储管理中地址转换
- 迈克尔逊干涉仪的调整与使用实验报
- 操作系统实验——虚存管理实验
- 广工操作系统实验
- 广东工业大学操作系统实验四文件系
- Bochs入门教程[操作系统第一步]
- 操作系统课程设计完整版
- 磁盘调度算法的模拟实现及对比
- 模拟一个文件管理系统
- 利用启发式搜索解决八数码难题程序
- 二级文件系统(操作系统)
- uCOS编译环境建立 BC45 TASM
- 比较两个字符串大小汇编语言源代码
- Linux 操作系统实验(全)
- 操作系统实验综合设计【附代码】
- 操作系统共享内存实验
- 操作系统循环首次适应算法
- linux实验报告及心得体会
- 操作系统课程设计实现可变分区存储
- 基于GTK的Linux环境下的简易任务管理器
评论
共有 条评论