如何將程式中的**段、資料段等內容存放在記憶體中?
1、採用可變分割槽的方法,每次存放程式段之前找到與之大小匹配的空閒記憶體段,然後存放進去。
2、採用此種方法需要維護2個核心資料表:空閒分割槽表和已分配分割槽表。
3、此種方法隨著程序段的增多會造成大量的小空閒分割槽,也叫作記憶體碎片。如果不加以處理,會降低記憶體使用率。
4、當出現大量的記憶體碎片時,可以採用記憶體緊縮的方法,合併空閒分割槽,去除記憶體碎片。但這種記憶體緊縮的演算法很耗時間,會造成使用者端程式假死的現象,所以不可直接使用。
總結:引導程式段時不能直接使用記憶體分割槽這種方法。
單頁表的占用記憶體空間很大,所以多級頁表的出現有效地緩解了這一問題。多級頁表占用的記憶體很小。
1、多級頁表的本質是將原來的單頁表整理成頁目錄與頁表的上下級訪問形式。這樣假如原來10000個單頁表項就會整理成100個頁目錄項與100個頁表項級聯的形式,這樣做有什麼好處呢?或者說與之前的單頁表形式有什麼優點呢?
2、我們知道我們寫的程式一般不會全部占用完2的32次方的位址空間,可能就是很少的位址空間。如果是單純的單頁表形式訪問,那就要2的32次方個頁表項使用記憶體,太浪費記憶體了。如果採用頁表級聯的方式,只會占用一小部分頁表項使用記憶體,會大大減少記憶體使用。這也是利用了程式中不會佔滿位址空間的特點。
3、不過這種多級頁表會出現乙個問題,雖然記憶體空間使用率大大提高,但是時間可能會耗時較多。當出現3、 4、 5等多級頁表時,計算機每訪問一次記憶體前都要訪問5、 6、 7次的記憶體,浪費時間。怎樣解決這個問題呢?
快表的出現在一定程度上降低了通過頁表訪問記憶體位址的時間。計算機中會有乙個暫存器tlb,記錄快表的,是硬體做的。快表會儲存最近多級頁表使用的頁表號-頁碼框號的相聯,不過只能儲存一定數量,因為這個硬體比較貴,而且既然是硬體做的,肯定有數量限制的。
1、快表一般儲存64-1024個頁表號-頁碼框號相聯,可以實現將近訪問記憶體一次的效果。
2、採用快表這一策略是利用了我們寫程式時的位址訪問的空間區域性性。
應該配合**解說的,待完善。
作業系統之記憶體管理
記憶體管理的功能有 1 空間分配與 2 位址轉換 3 空間擴充 4 儲存保護 將資料與程式裝入記憶體分以下步驟 1 編譯成模組 2 鏈結模組 分靜態 裝入時動態 執行時動態鏈結 3 將模組裝入記憶體 分絕對裝入 可重定位裝入 執行時動態裝入 邏輯位址與實體地址 訪問資料時是使用實體地址獲取資料,多個...
作業系統之記憶體管理
位址對映和重定位是乙個概念 適應於請求段的記憶體分配方法是最佳適應和可變分割槽 可重入 reentrant code 又稱為 純 purecode 是一種允許多個程序同時訪問的 為使各個程序所執行的 完全相同,絕對不允許可重入 在執行中有任何改變。目的 擴充主存容量 最基本的特徵 多次性 最主要的技...
作業系統之記憶體管理
便於程式設計師編寫程式 分治 可以控制每個段的許可權 寫 讀 符合跳轉指令邏輯 段號,段內偏移 執行時重定位 當執行某條指令時才進行位址重定位,先查詢程序pcb指向的段表,然後根據偏移量算出實體地址。編譯時重定位 編譯時就把所有跳轉指令進行重定位。缺點 導致必須使用重定位後的那一段記憶體,若那一段記...