- 1、本文档共17页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
学号 专业 计算机科学与技术 姓名
实验日期 2017.11.16 教师签字 成绩
实验报告
【实验名称】 首次适应算法和循环首次适应算法
【实验目的】
学会主存空间分配与回收的基本方法首次适应算法和循环首次适应算法。
【实验原理】
理解在连续分区动态的存储管理方式下,如何实现贮存空间的分配与回收。
采用可变式分区管理,使用最佳适应算法实现主存空间的分配与回收。
采用可变式分区管理,使用最坏适应算法实现主存空间的分配与回收。
数据结构:
1、bool ROM[N]; //定义主存信息,如果内存被占用,则标记为1,否则标记为0,设置内存单元为1024
2、pcb num[20];//定义作业数组,最大支持20个作业
3、typedef struct Pcb //定义作业结构体,包括名称,开始时间,大小,是否执行状态
{
char name[10];
int start;
int size;
int state=0;
} pcb;
typedef struct Free_rom //空闲区结构体
{
int num;
int start;
int end;
int space;
} Free_room;
Free_rom free_rom[100];//设置空闲区数组为100个
主要函数
void init();//初始化信息,包括初始化内存信息,和初始化作业队列
void insert_pcb1(pcb a);插入作业函数,首次适应算法,如果有适合的就插入,无合适输出‘插入失败’
void insert_pcb1(pcb a);插入作业函数,循环首次适应算法,如果有适合的就插入,无合适输出‘插入失败’
void Delete(pcb a)//删除作业信息,包括修改内存状态修改作业状态并对作业进行初始化
void show();//显示信息
void find_free_rom() //寻找空闲区
算法流程图
首次适应算法
循环首次适应算法
程序代码及截图:
#includestdio.h
#includestring.h
#define N 1024
bool ROM[N];//设置内存块
int p=0;//循环首次使用需要标记当前的空闲区块
typedef struct Pcb//作业数据结构
{
char name[10];
int start;
int size;
int state=0;
} pcb;
int free_rom_counter=0;
pcb num[20]; //作业队列
typedef struct Free_rom //空闲区结构体
{
int num;
int start;
int end;
int space;
} Free_room;
Free_rom free_rom[100];//设置空闲区数组为100个
void find_free_rom() //寻找空闲区
{
free_rom_counter=0;
int i,j,p;
for(i=0; iN; i++)
if(ROM[i]==0)
{
p=i;
for(j=i; jN; j++)
{
if(ROM[j]==0)
{
i=j;
continue;
}
if(ROM[j]==1)//找到空闲区
{
free_rom_counter++;
free_rom[ free_rom_counter].num= free_rom_counter;
free_rom[ free_rom_counter].start=p;
free_rom[ free_rom_counter].end=j-1;
free_rom[ free_rom_counter].space=j-p;
i=j+1;
bre
文档评论(0)