操作系统第三次.docx

上传人:b****6 文档编号:8602546 上传时间:2023-02-01 格式:DOCX 页数:9 大小:48.81KB
下载 相关 举报
操作系统第三次.docx_第1页
第1页 / 共9页
操作系统第三次.docx_第2页
第2页 / 共9页
操作系统第三次.docx_第3页
第3页 / 共9页
操作系统第三次.docx_第4页
第4页 / 共9页
操作系统第三次.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

操作系统第三次.docx

《操作系统第三次.docx》由会员分享,可在线阅读,更多相关《操作系统第三次.docx(9页珍藏版)》请在冰豆网上搜索。

操作系统第三次.docx

操作系统第三次

吉林大学

操作系统

实验报告

 

班级:

7

姓名:

姜秀连

学号:

55140727

 

姓名

姜秀连

学号

55140727

实验项目

存储管理——动态不等

长存储资源分配算法

实验性质

□演示性实验□验证性实验

操作性实验□综合性实验

实验地点

机器编号

指导教师

实验时间

2016年6月14日

一、实验综述

1.实验目的及要求

理解动态异长存储分区资源管理,掌握所需数据结构和管理程序,了解各种存储分配算法的优点和缺点。

实验内容

分析UNIX最先适应(FF)存储分配算法,即map数据结构、存储分配函数malloc()和存储释放函数mfree(),找出与算法有关的成分。

修改上述与算法有关的成分,使其分别体现BF分配原则和WF分配原则。

2.实验设备、软件

PC, Linux

二、实验过程(实验步骤、记录、数据、分析)

实验代码:

#ifdefHAVE_CONFIG_H

#include

#endif

#include

#include

#defineMAPSIZE100

structmap//存储资源表结构

{

intm_addr;

intm_size;

};

structmapmap[MAPSIZE];//存储资源表

//BF存储分配函数

intBF_malloc(structmap*mp,intsize)

{

registerinta,s;

registerstructmap*bp,*bpp;

for(bp=mp;bp->m_size;bp++)

{

if(bp->m_size>=size)

{

a=bp->m_addr;

s=bp->m_size;

for(bpp=bp;bpp->m_size;bpp++)

{//最佳适应

if(bpp->m_size>=size&&bpp->m_size

{

a=bpp->m_addr;

s=bpp->m_size;

bp=bpp;

}

}

bp->m_addr+=size;

if((bp->m_size-=size)==0)

do

{

bp++;

(bp-1)->m_addr=bp->m_addr;

}

while((bp-1)->m_size=bp->m_size);

return(a);

}

}

return(-1);

}

 

//WF存储分配函数

intWF_malloc(structmap*mp,intsize)

{

registerinta,s;

registerstructmap*bp,*bpp;

for(bp=mp;bp->m_size;bp++)

{

if(bp->m_size>=size)

{

a=bp->m_addr;

s=bp->m_size;

for(bpp=bp;bpp->m_size;bpp++)

{//最坏适应

if(bpp->m_size>s)

{

a=bpp->m_addr;

s=bpp->m_size;

bp=bpp;

}

}

bp->m_addr+=size;

if((bp->m_size-=size)==0)

do

{

bp++;

(bp-1)->m_addr=bp->m_addr;

}

while((bp-1)->m_size=bp->m_size);

return(a);

}

}

return(-1);

}

 

//存储释放函数

voidmfree(structmap*mp,intaa,intsize)

{

registerstructmap*bp;

registerintt;

registerinta;

a=aa;

for(bp=mp;bp->m_addr<=a&&bp->m_size!

=0;bp++)

;

if(bp>mp&&(bp-1)->m_addr+(bp-1)->m_size==a)

{//与前合并

(bp-1)->m_size+=size;

if(a+size==bp->m_addr)

{//前后合并

(bp-1)->m_size+=bp->m_size;

while(bp->m_size)

{

bp++;

(bp-1)->m_addr=bp->m_addr;

(bp-1)->m_size=bp->m_size;

}

}

}

 

else

{

if(a+size==bp->m_addr&&bp->m_size)

{//与后合并

bp->m_addr-=size;

bp->m_size+=size;

}

elseif(size)

do

{//无合并

t=bp->m_addr;

bp->m_addr=a;

a=t;

t=bp->m_size;

bp->m_size=size;

bp++;

}

while(size=t);

}

}

voidinit()

{

structmap*bp;

intaddr,size;

inti=0;

bp=map;

printf("Pleaseinputstartingaddrandtotalsize:

");

scanf("%d,%d",&addr,&size);

bp->m_addr=addr;

bp->m_size=size;

(++bp)->m_size=0;//表尾

}

 

voidshow_map()

{

inti=0;

//system("clear");//清屏

structmap*bp;

bp=map;

printf("\nCurrentmemorymap...\n");

printf("Address\t\tSize\n");

while(bp->m_size!

=0)

{

printf("<%d\t\t%d>\n",bp->m_addr,bp->m_size);

bp++;

}

printf("\n");

}

main()

{

inta,s;

intc;

inti;

init();

printf("pleaseinput,bforBF,wforWF:

");

scanf("%c",&c);

do

{

show_map();//显示存储资源表

printf(“pleaseinput,bforBF,wforWF,eforexit);

printf("Pleaseinput,1forrequest,2forrelease,0forexit:

");

scanf("%d",&c);

switch(i)

{

case1:

printf("Pleaseinputsize:

");

scanf("%d",&s);

if(c==’b’)//BF

a=BF_malloc(map,s))

else//WF

a=WF_malloc(map,s))

if(a==-1)

printf("requestcan'tbesatisfied\n");

else

printf("allocmemoryataddress:

%d,size:

%d\n",a,s);

break;

case2:

printf("Pleaseinputaddrandsize:

");

scanf("%d,%d",&a,&s);

mfree(map,a,s);

break;

case0:

exit(0);

}

}

while

(1);

}

3.实验结果及分析

 

四.总结

通过这次的实验,基本理解操作系统动态不等

长存储资源分配算法,基本完成实验的要求。

 

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

当前位置:首页 > 党团工作 > 思想汇报心得体会

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

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