linux内存管理-分页机制
来源:互联网 发布:涂色 app 源码 编辑:程序博客网 时间:2024/04/26 15:02
分段机制将逻辑地址转换成线性地址后,还需要借助分页机制,将线性地址转换为物理地址;
内存分页管理机制的基本原理是将整个线性内存区域划分成4KB为单位的内存页面;
32位处理器可以支持的寻址空间为2^32 =4GB,以4KB作为一个页,称为page或者page frame(页框);
那么4GB的空间,总共就有4G/4K =1M个页面,每个页面属性需要4字节,整个页表所占空间就需要4MB;
访问物理内存前,首先要通过页表找到线性地址对应的物理地址,因此页表需要常驻内存,这样比较耗费
内存空间,尤其是对于内存资源紧张的嵌入式系统;因此将一级页表分成了两级页表,可理解为二维数组;
第一级页表称为页目录(page directory),每个元素代表一个页表(page table entry),每个元素4字节,总共1K个页表项,
占用一个page(4*1K);
每个页表也是由1K个页面属性构成,每个页面属性4字节,页面属性里面包含了页面的物理地址以及页面的属性信息;
线性地址转换过程:
第一级的页表,常驻内存,占1个page;32位线性地址,高10位(即位31~位22)用来表示一维数组的索引;计算之后获得第二级页表;再利用32位线性地址的中间10位(即位21~位12),获取二级页表具体某项页面属性;
该页面属性中即含有页面对应的物理地址的起始地址paddress;32位线性地址的最后12位代表了物理页面的偏移值offset,
paddress+offset 即可得到最终的物理地址;
内存分页管理机制的基本原理是将整个线性内存区域划分成4KB为单位的内存页面;
32位处理器可以支持的寻址空间为2^32 =4GB,以4KB作为一个页,称为page或者page frame(页框);
那么4GB的空间,总共就有4G/4K =1M个页面,每个页面属性需要4字节,整个页表所占空间就需要4MB;
访问物理内存前,首先要通过页表找到线性地址对应的物理地址,因此页表需要常驻内存,这样比较耗费
内存空间,尤其是对于内存资源紧张的嵌入式系统;因此将一级页表分成了两级页表,可理解为二维数组;
第一级页表称为页目录(page directory),每个元素代表一个页表(page table entry),每个元素4字节,总共1K个页表项,
占用一个page(4*1K);
每个页表也是由1K个页面属性构成,每个页面属性4字节,页面属性里面包含了页面的物理地址以及页面的属性信息;
两级页表结构总共就有1K*1K=1M个页面,可定义为PT[a][b],a=b=2^10;
页目录项
页面项
80386的每个页目录项指向一个页表,页表最多含有1024个页面项,每项4个字节,包含页面的起始地址和有关该页面的信息。页面的起始地址也是4K的整数倍,所以页面的低12位也留作它用。
第31~12位是20位物理页面地址,除第6位外第0~5位及9~11位的用途和页目录项一样,第6位是页面项独有的,当对涉及的页面进行写操作时,D位被置1。
4GB的内存只有一个页目录,它最多有1024个页目录项,每个页目录项又含有1024个页面项,因此,内存一共可以分成1024×1024=1M个页面。由于每个页面为4K个字节,所以,存储器的大小正好最多为4GB。
线性地址转换过程:
第一级的页表,常驻内存,占1个page;32位线性地址,高10位(即位31~位22)用来表示一维数组的索引;计算之后获得第二级页表;再利用32位线性地址的中间10位(即位21~位12),获取二级页表具体某项页面属性;
该页面属性中即含有页面对应的物理地址的起始地址paddress;32位线性地址的最后12位代表了物理页面的偏移值offset,
paddress+offset 即可得到最终的物理地址;
过程如图:
为了支持64位系统的分页管理,linux采用了统一的分页管理模型:
- 页全局目录
- 页顶级目录
- 页中间目录
- 页表
32位系统中可以将页顶级目录跟页中间目录置为0, 这样实际使用的就是二级页表;
64位系统可以根据需要采用三级或者四级页表管理;
0 0
- linux内存管理-分页机制
- 【内存管理】分页机制
- CPU内存管理和linux内存分页机制
- CPU内存管理和linux内存分页机制
- Linux分页机制之概述--Linux内存管理(六)
- linux 内存分页机制
- linux 内存分页机制
- Linux分页机制之分页机制的演变--Linux内存管理(七)
- Linux分页机制之分页机制的实现详解--Linux内存管理(八)
- Linux内存管理(5):分页机制和管理区初始化
- Linux内核源码分析--内存管理(一、分页机制)
- Linux内核源码分析--内存管理(一、分页机制)
- linux内存管理概述(分段分页机制)
- 内存管理与分页机制
- 启动期间的内存管理之pagging_init初始化分页机制--Linux内存管理(十四)
- 内存管理相关之分段分页机制
- Windows x86 内存管理及分页机制
- 内存管理相关之分段分页机制
- 蓝桥网 算法训练 幂方分解
- android图片压缩
- leetcode263: Ugly Number
- 下拉刷新上拉加载,XListView多条目加载,TabPageIndicator
- ImageLoader配置过程
- linux内存管理-分页机制
- Yii2.0在控制器简单的上传图片加入库
- 第九周项目2—— 对称矩阵压缩存储的实现与应用(2)
- 第9周项目四--广义表算法库及应用(1)
- JavaWEB基础知识总结
- Bootstrap中表格内的checkbox复选框全选
- 给自己的项目添加git管理
- JMockit本土编译,并引入Eclipse
- Linux安装qemu-kvm虚拟机(基于ubuntu16.04)