2020-11-25(多级页表的补充)
問題來了,為什么要用二級頁表而不使用一級頁表,或者說使用二級頁表比一級頁表的優勢在哪里?
(1)使用多級頁表可以使得頁表在內存中離散存儲。多級頁表實際上是增加了索引,有了索引就可以定位到具體的項。舉個例子:比如虛擬地址空間大小為4G,每個頁大小依然為4K,如果使用一級頁表的話,共有2^20個頁表項,如果每一個頁表項占4B,那么存放所有頁表項需要4M,為了能夠隨機訪問,那么就需要連續4M的內存空間來存放所有的頁表項。隨著虛擬地址空間的增大,存放頁表所需要的連續空間也會增大,在操作系統內存緊張或者內存碎片較多時,這無疑會帶來額外的開銷。但是如果使用多級頁表,我們可以使用一頁來存放頁目錄項,頁表項存放在內存中的其他位置,不用保證頁目錄項和頁表項連續。
(2)使用多級頁表可以節省頁表內存。使用一級頁表,需要連續的內存空間來存放所有的頁表項。多級頁表通過只為進程實際使用的那些虛擬地址內存區請求頁表來減少內存使用量(出自《深入理解Linux內核》第三版51頁)。舉個例子:一個進程的虛擬地址空間是4GB,假如進程只使用4MB內存空間。對于一級頁表,我們需要4M空間來存放這4GB虛擬地址空間對應的頁表,然后可以找到進程真正使用的4M內存空間。也就是說,雖然進程實際上只使用了4MB的內存空間,但是為了訪問它們我們需要為所有的虛擬地址空間建立頁表。但是如果使用二級頁表的話,一個頁目錄項可以定位4M內存空間,存放一個頁目錄項占4K,還需要一頁用于存放進程使用的4M(4M=1024*4K,也就是用1024個頁表項可以映射4M內存空間)內存空間對應的頁表,總共需要4K(頁表)+4K(頁目錄)=8K來存放進程使用的這4M內存空間對應頁表和頁目錄項,這比使用一級頁表節省了很多內存空間(對于一級頁表,我們需要4M空間來存放這4GB虛擬地址空間對應的頁表,然后可以找到進程真正使用的4M內存空間,不管使用了多少,一級頁表一旦建立,就是4MB,4MB的駐留空間(上文已經解釋))。當然,在這種情況下,使用多級頁表確實是可以節省內存的。但是,我們需要注意另一種情況,如果進程的虛擬地址空間是4GB,而進程真正使用的內存也是4GB,如果是使用一級頁表,則只需要4MB連續的內存空間存放頁表,我們就可以尋址這4GB內存空間。而如果使用的是二級頁表的話,我們需要4MB內存存放頁表,還需要4KB內存來存放頁目錄項,此時多級頁表(4KB+4MB)反倒是多占用了內存空間。注意在大多數情況都是進程的4GB虛擬地址空間都是沒有使用的,實際使用的都是小于4GB的,所以我們說多級頁表可以節省頁表內存。
那么使用多級頁表比使用以及頁表有沒有什么劣勢呢?
當然是有的。比如:使用以及頁表時,讀取內存中一頁內容需要2次訪問內存,第一次是訪問頁表項,第二次是訪問要讀取的一頁數據。但如果是使用二級頁表的話,就需要3次訪問內存了,第一次訪問頁目錄項,第二次訪問頁表項,第三次訪問要讀取的一頁數據。訪存次數的增加也就意味著訪問數據所花費的總時間增加。
總結:
多級頁表優勢:
1.可以離散存儲頁表。
2.在某種意義上節省頁表內存空間。
多級頁表劣勢:
增加尋址次數,從而延長訪存時間。
總結
以上是生活随笔為你收集整理的2020-11-25(多级页表的补充)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2020-11-24(Windows保护
- 下一篇: 2020-11-26((《深入理解计算机