操做系統----->>>>>關於段頁式內存管理的總結

內存管理的技術主要有: 程序員

固定分區內存管理、可變分區內存管理、簡單頁內存管理、虛擬內存頁式管理、簡單段內存管理、虛擬段內存管理 算法

這6中技術。其實還有一種是結合了段和頁式內存管理的方案。下面主要討論段頁式內存管理。 數據結構



開講以前,明白一個結論:頁式內存對程序員透明,而段式內存管理,則不。 性能

一                            原理部分 spa

簡單頁內存管理---> 操作系統

原理:進程被組織成若干頁,造成的頁表。頁表中的每一項包括頁號、偏移地址、控制位(如修改位,讀取位等)等。當進程運行時進程頁被所有加載到內存中(在沒有覆蓋技術的系統中,反之,則能夠部分加入)。當cpu 發生存儲器訪問(尋址)時,會發生邏輯地址(進程頁號,偏移地址)到物理地址或實地址(內存幀號,偏移地址表示)的轉換。即經過邏輯地址的進程頁號做爲索引,和基址寄存器(存放頁表的起始地址=程序運行的首地址)指定的進程頁表,索引到由操做系統維護的空閒內存幀列表中的內存幀(用幀號表示)。再經過幀號+偏移地址獲得一個物理地址。 指針

注意一個概念,進程的頁表由進程自身維護(用於描述自身的頁)。而操做系統也會維護一個空閒內存幀表(由操做系統建立維護,用以描述空閒內存的幀)。這個概念在段式內存管理中一樣適用。 對象

另外,和虛擬內存頁管理不一樣的是,簡單頁內存管理不要求進程的全部頁被加入內存。 索引

存在內部碎片,沒有外部碎片。 進程

進程頁大小=內存幀大小


簡單段內存管理原理-->

原理:程序在編譯時,造成一系列的段。進程會維護一個段表。段中每項包括段號,偏移地址、控制位(修改位、讀取位等控制位信息)等構成。當進程運行時,要求進程全部的段被加載到內存。當cpu發生存儲器訪問(尋址)時,須要把程序用的邏輯地址(段號,偏移地址共同表示),經過基址寄存器或稱爲段表指針(存放進程段表地址=程序執行首地址的寄存器),加上要訪問的段號做爲系統空閒段表的索引,索引到一個空閒內存段。最後+偏移地址,轉換成實際的物理地址(空閒內存段號,偏移地址)。

而進程段表由自身維護,系統會維護一張當前內存空閒段的段表。

要求進程段在進程運行時所有加載。

因爲,每一個進程段大小不一樣,操做系統會根據進程段的大小尋找一塊恰好大小的內粗段存放之。故沒有內部碎片,可是有外部碎片。


虛擬內存下的頁內存管理-->

原理:基本和簡單頁式內存管理別無二致。惟一不一樣的是,進程運行時,不要求進程頁表中的全部頁被映射到內存幀。根據使用時,用到某個頁,如今當前內存駐留頁中查找是否存在該頁,若是有直接存取。不然,經過一個缺頁錯誤(缺頁中斷)就從磁盤中加載此缺頁。另外,若是當前內存中內存已滿,則某些頁會被換出內存(寫回磁盤)。

極端的是,當進程被掛起時,在這以前,該進程的全部頁都將被換出內存,當進程喚醒時,再加入內存。


虛擬內存下的段內存管理:

原理:基本和簡單段式內存管理別無二致。惟一不一樣的是,不要求進程在運行時所有加入進程段。而是根據須要如虛擬頁式內存管理同樣,動態的加載與換出。所以,在理論上,每一個進程擁有一個和物理內存同樣大的虛擬內存空間。

好比,一個32位地址系統,物理內存時4GB,則每一個進程擁有一個4GB的虛擬內存空間。


二                                優缺點對比


三                                基本術語


頁、段、幀:

 頁式進程的概念,段也是進程的概念,幀是頁的物理內存映射,這個幀表有OS維護。

段表地址、頁表地址、程序運行首地址、基址以及基址寄存器的關係?

段表中的每一個段都有本身的首地址(邏輯地址),段表描述進程中的每一個段。

頁表由進程維護,描述每一個進程頁未來映射到的空閒內存幀。

程序運行首地址通常和段表、頁表首地址相同。基址也是如此,而基址寄存器存放基址

故以上的幾個概念大體能夠化等號。它們描述的對象是同樣的。注意在不一樣場合,靈活對待。

 

虛擬內存:

書上的概念是將輔助存儲的一部分做爲內存的擴展。也就是看成「內存」來用。

內存抖動:

進程的頁或段頻繁地在內存和磁盤(輔助存儲)之間來回移動。好比,當你準備換出的頁或段在換出的補償時間內,有將被讀入。並反覆如此,就會致使內存抖動。

地址重定位:

邏輯地址到物理地址的映射過程。

邏輯地址:

段式邏輯地址=段號,偏移地址

頁式邏輯地址頁號,偏移地址

物理地址:

實際存儲的地址

基址寄存器:

通常存放程序執行地址的寄存器。

進程頁表:

頁式內存系統下,用於描述進程的數據結構

內存空閒幀表

進程頁映射到的空閒內存幀的集合

進程段表

段式內存下,用於描述進程的數據結構

內存空閒段表

進程段可以映射的實際內存段的集合

虛擬地址空間:

使用虛擬存儲的系統,每一個進程理論上擁有的地址空間。


存儲器訪問(或尋址)會發生什麼?

會發生地址重定位(程序的邏輯地址---->物理地址的轉換)

頁請求策略

頁放置策略

頁替換策略

頁替換策略分爲四大頁替換算法:

最優替換策略(OPT):將當前駐留在內存中的,那些下次將要被訪問的時間間隔最長的內存頁替換出去(從主存寫回磁盤)。這是一種預計未來的思想,這種算法固然是性能比較好的。這種玩意兒理解起來極其簡單,也就是在當前的頁訪問序列中,未來最不可能被訪問的幀被替換出去。產生 的頁錯誤(頁中斷)次數最少。因爲它預測了未來會發生什麼,在現實中,它一般是不能實現的。

效率高,可是不易實現


最近最少使用替換算法LRU(Least recent use):把那些最近使用最不頻繁的內存頁替換出去。即離當前訪問序列中最遠的那個內存頁(實際上是幀,爲方便表述,將進程頁的概念等價爲內存幀。)

效率接近OPT,可是不易實現


FIFO替換算法(先進先出算法):這種算法是將當前駐留在內存中的最早進內存的頁替換出去。

實現簡單,可是效率低下,發生頁錯誤的次數高。


時鐘替換算法(Clock算法):一種類FIFO算法,可是又不一樣。這種算法這種了效率和實現難度以及開銷三者的利弊。科學家主要對這個小子進行開發。因此,大多數效率比較高的幀替換算法都是Clock替換算法的變種。

------>>>>>>好好掌握Clock算法很是關鍵。


效率比較:OPT>LRU>CLOCK>FIFO

相關文章
相關標籤/搜索