- 資訊首頁(yè) > 開(kāi)發(fā)技術(shù) >
- 如何使用java實(shí)現操作系統中的最佳置換Optimal算法
這篇文章主要介紹如何使用java實(shí)現操作系統中的最佳置換Optimal算法,文中介紹的非常詳細,具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
Swap指令
最佳置換算法是由Belady于1966年提出的一種理論上的算法。其所選擇的被淘汰頁(yè)面是以后永不使用的,或許是在最長(cháng)(未來(lái))時(shí)間內不再被訪(fǎng)問(wèn)的頁(yè)面。采用最佳置換算法通常保證獲取最低的缺頁(yè)率。但人們目前還無(wú)法與之,一個(gè)線(xiàn)程在內存的若干個(gè)頁(yè)面中,哪個(gè)頁(yè)面是未來(lái)最長(cháng)時(shí)間內不再被訪(fǎng)問(wèn)的,因此該算法是無(wú)法實(shí)現的,但是可以利用該算法去評價(jià)其他算法?,F在就說(shuō)明如下。
假定系統為某進(jìn)程分配了三個(gè)物理塊,并考慮有以下的頁(yè)面號引用串:
7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2, 1, 2, 0, 1, 7, 0, 1
進(jìn)程運行時(shí),先將7,0,1三個(gè)頁(yè)面裝在內存,以后需要訪(fǎng)問(wèn)頁(yè)面2時(shí),將產(chǎn)生缺頁(yè)中斷。此時(shí)OS將根據最佳算法置換算法將選擇頁(yè)面7予以淘汰。這是因為頁(yè)面0將作為第五個(gè)被訪(fǎng)問(wèn)的頁(yè)面,頁(yè)面1為第十四個(gè)被訪(fǎng)問(wèn)的頁(yè)面,而頁(yè)面7則是要在低18次訪(fǎng)問(wèn)才需要引入,以此類(lèi)推。
以下是源代碼實(shí)現部分:
package chapter02;public class P175Optimal { //查找數組中是否存在并且未存儲元素的索引 public static int existEmpty(int[] place){ for (int i = 0; i < place.length; i++) { if(place[i]==-1) return i; } //不為空 return -1; } //查找元素是否在數組中存在 public static boolean paramExist(int[] place,int param){ for (int i = 0; i < place.length; i++) { if(place[i]==param) return true; } //不為空 return false; } //獲取最大距離值 public static int getMaxIndexOfNeed(int[] place,int[] block,int start){ //最近需求定位 int minBlockIndex = -1; int minPlaceIndex = -1; for(int PlaceIndex = 0;PlaceIndex<place.length;PlaceIndex++){ for (int BlockIndex = start + 1; BlockIndex < block.length; BlockIndex++) { if (block[BlockIndex] == place[PlaceIndex]) { if (minBlockIndex < BlockIndex) { minBlockIndex = BlockIndex; minPlaceIndex = PlaceIndex; } break; } //這操作是查找獲取最大距離值的時(shí),發(fā)現內存中的元素以后永久不使用的元素時(shí)候 if(BlockIndex==block.length-1 && block[BlockIndex]!=place[PlaceIndex]){ return PlaceIndex; } } } return minPlaceIndex; } public static void main(String[] args) { int[] block = new int[]{7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2, 1, 2, 0, 1, 7, 0, 1}; int[] place = new int[]{-1, -1, -1}; for (int index = 0; index < block.length; index++) { //假設元素存在則不需要進(jìn)行任何操作 if(paramExist(place,block[index])){ continue; }else { int emptyIndex = existEmpty(place); //當前已經(jīng)元素滿(mǎn)了 if(emptyIndex==-1){ int maxIndex = getMaxIndexOfNeed(place,block,index); place[maxIndex] = block[index]; for (int param : place) { System.out.print(param + " "); } System.out.println(); }else{ place[emptyIndex] = block[index]; } } } }}
實(shí)驗結果:
"C:\Program Files\Java\jdk1.8.0_101\bin\java.exe" 2 0 1 2 0 3 2 4 3 2 0 3 2 0 1 7 0 1
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自互聯(lián)網(wǎng)轉載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權請聯(lián)系QQ:712375056 進(jìn)行舉報,并提供相關(guān)證據,一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容。
Copyright ? 2009-2021 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 珠海市特網(wǎng)科技有限公司 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站