1.3i386的页式内存管理机制-创新互联
段式存储管理机制的灵活性和效率都比较差。以方面“段”是可变长度的,这就给盘区交换操作带来了不便;另一方面,如果为了增加灵活性而将每个进程的空间划分成很多小段时,就势必要求在程序中频繁地改变段寄存器的内容。同时,如果将段分小,虽然一个段描述符表中可以容纳8192个描述项,也未必就能保证足够使用。
创新互联成立于2013年,先为闵行等服务建站,闵行等地企业,进行企业商务咨询服务。为闵行企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。80386的系统结构决定了它的页式存储管理只能建立在段式的基础之上。
80386增加了一个新的寄存器CR3作为指向当前页面目录的指针。这样,从线性地址到物理地址的映射过程为:
1、从CR3取得页面目录的基地址
2、以线性地址中的dir位段为下标,在目录中取得相应页面表的基地址
3、以线性地址中的page位段为下标,在所得到的页面表中取得相应的页面描述项。
4、将页面描述项中给出的页面基地址与线性地址中的offset位段相加得到物理地址。
为什么要使用两个层次,先找到目录项,再找到页面描述项,而不是像在使用段寄存器时一步到位呢?这是出于空间效率的考虑。如果将线性地址中dir和page两个尾端合并在一起是20位,因此页面表的大小就是1kx1k=1m个表项。由于每个页面大小4k,总的空间大小为4kx1m=4G。但是,实际上很少有进程会需要用到4G的全部空间,所以大部分表项势必空着。可是在一个数组中,即使空闲不用的表项也占用空间,这样就造成了浪费。而若分为两层,则页表可以视需要而设置,如果目录中某项为空,就不必设立相应的页表,从而省下了存储空间。另外一个页面的大小4k,而每一个页面表项或目录项表项的大小是4字节,1024个表项正好是4k,可以填充一页,而多过1024项则需要跨页面存放了。
目录项中含有指向一个页面表的指针,而页面表项中含有指向一个页面其实地址的指针。由于页面表和页表项的起始地址都总是在4K字节的边界上,这些指针的低12位永远都是0.这样,在目录项和页表项中都只要20位用于指针就够了,而余下的12位则可以用于控制或其他目的。
386CPU中还有寄存器CR0,器高位PG是页式映射机制的总开关。当PG被置为1时,CPU就开启页式管理。
从pentium Pro开始,Intel又作了扩充。Intel在另一个控制寄存器CR4中又增加了一个PAE,当PAE值为1时,地址总线的宽度就变成36位。
网站栏目:1.3i386的页式内存管理机制-创新互联
转载源于:http://cdiso.cn/article/cdjjph.html