作業系統總結(八)記憶體管理

2021-07-25 22:38:46 字數 2103 閱讀 8305

為了使程式可以在記憶體正確執行需要對其出現的位址進行修改(重定位),重定位有三次機會,包括編譯連線時進行(**只能放到固定的位置)、在載入記憶體中進行(一旦載入記憶體**無法移動)以及在程式執行過程中進行。其中最後一種是最合適的重定位機會。這樣對後續的記憶體管理有極大的好處。

引入交換(swap)的概念,能夠讓更多的程序併發執行。即隨著程序的執行,當程序在不同的執行狀態下需要對其在記憶體和磁碟中進行換入換出操作。

執行時進行重定位可以實現程序之間的資料保護,即不同程序之間不能破壞其他程序的資料。

載入記憶體後程式使用邏輯位址,邏輯位址和執行實體地址之間需要位址轉換。

對於一塊連續的記憶體我們可以採用如下的方式將其分配給不同的程序:

固定分割槽-變長分割槽:初始將分割槽分為大小不同的多個記憶體區,將較為合適的分給相應的程序。(不合理,還是分多大和浪費的問題)

可變分割槽:分割槽的大小隨著程序的需求可以改變,根據程序的需求進行分割。

因為連續記憶體分配中的一些難以解決的問題,引出了分段管理記憶體。

對於一段**,分為了資料段、**段、、、,因此程式中的位址為段基位址+偏移。引入段記憶體管理將一維位址空間變為了二維。各個段可以分散放入記憶體中。對於每乙個程序來說,都需要記錄多個段的基位址(**段、資料段等等),使用分段管理記憶體,仍然需要有記憶體分割槽表、記憶體分配演算法。對於分段管理記憶體,位址翻譯首先從段表獲得段的基位址,然後和段的偏移相加,然後判斷位址合法性,便獲得了真實的實體地址。當程序切換時,段表也需要切換。

缺點:需要空間預留,空間很大卻不能分配,即有大的內部碎片。還會產生外部碎片。空間利用低效。

將記憶體分為小的頁(4k),用一點分配一點,不會有外部碎片,內部碎片有上界。分頁的記憶體管理需要頁表資料結構的支援,即使用者的虛擬位址在頁表中通過頁號獲得記憶體的幀號,根據頁內偏移,獲得真實的實體地址。問題

多級頁表:

2的20次冪個頁表項,每個4位元組,都放在記憶體,要4m記憶體,系統同時併發10個程序,就需要40m的記憶體來儲存頁表,但是大部分頁表中的邏輯位址都用不到。因此引入多級頁表,頂級頁表常駐記憶體,不需要對映的邏輯位址不需要建立頁表項。32位邏輯位址格式(多級頁表):頁目錄號、頁表號、頁內偏移。從頁目錄中獲得頁表的位址,根據頁表號得到頁框,根據偏移得到真實的實體地址。

缺點:多級頁表使記憶體翻譯速度更低因此需要提高速率。

怎樣提高速率:增加硬體的支援tlb:首先到tlb中尋找頁號,沒有命中才到頁表中查詢。(tlb**昂貴,因此比較小,但是根據程式區域性性原理,其命中率很高,因此可以提高速度。tlb表的內容動態變化。(未命中,裝入,tlb已經滿了,替換乙個,程序切換後,flush tlb)

分頁管理的優缺點:

優點:靠近硬體,結構嚴格,高效使用記憶體。缺點:不符合程式設計師思考習慣。

讓段面向使用者,頁面向硬體

實現機理:程式的段劃分的是線性位址空間(如0-4g),線性位址空間和記憶體被分割大小相等的片(頁和頁框),程序用頁表建立頁和頁框的對映,程序建立申請段(線性位址空間),段申請頁(物理記憶體),邏輯位址通過段表加頁表算出實體地址,到達記憶體,程序切換時,段表和頁表都跟著切換。優點:符合程式設計師習慣,並可高效利用記憶體,缺點:複雜,訪問一次位址需要查表好多次。

段頁結合的例子x86:

概念:實模式,記憶體位址20位,1m。保護模式,位址32位,4g。

保護模式開啟分頁機制;實模式和保護模式分段管理有區別;實模式段暫存器中儲存段基址;保護模式段選擇器儲存段描述符表中的索引;

實模式稱為:段暫存器(cs,ds,es,ss),保護模式稱為:段選擇器(6個)。

對於段選擇器(段選擇子):d3-d15位是索引值,d0-d1位是優先順序(rpl)用於特權檢查,d2位是描述符表引用指示位ti;ti=0指示從全域性描述表gdt中讀取描述符,ti=1指示從區域性描述符中ldt中讀取描述符。

gdt:全域性段表,程序共享,ldt和tss入口

ldt:區域性段表,程序獨有

ldtr:當前程序的ldt索引

tss:任務狀態段,儲存任務各暫存器值。通過tr暫存器訪問。其儲存的內容包括任務的cpu現場(通用暫存器、段選擇暫存器、指令指標、標誌暫存器等);特權級分別為0、1、2時的堆疊段選擇符和棧頂指標;該任務被呼叫時,前乙個任務tss的返回連線選擇符;io允許點陣圖等。

t0=1: gdtr->gdt && ldtr -> ldt && 段選擇子索引&&偏移 ->線性位址 &&cr3 -> 頁目錄基位址 -> 頁表 ->頁框->實體地址

總結 作業系統記憶體管理

本文件為面試精華版,如果是初學者,建議從專欄學習 作業系統專欄 4.分頁機制和分段機制有哪些共同點和區別呢?5.解釋一下邏輯 虛擬 位址和實體地址 6.cpu定址了解嗎?為什麼需要虛擬位址空間?作業系統的記憶體管理主要負責記憶體的分配與 malloc 函式 申請記憶體,free 函式 釋放記憶體 另...

作業系統記憶體管理總結

頁面淘汰策略 1 最佳演算法 opt演算法 淘汰以後不再需要或最遠的將來才會用到的頁面 實踐中該演算法無法實現 2 先進先出淘汰演算法 fifo 淘汰在記憶體中停留時間最長的頁面。3 最久未使用淘汰演算法 lru 淘汰最長時間未被使用的頁面。4 最不經常使用演算法 lfu 選擇到當前時間為止被訪問次...

作業系統記憶體管理

作業系統記憶體管理 一 程序的虛擬位址空間 每個程序都被賦予自己的虛擬位址空間,對於32位程序來說,這個位址空間為4g,因此程序中的位址可以為0x00000000至0xffffffff之間的任何乙個值。其中4g空間中的低區的2g空間留給程序使用,而高區的2g空間則留給系統使用。在windows200...