[OS复习]虚拟存储管理技术2
生活随笔
收集整理的這篇文章主要介紹了
[OS复习]虚拟存储管理技术2
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.虛擬存儲系統的軟件策略
現代操作系統幾乎都采用虛擬存儲管理系統。一些特殊的操作系統和一些較老的操作系統沒有采用虛擬存儲技術。例如,MS DOS和早期的UNIX操作系統等。大多采用分段與分頁相結合的段頁式管理系統。下面以分頁存儲管理為例,介紹虛擬存儲系統采用的軟件策略。主要從以下幾個方面進行分析:駐留集管理(Resident Set Management)
放置策略(Placement Policy)
獲取策略(Fetch Policy)
置換策略(Replacement Policy)
清除策略(Cleaning Policy)
負載控制(Load Control)
2.駐留集的管理
進程的駐留集指:虛擬存儲系統中,每個進程駐留在內存的頁面集合,或進程分到的物理頁框集合。駐留集管理主要解決的問題是,系統應當為每個活躍進程分配多少個頁框。2.1影響頁框分配的主要因素
分配給每個活躍進程的頁框數越少,同時駐留內存的活躍進程數就越多,進程調度程序能調度就緒進程的概率就越大。然而,這將導致進程發生缺頁中斷的概率較大;為進程分配過多的頁框,并不能顯著地降低其缺頁中斷率。2.2基本的駐留集管理策略?
固定分配策略:為每個進程分配固定數量的頁框。即每個活躍進程的駐留集尺寸在運行期間固定不變。為進程分配多少個頁框是合理的呢?可以由系統根據進程的類型確定,也可以由編程人員或系統管理員指定。
可變分配策略:
為每個活躍進程分配的頁框數在進程的生命周期內是可變的。即系統可以首先給進程分配一定數量的頁框。進程運行期間,可以增加或減少頁框。系統可以根據進程的缺頁率調整進程的駐留集。當進程的缺頁率很高時,駐留集太小,需要增加頁框;當缺頁率一段時間內都保持很低時,可以在不會明顯增加進程缺頁率的前提下,回收其一部分頁框,減小進程的駐留集。
兩種策略的評價: 可變分配策略比固定分配策略更靈活,既可以提高系統的吞吐量,又能保證內存的有效利用。可變分配要求統計進程的缺頁率,增加系統額外開銷。而準確判斷進程缺頁率的高低,確定缺頁率的閾值是非常困難的。可變分配策略不僅需要操作系統軟件專門的支持,而且,還需要處理機平臺提供的硬件支持。
2.3頁面放置策略
解決的問題:系統應當在內存的什么位置為活躍進程分配頁框?一般地,對于一個分頁系統或段頁式系統,將進程的一個頁面裝入哪一個頁框無關緊要。對于分段系統,需要考慮將一個程序段裝入哪一個合適的分區中,可采用的分配算法包括首次適應法、下次適應法、最佳適應法或最差適應法等。2.4頁面獲取策略
解決的問題:系統應當在何時把一個頁面裝入內存?請求調頁:
僅當進程執行過程中,通過檢查頁表發現相應頁面不在內存時,才裝入該頁面。當進程剛開始執行時,由于預先未裝入進程的頁面,故需要頻繁地申請裝入頁面。執行一段時間以后,進程的缺頁率將下降。采用請求調頁方式,一次裝入請求的一個頁面,磁盤I/O的啟動頻率較高,系統的開銷較大。
預調頁方式:
當進程創建時,預先為進程裝入多個頁面。缺頁中斷時,系統為進程裝入指定的頁面以及與之相臨的多個頁面。若局部性很差,預先裝入的很多頁面不會很快被引用,并會占用大量的內存空間,反而降低系統的效率。
2.5頁面置換策略?
當發生缺頁中斷且無足夠的內存空間時,需要置換已有的某些(個)頁面。應該解決的基本問題:1.當系統欲把一個頁面裝入內存時,應當在什么范圍內判斷已經沒有空閑頁框供分配?2.當指定的范圍內沒有空閑頁框時,應當從指定的范圍內選擇哪個頁面移出內存?可以采用局部置換或全局置換策略。 局部置換: 系統在進程自身的駐留集中判斷當前是否存在空閑頁框,并在其中進行置換。全局置換策略:
在整個內存空間內判斷有無空閑頁框,并允許從其它進程的駐留集中選擇一個頁面換出內存。
2.6分配模式與置換模式對比
固定分配策略-> 局部置換策略?全局置換策略 -> 可變分配策略
可變分配策略+局部置換策略:即可增加或減少分配給每個活躍進程的頁框數;當進程的頁框全部用完,而需要裝入一個新的頁面時,系統將在該進程的當前駐留集中選擇一個頁面換出內存。 ?
3.頁面置換算法
頁面置換算法是指在指定的置換范圍內,決定將哪一個頁面換出內存。置換算法的好壞將直接影響系統的性能,不適當的置換算法可能導致系統出現“抖動”現象。常用的頁面置換算法:最佳置換算法、最近最少使用算法、先進先出算法和時鐘算法等3.1最佳置換算法 (Optimal Algorithm,OPT)?
基本思想:被置換的頁面是將來不再訪問,或在最遠的將來才被訪問的頁面。若采用固定分配策略,最佳置換算法可以保證系統的缺頁率最低。但是,無法預知一個進程在內存的若干頁面中,哪一個頁面是將來不再訪問的,甚至最長時間內將不再被訪問的,因而該算法是無法實現的。該算法可以用于評價其它置換算法的性能。示例:
假設系統分配給某進程3個頁框,且進程開始運行時,這3個頁框是空的。考慮下列頁面號引用序列:2、3、2、1、5、2、4、5、3、2、5、2
據局部性原理,如果一個頁面最近被訪問過,那么,它將在不久的將來再次被訪問。如果一個頁面已經很長時間未被訪問過,則在很久的將來,它將不會被訪問。因此,可以根據頁面的使用歷史,判斷其將來的行為。
3.2最近最少使用置換算法 (Least Recently Used Algorithm,LRU)
LRU根據頁面裝入內存以后的使用情況,選擇淘汰最近最久未被使用的一個頁面。該算法的性能接近OPT算法,但實現較困難。一種方法:為每一個頁面增加一個訪問字段,用以標注該頁最后一次被訪問的時間。需要選擇淘汰頁面時,比較置換范圍內的所有頁面的最后訪問時間,選擇訪問時間最遠的哪個頁面。實現該方法的開銷非常大,不易實現。另一種方法:將訪問頁面組織在一個堆棧中,最近訪問的頁面位于棧頂,棧底的頁面即是最久未被訪問的。實踐證明,該方法的實現仍然很困難,系統付出的代價也非常大。?
3.3先進先出置換算法 (First-in First-out Algorithm,FIFO)
淘汰最先進入內存的頁面,即選擇在內存中駐留時間最久的頁面予以淘汰。實現時,只需把一個進程已調入內存的頁面按先后次序鏈接成一個隊列,并設置一個指針,使它總是指向最老的頁面。該算法與進程實際的運行規律不相適應,進程中的某些程序代碼或數據可能需要高頻使用,該算法將導致這種類型的頁面被反復地換進換出,從而降低系統性能。
3.4Clock時鐘置換算法
內存中的每個頁面配置一個使用位(U位);?當頁面裝入內存時,或被引用時,其U位將被設置為1;系統將置換范圍內的所有頁面組成一 個循環隊列,并為其設置一個掃描指針;未進行頁面置換時,掃描指針總是指向上一次進行頁面置換時被置換頁面所在位置的下一個位置。當需要進行頁面置換時,系統將移動掃描指針,搜索置換范圍內的各個頁面,以便找到一個U位為0的頁面:
如果當前掃描指針所指向的頁面的U位為1,那么系統將把該頁面的U位設置為0,同時把掃描指針移到下一個位置,繼續搜索;如果當前掃描指針所指向的頁面的U位為0,那么系統將把該頁面作為被置換頁面,同時把掃描指針移到下一個位置,停止搜索。(該算法關注的使用頻率)
時鐘置換算法的改進:
系統把一個頁面移出內存時,如果該頁面駐留內存期間沒有被修改過,那么不必把它寫回輔存,否則系統必須把它寫回輔存。這表明,換出未修改過的頁面比換出被修改過的頁面開銷小。顯然,我們可以依據上述結論改進CLOCK算法。改進后的CLOCK算法將在置換范圍內首選在最近沒有被使用過、在駐留內存期間沒有被修改過的頁面作為被置換頁面。
為了改進CLOCK算法,系統將為內存的每個頁面配置一個修改位(簡稱為M位)。?改進后的CLOCK算法在置換范圍內選擇被置換頁面時將同時考慮U位和M位。一個頁面的U位與M位共有四種組合:U=0,M=0:最近沒有被使用過,駐留內存期間也沒有被修改過;U=1,M=0:最近被使用過,但駐留內存期間沒有被修改過;U=0,M=1:最近沒有被使用過,但駐留內存期間被修改過;U=1,M=1:最近被使用過,駐留內存期間也被修改過;
改進后的 CLOCK 算法將按下列步驟選擇被置換頁面:
1、從掃描指針的當前位置開始,搜索 U=0且 M=0 的頁面。此次搜索不會修改置換范圍內的任何一個頁面的U位。若找到第一個U=0且M=0的頁面,則把該頁面選作被置換頁面,終止算法。
2、如果第一步沒有成功, 那么掃描指針將回到原位。 再次搜索U=0但M=1的頁面。如果遇到U位為1的頁面,將其U位修改為0。倘若找到第一個U=0但M=1的頁面,將該頁面選作被置換頁面,終止算法。
3、如果第二步也沒有成功, 那么掃描指針將再次回到原位,且置換范圍內的所有頁面的U位均為0。此時,算法將返回第一步繼續執行。
4.頁面清除策略?
頁面清除是指,將由頁面置換算法選擇的被修改的置換頁面保存到外存。頁面清除策略需要決定系統何時把一個被置換頁面寫回外存。最直接的頁面清除時機是,只有當一個頁被選中作為置換頁時,才被寫回外存,稱之為請求清除策略。若被選中的置換頁面自進入內存以來被修改過,則需要首先將該頁面內容寫回外存保存起來,然后,裝入進程需要的新頁內容。可見,采用請求清除策略時,寫出一個被修改過的頁面與讀入一個新頁的操作是成對出現的,而且,寫出操作先于讀入操作。所以,當正在執行的進程發生缺頁中斷時,需要阻塞等待一個頁面的寫出和另一個頁面的讀入,這可能降低處理機的使用效率。
一種有效的頁面清除策略是結合頁緩沖(Page Buffering)技術。當發生缺頁中斷時,不必首先寫出置換頁,然后讀入新頁。而是,將被選中的置換頁暫時保留在內存的一個緩沖區,在以后某個合適的時候將這些被置換頁批量寫出到外存。減少磁盤I/O的次數,提高處理機的效率。
4.1頁緩沖技術的實現
需要兩個鏈表:未修改頁鏈表和修改頁鏈表。當選中一個被修改過的頁作為置換頁時,不需要立即、真正地將其寫出到外存,而是首先將其插入到修改鏈表中緩沖存儲。修改鏈表中的頁可以周期性地批量寫出到外存,并移到未修改表中。未修改表鏈接被選中的未修改置換頁,當其中某頁所占用的頁框被新頁占用時,新頁的內容覆蓋置換頁的內容,置換頁被真正從內存清除。采用頁緩沖技術,當需要讀入一個新頁時,首先檢查未修改頁鏈表,若該表非空,便可按照FIFO方法,將該鏈表頭指向的第一個頁面占用的頁框分配給新頁。如果未修改表為空,檢查修改頁鏈表,將該表中的頁面內容批量寫出到外存,并將這些頁移到未修改表中,按照上述方法重新分配其占用的頁框。顯然,采用頁緩沖技術不僅可以減少寫出頁面的系統開銷,而且可以減少讀入頁面的開銷。因為,當進程再次訪問頁面緩沖區的頁面時,只需要將對應頁面從緩沖區返回到該進程的駐留集中,而無須從外存讀入。
5.負載控制?
多道程序系統允許多個進程同時駐留內存,以提高系統吞吐量和資源利用率。然而,如果同時駐留內存的進程數量太多,每個進程都競爭各自需要的資源,反而會降低系統效率。如果內存中進程太多,將導致每個進程的駐留集太小,發生缺頁中斷的概率很大。相應地,系統發生抖動的可能性就會很大。如果在內存中保持太少的活動進程,那么所有活動進程同時處于阻塞狀態的可能性就會很大,從而降低處理機的利用率。
負載控制主要解決系統應當保持多少個活動進程駐留在內存的問題,即控制多道程序系統的度。當內存中的活動進程數太少時,負載控制將增加新進程或激活一些掛起進程進入內存;反之,當內存中的進程數太多時,負載控制將暫時掛起一些進程,減少內存中的活動進程數。處理機利用率與多道程序的度之間的關系如圖所示:?
5.1如何判斷系統的負載?
L=S準則通過調整多道程序的度,使發生兩次缺頁之間的平均時間等于處理一次缺頁所需要的平均時間。即,平均地,一次缺頁處理完畢,再發生下一次缺頁。此時,處理機的利用率將達到最大。
50%準則? 當分頁設備的利用率保持在50%左右時,處理機的利用率將達到最大。
如果系統使用基于CLOCK置換算法的全局置換策略,那么,可以通過監視掃描指針的移動速率來調整系統負載。如果掃描指針的移動速率低于某個給定的閥值,那么意味著近期頁面失敗的次數較少或者近期沒有被引用的頁面數較多;此時,系統可以放心地增加駐留內存的活動進程數。如果掃描指針的移動速率超出某個給定的閥值,那么意味著近期頁面失敗的次數較多或者近期沒有被引用的頁面數較少;此時,系統應當減少駐留內存的活動進程數。
5.2可以掛起的進程
優先級最低的進程;缺頁進程:因為發生缺頁中斷的進程處于阻塞狀態,暫時不需要競爭處理機的使用權。而且,掛起一個缺頁進程時,掛起和激活操作需要的數據交換將消除頁替換的開銷;
最后一個被激活的進程 :因為為此類進程裝入的頁面較少。將其掛起的開銷較小;
駐留集最小的進程:將該類進程掛起以后,激活所需的開銷較小;
最大的進程:掛起最大的進程將獲得最多的內存空間,可以滿足內存中的進程申請空閑頁框的需要,使它們能盡快執行完成;
剩余執行時間最多的進程:對應于剩余時間最短者優先的進程調度算法,將剩余執行時間最多的進程掛起對其響應時間的影響不明顯。 與50位技術專家面對面20年技術見證,附贈技術全景圖
總結
以上是生活随笔為你收集整理的[OS复习]虚拟存储管理技术2的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 改變HTML中的光標問題
- 下一篇: 克制懒惰之飞鸽传书版