内存分配回收.docx

上传人:b****5 文档编号:8010697 上传时间:2023-01-27 格式:DOCX 页数:14 大小:133.68KB
下载 相关 举报
内存分配回收.docx_第1页
第1页 / 共14页
内存分配回收.docx_第2页
第2页 / 共14页
内存分配回收.docx_第3页
第3页 / 共14页
内存分配回收.docx_第4页
第4页 / 共14页
内存分配回收.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

内存分配回收.docx

《内存分配回收.docx》由会员分享,可在线阅读,更多相关《内存分配回收.docx(14页珍藏版)》请在冰豆网上搜索。

内存分配回收.docx

内存分配回收

操作系统课程设计报告

题目:

内存管理

班级:

学号:

姓名:

指导教师:

日期:

12.7

内存管理

一、实验目的

通过本实验加深对计算机为进程分配内存算法的理解,提高用C语言编程的能力。

二、实验要求

编写程序,分别实现用首次适应算法、循环首次适应算法、最佳算法、最坏算法分别实现对进程的分配,每分配一次输出一次内存状态。

分配完毕可以按要求回收内存。

三、实验内容

本实验主要针对操作系统中内存管理相关理论进行实验,要求实验者编写一个程序,该程序管理一块虚拟内存,实现内存分配和回收功能。

1)设计内存分配的数据结构(空闲分区表/空闲分区链),

2)设计内存分配函数;

3)设计内存回收函数;

4)实现动态分配和回收操作;

5)可动态显示每个内存块

 

程序流程图:

四、运行结果分析

完整代码:

 

#include

voidscsy();

voidxhscsy();

voidzjsy();

voidzhsy();

intnum;

inta[20][20];

voidmain()

{

inti;

intsel;

printf("请输入空闲区数目\n");

scanf("%d",&num);

for(i=0;i

{

printf("请输入空闲区起始地址空闲区大小\n");

scanf("%d",&a[i][0]);

scanf("%d",&a[i][1]);

}

printf("***********************\n*1、首次适应算法*\n*2、循环首次适应算法*\n*3、最佳适应算法*\n*4、最坏适应算法*\n***********************\n");

scanf("%d",&sel);

switch(sel)

{

case1:

scsy();

break;

case2:

xhscsy();

break;

case3:

zjsy();

break;

case4:

zhsy();

break;

default:

break;

}

}

 

voidscsy()//首次适应算法

{

inti;

intj;

intp;

intq=1;

intshumu;

intdaxiao;

intb[20][20][20];

intk;

intm;

printf("请输入进程数目\n");

scanf("%d",&shumu);

for(i=0;i

{

printf("请输入进程所需内存大小\n");

scanf("%d",&daxiao);

for(j=0;j

{

if(a[j][1]>=daxiao)

{

b[q][0][0]=j;//起址位置

a[j][0]=a[j][0]+daxiao;

a[j][1]=a[j][1]-daxiao;

j=num;

b[q][0][1]=daxiao;//数的大小

q++;

}

}

printf("空闲区起始地址大小\n");

for(p=0;p

printf("%5d%d\n",a[p][0],a[p][1]);

}

 

for(i=0;i

{

printf("请输入回收进程号\n");

scanf("%d",&m);

printf("空闲区起始地址大小\n");

k=b[m][0][0];

a[k][0]=a[k][0]-b[m][0][1];

a[k][1]=a[k][1]+b[m][0][1];

for(p=0;p

printf("%5d%d\n",a[p][0],a[p][1]);

}

}

 

voidxhscsy()//循环首次适应算法

{

inti;

intj;

intp;

intq=1;

intshumu;

intdaxiao;

ints=0;

intb[20][20][20];

intk;

intm;

printf("请输入进程数目\n");

scanf("%d",&shumu);

 

printf("请输入进程所需内存大小\n");

scanf("%d",&daxiao);

for(j=0;j

{

if(a[j][1]>=daxiao)

{

b[q][0][0]=j;

b[q++][0][1]=daxiao;

a[j][0]+=daxiao;

a[j][1]-=daxiao;

s=j;

j=num;

}

}

printf("空闲区起始地址大小\n");

for(p=0;p

printf("%5d%d\n",a[p][0],a[p][1]);

 

for(i=1;i

{

printf("请输入进程所需内存大小\n");

scanf("%d",&daxiao);

for(j=s;j

{

if(a[j][1]>=daxiao)

{

b[q][0][0]=j;

b[q++][0][1]=daxiao;

a[j][0]+=daxiao;

a[j][1]-=daxiao;

s=j;

j=num;

printf("空闲区起始地址大小\n");

for(p=0;p

printf("%5d%d\n",a[p][0],a[p][1]);

}

}

}

for(i=0;i

{

printf("请输入回收进程号\n");

scanf("%d",&m);

printf("空闲区起始地址大小\n");

k=b[m][0][0];

a[k][0]=a[k][0]-b[m][0][1];

a[k][1]=a[k][1]+b[m][0][1];

for(p=0;p

printf("%5d%d\n",a[p][0],a[p][1]);

}

}

 

voidzjsy()//最佳适应算法

{

inti;

intj;

intc[20][20];

intshumu;

intdaxiao;

intd;

inte;

intf;

intg;

intp;

intb[20][20][20];

intq=1;

intm;

intk;

printf("请输入进程数目\n");

scanf("%d",&shumu);

for(i=0;i

{

d=0;

printf("请输入进程所需内存大小\n");

scanf("%d",&daxiao);

for(j=0;j

{

if(a[j][1]>=daxiao)

{

c[d][0]=j;

c[d++][1]=a[j][1]-daxiao;

}

}

f=c[0][1];

g=c[0][0];

for(e=0;e

{

if(c[e][1]

{

f=c[e][1];

g=c[e][0];

}

}

b[q][0][0]=g;

b[q++][0][1]=daxiao;

a[g][0]+=daxiao;

a[g][1]-=daxiao;

 

printf("空闲区起始地址大小\n");

for(p=0;p

printf("%5d%d\n",a[p][0],a[p][1]);

}

for(i=0;i

{

printf("请输入回收进程号\n");

scanf("%d",&m);

printf("空闲区起始地址大小\n");

k=b[m][0][0];

a[k][0]=a[k][0]-b[m][0][1];

a[k][1]=a[k][1]+b[m][0][1];

for(p=0;p

printf("%5d%d\n",a[p][0],a[p][1]);

}

}

 

voidzhsy()//最坏适应算法

{

inti;

intj;

intc[20][20];

intshumu;

intdaxiao;

intd;

inte;

intf;

intg;

intp;

intb[20][20][20];

intq=1;

intm;

intk;

printf("请输入进程数目\n");

scanf("%d",&shumu);

for(i=0;i

{

d=0;

printf("请输入进程所需主存大小\n");

scanf("%d",&daxiao);

for(j=0;j

{

if(a[j][1]>=daxiao)

{

c[d][0]=j;

c[d++][1]=a[j][1]-daxiao;

}

}

f=c[0][1];

g=c[0][0];

for(e=0;e

{

if(c[e][1]>f)

{

f=c[e][1];

g=c[e][0];

}

}

b[q][0][0]=g;

b[q++][0][1]=daxiao;

a[g][0]+=daxiao;

a[g][1]-=daxiao;

 

printf("空闲区起始地址大小\n");

for(p=0;p

printf("%5d%d\n",a[p][0],a[p][1]);

}

for(i=0;i

{

printf("请输入回收进程号\n");

scanf("%d",&m);

printf("空闲区起始地址大小\n");

k=b[m][0][0];

a[k][0]=a[k][0]-b[m][0][1];

a[k][1]=a[k][1]+b[m][0][1];

for(p=0;p

printf("%5d%d\n",a[p][0],a[p][1]);

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1