第三章 保护模式的内存管理【2】
 
 
【作者:lion3875 原创文章 参考文献《Intel 64 and IA-32 system programming guide》】

    3.6 分页概述

在IA-32架构的保护模式中,处理器要么将线性地址空间直接映射至物理内存空间(当拥有4GB物理内存时),要么间接的映射至较小物理内存(低于4GB)或磁盘空间,后一种映射方式通常用于虚拟内存管理。

启用分页功能后,处理器会将线性地址空间分割成多个固定大小的页面(如4KB、4MB或2MB),然后将这些页面映射到物理内存或磁盘空间。当程序(或任务)访问一个逻辑地址时,处理器便会先将其转换为线性地址,然后再利用分页机制将线性地址转换为物理地址。

如果一个被访问的页面没有在物理内存中(而是在磁盘空间),处理器便会产生一个“页错误”异常(#PF),此异常的处理程序会指导操作系统或执行体将被访问的页面从磁盘空间装入物理内存(也许这时在物理内存空间的页面正在被写入到磁盘空间)。当页面被装入物理内存后,异常处理程序会正常返回,然后CPU会重新执行导致异常发生那条指令。另外,在页目录及页表中还保存着用于处理器将线性地址转换为物理地址的重要信息,以及用于产生页错误异常的重要信息。

与分段不同,分页是通过多个固定长度的页面实现的,而分段则是将代码区域的长度与数据区域的长度分开规划的。在分段机制中,一个数据块若需要被装入物理内存,就要一次全部装入,而分页机制则可以将要访问的数据块的一部份装入内存,另一部份留在磁盘空间。

为了降低地址转换所带来的总线周期开销,最近经常被访问的页目录及页表项会被装入处理器内部的一个器件中,即TLB(旁路转换缓冲)。TLB可以满足当前大多数页目录及页表的读取操作,无需请求总线周期。只有在一个页面长时间不被访问时,才会产生额外的总线周期,因为TLB中不缓存这些被长时间冷落的页面。要了解更多关于TLB的信息,请参见章节3.12“旁路转换缓冲(TLB)”。

3.6.1 分页选项

在处理器的控制寄存器中,有三个标志用于控制分页:

  • PG(分页)标志 - 位于CR0的bit31(从Intel386开始,IA-32家族便开始支持此选项)。
  • PSE(页面长度扩展)标志 - 位于CR4的bit4(将在Pentium处理器中加以介绍)。
  • PAE(物理地址扩展)标志 - 位于CR4的bit5(将在Pentium Pro处理器中加以介绍)。

PG标志用于使能“页转换”机制(即分页机制),如果处理器的页转换机制需要被启用(如有分页需求的虚拟内存系统,或虚拟8086的多任务环境),那么此标志就必须被设置,操作系统或执行体通常会在初始化处理器的过程中设置此标志。

PSE标志用于使能“大号页面”,如:4-MByte页面或2-MByte页面(2-MByte页面还需要设置PAE标志),若要启用4-KByte页面,则需要将PSE清零,要了解更多PSE相关信息,请参阅章节3.7.2“线性地址转换(4-MByte页面)”,章节3.8.3“使能PAE的线性地址转换(2-MByte页面)”,及章节3.9“使用PSE-36分页机制的36位物理寻址”。

PAE标志提供了一种扩展物理地址宽度的方法,即MAXPHYADDR。

注意:对于处理器不支持CPUID子命令80000008H的情况,MAXPHYADDR即是36位的,否则将由下面指令来标识MAXPHYADDR的位长,即CPUID.80000008H:EAX[bits 7:0]。

这种扩展的物理地址只有在分页被使能的情况下才可以使用,而且还要依赖于一个附加的页目录指针表,此表会与页目录及页表配合工作以实现对FFFFFFFFH以外地址空间的寻访。要了解更多运用PAE标志扩展物理地址的相关信息,请参见章节3.8“使用PAE分页机制进行36位物理寻址”。

在Intel 64位处理器中使能PAE标志,可增强物理寻址范围(例如支持36位以上的物理寻址),主要应用于IA-32e模式的地址转换(参见章节3.10“IA-32e模式的PAE分页”),以及增强老式的地址转换能力(参见章节3.8.1“使用PAE增强老式分页功能”)。

36位页长度特性(简称PSE-36特性),使得物理寻址范围也可扩展至36位(当然也可以是32位),而这些是要靠设置CR4中的PSE标志来完成的。另外,还可以通过CPUID指令来获悉当前PSE-36的物理寻址能力(此时CPUID的操作数为‘1’,返回值会被保存于EDX的bit17)。要了解更多关于PSE-36物理地址扩展及页长度扩展机制的信息,请参见章节3.9“基于PSE-36分页机制的36位物理寻址”。

转载于:https://blog.51cto.com/lion3875/532644

IA-32系统编程指南 - 第三章 保护模式的内存管理【2】相关推荐

  1. IA-32系统编程指南 - 第三章 保护模式的内存管理【1】

    第三章 保护模式的内存管理[1] [作者:lion3875 原创文章 参考文献<Intel 64 and IA-32 system programming guide>] IA-32保护模 ...

  2. Java7并发编程指南——第三章:线程同步辅助类

    Java7并发编程指南--第三章:线程同步辅助类 @(并发和IO流) Java7并发编程指南第三章线程同步辅助类 思维导图 项目代码 思维导图 项目代码 GitHub:Java7Concurrency ...

  3. Linux/Unix系统编程手册 第三章:系统编程概念

    本章介绍系统编程的基础概念和一些后续章节用到的函数及头文件,并说明了可移植性问题. 系统调用是受控的内核入口,通过系统调用,进程可以请求内核以自己的名义去执行某些动作,比如创建子进程,执行I/O操作, ...

  4. java 23_《分布式JAVA应用 基础与实践》 第三章 3.2 JVM内存管理(三)

    [3.2.3  内存回收(1) 收集器 JVM通过GC来回收堆和方法区中的内存,GC的基本原理首先会找到程序中不再被使用的对象,然后回收这些对象所占用的内 ...] 3.2.3  内存回收(2) Fu ...

  5. javascript面对对象编程指南第三章 函数

    所谓函数,本质上是一种代码的分组形式. 一般而言,函数的声明通常由以下几个部分组成: function语句:函数名字:函数所需要的参数,一个函数通常都具有0个或多个参数,参数之间有逗号分隔.:函数所要 ...

  6. Linux学习之系统编程篇:MMU(Memory Manager Unit 内存管理单元)

    一.虚拟内存地址 对应于上图的两端,其中 0 - 3G 是用户区 ,3 - 4G 是内核区.编码的内存地址都是虚拟地址. 在3G到4G之间是PCB 进程控制块.从3G到0依次为: (1)命令行参数 和 ...

  7. C/C++怎样编写高质量的程序:头文件和源文件模板------高质量C++/C编程指南-第1章-文件结构

    http://www.bianceng.cn/Programming/cplus/200705/614.htm 高质量C++/C编程指南-第1章-文件结构 第1章 文件结构 每个C++/C程序通常分为 ...

  8. Python精确指南——第三章 Selenium和爬虫

    3       Selenium 3.1     介绍 网络爬虫在互联网领域有着广泛的应用. Selenium是一个页面自动化控制框架.能够模拟实际操作,自动化获取网站提供的页面资源信息. Selen ...

  9. Unix网络编程卷一第三章笔记

    前言 这篇文章主要是Unix网络编程卷一第三章的个人笔记 1.POSIX 规范的三个字段 sin_family sin_addr sin_port 2.IPV4 套接字结构 五个套接字结构 IPV4( ...

最新文章

  1. Java发送邮件工具类(可发送匿名邮件)
  2. linux变量接收命令返回值,Linux Shell教程(一)
  3. 强大的Vivado IP工具——自定义IP的使用
  4. c#编码规范【转载】
  5. My first App EncryptWheel is in WAITING FOR REVIEW status
  6. 给eth0增加一个IP
  7. MySQL中述职类型的长度问题
  8. 提高「搜商」,挣大钱
  9. 10分钟带你学会微信小程序的反编译
  10. 容器编排技术 -- Windows Server 容器
  11. PAT甲题题解-1059. Prime Factors (25)-素数筛选法
  12. 大兴服务器硬盘回收行情价格,回收服务器 硬盘 内
  13. 看我用ubuntu virtualbox
  14. 索引,用户授权,备份
  15. 切身体验的优秀时间管理法——番茄时间工作法!
  16. 凯文 米特尼克_凯文·米特尼克总结
  17. 微信小程序绑定手机号登录流程
  18. Error while sending STMT_PREPARE packet. PID=29294
  19. 图像——vignetting shading 光晕
  20. 习惯于CRUD,不求上进呢?-为什么有很多程序员沉醉于舒适区

热门文章

  1. JS引用类型 -- Array类型
  2. 再不自动化就晚啦!优云教你4步打造基于CentOS的产品镜像
  3. [MySQL] 分组排序取前N条记录以及生成自动数字序列,类似group by后 limit
  4. iptables配置详解
  5. gitlab4安装mysql出问题解决方法
  6. SQL中truncate table和delete的区别 --转
  7. GetItemValue、Itemname使用方法
  8. 利用Asp.net中的AJAX制作网页上自动选取开始日期及结束日期的用户自定义控件...
  9. 收到在微软商店购买的商品
  10. 一 流程控制之if判断