作業系統筆記 第4章 非連續記憶體分配

2021-10-04 11:07:26 字數 2037 閱讀 4344

(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.分配策略 優勢 簡單,易於產生較大的空閒塊 缺...