网站建设预算申请如何写,wordpress 播放大视频播放,松江微网站建设,网站备案新增域名前面讲述了页表的原理#xff0c;并以一级页表做为原型讲述了地址转换过程。既然有了一级页表#xff0c;为什么还要搞个二级页表呢#xff1f;理由如下#xff1a;
一级页表中最多可容纳1M#xff08;1048576#xff09;个页表项#xff0c;每个页表项是4字节#xf…前面讲述了页表的原理并以一级页表做为原型讲述了地址转换过程。既然有了一级页表为什么还要搞个二级页表呢理由如下
一级页表中最多可容纳1M1048576个页表项每个页表项是4字节如果页表项全满的话便是4MB大小。一级页表中所有页表项必须要提前建好原因是操作系统要占用4GB虚拟地址空间的高1GB用户进程要占用低3GB。每个进程都有自己的页表进程一多光是页表占用的空间就很可观了。
归根结底我们要解决的是不要一次性地将全部页表项建好需要时动态创建页表项。如何解决呢
二级页表很好的解决了该问题。我们来说下什么是二级页表。
无论是几级页表标准页的尺寸都是4KB这一点是不变的。所以4GB线性地址空间最多有1M个标准页。一级页表是将这1M个标准页放置到一张页表中二级页表是将这1M个标准页平均放置1K个页表中。每个页表中包含有1K个页表项。页表项是4字节大小页表包含1K个页表项故页表大小为4KB这恰恰是一个标准页的大小。
拆分出了这么多个页表如何使用它们呢为此专门有个页目录表来存储这些页表。每个页表的物理地址在页目录表中都以页目录项PDEPage Directory Entry的形式存储页目录项大小同页表项一样都是用来描述一个物理页的物理地址其大小都是4字节而且最多有1024个页表所以页目录表也是4KB大小同样也是标准页的大小。
页表是用于管理内存的数据结构其也要占用内存所以页目录表和页表所占用的物理页同样是混迹于物理内存之中如图 页目录表中共1024个页表也就是有1024个页目录项。一个页目录项中记录一个页表物理页地址物理页地址是指页的物理地址在页目录项及页表项中记录的都是页的物理地址由于页大小都是0x1000即4096因此页地址是以000为结尾的16进制数字。每个页表中有1024个页表项每个页表项中是一个物理页地址最终数据是写在这页表项中指定的物理页中。页表项中分配的物理页地址在真正物理内存中离散颁布毫无规律可言操作系统负责这些物理页的分配与释放。由于页目录表和页表本身都要占用内存且为4KB大小故它们也会由操作系统在物理内存中分配一物理页存放。图中最粗的线是存放页目录表物理页稍细一点的线指向的是用来存放页表的物理页其它最细的线是页表项中分配的物理页页表结构本身与其它数据混布渗透在物理内存中页表所占用的物理页在外在形式上与其它数据占用的物理页没有什么不同只有cpu知道它们的作用不同。页表在建立之初物理内存各部分的布局还是相对较整洁的随着操作系统分配或释放内存的动作越来越频繁物理内存的布局将更加零散。
二级页表与一级页表在原理上相同但结构上已经有了很大不同它们在虚拟地址到物理地址转换方法上也很大不同。
我们已经知道前面所说的一级页表转换方法是将32位虚拟地址拆分成两部分高20位用于定位一个物理页低12位用于物理页内的偏移量。在二级页表转换中依然是用32位虚拟地址的不同部分来定位物理页。
在二级页表是这样的每个页表中可容纳1024个物理页故每个页表可表示的内存容量是1024*4KB4MB。页目录中共有1024个页表故所有页表可表示的内存容量是1024*4MB4GB这已经达到了32位地址空间的最大容量。所以说任意一个32位物理地址它必然在某个页表之内的某个物理页中。我们定位某一个物理页必然要先找到其所属的页表。页目录中1024个页表只需要10位二进制就能够表示了所以虚拟地址的高10位第31~22位用来在页目录中定位一个页表也就是这高10位用于定位页目录中的页目录项PDEPDE中有页表物理页地址。找到页表后到底是页表中哪一个物理页呢由于页表中可容纳1024个物理页故只需要10位二进制就能够表示了。所以虚拟地址的中间10位第21~12位用来在页表中定位具体的物理页也就是在页表中定位一个页表项PTEPTE中有分配的物理页地址。由于标准页都是4KB12位二进制便可以表达4KB之内的任意地址故线性地址中余下的12位第11~0位用于页内偏移量。
经以上分析二级页表地址转换原理是将32位虚拟地址拆分成高10位、中间10位、低12位三部分它们的作用是高10位做为页表的索引用于在页目录表中定位一个页目录项PDE页目录项中有页表物理地址也就是定位到了某个页表。中间10位做为物理页的索引用于在页表内定位到某个页表项PTE页表项中有分配的物理页地址也就是定位到了某个物理页。低12位做为页内偏移量用于在已经定位到的物理页内寻址。
同一级页表一样访问任何页表内的数据都要通过物理地址。由于页目录项PDE和页表项PTE都是4字节大小给出了PDE和PTE索引后还需要在背后悄悄乘以4再加上页表物理地址这才是最终要访问的绝对物理地址。转换过程背后的具体步骤是
用虚拟地址的高10位乘以4做为页目录表内的偏移地址加上页目录表的物理地址所得的和便是页目录项的物理地址。读取该页目录项从中获取到页表的物理地址。用虚拟地址的中间10位乘以4做为页表内的偏移地址加上在第1步中得到的页表物理地址所得的和便是页表项的物理地址。读取该页表项从中获取到分配的物理页地址。虚拟地址的高10位和中间10位分别是PDE和PTE的索引值所以它们需要乘以4。但低12位就不是索引值啦其表示的范围是0~0xfff做为页内偏移最合适所以虚拟地址的低12位加上第2步中得到的物理页地址所得的和便是最终转换的物理地址。
这种自动化较强的工作还是由页部件自动完成的