關(guān)于頁表描滔,頁表其實僅僅就是保存虛擬內(nèi)存和物理內(nèi)存的映射關(guān)系的重抖,跟物理內(nèi)存有沒有被使用沒關(guān)系的露氮。
關(guān)于內(nèi)存管理,物理內(nèi)存和虛擬內(nèi)存都是各自管理的钟沛,使用他們的時候都要申請畔规,沒有誰是可以不申請就用的。所以建立頁表映射時需要有兩次申請操作恨统。最明顯的就是用戶態(tài)下內(nèi)存使用過程:malloc函數(shù)就是線性地址的申請過程叁扫,而當(dāng)發(fā)生缺頁異常,內(nèi)核再申請物理內(nèi)存畜埋,并建立頁表項莫绣,這里明顯可以看出兩次申請操作。但是內(nèi)核頁表的建立就比較隱晦了悠鞍,因為內(nèi)核頁表的映射關(guān)系是固定的(僅指的是lowmem區(qū)域)对室,所以頁表是按照約定直接建立,看不出兩次申請過程咖祭。但是高端內(nèi)存頁表建立也是有明顯的兩次申請過程的掩宜。
啟動mmu后,CPU就不認(rèn)物理內(nèi)存了么翰,只能使用虛擬地址牺汤。這時內(nèi)存訪問的過程一定是:虛擬地址—頁表—物理地址,無論是內(nèi)核態(tài)還是用戶態(tài)都一樣硬鞍。內(nèi)存有沒有被使用慧瘤,是他們各自的管理系統(tǒng)確定的,具體點就是物理內(nèi)存由伙伴系統(tǒng)管理固该,而虛擬內(nèi)存由vma管理锅减。