在Intel 80x86体系结构中,Linux内核的内存管理程序采用了分页管理机制.利用页目录和页表结构处理内核中其他部分代码对内存的申请和释放操作.内存的管理是以内存页面为单位进行的,一个内存页面是指在地址连续的4KB内存.通过也目录项和页表项,可以寻址和管理指定页面的使用情况.
在Intel 80x86 CPU中,程序在寻址过程中使用的是由段和偏移值构成的地址.该地址并不能直接用来寻址物理内存地址,因为被称为虚拟地址
.为了能寻址物理内存,就需要一种地址转换机制将虚拟地址映射或转换到物理内存中,这种地址转换机制就是内存管理的主要功能之一.内存管理的另外一个重要功能就是内存的值保护机制.虚拟地址通过段管理机制首先变换成一种中间地址形式–CPU32位的线性地址,然后使用内存管理机制将此线性地址映射到物理地址.
在Intel 80x86的系统中,内存管理是通过页目录表
和内存页表
所组成的二级表进行.
其中页目录表和页表的结构是一样的,表项结构也相同的.页目录表中的每个表项4B用来寻址一个页表,而每个页表项4B用来指定一页物理内存页面.因此,当指定了一个页目录项和一个页表项,我们就可以唯一确定所对应的物理内存页.页目录表占用一页内存,因此最多可以寻址1024个页表.而每个页表也同样占用一页内存,因此以页表可以寻址最多1024个物理内存页面.这样在80386中,一页页目录表所寻址的所有页表共可以寻址1024 x 1024 x 4096B = 4GB的内存空间.所有进程都使用一个页目录表,而每个进程都有自己的页表
.
对于应用程序或内核其他部分来将,在申请内存时使用的是线性地址.那么,一个线性地址如何使用这两个表来映射到一个物理地址上呢?为了使用分页机制,一个32位线性地址被分成了三部分,分贝用来指定一个页目录项,一个页表项和对应物理内存页上的偏移地址,从而能间接地寻址到线性地址指定的物理内存位置.
来源:CSDN
作者:、moddemod
链接:https://blog.csdn.net/weixin_43833642/article/details/104079884