在前一段時間分別學習了面向開發人員的分段載入思想和面向記憶體的分頁思想。在計算機實際的記憶體管理中,往往是兩者兼具,聯絡它們之間的橋梁就是虛擬記憶體,而虛擬記憶體的實現離不開記憶體的換入換出。因此,以虛擬記憶體為橋梁,同時實現程式分段和記憶體分頁思想便構成了作業系統的記憶體管理影象。在段頁式系統的記憶體管理影象中,邏輯位址結構由三部分組成:段號、頁號和頁內偏移量。它們所佔的位數直接決定了分段、分頁和頁內容量的最大程度。分段機制對於使用者是顯式可見的,但是分頁機制卻是由系統自動完成的,系統將根據段號資訊直接分配頁號和頁內偏移,整個過程對於程式設計師來說是不可見的。在實際使用中,程式所占用的空間大小往往是大於實際的記憶體大小的。一種簡單的解決方案是:當某一段程式段需要使用的時候,再將**從磁碟中讀取出來放入記憶體當中,並且只對當前使用的程式段建立虛擬記憶體和物理記憶體之間的頁表對映。
該過程實現的關鍵步驟是
請求調頁
:系統讀入**中的邏輯位址,通過pcb查詢到基位址資訊,再經過段內偏移得到虛擬位址,查詢頁表尋找關於實體地址的對映。如果發生缺頁,則進行中斷處理,從磁碟中去請求調頁,對映到實際的實體地址。
記憶體換入的思想非常成功地建立了程式虛擬記憶體和實體地址之間的對映,但是記憶體不能不限換入,必須得有換出。而記憶體換出要考慮的最重要的問題是換出哪一段頁表對全域性最有利。
最完美的置換演算法是min演算法,將最遠使用的頁表淘汰,效率最高。但是min演算法需要預先知道未來頁表的使用情況,因此,實際上該方案並不可行。
不過,根據區域性性原理,可以在一定程度**將來的乙個情況,模擬min的演算法思想,即
lru演算法思想
:lru的準確實現演算法頻繁修改資料或指標會嚴重影響執行效率,因此採用以clock演算法為核心的近似實現。
核心思想
:系統每訪問一頁時就將對應的r設為一,在各個分頁對應的r之間以佇列的形式首尾相連形成閉合迴路。中間的指標指向不斷沿著佇列移動,將r=1的位置置為0,如果連續兩次r都為0,則將該頁面換出。這種通過給予二次機會再換出的思想近似地淘汰了最近一段時間出現較少的頁表。
演算法分析與改進
:實際系統中缺頁發生的概率是比較低的,指標移動一圈的過程中系統又使用了太多的分頁,導致r剛被置換成0,立刻就又回到了1,最終該演算法不斷淘汰的是指標起始指向位置對應的分頁,退化成了原始的先進先出結構。引入乙個移動速度迅速的掃瞄指標將r置為0,原指標用於淘汰頁表,成功地解決了該問題。
注
:為了讓cpu利用率達到較高的水平,我們還應該控制併發程序的數量。虛擬記憶體管理
定義 虛擬記憶體是計算機系統記憶體管理的一種技術。它使得應用程式認為它擁有連續的可用的記憶體 乙個連續完整的位址空間 而實際上,它通常是被分隔成多個物理記憶體碎片,還有部分暫時儲存在外部磁碟儲存器上,在需要時進行資料交換。我的理解 程序例項在使用者態並不直接操作物理記憶體位址,實際物理記憶體是可能是...
段頁結合的實際記憶體管理 虛擬記憶體 OS
如何讓作業系統既支援段又支援頁?虛擬記憶體 我們讓應用程式分為段,然後對映到一段虛擬記憶體中,再讓虛擬記憶體對映到物理記憶體中的頁中,這樣就完成了段和頁的結合 段 頁同時存在時的重定位 位址翻譯 乙個實際的段 頁式記憶體管理 記憶體管理核心 記憶體分配 使用記憶體分為五步 1.分配段 建段表 for...
記憶體管理 物理記憶體 虛擬記憶體
記憶體管理 物理記憶體 pc上有三條匯流排,分別是資料匯流排 位址匯流排和控制匯流排。32位的cpu的定址能力為4gb 2 32 個位元組。使用者最多 可以使用4gb的真實的物理記憶體。記憶體管理 虛擬記憶體 windows的所有程式 包括ring0層和ring3層的程式 可以操作的都是虛擬記憶體。...