三种模式:实模式、保护模式和平展模式。

  实模式存储器(DOS存储器)位于00000H~FFFFFH,共1M空间(任何型号微处理器都支持)。

  保护模式存储器(Windows存储器)可位于整个保护存储系统的任何位置(80286以上的微处理器)。

  平展模式(Windows Vista以上),64位扩展,可寻址1TB的内存(Pentium 4以上未处理器)。

  64位通用寄存器:RAX(累加器)、RBX(基址)、RCX(计数)、RDX(数据)、RBP(基指针)、RDI(目的变址)、RSI(源变址)。

  64位专用寄存器:RIP(指令指针)、RSP(堆栈指针)、RFLAGS(状态)。

  64位段寄存器:CS(代码段)、DS(数据段)、ES(附加段)、SS(堆栈段)、FS(标志,指向当前活动线程的TEB结构->线程结构)、GS(全局)。

  原来放段地址的段寄存器存选择子(selector),用于选择描述表内的一个描述符。描述符(descriptor)描述存储器段的位置、长度和访问权限。一个描述符说明了一个存储段。

  段寄存器可访问两个描述符表:一个是全局描述符表,一个是局部描述符表。全局描述符(global descriptor)适用于所有程序的段定义,而局部描述符(local descriptor)通常用于唯一的应用程序。全局描述符又称系统描述符(system descriptor),局部描述符又称应用描述符(application descriptor)。每个描述符表共2^13=8192个描述符,故两个描述符表共8192*2=16384个描述符。故,一个应用程序可访问内存大小为4G*16384=64TB。

  每个描述符长8B,故全局和局部描述符表每个最长为64KB。

  

图一 Core2微处理器描述符

  1. 基地址(base address)部分表示存储器段的起始位置。

  2. 段界限(segment limit)包含该段中最大的偏移地址。80286访问长度为1B~64KB,而80386之上则为1B~1MB或者4KB~4GB。受控于标志位G粒度位(granularity bit)。

  3. L位是large的意思,决定是否开启32或64位保护模式。64没有段或者界限,只包含一个访问权限字节和若干控制位,段的基地址为00 0000 0000H,即所有代码段都从地址0开始,且没有边界检查。

  4. AV(active)位指示段是否有效。

  5. D位标志是否打开32位指令,1为32位指令(只能用于保护模式),0为16位指令。

  6. 访问权限字节(access rights byte)控制着对保护模式中存储器段的访问,它全面控制着段。例如,如果是数据段,则指定其增长方向。注意,在64位模式中,只有代码段,而没有其它段描述符类型,一个64位平展模式的程序在代码段包含数据和堆栈。

  

图二 访问权限字节

  描述符是通过段寄存器从描述符表中选择的。在段寄存器中,包含13位选择子字段、表选择子位(TI)和请求优先级字段。如下图:

图三 段寄存器内容

  Windows将优先级00赋予内核和驱动程序(同Linux),而分配给应用程序为优先级11。Windows不用优先级01和10。

  平展模式内存系统是不存在分段的系统。首地址为00 0000 0000H,尾地址为FF FFFF FFFFH(40位)。它不使用段寄存器进行寻址。CS只定义代码段访问权限的描述符表中的选择描述符。段寄存器仍负责选择软件的优先级。但不使用描述符中的基址和界限来选择段的内存地址,不会像32位模式下那样修改实际内存地址。64位模式下的偏移地址即是实际的物理地址,且实模式系统是不可用的,但仍允许保护机制和页面调度(CS)。另外,它的打开有L标志位控制。

  另外,由于地址只有40位,故任何超过40位的地址都会被截断。Pentium工作在完全的64位模式下(目前大多数应用程序都是工作在IA32兼容模式下的)。另外,也不是所有的指令都是支持64位的(例如指令的偏移地址的位数就可能会限制住)。

Intel微处理器学习笔记(二) 三种模式的更多相关文章

  1. Intel微处理器学习笔记(三) 不可见寄存器

    参考资料: 1.  http://blog.chinaunix.net/uid-20797642-id-2495244.html 2.  http://www.techbulo.com/708.htm ...

  2. Java设计模式学习笔记(二) 简单工厂模式

    前言 本篇是设计模式学习笔记的其中一篇文章,如对其他模式有兴趣,可从该地址查找设计模式学习笔记汇总地址 正文开始... 1. 简介 简单工厂模式不属于GoF23中设计模式之一,但在软件开发中应用也较为 ...

  3. JavaScript新手学习笔记3——三种排序方式(冒泡排序、插入排序、快速排序)

    每种编程语言学到数组的时候,都会讲到排序算法,当时学C语言的时候,卡在排序算法.今天来总结一下javascript中如何实现三种排序算法. 1.冒泡排序(默认升序排列哦) 原理: 冒泡排序的原理,顾名 ...

  4. Intel微处理器学习笔记(一) 实模式内存结构

    图一 奔腾概念示意图 存储系统一般划分为三个主要部分:TPA(transient program area),System Area和XMS(extended memory system). 图二 内 ...

  5. Intel微处理器学习笔记(五) 中断

    ▼ 中断是一个由硬件激发的过程,它中断当前正在执行的任何程序. ▼ 在Intel系列微处理器中,包括INTR和NMI(Non Maskable Interrupt)两个申请中断的引脚和一个响应INTR ...

  6. Intel微处理器学习笔记(四) 内存分页

    内存分页机制(memory paging mechanism)是从386开始的.线性地址通过分页机制透明转换为物理地址. 从这里知道:1. 如果不分页,则线性地址等于物理地址:2. 如果分页,则线性地 ...

  7. MySQL学习笔记:三种组内排序方法

    由于MySQ没有提供像Oracle的dense_rank()或者row_number() over(partition by)等函数,来实现组内排序,想实现这个功能,还是得自己想想办法,最终通过创建行 ...

  8. 概率图模型(PGM)学习笔记(三)模式判断与概率图流

    我们依旧使用"学生网络"作为样例,如图1. 图1 首先给出因果判断(Causal Reasoning)的直觉解释. 能够算出来 即学生获得好的推荐信的概率大约是0.5. 但假设我们 ...

  9. PHP语言学习之php-fpm 三种运行模式

    本文主要向大家介绍了PHP语言学习之php-fpm 三种运行模式,通过具体的内容向大家展示,希望对大家学习php语言有所帮助. php-fpm配置 配置文件:php-fpm.conf 开启慢日志功能的 ...

随机推荐

  1. Word转换为markdown

    Word转换为markdown 首先你的电脑要有office word 1   安装pandoc https://github.com/jgm/pandoc/releases,可以找到最新的pando ...

  2. POJ:Dungeon Master(三维bfs模板题)

    Dungeon Master Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 16748   Accepted: 6522 D ...

  3. Linux定时任务出现问题时正确的解决步骤

    但凡是提供服务的,都要有本账.软件服务也不例外.无论是Apache,Nginx,还是我们自己搭建的网站,日志是标配.这里的日志就是一本账. 当定时任务出现问题时,正确的处理步骤是: 1,定时任务服务是 ...

  4. Log4net 乱码问题解决

    在将log4net输出到UdpAppender会出现乱码问题,当然,丢到第三方日志分析工具glaylog下,也出现中文乱码. <?xml version="1.0"?> ...

  5. .net 调用API并解析Json数据方法

    using System; using System.Collections.Generic; using System.Linq; using System.Net.Http; using Syst ...

  6. 自实现jQuery版分页插件

    本篇博客的分页插件是在2017-11-10 的一篇博客的基础上改造的(原博客地址:原生js版分页插件),主要是优化了分页按钮的排列和显示样式,取消首页和末页的箭头按钮,改为数字按钮,并始终把它们分别固 ...

  7. JS中的对象数组

    <html> <head> <title>对象数组的字符串表示</title> <script type="text/javascrip ...

  8. Object-C-Foundation-NSNuber

    NSNumber 是一个数值类型封装起来的数值. 装箱:基础类型->对象类型 NSNumber *number=[NSNumber numberWithInt:12]; 拆箱:对象类型-> ...

  9. 数据仓库基础(三)OLAP

    本文转载自:http://www.cnblogs.com/evencao/archive/2013/06/14/3135589.html 联机处理分析(OLAP):介绍 首先要理解的概念: 1.维度: ...

  10. linux常用命令:ln 命令

    ln是linux中又一个非常重要命令,它的功能是为某一个文件在另外一个位置建立一个同步的链接.当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在 ...