目录
目标
通过请求页式管理中页面置换算法模拟设计,计算并输出下属算法在不同内存容量下的命中率,比较算法优劣。
1)先进先出的算法(FIFO);
2)最近最少使用算法(LRU);
具体设计:
要求
a、 终端先显示:
Start memory management.
Producing address flow, wait for while, please.
b、 地址流、地址页号流生成后,终端显示:
There are algorithms in the program
1、 Optimization algorithm
2、 Least recently used algorithm
Select an algorithm number, please.
用户输入适当淘汰算法的号码,并按回车,若是第一次选择,输出相应的
地址页号流。然后输出该算法分别计算的用户内存从 2k~32k 时的命中率,
若输入的号码不再 1~2 中,则显示:
there is not the algorithm in the program,并重复 b。
c、 输出结果后,终端显示 “do you try again with anther algorithm(y/n)”。若键
入 y 则重复 b,否则结束
分析
使指令的地址按下述原则生成:
1) 50%的指令是顺序执行的
2)25%的指令是均匀分布在前地址部分
3)25%的指令是均匀分布在后地址部分
解决方案:
1) 在[0,319]的指令地址之间随机选取一起点 m;
2) 顺序执行一条指令,即执行地址为 m+1 的指令;
3) 在前地址[0,m]中随机选取一条指令并执行,该指令的地址为 m’;
4)顺序执行一条指令,地址为 m’+1 的指令
5) 在后地址[m’+2,319]中随机选取一条指令并执行;
6) 重复上述步骤 1)~5),直到执行 320 次指令
public void commandSequence() {
Random rand=new Random();
int i=0;
while(i<320) {
int m=rand.nextInt(320);
num[i++]=m+1;
int m1=rand.nextInt(m+1);
num[i++]=m1;
num[i++]=m1+1;
if(m1<317) {
int m2=rand.nextInt(317-m1)+m1+2;
num[i++]=m2;}
}
FIFO
。。。。。。。
LRU
。。。。。
代码实现
。。。。。
运行结果
算法命中率比较
当用户的内存容量(物理块大小)增加时,命中率也随之增加,到内存容量32的时候,基本在90%的命中率。
比较下来内存容量在20左右以下的时候,FIFO命中率大多更高些,以上的话,LRU更高些;