Intel 通过在处理器上把管脚数从 32 增加到 36,以提高处理器的寻址能力,使其达到 2^36=64GB,然而线性地址的位数仍然是 32 位,为此,需引入一种新的分页机制。从pentium pro 处理器开始,intel引入一种叫做 PAE 的机制,Linux 中使用了这种机制。

64GB 的 RAM 被分为 2^24 个页框,页表项的物理地址字段从 20 位扩展到 24 位,每个页表项必须包含 12 个标志位(固定)和 24 个物理地址位(36-12,因为最多有 2^24 个页框可以被页表项指定),共 36 位,因此,每个页表项须从 32 位扩展到 64 位(36位>32位,考虑到对齐,因此应将页表项扩大一倍到64位)。

在4KB的常规分页情况下,由于每个页表项大小为64位,因而,原有4K大小的页表中,仅能包含512个表项,这占用了32位线性地址中的9位,同理,由于页目录项与页表项具有同样的结构,高一级的页目录表中也仅能包含512个页表项(目录项),同样占用了32位线性地址中的9位,此时,线性地址剩余位数为:32位(总位数)-12位(页内偏移量)-9位(指示页表中的索引)-9位(指示页目录表中的索引)=2位,同时,Linux引入了一个页目录指针表(PDPT)的页表新级别,由4个64位表项构成,剩余的2位即用来指向PDPT中4个项中的一个。

下面4张图详细说明了4种情况下的页表结构(引自Wikipedia)

【未启用PAE下的4K分页的页表结构】

【未启用PAE下的4M分页的页表结构】

【启用PAE下4K分页的页表结构】

【启用PAE下2M分页的页表结构】

线性地址的映射过程如下:

1)cr3:指向一个PDPT基地址

2)地址的31~30:确定PDPT项

3)地址的29~21:确定页目录项中的一个

此处,发生了分支:

A.如果页目录项的PS标志位等于0,那么页大小是4K

4)地址的20~12:确定页表的某一项

5)地址的11~0:确定偏移

B.如果PS=1,启用2M大页 4)地址的20~0:确定2M页中的偏移量。

pae扩展内存 linux,Linux内核-内存管理-PAE(物理地址扩展)相关推荐

  1. Dump文件有三种:完整内存转储,内核内存转储,小内存转储。System Properties中的高级选项中可以看到这些设置。

    Dump文件有三种:完整内存转储,内核内存转储,小内存转储.System Properties中的高级选项中可以看到这些设置. Windbg内核调试之四:Dump文件分析-爱码网 (likecs.co ...

  2. safari扩展安装_如何安装和管理Safari 5扩展

    safari扩展安装 While there have been hacks to include extensions in Safari for some time now, Safari 5 n ...

  3. 关于Linux的缓存内存 Cache Memory详解

    30 (总结)关于Linux的缓存内存 Cache Memory详解 发表于: Linux, UNIX, 个人日记, 原创总结 | 作者: 谋万世全局者 标签: cache,Linux,Memory, ...

  4. Linux与jvm内存关系分析

    原文出处: 美团技术团队 引言 在一些物理内存为8g的服务器上,主要运行一个Java服务,系统内存分配如下:Java服务的JVM堆大小设置为6g,一个监控进程占用大约600m,Linux自身使用大约8 ...

  5. linux双4g内存花屏,linux不支持4G内存的处理方法

    1.编译内核,在菜单中选择4G内存支持. /usr/src/kernel/下找到内核的源码,make menuconfig进行配置,并进行编译. 2.安装kernel-PAE内核,进行PAE扩展. y ...

  6. 嵌入式Linux的内核编译

    实验环境 VMware Workstation Player Ubuntu16.04 kernel-3.2.tar.bz2 Linux内核编译 在ubuntu上编译嵌入式Linux内核,需要大家提前安 ...

  7. pae扩展内存 linux,浅析linux内核内存管理之PAE

    浅析linux内核内存管理之PAE 早期Intel处理器从80386到Pentium使用32位物理地址,理论上,这样可以访问4GB的RAM.然而,大型服务器需要大于4GB的RAM来同时运行数以千计的进 ...

  8. 【Linux 内核 内存管理】Linux 内核堆内存管理 ① ( 堆内存管理 | 内存描述符 mm_struct 结构体 | mm_struct 结构体中的 start_brk、brk 成员 )

    文章目录 一.堆内存管理 二.内存描述符 mm_struct 结构体 三.mm_struct 结构体中的 start_brk.brk 成员 一.堆内存管理 Linux 操作系统中的 " 堆内 ...

  9. Linux内核如何管理内存

    在学习了进程的 虚拟地址布局 之后,让我们回到内核,来学习它管理用户内存的机制.这里再次使用 Gonzo: Linux kernel mm_struct Linux 进程在内核中是作为进程描述符 ta ...

最新文章

  1. c/c++ 拷贝控制 构造函数的问题
  2. 人工智能应该如何监管——智库研究员乔舒亚·纽提出算法责任原则
  3. 【Python学习系列一】Windows下Python及其IDE(eclipse+pydev)安装
  4. golang基本数据类型转换
  5. STL vector的erase操作问题
  6. ES6新语法 变量 、 服务器端js和浏览器端js的区别
  7. 使用javascript实现两个listbox中list的移动
  8. 2015年第六届蓝桥杯国赛试题(JavaA组)
  9. ftrace跟踪内核_用Ftrace跟踪内核模块
  10. 分享非常宝贵的工作经
  11. 状态机finite-state machine学习笔记1
  12. python网页提交表单制作代码_Python实现网站表单提交和模板
  13. macbook边缘磕碰如何修复
  14. Euclid辗转相除法c语言,euclid辗转相除法求greatest common divisor
  15. excel表格拆分成多个工作表
  16. 学生签到系统c代码_学生考勤系统源代码
  17. openshift书籍推荐
  18. java jsp开发的电子商务系统代码下载
  19. 微信小程序+云函数+腾讯云对话机器人API(ChatBot)
  20. 解决canon LBP 6200只能打印单面的问题

热门文章

  1. FXML:使用BuilderFactory的自定义组件
  2. 编写Play 2的模块,第2部分:拦截器
  3. Java应用程序中的消息传递主体
  4. 笑傲江湖客户端服务器地址修改,《笑傲江湖》改键调整操作手把手教你玩笑傲...
  5. 报任安书文言现象_语文老师精心总结【文言文常考点】够你从初一用到初四!...
  6. websocket没准备好如何解决_那些很重要,但是不常用的技术,websocket
  7. 【安卓开发 】Android初级开发(五)自定义View
  8. 课堂经验值管理小程序_微信小程序怎么管理门店?
  9. 飞畅科技-工业级POE交换机解决方案专家
  10. 怎么解决交换机端口不正常问题?