内存分配算法实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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< cin>>job_length; //输入作业的长度