内存分配算法实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

成绩评定表

课程设计任务书

目录

一、题目概述(内容及要求) (4)

二、功能分析............................ 错误!未定义书签。

三、设计 (6)

四、运行与测试 (7)

五、总结 (17)

参考文献 (18)

1.设计目的

1)了解多道程序系统中,多个进程并发执行的内存资源分配;

2)模拟可变分区内存储管理算法实现分区管理的最佳适应分配算法;

3)通过实现最佳算法来进一步了解静态分区模式的优缺点;

4)掌握最佳适应分配算法,深刻了解各进程在内存中的具体分配策略。2.总体设计

3.关键技术

allocate():实现内存分配,并当中调用display(pbc),以及display(S)两个函数显示内存分配完成后的空闲块链表和进程链表情况。

requireback():实现内存回收,在满足情况的条件下调动allocate()对用户社情的内存块进行回收并在当中调用display(pbc),以及display(S)两个函数

显示内存分配完成后的空闲块链表和进程链表情况。

callback():按内存回收时的四种情况对内存进行回收。

display(pbc):对空闲块链表中的空闲快惊醒从小到大排序并显示空闲链情况。display(S): 对进程链表中的进程进行从小到大排序并显示进程链情况。

main():创建并初始化空闲块链表和进程链链表,用户选择操作功能。

4.程序流程

图4-1

图4-2 5.主要源代码

#include

#include

#include

#include

const int MAXJOB=100; //定义表最大记录数

typedef struct node{

int start; //空闲分区的起始地址

int length; //空闲分区的长度

char tag[20]; //分区信息是否已分配

}job;

job frees[MAXJOB]; //定义空闲区表

int free_quantity; //空闲区的个数

job occupys[MAXJOB];//定义已分配区表

int occupy_quantity; //已分配区的个数

//初始化函数

void initial() {

int i;

for(i=0;i

frees[i].start=-1;

frees[i].length=0;

strcpy(frees[i].tag,"free");

occupys[i].start=-1;

occupys[i].length=0;

strcpy(occupys[i].tag,""); }

free_quantity=0;

occupy_quantity=0;

}

//读数据函数

int readData() {

FILE *fp;

char fname[20];

cout<

cin>>fname;

if((fp=fopen(fname,"r"))==NULL) //读文件

cout<

else{

while(!feof(fp)) //文件结束

{

fscanf(fp,"%d",&frees[free_quantity].start);

fscanf(fp,"%d",&frees[free_quantity].length);

free_quantity++; }

return 1; }

return 0;

}

//sort选择——排序

void sort() {

int i,j,p;

for(i=0;i

p=i;

for(j=i+1;j

{ p=j; }

}

if(p!=i){

frees[free_quantity]=frees[i];

frees[i]=frees[p];

frees[p]=frees[free_quantity]; }

}

}

//显示函数

void view() {

int i;

cout<

cout<<"起始地址长度状态"<

for(i=0;i

cout.setf(2);

cout.width(12);

cout<

cout.width(10);

cout<

cout.width(8);

cout<

}

cout<

cout<<"起始地址长度占用作业名"<

for(i=0;i

cout.setf(2);

cout.width(12);

cout<

cout.width(10);

cout<

cout.width(8);

cout<

}

//最先适应分配算法

void earliest() {

//空闲分区按地址递增的顺序排列

char job_name[20];

int job_length;

int i,j,flag,t;

cout<>job_name; //输入作业的名称

cin>>job_length; //输入作业的长度

相关文档
最新文档