十年網(wǎng)站開發(fā)經(jīng)驗 + 多家企業(yè)客戶 + 靠譜的建站團隊
量身定制 + 運營維護+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
您好,百度貼吧專家團很高興能夠回答您的問題。您的采納是我們前進的動力。
創(chuàng)新互聯(lián)建站是一家專注于成都網(wǎng)站建設(shè)、網(wǎng)站制作與策劃設(shè)計,大連網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)建站做網(wǎng)站,專注于網(wǎng)站建設(shè)十多年,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:大連等地區(qū)。大連做網(wǎng)站價格咨詢:028-86922220
public class LRU {
private int theArray[];
private int back; //定義隊尾
private int currentSize; //隊列中存放元素個數(shù)
private int maxSize=5; //隊列中能存放元素的個數(shù)
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使用數(shù)據(jù)結(jié)構(gòu)來實現(xiàn)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("彈出數(shù)據(jù)");
ListA?polls?=?fifo.setMaxSize(3);
for?(A?a?:?polls)?{
System.out.println("\thead:"?+?a);
}
System.out.println("剩余數(shù)據(jù)");
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();
/**
*?設(shè)置最大存儲范圍
*
*?@return?返回的是,因為改變了隊列大小,導(dǎo)致彈出的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] - 操作系統(tǒng)中內(nèi)存頁面的先進先出的替換算法fifo
[先進先出頁面算法程序.rar] - 分別實現(xiàn)最佳置換算法(optimal)、先進先出(fifo)頁面置換算法和最近最久未使用(LRU)置換算法,并給出各算法缺頁次數(shù)和缺頁率。
[0022.rar] - 模擬分頁式虛擬存儲管理中硬件的地址轉(zhuǎn)換和缺頁中斷,以及選擇頁面調(diào)度算法處理缺頁中斷
[Change.rar] - 用java實現(xiàn)操作系統(tǒng)的頁面置換 其中包括 最佳置換算法(Optimal)、先進先出算法(First-in, First-out) 、最近最久不用的頁面置換算法(LeastRecently Used Replacement)三種算法的實現(xiàn)
[M_Management.rar] - 操作系統(tǒng)中內(nèi)存管理頁面置換算法的模擬程序,采用的是LRU置換算法
[detail_of_44b0x_TCPIP.rar] - TCPIP 程序包加載到44b0x 的ADS1.2工程文件的說明書。說名了加載過程的細節(jié)和如何處理演示程序和代碼。演示代碼已經(jīng)上傳,大家可以搜索
[OperatingSystemPageReplacementAlgorithm.rar] - java操作系統(tǒng)頁面置換算法: (1)進先出的算法(fifo) (2)最近最少使用的算法(LRU) (3)最佳淘汰算法(OPT) (4)最少訪問頁面算法(LFU) (注:由本人改成改進型Clock算法) (5)最近最不經(jīng)常使用算法(NUR)
FIFO:
頁 4 1 2 5 1 2 3 4 5
內(nèi)存423 413 412 512 no no 532 534 no
LRU:
頁 4 1 2 5 1 2 3 4 5
內(nèi)存423 413 412 512 no no 312 342 345
樓主 看一下這個
(缺頁發(fā)生 也就是 需要進行 交換 初始 裝入內(nèi)存的 三個頁 是不發(fā)生缺頁的 所以 從4開始)
上面是 裝入的 頁面 下面是 裝入后 內(nèi)存的狀態(tài) (no代表不缺頁)
我 也是才看過 三級的教程 大概算了一下
FIFO 是 先進 先出 , 也就是的 每次 總是 不 最早進來的 換出去 和 頁面值 無關(guān)(此算法是基于內(nèi)存塊的 順序, 最長未更新的內(nèi)存塊 , 先更新, 明白這意思吧, 可以對照 前面的數(shù)據(jù)看下)
LRU 是 更新 最長為使用的 頁面, 也就是 這個算法 是 根據(jù)頁面值來 交換的
也就是 新裝入的 頁面值 如果 在內(nèi)存快里面 有 就會更新這個 頁面的 某個標(biāo)記狀態(tài)(標(biāo)記 其多久未使用, 其實就是個 變量, 很容易實現(xiàn))
顯然 一直到5 都是和FIFO算法 是一樣的 ,
為什么呢, 因為 前幾頁 都是 缺頁的 并沒有 改變 標(biāo)記變量, 所以 就 按照 先裝入,則 距今未使用時間最長,則 先交換的原則啦
開始需要 1(5后面那個) 那么 內(nèi)存 目前狀態(tài)時 512 , 1是在內(nèi)存中的 不發(fā)生缺頁,】
所以 更新 標(biāo)記變量(標(biāo)明 1剛被使用過)
然后 需要 2 內(nèi)存中依然 存在 則 更新 2的 標(biāo)記變量, 則 現(xiàn)在內(nèi)存中 任然是 512 但是 標(biāo)記變量已經(jīng)變了 2最新, 1次之 , 5最久 (最久未使用) 所以下次 交換 就先 換 5
內(nèi)存 變?yōu)?321 現(xiàn)在 3最新, 2次之, 1最久 下次缺頁 就 換 1
思路 就是 這樣。