引入PAE机制后,分页模式是怎样的呢?

首先,要搞明白几件事,2.6.11以上版本的linux内核中,存在4中页表(页全局目录,页上级目录,页中级目录,页表),这些页表结构是已经存在于硬盘中的,当进程被创建或这些页表被使用到时,将其调入物理内存(页框)中。而每一线性地址都与某目录项或表项对应,也就是说,根据每一线性地址都能特定地找到某一目录项,例如下面这个例子:

当某进程被创建时,此进程的页全局目录被调入物理内存(页框)中,页全局目录的地址被存入到进程控制块中,假如此时采用二级页表,需要寻址进程线性地址0x12345678的物理地址,步骤如下:

  1. 线性地址0x12345678的前10位为0x48,它就与页全局目录的第0x48项对应,它肯定存在于这一项多对应的页表中。

  2. 读present位,若所对应页表不在内存中,则将此页表调入,并设置这一项中的代表页框物理地址的20位的内容;否则若存在,则根据这一项中的代表页框物理地址的20位的内容,找到其所对应页表。

  3. 线性地址0x12345678的中间10位为0x345,它就与页表中第0x345项对应,它肯定村爱与这一项对应的页中。

  4. 读present位,若所对应页不在内存中,则将此页调入,并设置这一项中的代表页框物理地址的20位的内容;否则若存在,则根据这一项中的代表页框物理地址的20位的内容,找到其所对应页。

  5. 线性地址0x12345678的后12位为0x678,它就与0x678项对应,这一项的内容就是保存在此线性地址中的内容。

总之,每一目录项或页表项是包含下一级目录或页表或页的页框物理地址的,占20位。

PAE机制只是增加了物理内存大小,并且增加了内存中页框的数量,可以在内存中存放更多的页,如果想找到某页对应的页框地址,就需要24位来标明各个页框的物理地址,因为总的物理内存是64GB,每一页大小是4KB,共有64GB/4KB=2的24次方个页框。所以要增加目录项中代表页框物理地址的字段的位数。位数增加了,目录项数就减少了,如果还想映射32位线性地址空间的话,就要增加一级页表。这应该就是PAE机制的改进及特点。都是根据需要设置的。

下面我们来看看32位系统中,引入PAE后如何工作。

1、32位系统中,PAE未激活,PAE=0时,页上级目录标志位和页中级目录标志位置0,使用二级页表,页全局目录及页表共有1024项,每一项需要32位,其中20位为页框物理地址。

此时,32位线性地址划分为:10   10   12

2、32位系统中,PAE激活,PAE=1时,使用三级页表,页全局目录对应页目录指针表,页上级目录不用,页中级目录对应页全局目录,每目录或页表共有512项,每一项需要64位,其中24位为页框物理地址。

此时,32位线性地址划分为:2    9    9    12

64位系统中,采用三级页表还是四级页表,根据体系结构而定。例如x86中划分为:9  9  9  9  12.

linux内核——PAE(物理地址扩展)的更多相关文章

  1. Linux 安装PAE内核

      客户软件是部署在32位的CentOS5服务器当中,CentOS5目前只能识别4G内存,需要安装PAE内核,让系统支持PAE物理地址扩展. 1.安装PAE内核 yum -y install kern ...

  2. Linux 内核使用的 GNU C 扩展

    gcc核心扩展linuxforum(转)=========================== Linux 内核使用的 GNU C 扩展 =========================== GNC ...

  3. 嵌入式C语言自我修养 01:Linux 内核中的GNU C语言语法扩展

    1.1 Linux 内核驱动中的奇怪语法 大家在看一些 GNU 开源软件,或者阅读 Linux 内核.驱动源码时会发现,在 Linux 内核源码中,有大量的 C 程序看起来“怪怪的”.说它是C语言吧, ...

  4. Linux内核调试方法总结

    Linux内核调试方法总结 一  调试前的准备 二  内核中的bug 三  内核调试配置选项 1  内核配置 2  调试原子操作 四  引发bug并打印信息 1  BUG()和BUG_ON() 2   ...

  5. Linux内核调试方法【转】

    转自:http://www.cnblogs.com/shineshqw/articles/2359114.html kdb:只能在汇编代码级进行调试: 优点是不需要两台机器进行调试. gdb:在调试模 ...

  6. 现在的 Linux 内核和 Linux 2.6 的内核有多大区别?

    作者:larmbr宇链接:https://www.zhihu.com/question/35484429/answer/62964898来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转 ...

  7. Linux内核版本介绍与查询

    Linux内核版本命名在不同时期有着不同的规范,在涉及到Linux版本问题时经常容易混淆,主线版本/稳定版/长期支持版本经常搞不清楚,本文主要记录下内核版本命名的规则以及如何查看Linux系统版本信息 ...

  8. 深入理解linux内核-内存寻址

    逻辑地址:由一个段和偏移量组成的地址线性地址(虚拟地址):物理地址:CPU的物理地址线相对应的地址32或36位 多处理器系统中每个CPU对应一个GDT 局部线程存储:用于线程内部的各个函数调用都能访问 ...

  9. 羽夏看Linux内核——中断与分页相关入门知识

    写在前面   此系列是本人一个字一个字码出来的,包括示例和实验截图.如有好的建议,欢迎反馈.码字不易,如果本篇文章有帮助你的,如有闲钱,可以打赏支持我的创作.如想转载,请把我的转载信息附在文章后面,并 ...

随机推荐

  1. 2015 UESTC 数据结构专题E题 秋实大哥与家 线段树扫描线求矩形面积交

    E - 秋实大哥与家 Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/59 De ...

  2. leetcode weekly contest 43

    leetcode weekly contest 43 leetcode649. Dota2 Senate leetcode649.Dota2 Senate 思路: 模拟规则round by round ...

  3. SSM+Maven(教程二):Idea快速入门SSM+Maven框架。

    快速入门须知 这篇文章,直接应用已经搭建好的SSM框架.一般在公司里面,考虑框架的搭建.封装等问题,都由研发经理或者架构师完成,所以对于刚入门的小白来说,在去搭建整合花费的时间会很多很多.对于理解能力 ...

  4. Registering DLL and ActiveX controls from code

    http://delphi.about.com/od/windowsshellapi/l/aa040803a.htm How to register (and unregister) OLE cont ...

  5. [Projet] Module NFC

    http://www.f4grx.net/projet-module-nfc/ The NFC is a contactless communication technology, which is ...

  6. erlang 大神

    http://blog.csdn.net/erlib/article/details/46655905

  7. 3DShader之法线贴图(normal mapping)

    凹凸贴图(bump mapping)实现的技术有几种,normal mapping属于其中的一种,这里实现在物体的坐标系空间中实现的,国际惯例,上图先: 好了讲下原理 可以根据高度图生成法线量图,生成 ...

  8. Fiddler2 中文手册

    原文:http://blog.sina.com.cn/s/blog_66a13b8f0100vgfi.html 最近一阵研究 Fiddler2 的使用来着,一开始看起来有点找不着北,索性就根据官网资料 ...

  9. Oracle数据库常用函数使用--持续更新中

    NVL函数.NVL( string1, replace_with).如果string1为NULL,则NVL函数返回replace_with的值,否则返回原来的值. INSTR函数.用于查找指定字符串是 ...

  10. 能力成熟度模型CMM

    能力成熟度模型(Capability Maturity Model,英文缩写为CMM)[1]是 一种开发模型.Carnegie Mellon大学的研究人员从美国国防部合同承包方那里收集数据并加以研究, ...