操作系統-虛擬內存的一些思考

爲什麼 32 位最大尋址內存空間爲 4GB 呢

32 位代表有32最小是32個0,最大是32個1 ,這樣可以表示的空間數量,那這個數量有多少呢? 有2的32次方,假如我們以字節(Byte)作爲單位,
也就是說 32位用來尋址到2的32次方個字節 , 也就是 4GB

已知頁的大小爲 4KB , 計算一下大概需要多大的頁表 ,每一頁的頁表項爲 4Byte

4GB 的空間,頁大小爲 4KB , 共分成了2的20次方個頁 , 假如用一個頁表項來表示一頁,那麼就會有2的20次方個頁表項,一個頁表項爲 4Byte ,所以所有頁表項的
大小就爲 4 乘以 2的20次方 的Byte , 也就是 4MB , 假如我們的頁表也是從磁盤中加載的話, 4MB 換算成頁,共需要 1024 頁 ,

這樣的話 ,我們的頁表項數量太多了,放在一張頁表中 ,所以一般的操作系統系統都使用“多級頁表” , 如下圖 :

1297993-20211103193929504-616088899.png

於是出現了“根目錄”和“分級目錄” , 現在我們將 4MB 的大頁表繼續集成到小一點的頁表,這個小一點的頁表也是“根目錄” ,根目錄的大小爲 4KB ,剛好是一個頁的大小 , 所以當我們在缺頁的時候 ,而該進程從來就沒加載過 ,那麼最多隻需要加載兩次, 一個根目錄,一個分級目錄,就可以找到對應的頁框號

這裏需要注意 , 我們上面講到我們已經通過頁表,頁表項找到對應的頁框號, 頁表項中有一項是來表示“該頁”是否在內存中的, 假如不在那麼就需要通知磁盤去加載頁到內存中去, 這個過程都是由 MMU 來完成的 。

過程如下 :

1297993-20211103221816971-1233187490.png

1297993-20211103221908532-503426218.png

頁表在哪裏

描述來自[知乎](https://www.zhihu.com/question/63375062),非原創

頁表在哪裏?一般來說,任何進程切換都會暗示着更換活動頁表集。Linux內核爲每一個進程維護一個task_struct結構體(即進程描述符PCB),task_struct->mm_struct結構體成員用來保存該進程的頁表。在進程切換的過程中,內核把新的頁表的地址寫入CR3控制寄存器。CR3中含有頁目錄表的物理內存基地址,因此該寄存器也被稱爲頁目錄基地址寄存器PDBR(Page-Directory Base address Register)。

虛擬地址怎麼轉化爲物理地址?

描述來自[知乎](https://www.zhihu.com/question/63375062),非原創

對於每次轉換,MMU首先在TLB中檢查現有的緩存。如果沒有命中,根據CR3寄存器,Table Walk Unit將從內存中的頁表查詢。

1297993-20211103225712627-1920617830.jpg

MMU 相關

MMU 的工作如下 :

1297993-20211103224659437-1669130.png

MMU 是一個硬件來的,那麼爲什麼不能用軟件來實現 MMU 呢? 可以參考這個問題

主要的原因在於防止程序的跨域訪問不該訪問的內存空間這一點。

MMU 的作用

下面引用自 : https://whatis.techtarget.com/definition/memory-management-unit-MMU
講述 MMU 的三個作用
The work of the MMU can be divided into three major categories:

- Hardware memory management, which oversees and regulates the processor's use of RAM (random access memory) and cache memory.
- OS (operating system) memory management, which ensures the availability of adequate memory resources for the objects and data structures of each running program at all times.
- Application memory management, which allocates each individual program's required memory, and then recycles freed-up memory space when the operation concludes.

參考資料

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章