Linux内存管理之分段机制
作者:网络转载 发布时间:[ 2012/11/26 15:54:52 ] 推荐标签:
前面我们讲到逻辑地址到线性地址的转换,也是分段机制的实现.分段机制虽然能够让程序员方便地管理程序的各个段,并且可以动态调整段的大小,而且对内存的碎片率也大大减小.但是还是没有解决程序大小比物理内存还大的问题,这时候出现了分页机制,分页机制的出现大的体现是虚拟内存,虚拟内存的实现可以让大的程序装入内存.分页机制的实现还导致了部分程序装入,按需分配内存,代码共享等。
根据上图,逻辑地址通过分段机制变成线性地址,线性地址通过分页机制变成物理地址。那么怎么奖线性地址转换成物理地址呢?首先,对于没有启用分页机制的系统(通过一个寄存器的某一个比特判断)。则直接把线性地址映射到物理地址,物理地址传入到地址总线上。若是启用了分页机制,CPU会把线性地址进行拆分。
这里引入先页的概念,OS把虚拟内存切割,每部分的大小都是一样的(一般可以根据硬件指定),每部分叫做页(Page),每张页都对应物理内存中的页框(Page Frame,其实是依次个对应的关系)。
但是线性地址中某个标号为N的页,在物理内存中标号可以是M(N!=M)。也说可以每个线性地址页都在物理内存中有相对应的页框。而页和页框的对应关系是存在页表里面的,这里可以这样理解,页是一个函系统的输入,页框是一个系统的输出,而页表是这个系统.但是一张页表要处理整整4G(32位)的大小,光光这张页表需要很大了.所以引入二级页表的概念,也可以说成是页目录,页目录的原理和前面页表的作用一样,只不过页目录这个系统的输入是页号,而输出是页表的地址。好了,理解了上面的基本概念之后,我们开始线性地址到物理地址的转换.对于一个线性地址,前面的10 bits当作页目录项,找到页目录项后找到对应的页表起始地址,根据线性地址的中间后面10bits(页表的偏移)+页表起始地址,找到物理内存中的页框地址,内存中的页框地址+线性地址低12位是实际的物理地址。
同样的,上述过程在访问终的物理内存之前,要进行两次内存访问,两次查表,效率肯定低了。现代计算机会把页表和页目录也用硬件进行缓存,当然是一部分常用的项。
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11