模拟 LRU算法的简单JavaScript实现
主要代码如下
function LRU() {
this.dataStore = [];
this.enqueue = enqueue;
}
function process(id,unuse_time){
this.id = id;
this.unuse_time = unuse_time;
}
function enqueue(element) {
this.dataStore.push(element);
}
var queye_num = 0;
var q = new LRU();
var a = new Array();
console.log("访问队列为:");
for(var i = 0;i<=19;i++){
a[i]=Math.ceil(Math.random()*20);
console.log(a[i]);
}
for(var j = 0;j<=4;j++){
q.enqueue(new process(Math.ceil(Math.random()*20),0));
}
q.dataStore[0].unuse_time = 4;
q.dataStore[1].unuse_time = 3;
q.dataStore[2].unuse_time = 2;
q.dataStore[3].unuse_time = 1;
q.dataStore[4].unuse_time = 0;
console.log("初始值为"+q.dataStore[0].id+" "+q.dataStore[1].id+" "+q.dataStore[2].id+" "+q.dataStore[3].id+" "+q.dataStore[4].id);
for(var k = 0;k<=19;k++){
var compare_num = 0;
for(var l =0;l<=4;l++){
if(a[k]!=q.dataStore[l].id){
compare_num++;
q.dataStore[l].unuse_time++;
if(compare_num==5){
queye_num++;
var max = q.dataStore[0].unuse_time;
var max_loc = 0;
for(var t = 1;t<=4;t++){
if(max<q.dataStore[t].unuse_time){
max = q.dataStore[t].unuse_time;
max_loc = t;
}
}
q.dataStore[max_loc].id = a[k];
q.dataStore[max_loc].unuse_time = 0;
}
}
else{
console.log(a[k]+"命中");
q.dataStore[l].unuse_time = 0;
}
}
console.log(q.dataStore[0].id+" "+q.dataStore[1].id+" "+q.dataStore[2].id+" "+q.dataStore[3].id+" "+q.dataStore[4].id);
}
console.log("缺页率为"+queye_num/20);