第2章 Intel IA-32处理器结构与原理.

Slides:



Advertisements
Similar presentations
多核结构与程序设计 杨全胜 东南大学成贤学院计算机系.
Advertisements

2017年3月5日 单片机原理与应用 背景知识调查.
第2章 微处理器 2.1 概述 /8086微处理器 微处理器 X86/Pentium微处理器
第3章 奔腾系列微处理器.
实验四 利用中规模芯片设计时序电路(二).
第一章 计算机基础知识 第一节 计算机概述 一、计算机的基本组成和工作原理 二、有关术语 三、计算机发展简史 四、微型计算机概述
汇编语言与接口技术 教师:范新民.
第2章 Intel IA-32/Intel 64处理器 结构与原理
第8章 现代微型计算机 x86系列微处理器 8.2 微型计算机体系结构 8.3 存储管理技术 8.4 多任务管理与I/O管理
Kvm异步缺页中断 浙江大学计算机体系结构实验室 徐浩.
3.3.5 程序控制指令 控制转移指令分为: 转移指令 循环控制指令 调用和返回指令 中断指令.
第5章 循环与分支程序设计  循环程序设计  分支程序设计.
汇编语言程序设计 Assembly Language Programming
第三章 寻址方式与指令系统 3.1 寻址方式 一条指令通常由两大部分构成: 操作码 操作数
逆向工程-汇编语言
微机原理与接口技术 第2章 8086系统结构 朱华贵 2015年09月17日.
第四章 典型CPU及指令系统举例.
第2章 汇编语言与汇编程序 ——8086/8088指令系统 mov ax,12h call display Jmp 1234h.
第2章 16位和32位微处理器 位微处理器8086/ 位微处理器80386
总 复 习.
計算機結構 – 概論 陳鍾誠 於金門大學.
第3章 寻址方式 罗文坚 中国科大 计算机学院
第2章 IA-32结构微处理器 退出 2.1 IA-32结构的概要历史 2.2 IA-32 PROCESSOR的功能结构
存储系统.
第3章 8086/8088指令系统 mov ax,12h call display Jmp 1234h.
微机原理与接口技术 ——80x86微处理器 西安邮电大学 计算机学院 范琳.
Windows网络操作系统管理 ——Windows Server 2008 R2.
微型计算机原理及应用.
第五章 微处理器.
第2章 Intel IA-32/Intel 64处理器 结构与原理
1.3 微型计算机的结构和工作原理.
本节内容 模拟线程切换 视频提供:昆山滴水信息技术有限公司 官网地址: 论坛地址: QQ交流 :
逆向工程-汇编语言
CPU结构和功能.
第二章 80x86计算机组织 § x86微处理器 § 2.2 基于微处理器的计算机系统构成 § 2.3 中央处理机
第二章 IBM-PC微机的功能结构 2.1 IBM-PC微机基本结构 一、 微机的一般构成 一般计算机应包括五大部件:
第二章 80x86计算机组织 x86微处理器 2.2 基于微处理器的计算机系统构成 2.3 中央处理机 2.4 存储器
微机原理与接口技术 ——80x86微处理器 西安邮电大学 计算机学院 范琳.
第二章 8086微处理器. 第二章 8086微处理器 微处理器的基本结构 8086微处理器的主要特性和内部结构 8086CPU的工作模式和引脚信号 8086的存储器管理 8086的总线操作和时序.
《微型计算机原理与接口技术》 第4版 王良 宁德师范学院 吴宁 乔亚男 编著 清华大学出版社 出版
C语言程序设计 主讲教师:陆幼利.
得技通电子 问题 1.0 、选择题:本大题共15个小题,每小题1分,共15分,在每小题给出的四个选项中,只有一项符合题目要求,把所选项前的字母填在括号内。
第四章 MCS-51定时器/计数器 一、定时器结构 1.定时器结构框图
第2章 80x86计算机组织  计算机系统  存储器  中央处理机  外部设备.
(Random Access Memory)
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月13日.
第三章 MCS 51的硬件结构.
第二章 补充知识 2.1 总线和三态门 一、总线(BUS) 三总线结构 数据总线DB(Data Bus)
<编程达人入门课程> 本节内容 内存的使用 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群: ,
第5章 循环与分支程序设计  循环程序设计  分支程序设计.
成绩是怎么算出来的? 16级第一学期半期考试成绩 班级 姓名 语文 数学 英语 政治 历史 地理 物理 化学 生物 总分 1 张三1 115
实验三 16位算术逻辑运算实验 不带进位控制的算术运算 置AR=1: 设置开关CN 1 不带进位 0 带进位运算;
本节内容 内存复制指令 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
微型计算机原理与接口技术 (第2版) 赵宏伟 于秀峰 黄永平 秦贵和 北京:科学出版社 出版 吉林大学计算机科学与技术学院 制作.
实验二 带进位控制8位算术逻辑运算实验 带进位控制8位算术逻辑运算: ① 带进位运算 ② 保存运算后产生进位
微机原理与接口技术 ——8086微处理器 西安邮电大学 计算机学院 范琳.
临界区问题的硬件指令解决方案 (Synchronization Hardware)
3. 逻辑运算指令 A、简单逻辑操作指令 CLR A. (不影响CY、AC、 OV标志) CPL A
本节内容 Windows线程切换_时钟中断切换 视频提供:昆山滴水信息技术有限公司 官网地址: 论坛地址: QQ交流 :
本节内容 通用寄存器 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
本节内容 标志寄存器.
微机原理与接口技术 西安邮电大学计算机学院 宁晓菊.
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
第二章 8086系统结构 /8086的存储器组织 的系统配置及引脚功能 CPU时序
上节复习(11.7) 1、定时/计数器的基本原理? 2、定时/计数器的结构组成? 3、定时/计数器的控制关系?
第三章 8086的指令系统 8086指令特点 8086的寻址方式 8086的指令格式及数据类型 8086的指令集.
<编程达人入门课程> 本节内容 有符号数与无符号数 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
第5章 中 央 处 理 器 5.1 CPU的功能和组成 5.2 指令周期 5.3 时序产生器和控制方式 5.4 微程序控制器
DSP技术与应用 电子与信息技术系.
学习目标 1、什么是列类型 2、列类型之数值类型.
Presentation transcript:

第2章 Intel IA-32处理器结构与原理

2.1 Pentium处理器 2.1.1 Pentium处理器的特性 80x86系列微处理器兼容 有64位数据总线、 32位地址总线,寻址空间4GB。 内部为RISC型超标量结构 - 两个5级整数指令流水线,一个8级浮点流水线。 具有超级流水线技术的高性能浮点运算器。 数据-代码分离式高速缓存,符合MESI协议。 增强的错误检测和报告功能。 利用片上分支目标缓冲器提高分支指令预测准确性。 常用的指令不采用微程序设计,而改用硬件实现。 支持64位外部数据总线突发传输方式 通过APIC总线支持多处理器系统 MESI(Modified、Exclusive、Shared、Invalid)Cache一致性模型提供了一种跟踪存储器数据变化的方法,这种方法保证了一个Cache行数据更新以后,能够和所有与它的地址有关联的存储单元保持数据的一致性。MESI协议将数据变化定义为4种状态:修改(Modified)、独占(Exclusive)、共享(Shared)、无效(Invalid)。 修改(Modified):由于写Cache命中引起Cache行数据的更新,该状态提醒Cache子系统去监听系统总线。当Cache检测到监听命中这一修改行时,必须将修改行的数据写回存储器; 独占(Exclusive):指出这个Cache不知道有任何其它Cache保存了这个Cache行的副本; 共享(Shared):指出这行数据可能存在于几个Cache当中,在每个相关的Cache行和存储器行里都存放了这行数据的副本; 无效(Invalid):复位以后的无效状态,指示这一目标行在Cache中不存在;

2.1.2 Pentium处理器的内部结构与工作原理 ①=指令预取 ②=首次译码 ③=二次译码 ④=指令执行 ⑤=写回R 分支目标缓冲器 代码 Cache 8KB TLB 指令 指针 预取缓冲存储器 指令译码部件 256位 总 线 接 口 部 件 分页部件 64位数据总线 预取 地址 32位地址总线 控制 控 制 部 件 地址生成 (U流水线) (V流水线) ROM ALU 整数寄存器组 桶形移位器 数据 Cache 8KB 浮点部件 寄存器组 加法器 除法器 乘法器 80位 80 位 分支检测和目标地址 32位 ① ② ③ ④ ⑤ 每条流水线分为5级,分别为指令预取(PF)、首次译码(D1)、二次译码(D2)、指令执行(EX)和写回寄存器(WB)。每条指令完成一个流水级后,就会进入下一级,以便让指令队列中的下一条指令进入该级。 指令预取阶段总是按照给定的指令地址,由L1指令Cache顺序地取指令,直到在D1段遇到一条转移指令并预测它在EX阶段将发生转移时为止。 首次译码阶段对指令操作码部分进行译码,检查是否为转移指令,如果是转移指令,就将此指令的地址送往分支目标缓冲器;在这一阶段还要进行指令配对检查,如果进入D1阶段的it,it+1两条指令能配对,如it+1指令的执行不需要依赖it指令,就将it指令和it+1指令分别放在U流水线和V流水线,两条指令并行执行。 D2阶段生成存储器操作数地址,并按照保护模式的规定检查是否保护违约,如果违约则产生例外。两条配对的指令要同时离开D2阶段。 EX阶段以两个ALU为中心,完成U和V流水线的两条指令的算术逻辑运算。 WB阶段主要功能是以ALU运算结果修改寄存器,这包括对标志寄存器的修改。

写后读 写后写 指令配对规则 配对的指令必须是简单指令 两条指令之间不可存在“写后读”或“写后写”这样的寄存器相关性 一条指令不能同时既包含位移量又包含立即数 带前缀(JCC指令的OF除外)的指令只能出现在U流水中 浮点运算指令不能和任何指令配对(FCXH除外) 下面两条指令是否可配对? MOV AX, 200 MOV CX, AX MOV AX, 200 MOV AX, 412 写后读 写后写

2.2 P6微结构的处理器 L2 Cache 采用12级3流水超标量结构 动态执行技术 Pentium II 北桥 内存 双独立总线结构 FSB 前端总线 L2 Cache 后端总线 采用12级3流水超标量结构 动态执行技术 多路分支预测 预测分支未来的方向,为处理器预 先译码分支之后的指令提供依据 动态数据流分析 处理器分析几条指令的数据相关性和资源可用性 以优化的执行顺序高效地乱序执行这些指令 推测执行 在假设分支走向基础上,执行其中一路指令流 双独立总线结构 后端总线连接到L2 Cache上 前端总线FSB主要负责主存储器的信息传送操作

Pentium 4采用了20-32级流水线 2.3 NetBurst微结构的处理器 1. 超深流水线技术 衡量CPU的性能指标是CPU完成应用程序所需的总时间。其计算公式如下: CPU性能=CPU的主频×IPC IPC:每时钟执行的指令条数。 要提高CPU性能,可采用提高CPU主频和提高IPC。 要提高主频→减少每个流水级的执行周期→减小每个流水级的任务量→将任务再分解→增加流水线深度 Pentium 4采用了20-32级流水线

2. 执行跟踪Cache(execution trace Cache) 放弃L1 指令Cache的设计,采用执行跟踪Cache,它在译码器的后面,按程序流顺序存放已经译码好的最多12,000条微指令,如遇到重复执行可不必再译码。 3. NetBurst微结构的缺陷: IPC表现不佳,尤其是分支预测失败后恢复流水线的代价太大 频率提高后,功耗随之上升,功耗过高,影响了主频的进一步提高。 Power = Cdynamic×电压×电压×频率 其中Cdynamic是面积与处于活跃状态的数据位×翻转的触发器数量的乘积

2.4 Core微结构的处理器 2.4.1 Core微结构 4 个14级流水线 兼容32位的64位设计 返回 采用14级4流水超标量结构 是一个兼容IA-32结构的Intel 64结构微处理器; Core微结构从P6微结构中改进而来; 通用寄存器为64位宽,但主要应用其低32位。 连接存储器的外部数据总线宽度为64位,每次可同时传输8个字节; 外部地址总线宽度是36位~40位,故物理地址空间为64GB~1024GB(1TB)。

2.4.2 Core 2处理器内部结构示意图 采用两个Core微结构组成的多核结构微处理器

* MMX 实际上使用的是 x87 浮点寄存器; SSE, SSE2, 和 SSE3 使用了新的SSE 寄存器 2.5 现代Intel微处理器常用技术 2.5.1. SIMD技术– SSE, SSE2, SSE3 Support 2x doubles 4x floats 1x dqword SSE2 SSE3 SSE4 16x bytes SSE 8x words MMX* 这个图如何看: MMX技术使用8个MMX寄存器,1个64位MMX寄存器封装1个QWord或2个dword 或4个word或8个byte的数据同时进行计算 SSE技术使用8个MMX寄存器,1个64位MMX寄存器封装1个QWord或2个dword 或4个word或8个byte的数据同时进行计算, 还可以使用8个XMM寄存器,每个128位的XMM寄存器可以封装1个DQWord,4个单精度float数据同时进行计算 SSE2和SSE3使用8个MMX寄存器,1个64位MMX寄存器封装1个QWord或2个dword 的数据同时进行计算, 还可以使用8个XMM寄存器,每个128位的XMM寄存器可以封装1个DQWord或2个Qword或4个dword或8个word或16个byte或2个双精度浮点数据同时进行计算 57条MMX指令操作8个64位长的MMX寄存器内的紧缩字节(8个字节打包成一个64位长的数据)、字或双字整型数上执行SIMD 70条SSE指令处理在8个128位的XMM寄存器中的单精度浮点数和在MMX寄存器中的紧缩整数。高速缓存控制指令通过增加主存到Cache和处理器到主存的数据流,改善存储性能,SIMD浮点指令使处理器能同时执行4个浮点操作。 144条SSE2指令处理在XMM寄存器中的紧缩双精度浮点数和在MMX与XMM寄存器中的紧缩整数。 13条SSE3指令增强SSE, SSE2和x87FPU数学能力的性能。 4x dwords 2x qwords * MMX 实际上使用的是 x87 浮点寄存器; SSE, SSE2, 和 SSE3 使用了新的SSE 寄存器

使用 SSE3 for (int i=0;i<=MAX;i++) c[i]=a[i]+b[i]; 128-bit Registers not used 128-bit Registers A[3] A[2] B[3] B[2] C[3] C[2] + A[1] A[0] B[1] B[0] C[1] C[0] 按照常规,该循环要循环MAX次,使用SSE3优化后,一个循环可以同时算4个数据,这样只要循环MAX/4次就可以了

2.5.2 乱序执行技术 为了提高指令流的执行效率,乱序执行核心监视很多条指令,然后在不损失数据完整性的前提下,采用能充分发挥多个处理部件并行工作的指令顺序来执行。这个指令顺序可能和原始程序的不一样。 非乱序执行演示 乱序执行演示 R=F-7 R=F-7 Q=D-E Q=D-E P=A*2 P=A*2 A=B+C A=B+C 流水1 四条指令,乱序节省了一个时钟周期 流水2 流水1 流水2

2.5.3 超线程(Hyper-Threading, HT)技术 允许物理上单个的处理器采用共享执行资源的方法同时执行两个或更多的分离代码流(线程) HT技术由单处理器上的2个或者多个逻辑处理器组成,每个逻辑处理器都有自己的IA-32结构状态(AS) 每个逻辑处理器都有自己的IA-32通用寄存器、段寄存器、控制寄存器、调试寄存器等 逻辑处理器共享的资源包括执行引擎和系统总线接口 看结构 AS 处理器核心 支持HT的IA-32处理器 2个逻辑处理器共享一个核 AS=IA-32结构状态 传统多IA-32处理器系统 每个处理器一个独立封装 如果两个线程一个整型运算一个浮点运算,则可获益,因为他们使用不同运算部件,可以并行执行 如果两个线程一个需要运算,一个需要I/O, 则可获益,因为需要I/O的线程会因为I/O请求而被挂起,而此时需要运算的线程干好可以利用运算器进行运算 问题: 如果在一个核内存在两个线程,一个需要I/O,一个需要运算器,谁的优先级高? 答:需要I/O的,因为该线程获得服务后马上就被挂起,这样可以将执行引擎让出来给另一个线程 如果两个线程要同一个共享资源,则线程切换代价小

2.5.4 多核(Multi-Core)技术 通过在一个物理封装中包含多个分离的完整执行核来提供硬件多线程能力 每个完整的执行核不仅有自己的AS,还拥有自己的执行引擎,总线接口与L2 Cache 。 结构上有支持HT技术的和不支持HT技术的双核结构 核之间有总线链接和Cache共享两种方式 众核(Many-Core)技术 一说为大于8核的CPU,一说是大于64核的CPU 多核=2-8核 众核=8核以上

Intel的多核结构 Core 2 Duo处理器 Pentium D IA-32处理器 Pentium EE IA-32处理器 AS AS 执行引擎 Local APIC L2 Cache 总线接口 系统总线 Pentium EE IA-32处理器 AS 执行引擎 Local APIC L2 Cache 总线接口 系统总线 Intel的多核结构 Core 2 Duo处理器 AS 执行引擎 Local APIC L2 Cache 总线接口 系统总线 Core 2 DUO是原生双核,不支持HT技术 Core i7是原生四核,支持HT技术

2.5.5 Intel 64 Architecture (EM64T技术) 完全兼容IA-32指令集 新引进的IA-32e模式包括兼容模式和64位模式 兼容模式允许大多数IA-32程序无需修改地运行在64位操作系统下 64位模式下具有以下特性: 64位线性地址空间 最高支持40位物理地址空间 增加8个新的通用寄存器 增加8个新的流SIMD扩展(SSE, SSE2和SSE3) 64位宽的通用寄存器和指令指针寄存器 英特尔已将过去的EM64T技术改为Intel 64 Architecture 注意IA-64不是Intel 64 Architecture,IA-64是指采用EPIC技术的64位处理器安腾和安腾2系列(Itanium, Itanium 2 )

2.5.6 Intel的虚拟化技术 在硬件层面上提供多虚拟系统功能 一个机器可以虚拟成多个机器,甚至同时可以运行多个相同或不同的操作系统。 虚拟机监控程序(VMM)为每个操作系统提供一个虚拟的硬件环境

2.5.7 酷睿2处理器新技术 宽位动态执行(Wide Dynamic Execution) 着眼于提高每时钟周期处理的指令数,改善执行时间和能源效率 P6架构 Core架构 3个译码器 3条流水线 同时完整的取、发射、执行3条指令 4个译码器 4条流水线 同时完整的取、发射、执行4条指令

宽位动态执行 宏融合(macrofusion)技术能够在译码期间将常见的指令对组合到一个单独的微代码中(Micro-op) Instruction Queue add ecx, 1 mov [mem1], ecx mov edx, [mem1] cmp eax, [mem2] jge label for (int i=0; i<100000; i++) { … } Cycle 1 add ecx, 1 dec0 mov [mem1], ecx dec1 此页举例没有宏融合的情况 5条语句需要2个周期完成 mov edx, [mem1] dec2 cmp eax, [mem2] dec3 Cycle 2 jge label dec0

宽位动态执行 宏融合(macrofusion)技术能够在译码期间将常见的指令对组合到一个单独的微代码中(Micro-op) Instruction Queue 宽位动态执行 宏融合(macrofusion)技术能够在译码期间将常见的指令对组合到一个单独的微代码中(Micro-op) add ecx, 1 mov [mem1], ecx mov edx, [mem1] cmp eax, [mem2] jae label for (unsigned int i=0; i<100000; i++) { … } Cycle 1 add ecx, 1 dec0 mov [mem1], ecx dec1 此页举例使用宏融合的情况 5条语句只需要1个周期完成,因为cmp指令和jae指令进行了宏融合 注意解释为什么要将int 改为unsigned 因为int型属于有符号数,所以大于等于转移要用jge指令,而unsigned指令是表示无符号数,无符号数的大于等于转移指令是jae指令,而Core结构中CMP指令不能和jge指令融合 TEST 可以融合所有的条件跳转指令. CMP 只能融合下列条件跳转指令(Core中) JA (and its equivalent, JNBE) JAE (equivalent JNB) JE (JZ) JNA (JBE) JNAE (JC or JB) JNE (JNZ) In this case, CMP will be fused with JAE while not with JGE mov edx, [mem1] dec2 cmpjae eax, [mem2], label dec3

宽位动态执行 微代码融合(Micro-op fusion)技术能在微代码执行前将译码自同一个x86指令的几个常见微代码对融合成一个微代码 u-ops of a Store “mov [mem1] ,edx” sta mem1 st [mem1] , edx std [mem1] ,edx Sta是获取地址,std是存数据,他们是mov edx, [mem1]指令译码出来的两个微代码,由于它们基本上都是配对出现,所以将它们融合成一个微代码st 这两个微代码是有数据相关的,所以它们需要两个时钟周期分别进同一个流水线,但融合成一个微代码后只需要一次进流水线了 微代码融合有效地“加宽”了流水线

智能功效管理(Intelligent Power Capability) 超细粒度功耗控制能够只对处于工作状态的部件提供电源,而关闭非工作部件的电源供应,从而有效降低功耗。 分离总线技术能够使总线宽度动态适应数据宽度的需要,对无效的信息位使其进入低电压状态,从而进一步降低功耗。 功效管理平台技术通过调整散热风扇运作模式,从外部降低处理器温度。

Intel 智能内存访问(Intel® Smart Memory Access) µProc 60%/年. (2X/1.5年) 1000 CPU 100 CPU-存储器性能差距每年增长50% 性 能 10 DRAM 9%/年. (2X/10年) DRAM 该新技术就是为了弥补存储器性能和CPU性能之间的巨大差距 1 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000

Intel 智能内存访问(Intel® Smart Memory Access) 内存消歧技术利用装载(load)数据指令和存储(store)数据指令之间的乱序执行来提高推测执行部件的效率,其原则是尽量将load指令提到它前面不冲突的store指令之前执行。 Memory Data W Store1 Y Load2 Y Data Z Store3 W 内存消歧技术可以使需要用的数据被提前装载,以便能快速使用。一旦预测失败,内存消歧技术能检测到地址冲突,并重新装载数据,重新执行该Load操作,不过这种情况出现的概率很小。 Load4 X Data Y 没有内存消歧技术时Load4只能等待前面所有Store结束 这样做究竟有什么好处? 下面来看有内存消歧技术的情况 先乱序 Data X

用独立于流水线的预测器预测将来要用的数据,提前取到Cache中 Intel 智能内存访问(Intel® Smart Memory Access) 高级预取技术确保被使用的数据已经位于最靠近能获得最小内存延迟的地方。 L1D是3 clk的延迟和1 clk的通过时间; L2是14和2 clk Cache失效延迟 L1 失效后去读 L2 ~ 10 cycles L2 失效, 存取存储器 ~300 cycles (server/FBD) L2 失效, 存取存储器 ~165 cycles (Desk/DDR2) Cache 带宽 Cache带宽 ~ 8.5 bytes/cycle 存储带宽 桌面系统 ~ 6 GB/sec/socket (linux) 服务器 ~3.5 GB/sec/socket 用独立于流水线的预测器预测将来要用的数据,提前取到Cache中 高级预取技术 :智能内存访问中为每一个L1 数据Cache配备了2个数据预取器,为L1指令Cache配备了一个指令预取器,并为L2 Cache也配备了2个预取器。这些预测器同时检测多个流,确保内核执行所需的数据能及时的存在于L1 Cache中,同时,L2 Cache的预测器分析内核的存取,以确保内核将来执行需要的数据能被保存在L2 Cache中。 问题:高级预取和内存消歧有什么区别? 答:内存消歧是根据指令的分析,进行指令的乱序执行 高级预取是分析数据流,预测将要使用的数据,将其提前读取到cache行。类似与分支预测那样,使用预测的结果来决定那些数据提前读取到cache行。(分支预测是通过预测结果决定哪个指令进流水线)

Intel高级智能Cache (Intel® Advanced Smart Cache) -带来了新的双核结构 AS 执行引擎 Local APIC L2 Cache 总线接口 前端总线 AS AS 执行引擎 执行引擎 Local APIC Local APIC Cache Line L2 Cache Cache Line L2 Cache 如果Cache不是共享的,如果两个核使用同一个数据则需要在前端总线中进行传递,增加了前端总线的负担,而共享cache的连个核不存在这个问题 总线接口 总线接口 前端总线

Intel高级数字多媒体增强技术 (Intel® Advanced Digit Media Boost) 引入128 位SIMD执行单元 SIMD Operation (SSE/SSE2/SSE3/SSSE) SOURCE 127 X4 X3 X2 X1 SSE/2/3 OP Y4 Y3 Y2 Y1 DEST Core™ arch 以前计算4个32位数需要2个时钟,有了128位SIMD执行单元后,只要一个时钟 CLOCK CYCLE 1 X4opY4 X3opY3 X2opY2 X1opY1 Previous CLOCK CYCLE 1 X2opY2 X1opY1 CLOCK CYCLE 2 X4opY4 X3opY3

2.6 Nehalem微架构的处理器 Nehalem微架构的新特点 原生四核结构,45nm芯片工艺 采用SMT技术,每核可同时执行2个线程 4发射超标量,每核四条16级流水线 48位虚拟地址空间,40位物理地址空间 更大的并行性 增加了乱序考察窗和调度表 宏融合技术被加强 改进后的更高效的算法 加快线程同步原语的执行(LOCK, XCHG) 加快了分支预测失败时的处理速度 改进了硬件预取和Load-Store调度 循环流检测器(LSD)从取指单元的指令队列下放到译码单元 提高了分支预测的性能 新增加了2级分支目标缓冲器,增大了对指令流历史的记录 新增加了重命名式返回栈缓冲,存放CALL指令的返回地址,并防止返回栈缓冲溢出 SMT 同时多线程技术 (超线程) Nehalem也降低了诸如LOCK,XCHG和CMPXCHG这样的同步原语的延迟,这个对于多线程程序是很必要的。英特尔声称LOCK和CMPXCHG指令(将使得流水线串行化)的延迟是P4的20%(这绝对是恐怖的),大约是Core 2的60%。延迟下降了,但行为还是保持和过去的一样。Lock指令是不可流水化的,尽管新的操作能够在LOCK指令前执行。 每一个线程都有自己的专用RSB,这可以避免交叉干扰。 循环流检测器或者LSD Loop Stream Detector)从取指单元的指令队列下放到译码单元,就像P4将L1 指令cache下降到译码之后做跟踪Cache一样。Nehalem将这一概念加以改进,将LSD移到了流水线的更下端的译码阶段中的一个新的28项微代码缓冲中。如果一个循环小于28条微代码,那么Nehalem能够将其缓存到LSD中并发射到乱序引擎中而不需要用到取指单元或译码单元。这将比Core 2用LSD更省能耗,因为它避免了译码并且更多的循环能够被缓存。一个有意思的事情是Nehalem的LSD在概念上非常类似于跟踪Cache(trace cache)。跟踪Cache的目的是存储动态程序排序中的已经译码的微代码,来代替指令Cache中按照静态编译顺序排列存储的x86指令。因此将译码器和分支预测器从关键路径中去除,并允许多个基本块立刻被取出。P4的跟踪cache的问题是它太脆弱,当它没有命中的时候,就需要一条条指令重新译码。一般指令Cache的命中率可以达到90%以上,而跟踪cache的命中率比这个标准低很多,很少超过80%,通常低到50~60%。换句话说,40~50%的时间P4就像一个单发射的微处理器,而无法充分利用它的执行单元。LSD缓冲器几乎和跟踪cache是同一个目的,但当它无法工作(比如循环太大)的时候却不会带来像P4的跟踪cache那样的巨大痛苦。

Nehalem微架构的新特点 新的缓存结构 集成了内存控制器 增强了宏指令融合的能力 与Core微架构一样的L1 Cache(32KB指令Cache 与32KB数据Cache) 每个核配新的256KB极低延迟L2 Cache 新增8MB包含共享式 L3 Cache,当L3 Cache没有命中,则数据肯定不在L1和L2 Cache中 集成了内存控制器 支持3通道的DDR3内存 内存运行于1.33GT/s的速率下,峰值带宽达到32GB/s(3×64bit×1.33GT/s÷8) 增强了宏指令融合的能力 包括了JL/JNGE, JGE/JNL, JLE/JNG, JG/JNLE 在32位和64位下都可用 L3 Cache Core L2 Cache L1 Caches Nehalem改进了前代出现的宏指令融合技术。在32位模式,Core 2能够译码将比较(CMP)或测试(TEST)与条件分支(Jcc)译码成一个微代码CMP+JCC。这增加了Core 2的译码带宽,降低了微代码量,提高了机器的效率。在Nehalem中,宏指令融合包含的分支条件更多,包括了JL/JNGE, JGE/JNL, JLE/JNG, JG/JNLE,这些指令的任何一个在上述情况下都会被编译成单独的CMP+JMP微代码。更好的消息是,Nehalem的宏指令融合技术在32位和64位下都是可用的。这一点很重要,因为大多数服务器和工作站都是工作在64位操作系统下的。即使是现代桌面系统也逐渐开始准备使用64位操作系统。

Nehalem微架构的新特点 用QuickPath代替了前端总线(FSB) 最大带宽高达25.6GB/s 采用高速差分信号传送 采用点对点互连技术,不仅连接CPU和北桥,还作为CPU与CPU之间的连接

小结: 型号 晶体管数 核心位数 地址线宽 数据线宽 流水级数 流水线数 核心数 8088 2.9万 16 20 16/8 - 1 80286 13万 24 80386 27.5万 32 80486 120万 5 Pentium 320万 64 2 PentiumIII 28M 36 12 3 Pentium 4 42M 20/31 PentiumD 321M 36/40 31 Core2 Duo 291M 14 4 Core 2 Quad 582M Nehalem 731M 40

2.7 IA-32处理器基本执行环境 2.7.1 IA-32处理器的工作模式 实地址模式 -开机进入的模式 - 与8086/8088兼容,但可以处理32位数据 - 1MB内存空间,分段管理,所有程序全在0 (核心)级 - MS-DOS运行在此模式下,PC机开机首先进入的也 是该模式 - 对内存和程序甚至操作系统没有任何保护能力 保护模式-最主要的工作模式 - 支持多任务操作,并保护每个任务的数据和程序 - 存储器采用虚拟地址空间、线性地址空间和物理地址空间三种方式来描述,具有存储保护功能 - 虚拟地址空间64TB(246) - 4级管理,可以使用分页或分段技术管理内存 - Windows、Linux操作系统均运行在该模式下 在Pentium之后的X86,软件被分为4级,0级最高,可以执行所有指令,做所有操作,3级最低,只能使用常规指令(非特权指令),应用程序一般在3级。级别低的程序不能存取级别高的内存或I/O区域的数据,以便起到保护作用

- 在保护模式下可以同时模拟多个8086处理器的工作 虚拟8086模式(V86模式)-怀旧的感觉 - 在保护模式下可以同时模拟多个8086处理器的工作 比较项目 实地址模式 虚拟8086模式 内存管理 分段管理 既分段又分页 存储空间 1MB 每个8086程序任务寻址1MB,总寻址空间4GB 多任务 不支持 支持,虚拟8086模式是IA-32保护模式中多任务的一个任务 系统管理模式-“休闲”时光 - 为操作系统和正在运行的应用程序提供透明的电源管理和系统安全平台功能 - 进入本模式系统将转到一个独立的地址空间运行,并保存当前程序或任务的基本环境 ”待机“”休眠“都在此模式 IA-32e模式(支持Intel 64 Architecture的处理器才有)

工作模式的转换 此图只简单介绍,不必要详细讲述

2.7.2 IA-32处理器在实地址模式下的存储管理 1. IA-32的基本数据类型 IA32的基本数据类型包括Byte, Word, Doubleword, Quadword和Double Quadword 1) 整型数据类型 包括无符号数和有符号数,其中有符号数以2的补码形式表示,最高位为符号位,1表示负数 类 型 位数 无符号数范围 有符号数范围 字节 8 0~255 -128~+127 字 16 0~65535 -32768~+32767 双字 32 0~232-1(4G-1) -231~+231-1 四字 64 0~264-1(16T-1) -263~+263-1

2) 浮点数据类型 最高位为符号位,接下来是有效数和阶码,有效数给定了数的有效位数,决定数的精度;阶码决定数据范围。 类型 符号位数 有效位数 阶码位数 数据范围 单精度浮点数 1 24 7 1.18×10-38 ~ 3.40 ×1038 双精度浮点数 52 11 2.23×10-308~ 1.79×10308 扩展精度浮点数 64 15 3.37×10- 4932~ 1.18×104932

指针用于定位存储单元的地址,包括近指针和远指针 16位模式下 3) 指针数据类型 指针用于定位存储单元的地址,包括近指针和远指针 16位模式下 近指针为段内16位有效地址 远指针包括16位段首地址和16位段内有效地址 32位模式下 近指针为段内32位有效地址 远指针包括16位段选择器和32位段内有效地址 64位模式下 近指针为64位有效地址 操作数是32位时,远指针包括16位段选择器和16位段内有效地址 操作数是32位时,远指针包括16位段选择器和32位段内有效地址 操作数是64位时,远指针包括16位段选择器和64位段内有效地址

4) 位域(field)数据类型 是一个连续的二进制位序列,可以从存储器任何一个字节的任何一位开始。可包含32位数据。 5) 串数据类型 是一个连续的位、字节、字或双字序列,位串可以从存储器任何一个字节的任何一位开始,并可包含232-1位,字节、字或双字串可包含232字节。 6) BCD和压缩BCD数据类型 用4位无符号二进制数表示十进制的0~9。压缩BCD每个字节包含二位十进制数,非压缩BCD数每字节的低4位表示一位十进制数,高4位为0。

以字节为单位编址,即一个字节数据占一个存储单元 2.存储单元的地址和内容 以字节为单位编址,即一个字节数据占一个存储单元 以字、双字、四字和双四字为单位存储数据时,分别占相邻2个、4个、8个和16个连续字节单元, 数据采用小端存放方式 字、双字、四字、双四字单元的地址由其最低字节的地址来表示。 字、双字、四字和双四字的地址一般采用边界对齐,即它们地址分别是偶数地址,4的倍数,8的倍数和16的倍数。如果边界不对齐,IA-32会采用2倍于边界对齐时的总线周期来完成读写操作,有些双四字的操作甚至会引起一般性保护异常。 问题:什么是小端存放方式 答:,高位字存放在高地址区,低位字存放在低地址区 高8位存放在高地址字节,低8位存放在低地址字节,高位字存放在高地址区,低位字存放在低地址区

存储单元的地址和内容 12H 34H 56H 78H 9AH BCH DEH FFH 0000H 0001H 0002H 0003H 0004H 0005H 0006H 0007H 0000H地址上, 字节数据是12H 字数据是3412H 双字数据是78563412H 四字数据是FFDEBC9A78563412H

3. 实地址模式存储器寻址 在此模式下,IA-32可以理解成是一个可处理32位数据的高速的8086。 a. 存储器地址的分段 解决16位寄存器表示20位地址的问题 段是最大长度为64KB的连续的内存储器块 物理地址 每个存储单元的20位实际地址,有唯一性,访问主存时必须用物理地址 逻辑地址 每个存储单元的地址用两部分表示: 段基址(段首址的高16位) 偏移量 (段内某单元相对段首址的地址差,也称为有效地址EA)

几个不同的逻辑段地址在物理地址上是可重叠的 物理地址=段基址×16+偏移量 书写形式:段基址:偏移量 16位段地址 : 16位段内偏移 (左移四位) 16位段地址 0000 + 16位段内偏移 = 20位物理地址 由于不同的逻辑段可能映射到同一个物理段,所以用汇编采用直接地址访问的时候有可能是很危险的。 6417H∶0100H 6417H×10H + 0100H = 64170H + 0100H = 64270H 几个不同的逻辑段地址在物理地址上是可重叠的

2.7.3 IA-32处理器中的寄存器 数据寄存器 通用寄存器 地址指针寄存器 段寄存器 变址寄存器 基本寄存器 指令指针寄存器 标志寄存器 控制寄存器 系统级寄存器 系统地址寄存器 调试与测试寄存器 浮点寄存器

1.通用寄存器 16位名称 32位名称 AH AL BH BL CH CL DH DL SP BP DI SI AX BX CX DX SP BP DI SI EAX EBX ECX EDX ESP EBP EDI ESI 累加器 基址变址 计数 数据 堆栈指针 基址指针 目的变址 源变址 高16位扩展 16位 32位 AX、BX、CX、DX、SP、BP、DI、SI分别是EAX、EBX、ECX、EDX 、ESP、EBP、EDI、ESI的低16位 AL、BL 、CL、DL分别是AX、BX、CX、DX的低八位 AH、BH 、CH、DH分别是AX、BX、CX、DX的高八位

1.1 通用数据寄存器 EAX 累加器存放操作数和结果,乘除运算、I/O指令中特指 EBX 基址寄存器 查表转换和间接寻址时存放基址 ECX 计数寄存器 串操作和循环中做计数 EDX 数据寄存器 乘除运算、I/O指令中特指 可以32位、16位或8位形式访问,例如, EAX可使用16位的AX,也可以使用8位的AH、AL

1.2 通用地址寄存器 ESP 堆栈指针寄存器,存放栈顶地址 EBP 基址指针寄存器,存放栈段基地址 ESI 源变址寄存器 EDI 目的变址寄存器 存放地址的偏移量,也可存放操作数, 但只能以32位或16位为单位访问 如:ESI可以使用16位的SI

1.3 64位模式下的通用寄存器

在64位模式下,FS, GS无效,CS, DS, ES, SS均指向基地址为0的“段”。 2.段寄存器 …… 堆栈段 数据段 附加段 代码段 2.1段寄存器介绍 CS 代码段寄存器 DS 数据段寄存器 SS 堆栈段寄存器 ES 附加段寄存器 FS、GS 附加段寄存器 一个完整的程序 段寄存器均为16位的寄存器 用于存储器寻址,存放段的开始地址 在64位模式下,FS, GS无效,CS, DS, ES, SS均指向基地址为0的“段”。

2.2段寄存器与段 IA-32的6个16位的段寄存器,专门存放段基地址: 代码段存放当前程序的指令代码 数据段存放程序涉及的源数据或结果 堆栈段是以“先入后出”为原则的数据区 附加段是辅助数据区,存放串或其他数据 用户可以同时使用6个段,段间可以邻接、部分重叠、 重叠或不相邻,但注意,段的实体(被实际使用的段空间)是不能重叠的。

段寄存器和相应存放偏移地址的寄存器之间的默认组合 默认段寄存器 16位偏移 32位偏移 代码段 CS IP EIP 数据段 DS BX、SI、 DI、一个8或16位数 EAX、EBX、ECX、EDX、 EDI、 ESI、一个8或32位数 堆栈段 SS SP或BP ESP或EBP 附加段 ES FS GS DI 无默认 EDI(用于串指令)

2.3 关于堆栈与堆栈段 堆栈是内存中以字为单元的“先入后出”、最大空间为64KB的存储区域,采用自底向上生成堆栈,栈底地址大于栈顶地址 栈区最高地址-1的单元为栈底,最后进栈数据所对应的地址单元为栈顶 SS指向栈的起始单元(地址最小的单元) SP寄存器动态跟踪栈顶位置,初始化时SP的值为堆栈的长度,即指向栈底+2单元 将数据送入堆栈叫压栈,从栈中取出数据叫弹出,均以字(16位或32位)为单位

EIP 指令指针寄存器:即程序计数器,指向下一条指令在代码段中的偏移量 3.指令指针寄存器 EIP 指令指针寄存器:即程序计数器,指向下一条指令在代码段中的偏移量 高16位扩展 16位的IP 32位指令指针寄存器EIP 64位模式下,扩展高32位成为64位RIP 高32位扩展 32位的EIP 64位指令指针寄存器RIP

4.标志寄存器 EFLAGS 标志寄存器( 程序状态字寄存器PSW ):记录系统运行中的各种状态 和信息。由各种标志位构成,反映运算后的结果特征,将影响某些指令(如条件转移指令)的执行。

8086/8088程序状态寄存器(标志寄存器) b15 b8 b7 b0 OF DF IF TF SF ZF AF PF CF 符号 名称 值为“1”的条件 CF 进位标志 加/减法时产生进位/借位 OF 溢出标志 运算结果超出有符号整数能表示的范围 ZF 零标志 运算结果为0时 SF 符号标志 运算结果的最高位为“1”时 AF 辅助进位标志 运算时半字节(b3)产生进位/借位 PF 奇偶标志 操作结果低8位为“1”的位数为偶数时 DF 方向标志 串操作中地址指针向低地址方向移动 IF 中断允许标志 允许CPU响应可屏蔽中断请求时 TF 跟踪标志 CPU处于单步执行的工作方式

思考题:以下的几个4位十六进制数相加,会使得8088状态寄存器的以下几位为什么值? 8000H + 0000H C000H + 8000H 4008H + 8010H 0808H C000H + C808H CF PF AF ZF SF OF 1 1 1 1 有符号数是用补码表示,C000H实际上是-4000H也就是-16384,C000H+C000H=8000H加上进位,有符号数不考虑进位标志,所以运算的结果就是有符号数的最小值-32768

注意: 进位标志CF是表示无符号数是否超出范围,如CF=1,运算结果仍然正确; 溢出标志表示的是有符号数运算结果是否超出范围,超出范围则运算结果已经不正确; 处理器对两个操作数进行运算的时候是按照无符号数求得结果,并相应设置CF,根据是否超出有符号数的范围设置OF; 对于程序员,如果做无符号运算,应该关心CF,做有符号运算应该关心OF。

IA-32 标志寄存器EFLAG 这部分同8088 符号 名称 值为“1”的条件 保 留 ID VIP VIF AC VM RF NT IOPL OF DF IF TF SF ZF AF PF 1 CF 31… 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 符号 名称 值为“1”的条件 IOPL IO特权位 其值表示该任务使用的I/O操作的特权级 00为最高的核心级,11是最低的用户级 NT 嵌套标志 当前任务嵌套在另一个任务中时 RF 恢复标志 DBUG调试时忽略下一条指令遇到的断点 VM 虚拟8086模式 从保护模式进入到虚拟8086模式 AC 对齐检查 数据访问允许对齐检查 VIF 虚拟中断位 允许V86扩展或允许保护模式虚拟中断 VIP 虚拟中断未决位 有未决的虚拟中断 ID 标识位 对它的读写表明处理器支持CPUID

5. 控制寄存器 保留,缺省为全0 页目录基地址寄存器 页故障线性地址寄存器 保 留 * OSFXSR # VMXE 31 18 14131211 10 9 8 7 6 5 4 3 2 1 0 TSD 保留,缺省为全0 ## # MCE PAE PSE DE PVI CR4 *** ** * PCE PGE VME 31 12 11 4 3 0 页目录基地址寄存器 PCD PWT CR3 31 0 页故障线性地址寄存器 CR2 31 0 保 留 CR1 31 30 29 18 17 16 5 4 3 2 1 0 控制寄存器更详细的描述参看“Intel® 64 and IA-32 Architectures Software Developer’s Manual Volume 3A: System Programming Guide, Part 1 --CHAPTER 2:INTEL® 64 AND IA-32 ARCHITECTURES” PG CD NW AM WP NE ET TS EM MP PE CR0 * OSFXSR ** OSXMMEXCPT *** OSXSAVE # VMXE ## SMXE 64位模式增加了CR8指定任务优先级

CR0是在以前286MSW(机器状态字)基础上扩展来的,可在核心级中用MOV EAX, CR0/MOV CR0, EAX指令来读取和写入。 保护模式允许 浮点协处理器监控 模拟浮点协处理器 任务切换 处理器扩展类型 数值异常 写保护 对齐屏蔽 允许分页 禁止Cache 不写贯穿(Write-through) PG CD NW AM WP NE ET TS EM MP PE CR0 31 30 29 18 17 16 5 4 3 2 1 0 CR0是在以前286MSW(机器状态字)基础上扩展来的,可在核心级中用MOV EAX, CR0/MOV CR0, EAX指令来读取和写入。

31 12 11 4 3 0 页目录基地址寄存器 PCD PWT CR3 禁止Cache 页面写贯穿

性能计数器允许 页全局允许 允许机器检查 物理地址扩展 页大小扩展位 调试扩充位 禁止定时标志 保护模式虚拟中断 虚拟8086模式扩展 31 7 6 5 4 3 2 1 0 8 保留,缺省为全0 PCE PGE MCE PAE PSE DE TSD PVI VME CR4 性能计数器允许 页全局允许 允许机器检查 物理地址扩展 页大小扩展位 调试扩充位 禁止定时标志 保护模式虚拟中断 虚拟8086模式扩展

6 系统地址寄存器 GDTR — 48位的全局描述符表寄存器 全局描述符表32位线性地址 16位界限值 6 系统地址寄存器 GDTR — 48位的全局描述符表寄存器 全局描述符表32位线性地址 16位界限值 IDTR — 48位的中断描述符表寄存器 中断描述符表32位线性地址 16位界限值 TR — 16位的任务状态段寄存器 TSS的16位选择字 LDTR — 16位的局部描述符选择字寄存器 LDT的16位选择字

当机器复位的时候CS=FFFFH,EIP, DS, ES, SS, FS, GS以及EFLAGS寄存器被清零。因为复位之后CS:EIP= FFFF:00000000,因此机器复位或开机后,都会自动从这个地址开始取指令,这里应该是BIOS的第一条指令。

时钟 0 1 2 3 4 5 6 7 8 结构相关引出分离缓存 返回 取指 译码 执行 第1条指令 第2条指令 第3条指令 第4条指令 …… 时钟 0 1 2 3 4 5 6 7 8 第1条指令 第2条指令 第3条指令 第4条指令 …… 回写 存储 返回

突发数据传输(一次地址,多次连续的数据传输) 返回