LRU algorithm
by Daniel Cheung
JavaScript
let cache = [7, 2, 3, 1, 2, 5, 3, 4, 6, 7, 7, 1, 0, 5, 4, 6, 2, 3, 0, 1];
let frames = [null, null, null];
let ages = [0, 0, 0];
cache.forEach(f => {
let i = emptyI();
let fault = false;
if (i !== null) {
frames[i] = f;
ages[i] = 0;
} else {
i = oldestI();
frames[i] = f;
ages[i] = 0;
fault = true;
}
console.log(frames + fault && " Fault");
ages.forEach((_, i) => ages[i]++);
});
function emptyI() {
for (let i = 0; i < frames.length; i++) {
if (frames[i] === null)
return i;
}
return null;
}
function oldestI() {
let iMax = -1;
let ageMax = -1;
ages.forEach((age, i) => {
if (age > ageMax) {
ageMax = age;
iMax = i;
}
});
return iMax;
}