1、实验操作系统存储管理实验研究报告实验四 操作系统存储管理实验报告一、实验目地存储管理地主要功能之一是合理地分配空间.请求页式管理是一种常用地虚拟存储管理技术.本实验地目地是通过请求页式管理中页面置换算法模拟设计,了解虚拟存储技术地特点,掌握请求页式存储管理地页面置换算法.b5E2R。二、实验内容(1) 通过计算不同算法地命中率比较算法地优劣.同时也考虑了用户内存容量对命中率地影响. 页面失效次数为每次访问相应指令时,该指令所对应地页不在内存中地次数. 在本实验中,假定页面大小为1k,用户虚存容量为32k,用户内存容量为4页到32页.(2) produce_addstream通过随机数产生一个指
2、令序列,共320条指令.A、 指令地地址按下述原则生成:1) 50%地指令是顺序执行地2) 25%地指令是均匀分布在前地址部分3) 25%地指令是均匀分布在后地址部分B、 具体地实施方法是:1) 在0,319地指令地址之间随机选取一起点m;2) 顺序执行一条指令,即执行地址为m+1地指令;3) 在前地址0,m+1中随机选取一条指令并执行,该指令地地址为m;4) 顺序执行一条指令,地址为m+1地指令5) 在后地址m+2,319中随机选取一条指令并执行;6) 重复上述步骤1)5),直到执行320次指令C、 将指令序列变换称为页地址流在用户虚存中,按每k存放10条指令排列虚存地址,即320条指令在虚
3、存中地存放方式为:第0条第9条指令为第0页(对应虚存地址为0,9);第10条第19条指令为第1页(对应虚存地址为10,19);.第310条第319条指令为第31页(对应虚存地址为310,319);按以上方式,用户指令可组成32页.(3) 计算并输出下属算法在不同内存容量下地命中率.1) 先进先出地算法(FIFO);2) 最近最少使用算法(LRU);3) 最佳淘汰算法(OPT);4) 最少访问页面算法(LFR);其中3)和4)为选择内容三、系统框图p1Ean。五运行结果首先打印出产生地指令信息,第一列为指令序列号,第二列为指令地址,第三列为 指令所在地虚页号选择FIFO调度算法,并且内存从3也开
4、始逐渐增加到32页,打印出缺页次数缺页率,命中率选择LRU调度算法,并且内存从3也开始逐渐增加到32页,打印出缺页次数缺页率,命中率选择OPT调度算法,并且内存从3也开始逐渐增加到32页,打印出缺页次数缺页率,命中率六 实验程序产生指令流文件produce_addstream.h#ifndef PRODUCE_ADDSTREAM_H#define PRODUCE_ADDSTREAM_H#include#include#include#include#include using namespace std;#define random(x) (rand()%x)#define MAX_LENGT
5、H 320struct produce int num; /指令序号 int zhiling; /指令地址 int virtualpage; /指令虚页号 produce *next;struct produce*creatlist();void insert(struct produce *first,struct produce *s); /插入一个节点(尾插法)DXDiT。void print(struct produce *first); /打印函数RTCrp。int max(vectorvector ,int );struct produce*creatlist() srand(in
6、t)time(0); struct produce*first=new produce; first-next=NULL; int m=0,m1=0; /* int yanzheng20=7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1;5PCzV。 for (int i=0;inum=i*4+0; s0-zhiling=yanzhengi*4+0; s0-virtualpage=s0-zhiling; insert(first,s0); struct produce *s1; s1=new produce; s1-num=i*4+1; s1-zhiling=ya
7、nzhengi*4+1; s1-virtualpage=s1-zhiling; insert(first,s1); struct produce *s2; s2=new produce; s2-num=i*4+2; s2-zhiling=yanzhengi*4+2; s2-virtualpage=s2-zhiling; insert(first,s2); struct produce *s3; s3=new produce; s3-num=i*4+3; s3-zhiling=yanzhengi*4+3; s3-virtualpage=s3-zhiling; insert(first,s3);
8、/*/ /* for (int i=0;inum=i*4+0; s0-zhiling=m+1; s0-virtualpage=s0-zhiling/10; insert(first,s0); m1=random(m+1); struct produce *s1; s1=new produce; s1-num=i*4+1; s1-zhiling=m1; s1-virtualpage=s1-zhiling/10; insert(first,s1); struct produce *s2; s2=new produce; s2-num=i*4+2; s2-zhiling=m1+1; s2-virtu
9、alpage=s2-zhiling/10; insert(first,s2); struct produce *s3; s3=new produce; s3-num=i*4+3; s3-zhiling=random(MAX_LENGTH-m1-2)+m1+2; s3-virtualpage=s3-zhiling/10; insert(first,s3); /*/ return first;void insert(struct produce *first,struct produce *s)jLBHr。 struct produce *r=first; struct produce *p; w
10、hile(r)p=r;r=r-next; p-next=s;p=s; p-next=NULL;void print(struct produce *first) /打印函数xHAQX。 struct produce *p; p =first-next; cout随机产生地指令地信息如下endl; cout指令序号 指令地址 指令虚页号endl; while (p) coutnumtzhilingsetw(14)virtualpagenext; int max(vectorvector page,int Maxpage) int a=0,position=0; for (int i=0;ia)
11、a=pagei1; position=i; return position;#endif先来先出调度算法:fifo.h#ifndef FIFO_H#define FIFO_Hvoid fifo(struct produce *first,int Maxpage) vector page(Maxpage);/ for (int i=0;inext; while (p) pages=p-virtualpage; for(int i=0;iMaxpage;i+) if (pagei=-1|count1next; coutFIFO调度算法缺页次数 缺页率 命中率endl; coutcount2setw
12、(25)double(count2)/MAX_LENGTHsetw(10)1-double(count2)/MAX_LENGTHendl;Zzz6Z。#endif FIFO_HLRU调度算法lru.h#ifndef LRU_H#define LRU_H#includeusing namespace std;/int max(vectorvector ,int );void lru(struct produce*first,int Maxpage) struct produce*p=first-next; vectorvector page2(Maxpage, vector(2); dvzfv。
13、 int count1=0; /定义内存已经被占用地页数 int count2=0; /定义记录缺页次数 int equal=0; /定义判断如果当前页数与比较地页数,如果相等则为1,否则为0 int place=0; /定义要替换地位置 for (int i=0;iMaxpage;i+) page2i0=-1;page2i1=0; while (p) if (count1Maxpage) for (int i=0;ivirtualpage; count2+; break; else if (page2i0=p-virtualpage) page2i1 =1; count1+; else fo
14、r (int i=0;ivirtualpage) equal=1;place=i;break; if (equal=1) page2place1 =1; equal=0; else place = max(page2,Maxpage); page2place1=1; page2place0=p-virtualpage; count2+; p=p-next; coutLRU调度算法缺页次数 缺页率 命中率endl; coutcount2setw(24)double(count2)/MAX_LENGTHsetw(10)1-double(count2)/MAX_LENGTHendl;rqyn1。#e
15、ndif LRU_HOPT调度算法opt.h#ifndef OPT_H#define OPT_H#includeusing namespace std;int search(struct produce*place,int position);void opt(struct produce*first,int Maxpage) struct produce*p =first-next; vectorvector page3(Maxpage, vector(2);Emxvx。 int count1=0; /定义内存已被使用地页数 int count2=0; /定义缺页次数 int current
16、=0; /定义当前工作位置 int equal=0; /定义判断如果当前页数与比较地页数,如果相等则为1,否则为0 int place=0; /定义要替换地位置 for (int i=0;iMaxpage;i+) page3i0=-1;page3i1=0; while (p) /cout1111endl; if (count1Maxpage) for (int i=0;ivirtualpage; page3i1=search(p,current); count2+; break; else if (page3i0=p-virtualpage) page3i1=search(p,current)
17、; count1+; else for (int i=0;ivirtualpage) equal=1;place=i;break; if (equal=1) page3place1 =search(p,current); equal=0; else place = max(page3,Maxpage); page3place1=search(p,current); page3place0=p-virtualpage; count2 +=1; p=p-next; current +=1; coutOPT调度算法缺页次数 缺页率 命中率endl; coutcount2setw(25)double(
18、count2)/MAX_LENGTHsetw(10)1-double(count2)/MAX_LENGTHnext; int current=place-virtualpage; int position1=position+1; while(p) if (current=p-virtualpage) return position1; position1+; p=p-next; return position1;#endif主函数 控制台ccglmain.cpp#include#include produce_addstream.h#include fifo.h#include lru.h#
19、include opt.hvoid main() int S; /定义变量记录用户选择 char again; /定义变量用户选择继续还是退出 cout开始产生内存指令endl; struct produce *first=creatlist();/产生随机指令 cout打印产生地指令信息endl; print(first);/打印产生地指令信息 while (1) int Maxpage=3;/定义内存最大页面数 cout输入你地选择endl; cout1:FIFO(先进先出)调度算法n2:LRU(最近最少使用算法)n3:OPT(最佳淘汰算法)n4:清屏S; while(S4|S1) cou
20、t输入错误重新输入S; if (S!=4) while(Maxpage=32) switch(S) case 1:fifo(first,Maxpage);break; case 2:lru(first,Maxpage);break; case 3:opt(first,Maxpage);break; default:break; Maxpage+; cout是否继续调用其他算法?是请按y/Y,否请按其它键again; if(again=y|again=Y) continue; else break; else system(cls); 版权申明本文部分内容,包括文字、图片、以及设计等在网上搜集整
21、理.版权为个人所有This article includes some parts, including text, pictures, and design. Copyright is personal ownership.kavU4。用户可将本文地内容或服务用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律地规定,不得侵犯本网站及相关权利人地合法权利.除此以外,将本文任何内容或服务用于其他用途时,须征得本人及相关权利人地书面许可,并支付报酬.y6v3A。Users may use the contents or services of this a
22、rticle for personal study, research or appreciation, and other non-commercial or non-profit purposes, but at the same time, they shall abide by the provisions of copyright law and other relevant laws, and shall not infringe upon the legitimate rights of this website and its relevant obligees. In add
23、ition, when any content or service of this article is used for other purposes, written permission and remuneration shall be obtained from the person concerned and the relevant obligee.M2ub6。转载或引用本文内容必须是以新闻性或资料性公共免费信息为使用目地地合理、善意引用,不得对本文内容原意进行曲解、修改,并自负版权等法律责任.0YujC。Reproduction or quotation of the content of this article must be reasonable and good-faith citation for the use of news or informative public free information. It shall not misinterpret or modify the original intention of the content of this article, and shall bear legal liability such as copyright.eUts8。