实验三 存储器的分配与回收算法实现二维数组教学提纲.docx

上传人:b****4 文档编号:6583740 上传时间:2023-05-10 格式:DOCX 页数:12 大小:34.23KB
下载 相关 举报
实验三 存储器的分配与回收算法实现二维数组教学提纲.docx_第1页
第1页 / 共12页
实验三 存储器的分配与回收算法实现二维数组教学提纲.docx_第2页
第2页 / 共12页
实验三 存储器的分配与回收算法实现二维数组教学提纲.docx_第3页
第3页 / 共12页
实验三 存储器的分配与回收算法实现二维数组教学提纲.docx_第4页
第4页 / 共12页
实验三 存储器的分配与回收算法实现二维数组教学提纲.docx_第5页
第5页 / 共12页
实验三 存储器的分配与回收算法实现二维数组教学提纲.docx_第6页
第6页 / 共12页
实验三 存储器的分配与回收算法实现二维数组教学提纲.docx_第7页
第7页 / 共12页
实验三 存储器的分配与回收算法实现二维数组教学提纲.docx_第8页
第8页 / 共12页
实验三 存储器的分配与回收算法实现二维数组教学提纲.docx_第9页
第9页 / 共12页
实验三 存储器的分配与回收算法实现二维数组教学提纲.docx_第10页
第10页 / 共12页
实验三 存储器的分配与回收算法实现二维数组教学提纲.docx_第11页
第11页 / 共12页
实验三 存储器的分配与回收算法实现二维数组教学提纲.docx_第12页
第12页 / 共12页
亲,该文档总共12页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

实验三 存储器的分配与回收算法实现二维数组教学提纲.docx

《实验三 存储器的分配与回收算法实现二维数组教学提纲.docx》由会员分享,可在线阅读,更多相关《实验三 存储器的分配与回收算法实现二维数组教学提纲.docx(12页珍藏版)》请在冰点文库上搜索。

实验三 存储器的分配与回收算法实现二维数组教学提纲.docx

实验三存储器的分配与回收算法实现二维数组教学提纲

 

实验三存储器的分配与回收算法实现(二维数组)

实验三存储器的分配与回收算法

◆实验名称:

存储器的分配与回收算法实验

◆仪器、设备:

计算机

◆参考资料:

操作系统实验指导书

◆实验目的:

设计一个存储器的分配与回收算法管理方案,并编写模拟程序实现。

◆实验内容:

1.模拟操作系统的主存分配,运用可变分区的存储管理算法设计主存分配和回收程序,并不实际启动装入作业。

2.采用最先适应法、最佳适应法、最坏适应法分配主存空间。

3.当一个新作业要求装入主存时,必须查空闲区表,从中找出一个足够大的空闲区。

若找到的空闲区大于作业需要量,这是应把它分成二部分,一部分为占用区,加一部分又成为一个空闲区。

4.当一个作业撤离时,归还的区域如果与其他空闲区相邻,则应合并成一个较大的空闲区,登在空闲区表中。

5.运行所设计的程序,输出有关数据结构表项的变化和内存的当前状态。

◆实验要求:

1.详细描述实验设计思想、程序结构及各模块设计思路;

2.详细描述程序所用数据结构及算法;

3.明确给出测试用例和实验结果;

4.为增加程序可读性,在程序中进行适当注释说明;

5.认真进行实验总结,包括:

设计中遇到的问题、解决方法与收获等;

6.实验报告撰写要求结构清晰、描述准确逻辑性强;

实验过程中,同学之间可以进行讨论互相提高,但绝对禁止抄袭。

◆实验过程记录(源程序、测试用例、测试结果及心得体会等

实验代码如下:

#include

intwork[10][2];//作业名字大小

intidle[10][2];//空闲区大小地址

intfree[10][3];//已分配区域的名字地址大小

intnum=0,b=1,d,ch1,ch2;

voidinit(){

idle[0][0]=1;idle[0][1]=100;

free[0][0]=0;free[1][1]=0;free[1][2]=0;

work[0][0]=0;work[0][1]=0;

for(inti=1;i<=9;i++){//初始化数组

idle[i][0]=0;idle[i][1]=0;

free[i][0]=0;free[i][1]=0;free[i][2]=0;

work[i][0]=0;work[i][1]=0;

}

}

voidjishu(){//求空闲单元数

for(inti=0;i<9;i++)

if(idle[i][1]!

=0)

num++;

}

voidjishu1(){//求作业数

for(inti=0;i<9;i++)

if(work[i][1]!

=0)

b++;

}

voidzuixian(){//最先适应法

jishu();

for(inti=0;i

for(intj=i;j

if(idle[j][0]>idle[j+1][0]){

inttemp=idle[j][0];

idle[j][0]=idle[j+1][0];

idle[j+1][0]=temp;

temp=idle[j][1];

idle[j][1]=idle[j+1][1];

idle[j+1][1]=temp;

}

}

}

}

voidzuijia(){//最佳适应法

num=0;

jishu();

for(inti=0;i

for(intj=i;j

if(idle[j][1]>idle[j+1][1]){

inttemp=idle[j][0];

idle[j][0]=idle[j+1][0];

idle[j+1][0]=temp;

temp=idle[j][1];

idle[j][1]=idle[j+1][1];

idle[j+1][1]=temp;

}

}

}

}

voidzuihuai(){//最坏适应法

num=0;

jishu();

for(inti=0;i

for(intj=i;j

if(idle[j][1]

inttemp=idle[j][0];

idle[j][0]=idle[j+1][0];

idle[j+1][0]=temp;

temp=idle[j][1];

idle[j][1]=idle[j+1][1];

idle[j+1][1]=temp;

}

}

}

}

voidhuishou(intname){//回收进程函数

num=0;

b=0;

jishu();

jishu1();

intc=-1;

for(intk=0;k<=b;k++){

if(free[k][0]==name){

c=k;

break;

}

}

if(c==-1)cout<<"要回收的作业不存在!

"<

else{

for(inti=0;i

for(intj=i;j

if(idle[j][0]>idle[j+1][0]){

inttemp=idle[j][0];

idle[j][0]=idle[j+1][0];

idle[j+1][0]=temp;

temp=idle[j][1];

idle[j][1]=idle[j+1][1];

idle[j+1][1]=temp;

}

}

}

for(intq=0;q

if(free[c][1]<=idle[q][0]){

for(intj=num;j>=q;j--){

idle[j+1][0]=idle[j][0];

idle[j+1][1]=idle[j][1];

}

idle[j][0]=free[c][1];

idle[j][1]=free[c][2];

b++;

if(idle[j+1][0]==idle[j][0]+idle[j][1]){

idle[j][1]=idle[j][1]+idle[j+1][1];

for(intm=j+1;m<=num;m++){

idle[m][0]=idle[m+1][0];

idle[m][1]=idle[m+1][1];

}

idle[m][0]=0;

idle[m][1]=0;

b--;

}

if(idle[j-1][0]==idle[j][0]){

idle[j-1][1]=idle[j-1][1]+idle[j][1];

for(intn=j;j<=num;j++){

idle[n][0]=idle[n+1][0];

idle[n][1]=idle[n+1][1];

}

idle[n][0]=0;

idle[n][1]=0;

b--;

}

break;

}

}

if(ch2==1)zuixian();

if(ch2==2)zuijia();

if(ch2==3)zuihuai();

for(intp=c;c

free[c][0]=free[c+1][0];

free[c][1]=free[c+1][1];

free[c][2]=free[c+1][2];

work[c][0]=work[c+1][0];

work[c][1]=work[c+1][1];

}

cout<<"该进程已被成功回收!

"<

}

}

voidfp(){

inttag=0;//判断空闲区与请求区大小

num=0;

b=0;

jishu();

jishu1();

for(intj=0;j

if(work[b][1]

free[b][0]=work[b][0];

free[b][1]=idle[j][0];

free[b][2]=work[b][1];

idle[j][0]=idle[j][0]+work[b][1];

idle[j][1]=idle[j][1]-work[b][1];

tag=1;

break;

}

elseif(work[b][1]==idle[j][1]){

free[b][0]=work[b][0];

free[b][1]=idle[j][0];

free[b][2]=work[b][1];

tag=1;

for(inti=j;i<=num-1;i++){

idle[i][0]=idle[i+1][0];

idle[i][1]=idle[i+1][1];

}

break;

}

elsetag=0;

}

if(tag==0)cout<<"作业过大没有足够存储空间!

"<

}

voidprint(){

num=0;

b=1;

jishu();

jishu1();

cout<<"已分配表为:

"<

for(inti=0;i<=b;i++)

if(free[i][2]!

=0)

cout<<"作业名:

"<

"<

"<

cout<

cout<<"空闲区表为:

"<

for(intj=0;j

if(idle[j][1]!

=0)

cout<<"起始地址:

"<

"<

cout<

}

voidmain(){//主函数运行上面定义的函数

init();

intn;

cout<<"1.分配空间;2.回收空间;"<

cin>>ch1;

cout<

cout<<"1.最先适应法;2.最佳适应法;3.最坏适应法;"<

cin>>ch2;

cout<

if(ch1==1){

cout<<"请输入要分配内存的作业名及占用内存大小:

";

cin>>work[b][0]>>work[b][1];

cout<

if(ch2==1){

zuixian();

fp();

}

elseif(ch2==2){

zuijia();

fp();

}

elseif(ch2==3){

zuihuai();

fp();

}

print();

}

cout<<"输入要回收的作业名:

"<

cin>>n;

huishou(n);

}

实验截图:

成功回收时:

回收失败时:

实验体会:

本次实验的难度较大,尤其是回收进程,主要编写几个算法和回收程序,最佳,最优,最坏算法和回收算法,我用的是数组,有工作数组,空闲数组,已分配数组。

最后再编写算法,但是回收算法现在还是有些不清晰,需要进一步研究!

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

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2