《2022年实验四操作系统存储管理实验报告 .pdf》由会员分享,可在线阅读,更多相关《2022年实验四操作系统存储管理实验报告 .pdf(16页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、实验四操作系统存储管理实验报告一、实验目的存储管理的主要功能之一是合理地分配空间。请求页式管理是一种常用的虚拟存储管理技术。本实验的目的是通过请求页式管理中页面置换算法模拟设计,了解虚拟存储技术的特点,掌握请求页式存储管理的页面置换算法。二、实验内容(1)通过计算不同算法的命中率比较算法的优劣。同时也考虑了用户内存容量对命中率的影响。页面失效次数为每次访问相应指令时,该指令所对应的页不在内存中的次数。在本实验中,假定页面大小为1k,用户虚存容量为32k,用户内存容量为4页到 32 页。(2)produce_addstream通过随机数产生一个指令序列,共320 条指令。A、指令的地址按下述原则
2、生成: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 次指令页地址流长度页面失效次数命中率1精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 1 页,共 16
3、 页C、将指令序列变换称为页地址流在用户虚存中,按每k 存放 10 条指令排列虚存地址,即320 条指令在虚存中的存放方式为:第 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)
4、为选择内容精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 2 页,共 16 页三、系统框图五运行结果首先打印出产生的指令信息,第一列为指令序列号,第二列为指令地址,第三列为指令所在的虚页号开始生成地址流输入算法号S 1S4 形成地址页号用户内存空间msize=2 Msize32 OPT() FIFO() LRU() LFU() Msize 加 1 S=? 是否用其他算法继续结 束N Y 1 2 3 4 Y N 提示出错,重新输入精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 3 页,共 16 页选择 F
5、IFO 调度算法,并且内存从3 也开始逐渐增加到32 页,打印出缺页次数缺页率,命中率精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 4 页,共 16 页选择 LRU 调度算法, 并且内存从3 也开始逐渐增加到32 页,打印出缺页次数缺页率,命中率精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 5 页,共 16 页选择 OPT 调度算法, 并且内存从3 也开始逐渐增加到32 页,打印出缺页次数缺页率,命中率精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 6
6、页,共 16 页六 实验程序产生指令流文件produce_addstream.h #ifndef PRODUCE_ADDSTREAM_H #define PRODUCE_ADDSTREAM_H #include #include #include #include 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 7 页,共 16 页#include using namespace std; #define random(x) (rand()%x) #define MAX_LENGTH 320 struct produce int num; /指令序
7、号int zhiling; /指令地址int virtualpage; /指令虚页号produce *next; ; struct produce*creatlist(); void insert(struct produce *first,struct produce *s); /插入一个节点(尾插法)void print(struct produce *first); /打印函数int max(vectorvector ,int ); struct produce*creatlist() srand(int)time(0); struct produce*first=new produce
8、; 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; 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=yanzhengi*4+1; s1-virtualpage=s1-zhiling; insert(fi
9、rst,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; 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 8 页,共 16 页s3=new produce; s3-num=i*4+3; s3-zhiling=yanzhengi*4+3; s3-virtualpage=s3-zhiling; insert(fir
10、st,s3); /*/ /* 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;
11、s2-virtualpage=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) struct produce *r=first; struct produce *p
12、; while(r)p=r;r=r-next; 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 9 页,共 16 页p-next=s;p=s; p-next=NULL; void print(struct produce *first) /打印函数 struct produce *p; p =first-next; cout随机产生的指令的信息如下endl; cout指令序号 指令地址 指令虚页号 endl; while (p) coutnumtzhilingsetw(14)virtualpagenext; int max(vectorvector
13、 page,int Maxpage) int a=0,position=0; for (int i=0;ia) a=pagei1; position=i; return position; #endif 先来先出调度算法: fifo.h #ifndef FIFO_H #define FIFO_H void fifo(struct produce *first,int Maxpage) vector page(Maxpage);/ for (int i=0;inext; while (p) 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 10 页,共
14、 16 页pages=p-virtualpage; for(int i=0;iMaxpage;i+) if (pagei=-1|count1next; coutFIFO 调度算法缺页次数缺页率命中率 endl; coutcount2setw(25)double(count2)/MAX_LENGTHsetw(10)1-double(count2)/MAX_LENGTHendl; #endif FIFO_H LRU 调度算法 lru.h#ifndef LRU_H #define LRU_H #include using namespace std; /int max(vectorvector ,i
15、nt ); void lru(struct produce*first,int Maxpage) struct produce*p=first-next; vectorvector page2(Maxpage, vector(2); int count1=0; /定义内存已经被占用的页数精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 11 页,共 16 页int count2=0; /定义记录缺页次数int equal=0; /定义判断如果当前页数与比较的页数,如果相等则为 1,否则为 0 int place=0; /定义要替换的位置for (in
16、t 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 for (int i=0;ivirtualpage) equal=1;place=i;break; if (equal=1) page2place1 =1; equal=0; else place = max(page2,Maxpage); 精选学习资料 -
17、 - - - - - - - - 名师归纳总结 - - - - - - -第 12 页,共 16 页page2place1=1; page2place0=p-virtualpage; count2+; p=p-next; coutLRU 调度算法缺页次数缺页率命中率 endl; coutcount2setw(24)double(count2)/MAX_LENGTHsetw(10)1-double(count2)/MAX_LENGTHendl; #endif LRU_H OPT 调度算法 opt.h #ifndef OPT_H #define OPT_H #include using names
18、pace 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); int count1=0; /定义内存已被使用的页数int count2=0; /定义缺页次数int current=0; /定义当前工作位置int equal=0; /定义判断如果当前页数与比较的页数,如果相等则为 1,否则为 0 int place=0; /
19、定义要替换的位置for (int i=0;iMaxpage;i+) page3i0=-1;page3i1=0; while (p) /cout1111endl; if (count1Maxpage) for (int i=0;ivirtualpage; page3i1=search(p,current); 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 13 页,共 16 页count2+; break; else if (page3i0=p-virtualpage) page3i1=search(p,current); count1+; else
20、 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(count2)/MAX_LEN
21、GTHsetw(10)1-double(count2)/MAX_LENGTHnext; int current=place-virtualpage; int position1=position+1; while(p) 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 14 页,共 16 页if (current=p-virtualpage) return position1; position1+; p=p-next; return position1; #endif 主函数 控制台 ccglmain.cpp #include #include p
22、roduce_addstream.h #include fifo.h #include lru.h #include opt.h void main() int S; /定义变量记录用户选择char again; /定义变量用户选择继续还是退出cout开始产生内存指令 endl; struct produce *first=creatlist();/产生随机指令cout打印产生的指令信息 endl; print(first);/ 打印产生的指令信息while (1) int Maxpage=3;/定义内存最大页面数cout输入你的选择 endl; cout1:FIFO( 先 进 先 出 ) 调
23、 度 算 法 n2:LRU( 最 近 最 少 使 用 算法)n3:OPT(最佳淘汰算法 )n4: 清屏S; while(S4|S1) cout输入错误重新输入 S; if (S!=4) while(Maxpage=32) switch(S) case 1:fifo(first,Maxpage);break; 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 15 页,共 16 页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); 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 16 页,共 16 页