欢迎来到天天文库
浏览记录
ID:47109027
大小:1.12 MB
页数:21页
时间:2019-08-05
《北邮操作系统第二次实验》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、北京邮电大学操作系统实验实验报告班号:2011211314姓名:oneseven学号:实验日期:2013.12.16实验名称:操作系统实验一、实验目的通过模拟实现内存分配的伙伴算法和请求页式存储管理的几种基本页面置换算法,了解存储技术的特点。掌握虚拟存储请求页式存储管理中几种基本页面置换算法的基本思想和实现过程,并比较它们的效率。二、实验内容1.实现一个内存管理的伙伴算法,实现内存块申请时的分配和释放后的回收。实验准备用随机函数仿真进程进行内存申请,并且以较为随机的次序进行释放。对其碎片进行统计
2、,当申请分配内存失败时区分实际空间不足和由于碎片而不能满足。2.设计一个虚拟存储区和内存工作区,并使用下述算法计算访问命中率。1)最佳置换算法(Optimal)2)先进先出法(FisrtInFirstOut)3)最近最久未使用(LeastRecentlyUsed)4)最不经常使用法(LeastFrequentlyUsed)其中,命中率=1-页面失效次数/页地址流长度。试对上述算法的性能加以较各:页面个数和命中率间的关系;同样情况下的命中率比较。实验准备本实验中主要的流程:首先用srand()和r
3、and()函数定义和产生指令序列,然后将指令序列变换成相应的页地址流,并针对不同的算法计算出相应的命中率。实验可先从一个具体的例子出发。(1)通过随机数产生一个指令序列,共2048条指令。指令的地址按下述原则生成:A:50%的指令是顺序执行的B:25%的指令是均匀分布在前地址部分C:25%的指令是均匀分布在后地址部分具体的实施方法是:A:在[0,1023]的指令地址之间随机选取一起点mB:顺序执行一条指令,即执行地址为m+1的指令C:在前地址[0,m+1]中随机选取一条指令并执行,该指令的地址为
4、m’D:顺序执行一条指令,其地址为m’+1E:在后地址[m’+2,2047]中随机选取一条指令并执行F:重复步骤A-E,直到2048次指令(2)将指令序列变换为页地址流设:页面大小为4K;用户内存容量4页到32页;用户虚存容量为32K。在用户虚存中,按每K存放64条指令排列虚存地址,即2048条指令在虚存中的存放方式为:第0条-第63条指令为第0页(对应虚存地址为[0,63])第64条-第127条指令为第1页(对应虚存地址为[64,127])………………………………-21-第1984条-第204
5、7条指令为第31页(对应虚存地址为[1984,2047])按以上方式,用户指令可组成32页。以此为基础,给出较为一般的情形:仿真内存容量和虚存容量参数变化时的情形。3.实现内存的slab分配器: 其基本思想是:一次向内核获取整数页,slab根据数据结构的大小进行划分为一个个小的数据结构,当需要时直接从该链表上摘取一个返回应用程序,当应用程序释放时,而非真正释放,只需要该空间放回到链表中,当分散的一页多块又聚集一页时,又会拼成一页,同时判断slab空闲的页数,如果空闲页超过一定的页数,就会向系统释
6、放一定的页数。一个slab分配器只能管理一个指定大小的数据结构分配。三、项目要求及分析3.1实现一个内存管理的伙伴算法,实现内存块申请时的分配和释放后的回收。 假设系统的可利用内存空间容量为2m个字(地址从0到2m-1),则在开始运行时,整个内存区是一个大小为2m的空闲块,在运行了一段时间之后,被分隔成若干占用块和空闲块。为了在分配时查找方便起见,我们将所有大小相同的空闲块建于一张子表中。每个子表是一个双重链表,这样的链表可能有m+1个,将这m+1个表头指针用向量结构组织成一个表,这就是伙伴系统
7、中的可利用空间表,如图所示:分配算法: 当用户提出大小为n的内存请求时,首先在可利用表上寻找结点大小与n相匹配的子表,若此子表非空,则将子表中任意一个结点分配之即可;若此子表为空,则需从结点更大的非空子表中去查找,直至找到一个空闲块,则将其中一部分分配给用户,而将剩余部分插入相应的子表中。 若2k-1 8、中取出一块,将其中一半分配给用户,剩余的一半作为一个新结点插入在结点大小为2k-1的子表中,若2k-i-1
8、中取出一块,将其中一半分配给用户,剩余的一半作为一个新结点插入在结点大小为2k-1的子表中,若2k-i-1
此文档下载收益归作者所有