记录一下自己对于内存分页机制的理解,基于linux0.12内核,机制简单,更加有助于初学者理解。
内存分段机制将逻辑地址转化为线性地址,由于分页机制,线性地址到物理地址并不是直接对应的,linux0.12内核中采用了两级页表的方式实现了对4G内存的映射。
两级页表的第一级是页目录,其中每一项存储的是页表在物理内存中的存放基址。第二级是页表,其中每一项存放的是该线性地址对应的实际物理内存页的地址。
如上图,线性地址划分为三个部分,分别用来寻找也目录表中的某一个页目录项,页表中的某一个页表项,以及在实际物理内存页中的偏移地址。
- 在寻址某一块物理内存时,首先通过分段机制将逻辑地址转化为线性地址。
- 然后根据CR3寄存器中存放的页目录在物理内存中的基址,加上线性地址中页目录项指针,找到页目录中指定的某一项。
- 根据页目录项中存储的页表在物理内存中的基址,加上线性地址中页表项指针,找到页表中的某一项。
- 根据页表项中存储的要寻址的线性地址对应的物理内存基址加上偏移地址,最终获得线性地址对应的物理内存中的地址。