在談到多級頁表的優勢的時候,很多地方都是這么說的:32位地址空間的分頁系統,如果頁面大小為4KB,則每個進程可達1M個頁,假設每個頁表項占用4個字節,這樣每個進程僅僅頁表項就占用了4MB連續的內存空間。
那么多級頁表怎么節省存儲空間的?
如果是2級頁表,32位地址分為10,,10,12這3部分。則,頁目錄表1024項,每個小頁表也是1024項,實際的存儲空間是1024*4k(所有小頁表大小)+4k(頁目錄大小),變大了!!!!!!
在這里我談談個人的理解!
實際上,一個進程並不是所有線性地址都會映射到頁表中,假如所有頁表都映射,的確多級頁表占用了更多的內存,但是大多數地址都是沒有映射的。
如果是一級頁表,因為頁表是一個大數組,如果在初始化的時候沒有分配好足夠的空間,以后要擴展的話怎么辦?所以一級頁表在初始化的時候便分配了全部的連續內存,即使並不是所有地址都映射到頁表上。
如果是多級頁表,這里以二級頁表為例。在初始化的時候只需要先分配好頁目錄所需的連續內存,頁表的內存可以到需要使用的時候再動態分配,增加了靈活性,同時節省了內存。