多级页表的好处
在32位系統下,物理內存進行了分頁,每一頁的大小為4kb,如果已經通過分段生成了線性地址空間,然后線性地址空間再去找分頁的物理地址,比如說,找到了是第xxx頁,在通過線性地址里的后12位的offset進行結合找到具體的物理地址,如果只使用了一個頁表,一個表項的大小為4byte,32位系統有4GB的物理空間(一個進程看到是4GB大小的虛擬空間),每一個表項對應著物理空間的第xxx頁(4KB大小的頁),那么應該有4GB/4KB=1MB個表項,因為每個表項4byte,所以一共有4MB的大小,那么一個進程就會浪費掉4MB的空間。
如果是二級頁表,規則就會改變,讓二級頁表對應到物理內存上的4KB大小的頁,一級頁表此時變成映射為物理地址的4MB(這樣子是無法定位到具體的頁(4KB)的,所以二級頁表再去找),這樣先找到一級頁表,一級頁表再和二級頁表進行結合,二級頁表相當于一級頁表4MB分成了1024個(1KB個)4KB,找完后二級頁表充當了offset的角色,此時定位到具體的4KB的頁面,再用一級頁表的offset一結合定位到具體物理地址。這樣一個進程浪費掉的空間是一級頁表占用的:(4GB/4MB)4byte=4KB,二級頁表浪費掉的是4byte1kb(4MB/4KB->1個一級頁表占用這么多個二級頁表)*1kb(此時有1kb(4GB/4MB)個二級頁表)=4MB,加起來是4MB+4KB,比光用一級頁表要多4KB,但是2級頁表是可以不存在的,比如此時程序只用了20%的頁,那么4MB就需要乘以20%,這樣一下子就比只有一級頁表時少了。
總結
- 上一篇: 使用mac m1跑fortran代码he
- 下一篇: fortran的bug:Fortran