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.
最新文章
- 数据库备份并分离日志表(按月)sh 脚本
- HTML,CSS,font-family:中文字体的英文名称 (宋体 微软雅黑)
- unity5.0新功能-布料、动画系统
- java中的final关键词
- DB设计原则(二)如何拆、分表
- SequoiaDB 系列之四 :架构简析
- long型转日期型
- 【笨嘴拙舌WINDOWS】GDI对象之位图
- uva401 - Palindromes结题报告
- 关于C++需要加强学习的几点内容
- android驱动程序之 - sensor
- Android 之 MediaPlayer类
- asp.net mvc 防止重复提交
- [UWP]使用Acrylic
- win10预览版无开始菜单解决方案
- [LeetCode] Largest Plus Sign 最大的加型符号
- 通过一个color创建一个image
- Python——Django运行问题
- 17秋 软件工程 团队第五次作业 Alpha Scrum3
- Nodejs AES加密
热门文章
- leetcode132. Palindrome Partitioning II
- window10下java环境变量的配置 javac不是内部或外部命令的问题
- iOS开发系列--音频播放、录音、
- mysql 部分参数说明
- 给WebAPI的REST接口添加测试页面(二)
- 使用Dragablz快速构建Chrome样式的可拖拽分离的Tab页程序
- Two-transistor circuit replaces IC
- Android:手把手带你深入剖析 Retrofit 2.0 源码
- Drawable的getIntrinsicHeight()和getIntrinsicWidth()
- Proxmark3命令帮助