linux内核——PAE(物理地址扩展)
引入PAE机制后,分页模式是怎样的呢?
首先,要搞明白几件事,2.6.11以上版本的linux内核中,存在4中页表(页全局目录,页上级目录,页中级目录,页表),这些页表结构是已经存在于硬盘中的,当进程被创建或这些页表被使用到时,将其调入物理内存(页框)中。而每一线性地址都与某目录项或表项对应,也就是说,根据每一线性地址都能特定地找到某一目录项,例如下面这个例子:
当某进程被创建时,此进程的页全局目录被调入物理内存(页框)中,页全局目录的地址被存入到进程控制块中,假如此时采用二级页表,需要寻址进程线性地址0x12345678的物理地址,步骤如下:
线性地址0x12345678的前10位为0x48,它就与页全局目录的第0x48项对应,它肯定存在于这一项多对应的页表中。
读present位,若所对应页表不在内存中,则将此页表调入,并设置这一项中的代表页框物理地址的20位的内容;否则若存在,则根据这一项中的代表页框物理地址的20位的内容,找到其所对应页表。
线性地址0x12345678的中间10位为0x345,它就与页表中第0x345项对应,它肯定村爱与这一项对应的页中。
读present位,若所对应页不在内存中,则将此页调入,并设置这一项中的代表页框物理地址的20位的内容;否则若存在,则根据这一项中的代表页框物理地址的20位的内容,找到其所对应页。
线性地址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(物理地址扩展)的更多相关文章
- Linux 安装PAE内核
客户软件是部署在32位的CentOS5服务器当中,CentOS5目前只能识别4G内存,需要安装PAE内核,让系统支持PAE物理地址扩展. 1.安装PAE内核 yum -y install kern ...
- Linux 内核使用的 GNU C 扩展
gcc核心扩展linuxforum(转)=========================== Linux 内核使用的 GNU C 扩展 =========================== GNC ...
- 嵌入式C语言自我修养 01:Linux 内核中的GNU C语言语法扩展
1.1 Linux 内核驱动中的奇怪语法 大家在看一些 GNU 开源软件,或者阅读 Linux 内核.驱动源码时会发现,在 Linux 内核源码中,有大量的 C 程序看起来“怪怪的”.说它是C语言吧, ...
- Linux内核调试方法总结
Linux内核调试方法总结 一 调试前的准备 二 内核中的bug 三 内核调试配置选项 1 内核配置 2 调试原子操作 四 引发bug并打印信息 1 BUG()和BUG_ON() 2 ...
- Linux内核调试方法【转】
转自:http://www.cnblogs.com/shineshqw/articles/2359114.html kdb:只能在汇编代码级进行调试: 优点是不需要两台机器进行调试. gdb:在调试模 ...
- 现在的 Linux 内核和 Linux 2.6 的内核有多大区别?
作者:larmbr宇链接:https://www.zhihu.com/question/35484429/answer/62964898来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转 ...
- Linux内核版本介绍与查询
Linux内核版本命名在不同时期有着不同的规范,在涉及到Linux版本问题时经常容易混淆,主线版本/稳定版/长期支持版本经常搞不清楚,本文主要记录下内核版本命名的规则以及如何查看Linux系统版本信息 ...
- 深入理解linux内核-内存寻址
逻辑地址:由一个段和偏移量组成的地址线性地址(虚拟地址):物理地址:CPU的物理地址线相对应的地址32或36位 多处理器系统中每个CPU对应一个GDT 局部线程存储:用于线程内部的各个函数调用都能访问 ...
- 羽夏看Linux内核——中断与分页相关入门知识
写在前面 此系列是本人一个字一个字码出来的,包括示例和实验截图.如有好的建议,欢迎反馈.码字不易,如果本篇文章有帮助你的,如有闲钱,可以打赏支持我的创作.如想转载,请把我的转载信息附在文章后面,并 ...
随机推荐
- 【8.26校内测试】【重构树求直径】【BFS模拟】【线段树维护DP】
题目性质比较显然,相同颜色联通块可以合并成一个点,重新建树后,发现相邻两个点的颜色一定是不一样的. 然后发现,对于一条链来说,每次把一个点反色,实际上使点数少了2个.如下图 而如果一条链上面有分支,也 ...
- 区间DP--凸多边形三角剖分
给定一个具有N(N<50)个顶点(从1到N编号)的凸多边形,每个顶点的权均已知.问如何把这个凸多边形划分成N-2个互不相交的三角形,使得这些三角形顶点的权的乘积之和最小? 输入文件:第一行 顶点 ...
- php -- php读取sqlserver中的datetime出现的格式问题
php连接sqlserver2005时,读取出来的数据是01 15 2014 12:00AM, 也就是说日期的格式是MM DD YY hh:mmAM 那如何把它转变成24小时制,且显示的格式为YY-M ...
- 更新teaching中fdSubjectID为null的老数据
UPDATE wkwke.tbTeachingV3 teaching SET teaching.fdSubjectID = ( SELECT fdValue FR ...
- HDU 4496 D-City (并查集,水题)
D-City Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)Total Subm ...
- rt-80启动tomcat
1 #!/bin/sh 2 cd /mnt/tomcat/tomcat_8082; 3 ps -ef|grep /tomcat_8082/ |awk '{print $2}'|xargs kill - ...
- iOS开发之UITextField 左侧设置小图标 leftview
设置用户登录的时候,这个是避免不了,实现方法很多,我个人主张,系统有提供就使用系统,一来方便,二来运行效率高 Paste_Image.png 实现代码如下: pwdTextField.placehol ...
- 尝试PWA
1.一个 PWA 应用首先是一个网页, 可以通过 Web 技术编写出一个网页应用. 随后添加上 App Manifest 和 Service Worker 来实现 PWA 的安装和离线等功能. 2.创 ...
- udp_client.c udp_server.c
#include <stdlib.h> #include <stdio.h> #include <errno.h> #include <string.h> ...
- TensorFlowIO操作(一)----线程和队列
线程和队列 在使用TensorFlow进行异步计算时,队列是一种强大的机制. 为了感受一下队列,让我们来看一个简单的例子.我们先创建一个“先入先出”的队列(FIFOQueue),并将其内部所有元素初始 ...