ImageVerifierCode 换一换
格式:DOC , 页数:14 ,大小:616.50KB ,
资源ID:154420      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/154420.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(操作系统内存buddy算法和页置换算法实验报告.doc)为本站会员(b****9)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

操作系统内存buddy算法和页置换算法实验报告.doc

1、操作系统内存buddy算法和页置换算法实验报告一、 实验目的通过模拟实现内存分配的伙伴算法和请求页式存储管理的几种基本页面置换算法,了解存储技术的特点。掌握虚拟存储请求页式存储管理中几种基本页面置换算法的基本思想和实现过程,并比较它们的效率。二、 实验内容1. 实现一个内存管理的伙伴算法,实现内存块申请时的分配和释放后的回收。2. 设计一个虚拟存储区和内存工作区,并使用下述算法计算访问命中率。1) 最佳置换算法(Optimal)2) 先进先出法(Fisrt In First Out)3) 最近最久未使用(Least Recently Used)4) 最不经常使用法(Least Frequent

2、ly Used)其中,命中率页面失效次数页地址流长度试对上述算法的性能加以较各:页面个数和命中率间的关系;同样情况下的命中率比较。三、 项目要求及分析1、 要求:用随机函数仿真程序进行内存申请,并且以较为随机的次序进行释放。对其碎片进行统计,当申请分配内存失败时区分实际空间不足和由于碎片而不能满足。分析:总的内存大小固定(默认为2048),申请内存的时候用到随机函数,为了使分配效果更加突出,每次申请内存大小为1600。每次申请完并成功分配后,得到剩余内存大小availMemory和碎片大小fragment,来得到分配失败的原因。分配成功的内存集记录为haveAllo,在haveAllo中随机抽

3、取内存进行释放。2、 要求:首先用srand( )和rand( )函数定义和产生指令序列,然后将指令序列变换成相应的页地址流,并针对不同的算法计算出相应的命中率。分析:可以直接忽略指令的内容,按照地址来进行分析,这样是执行更加方便。各个算法总体相同,主要区别就是置换的条件不同,掌握好条件是本实验的关键。四、 具体实现4.1 流程图:1、 分配内存:释放内存:2、(1)最佳置换算法(Optimal) (2)先进先出法(Fisrt In First Out) (3)最近最久未使用(Least Recently Used) 4) 最不经常使用法(Least Frequently Used) 4.2数

4、据结构定义:1、typedef struct MemoryTreestruct MemoryTree *left;struct MemoryTree *right;struct MemoryTree *father;int tab;int thisMemory;int used;TreeNode, *Mtree;内存节点定义:tab为可用标记,1为可用,0为已用thisMemory表示此节点共有内存量used表示已用内存量int AlloMemory(int toBeAllo, Mtree root)分配内存void ReleaseMemory(int toBeRele, Mtree root

5、)释放内存void Delete(int a, int num)从数组a中删除元素num,该函数用于内存释放。void ScanMemory(Mtree root)浏览分配树,以得到可用内存和碎片2、void init_addr(void)初始化指令序列,并按照一定规则执行void init_page(void)初始化页表int isIn(int a)判断地址为a的指令是否在页中int find_max(int num, int data)找出data序列中第一个最大值的序号int find_min(int num, int data)找出data序列中第一个最小值的序号float optim

6、al(void)optimal算法,返回命中率float FIFO(void)FIFO算法,返回命中率float LRU(void)LRU算法,返回命中率float LFU(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)页表

7、大小为25 (7)页表大小为32六、 所遇问题及解决办法1、 P:在数组传递参数时出错A:发现很多需要传递的数组时贯穿全局的,所以设置为全局变量,不再进行参数的传递2、 P:在合并可用伙伴内存的时候不知道如何去进行未知次数的合并A:调用递归,进行树的后续遍历,先合并再判断,使问题迎刃而解。3、 P:在分配指令序列的时候,没有考虑到极端情况:如有320条指令,第一次随机的m为320,第m+1条指令不存在。A:把此时的第m条指令作为地址流中的一个,此处理不影响全局的概率。附:程序代码:1、内存分配与释放:#include #include #include #define MEMORY 2048i

8、nt available100, avaiNum = 0, avaiMemory = MEMORY;int fragment100, fragNum = 0;typedef struct MemoryTreestruct MemoryTree *left;struct MemoryTree *right;struct MemoryTree *father;int tab;int thisMemory;int used;TreeNode, *Mtree;int AlloMemory(int toBeAllo, Mtree root)if(toBeAllo avaiMemory)return 0;

9、else if(toBeAllo root-thisMemory)return -1;else if(toBeAllo root-thisMemory/2)if(root-left = NULL) & (root-tab = 0)root-tab = 1;root-used = toBeAllo;return 1;elsereturn -1;else if(root-tab = 1)return -1;elseif(root-left = NULL)root-left = (Mtree)malloc(sizeof(TreeNode);root-left-tab = 0;root-left-th

10、isMemory = root-thisMemory/2;root-left-used = 0;root-left-left = NULL;root-left-right = NULL;root-left-father = root;root-right = (Mtree)malloc(sizeof(TreeNode);root-right-tab = 0;root-right-thisMemory = root-thisMemory/2;root-right-used = 0;root-right-left = NULL;root-right-right = NULL;root-right-

11、father = root;if(AlloMemory(toBeAllo, root-left) != 1)return AlloMemory(toBeAllo, root-right);elsereturn 1;void ReleaseMemory(int toBeRele, Mtree root)Mtree temp;if(root != NULL)ReleaseMemory(toBeRele, root-left);ReleaseMemory(toBeRele, root-right);if(root-left = NULL)if(root-tab = 0) & (root-father

12、 != NULL)if(root-father-left-tab = 0) & (root-father-right-tab = 0) & (root-father-left-left = NULL) & (root-father-right-left = NULL)temp = root-father;temp-left = NULL;temp-right = NULL;else if(root-tab = 1) & (root-used = toBeRele)root-used = 0;root-tab = 0;if(root-father-left-tab = 0) & (root-fa

13、ther-right-tab = 0) & (root-father-left-left = NULL) & (root-father-right-left = NULL)temp = root-father;temp-left = NULL;temp-right = NULL;void Delete(int a, int num)int i = num;while(ai != 0)ai = ai+1;i+;void ScanMemory(Mtree root)if(root-left = NULL)if(root-tab = 0)availableavaiNum+ = root-thisMemory;elsefragmentfragNum+ = root-thisMemory - root-used;elseScanMemory(root-left);S

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

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