操作系统实验四存储管理Word文档格式.docx
- 文档编号:17216723
- 上传时间:2022-11-29
- 格式:DOCX
- 页数:11
- 大小:290.08KB
操作系统实验四存储管理Word文档格式.docx
《操作系统实验四存储管理Word文档格式.docx》由会员分享,可在线阅读,更多相关《操作系统实验四存储管理Word文档格式.docx(11页珍藏版)》请在冰豆网上搜索。
分析UNIX最先适应(FF)存储分配算法,即map数据结构、存储分配函数malloc()和存储释放函数mfree(),找出与算法有关的成分。
修改上述与算法有关的成分,使其分别体现BF分配原则和WF分配原则。
三、实验使用环境
RedHatEnterpriselinux5
4、实验结果
源程序:
/***************************************************************************
*Copyright(C)2004byroot*
*root@simplymepis*
**
*Thisprogramisfreesoftware;
youcanredistributeitand/ormodify*
*itunderthetermsoftheGNUGeneralPublicLicenseaspublishedby*
*theFreeSoftwareFoundation;
eitherversion2oftheLicense,or*
*(atyouroption)anylaterversion.*
*Thisprogramisdistributedinthehopethatitwillbeuseful,*
*butWITHOUTANYWARRANTY;
withouteventheimpliedwarrantyof*
*MERCHANTABILITYorFITNESSFORAPARTICULARPURPOSE.Seethe*
*GNUGeneralPublicLicenseformoredetails.*
*YoushouldhavereceivedacopyoftheGNUGeneralPublicLicense*
*alongwiththisprogram;
ifnot,writetothe*
*FreeSoftwareFoundation,Inc.,*
*59TemplePlace-Suite330,Boston,MA02111-1307,USA.*
***************************************************************************/
#ifdefHAVE_CONFIG_H
#include<
config.h>
#endif
stdio.h>
stdlib.h>
#defineMAPSIZE116
structmap//存储资源表结构
{
/*char*m_size;
char*m_addr;
*/
intm_addr;
intm_size;
};
structmapmap[MAPSIZE];
//存储资源表
intFF_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->
for(bpp=bp;
bpp->
bpp++)//最先适应
if(bpp->
=size&
&
m_addr<
=a)
a=bpp->
s=bpp->
bp=bpp;
}
m_addr+=size;
if((bp->
m_size-=size)==0)
do
bp++;
(bp-1)->
m_addr=bp->
while((bp-1)->
m_size=bp->
m_size);
return(a);
return(-1);
}
voidmfree(structmap*mp,intaa,intsize)//存储释放函数
registerstructmap*bp;
registerintt;
registerinta;
a=aa;
=a&
m_size!
=0;
;
if(bp>
mp&
m_addr+(bp-1)->
m_size==a)
{//与前合并
m_size+=size;
if(a+size==bp->
m_addr)
{//前后合并
m_size+=bp->
while(bp->
m_size)
else
m_addr&
{//与后合并
m_addr-=size;
elseif(size)
{//无合并
t=bp->
m_addr=a;
a=t;
m_size=size;
while(size=t);
voidinit()
structmap*bp;
intaddr,size;
inti=0;
bp=map;
printf("
Pleaseinputstartingaddrandtotalsize:
"
);
scanf("
%d,%d"
&
addr,&
size);
m_addr=addr;
m_size=size;
(++bp)->
m_size=0;
//表尾
voidshow_map()
system("
clear"
//调用清屏命令
\nCurrentmemorymap...\n"
Address\t\tSize\n"
while(bp->
m_size!
=0)
<
%d\t\t%d>
\n"
bp->
m_addr,bp->
main()
inta,s;
intc;
inti;
init();
//显示存储分配表
show_map();
Pleaseinput,1forrequest,2forrelease,0forexit:
%d"
c);
switch(c)
case1:
Pleaseinputsize:
&
s);
if((a=FF_malloc(map,s))==-1)//callmalloc
requestcan'
tbesatisfied\n"
allocmemoryataddress:
%d,size:
%d\n"
a,s);
break;
case2:
Pleaseinputaddrandsize:
a,&
mfree(map,a,s);
case0:
exit(0);
while
(1);
运行结果:
5、实验分析
上述算法沿用了UNIX系统所采用的数据结构,存储分配表中空闲区按m_addr递增排列,对于任意请求,需要由表头查到表尾才能确定最佳(最坏)分配区域。
为提高存储分配时的查找速度,有人将表中空闲区按m_size递增(递减)排列,这样分配时取第一个长度能满足的表项即可。
采用这种组织方式,不仅分配后剩余部分在表中的位置可能发生变化,而且需对释放函数进行较大的修改,试给出对应的算法
对于Linux系统采用的伙伴堆(buddyheap)内存资源管理,设计相应的数据结构和算法。
六、实验小结
通过实验理解动态异长存储分区资源管理,掌握所需数据结构和管理程序,了解几种种存储分配算法的优点和缺点。
通过看教程中6.2.2节动态不等长存储资源管理和12.4.2节UNIX存储资源管理,懂得编最佳适应和最坏适应存储分配算法以及对存储分配表的初始化。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 实验 存储 管理