收藏 分享(赏)

实验六 存储管理.doc

上传人:hwpkd79526 文档编号:7189511 上传时间:2019-05-09 格式:DOC 页数:9 大小:51KB
下载 相关 举报
实验六  存储管理.doc_第1页
第1页 / 共9页
实验六  存储管理.doc_第2页
第2页 / 共9页
实验六  存储管理.doc_第3页
第3页 / 共9页
实验六  存储管理.doc_第4页
第4页 / 共9页
实验六  存储管理.doc_第5页
第5页 / 共9页
点击查看更多>>
资源描述

1、实验六 存储管理实验(常用页面置换算法模拟实验)一、实验目的通过模拟实现请求页式存储管理的几种基本页面置换算法,了解虚拟存储技术的特点,掌握虚拟存储请求页式存储管理中几种基本页面置换算法的基本思想和实现过程,并比较它们的效率。二、实验内容设计一个虚拟存储区和内存工作区,并使用下述算法计算访问命中率。1、最佳淘汰算法(OPT)2、先进先出的算法(FIFO)3、最近最久未使用算法(LRU)4、最不经常使用算法(LFU)5、最近未使用算法(NUR)命中率页面失效次数页地址流长度三、实验准备本实验的程序设计基本上按照实验内容进行。即首先用 srand( )和 rand( )函数定义和产生指令序列,然后

2、将指令序列变换成相应的页地址流,并针对不同的算法计算出相应的命中率。(1)通过随机数产生一个指令序列,共 320 条指令。指令的地址按下述原则生成:A:50% 的指令是顺序执行的B:25%的指令是均匀分布在前地址部分C:25%的指令是均匀分布在后地址部分具体的实施方法是:A:在0 ,319的指令地址之间随机选取一起点 mB:顺序执行一条指令,即执行地址为 m+1 的指令C:在前地址0,m+1中随机选取一条指令并执行,该指令的地址为 mD:顺序执行一条指令,其地址为 m+1E:在后地址m+2,319中随机选取一条指令并执行F:重复步骤 A-E,直到 320 次指令(2)将指令序列变换为页地址流设

3、:页面大小为 1K;用户内存容量 4 块到 32 块;用户虚存容量为 32K。在用户虚存中,按每 K 存放 10 条指令排列虚存地址,即 320 条指令在虚存中的存放方式为:第 0 条-第 9 条指令为第 0 页(对应虚存地址为0,9)第 10 条-第 19 条指令为第 1 页(对应虚存地址为10,19)第 310 条-第 319 条指令为第 31 页(对应虚存地址为310,319)按以上方式,用户指令可组成 32 页。四、实验指导(一)虚拟存储系统UNIX 中,为了提高内存利用率,提供了内外存进程对换机制;内存空间的分配和回收均以页为单位进行;一个进程只需将其一部分(段或页)调入内存便可运行

4、;还支持请求调页的存储管理方式。当进程在运行中需要访问某部分程序和数据时,发现其所在页面不在内存,就立即提出请求(向 CPU 发出缺中断) ,由系统将其所需页面调入内存。这种页面调入方式叫请求调页。为实现请求调页,核心配置了四种数据结构:页表、页框号、访问位、修改位、有效位、保护位等。(二)页面置换算法当 CPU 接收到缺页中断信号,中断处理程序先保存现场,分析中断原因,转入缺页中断处理程序。该程序通过查找页表,得到该页所在外存的物理块号。如果此时内存未满,能容纳新页,则启动磁盘 I/O 将所缺之页调入内存,然后修改页表。如果内存已满,则须按某种置换算法从内存中选出一页准备换出,是否重新写盘由

5、页表的修改位决定,然后将缺页调入,修改页表。利用修改后的页表,去形成所要访问数据的物理地址,再去访问内存数据。整个页面的调入过程对用户是透明的。常用的页面置换算法有1.最佳置换算(OPT,Optimal Replacement Algorithm)2.先进先出(FIFO,Fisrt In First Out)3.最近最久未使用(LRU,Least Recently Used)4.最不经常使用(LFU,Least Frequently Used)5.最近未使用(简单时钟 Clock)(NUR,No Used Recently)(三)参考程序:#define TRUE 1#define FALSE

6、 0#define INVALID -1#define NULL 0#define total_instruction 320 /*指令流长*/#define total_vp 32 /*虚页长*/#define clear_period 50 /*清 0 周期*/typedef struct /*页面结构*/int pn,pfn,counter,time;pl_type;pl_type pltotal_vp; /*页面结构数组*/struct pfc_struct /*页面控制结构*/int pn,pfn;struct pfc_struct *next;typedef struct pfc_

7、struct pfc_type;pfc_type pfctotal_vp,*freepf_head,*busypf_head,*busypf_tail;int diseffect, atotal_instruction;int pagetotal_instruction, offsettotal_instruction;int initialize(int);int FIFO(int);int LRU(int);int LFU(int);int NUR(int);int OPT(int);int main( )int s,i,j;srand(10*getpid(); /*由于每次运行时进程号不

8、同,故可用 getpid()函数值来作为初始化随机数队列的“种子” */s=(float)319*rand( )/32767/32767/2+1; /for(i=0;i319)printf(“When i=%d,Error,s=%dn“,i,s);exit(0);ai=s; /*任选一指令访问点 m*/ai+1=ai+1; /*顺序执行一条指令*/ai+2=(float)ai*rand( )/32767/32767/2; /*执行前地址指令 m */ai+3=ai+2+1; /*顺序执行一条指令*/s=(float)(318-ai+2)*rand( )/32767/32767/2+ai+2+2

9、;if(ai+2318)|(s319)printf(“a%d+2,a number which is :%d and s=%dn“,i,ai+2,s);for (i=0;inext;plbusypf_head-pn.pfn=INVALID;freepf_head=busypf_head; /*释放忙页面队列的第一个页面*/freepf_head-next=NULL;busypf_head=p;p=freepf_head-next; /*按 FIFO 方式调新页面入内存页面*/freepf_head-next=NULL;freepf_head-pn=pagei;plpagei.pfn=freep

10、f_head-pfn;if(busypf_tail=NULL)busypf_head=busypf_tail=freepf_head;elsebusypf_tail-next=freepf_head; /*free 页面减少一个*/busypf_tail=freepf_head;freepf_head=p;printf(“FIFO:%6.4fn“,1-(float)diseffect/320);return 0;int LRU (total_pf) /*最近最久未使用算法*/int total_pf;int min,minj,i,j,present_time;initialize(total_

11、pf);present_time=0;for(i=0;iplj.timeminj=j;freepf_head= /腾出一个单元plminj.pfn=INVALID;plminj.time=-1;freepf_head-next=NULL;plpagei.pfn=freepf_head-pfn; /有空闲页面,改为有效plpagei.time=present_time;freepf_head=freepf_head-next; /减少一个 free 页面elseplpagei.time=present_time; /命中则增加该单元的访问次数present_time+;printf(“LRU:%

12、6.4fn“,1-(float)diseffect/320);return 0;int NUR(total_pf) /*最近未使用算法*/int total_pf; int i,j,dp,cont_flag,old_dp;pfc_type *t;initialize(total_pf);dp=0;for(i=0;inext=NULL;plpagei.pfn=freepf_head-pfn;freepf_head=freepf_head-next;elseplpagei.counter=1;if(i%clear_period=0)for(j=0;jnext=NULL;plmaxpage.pfn=

13、INVALID;plpagei.pfn=freepf_head-pfn;freepf_head=freepf_head-next;printf(“OPT:%6.4fn“,1-(float)diseffect/320);return 0;int LFU(total_pf) /*最不经常使用置换法*/int total_pf;int i,j,min,minpage;pfc_type *t;initialize(total_pf);for(i=0;iplj.counterminpage=j;plj.counter=0;freepf_head=plminpage.pfn=INVALID;freepf_

14、head-next=NULL;plpagei.pfn=freepf_head-pfn; /有空闲页面,改为有效plpagei.counter+;freepf_head=freepf_head-next; /减少一个 free 页面elseplpagei.counter+;printf(“LFU:%6.4fn“,1-(float)diseffect/320);return 0;四、运行结果4 page framsFIFO: 0.7312LRU: 0.7094LFU: 0.5531NUR: 0.7688OPT: 0.97505 page frams五、分析1、从几种算法的命中率看,OPT 最高,其次为 NUR 相对较高,而 FIFO与 LRU 相差无几,最低的是 LFU。但每个页面执行结果会有所不同。2、OPT 算法在执行过程中可能会发生错误五、思考1、为什么 OPT 在执行时会有错误产生?

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报