OS 李治軍 L23 段頁結合的實際記憶體管理

2022-08-10 23:36:22 字數 1627 閱讀 2552

底層希望段管理,使用者希望頁管理...如何結合呢?

這就引出了虛擬記憶體的概念

我們設定一種位址空間,稱之為虛擬記憶體,向上,可以為使用者提供段;向下,將段對映到物理幀上。

對使用者來說,是段的使用,對物理記憶體來說,是頁的使用。

定址:使用者給出cs: ip,先查段表,訪問某個段內的東西,得到乙個虛擬位址;然後再查頁表,得到實體地址。

總結:作業系統使用了兩層對映,向上為使用者提供段操作,向下為硬體提供分頁管理

實際的東西:

程式如何載入記憶體?

1.割出段

2.建立段表

3.對映到記憶體

4.建立頁表

5.可以用重定位定址

下面是為父程序copy乙個子程序,在記憶體上的操作:

p是pcb,nr是pcb的號碼,每個人從虛擬記憶體中割出64m空間,作為分給程式的段,將基位址分給pcb的ldt。

以上**完成了1,2兩步。

我們可以發現虛擬位址不重疊,所以對應的頁號不重疊,所以可以共用一套頁表。實際上可能是會有重疊的,所以每個程序都應該要有自己的頁表。

現在要完成二次對映,分頁建立頁表。

共用父程序的記憶體,所以沒有分配記憶體,但有建立頁表的部分。

本來是右移22位,但是得到的只是索引號,具體的位址還要4,因為每項的大小是4,>>224=>>20且右邊兩位清零。

現在要用到新的頁表項,所以要為其分配實際的物理記憶體頁,原先是沒有的,這體現了分級頁表的特點,申請由mem_map完成,注意記憶體是本來就須臾原先程序的。

上面是賦值部分,簡單了。注意小細節,mem_map的值加1,表示引用這塊記憶體的程式+1。

以上完成了步驟3,4。

最後一步:

最後看*p=7是怎麼工作的,實際上是對映都是由硬體部分mmu完成。

OS 李治軍 L22 多級頁表與快表

分頁會有問題,為了提高利用率,頁應該小吧,但這樣頁表項就會增加 到後面就會膨脹得很厲害。例如,4k的頁,4g的物理,那麼就會有4g 4k 4m個頁表項!不僅如此,每個程序的pcb都要儲存乙份頁表。但實際上大部分邏輯位址根本不會用到,能不能把頁表壓縮?第一種嘗試 只存放用到的頁,用到的邏輯頁才有頁表項...

段頁結合的實際記憶體管理 虛擬記憶體 OS

如何讓作業系統既支援段又支援頁?虛擬記憶體 我們讓應用程式分為段,然後對映到一段虛擬記憶體中,再讓虛擬記憶體對映到物理記憶體中的頁中,這樣就完成了段和頁的結合 段 頁同時存在時的重定位 位址翻譯 乙個實際的段 頁式記憶體管理 記憶體管理核心 記憶體分配 使用記憶體分為五步 1.分配段 建段表 for...

OS 李治軍 L28 生磁碟的使用

磁碟具有更複雜的結構,在作業系統內有著更為複雜的抽象層次,這裡的生 raw 是讓disk跑起來的意思。可以將磁碟的結構理解為多個原片疊起來的柱面,我們用以下的引數取描述乙個磁碟 理論上,我們要操控乙個磁碟,就要對其控制器發出指令,控制磁頭的電機,使磁頭移動到相應的軌道上去 找到乙個柱面 然後開始旋轉...