欢迎来到天天文库
浏览记录
ID:47429923
大小:1.10 MB
页数:15页
时间:2020-01-11
《《操作系统》实验二》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、实验二存储管理1、实验目的通过模拟实现内存分配的伙伴算法和请求页式存储管理的几种基本页面置换算法,了解存储技术的特点。掌握虚拟存储请求页式存储管理中几种基本页面置换算法的基本思想和实现过程,并比较它们的效率。2、实验内容◆实现一个内存管理的伙伴算法,实现内存块申请时的分配和释放后的回收。◆设计一个虚拟存储区和内存工作区,并使用下述算法计算访问命中率。1)最佳置换算法(Optimal)2)先进先出法(FisrtInFirstOut)3)最近最久未使用(LeastRecentlyUsed)4)最不经常使用法(Le
2、astFrequentlyUsed)5)最近未使用法(NoUsedRecently)其中,命中率=1-页面失效次数/页地址流长度。试对上述算法的性能加以较各:页面个数和命中率间的关系;同样情况下的命中率比较。3、实验分析◆对于伙伴算法,用随机函数仿真进程进行内存申请,并且以较为随机的次序进行释放。对其碎片进行统计,当申请分配内存失败时区分实际空间不足和由于碎片而不能满足。◆对于虚拟存储区和内存工作区的不同算法,其中主要的流程:首先用srand()和rand()函数定义和产生指令序列,然后将指令序列变换成相应的
3、页地址流,并针对不同的算法计算出相应的命中率。实验可先从一个具体的例子出发。1)通过随机数产生一个指令序列,共320条指令。指令的地址按下述原则生成:A:50%的指令是顺序执行的B:25%的指令是均匀分布在前地址部分C:25%的指令是均匀分布在后地址部分具体的实施方法是:A:在[0,319]的指令地址之间随机选取一起点mB:顺序执行一条指令,即执行地址为m+1的指令C:在前地址[0,m+1]中随机选取一条指令并执行,该指令的地址为m’D:顺序执行一条指令,其地址为m’+1E:在后地址[m’+2,319]中随机
4、选取一条指令并执行F:重复步骤A-E,直到320次指令2)将指令序列变换为页地址流设:页面大小为1K;用户内存容量4页到32页;用户虚存容量为32K。在用户虚存中,按每K存放10条指令排列虚存地址,即320条指令在虚存中的存放方式为:第0条-第9条指令为第0页(对应虚存地址为[0,9])第10条-第19条指令为第1页(对应虚存地址为[10,19])………………………………第310条-第319条指令为第31页(对应虚存地址为[310,319])按以上方式,用户指令可组成32页。4、实验代码1、内存分配与释放:#
5、include #include #include #define MEMORY 2048int available[100], avaiNum = 0, avaiMemory = MEMORY;int fragment[100], fragNum = 0;typedef struct MemoryTree{struct MemoryTree *left;struct MemoryTree *right;struct MemoryTree *father;
6、int tab;int thisMemory;int used;}TreeNode, *Mtree;int AlloMemory(int toBeAllo, Mtree root){if(toBeAllo > avaiMemory){return 0;}else if(toBeAllo > root->thisMemory){return -1;}else if(toBeAllo > root->thisMemory/2){if((root->left == NULL) && (root->tab == 0)
7、){root->tab = 1;root->used = toBeAllo;return 1;}elsereturn -1;}else if(root->tab == 1){return -1;}else{if(root->left == NULL){root->left = (Mtree)malloc(sizeof(TreeNode));root->left->tab = 0;root->left->thisMemory = root->thisMemory/2;root->left->used = 0;r
8、oot->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->us
此文档下载收益归作者所有