一个完整的计算机系统应当包括(一个完整的计算机系统应当包括硬件系统和什么系统)
依托于“计算电磁学”的发展,电磁CAE技术已经深刻的改变了硬件设计流程,但是仅仅依赖于CAE商用软件的仿真计算以及设计师的手动调参或者相对低层次的自动扫参功能,越来越难以支撑起卓越的硬件设计。学习和掌握最前沿的设计理念、优化策略,依靠扎实的数理基础将问题转化为数理模型,并依托坚实的编程素养将定性的设计理念数字化、程序化,深度嵌入硬件的设计阶段,会否给硬件设计带来更多可能?
底层认知
一、什么是计算机系统
计算机是迄今为止最为复杂的一个系统之一,其作用在于按照确定的顺序完成认类预设好的指令,而这些预设好的指令就是我们所熟知的程序。
所谓复杂系统,一方面因为其构成元素的晶体管数量十分巨大,一颗指甲盖大小的CPU核心就包含数以亿级的晶体管,另一方面在于其功能十分强大,简单的堆数量并不能成就强大的系统,计算机系统的强大源于其将海量的晶体管进行互连、按照严密的组织规则让其分工、协作,从而实现了远超个体能力的复杂功能。这与细胞-器官-智慧生命的实现逻辑一致。”计算机系统“正是关注这个复杂系统的搭建过程以及工作机理:1)硬件层面,晶体管-计算机组件-功能完善的计算机;2)软件层面,0/1二进制-信息的表示与处理-指令系统。
二、计算机的基本组成
现在我们自顶而下开始简单认识一下计算机硬件系统的具体组成。计算机硬件系统的基本组成包括两个部分:1)主机(计算机核心部分);2)I/O设备(键盘、鼠标、显示器、光驱等)。其中主机由CPU和主存组成,CPU则主要包括运算器(执行逻辑、算术运算)和控制器(指挥程序的运行),主存用以存放程序和数据。
打开任意笔记本的销售页面,配置参数表均介绍了该计算机的主要性能参数,其中最主要的参数正是:1)CPU型号;2)内存(即主存)容量;3)硬盘容量(即辅存容量)。
CPU的主要功能就是执行指令,结构组成主要包括运算器和控制器,各组件的功能为:
运算器:
就像是搬砖的,主要工作就是埋头执行各种算数运算和逻辑运算
控制器:
就像是工头,主要工作就是指挥运算器执行各种指令
主存储器就是一个临时货柜,
用以存放待运行程序翻译而成的各种指令(数据) 程序或数据的地址 程序或数据
三、计算机的组织形式
复杂、庞大的系统想要运行有序,就必须要一套科学合理的组织架构保驾护航,就如同大公司的组织架构,计算机各部组件相互之间分工协作需要通过计算机硬件架构来进行保障。计算机硬件的组织形式主要分为两种:1)冯-诺伊曼结构;2)现代计算机结构。
冯-诺伊曼结构
计算机科学家冯-诺依曼确立了现代计算的基本组成以及组织架构,即“冯-诺依曼结构”,结构组成包括运算器、控制器、存储器、输入设备以及输出设备五大部分,组织结构如下图所示,结构特点是以CPU为中心的组织形式,所有数据流动、程序运行以及结果输出均由CPU执行和居中协调。
如果将计算机比作一个公司的话,五大部件大抵可以做如下类比,运算器就如同生产部门,存储器就如同仓储部门,所有的采购原材料以及加工好产品的产品都需要经过生产部门,再送达仓储部门等相关部门,这显然让生产部门做了很多职责范围外的活,降低了生产效率。因此现代计算机结构对五大部件的组织形式进行了优化,那便是“现代计算机结构”。
现代计算机结构
现代计算机结构以
存储器为核心
四、计算机的运行过程
以上,我们就基本完成了一个计算机硬件系统的搭建,那么这个系统是如何工作的,各部组件之间又是如何分工协作,确保预先设置的指令畅通无阻的运行的。
过程大致是这样的:当你打开手机上的某个APP时,后台其实是用高级语言编写的代码在运行,这些代码经过一个叫编译器的东西翻译成计算机硬件认识的机器语言(一行行二进制代码),然后经由I/O装入主存的存储体中。
当以机器语言表示的指令和数据装入主存后,CPU就开始访问主存提取指令并开始执行,具体过程如下所示:
step1:
程序计数器PC #01 地址寄存器MAR
step2:
存储体 数据寄存器MDR
step3:MDR将指令发给控制器的
指令寄存器IR
step4:IR将指令的
操作码 控制单元CU 地址码
step5:存储体根据MAR的取件码,将
#04 ACC
如此这般,就大致了解了计算机的各硬件是如何协作,确保程序顺利运行的。
深入理解
入门之后,该部分将从“
软件
”和“
硬件
”两个方面,正式 深入
一、信息的表示与处理
二进制是信息科学的基础,就如同晶体管是计算机硬件系统的基础。现代计算机存储和处理以二值信号表示的信息。这些普通的二进制数字,或者位(bit),形成了数字革命的基础。
我们熟悉的数学理论是建立在关于十进制的信息表示和处理的理论基础之上的,但是十进制的每一个位状态包含10种(0~9),状态过多,不利于工程实现,然而二进制的一个位状态只包含两种(0,1),存储和处理信息的机器时,二进制值工作得更好。二值信号能够很容易地表示、存储和传输,例如,可以表示为穿孔卡片上有洞或无洞、导线上的高电压或低电压,或者磁场引起的顺时针或逆时针。
本章主要分为三部分内容:1)
信息存储
,主要介绍关于二进制理论基础的一些基本概念;2)
整数的表示与计算
,介绍利用无符号数和二进制补码对整数进行表示和运算的理论基础;3)
浮点数的表示与运算
,介绍利用二进制版本的科学记数法表示实数的方法及其相关运算性质。
1.信息存储
1.1 进位计数制
我们生活的现实世界是建立在十进制基础之上的,而计算机硬件却只能读懂0/1二进制语言,两个世界要建立紧密的联系就离不开各种进制之间的转换。最常见的就是十进制、二进制、8进制以及16进制之间的相互转化。其中十进制、8进制以16进制与二进制之间相互转化方式如下,十进制、8进制以及16进制三者之间的相互转化可以通过二进制中转实现。
1.2 字
大多数计算机使用8位的块,或者叫做
字节
1.3 数据大小
常用的数据类型有这么几种,字符型、整数型以及浮点型,其中字符型一般用来存储字符串中的单个字符,整数型则用来存储各种长度的整数,浮点型则是用来存储不同精度的浮点数。
1.4 寻址和字节顺序
如果一个数据跨越多个存储字节,那么就必须要对数据的存放顺序进行规定,几乎所有机器,多字节对象都被储存在连续的字节序列中。对表示一个对象的字节序列排序,由两种通用的规则:1)大端模式;2)小端模式。
如图所示,在地址#1~#4所指向的内存中,存储16进制数据01234567H,其中“01”表示数据的高有效位(8bit),“67”表示数据的低有效位,则将高有效位放在前面为大端模式;将高有效位放在后面为小端模式。
1.5 字符串
字符串是由一个个字符组成的,而在计算机中,每一个字符与“0/1”建立联系是通过ASCII编码(8bit)的方式来实现的,其中ASCII值为16进制表示。
1.6 常见运算
位级运算
所谓位运算,即以二进制表示的数据的每一位可以作为一个个体进行相应的布尔运算,主要运算为与&、或|、非~以及异或^,可以参与位运算的数据类型为任意“整型”(如char、int、short int、long int和unsigned int)。
逻辑运算
逻辑运算(或||、与&&、非!)的运算性质与位级运算
显著不同
移位运算
移位运算,以向左或者向右移动位模式。左移表示为x<
2.整数的表示与运算
本节将介绍整数的两种表示方式,一种只能表示非负数,另一种则能够表示负数、零和正数。其数学属性与后续的机器级实现有很强的关联。
2.1 整型数据类型
2.2 无符号数与二进制补码
所谓无符号数,就是没有“+/-”号的数,其只能表示非负数,其二进制编码表示与真值之间的映射关系为:
即w位的无符号二进制编码,其真值可以上述公式进行计算,其建立了二进制编码(类似w维向量)与真值(类似w维向量的模)的一一映射的关系,公式看似复杂,其实就是前面二进制转十进制所用到的
幂乘求和法
。
对于有符号数(即包含“+/-”号),则需要给符号位编码,以区分正负数。具体执行有两种方案:
原码(
S B2S
,由下图可知,最高有效位(符号位)决定了真值的正负,其他位仅决定绝对值的大小
;
补码(
T B2T 负数 正数
,其中负数有无取决于最高有效位(负权位),而正数的大小则取决于其他位。
需要说明的是,原码在表示有符号数的时候存在一些先天缺陷,如下图所示:+5和-5的原码定义下的二进制表示相加后结果为-10,显然与实际不相符,而使用补码定义,则计算结果为0,与实际吻合。因此,有符号数的表示绝大部分情况下都是用补码方案。
不同类型的数据的二进制表示以及其真值的计算方法如下图所示,其中有符号数的反码定义为原码到补码转换的过渡形式,实际没什么作用。
2.3 有符号数与无符号数之间的转化
所谓有符号数和无符号数的转化,其实并没有改变二进制的位表示,只是因为二进制数每一个“位”的解释因为有符号数和无符号数的定义的不同而不同,从而导致二进制数所表示的真值发生变化。
从二进制补码到无符号数的转换,通过公式和图示,分别如下图所示:
从无符号数转换到二进制补码,则正好反过来,公式和图示分别如图所示:
2.4 数字的扩展与截断
常见的运算比如不同字长的整数之间进行转换,字长短的二进制数转换至字长长的二进制数,则需要扩展位,字长长的数转换至字长短的数,则需要进行截断。
二进制补码和无符号数的扩展的方式也有所不同:1)无符号数的扩展为高位补0;2)二进制补码的扩展则是高位补最高有效位。这种扩展规则的制定,是保证扩展前后的二进制所表示的真值没有发生变化。
截断会改变二进制所表示的真值,对于无符号数字x,截断它到k位的结果就相当于计算mod(即真值对取模),总之无符号数和二进制补码的截断结果可以分别表示为如下形式:
2.5 整数运算
整数的运算主要围绕无符号数和二进制补码展开的,常用的运算主要有:1)加法运算;2)非运算;3)乘法运算;4)乘以2的幂运算;5)除以2的幂运算。
对于加法运算,我们通常关心计算结果有无溢出的情况,对于无符号数和二进制补码,其加法计算结果如下所示:
对于乘法运算,我们可以看到,无论是无符号数亦或是二进制补码运算,乘法运算都可等效的通过“位”截断来实现,无需添加专门的乘法器即可实现,体现出了极大的便利性。其中无符号数和二进制补码的乘法运算结果分别如下所示:
对于乘以2的幂和除以2的幂运算,计算过程可以通过移位运算来实现,从而大幅提高了运算便利性。其中:1)乘以,无论对于无符号数还是二进制补码,可以通过左移k位来等效实现;2)除以,对于无符号数还是二进制补码,则是通过算术右移k等效实现(其中无符号数高位补0,二进制补码高位补最高位)。
3.浮点数的表示和运算
3.1 浮点数表示
浮点数表示形式为-的有理数进行编码。其中s为符号位(1位,只有两种状态0/1,表示+/-),M为有效数(n位,),E为指数(k位,--),对于二进制表示,仅需要对这三个数进行编码即可。对于单精度浮点格式(float,32位),k=8,n=23;对于双精度格式(double,64位),k=11,n=52。已知浮点数的二进制编码表示,求解浮点数的真值,计算结果如下。
需要说明的是:针对指数的编码是否为全0/1,浮点数编码对应的真值存在两种计算方法:
指数编码既不是全0也不是全1时,此时浮点数为规格化值,其中指数域-,e为无符号数,位表示为--,--;小数域,其中--;
当指数编码全为0时,浮点数为非规格化值,此时-,;
当指数编码全为1时,浮点数为特殊值,当小数域为全为0时,表示无穷,s=0,为;s=1,为-;当小数域非0时,为NaN。
3.2 浮点数运算
浮点数的加法运算,不同于整数的加法运算性质,缺失了很多属性(比如不满足结合律和分配律),这里就不再赘述。
4.小结
“十进制”是现代所有和“数字”相关理论的基础,其是我们表征世界最熟悉的一种“方式”,而作为信息世界的基础,“二进制”则提供了另外一种“方式”,因此建立两种“方式”的联系必不可少(进制转化),同时需要基于“二进制”,来表征各种数字(无符号数、有符号数、定点数、浮点数等)并阐明各类数学运算的性质,而这些就是第一章所要介绍的全部。
二、存储系统
存储系统就如同计算机系统中的“仓库”,用于存放程序、指令、数据等各类信息,将分为三个部分展开:1)什么是“存储系统”,介绍存储器的抽象模型以及基于存取速度梯度而成的层次结构;2)为什么称之为“系统”,介绍纷繁多样的存储技术,并基于“局部性原理”的存储系统的金字塔结构;3)“存储系统”如何运行,重点介绍存储系统结构组成以及其中最为重要的“
主存
”和“
高速缓存
”,阐述它们是如何与CPU协调共事,顺利完成数据存取。
1.什么是“存储系统”
1.1 抽象层面的认识
如上图所示,到目前为止,在我们对计算机系统的研究中,我们依赖于一个简单的计算机系统模型,CPU执行指令,而存储器为CPU存放指令和数据。在这个简单模型中,存储器系统是一个线性的字节数组,而CPU能够在一个常数时间内访问每个存储器位置。再具体一点,就如下图所示,其包含一个存储体(用以存放数据),然后就是两个接口(地址接口,数据接口),虽然至今为止这都是一个有效的具体模型,但是它没有反映现代系统实际工作的方式。
1.2 层次结构
实际上,存储器系统(memory system)是一个具有不同容量、成本和访问时间的存储(storage)设备的层次结构。CPU寄存器保存着最常用的数据。靠近CPU的小的、快速的高速缓存存储器(cache)的缓冲区域。主存暂时存放存储在较大的慢速磁盘上的数据,而这些磁盘常常又作为存储在通过网络连接的其他机器的磁盘或磁带上的数据的缓冲区域。
2.为什么称之为“系统”
2.1 存储技术的多样性
信息技术发展至今,存储技术日新月异,如何存储二进制信息,方式也十分丰富。
按照存储介质的类型,存储器可以分为:1)半导体存储器(主要用于主存和Cache);2)磁表面存储器(主要有磁盘和磁带);3)光存储器(主要有光盘等)。
其中,半导体存储器发展迅速,也有很多分类:
SRAM
为静态随机访问存储器:其存储单位为一个双稳态电路,每个单元用用6个晶体管电路实现,只要有电,其可以无限期的保持两个电压配置或稳定状态,电路复杂度相对较高,因此成本相对较高,一般用于高速缓存和CPU中的寄存器;
DRAM
为动态随机防蚊存储器:其每一个位的存储元器件位电容,通过电容的充放电来表征二进制0/1状态,DRAM的存储单元对对干扰非常敏感,成本较SRAM便宜很多,一般用于主存(内存条)。
ROM(
read only memory)只读存储器,只能读,不能写。不同于RAM(断电之后,DRAM和SRAM存储的信息就会丢失),ROM属于非易失性存储器,即使关掉电源,其存储的信息也不会丢失。存储在ROM设备中的程序通常被称为固件(firmware),当计算机通电后,它会运行存储在ROM中固件。一些系统在固件中提供了少量最基本的输入输出函数(如BIOS例程),复杂设备,如图形卡和磁盘驱动器,也依赖固件翻译来自CPU的I/O请求。
磁盘:
结构组成包括盘片(存储数据)、主轴(带动盘片旋转)以及读写头(读取盘片上的信息)。盘片位磁盘的核心部件,上面划分为了许多同心圆(磁道),磁道上交替分布了许多扇区(扇区之间使用间隙进行分割),磁盘以扇区位为单位进行数据存储。
2.2 存储器的搭建原则
以上,我们知道二进制0/1信息的存储方式由许多种,在计算机系统的搭建时,我们该如何去选择这些存储器呢?
诚如上面所介绍的那样,虽然以上的设备都可以存储信息,但是它们的性能和成本却相去甚远。
正因如此,为了兼顾计算机系统的成本、容量
(存储字数*字长)
以及速度
(数据宽度/存储周期)
,计算机存储设备不是简单的选择哪一种技术体制,而是
依据存储设备距离计算机大脑(CPU)的远近,按照传输速度的由快至慢来布局存储系统。从而形成了“金字塔结构”的存储系统布局设计。
如图所示,以我的笔记本电脑的存储系统为例,其基本组成为:1)CPU中配备了三级高速缓存(L1/L2/L3),容量分别为256KB、1.0MB和 6.0MB,依次增大;2)电脑主存为7.9GB的DRAM;3)辅存磁盘为239GB的SSD(固态硬盘)。可以看出,存储设备越远离CPU,存储容量越大。
2.3 局部性原理(可行性基础)
如上文所说,为了平衡容量、成本和传输速度,我们设计了一个“金字塔形式”的存储系统层次结构,这样的结构能否实现数据在存储系统各存储设备之间顺畅的“上上下下”,保证计算机系统的畅通运行?
“局部性原理”
为这个结构的合理性提供了理论基础。所谓局部性原理,即一个编写良好的计算机程序倾向于引用的数据项临近于其他最近引用过的数据项,或是临近于自我引用的数据项。这一原理对软件系统和硬件系统的设计都有着极大的影响。局部性通常由两种形式:1)时间局部性,即被引用过一次的存储器位置可能在 不远的将来 附近的存储器位置
局部性原理在工程中有着现实的需求,比如说硬件层面,计算机通过引入高速缓存,提前将主存中位置相邻的数据集拷贝至高速缓存,从而利用高速缓存的速度优势,提高数据传输速度。
3.“存储系统”如何运行
3.1 系统结构组成
上面,我们知道了存储系统中的各设备是按照其与CPU的“远近亲疏”,层次渐进的构成了一个“金字塔结构”布局。本节,我们将深入了解这些存储设备相互之间以及与CPU 之间究竟是如何连接以及分工写作的。
如上图所示,数据在存储系统的运行过程大致是这样的:1)各种应用APP都被安装在计算机的C盘/D盘(ROM)中,由于ROM的非易失性,即使断电,安装在里面的APP也不会被删除;2)当你打开电脑,启动微信APP时,相关运行程序就会被拷贝到主存中,开始运行;3)高速缓存载从主存中拷贝数据/程序子集,以备CPU及时调用;4)CPU从高速缓存中取指令、数据进行处理,输出预期的结果给使用者。
3.2 主存
以上的叙述,我们还是将主存作为一个抽象的黑匣子进行分析,现在我们将要深入主存内部,去一探主存的组成和运行机理。
主存的基本组成
由上文可知,主存的基本组成包括三部分:1)存放数据的存储体,其类似于货柜,一个个数据如同包裹;2)地址寄存器,用以存放CPU待取数据的地址,就如同取包裹时的取件码;3)数据寄存器,用以临时存放CPU待取数据,就如同待取的包裹。三者之间的有序开展有赖于时序控制逻辑协调。
继续深入存储体的结构细节,就是密密麻麻的集成电路组成,其基本组成如下图所示:存储体被绿色纵线和红色横线划分成很多小方块(构成存储矩阵),每个小方块就是一个存储
“位”, “蓄水池” “1” “0” “写入” “读出” “绿线” “位” “字”, “红线”
其实将“红线”直接连接地址寄存器(MAR)是相当浪费的,因位红色控制线终究只有一根线导通(对应“1”),而其他线均关闭(对应“0”),所以n条地址线仅仅确定了n个状态,这远低于
个状态,资源浪费,通过桥接一个译码器,就可以通过n位地址线控制
个状态,从而充分利用资源。通过读写控制线确定当前存储器的读写状态。
忽略电路细节,主存就是一个包含着一组地址线引脚和数据线引脚的封装芯片,外加读写控制线引脚,以及片选线引脚(由于主存芯片由多个芯片并行而成,片选线控制使用哪一个存储芯片)。
存储器的总容量=存储单元数*存储字长
(存储单元包含的位数),如8KB,其中1B(字)=8bit(位),所以8KB=8K*1B=
*8bit,即地址线有13位,数据线8位。
主存与CPU的连接
以上,我们算是把主存剖析清楚了,那么主存又是如何与CPU进行连接的,实现CPU自由读取贮存在中的数据呢。其实很简单,数据线连数据线,地址线连地址线即可。
如果主存的容量无法满足CPU的需求,可以通过存储器扩展来解决,扩展的方式有两种:
主存的
位数
主存的
字数 (存储单元的数目不够,
相当于快递柜数目太少,放不了太多包裹
)
3.3 高速缓存
高速缓存的产生的背景是计算机技术的快速发展致使主存传输数据的速度越来越无法匹配CPU的运算速度,从而严重影响了计算机的运行速度。
解决方法就是,CPU和主存之间增加一个传输速度更快的高速缓存,用以拷贝主存中即将执行的程序,以备CPU运算调用。这一策略就如同京东快递和其他快递的区别,京东快递通过在每个城市自建仓储,用以提前存放商品,买家下单后,商品通常是直接从仓储发货,而不是产地发货,从而实现了
“当天达”
高速缓存与主存的映射关系
计算机主存相当于一个大蓄水池,而高速缓存就相当于一个小蓄水池,主存事先将数据拷贝至高速缓存,如果将主存看作为一个数据集合的话,高速缓存就是这个集合的子集,因此必须要明确子集与原集合的映射关系,如此,CPU在从高速缓存中获取数据的时候才不至于混乱。
既然高速缓存Cache相当于主存的一个子集,那就必须要先明确子集与原集合之间的映射关系,高速缓存与主存之间的映射关系主要分为三种:
全相联映射
映射方式
,主存和缓存之间的数据传递是以块为单位的,每个块包含多个字的数据,全相联映射中,如下图所示:Cache中 #0~#7 #0块
访存方式
,如下图所示,假设内存容量为16*4B,主存的地址包括4位块号以及2位块内地址,CPU带着待取数据的主存地址(如 0011 标记 有效位 命中
直接映射
映射方式
,主存中块只能按照一定的次序排队放入放到Cache中的某一行,因此,Cache块号=主存块号%(
取余)
Cache总块数;2)
访存方式
,CPU带着地址码 0011 1011
组相联映射
映射方式
,介于1)和2)映射方式之间,Cache中的块可以事先分组,主存中的块必须要按照一定次序放入Cache中的某一组,但是在组内可以随意放;2)访存方式,CPU带着地址码 00
即块号后两位
),于是就去#3组(#6行,#7行)核对标记和有效位,发现#7行标记为 0011
三种映射方式总结和优缺点对比如下:
高速缓存的替换策略
前面,介绍了高速缓存与主存的映射方式以及不同映射方式下,CPU的访存方式,访存结果根据CPU是否获得“想要的数据”而分为命中和不命中两种情况,命中就皆大欢喜,这里介绍一下
不命中 有空位置存放数据 没有空位置存放数据
实际替换时,也有着不同的策略,主要有四种:1)随机算法(RAND),在满足要求的块中,随机选一个块进行替换,效果较差;2)先进先出算法(FIFO),优先替换最新被调入Cache的主存块;3)近期最少用(LRU),将最久没有被使用的主存块替换掉,基于“局部性原理”,命中率较高;4)最近不常用(LFU),将被访问次数最少的主存块替换掉。
高速缓存的写策略
以上介绍了CPU从高速缓存中读数据时的一些策略,但同时
CPU的运算结果
写命中时:1)全写法,即写命中后需要将结果同时写入高速缓存和主存;2)写回法,即写命中后,只是将结果写入高速缓存,当高速缓存中相应位置的数据要被替换时,才将结果写回主存;
写不命中:1)写分配法,当CPU对高速缓存写不命中时,把主存中的块调入高速缓存,在高速缓存中修改,通常搭配写回法使用;2)非写分配法,当CPU对高速缓存写不命中时,只写入主存,不调入高速缓存,通常搭配全写法使用。
4.小结
本章更加深入的介绍了存储系统,相继介绍了
丰富多样 “金字塔” 结构组成 运行机理 协调机制
三、指令系统
如下图所示,我们知道计算机系统构成层次结构是这样的:晶体管是构成计算机系统的基本元素,其通过高/低电平的切换实现自己的价值;大量晶体管通过不断套娃构成了超大规模的集成电路,这些集成电路由于功能的不同可以分饰不同的角色(存储器、CPU、输入/输出等),把这些不同功能的集成电路组合起来就构成了计算机硬件系统,然而这个硬件系统只认识0和1组成的机器语言,其与程序员所编写的程序(高级语言)有着天壤之别,它们之间需要经过编译器的翻译才能互通。这些0和1构成的数据串就指令,其为计算机运行的最小功能单位,而这些可以实现各种功能的指令所组成的集合就是指令系统。
经过编译器编译的指令序列被放入主存的存储体中,CPU在程序计数器PC的控制下,一条条的从主存中取出指令,由CPU的控制器进行指令分析,并指挥CPU运算器按照指令要求完成相应的运算处理,具体的运行过程可以参考前文所述。
指令系统一章将从三个方面展开:1)
指令格式
,介绍一条指令的基本组成以及按照不同标准的分类;2)
指令/数据寻址
,指令运行前需要总主存中提取出来,这就需要寻址,分别介绍指令寻址以及数据(指令的被操作数)寻址的各种方式;3)
CISC与RISC
,介绍两种主流的指令系统(复杂指令集与精简指令集),简单阐明二者的本质区别、优缺点以及典型应用。
1.指令格式
指令的格式如下图所示,由操作码和地址码构成,其中操作码规定了对操作对象的操作类型(求和、移位等),而地址吗则指明了操作对象的位置。
由于操作任务的种类不同,指令地址吗的数目也有所不同,主要分为:1)零地址指令;2)一地址指令;2)二地址指令;3)三地址指令;4)四地址指令。
零地址指令
一种情况是不需要操作数,如空操作、停机、关中断等指令;另一种情况是堆栈计算机,两个操作数隐含存放在栈顶和次栈顶,计算结果亚辉栈顶。
一地址指令
一种情况是只需要单操作数,如加1、减1、取反、求补等操作;另一种是需要两个操作数,但是有一个操作数隐含在某个寄存器(如ACC)。
二地址指令
常用于需要两个操作数的算术运算、逻辑运算相关指令。
三地址指令
常用于需要两个操作数的算术运算、逻辑运算相关指令,并将计算结果写入A3。
四地址指令
常用于需要两个操作数的算术运算、逻辑运算相关指令,并将计算结果写入A3,同时告知下个执行指令的地址。
指令的分类还可以按照长度和类型进行区分:1)定长指令字结构,即指令系统中所有指令的长度都是一样的;2)变长指令字结构,即指令系统中的各种指令的长度不等。
按照操作类型进行分类:1)
数据传送类 算术/逻辑操作 移位操作 转移操作 输入/输出操作
2.指令/数据寻址
指令寻址的目的在于如何确定下一条指令的存放位置,主要有两种类型:1)顺序寻址,通过程序计数器PC不断加1,顺序执行存储器中的指令;2)跳跃寻址,由转移指令(JMP)指出。两种指令寻址的运行过程如下图所示。
相较于指令寻址,数据寻址的种类则要丰富很多。数据寻址的主要任务是确定本条指令的地址码指明的真实地址。
以一地址指令为例,地址码的构成包括两个部分(
寻址特征+形式地址 EA 寻址特征
立即寻址
无需寻址,形式地址即为操作数(一般用补码形式表示)。
优点为无需访存,速度快,缺点为形式地址的位数限制了操作数的范围。
直接寻址
指令中的形式地址A就是操作数的真实地址,即
EA=A
优点是指令结构简单,指令执行仅一次访存,缺点是A的位数决定了寻址的范围,操作数地址不易修改。
间接寻址
指令的地址字段给出的形式地址不是操作数的真正地址,而是操作数有效地址所在存储单元的地址,即EA=(A)。
优点是可以扩大寻址范围(有效地址EA的位数大于形式地址A的位数),缺点为指令执行过程中需要多次寻址。
隐含寻址
不是明显的给出操作数的地址,而是在指令中隐含着操作数的地址。
优点是有利于缩短指令字长,缺点为需要增加存储操作数或隐含地址的硬件。
寄存器寻址
在指令字中直接给出操作数所在的寄存器编号,即EA=Ri,其操作数在有Ri所指的寄存器内。
优点为指令在执行阶段不用访问主存,只访问寄存器,指令字短且执行速度快,支持向量/矩阵运算,缺点为寄存器价格昂贵,计算器中寄存器个数有限。
寄存器间接选址
寄存器Ri中给出的不是一个操作数,而是操作数所在主存单元的地址,EA=(Ri)。
特点是比一般的间接寻址速度更快,但指令的执行阶段需要访问主存(因为操作数在主存中)。
基址寻址
将CPU中的基址寄存器(BA)的内容加上指令格式中的形式地址A,而形成操作数的有效地址,即为EA=(BR)+A。
优点是便于程序“浮动”,方便实现多道程序并发运行。
变址寻址
有效地址EA等于指令字中的形式地址A与变址寄存器IX的内容相加之和,即EA=(IX)+A,其中IX可谓编制寄存器(专用),也可用通用寄存器作为变址寄存器。与基址寻址的方式的区别在于IX可以被用户修改。
优点:在数组处理过程中,可设定A为数组的首地址,不断改变编制寄存器IX的内容,便可以很容易形成数组中任一数据的地址,特别适合编制循环程序。
相对寻址
把程序计数器PC的内容加上指令格式中的形式地址A而形成操作数的有效地址,即EA=(PC)+A,其中
A为相对于PC 位移量 补码
优点:操作数的地址不是固定的,它随着PC值的变化而变化,并且于指令地址之间总是相差一个固定值,便于
程序浮动
堆栈寻址
操作数存放在堆栈中,隐含使用堆栈指针(SP)作为操作数地址。其中的堆栈是存储器中一块特定的按“后进先出
(LIFO)
类似于程序计数器PC
)。
基于堆栈寻址,下图所示为一个加法运算的过程:
step1:堆栈指针
SP 0001 SP
step2:
SP 1001
出栈进入寄存器
X, SP
指向
R2
;
step3:
ALU
计算
ACC
与X的和(为1010),送至寄存器
Y
;
step4:计算结果入栈,
SP
指向
R1
,将
Y
(
1010
)送至堆栈寄存器
R1
。
依据堆栈数据存放位置可分为硬堆栈和软堆栈,硬堆栈使用
寄存器 主存
不同寻址方式的
有效地址
的计算方法以及访存次数汇总如下表:
3.CISC与RISC
指令集的设计,有两个主流的方向,一个是以X86架构为代表的CISC(Complex Instruction Set Computer),即复杂指令集,另一个则是以ARM架构为代表的RISC(Reduced Instruction Set Computer),即精简指令集。两者的设计思路向左。
CISC X86架构 RISC ARM架构
如果说“指令”就是计算机硬件系统的语言的话,那么CISC和RISC就是两种语言系统规范
,其中 CISC以“单词”为元素构建语言系统 RISC则是以“字母”为元素构建语言系统
两种指令集的对比如下图所示:
4.小结
本章详细介绍了指令系统的相关内容,相继介绍了什么事指令系统以及其在计算机系统中的作用、一条指令的构成(指令格式)、指令以及数据是如何寻址的(寻址方式)以及两种典型指令系统(CISC和RISC)。
四、CPU
正如兰德尔-E-布莱恩特在《深入理解计算机系统》中所说的那样,现代处理器可以称得上是人类创造除的最复杂的系统之一,一块指甲大小的硅片上,可以容纳一个完整的高性能处理器和大的高速缓存,以及用来连接外部设备的逻辑电路,它是计算机的核心。
如前文所述,CPU主要由运算器和控制器构成,但是这样的抽象模型显然不是我们认识的终点,这一章我们将深入CPU的内部,认识CPU的功能以及结构组成、CPU是如何完成指令的提取以及执行、提取的数据是在CPU内部如何流动的、控制器(CU)是如何通过控制信号发挥其调度的作用的以及如何通过流水线理念提升CPU运行效率。
1.CPU的功能和结构
CPU的主要功能有:
指令控制 操作指令 时间控制 数据加工 中断处理
CPU的基本结构包括
运算器 控制器
操作码+操作数地址
)进行分析,对操作码进行译址(分析要完成什么操作),产生操作数的有效地址
EA
;3)执行指令,根据分析指令获得的“操作命令”和“操作数地址”,形成
操作信号控制序列
,协调
ALU
、
存储器
以及
I/O
设备完成相应操作;4)中断处理,管理总线及I/O,处理异常情况。
1.1 运算器的基本结构
运算器组成主要包括具备算术/逻辑运算功能的ALU和暂存各种输入/输出结果的通用寄存器,它们之间通过CPU内部总线进行联通,如同省道一样的内部总线简化了个器件之间的连接线路。
1.2 控制器的基本结构
控器器(CU)的核心是指令译码器ID和微操作信号发生器,它们将来在于主存,放置于指令寄存器(IR)的指令进行分析,并产生微操作信号,指挥CPU中的各器件合理有序的开展各项工作,其中指令以及操作数数据从主存/高速缓存,经由地址总线和数据总线以及地址寄存器MAR和数据寄存器MDR,到达CPU,其中地址总线和数据总线就如同更高别的国道。
1.3 组合
将运算系统和控制系统组装到一起就构成一个功能完整的CPU,其中两部分之间的数据传递通过CPU内部总线进行的。
看似复杂的结构组成图,其实按照功能可以分为四大块。
2.指令执行过程
2.1 指令周期
CPU中时间单位主要包括这三个:1)
时钟周期
又称为振荡周期,由CPU中的振荡电路产生,
常定义为时钟脉冲频率的倒数
,是时序中最小的时间单位
;2) 机器周期
也称为
CPU周期
。在计算机中,为了便于管理,常把一条指令的执行过程划分为若干个阶段(如取指、译码、执行等),每一阶段完成一个基本操作。
完成一个
基本操作
所需要的时间称为机器周期
。一般情况下,一个机器周期由若干个时钟周期组成 ;3)
指令周期
, CPU每
取出
一条指令并
执行
这条指令,都要完成一系列的操作,这一系列操作所需要的时间通常叫做一
个
指令周期
。
换言之
指令周期
是取出一条指令并执行这条指令的时间
。由于各条指令的操作功能不同,因此
各种指令的
指令周期
是不尽相同的
。例如一条加法指令的
指令周期
同一条乘法指令的指令周期是不相同的 。
每条指令的执行过程都按照下图所示的流程框图开展,计算机通过4个触发器(
取指EF、间址IND、执行EX、中断INT
2.2 指令数据流
取指、间址、执行以及中断过程中,数据在CPU里是如何流动的。
取指周期
取值周期的主要任务就是
从存储器中取出指令
step1:当前指令地址送至存储器的地址寄存器
MAR
,即
(PC)->MAR
;
step2:
CU
发出控制信号,经控制总线传到
主存
,这里是读信号,即
1->R
;
step3:将
MAR
所指主存中的内容经数据总线送入
MDR
,即 M
(MAR)->MDR
;
step4:将
MDR
中的内容送入指令寄存器IR,即
(MDR)->IR
;
step5:
CU
发出控制信号,形成下一条指令地址,即
(PC)+1->PC
。
间址周期
间址周期的主要任务就是获得
操作数
(数据)
的 有效地址EA 寻址特征 形式地址
step1:将指令的地址码送入MAR,即Ad(IR)->MAR;
step2:CU发出控制信号,启动存储器
读操作(
R
)
,即1->R;
step3:将MAR所指主存中的内容(
EA
)经数据总线送入MDR,即M(MAR)->MDR;
step4:将
有效地址(EA)
送至指令的地址码字段,即(MDR)->Ad(IR)。
执行周期
执行周期根据IR中的指令字的
操作码 操作数 运算器
中断周期
中断周期的主要任务暂停当前任务取完成其他任务,暂停前需要
保存断点
SP存储栈顶地址
)来保存断点,具体流程如下:
step1:控制器将SP减1(
入栈准备
),修改后的地址送至MAR,即(SP)-1->SP,(SP)->MAR;
step2:CU发出控制信号,启动存储器
写操作(
W
)
,即1->W;
step3:
将断点(PC的内容)经由MDR,写入SP指向地址的位置
;
step4:CU控制将
中断服务程序入口
地址送入PC,开始执行中断程序。
2.3 指令执行方案
方案1:单指令周期,所有指令,都选用相同的执行时间完成,取最大值;
方案2:多指令周期,不同指令,选用不同的执行时间;
方案3:
流水线方案
3.数据通路的功能和基本结构
CPU功能的实现是通过运行指令来实现的,而指令运行过程实质就是数据在各部件(运算单元、寄存器等)之间的传送,
数据通路指的是数据在功能部件之间传送的路径
。如下图所示,以总线模式介绍CPU运行过程中数据通路是怎样的(以
取指令周期
为例)。
一个取指令周期可以分解为若干个微操作,而每一个微操作的实质就是数据的流动
,数据流动的幕后则是一系列控制信号通过导通/关闭进行控制(
即 微操作的实现通过控制信号触发实现
)。
数据通路的基本结构分为两大类:1)
CPU内部总线方式
(上文介绍)
,优点为线路布局简单,缺点为数据流动过程之中存在冲突,效率相对较低。;2) 专用数据通路方式
4.控制器的功能和工作原理
程序运行时,高级语言编写的代码经过编译转化成一行行0/1二进制代码(
指令 数据流动 控制器 集中管理
控制器的作用
:1) 取指令 分析指令 产生控制信号 PC IR CU 综合 时序 周期标志 反馈信号, (微命令), 微操作
上面介绍了CPU控制器
功能 结构组成 工作机理 CU
是控制器的核心,针对这个核心部件功能实现有两种实现思路
:1) 硬布线 微程序
4.1 硬布线(硬件思路)
上文将CU抽象为一个黑匣子,其输入分为4部分(
时序信号
、
指令信号
、
周期标志
、
反馈信号),输出为一组 控制信号
,如下图所示,
硬布线的思路是通过逻辑电路建立输入信号—输出信号的联系,大致过程是先建立 输出-输入变量 逻辑表达式
硬布线实现过程为纯硬件控制,优点为
响应速度快
,缺点在于
设计和实现过程较为复杂
,且硬件实现的
可扩展性比较差
。适用于RISC指令系统,因为指令系统中的指令相对简单,易于电路实现。
4.2 微程序(软件思路)
计算机系统层面,软件实现与硬件实现是等效,控制单元
CU
输入信号和输出信号的本质就是一组0/1编码的指令,“微程序”的实现过程就是建立输入信号编码和输出信号编码的映射关系,并将它们存入专用存储器(
控制存储器CM
),运行通过访存提取控制信号编码,实现微操作,结构示意图如下所示。
运行时,
CU
按照输入信号编码,经由
微地址形成部件 CM 微指令 指令控制 微 设计和实现较为简单,扩展性 速度相对较慢
5.指令流水线
相较于顺序执行的方式,采用流水线方式,程序执行总耗时大幅缩短。
5.1 理想状态
理想情况下,
各阶段花费时间相同,每个阶段结束后能立即进入下一阶段,
流水线的两种表示方法:1)指令执行过程图,主要用于分析指令执行过程;2)时空图,主要用于分析流水线的性能。
评价流水线的三个性能指标:1)
吞吐率
,指在单位时间内流水线所完成的任务数量;2)
加速比
,完成同样一批任务,不使用流水线所用时间与使用流水线所用时间之比;3)
效率
,流水线设备利用率。
5.2 非理想状态
现实情况是,指令批运行过程中,会存在各种冲突的现象,从而影响流水线的运行效率。影响流水线的主要因素分为三类:
结构相关(资源冲突)
,即多条指令在同一时刻争用同一资源而形成的冲突;
数据相关(数据冲突)
,在一个程序中,存在必须要能打前一条指令执行完成才能执行后一条指令的情况,即两条指令的数据相关;
控制相关(控制冲突)
,当流水线遇到转移指令和其他改变PC值的指令而造成断流时,会引起控制相关。
6.小结
本节中,详细介绍了CPU的结构组成、运行机理以及其上的数据流动,并深入CPU的核心,介绍控制器的功能、结构组成、运行机理以及两种实现策略,最后介绍了基于流水线技术的CPU指令高效运行策略。
五.总线
总线是计算机系统中的“高速公路”,为计算机系统中不同硬件间的“交流”提供公共通路并协调其间的“数据流动”能够始终有条不紊的展开。本章将三个方面展开:1)
概述
,简单介绍总线的基本概念、按照不同标准的分类以及4种典型结构;2)
总线仲裁与传输
,重点介绍为解决多设备争用总线问题的三种仲裁方式以及数据传输使用总线的流程;3)
总线标准
,由于传输速度的需求发展以及应用场景的不同而形成种类繁多的总线标准。
1.概述
1.1 基本概念
总线是一组能为多个部件
分时共享 公共 线路 简化
总线的特性:1)机械特性,尺寸、形状、管脚数以及排列顺序;2)电气特性,传输方向和有效电平范围;3)功能特性,每根传输线的功能(地址、数据、控制);4)时间特性,信号的时序关系。
1.2 总线的分类及经典结构
按数据传输格式分类
按照数据的传输的格式分类,可以分为串行总线和并行总线:1)串行总线就像单行道,数据只能只能排着队按次序逐一传送,优点在于成本低廉,适合长距离传输,缺点是数据在收发过程中需要提前拆卸和装配;2)并线总线就像双向六车道,数据无需排队,并行发送,有点在于逻辑时序比较简单,无需对数据进行拆卸和装配,电路实现相对简单,缺点在于信号线数量多,远距离传输成本高。
按总线功能分类
按总线的功能进行分类,可分为3种:
片内总线
CPU芯片内部寄存器与寄存器之间、寄存器与ALU之间的公共连接线;
系统总线
主存系统总线按传输信息内容的不同,又可以分为3类:1)
数据总线 地址总线 控制总线
系统总线按照结构可以分为:1)单总线;2)双总线;3)三总线;4)四总线。计算机系统结构越复杂,相应的总线结构也会更加复杂。
通信总线
用于计算机系统之间或计算机系统与其他系统(远程通信设备、测试设备等)之间的信息传递。
按时序控制方式
分为同步总线和异步总线。
1.3 性能指标
总线的性能指标主要包括:1)
总线周期
申请阶段、寻址阶段、传输阶段
),通常由若干总线时钟周期构成;2)总线时钟周期,即机器时钟周期,由时钟系统决定;3)总线的工作频率,总线周期的倒数,实际
指一秒能传递几次数据
;4)总线的时钟频率,即机器时钟频率;5)总线宽度,通常为数据总线的根数,决定同时能传输数的位数;
6)
总线带宽
总线的数据传输速率,
总线带宽=总线工作频率*总线宽度(bit/s)
。
7)
总线复用
一种信号线在不同时间传输不同类型的信息(比如地址总线与数据总线的复用)。
8)信号线数
地址总线、数据总线以及控制总线3种总线数总和为信号线数。
2.总线仲裁与传输
2.1 仲裁
如何解决多个设备争用总线的问题?此时需要引入仲裁策略,分为集中仲裁方式和分布仲裁方式两大类。
集中仲裁
链式查询方式
总线控制部件接收到总线请求BR后,
依照远近链式通过各设备接口 BR BR BG BS
计数器查询方式
总线控制器接收到总线请求
BR 计数器开始计数 设备接口地址与数 BS
独立请求方式
有需求的设备
各自 BR 优先次序 BG BS
三种集中仲裁方式的对比:
分布式仲裁
:当设备由总线请求时,各自将其唯一的仲裁号发送到共享的仲裁总线上, 各仲裁号相互PK 不需要中央仲裁器 多个仲裁器之间争使用总线
2.2 传输流程
占用总线的一对设备如何进行数据传输?总线周期(总线传输流程)的四个阶段:
申请分配阶段 传输请求 总线仲裁 寻址阶段 发出 地址 命令 传输阶段 数据交换 结束阶段 撤出
3.总线标准
总线标准是计算机内不同模块互连的规范。依据总线在计算机系统中的位置,可以分为:1)系统总线;2)局部总线;3)设备总线、通信总线。
如图所示为计算机硬件架构,主要硬件模块之间互连的总线标准以及相关总线接口示意图如下所示。需要补充说明:
北桥 南桥 超级I/O
常见的总线标准及其参数汇总如下,重点需要了解几个常用总线的
名称、数据传输格式 应用场景 总线位置
4.小结
总线是计算机中分时共享的公共信息通路,就如同高速公路一样,优点是大幅简化了计算机系统的线路规模,引入的问题就是总线使用权的分配,从而着重介绍了“
仲裁 传输流程
六、I/O系统
“I/O系统”是计算机核心部分(CPU,主存)与外部设备的“中转站”,起到了数据过渡和中转协调的作用,该章主要从四个方面展开:1)
基本概念
,介绍I/O系统的组成以及I/O控制的方式;2)
外部设备
,简单介绍纷繁多样的外部设备;3)
I/O接口
,作为I/O系统最重要的部分,介绍其主要功能及一般结构组成,以及内部端口的编址方式;4)
I/O方式
,重点介绍三种I/O控制方式(程序查询方式、程序中断方式以及DMA方式),阐述各种方式的运行机理以及优缺点。
1.基本概念
1.1 I/O系统组成
一般来说I/O系统由I/O硬件和I/O软件两部分组成。其中1)I/O硬件:包括外部设备、
I/O接口 I/O总线
1)I/O指令
命令码是CPU指令的一部分,与普通的指令格式略有不同,操作码指明了CPU要对I/O设备做什么,命令码指明了I/O接口要对设备做什么。
2)通道指令
通道能识别的指令,通道程序提前编制好放在主存中,在含有通道的计算机中,CPU执行I/O指令对通道发出命令,由通道执行一系列通道指令,代替CPU对I/O设备进行管理。
I/O接口:又称为I/O
控制器 芯片 协调 调度
1.2 I/O控制方式
I/O控制方式主要分为4种:
程序查询方式 程序中断方式 DMA(直接内存访问)控制方式 直接数据通路 没完成一整块数据读写 通道控制方式 通道程序 一系列任务,
规定任务完成后,向CPU发出中断请求。
2.外部设备
外部计算机系统的外部设备主要分为:1)输入/输出设备;2)外部存储设。纷繁多样,本节不做详细介绍。
输入/输出设备
输入设备:键盘、鼠标。
输出设备:
显示器(主要参数:屏幕大小、分辨率、灰度级、刷新频率、显示存储器的容量和贷款)
外部存储设备
磁盘(存储机理、结构组成、性能参数、访存过程)
、光盘存储器以及固态硬盘(SSD)。
2.I/O接口
2.1 主要功能及组成
I/O接口是I/O总线与外设之间的过渡,的主要作用:1)
数据缓冲 错误或状态监测 控制和定时 数据格式转换 与主机和设备通信
I/O接口的基本结构:
如图所示,按照I/O接口的功能需求,其主要结构组成有:1)数据缓冲寄存器DBR;2)设备选择电路;3)设备状态标记;4)命令寄存器和命令译码器;5)控制逻辑电路。
以控制外设为例介绍一下I/O接口的运行机理:
step1
:CPU通过
地址线 I/O接口 设备选择电路 设备状态标记 状态线
step2
:CPU通过
命令线 命令寄存器
step3
:外设通过
数据线 DBR
step4
:I/O接口更改
状态标记 中断请求
step5
:CPU通过命令线
响应中断请求 数据线
2.2 I/O端口及编址
CPU同外设之间的数据传送的实质是对I/O接口中的某些
寄存器 这里的寄存器又被称为端口
设对寄存器的读/写,事先得要给这些寄存器编址,编址方式有两种:
统一编址
,把I/O端口当作存储单元进行地址分配,同统一的访存指令就可以访问I/O端口,又称
存储器映射方式 独立编址
,I/O端口地址与存储器地址无关,独立编址CPU需要设置专门的输入/输出指令访问端口,又称
I/O映射方式
3.I/O方式
3.1 程序查询方式
由程序查询方式的时序图可知:CPU一旦启动I/O,必须停止现行程序的运行,并在现行程序中插入一段程序,
主要特点:CPU有“踏步”等待现象,CPU与I/O串行工作。 外设准备阶段
程序查询方式的
优点 缺点
3.2 程序中断方式
在介绍I/O方式中的程序中断方式之前,先了解一下
中断系统 中断的基本概念及运行机理
程序中断是指在计算机执行现行程序的过程中,出现某些继续处理的异常情况或特殊请求,CPU暂时中止现行程序,转而去对这些异常情况或特殊请求进行处理,在处理完毕后对CPU又自动返回到现行程序的断点处,继续执行原有程序。
中断系统的工作流程分为三个步骤:1)中断请求;2)中断响应;3)中断处理。
中断请求
:中断源对向CPU发送中断请求信号,CPU可以通过对中断请求标志寄存器的查询,判断哪个设备由中断请求;
中断响应
:响应中断需满足三个条件:1)中断源有中断请求;2)CPU允许开中断;3)一条指令执行完毕,且无更紧迫的任务。满足中断响应的条件,即进行中断判优,依据设定的优先级顺序,执行后续中断处理;
中断处理
:中断处理过程主要有两个任务:1)保存原程序断点;2)执行中断服务程序。其中第一个任务由 中断隐指令
实现
(以堆栈形式保存断点、并将中断服务程序入口地址送至PC),中断服务程序则要先 保护现场
中断的类型由许多种,广义的中断分为
内中断 外中断 优先级
硬件故障>软件故障>非屏蔽故障>屏蔽故障
)。
中断的判优与优先级设置
前面说到,当多个中断源同时出现时,中断判优就该发挥作用,优先级的设置有2种方式:1)硬件实现,通过硬件排队器实现;2)软件实现,通过查询程序实现。
在硬件排队器的基础引入中断屏蔽技术,可以实现对优先级顺序的灵活调整,该技术主要用于多重中断(中断嵌套),其与单重中断最主要的区别在于中断处理过程中允许开中断,从而实现多重中断。
如图所示,在硬件排队器的基础上,在每一个中断请求端口处都增加一个“
屏蔽字 1 0 实现了优先级的调整
按照优先级顺序设计中断源屏蔽字的过程如下:依照优先级次序,所有中断源将高于其优先级的中断源的屏蔽字设为“
0 1 1
程序中断方式
介绍完成中断机制后,现在来看看中断的策略是如何应用于“
I/O控制方式
”。上图为“程序中断方式”的I/O接口结构组成,相较于“程序查询方式”的I/O接口更为复杂。相较于“程序查询方式”,程序中断方式的CPU执行程序的比例大幅提高,可以发现
I/O准备阶段
3.3 DMA方式
DMA控制器替代CPU,对I/O设备进行控制,同时串联起I/O外设和主存进行数据传送,进一步解放了CPU。
个CPU向DMA控制器指明要
输入还是输出 多少数据 地址
传送前
:接受外设发出的DMA请求(外设传送一个字的请求),并向CPU发出总线请求;CPU响应此总线请求,发出总线响应信号,接管总线控制权,进入DMA造作周期;
传送时
:明确传送数据的主存单元地址及长度,并能自动修改主存地址计数器和传送长度计数器;规定主存和外设间的传送方向,发出读写等控制信号,执行数据传送操作;
传送后
:
向CPU报告DMA操作结束。
下图所示为DMA控制器的结构组成,可以发现结构组成相较于“
程序查询方式
”和“
程序中断方式
”的I/O接口更为复杂:1)主存计数器 AR WC DBR 设备选择
以外设向主存传输数据为例介绍DMA的传送过程:
step1
:预处理阶段,CPU将待放入主存
数据的地址、传输数据 启动I/O设备
step2
:DMA控制按照CPU提供的信息,从外设提取数据,放入数据缓存DBR,并经由
DMA触发器 控制/状态逻辑 总线使用权
step3
:数据块传送完成后,传送长度计数器通过
溢出信号 中断机构
中断服务程序
(
与程序中断方式的服务程序任务完全不同
)
,去主存核实数据是否满足要求并决定是否还要传数据;
step4
:CPU继续执行
主程序
。
DMA的传送方式,当CPU和I/O设备同时访问主存时,为避免发生冲突,DMA控制器和CPU通常采取三种方式进行协调:1)停止CPU访问主存;2)DMA和CPU交替访存;3)周期窃取。
程序中断方式和DMA 控制方式的对比如下图所示。
5.小结
本节介绍了I/O系统的相关知识,主要介绍I/O系统的功能与组成,简单罗列了纷繁多样的I/O外设,并着重介绍了介于I/O总线与外设之间的I/O接口,详细介绍了接口的功能、组成以及三种主要的I/O控制方式。
认识主板
再识”主板“,作者将年久不用的笔记本给拆了,希望理论体系的加持下,能够获得对复杂主板稍微深入一点的认知。
打开计算机主板,看似密密麻麻的电路元器件和各种芯片,其实可以大致分为这么几个部分:1)CPU与GPU(处理器);2)存储系统(主存和辅存);3)南桥芯片组(总线控制中心)+EC+I/O接口+外设(I/O系统);4)时钟系统;5)电源系统。
北桥、南桥芯片组(总线系统)
几个分系统按照如下的架构(计算机硬件架构)组织起来,其中北桥芯片(MCH)和南桥芯片(PCH)作为总线的控制中心,串联起各硬件分系统,主板的架构也相应的围绕这两个芯片组扩展开来。北桥芯片组离CPU较近,负责高速设备之间的数据传输(CPU、显卡以及主存)。南桥芯片则负责低速设备的互连,硬盘、光驱以及USB接口等都经由南桥芯片与CPU/主存进行数据传输。
CPU和GPU(处理器)
CPU与GPU是主板上的两颗大脑,其中CPU擅长逻辑/算术运算,GPU擅长图像处理相关运算。CPU正面的两颗芯片为CPU的核心,运算器、控制器、高速缓存等部件都集成在上面,通常被称为Die,是
从晶圆(Silicon Wafer)上切割下来的一个个小方块,在切割下来之前,每个小方块(Die)都需要经过各种加工,将电路逻辑刻到该Die上面。如图所示,显卡的主要组成就是图像处理器与显示缓存,它们之间的关系就如同CPU与内存的关系一样。上面的主板,显卡集成于主板之上,被称为集成显卡,占用空间小、功耗低但性能也相对较差,对于图像处理要求比较高的场合(视频制作、大型游戏),一般就需要选用独立显卡,其可以通过总线接口连接到主板上,即插即用,性能强大,但功耗和体积也要大很多。
主存+硬盘(存储系统)
按照正文中提到的存储金字塔结构,计算机的存储由内到外应该分为三部分:1)高速缓存;2)主存;3)辅存。其中高速缓存集成于CPU内部,主板上不可见。
主存:
组成包括内存颗粒(基于DRAM存储技术)、
SPD(串行存在检测)以及总线接口。其中内存颗粒为主存的存储载体,如图的内存条由8颗扩展而成;SPD是一颗8针的EEPROM芯片。芯片内记录了该内存的诸如工作频率、工作电压、速度、容量、电压与行、列地址带宽等重要参数,便于计算机系统依据这些参数配置相应工作时序等参数;总线接口决定了该内存条的总线标准,也决定了它的传输速率。
辅存
:上文的主板连接的是一个500GB的机械硬盘,存储体为盘片,数据存取通过盘片机械旋转实现,传输速度较慢,目前的辅存大都为存取速度更快的固态硬盘,其存储体为基于ROM存储技术的存储芯片,其结构组成还包括缓存芯片和一个主控芯片。
南桥芯片+EC+I/O接口+外设(I/O系统)
I/O系统的硬件组成包括I/O总线、I/O接口以及外部设备。其中南桥芯片和EC(嵌入式控制芯片)共同负责所有I/O外设的总线控制,主板侧边的大量接口就是连接外设的I/O接口,与接口相邻的控制电路至关重要,它决定着相应外设的I/O方式。
时钟系统+供电系统(其他)
主板上除上述几个主要的分系统,还包括用于提供时序信号的时钟系统以及为主板及特定部件供电的电源系统。受限于作者认知水平和篇幅,这里就不具体展开了。