内存分配算法实验报告Word下载.docx
- 文档编号:14945460
- 上传时间:2022-10-26
- 格式:DOCX
- 页数:16
- 大小:115.17KB
内存分配算法实验报告Word下载.docx
《内存分配算法实验报告Word下载.docx》由会员分享,可在线阅读,更多相关《内存分配算法实验报告Word下载.docx(16页珍藏版)》请在冰豆网上搜索。
要求:
1.设计数据结构,存储结构;
2.在c兼容环境完成上述题目的代码编写与调试;
3.程序运行及诶按交互性好;
4.软件运行,给出测试数据。
工作计划与进度安排:
第14周:
布置课程设计任务,查阅资料,分组设计,程序调试。
第15周:
程序调试,编写课程设计报告,验收,答辩。
指导教师:
2015年11月28日
专业负责人:
学院教学副院长:
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<
stdio.h>
iostream.h>
string.h>
iomanip.h>
constintMAXJOB=100;
//定义表最大记录数
typedefstructnode{
intstart;
//空闲分区的起始地址
intlength;
//空闲分区的长度
chartag[20];
//分区信息是否已分配
}job;
jobfrees[MAXJOB];
//定义空闲区表
intfree_quantity;
//空闲区的个数
joboccupys[MAXJOB];
//定义已分配区表
intoccupy_quantity;
//已分配区的个数
//初始化函数
voidinitial(){
inti;
for(i=0;
i<
MAXJOB;
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;
}
//读数据函数
intreadData(){
FILE*fp;
charfname[20];
cout<
<
endl<
》》欢迎进入主存储器空间的分配与回收模拟系统《《"
endl;
请输入初始空闲表文件名:
;
cin>
>
fname;
if((fp=fopen(fname,"
r"
))==NULL)//读文件
cout<
错误,文件打不开,请检查文件名!
else{
while(!
feof(fp))//文件结束
{
fscanf(fp,"
%d"
&
frees[free_quantity].start);
frees[free_quantity].length);
free_quantity++;
return1;
return0;
//sort选择——排序
voidsort(){
inti,j,p;
free_quantity-1;
i++){
p=i;
for(j=i+1;
j<
free_quantity;
j++)//空闲分区按地址递增的顺序排列
{if(frees[j].start<
frees[p].start)
{p=j;
if(p!
=i){
frees[free_quantity]=frees[i];
frees[i]=frees[p];
frees[p]=frees[free_quantity];
}
//显示函数
voidview(){
-------------------------------------------"
当前空闲表:
起始地址长度状态"
cout.setf
(2);
cout.width(12);
frees[i].start;
cout.width(10);
frees[i].length;
cout.width(8);
frees[i].tag<
------------------------------------------"
当前已分配表:
起始地址长度占用作业名"
occupy_quantity;
i++){
occupys[i].start;
occupys[i].length;
occupys[i].tag<
//最先适应分配算法
voidearliest(){
//空闲分区按地址递增的顺序排列
charjob_name[20];
intjob_length;
inti,j,flag,t;
请输入新申请内存空间的作业名和空间大小:
job_name;
//输入作业的名称
job_length;
//输入作业的长度
flag=0;
//分配成功与否信号
if(frees[i].length>
=job_length){
flag=1;
//可以分配
}}
if(flag==0)
{
Sorry,当前没有能满足你申请长度的空闲内存,请稍候再试……"
else{
t=0;
i=0;
while(t==0)
=job_length)
//从空闲分区表顺序查找,直到找到第一能满足其大小要求的空闲分区为止
{t=1;
i++;
i--;
occupys[occupy_quantity].start=frees[i].start;
//修改已分区的相关信息
strcpy(occupys[occupy_quantity].tag,job_name);
occupys[occupy_quantity].length=job_length;
occupy_quantity++;
job_length)
frees[i].start+=job_length;
frees[i].length-=job_length;
else//刚好分配则空闲分区数减一
{for(j=i;
j++){
frees[j]=frees[j+1];
free_quantity--;
内存空间成功!
//最优适应分配算法
voidexcellent(){
//空闲分区按大小递增的顺序排列
=job_length){
if(flag==0){
Sorry,当前没有能满足你申请长度的空闲内存,请稍候再试!
t=0;
i=0;
while(t==0){
t=1;
for(j=0;
if((frees[j].length>
=job_length)&
&
(frees[j].length<
frees[i].length))
{i=j;
job_length){
for(j=i;
j++)
{frees[j]=frees[j+1];
free_quantity-
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 内存 分配 算法 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)