当前位置:文档之家› 第八章记忆体管理

第八章记忆体管理


置換(Swapping) 置換
一個行程可以暫時被置換出記憶體到一個備份設 備, 當要執行時才被置換回記憶體. 備份設備(Backing store) – 快速磁碟機,容量大到 足夠容下所有使用者的記憶體映象的容量;必須 提供對於這些記憶體映象的直接存取. Roll out, roll in – 用在優先權為主的排程演算法 中的置換的變化方式; 低優先權的行程被置換出 記憶體使得高優先權的行程可以被載入並執行. 大部分的置換時間都花在傳輸時間; 總傳輸時間 是與要置換的記憶體容量成正比. 置換(swap)的不同版本被用在許多實際系統上 i.e., UNIX, Linux, and Windows.
Operating System Concepts
8.9
Silberschatz, Galvin and Gagne ©2002
重疊(Overlays) 重疊
任何時間只將需要用到的指令及資料放在記憶 體. 這個機制會在行程需要的記憶容量大於所配置 的記憶體的容量時. 由使用者要去負責設計, 重疊結構的程式設計是 複雜的.
一個邏輯位址空間觀念是限制在一個另一個實 體位址空間,這樣的觀念是一般作業系統記憶 體管理的核心.
邏輯位址(Logical address) – 是由CPU所生成;通常 也當作是虛擬位址. 實體位址(Physical address)–以系統來看實際記憶單 元的位址.
邏輯位址與實體位址在編譯時期與載入時期是 相同的, 但是到了執行時(Execution time)邏輯( 虛擬)與實體位址在執行時期的位址連結設定機 制(address-binding scheme)中就變得不同了.
Operating System Concepts 8.12 Silberschatz, Galvin and Gagne ©2002
置換機制示意圖
Operating System Concepts
8.13
Silberschatz, Galvin and Gagne ©2002
連續位址配置 (Contiguous Allocation)
Operating System Concepts
8.19
Silberschatz, Galvin and Gagne ©2002
頁機制(Paging) 頁機制
一個行程的邏輯位址空間可以不是連續的,行程只有在 有記憶體空間可用時才配置實體記憶體. 將實際記憶體分成固定大小的區塊,稱為框架 框架(frame) (大 框架 小為2的次方,介於512 bytes與8192 bytes之間). 將邏輯記憶體分成與上述大小相同的區塊,稱為頁. 頁 需要追蹤所有可用的框架. 執行一個需要大小為n頁的程式, 就需要去找到n個可用框 架來載入程式. 要設定一個頁表格(page table)來將邏輯位址轉換到實體 位址. 會有內部碎片(Internal fragmentation).
動態連結(Dynamic Linking) 動態連結
連結的動作延遲到執行時間. 有一小段程式碼稱為票根(stub), 用來找到適當 對應的常駐在記憶體的程式庫模組. 這時票根會將位址換成這個模組的位址, 然後再 去執行這個模組. 作業系統需要檢查這個模組是否在行程的記憶 體位址. 動態連結對程式庫的呼叫特別有用.
8.1
Silberschatz, Galvin and Gagne ©2002
背景資料
使用者程式必須放置記憶體中並且成為行 程的一部份才可以被CPU執行. 輸入佇列 – 是在磁碟上的一群行程正等待 被置入到記憶體並被執行. 使用者的程式在被執行前需要經過幾個步 驟.
Operating System Concepts
所以必須要搜尋整個可用串列,除非串列已經有洞 大小的排序. 會產生剩下空間最小的洞.
最差大小的洞(Worst-fit): 配置最大的可用洞
也必須搜尋整個串列. 會生成剩下空間最大的洞. 以處理速度及儲存體使用率來看, 以處理速度及儲存體使用率來看,第一優先與最佳優先會 比最差優先的配置方法來得好. 比最差優先的配置方法來得好.
內部碎片(Internal Fragmentation)
配置到的記憶體大小可能比原本要的大小大一些,這樣大小的 差異是記憶體內部切割所造成,這塊區域卻不能使用.
可以經由重組(compaction)來減少外部碎片
將記憶體重組後可以把可用記憶體碎片形成一塊較大的可用區 塊. 重組只有在重定位機制是可以動態執行時才有可能,重組是在 執行時間完成. 當程式在執行I/O時的問題
Operating System Concepts
8.20
Silberschatz, Galvin and Gagne ©2002
位址轉換機制
由CPU所產生的位址參考可以分成:
頁號碼(Page number)(p)
當作一個對應到頁表格的索引值,表格內包含了每一個頁 對應到實體位址的基底位址.
頁位移(Page offset)(d) – 與基底位址共用來定義送 到記憶體單元的實體記憶體位址.
Silberschatz, Galvin and Gagne ©2002
Operating System Concepts
8.6
使用一個重定位暫存器的動態重定 位機制
Operating System Concepts
8.7
Silberschatz, Galvin and Gagne ©2002
動態載入(Dynamic Loading) 動態載入
Operating System Concepts 8.5 Silberschatz, Galvin and Gagne ©2002
記憶體管理單元(MMU) 記憶體管理單元
硬體設備將虛擬位址對應到實體位址. 在記憶體管理單元機制中, 當使用者行程在它被 送到記憶體時, 行程中所有參考的記憶體都會加 上在所謂的重定位暫存器(relocation register)中 的值. 使用者程式都使用邏輯位址, 它從不會看到實體 位址
OS process 5 OS process 5 OS process 5 process 9 process 8 process 2
Operating System Concepts
OS process 5 process 9 process 10
process 2
8.16
process 2
process 2
程式只有在它被呼叫時才會被載入 有比較好的記憶體空間使用率, 沒有用到的程式 將不會被載入. 當大量程式碼需要去處理不常發生的事情時, 這 個機制是有用的. 不需要作業系統額外特別的支援, 而使用者設計 程式時需要知道如何去利用這樣的方法.
Operating System Concepts
8.8
Silberschatz, Galvin and Gagne ©2002
Silberschatz, Galvin and Gagne ©2002
動態儲存體配置問題
如何從所有可用區塊所組成的串列中尋找可滿足需求大小為n 如何從所有可用區塊所組成的串列中尋找可滿足需求大小為 的一個可用區塊
第一個找到的優先(First-fit): 配置第一個夠大的 可用區塊(洞,hole). 最佳大小的優先(Best-fit): 配置最小可用的洞
Operating System Concepts 8.17 Silberschatz, Galvin and Gagne ©2002
碎片(Fragmentation) 碎片
外部碎片(External Fragmentation)
剩下的記憶體可用空間可以滿足某一個配置需求,但是這些空 間卻不連續.
Operating System Concepts
8.14
Silberschatz, Galvin and Gagne ©2002
有關重定位暫存器及Limit 有關重定位暫存器及 Registers的硬體支援 的硬體支援
Operating System Concepts
8.15
Silberschatz, Galvin and Gagne ©2002
第八章 記憶體管理
背景資料 置換機制(Swapping) 連續位址配置(Contiguous Allocation) 頁機制(Paging) 分段機制(Segmentation) 兼具有頁機制的分段機制(Segmentation with Paging)
Operating System Concepts
連續位址配置(Cont.) 連續位址配置
多重分割配置Multiple-partition allocation
洞(Hole) – 可用記憶體的區塊; 各類大小的洞會分散 在記憶體中. 當行程到達時, 它會被配置一個足夠可以容下它的記 憶體洞. 作業系統會維持有關已配置分割 可用分割(洞) 已配置分割與可用分割 已配置分割 可用分割(洞)的資 訊
主記憶體通常切割兩大部分:
常駐作業系統, 通常放在有插斷向量的低位址記憶體 部分. 使用者行程放在高位址記憶體.
單一切割的配置
重定位暫存器被用來保護行程間的記憶體操作與保 護作業系統的程式碼及資料. 重定位暫存器含有最小實體位址的數值; limit register 含有邏輯位址的範圍– 每一個邏輯位址的參 考必須小於limit register.
8.2
Silberschatz, Galvin and Gagne ©2002
程式中指令與資料到記憶體間的 連結設定
指令與資料對應到記憶體的位址設定可以發生在下列三個階段. 指令與資料對應到記憶體的位址設定可以發生在下列三個階段.
編譯時(Compile time): 假使記憶體位址是事先 知道的,具有絕對位址 絕對位址的程式碼是可以產生的; 絕對位址 但是起始位址改變時就要重新編譯. 載入時(Load time): 必須要產生可可重定位的程 式碼(relocatable code)如果記憶體 位址在編譯 時無法得知. 執行時(Execution time): 假使行程在執行的過程 中可以從一個記憶體區段到另一個記憶體區段, 這樣的記憶體位址連結設定的時間會延遲到執行 時. 系統需要硬體支援位址的對應 (e.g., base and limit registers).
相关主题