实验四 模拟一个指令序列,共有320条指令解析
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
20111060255 曹加站计科
实验四
一、模拟一个指令序列,共有320条指令(模拟320个页号)
50%的指令是顺序执行的
25%的指令存放在当前指令之前的地址
25%的指令存放在当前指令之后的地址
实验结果分析:
此实验模拟一个指令序列,共有320条指令:50%的指令是顺序执的,25%的指令是均匀分布在前地址部分,25%的指令是均匀分布在后地址部分。
二、模拟页面结构
模拟页面
页面大小为1K
物理内存容量为4页~32页
虚拟内存容量为32K
每页内存存放了10条指令
实现几种页面置换算法
输出各页面置换算法在一定的物理内存容量下的命中率
命中率=1-页面失效次数/320
当CPU接收到缺页中断信号,中断处理程序先保存现场,分析中断原因,转入缺页中断处理程序。
该程序通过查找页表,得到该页所在外存的物理块号。
如果此时内存未满,能容纳新页,则启动磁盘I/O将所缺之页调入内存,然后修改页表。
如果内存已满,则须按某种置换算法从内存中选出一页准备换出,是否重新写盘由页表的修改位决定,然后将缺页调入,修改页表。
利用修改后的页表,去形成所要访问数据的物理地址,再去访问内存数据。
整个页面的调入过程对用户是透明的。
常用的页面置换算法有
1、最佳置换算法(Optimal)
2、先进先出法(Fisrt In First Out)
3、最近最久未使用(Least Recently Used)
4、最不经常使用法(Least Frequently Used)
5、最近未使用法(No Used Recently)
由于OPT算法不能实现,实验中也只能模拟,故在程序中没有展示。
注释3:
for (i=0;i<total_instruction;i++) /*将指令序列变换成页地址流*/
for(i=4;i<=32;i++) /*用户内存工作区从4个页面到32个页面*/
int initialize(total_pf) /*初始化相关数据结构*/
int total_pf; /*用户进程的内存页面数*/
pl[i].pfn=INVALID; /*置页面控制结构中的页号,页面为空*/
pl[i].counter=0;
pl[i].time=-1; /*页面控制结构中的访问次
数为0,时间为-1*/
实验结果:
先进先出的算法(FIFO):
其总是选择在内存驻留时间最长的一页将其淘汰。
FIFO算法认为先调入内存的页不再被访问的可能性要比其他页的大,因而选择最先调入内存的页换出。
实现FIFO算法需要把各个已分配页面按分配时间顺序链接起来,组成FIFO队列,并设置一置换指针指向FIFO 队列的队首页面。
这样,当要进行置换时,只需把置换指针所指的FIFO队列前头的页顺次换出,而把换入的页链接在FIFO断尾即可。
最近最少使用算法(LRU)
LRU是Least Recently Used 近期最少使用算法。
内存管理的一种页面置换算法,对于在内存中但又不用的数据块(内存块)叫做LRU,Oracle会根据哪些数据属于LRU而将其移出内存而腾出空间来加载另外的数据。
实验分析
从结果看以上几种算法,NUR命中率最高,其次是LFU算法和LRU算法,最后是FIFO 算法。
实际上,从实验数据观测得到,存在这种由高到低的趋势,但是效果不是很明显。
效果不明显的原因:推测与指令流的产生方式有关系。
因为指令流的产生方式要能体现局部性原理,所以该指令流产生设计为:50%的指令是顺序执的,25%的指令是均匀分布在前地址部分,25%的指令是均匀分布在后地址部分。
但是这样的指令流设计方式能否最佳地体现局部性原理,这还有待验证。
同时,估计和指令数量有关系。
因为320条指令太少了,通常一个稍大点的程序都几千行指令了。
而且由于随即数产生具有一定的波动性,该命中率的计算也有一定的波动性。
所以
会有局部的实验数据与理论不符。
改进方法是多次实验取平均值,这样可以减小波动,让实验数据更加平滑。
到后期,由于page越来越大,因此越来越容易命中,因此各替换算法的命中率差距变小了。
这由最后几行命中率相似可以看出。
特别是最后,已经完全相等。