内存管理的功能操作系统实验二Word文件下载.docx

上传人:b****3 文档编号:16653855 上传时间:2022-11-25 格式:DOCX 页数:16 大小:110.59KB
下载 相关 举报
内存管理的功能操作系统实验二Word文件下载.docx_第1页
第1页 / 共16页
内存管理的功能操作系统实验二Word文件下载.docx_第2页
第2页 / 共16页
内存管理的功能操作系统实验二Word文件下载.docx_第3页
第3页 / 共16页
内存管理的功能操作系统实验二Word文件下载.docx_第4页
第4页 / 共16页
内存管理的功能操作系统实验二Word文件下载.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

内存管理的功能操作系统实验二Word文件下载.docx

《内存管理的功能操作系统实验二Word文件下载.docx》由会员分享,可在线阅读,更多相关《内存管理的功能操作系统实验二Word文件下载.docx(16页珍藏版)》请在冰豆网上搜索。

内存管理的功能操作系统实验二Word文件下载.docx

}QNode,*QueuePtr;

typedefstructlinkqueue{//定义队列结构

QueuePtrfront;

//队首指针

QueuePtrrear;

//队尾指针

}LinkQueue;

//队列初始化

voidcreat(LinkQueue&

Q)

Q.front=Q.rear=newQNode;

Q.front->

next=NULL;

}

//入队列

voidin(LinkQueue&

Q,intn,doublea,doubles,intf)

QueuePtrp;

p=newQNode;

p->

number=n;

//赋值

address=a;

size=s;

flag=f;

Q.rear->

next=p;

//插入至队列尾

Q.rear=p;

//修改队尾指针

//出队列

voidout(LinkQueue&

Q,int&

n,double&

a,double&

s,int&

f)

p=Q.front->

next;

//p指向队列中第一个元素

n=p->

number;

//取得该元素值

a=p->

address;

s=p->

size;

f=p->

flag;

next=p->

//修改队首指针

if(Q.rear==p)Q.rear=Q.front;

//若队列已空,把队尾指针指向头结点

//显示队列中所有元素

voidprint(LinkQueueQ)

if(p==NULL)

cout<

<

"

队列为空!

endl;

//队列为空

else{

cout<

分区号"

"

起始"

大小"

状态"

while(p!

=NULL)//否则显示队列中所有元素

{

p->

number<

address<

size<

flag<

p=p->

}

}

voidgive(LinkQueue&

memory,LinkQueue&

interim)//分配内存

while(interim.front->

next!

=NULL)//清空临时队列

{

out(interim,number,address,size,flag);

while(memory.front->

=NULL)//存入临时队列

out(memory,number,address,size,flag);

in(interim,number,address,size,flag);

QueuePtrq;

q=interim.front->

if(q==NULL)

无任何可变分区空间!

number=1;

address=0;

请输入进程大小:

;

cin>

>

while(q!

=NULL)//遍历内存分区

{

if(q->

flag==0&

&

q->

size>

=size)//内存符合

in(memory,number,address,size,1);

number++;

address+=size;

if(q->

size-size!

=0)

in(memory,number,address,q->

size-size,0);

cout<

分配成功."

print(memory);

break;

else{//内存不足

in(memory,number,address,q->

size,q->

flag);

number++;

address+=q->

q=q->

if(q==NULL)

内存不足,分配失败."

}

voidget(LinkQueue&

interim)

inti,left,right;

请输入要释放的内存分区号:

i;

if(i==1)//要释放的内存区为第一个

flag==0)

该分区未被占用!

else{

q->

flag=0;

right=q->

next->

//记录其下一个内存区的状态

if(right==0)//下一个内存区空闲,合并两个区

number=1;

address=0;

while(q!

=NULL)

{

if(q->

number==1)

{

address+=q->

}

elseif(q->

number==2)

in(memory,number,0,address+q->

size,flag);

number++;

else

in(memory,number,address,q->

q=q->

}

else

number++;

address+=q->

}

回收成功."

print(memory);

elseif(i==number)//要释放的内存区为最后一个

while(q!

number==i-1)

left=q->

//记录其前一个内存区状态

flag==1)

q->

break;

cout<

q=q->

if(left==0)//前一个内存区空闲,合并两个区

size+q->

else{//要释放的内存区为中间区

number==i)

q->

right=q->

//记录其后一个内存区状态

break;

else

if(q==NULL)

cout<

无此分区!

if(right==0&

left==0)//前后都为空闲区

=NULL)

q=q->

if(right==1&

left==0)//前为空闲,后为占有

left==1)//前为占有,后为空闲

left==1)//前后都为占有

voidmain()

LinkQueuememory;

//定义队列

LinkQueueinterim;

//临时队列

creat(memory);

//初始化队列

creat(interim);

doublesumsize;

//内存总量

charmenu;

cout<

可变内存分区总量为:

cin>

sumsize;

in(memory,1,0,sumsize,0);

//初始队列

print(memory);

while

(1){

Memu:

请选择要执行的操作:

《1.进程进入(分配内存)/2.进程执行(回收内存)/3.退出》"

menu;

switch(menu)

case'

1'

:

give(memory,interim);

break;

//分配

2'

get(memory,interim);

//回收

3'

exit(0);

//退出

default:

gotoMemu;

//重新选择

 

运行过程:

分配内存:

回收内存:

实验思路:

利用了两个队列,一个存分区情况,一个作为临时队列用于分区操作,实现最先分配算法的分配内存和回收内存的操作。

实验心得:

通过利用了两个队列,一个存分区情况,一个作为临时队列用于分区操作,实现最先分配算法的分配内存和回收内存的操作,对其利用了两个队列,一个存分区情况,一个作为临时队列用于分区操作,可实现最先分配算法的分配内存和回收内存的操作。

实现了模拟进程调度,分配内存和回收内存。

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

当前位置:首页 > 求职职场 > 职业规划

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

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