十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
您好,百度贴吧专家团很高兴能够回答您的问题。您的采纳是我们前进的动力。
创新互联建站是一家专注于成都网站建设、网站制作与策划设计,大连网站建设哪家好?创新互联建站做网站,专注于网站建设十多年,网设计领域的专业建站公司;建站业务涵盖:大连等地区。大连做网站价格咨询:028-86922220
public class LRU {
private int theArray[];
private int back; //定义队尾
private int currentSize; //队列中存放元素个数
private int maxSize=5; //队列中能存放元素的个数
public LRU(){
theArray=new int[maxSize];
back=0;
currentSize=0;
}
public void queue(int a[]){
for(int i=0;ia.length;i++){
enQueue(a[i]);
}
}
public void enQueue(int x){ //入队
beUsed(x); //先判断是否已存在该页号,若存在,删除
if(currentSizemaxSize){
theArray[back]=x;
back++;
currentSize++;
}else if(currentSize==maxSize){ //满了
for(int i=0;imaxSize-1;i++){
theArray[i]=theArray[i+1];
}
theArray[maxSize-1]=x;
}
for(int i=0;icurrentSize;i++){
System.out.print(theArray[i]);
}
System.out.println();
}
public void beUsed(int x){ //判断是否已存在该页号,若存在,删除已有的
for(int i=0;icurrentSize;i++){
if(theArray[i]==x){
for(int j=i;jcurrentSize-1;j++){
theArray[j]=theArray[j+1];
}
currentSize--;
back--;
}
}
}
public static void main(String[] args) {
LRU lru=new LRU();
int a[]={4,7,0,7,1,0,1,2,1,2,6};
lru.queue(a);
}
}
java使用数据结构来实现FIFO先进先出的队列,实例如下:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package linkedlisttest;
import java.util.ArrayList;
import java.util.Deque;
import java.util.LinkedList;
import java.util.List;
/**
*
* @author Vicky.H
* @email eclipser@163.com
*/
public class FIFOTest {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
FIFOA fifo = new FIFOImplA(5);
for (int i = 0; i 20; i++) {
A a = new A("A:" + i);
A head = fifo.addLastSafe(a);
System.out.println(i + "\thead:" + head + "\tsize:" + fifo.size());
}
System.out.println("---------------");
System.out.println("弹出数据");
ListA polls = fifo.setMaxSize(3);
for (A a : polls) {
System.out.println("\thead:" + a);
}
System.out.println("剩余数据");
for (A a : fifo) {
System.out.println("\thead:" + a);
}
System.out.println(fifo.size());
}
}
interface FIFOT extends ListT, DequeT, Cloneable, java.io.Serializable {
/**
* 向最后添加一个新的,如果长度超过允许的最大值,则弹出一个 *
*/
T addLastSafe(T addLast);
/**
* 弹出head,如果Size = 0返回null。而不同于pop抛出异常
* @return
*/
T pollSafe();
/**
* 获得最大保存
*
* @return
*/
int getMaxSize();
/**
* 设置最大存储范围
*
* @return 返回的是,因为改变了队列大小,导致弹出的head
*/
ListT setMaxSize(int maxSize);
}
class FIFOImplT extends LinkedListT implements FIFOT {
private int maxSize = Integer.MAX_VALUE;
private final Object synObj = new Object();
public FIFOImpl() {
super();
}
public FIFOImpl(int maxSize) {
super();
this.maxSize = maxSize;
}
@Override
public T addLastSafe(T addLast) {
synchronized (synObj) {
T head = null;
while (size() = maxSize) {
head = poll();
}
addLast(addLast);
return head;
}
}
@Override
public T pollSafe() {
synchronized (synObj) {
return poll();
}
}
@Override
public ListT setMaxSize(int maxSize) {
ListT list = null;
if (maxSize this.maxSize) {
list = new ArrayListT();
synchronized (synObj) {
while (size() maxSize) {
list.add(poll());
}
}
}
this.maxSize = maxSize;
return list;
}
@Override
public int getMaxSize() {
return this.maxSize;
}
}
class A {
private String name;
public A() {
}
public A(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "A{" + "name=" + name + '}';
}
}
[fifo.rar] - 操作系统中内存页面的先进先出的替换算法fifo
[先进先出页面算法程序.rar] - 分别实现最佳置换算法(optimal)、先进先出(fifo)页面置换算法和最近最久未使用(LRU)置换算法,并给出各算法缺页次数和缺页率。
[0022.rar] - 模拟分页式虚拟存储管理中硬件的地址转换和缺页中断,以及选择页面调度算法处理缺页中断
[Change.rar] - 用java实现操作系统的页面置换 其中包括 最佳置换算法(Optimal)、先进先出算法(First-in, First-out) 、最近最久不用的页面置换算法(LeastRecently Used Replacement)三种算法的实现
[M_Management.rar] - 操作系统中内存管理页面置换算法的模拟程序,采用的是LRU置换算法
[detail_of_44b0x_TCPIP.rar] - TCPIP 程序包加载到44b0x 的ADS1.2工程文件的说明书。说名了加载过程的细节和如何处理演示程序和代码。演示代码已经上传,大家可以搜索
[OperatingSystemPageReplacementAlgorithm.rar] - java操作系统页面置换算法: (1)进先出的算法(fifo) (2)最近最少使用的算法(LRU) (3)最佳淘汰算法(OPT) (4)最少访问页面算法(LFU) (注:由本人改成改进型Clock算法) (5)最近最不经常使用算法(NUR)
FIFO:
页 4 1 2 5 1 2 3 4 5
内存423 413 412 512 no no 532 534 no
LRU:
页 4 1 2 5 1 2 3 4 5
内存423 413 412 512 no no 312 342 345
楼主 看一下这个
(缺页发生 也就是 需要进行 交换 初始 装入内存的 三个页 是不发生缺页的 所以 从4开始)
上面是 装入的 页面 下面是 装入后 内存的状态 (no代表不缺页)
我 也是才看过 三级的教程 大概算了一下
FIFO 是 先进 先出 , 也就是的 每次 总是 不 最早进来的 换出去 和 页面值 无关(此算法是基于内存块的 顺序, 最长未更新的内存块 , 先更新, 明白这意思吧, 可以对照 前面的数据看下)
LRU 是 更新 最长为使用的 页面, 也就是 这个算法 是 根据页面值来 交换的
也就是 新装入的 页面值 如果 在内存快里面 有 就会更新这个 页面的 某个标记状态(标记 其多久未使用, 其实就是个 变量, 很容易实现)
显然 一直到5 都是和FIFO算法 是一样的 ,
为什么呢, 因为 前几页 都是 缺页的 并没有 改变 标记变量, 所以 就 按照 先装入,则 距今未使用时间最长,则 先交换的原则啦
开始需要 1(5后面那个) 那么 内存 目前状态时 512 , 1是在内存中的 不发生缺页,】
所以 更新 标记变量(标明 1刚被使用过)
然后 需要 2 内存中依然 存在 则 更新 2的 标记变量, 则 现在内存中 任然是 512 但是 标记变量已经变了 2最新, 1次之 , 5最久 (最久未使用) 所以下次 交换 就先 换 5
内存 变为 321 现在 3最新, 2次之, 1最久 下次缺页 就 换 1
思路 就是 这样。