(1)分配給乙個程式的物理記憶體是連續的
(2)記憶體利用率較低
(3)有外碎片、內碎片的問題
* 非連續分配的主要問題在於管理開銷本身
物理記憶體管理需要考慮這樣乙個問題:如何建立虛擬位址和實體地址之間的轉換。這個問題有兩種解決方案——軟體(開銷大)和硬體。因此需要重點考慮如何利用已有的硬體協助非連續物理記憶體管理。而分段和分頁是主要的硬體方案。
1.1 程式的分段位址空間
當1234從邏輯位址對映到實體地址空間,大小和位置都變得不同。
分段的邏輯檢視:
1.2 分段定址方案現在的cpu大多採用分頁的機制。在分段機制中段的大小可變,但是分頁機制中頁的大小是固定的,目的是便於硬體對其做相應的實現。
2.1 分頁位址空間
(1)幀(frame)
乙個記憶體實體地址是乙個二元組(f,o)
【f_幀號(f位,f指位址空間中減去o佔的位數剩下的位數。共有2f 個幀);o_幀內偏移(s位,s指o佔的位數,即頁幀的大小。每幀有2s位元組)】
實體地址=2s * f + o
(2)頁(page)
乙個邏輯位址是乙個二元組(p,o)
【p_頁號(p位,2p個頁);o_頁內偏移(s位,每頁有2s位元組)】
虛擬位址=2s * p + o
工具:
2.3 頁表(page table)
2.3.1 頁表概覽
頁表:以頁號為索引儲存的幀號。(flags | frame num)
分頁機制的效能問題
(1)訪問乙個記憶體單元需要2次記憶體訪問
(2)頁表可能非常大
例如:64位機器如果每頁1024位元組,那麼乙個頁表的大小是多少? 254–>邏輯位址空間很大可能導致頁表很大
解決方案
2.3.2 mmu/tlb(translation look-aside buffer)(快表)
結構:key | value
快取近期訪問的頁幀轉換表項。
能夠避免一次對頁表的訪問,使定址開銷得到降低。
2.3.3 二級 / 多級頁表
(1)二級頁表
將頁表劃分為一級頁表p1(儲存page table,即二級頁表的起始位址)、二級頁表p2(儲存各個page table對應的 【flags | frame num】)。
以二級頁表的方式進行定址,顯然多了一次頁表訪問,開銷變大。但是以此種方式進行定址,一些沒有必要訪問的頁表項不占用記憶體。
(2)多級頁表
通過把頁號分為k部分,來實現多級間接頁表,即建立頁表「樹」。
總的來說,多級頁表是一種以時間為代價來節省空間的思想;tlb是以空間為代價節省時間的思想。二者相輔相成、互為補充。
2.3.4 反向頁表(inverted page table)
基於頁暫存器(page registers)的方案
page registers 結構:【幀號f | 頁號p】
(1)優勢
(2)弊端
基於關聯記憶體(associative memory)的方案
類似於tlb。能夠並行地查詢頁號對應的頁幀號。
兩種方案總結:反向頁表設計方面可以做得很好,但成本、代價大,導致無法做得特別大,而且大的儲存會拉緩查詢速度。這些問題導致反向頁表不夠實用。
在反向頁表中搜尋乙個頁對應的幀號的步驟
限制因素:
優化方案:基於雜湊(hash)查詢的方案
(1)優勢
(2)弊端
作業系統 記憶體非連續分配方式
基本分頁儲存方式 1 把記憶體分為乙個個小分割槽,再按照分割槽大小把程序拆分成乙個個的小部分,比如每個分割槽4kb,每個分割槽就是乙個頁框 頁幀 頁存塊 物理塊,頁框號從0開始 2 將程序也分成和頁框大小相等的乙個個區域,稱為頁 頁面,每個頁面也有個編號,頁號也是從0開始的 3 將程序分頁然後離散的...
作業系統 記憶體非連續分配方式
基本分頁儲存方式 1 把記憶體分為乙個個小分割槽,再按照分割槽大小把程序拆分成乙個個的小部分,比如每個分割槽4kb,每個分割槽就是乙個頁框 頁幀 頁存塊 物理塊,頁框號從0開始 2 將程序也分成和頁框大小相等的乙個個區域,稱為頁 頁面,每個頁面也有個編號,頁號也是從0開始的 3 將程序分頁然後離散的...
作業系統 2 物理記憶體(連續非連續)的管理
一.計算機體系結構 在os中管理記憶體的不同方法 實現高度依賴於硬體 二.位址空間 位址生成 1.位址空間定義 2.位址生成 3.位址安全檢查 三.連續記憶體分配 1.記憶體碎片問題 空閒記憶體不能被使用 2.簡單的記憶體管理方法 分割槽的動態分配 3.分配策略 優勢 簡單,易於產生較大的空閒塊 缺...