操作系统内存buddy算法和页置换算法实验报告Word文件下载.doc
- 文档编号:13086107
- 上传时间:2022-10-04
- 格式:DOC
- 页数:14
- 大小:616.50KB
操作系统内存buddy算法和页置换算法实验报告Word文件下载.doc
《操作系统内存buddy算法和页置换算法实验报告Word文件下载.doc》由会员分享,可在线阅读,更多相关《操作系统内存buddy算法和页置换算法实验报告Word文件下载.doc(14页珍藏版)》请在冰豆网上搜索。
分析:
总的内存大小固定(默认为2048),申请内存的时候用到随机函数,为了使分配效果更加突出,每次申请内存大小为1——600。
每次申请完并成功分配后,得到剩余内存大小availMemory和碎片大小fragment[],来得到分配失败的原因。
分配成功的内存集记录为haveAllo[],在haveAllo[]中随机抽取内存进行释放。
2、要求:
首先用srand()和rand()函数定义和产生指令序列,然后将指令序列变换成相应的页地址流,并针对不同的算法计算出相应的命中率。
可以直接忽略指令的内容,按照地址来进行分析,这样是执行更加方便。
各个算法总体相同,主要区别就是置换的条件不同,掌握好条件是本实验的关键。
四、具体实现
4.1流程图:
1、分配内存:
释放内存:
2、
(1)最佳置换算法(Optimal)
(2)先进先出法(FisrtInFirstOut)
(3)最近最久未使用(LeastRecentlyUsed)4)最不经常使用法(LeastFrequentlyUsed)
4.2数据结构定义:
1、
typedefstructMemoryTree{
structMemoryTree*left;
structMemoryTree*right;
structMemoryTree*father;
inttab;
intthisMemory;
intused;
}TreeNode,*Mtree;
内存节点定义:
tab为可用标记,1为可用,0为已用
thisMemory表示此节点共有内存量
used表示已用内存量
intAlloMemory(inttoBeAllo,Mtreeroot)
分配内存
voidReleaseMemory(inttoBeRele,Mtreeroot)
释放内存
voidDelete(inta[],intnum)
从数组a中删除元素num,该函数用于内存释放。
voidScanMemory(Mtreeroot)
浏览分配树,以得到可用内存和碎片
2、
voidinit_addr(void)
初始化指令序列,并按照一定规则执行
voidinit_page(void)
初始化页表
intisIn(inta)
判断地址为a的指令是否在页中
intfind_max(intnum,intdata[])
找出data序列中第一个最大值的序号
intfind_min(intnum,intdata[])
找出data序列中第一个最小值的序号
floatoptimal(void)
optimal算法,返回命中率
floatFIFO(void)
FIFO算法,返回命中率
floatLRU(void)
LRU算法,返回命中率
floatLFU(void)
LFU算法,返回命中率
五、调试运行结果
1、假设有3次分配,然后释放。
结果如下:
若分配次数增加,假设变为7次,结果如下:
我们发现,出现两次碎片过多引起的分配失败。
释放过程只释放5次就结束了,不会释放非配失败的内存:
2、我们进行对页表大小为1、5、10、15、20、25、32来进行模拟,结果如下:
(1)页表大小为1
(2)页表大小为5
(3)页表大小为10(4)页表大小为15
(5)页表大小为20(6)页表大小为25
(7)页表大小为32
六、所遇问题及解决办法
1、P:
在数组传递参数时出错
A:
发现很多需要传递的数组时贯穿全局的,所以设置为全局变量,不再进行参数的传递
2、P:
在合并可用伙伴内存的时候不知道如何去进行未知次数的合并
调用递归,进行树的后续遍历,先合并再判断,使问题迎刃而解。
3、P:
在分配指令序列的时候,没有考虑到极端情况:
如有320条指令,第一次随机的m为320,第m+1条指令不存在。
把此时的第m条指令作为地址流中的一个,此处理不影响全局的概率。
附:
程序代码:
1、内存分配与释放:
#include<
stdio.h>
stdlib.h>
time.h>
#defineMEMORY2048
intavailable[100],avaiNum=0,avaiMemory=MEMORY;
intfragment[100],fragNum=0;
{
if(toBeAllo>
avaiMemory){
return0;
}elseif(toBeAllo>
root->
thisMemory){
return-1;
thisMemory/2){
if((root->
left==NULL)&
&
(root->
tab==0)){
root->
tab=1;
used=toBeAllo;
return1;
}else
return-1;
}elseif(root->
tab==1){
}else{
if(root->
left==NULL){
left=(Mtree)malloc(sizeof(TreeNode));
left->
tab=0;
thisMemory=root->
thisMemory/2;
used=0;
left=NULL;
right=NULL;
father=root;
right=(Mtree)malloc(sizeof(TreeNode));
right->
}
if(AlloMemory(toBeAllo,root->
left)!
=1)
returnAlloMemory(toBeAllo,root->
right);
else
}
}
Mtreetemp;
if(root!
=NULL){
ReleaseMemory(toBeRele,root->
left);
if((root->
tab==0)&
father!
=NULL)){
if((root->
father->
left==NULL)){
temp=root->
father;
temp->
}
}elseif((root->
tab==1)&
used==toBeRele)){
root->
}
inti=num;
while(a[i]!
='
\0'
){
a[i]=a[i+1];
i++;
if(root->
tab==0)
available[avaiNum++]=root->
thisMemory;
fragment[fragNum++]=root->
thisMemory-root->
used;
ScanMemory(root->
S
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 内存 buddy 算法 置换 实验 报告