日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

Java实现的时钟置换算法_时钟页面置换算法

發(fā)布時(shí)間:2025/3/15 java 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java实现的时钟置换算法_时钟页面置换算法 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、局部:時(shí)鐘置換算法:

1.最優(yōu)置換算法:理論上的,預(yù)測(cè)最晚調(diào)用的頁(yè)面。

2.LRU算法,置換掉最久未使用的。

一個(gè)鏈表。一個(gè)頁(yè)面被調(diào)用的話(huà),會(huì)被從鏈表中(它原本的位置)移動(dòng)到鏈表首,而每次缺頁(yè),則會(huì)將鏈表尾部元素置換。

3.FIFO算法,置換掉在內(nèi)存中時(shí)間最長(zhǎng)的。(性能低

同是一個(gè)鏈表,每次缺頁(yè)置換最早進(jìn)入頁(yè)面(時(shí)間排序)鏈?zhǔn)椎摹P马?yè)面放在鏈表尾部。

4.clock 算法,

環(huán)形鏈表,不再排序而是使用2個(gè)標(biāo)記,0和1,

第一個(gè)次加載頁(yè)面的時(shí)候,頁(yè)面標(biāo)記被設(shè)置為0,調(diào)用內(nèi)存中駐留的頁(yè)面時(shí),標(biāo)記該頁(yè)面為1,

出現(xiàn)缺頁(yè)時(shí),指針從當(dāng)前位置循環(huán)查找環(huán)形鏈表,如果遇到標(biāo)記為1的,標(biāo)記為0,如果遇到標(biāo)記為0的,置換它。

5.最不常用算法

標(biāo)記不再是0和1,每次調(diào)用,標(biāo)記值+1,缺頁(yè)時(shí),置換標(biāo)記值最小的頁(yè)面

優(yōu)化版本:定期減小數(shù)字

clock 算法 雖然不能像LRU(least recently used)算法 一樣精確的記錄訪問(wèn)順序,但是,開(kāi)銷(xiāo)較小。

改進(jìn)版的clock 算法,只在訪問(wèn)同一個(gè)頁(yè)面的時(shí)候,做寫(xiě)回操作,在缺頁(yè)的時(shí)候,會(huì)跳過(guò)已經(jīng)被改變的。

下面是一個(gè)小練習(xí)

functionclock(load){//假設(shè)同時(shí)可以加載的數(shù)目

let workRow =3;//儲(chǔ)存標(biāo)記位

let m = newMap();//當(dāng)前加載的

let res=[];//當(dāng)前加載的index,workRow個(gè)

let pointer = 0;//初始化

for(var i=0;i

res.push(load[i])//設(shè)置為1

m.set(load[i],0);//如果滿(mǎn)了,而且需要加載的就在里面(重復(fù))不用再加載

}else if(m.has(load[i])){

console.log('loaded what has been there',load[i])

m.set(load[i],1)

}else{//缺頁(yè)異常,需要置換

loading(load[i],i)

console.log(load[i] , res)

}

}functionloading(task,idx){

let wait= true;//檢查當(dāng)前指針,如果是1,標(biāo)記為0,如果找到為0的,扔掉,其余移動(dòng)向下,把要加載的,加載進(jìn)來(lái),設(shè)置為1,結(jié)束

while(wait){

pointer= idx%(workRow-1)if(m.get(res[pointer])==1){

m.set(res[pointer],0)

}else if(m.get(res[pointer])==0){

m.delete(res[pointer])

res[pointer]=task

m.set(task,1)

wait= false;

}

pointer++;

}

}//內(nèi)存中最后的內(nèi)容

returnres;

}

clock(['a','b','b','d','b','e','c','d','e'])

二、全局:置換算法

1.盡量不更改常駐集大小的(假設(shè)工作集大小趨于穩(wěn)定),工作集置換算法。

每次訪存時(shí),換出當(dāng)前工作集窗口內(nèi)沒(méi)引用的頁(yè)面。

每次缺頁(yè)時(shí),增加頁(yè)面,更新訪存鏈表。

2。動(dòng)態(tài)改變常駐集(頁(yè)面數(shù))大小的,缺頁(yè)率算法。

缺頁(yè)率太大,增加常駐集,缺頁(yè)率太小,減少常駐集。

而檢測(cè)方法,是設(shè)置一個(gè)缺頁(yè)之間的T間隔數(shù),如果在這個(gè)T間隔范圍內(nèi),沒(méi)有出現(xiàn)缺頁(yè),(兩次缺頁(yè)之間的實(shí)際間隔t大于設(shè)定值T)則減小常駐集(置換所有未被引用的頁(yè)面)。如果在這個(gè)范圍內(nèi)出現(xiàn)缺頁(yè),則增加常駐集大小(直接加入該頁(yè)面到常駐集)。

新人創(chuàng)作打卡挑戰(zhàn)賽發(fā)博客就能抽獎(jiǎng)!定制產(chǎn)品紅包拿不停!

總結(jié)

以上是生活随笔為你收集整理的Java实现的时钟置换算法_时钟页面置换算法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。