CPU的结构功能、指令周期及超线程原理
计算机的组成成分
冯诺依曼型的计算机有五大组成部分,其各部分的功能分别如下:
1、运算器:计算机中执行各种算术和逻辑运算操作的部件。运算器的基本操作包括加、减、乘、除四则运算,与、或、非、异或等逻辑操作,以及移位、比较和传送等操作,亦称算术逻辑部件(ALU);
2、控制器:由程序计数器、指令寄存器、指令译码器、时序产生器和操作控制器组成,它是发布命令的“决策机构”,即完成协调和指挥整个计算机系统的操作。运算器和控制器统称中央处理器,也叫做CPU。中央处理器是电脑的心脏;
3、存储器:存储器分为内存和外存。内存是电脑的记忆部件,用于存放电脑运行中的原始数据、中间结果以及指示电脑工作的程序。外存就像笔记本一样,用来存放一些需要长期保存的程序或数据,断电后也不会丢失,容量比较大,但存取速度慢。当电脑要执行外存里的程序,处理外存中的数据时,需要先把外存里的数据读入内存,然后中央处理器才能进行处理。外存储器包括硬盘、光盘和优盘;
4、输入设备:输入设备是向计算机输入数据和信息的设备。是计算机与用户或其他设备通信的桥梁。输入设备是用户和计算机系统之间进行信息交换的主要装置之一。键盘,鼠标,摄像头,扫描仪,光笔等都属于输入设备。
5、输出设备:是计算机硬件系统的终端设备,用于接收计算机数据的输出显示、打印、声音、控制外围设备操作等。也是把各种计算结果数据或信息以数字、字符、图像、声音等形式表现出来。常见的输出设备有显示器、打印机等。
至于面积最大的主板,其上面主要是布置了组成计算机的主要电路系统,一般有BIOS芯片、I/O控制芯片、键盘和面板控制开关接口、指示灯插接件、扩充插槽、主板及插卡的直流电源供电接插件等元件。
一台计算机的组成及数据通路,可由下图表示:
CPU的组成结构及功能
计算机中最核心的是CPU,CPU也是计算机的心脏,CPU的组成包括两部分:控制器、运算器。
控制器的功能有:取指令、分析指令、执行指令,发出各种操作命令、控制程序输入及结果的输出、总线管理、处理异常情况和特殊请求。
归纳一下,则是包含5部分的功能:指令控制、操作控制、时间控制、处理中断、数据加工。
运算器的功能则是实现算术运算和逻辑运算。
一个CPU的结构框图可以如下所示:
PC和IR寄存器完成:指令控制;
CU和时序电路完成:操作控制、时间控制;
中断系统完成:处理中断;
ALU和寄存器完成:数据加工。
CPU的内部结构如下图所示:
CPU中的寄存器及其功能如下所示:
- 通用寄存器:存放操作数,可作 某种寻址方式所需的专用寄存器
- 数据寄存器:存放操作数(满足各种数据类型),两个寄存器拼接存放双倍字长数据
- 地址寄存器:存放地址,其位数应满足最大的地址范围,用于特殊的寻址方式,其往往使用来存放段基值、栈指针。
- 条件码寄存器:存放条件码,可作程序分支的依据,如 正、负、零、溢出、进位等。
- 控制寄存器:比如PC、MAR、M、MDR、IR寄存器,用于控制CPU操作,其中MAR、MDR、IR寄存器是用户不可见的,PC寄存器是用户可见的。
- 状态寄存器:存放条件码。
- PSW寄存器:存放程序状态字。
CPU指令周期
CPU中的基本操作是指令,指令周期指的是:取出并执行一条指令所需的全部时间。
指令周期又可以分为:取值周期(负责取指、分析) 和 执行周期(负责执行)。
每条指令所包含的指令周期可以不同,指令周期有:取指周期、间指周期、执行周期、中断周期。
其执行的流程可以如下所示:
超线程原理
超线程(hyper-threading)其实就是同时多线程(simultaneous multi-theading),是一项允许一个CPU执行多个控制流的技术。它的原理很简单,就是把一颗CPU当成两颗来用,将一颗具有超线程功能的物理CPU变成两颗逻辑CPU,而逻辑CPU对操作系统来说,跟物理CPU并没有什么区别。因此,操作系统会把工作线程分派给这两颗(逻辑)CPU上去执行,让(多个或单个)应用程序的多个线程,能够同时在同一颗CPU上被执行。注意:两颗逻辑CPU共享单颗物理CPU的所有执行资源。因此,我们可以认为,超线程技术就是对CPU的虚拟化。
Intel的超线程技术,目的是为了更充分地利用一个单核CPU的资源。CPU在执行一条机器指令时,并不会完全地利用所有的CPU资源,而且实际上,是有大量资源被闲置着的。超线程技术允许两个线程同时不冲突地使用CPU中的资源。比如一条整数运算指令只会用到整数运算单元,此时浮点运算单元就空闲了,若使用了超线程技术,且另一个线程刚好此时要执行一个浮点运算指令,CPU就允许属于两个不同线程的整数运算指令和浮点运算指令同时执行,这是真的并行。
超线程技术实现的原理本质可以说是,在CPU的一个ALU里,对应多个PC | Registers寄存器,既可以减少了线程切换的开销,又允许两个线程同时不冲突地使用CPU中的资源。