cpu發(fā)出線性地址,linux內(nèi)存管理單元做如下四步:
1.用線性地址中最高的那一位段作為下標(biāo)在PGD中找到相應(yīng)的表項(xiàng),該表項(xiàng)指向相應(yīng)的中間目錄PMD。
2.用線性地址中的第二個位段作為下標(biāo)在第一步中找到的表項(xiàng)中找相應(yīng)的表項(xiàng),該表項(xiàng)指向相應(yīng)的頁面表。
3.用線性地址中的第三個位段作為下標(biāo)在頁面表中找到相應(yīng)的表項(xiàng)PTE,該表項(xiàng)中存放的就是指向物理頁面的指針。
4.線性地址中最后位段為物理頁面的相對位移量,將此位移量與目標(biāo)物理頁面的起始地址相加便得到相應(yīng)的物理地址。
linux為了兼容所有的cpu體系結(jié)構(gòu),特意對內(nèi)存管理進(jìn)行了一層抽象。
常規(guī)映射是: 進(jìn)程虛擬地址(線性地址)->頁目錄->中間目錄->物理地址
而對i386的cpu直接略過中間目錄的映射。
其中PGD == page dir,PMD == page middle dir, PTE == page table entry。
這個過程可以有mmu來處理。