引入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. 客户端获取ip

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. hadoop招聘需求每天都在添加,短短半个月时间,需求量差点儿翻了一番,这是大数据要爆发的节奏么?

    近期常常关注企业hadoop招聘需求的动态变化,多说无益,直接上几张百度的截图: 4月20日: 4月22日: 4月27日: 5月8日:

  3. struts2类型转化器详解(带例子)

    Struts2有两种类型转化器: 一种局部,一种全局. 如何实现: 第一步:定义转化器 第二部:注册转化器 下面做一个局部类型转化器的实例. 我们在上面一片日志说过有个变量date类型的.只有我们输入 ...

  4. 谈谈SQL server的 worker threads-----微软亚太区数据库技术支持组 官方博客

    https://blogs.msdn.microsoft.com/apgcdsd/2012/11/27/sql-server-worker-threads/

  5. android 水纹上涨与水滴滴下效果

    这两天项目比较紧,本来打算完成以后再写博客的,今天终于实现了一个炫的功能,怀着激动的心情,趁热打铁,把项目经验记录一下,效果图如下:  对功能的几点说明: 1.圆形边框旋转 2.水纹上涨 3.水滴滴下 ...

  6. springBoot 2.X-自定义拦截器

    package com.cx.springboot.myInter; import javax.servlet.http.HttpServletRequest; import javax.servle ...

  7. Introducing ASP.NET Core: The New ASP.NET in Town!

    The new version of ASP.NET is called ASP.NET Core (a.k.a ASP.NET 5) and it has the most significant ...

  8. 1)Linux程序设计入门--基础知识

    )Linux程序设计入门--基础知识 Linux下C语言编程基础知识 前言: 这篇文章介绍在LINUX下进行C语言编程所需要的基础知识.在这篇文章当中,我们将 会学到以下内容: 源程序编译 Makef ...

  9. Spark应用程序运行的日志存在哪里(转)

    原文链接:Spark应用程序运行的日志存在哪里 在很多情况下,我们需要查看driver和executors在运行Spark应用程序时候产生的日志,这些日志对于我们调试和查找问题是很重要的. Spark ...

  10. iOS:切换视图的第三种方式:UITabBarController标签栏控制器

    UITabBarController:标签栏控制器 •通过设置viewControllers属性或者addChildViewController方法可以添加子控制器 –NSArray *viewCon ...