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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

操作系统——页面置换算法

發布時間:2023/12/4 windows 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 操作系统——页面置换算法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、頁面置換算法簡介

操作系統將內存按照頁的進行管理,在需要的時候才把進程相應的部分調入內存。當產生缺頁中斷時,需要選擇一個頁面寫入。如果要換出的頁面在內存中被修改過,變成了“臟”頁面,那就需要先寫會到磁盤。頁面置換算法,就是要選出最合適的一個頁面,使得置換的效率最高。頁面置換算法有很多,簡單介紹幾個。

二、n種算法介紹

2.1 Optimal算法(最優算法)

首先介紹最優算法,它需要知道以后要被用到的頁,然后將不會被用到的頁換出內存;如果所有頁都會被用到,就把需要使用時間離現在最長的頁換出,以盡量使不好的情況晚發生。這種方法能使系統獲得最佳性能,但是,它是不可能實現的…因為當前無法獲知以后哪些頁要被用到。不過最優算法還是能夠作為其他算法優秀程度的衡量。

例:假定系統為某進程分配了三個物理塊,并考慮有以下的頁面號引用串:
7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1
進程運行時,先將 7,0,1 三個頁面裝入內存。以后,當進程要訪問頁面 2 時,將會產生缺頁中斷。此時 OS 根據最佳置換算法,將選擇頁面 7 予以淘汰。這是因為頁面 0 將作為第 5 個被訪問的頁面,頁面 1 是第 14 個被訪問的頁面,而頁面 7 則要在第 18 次頁面訪問時才需調入。下次訪問頁面 0 時,因它已在內存而不必產生缺頁中斷。當進程訪問頁面 3時,又將引起頁面 1 被淘汰;因為,它在現有的 1,2,0 三個頁面中,將是以后最晚才被訪問的。圖 4-26 示出了采用最佳置換算法時的置換圖。由圖可看出,采用最佳置換算法發生了 6 次頁面置換。

2.2 FIFO(First-In First-Out,先進先出)算法

FIFO算法的思想很簡單,就是置換出當前已經待在內存里時間最長的那個頁。FIFO算法的運行速度很快,不需要考慮其他的因素,需要的開銷很少。但是正是由于沒有考慮頁面的重要性的問題,FIFO算法很容易將重要的頁換出內存。

例:同上。當進程第一次訪問頁面 2 時,將把第 7 頁換出,因為它是最先被調入內存的;在第一次訪問頁面 3 時,又將把第 0 頁換出, 因為它在現有的 2, 0, 1 三個頁面中是最老的頁。 由圖 4-27 可以看出,利用 FIFO 算法時進行了 12 次頁面置換,比最佳置換算法正好多一倍。

2.3 Second Chance(第二次機會)算法

為了避免FIFO算法將重要的頁換出內存,Second Chance算法提供了一些改進。Second Chance算法在將頁面換出內存前檢查其使用位(使用位前文有介紹),如果其使用位為1,證明此頁最近有被使用,猜測它還可能被使用,于是不把它置換出內存,但是把其使用位置為0,隨后檢查下一個頁面,直到發現某頁的使用位為0,將此頁置換出內存。

2.4 Clock算法(時鐘輪轉法)

為了節約Second Chance算法一個接著一個檢查使用位的開銷,時鐘輪轉法又提出了改進。時鐘輪轉法將所有的頁組成一個圓,圓心的指針指向下一個要被置換的頁面,置換前同樣檢查使用位,如果使用位為1,同樣將其使用位置為0,隨后將順指針旋轉,檢查下一個頁面,直到發現某頁的使用位為0,將此頁置換出內存。很容易理解此算法為什么叫“時鐘”輪轉法。

圖示:

此時2號頁是下一個要被置換出內存的頁,置換時如果發現其使用位為1,則將使用位置0后順時針旋轉指針檢查1號頁。

2.5 LRU(Least Recent Used, 最近最少使用)算法

為獲得對最優算法的模擬,提出了LRU算法。由于當前時間之后需要用到哪些頁無法提前獲知,于是記錄當前時間之前頁面的使用情況,認為之前使用過的頁面以后還會被用到。在置換時,將最近使用最少的頁面換出內存。此種方法的開銷比較大。

例:同上。當進程第一次對頁面 2 進行訪問時,由于頁面 7 是最近最久未被訪問的,故將它置換出去。當進程第一次對頁面 3進行訪問時,第 1 頁成為最近最久未使用的頁,將它換出。由圖可以看出,前 5 個時間的圖像與最佳置換算法時的相同,但這并非是必然的結果。因為,最佳置換算法是從“向后看”的觀點出發的,即它是依據以后各頁的使用情況;而 LRU 算法則“向前看”的,即根據各頁以前的使用情況來判斷,而頁面過去和未來的走向之間并無必然的聯系。

2.6 Linux使用的頁面置換算法

Linux區分四種不同的頁面:不可回收的、可交換的、可同步的、可丟棄的。

不可回收的:保留的和鎖定在內存中的頁面,以及內核態棧等。

可交換的:必須在回收之前寫回到交換區或者分頁磁盤分區。

可同步的:若為臟頁面,必須要先寫回。

可丟棄的:可以被立即回收的頁面。

Linux并沒有像我們之前單純討論算法時那樣,在缺頁中斷產生的時候才進行頁面回收。Linux有一個守護進程kswapd,比較每個內存區域的高低水位來檢測是否有足夠的空閑頁面來使用。每次運行時,僅有一個確定數量的頁面被回收。這個閾值是受限的,以控制I/O壓力。

每次執行回收,先回收容易的,再處理難的。回收的頁面會加入到空閑鏈表中。

算法是一種改進地LRU算法,維護兩組標記:活動/非活動和是否被引用。第一輪掃描清除引用位,如果第二輪運行確定被引用,就提升到一個不太可能回收的狀態,否則將該頁面移動到一個更可能被回收的狀態。

處于非活動列表的頁面,自從上次檢查未被引用過,因而是移除的最佳選擇。被引用但不活躍的頁面同樣會被考慮回收,是因為一些頁面是守護進程訪問的,可能很長時間不再使用。

另外,內存管理還有一個守護進程pdflush,會定期醒來,寫回臟頁面;或者可用內存下降到一定水平后被內核喚醒。

2.7 NRU(Not Recent Used, 最近未使用)算法

前面提到修改位和使用位,NRU算法利用這兩個標志位將所有頁幀分為4組:

第0組:修改位和使用位都為0;

第1組:修改位為0,使用位為1;

第2組:修改位為1,使用位為0;

第3組:修改位和使用位都為1。

NRU算法從組數最小的一組中隨機選擇一個頁面將其移出內存。可能有人會發現第2組這種情況根本不會出現,如果一個頁幀被修改,其修改位會被置1,同時它也被使用了,其使用位也會被置1;即不會出現被修改但是沒有被使用的情況。真實情況是,頁幀的使用位會被定時清零,這樣第3組經過一次清零就會變成第2組。這也符合“最近”未使用,即很久以前被使用的頁幀被清零了,不在統計范圍內,只要“最近”沒有被使用,就很有可能被移出。

NRU算法不是最好的,但是它使用起來開銷很小,用較小的代價就得到了不錯的效果,不失為一種不錯的算法。

三、代碼實現

//TODO

總結

以上是生活随笔為你收集整理的操作系统——页面置换算法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。