Ⅰ 最佳頁面淘汰演算法是怎樣計算的
1; 50%指令順序執行
2;25%指令均勻散步在前地址部分
3;25%指令均勻散步在後地址部分
題目中選用:命中率=1-頁面失敗次數(只選用2的冪次)/葉地址流長度
演算法:opt fifo rlu(定義)(至少用兩個演算法)程序流程圖開始:產生給定長度符合假定的指令地址流->為每一個指令地址的成對應的訪問頁號->置初算size=1~8(1,2,4,8)(頁面大上)實存
=4~32(4,8,16,32)->輸入淘汰演算法->A->ALG=FIFO(OR)(LRU)->FIFO->用FIFO計算命中率->用LRU計算命中率->輸出結果->結束演算法定義:理想淘汰演算法--最佳頁面演算法(OPT)
淘汰以後不再需要的或最遠的將來才會用到的頁面
先進先出頁面淘汰演算法(FIFO)
選擇在內存中駐留時間最長的頁並淘汰之
最近最少使用頁面淘汰演算法(LRU)
選擇最後一次訪問時間距離當前時間最長的一頁並淘汰之即淘汰沒有使用的時間最長的頁.
Ⅱ 在淘汰策略的先進先出淘汰演算法來說,下列說法正確的是()
E
Ⅲ 資料庫LRU 頁面淘汰演算法
餓,LRU 最近最久未使用演算法
當前頁面內容:
頁面一 2 2 2 1 1 1 4
頁面二 3 3 3 5 5 5
頁面三 2 2 2 2 2
頁面訪問順序 2 3 2 1 5 2 4 .............
缺 缺 缺 缺 缺 不缺 缺
注意這步 和下面那步
這只是個演算法,和資料庫之類的沒關系
我暈 ,幾行內容咋對不上,我編輯時是正常的
Ⅳ 分頁虛擬存儲管理中有哪幾種常見的頁面淘汰演算法
理想置換演算法
最近最久未使用(LRU)
最少使用
先進先出
clock置換演算法
Ⅳ 先進先出頁面淘汰演算法
#include<stdio.h>
#include<stdlib.h>
#define max 30
typedef struct{
int visit_number;//要訪問的頁面號
}nu,number[max];
int *memoryblock;//主存中有三個主存塊,可裝三個頁面
void init_memoryblock(int n)//初始化主存塊
{
int i=1;
memoryblock=(int*)malloc(sizeof(int));//分配空間
for(i=1;i<=n;i++)
{
memoryblock[i]=-1;//開始時候沒有頁面進入,初始為-1
}
}
void init_visitpage(number num,int n)//n表示要訪問的頁面的個數
{
int i=0;
int j=3;
printf("輸入要訪問的頁面號: ");
for(i=1;i<=n;i++)
{
scanf("%d",&num[i].visit_number);
}
printf("\n");
}
void FIFO_page_dispatch(number num,int n)//FIFO頁面調度演算法
{
int i,j=3,temp,counter=0;
for(i=1;i<=n;i++)
{
//----------------------------頁面在主存中-------------------------------
for(j=3;j>=1;j--)
{
if(num[i].visit_number==memoryblock[j])//////要訪問的頁面在主存中
{
printf("(%d)頁面在主存塊中,換出和換進都是%d號頁面:\n",i,memoryblock[j]);
}
break;
}
//-----------------------------------------------------------------------
//----------------------------頁面不在主存中-----------------------------
if(num[i].visit_number!=memoryblock[1]&&num[i].visit_number!=memoryblock[2]&&
num[i].visit_number!=memoryblock[3])/////////////[ 1 ]
/*內存中沒有要訪問的頁面,中斷*/
{
if(memoryblock[1]!=-1&&memoryblock[2]!=-1&&memoryblock[3]!=-1)
{
temp=memoryblock[3];
memoryblock[3]=memoryblock[2];
memoryblock[2]=memoryblock[1];
memoryblock[1]=num[i].visit_number;
//---------------------------------
printf("(%d)——頁面發生置換:",i);
printf("換出(%d號)頁面—",temp);
printf("換進(%d)號頁面\n",num[i].visit_number);
counter++;
}
for(j=3;j>=1;j--)//////////////[ 2 ]
{
if(memoryblock[j]==-1)//還有空閑主存塊
{
printf("(%d)有空閑主存塊,%d號頁面直接調入:\n",i,i);
memoryblock[j]=num[i].visit_number;
break;
}
}
//-----------------------------移動主存塊-------------------
}
//------------------------------------------------------------------------
}
printf("\n共產生 %d 次頁面置換:",counter);
}
void main()
{
number num;
int m,n;
printf("輸入要訪問頁面串的個數(<30)和內存塊個數:");
{
scanf("%d%d",&n,&m);
getchar();
}
init_memoryblock(m);//初始化主存塊
init_visitpage(num,n);//輸入要訪問的頁面號順序
FIFO_page_dispatch(num,n);//FIFO調度
printf("\n");
}
Ⅵ lru 淘汰演算法
最佳演算法(OPT演算法)
當需要淘汰一個內存頁面時,這種演算法力圖選擇該進程內存各個頁面中永遠不再需要的頁,若找不到,則選擇最久以後才會用到的頁。這種演算法有最小的缺頁率。問題是它需要知道運行進程今後的整個訪問蹤跡,這往往難以做到,因而它只有理論上的意義。
先進先出演算法(FIFO演算法)
FIFO演算法維護一個先進先出隊列,隊列長度為分配給這個進程的頁面數M。開始時隊列是空的,裝入進程的第一頁即可啟動運行,當訪問到某個不在內存的頁面時,把它從輔存調入,加入FIFO隊列的尾部。
最久未使用淘汰演算法(LRU演算法)
LRU(least recently used)演算法維護一個後進先出棧,棧大小為分配給這個進程的頁面數M。開始時棧是空的,裝入進程的第一頁即可啟動運行,當訪問到某個不在內存的頁面時,把它從輔存調入,加入棧頂。
FIFO和LRU演算法的例子:http://osjx.8100988.net/LWR/RAM/HLM/FIFOsf.HTM
CLOCK演算法
又叫NRU(Not Recently Used)演算法,NRU又名近似的LRU置換演算法。
當一存儲塊中的頁面訪問時,其相應的「頁面訪問」位由硬體自動置「1」,而由頁面管理體制軟體周期性地(設周期為T,其值通常為幾百毫秒),把所有的頁面訪問位重新置為「0」。這樣,在時間T內,某些被訪問的頁面,其對應的訪問位為「1」而未訪問的頁面,其對應的訪問位為「0」。查尋頁面訪問位為「0」的頁面。在查找過程中,那些被訪問的頁所對應的訪問位被重新置為「0」。由此可見,實際上這種近似LRU演算法,已經退化成一種「最近不用」的演算法NRU(Not Recently Used)。
CLOCK演算法的例子:http://www.cskaoyan.com/thread-4898-1-1.html
其實這個問題我也不太會,去臨時查的資料,第一個例子是我自己算的,不知道我理解得對不對;如果有錯誤的地方還請指正,共同進步~其他的演算法的例子我都給了鏈接,你自己去看吧。
Ⅶ 關於先進先出(FIFO)頁面淘汰演算法
輸入:1,2,3,4,1,2,5,1,2,3,4,5
先進先出,就是保存最近3個訪問的記錄在內存中
, , <—1 中斷1次
, ,1<—2 中斷1次
, 1,2<—3 中斷1次
1,2,3 <—4 中斷1次
2,3,4 <—1 中斷1次
3,4 ,1<—2 中斷1次
4,1,2<—5 中斷1次
1,2,5<—1 命中,不中斷
2,5,1 <—2 命中,不中斷
5,1,2<—3 中斷1次
1,2,3 <—4 中斷1次
2,3,4 <—5 中斷1次
3,4,5
累計中斷12次
Ⅷ 先進先出(FIFO)淘汰演算法怎麼算
輸入:123412512345 先進先保存近3訪問記錄內存 , , <—1 斷1 , ,1<—2 斷1 , 1,2<—3 斷1 1,2,3 <—4 斷1 2,3,4 <—1 斷1 3,4 ,1<—2 斷1 4,1,2<—5 斷1 1,2,5<—1 命斷 2,5,1 <—2 命斷 5,1,2<—3 斷1 1,2,3 <—4 斷1 2,3,4 <—5 斷1 3,4,5 累計斷12
Ⅸ LRU頁面淘汰演算法
LRU演算法
最近最久未使用(LRU)的頁面置換演算法,是根據頁面調入內存後的使用情況進行決策的。由於無法預測各頁面將來的使用情況,只能利用「最近的過去」作為「最近的將來」的近似,因此,LRU置換演算法是選擇最近最久未使用的頁面予以淘汰。該演算法賦予每個頁面一個訪問欄位,用來記錄一個頁面自上次被訪問以來所經歷的時間t,當須淘汰一個頁面時,選擇現有頁面中其t值最大的,即最近最久未使用的頁面予以淘汰。
LRU的實現(需要「堆棧」支持)
可利用一個特殊的棧來保存當前使用的各個頁面的頁面號。每當進程訪問某頁面時,便將該頁面的頁面號從棧中移出,將它壓入棧頂。因此,棧頂始終是最新被訪問頁面的編號,而棧底則是最近最久未使用頁面的頁面號。