Intel微处理器学习笔记(二) 三种模式
三种模式:实模式、保护模式和平展模式。
实模式存储器(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微处理器学习笔记(二) 三种模式的更多相关文章
- Intel微处理器学习笔记(三) 不可见寄存器
参考资料: 1. http://blog.chinaunix.net/uid-20797642-id-2495244.html 2. http://www.techbulo.com/708.htm ...
- Java设计模式学习笔记(二) 简单工厂模式
前言 本篇是设计模式学习笔记的其中一篇文章,如对其他模式有兴趣,可从该地址查找设计模式学习笔记汇总地址 正文开始... 1. 简介 简单工厂模式不属于GoF23中设计模式之一,但在软件开发中应用也较为 ...
- JavaScript新手学习笔记3——三种排序方式(冒泡排序、插入排序、快速排序)
每种编程语言学到数组的时候,都会讲到排序算法,当时学C语言的时候,卡在排序算法.今天来总结一下javascript中如何实现三种排序算法. 1.冒泡排序(默认升序排列哦) 原理: 冒泡排序的原理,顾名 ...
- Intel微处理器学习笔记(一) 实模式内存结构
图一 奔腾概念示意图 存储系统一般划分为三个主要部分:TPA(transient program area),System Area和XMS(extended memory system). 图二 内 ...
- Intel微处理器学习笔记(五) 中断
▼ 中断是一个由硬件激发的过程,它中断当前正在执行的任何程序. ▼ 在Intel系列微处理器中,包括INTR和NMI(Non Maskable Interrupt)两个申请中断的引脚和一个响应INTR ...
- Intel微处理器学习笔记(四) 内存分页
内存分页机制(memory paging mechanism)是从386开始的.线性地址通过分页机制透明转换为物理地址. 从这里知道:1. 如果不分页,则线性地址等于物理地址:2. 如果分页,则线性地 ...
- MySQL学习笔记:三种组内排序方法
由于MySQ没有提供像Oracle的dense_rank()或者row_number() over(partition by)等函数,来实现组内排序,想实现这个功能,还是得自己想想办法,最终通过创建行 ...
- 概率图模型(PGM)学习笔记(三)模式判断与概率图流
我们依旧使用"学生网络"作为样例,如图1. 图1 首先给出因果判断(Causal Reasoning)的直觉解释. 能够算出来 即学生获得好的推荐信的概率大约是0.5. 但假设我们 ...
- PHP语言学习之php-fpm 三种运行模式
本文主要向大家介绍了PHP语言学习之php-fpm 三种运行模式,通过具体的内容向大家展示,希望对大家学习php语言有所帮助. php-fpm配置 配置文件:php-fpm.conf 开启慢日志功能的 ...
随机推荐
- [py]flask从0到1-模板/增删改查
flask知识点 1.后端渲染html到前端 render_template 2.后端获取前端数据 request.args.get 3.前端获取后端数据 模板 4.警示消息 flash {{ get ...
- os模块的使用
python编程时,经常和文件.目录打交道,这是就离不了os模块.os模块包含普遍的操作系统功能,与具体的平台无关.以下列举常用的命令 1. os.name()——判断现在正在实用的平台,Window ...
- recv函数返回值说明
recv函数 int recv( SOCKET s, char FAR *buf, int len, int flags); 不论是客户还是服务器应用程序都用recv函数从TCP连接的另一端接收数据. ...
- STA分析(七) sdc
STA分析前的环境设置,包括:setup clocks,specifying IO characteristics 1)定义一个master clock:create_clock -name .. - ...
- css rgba透明度变化
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Linux基础命令---ckconfig
chkconfig 启动或者关闭系统服务,设置服务的运行级别,该指令并不会立刻启动或者停止服务,而是在开机的时候发生效果. chkconfig提供了一个简单的命令行工具,用于维护/etc/rc[0-6 ...
- linux测试带宽命令,Linux服务器网络带宽测试iperf
linux测试带宽命令,Linux服务器网络带宽测试iperf必须先运行iperf serveriperf -s -i 2客户端iperf -c 服务端IP地址 iperf原理解析 iperf工具可以 ...
- mysql的数据类型和字符集
MySQL的数据类型 MySQL数据库支持的数据类型主要有以下几种: 整型 浮点型 字符 BLOB型 枚举和集合类型 JSON类型(MySQL5.7新增加的支持) 整型 整数类型是数据库中最基本的数据 ...
- 20145324王嘉澜《网络对抗技术》Web基础
实践要求 ①Web前端HTML: 能正常安装.启停Apache.理解HTML,理解表单,理解GET与POST方法,编写一个含有表单的HTML ②Web前端javascipt: 理解JavaScript ...
- android 实践项目 总结 (修改)
Android手机定位与地图实现 在一个不熟悉的环境中,获得自己的位置,选择合适的就餐地点,住宿和公交路线成为一项难题.本次的实践项目就是为了解决上述难题的,通过调用百度地图的接口实现定位.查询公交路 ...