说在前面

一、写作目的

作为计算机门外汉的作者,学习”计算机系统“的过程大致分为三个阶段:

  1. 入门,学习始于2021年11月初的B站《计算机科学速成课》、《从0到1设计一台计算机》科普视频的系统学习,结合日本计算机科普作家矢泽久雄的两本科普读物《计算机是怎么跑起来的》、《程序是怎么跑起来》,完成了计算机硬件系统的入门。

  2. 深入,主要依托B站“王道考研”视频《计算机组成原理》(正文大量配图的来源)的系统学习,结合高分计算机经典黑皮书《深入理解计算机系统》(作者Randal E. Bryant)的深度阅读,完成了”计算机系统“的深入学习,在此基础上进行消化-吸收-输出,最终完成计算机系统知识体系的初步搭建。文中所涉经典专著和视频PPT的电子版可以通过文末的“阅读原文”,自行下载,提取码:re51。

  3. ,理论体系建立完毕后,通过对笔记本主板的拆解和再认识,完成了对知识体系的简单实践。

打开网易新闻 查看精彩图片

基于“体系完整、架构清晰、层次递进”的原则,文章将力图系统而通俗的介绍关于“计算机系统”的种种,希望对大家能够有所帮助。受限于作者专业和认知水平,文中所述难免有所偏颇,还望斧正。

二、内容涉及

本文将从三个方面展开:

1.底层认知:计算机系统大致是这样组成的,底层为计算机硬件(计算机组成原理),其上为操作系统,再上面就是各种软件应用(算法与数据结构),这样就构成了一台功能完整的计算机,而计算机之间的连接则通过计算机网络实现。本文作为缩水版的“计算机系统”,将着重介绍上层以高级语言编写的“代码”在运行的过程中,计算机的底层“软/硬件”的实现过程。

打开网易新闻 查看精彩图片

2.深入理解:完成了计算机组成原理的底层认知的阐述后,想要深入了解的同学,就需要将计算机组件的封装打开,更加具体的探索构成计算机系统的各子系统的结构组成、功能以及实现机理。这部分内容始终围绕“硬”“软”两个方面进行阐述,“硬”的部分将深入计算机内部,详细介绍计算机的硬件系统架构以及其中各硬件分系统(存储系统、中央处理系统、总线系统以及I/O系统)的结构组成和运行机理;“软”的部分则要详细介绍以“0/1”二进制为基础的信息表示和处理方法、控制计算机硬件协调工作的“指令系统”构造方式、运行机理以及各硬件分系统内部维持其有序工作的“规则”“策略”

打开网易新闻 查看精彩图片

如果将计算机系统比作为一家公司的话,那么“硬”的部分就类似于由基本要素“人”(类似晶体管)构成的各职能部门(类似硬件分系统)以及将这些职能部门框起来的“组织架构”;“软”的部分则类似于建构于“核心理念”之上的各种“规章制度”。硬和软共同保障了公司的有序经营。

3.认识主板:“计算机系统”承载体的最佳案例应该就是个人电脑的主板,初识“主板”,如同毛细血管一般的PCB走线、密密麻麻的电路元器件以及大量被引脚包围的集成电路芯片可能会引起你的生理不适,分析更无从下手。当深入了解并构建了相对完整的“计算机系统”的体系后,再看“主板”,会否有不一样的认识?这一过程本身亦是加深对“计算机系统”认识的有益实践。

打开网易新闻 查看精彩图片

底层认知一、什么是计算机系统

计算机是迄今为止最为复杂的一个系统之一,其作用在于按照确定的顺序完成认类预设好的指令,而这些预设好的指令就是我们所熟知的程序。

所谓复杂系统,一方面因为其构成元素的晶体管数量十分巨大,一颗指甲盖大小的CPU核心就包含数以亿级的晶体管,另一方面在于其功能十分强大,简单的堆数量并不能成就强大的系统,计算机系统的强大源于其将海量的晶体管进行互连、按照严密的组织规则让其分工、协作,从而实现了远超个体能力的复杂功能。这与细胞-器官-智慧生命的实现逻辑一致。”计算机系统“正是关注这个复杂系统的搭建过程以及工作机理:1)硬件层面,晶体管-计算机组件-功能完善的计算机;2)软件层面,0/1二进制-信息的表示与处理-指令系统。

打开网易新闻 查看精彩图片

二、计算机的基本组成

现在我们自顶而下开始简单认识一下计算机硬件系统的具体组成。计算机硬件系统的基本组成包括两个部分:1)主机(计算机核心部分);2)I/O设备(键盘、鼠标、显示器、光驱等)。其中主机由CPU和主存组成,CPU则主要包括运算器(执行逻辑、算术运算)和控制器(指挥程序的运行),主存用以存放程序和数据。

打开网易新闻 查看精彩图片

打开任意笔记本的销售页面,配置参数表均介绍了该计算机的主要性能参数,其中最主要的参数正是:1)CPU型号;2)内存(即主存)容量;3)硬盘容量(即辅存容量)。

打开网易新闻 查看精彩图片
打开网易新闻 查看精彩图片

CPU的主要功能就是执行指令,结构组成主要包括运算器和控制器,各组件的功能为:

  • 运算器:就像是搬砖的,主要工作就是埋头执行各种算数运算和逻辑运算,主要组成有:1)算术逻辑单元:用以执行各种算术和逻辑运算;2)通用寄存器,用以存放待运算的操作数;3)累加器,用以存放操作数和运算结果;4)乘商寄存器,用以辅助乘商计算。

  • 控制器:就像是工头,主要工作就是指挥运算器执行各种指令,主要组成有:1)控制单元:分析指令,给出控制信号;2)指令寄存器:用以存放待执行指令;3)程序计数器:用以存放下一条指令的地址。

打开网易新闻 查看精彩图片

主存储器就是一个临时货柜,用以存放待运行程序翻译而成的各种指令(数据),组成包括三个部分:1)存储体,其如同货柜一样存放着海量的程序或数据;2)MAR,地址寄存器,临时存放待取程序或数据的地址(如同取件码);3)MDR,数据寄存器,临时存放待取程序或数据(就如同待取包裹)。

打开网易新闻 查看精彩图片

三、计算机的组织形式

复杂、庞大的系统想要运行有序,就必须要一套科学合理的组织架构保驾护航,就如同大公司的组织架构,计算机各部组件相互之间分工协作需要通过计算机硬件架构来进行保障。计算机硬件的组织形式主要分为两种:1)冯-诺伊曼结构;2)现代计算机结构。

  • 冯-诺伊曼结构

计算机科学家冯-诺依曼确立了现代计算的基本组成以及组织架构,即“冯-诺依曼结构”,结构组成包括运算器、控制器、存储器、输入设备以及输出设备五大部分,组织结构如下图所示,结构特点是以CPU为中心的组织形式,所有数据流动、程序运行以及结果输出均由CPU执行和居中协调。

打开网易新闻 查看精彩图片

如果将计算机比作一个公司的话,五大部件大抵可以做如下类比,运算器就如同生产部门,存储器就如同仓储部门,所有的采购原材料以及加工好产品的产品都需要经过生产部门,再送达仓储部门等相关部门,这显然让生产部门做了很多职责范围外的活,降低了生产效率。因此现代计算机结构对五大部件的组织形式进行了优化,那便是“现代计算机结构”。

打开网易新闻 查看精彩图片

  • 现代计算机结构

现代计算机结构以存储器为核心,所有输入的数据/程序以及输出的计算结果,均先存入存储器,然后在被送往CPU进行执行或送至输出设备。现代计算机结构有效的为CPU减负,让CPU更加专注的进行指令执行,大幅提高了效率。

打开网易新闻 查看精彩图片

四、计算机的运行过程

以上,我们就基本完成了一个计算机硬件系统的搭建,那么这个系统是如何工作的,各部组件之间又是如何分工协作,确保预先设置的指令畅通无阻的运行的。

过程大致是这样的:当你打开手机上的某个APP时,后台其实是用高级语言编写的代码在运行,这些代码经过一个叫编译器的东西翻译成计算机硬件认识的机器语言(一行行二进制代码),然后经由I/O装入主存的存储体中。

打开网易新闻 查看精彩图片

当以机器语言表示的指令和数据装入主存后,CPU就开始访问主存提取指令并开始执行,具体过程如下所示:

step1:程序计数器PC指向当前指令地址#01,并将地址送至主存的地址寄存器MAR

step2:存储体根据MAR的取件码,将对应位置的数据发给数据寄存器MDR;

step3:MDR将指令发给控制器的指令寄存器IR,进行指令分析;

step4:IR将指令的操作码发给控制单元CU,将地址码发MAR,CU依据操作码通知运算器要进行何种操作;

step5:存储体根据MAR的取件码,将#04地址对应的数据经由MDR传给运算器的ACC进行运算。‍

打开网易新闻 查看精彩图片

‍如此这般,就大致了解了计算机的各硬件是如何协作,确保程序顺利运行的。

深入理解

入门之后,该部分将从“软件”和“硬件”两个方面,正式深入计算机各分系统,介绍它们的结构组成、工作机理。

打开网易新闻 查看精彩图片

一、信息的表示与处理

二进制是信息科学的基础,就如同晶体管是计算机硬件系统的基础。现代计算机存储和处理以二值信号表示的信息。这些普通的二进制数字,或者位(bit),形成了数字革命的基础。

我们熟悉的数学理论是建立在关于十进制的信息表示和处理的理论基础之上的,但是十进制的每一个位状态包含10种(0~9),状态过多,不利于工程实现,然而二进制的一个位状态只包含两种(0,1),存储和处理信息的机器时,二进制值工作得更好。二值信号能够很容易地表示、存储和传输,例如,可以表示为穿孔卡片上有洞或无洞、导线上的高电压或低电压,或者磁场引起的顺时针或逆时针。

本章主要分为三部分内容:1)信息存储,主要介绍关于二进制理论基础的一些基本概念;2)整数的表示与计算,介绍利用无符号数和二进制补码对整数进行表示和运算的理论基础;3)浮点数的表示与运算,介绍利用二进制版本的科学记数法表示实数的方法及其相关运算性质。

打开网易新闻 查看精彩图片

1.信息存储1.1 进位计数制

我们生活的现实世界是建立在十进制基础之上的,而计算机硬件却只能读懂0/1二进制语言,两个世界要建立紧密的联系就离不开各种进制之间的转换。最常见的就是十进制、二进制、8进制以及16进制之间的相互转化。其中十进制、8进制以16进制与二进制之间相互转化方式如下,十进制、8进制以及16进制三者之间的相互转化可以通过二进制中转实现。

打开网易新闻 查看精彩图片

1.2 字

大多数计算机使用8位的块,或者叫做字节,来作为最小的可寻址的存储单位,而不是对存储器中的每一个位(bit)进行访问,存储器的存储体可以被视为一个非常大的字节数组,称之为虚拟存储器的每一个字都有一个“门牌号”,即为地址。所有地址组成的集合为虚拟内存地址空间,空间的大小就是计算机的字长,如32位计算机,虚拟地址的空间限制为4GB,64位就是8GB。

打开网易新闻 查看精彩图片

1.3 数据大小

常用的数据类型有这么几种,字符型、整数型以及浮点型,其中字符型一般用来存储字符串中的单个字符,整数型则用来存储各种长度的整数,浮点型则是用来存储不同精度的浮点数。

打开网易新闻 查看精彩图片

1.4 寻址和字节顺序

如果一个数据跨越多个存储字节,那么就必须要对数据的存放顺序进行规定,几乎所有机器,多字节对象都被储存在连续的字节序列中。对表示一个对象的字节序列排序,由两种通用的规则:1)大端模式;2)小端模式。

如图所示,在地址#1~#4所指向的内存中,存储16进制数据01234567H,其中“01”表示数据的高有效位(8bit),“67”表示数据的低有效位,则将高有效位放在前面为大端模式;将高有效位放在后面为小端模式。

打开网易新闻 查看精彩图片

1.5 字符串

字符串是由一个个字符组成的,而在计算机中,每一个字符与“0/1”建立联系是通过ASCII编码(8bit)的方式来实现的,其中ASCII值为16进制表示。

打开网易新闻 查看精彩图片

1.6 常见运算

  1. 位级运算

所谓位运算,即以二进制表示的数据的每一位可以作为一个个体进行相应的布尔运算,主要运算为与&、或|、非~以及异或^,可以参与位运算的数据类型为任意“整型”(如char、int、short int、long int和unsigned int)。

打开网易新闻 查看精彩图片

  1. 逻辑运算

逻辑运算(或||、与&&、非!)的运算性质与位级运算显著不同,功能也完全不同,逻辑运算认为所有的非零数据均为TRUE,而数据零为FALSE,运算的结果为1或0,代表TRUE或FALSE。

打开网易新闻 查看精彩图片

  1. 移位运算

移位运算,以向左或者向右移动位模式。左移表示为x<>k,但是右移的具体操作则份两种情况:1)逻辑右移为高位补0;2)算术右移为高位补最高有效位,具体操作如下图所示。对于无符号数据,右移必须为逻辑的,对于有符号数据,几乎所有的机器都默认算术移位。

打开网易新闻 查看精彩图片

2.整数的表示与运算

本节将介绍整数的两种表示方式,一种只能表示非负数,另一种则能够表示负数、零和正数。其数学属性与后续的机器级实现有很强的关联。

2.1 整型数据类型

打开网易新闻 查看精彩图片

2.2 无符号数与二进制补码

所谓无符号数,就是没有“+/-”号的数,其只能表示非负数,其二进制编码表示与真值之间的映射关系为:

即w位的无符号二进制编码,其真值可以上述公式进行计算,其建立了二进制编码 (类似w维向量)与真值(类似w维向量的模)的一一映射的关系,公式看似复杂,其实就是前面二进制转十进制所用到的 幂乘求和法 。

对于有符号数(即包含“+/-”号),则需要给符号位编码,以区分正负数。具体执行有两种方案:

  1. 原码(S)表示,将最高有效位作为符号位,其真值计算可表示为B2S,由下图可知,最高有效位(符号位)决定了真值的正负,其他位仅决定绝对值的大小;

打开网易新闻 查看精彩图片

  1. 补码(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,浮点数编码对应的真值存在两种计算方法:

  1. 指数编码既不是全0也不是全1时,此时浮点数为规格化值,其中指数域 - ,e为无符号数,位表示为 - - , - - ;小数域 ,其中 - - ;

  2. 当指数编码全为0时,浮点数为非规格化值,此时 - , ;

  3. 当指数编码全为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)时间局部性,即被引用过一次的存储器位置可能在不远的将来被多次引用;2)空间局部性,即一个存储器位置被引用了一次,那么程序可能在不远的将来引用附近的存储器位置

局部性原理在工程中有着现实的需求,比如说硬件层面,计算机通过引入高速缓存,提前将主存中位置相邻的数据集拷贝至高速缓存,从而利用高速缓存的速度优势,提高数据传输速度。

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待取数据,就如同待取的包裹。三者之间的有序开展有赖于时序控制逻辑协调。

打开网易新闻 查看精彩图片

继续深入存储体的结构细节,就是密密麻麻的集成电路组成,其基本组成如下图所示:存储体被绿色纵线和红色横线划分成很多小方块(构成存储矩阵),每个小方块就是一个存储“位”,它由一个MOS管和一个电容构成,其中电容就相当于“蓄水池”,可以存水,亦可以放水,有水就是“1”,没水就是“0”;MOS管则相当于水管阀门,控制是否存水或防水,对应的就是是否“写入”“读出”电容里的数据。因此连接水管出水口的“绿线”就是写入或者读出存储单元里面的数据,将8个存储“位”就构成一个存储“字”,而连接开关阀门G的“红线”就决定是否允许相应的单元被写入或读出数据,将红线统一连接到地址寄存器,就可以通过地址寄存器的数据控制哪个位置的数据被选通。

打开网易新闻 查看精彩图片

其实将“红线”直接连接地址寄存器(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相当于主存的一个子集,那就必须要先明确子集与原集合之间的映射关系,高速缓存与主存之间的映射关系主要分为三种:

  1. 全相联映射:1)映射方式,主存和缓存之间的数据传递是以块为单位的,每个块包含多个字的数据,全相联映射中,如下图所示:Cache中#0~#7行均可以接收主存#0块,即主存中块可以存放在Cache中的任意位置,没有限制;2)访存方式,如下图所示,假设内存容量为16*4B,主存的地址包括4位块号以及2位块内地址,CPU带着待取数据的主存地址(如001110)去问Cache要数据,Cache于是对着主存地址去挨个块核对标记有效位,发现#2行标记和主存块号一致,且标记位为1(说明块内有数据),则通知CPU“我有你想要的东西”,即为命中

打开网易新闻 查看精彩图片

  1. 直接映射:1)映射方式,主存中块只能按照一定的次序排队放入放到Cache中的某一行,因此,Cache块号=主存块号%(取余)Cache总块数;2)访存方式,CPU带着地址码001110去找Cache要数据,Cache用主存块号对行数8取余结果为#3,于是就去#3行核对标记和有效位,发现有效位虽然为1,但标记却是1011,与主存块号不一致,于是通知CPU“我没有你想要的东西”,即为不命中;

打开网易新闻 查看精彩图片

  1. 组相联映射,1)映射方式,介于1)和2)映射方式之间,Cache中的块可以事先分组,主存中的块必须要按照一定次序放入Cache中的某一组,但是在组内可以随意放;2)访存方式,CPU带着地址码001110去找Cache要数据,Cache用主存块号对组数4取余结果为#3组(即块号后两位),于是就去#3组(#6行,#7行)核对标记和有效位,发现#7行标记为0011一致,且有效位为1,于是通知CPU“我有你想要的东西”,即为命中;

打开网易新闻 查看精彩图片

三种映射方式总结和优缺点对比如下:

打开网易新闻 查看精彩图片

  • 高速缓存的替换策略

前面,介绍了高速缓存与主存的映射方式以及不同映射方式下,CPU的访存方式,访存结果根据CPU是否获得“想要的数据”而分为命中和不命中两种情况,命中就皆大欢喜,这里介绍一下不命中会怎么样。不命中也分两种情况:

  • 有空位置存放数据,直此时接将内存块地址对应数据Copy至此即可;

  • 没有空位置存放数据(即待放入位置被原数据块占据了),此时就需要对两个块进行位置替换,确保计算机的正常运行,三种不同的映射方式的替换前提有所不同,区别如下:1) 全相联不挑食,除非Cache全满,否则就可以见缝插针;2)直接映射最专一,必须对应行非空,否则就替换;2)组相联比较中庸,介于二者之间,对应的组满了,才替换。

打开网易新闻 查看精彩图片

实际替换时,也有着不同的策略,主要有四种:1)随机算法(RAND),在满足要求的块中,随机选一个块进行替换,效果较差;2)先进先出算法(FIFO),优先替换最新被调入Cache的主存块;3)近期最少用(LRU),将最久没有被使用的主存块替换掉,基于“局部性原理”,命中率较高;4)最近不常用(LFU),将被访问次数最少的主存块替换掉。

打开网易新闻 查看精彩图片

  • 高速缓存的写策略

以上介绍了CPU从高速缓存中读数据时的一些策略,但同时CPU的运算结果也要同时写回高速缓存以及主存,以备后续使用,这时候也有着不同的策略,针对写命中和写不命中两种情况,处理策略也不尽相同。

  1. 写命中时:1)全写法,即写命中后需要将结果同时写入高速缓存和主存;2)写回法,即写命中后,只是将结果写入高速缓存,当高速缓存中相应位置的数据要被替换时,才将结果写回主存;

  2. 写不命中:1)写分配法,当CPU对高速缓存写不命中时,把主存中的块调入高速缓存,在高速缓存中修改,通常搭配写回法使用;2)非写分配法,当CPU对高速缓存写不命中时,只写入主存,不调入高速缓存,通常搭配全写法使用。

打开网易新闻 查看精彩图片

4.小结

本章更加深入的介绍了存储系统,相继介绍了丰富多样的存储技术、不同存储方式因速度和成本的区别分别司职于计算机的不同部位,从而形成了“金字塔”形式的层次结构、以及详细介绍了层次结构的中主存和高速缓存Cache的结构组成运行机理以及与CPU之间协调机制

三、指令系统

如下图所示,我们知道计算机系统构成层次结构是这样的:晶体管是构成计算机系统的基本元素,其通过高/低电平的切换实现自己的价值;大量晶体管通过不断套娃构成了超大规模的集成电路,这些集成电路由于功能的不同可以分饰不同的角色(存储器、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)数据传送类,进行主存和CPU之间的数据传递(如LOAD:把存储器中的数据放到寄存器中;STORE:把寄存器中的数据放入到存储器);2)算术/逻辑操作,其中算术操作包括加、减、乘、除、增1、减1、求补、浮点运算、十进制运算等,逻辑运算包括与、或、非、异或、位操作、位测试、位清除、位求反等;3)移位操作,包括算术移位、逻辑移位、循环移位等;4)转移操作,包括无条件转移JMP、条件转移(JZ:结果为0;JO:结果溢出;JC:结果有进位)、调用和返回(CALL和RETURN)、陷阱(Trap)与陷阱指令;5)输入/输出操作,CPU寄存器与IO端口之间的数据传递(端口即IO接口中的寄存器)。

打开网易新闻 查看精彩图片

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)”原则管理的存储区,该存储区中被读/写单元的地址使用一个特定的寄存器给出的,该寄存器称为堆栈指针(SP)(类似于程序计数器PC)。

基于堆栈寻址,下图所示为一个加法运算的过程:

step1:堆栈指针SP指向R0,对应数据0001出栈进入ACCSP指向R1

step2:SP对应数据1001出栈进入寄存器X,SP指向R2;

step3:ALU计算ACC与X的和(为1010),送至寄存器Y;

step4:计算结果入栈,SP指向R1,将Y1010)送至堆栈寄存器R1

打开网易新闻 查看精彩图片

依据堆栈数据存放位置可分为硬堆栈和软堆栈,硬堆栈使用寄存器存放操作数,成本较高,但速度快;软堆栈使用主存存放操作数,成本低,但速度相对较慢。

不同寻址方式的有效地址的计算方法以及访存次数汇总如下表:

打开网易新闻 查看精彩图片

3.CISC与RISC

指令集的设计,有两个主流的方向,一个是以X86架构为代表的CISC(Complex Instruction Set Computer),即复杂指令集,另一个则是以ARM架构为代表的RISC(Reduced Instruction Set Computer),即精简指令集。两者的设计思路向左。

  • CISC:设计思路为一条指令完成一个复杂的基本功能,一条指令可以由一个专门的电路完成,比较复杂的指令则通过“存储程序”(微程序)的设计思路,由一个比较通用的电路配合存储部件完成。典型应用为X86架构,主要应用于笔记本、台式电脑等;

  • RISC:设计思路为一条指令至完成一个基本“动作”多条指令组合完成复杂的基本功能。典型应用为ARM架构,主要应用于手机、平板等。

如果说“指令”就是计算机硬件系统的语言的话,那么CISC和RISC就是两种语言系统规范,其中CISC以“单词”为元素构建语言系统,每一个单词就可以表达一个意思,而表达复杂的意思,就可以将单词组合,优点在于简单,缺点就是单词可能会很多;而RISC则是以“字母”为元素构建语言系统,每个字母无法表达确切的含义,需要将很多字母组合起来,才能表达丰富多样含义,其优点在于“元素”的数目较少,只有26个,缺点在于表达任何一个含义,都需要将很多字母组合起来方可。

打开网易新闻 查看精彩图片

两种指令集的对比如下图所示:

打开网易新闻 查看精彩图片

4.小结

本章详细介绍了指令系统的相关内容,相继介绍了什么事指令系统以及其在计算机系统中的作用、一条指令的构成(指令格式)、指令以及数据是如何寻址的(寻址方式)以及两种典型指令系统(CISC和RISC)。

四、CPU

正如兰德尔-E-布莱恩特在《深入理解计算机系统》中所说的那样,现代处理器可以称得上是人类创造除的最复杂的系统之一,一块指甲大小的硅片上,可以容纳一个完整的高性能处理器和大的高速缓存,以及用来连接外部设备的逻辑电路,它是计算机的核心。

打开网易新闻 查看精彩图片

如前文所述,CPU主要由运算器和控制器构成,但是这样的抽象模型显然不是我们认识的终点,这一章我们将深入CPU的内部,认识CPU的功能以及结构组成、CPU是如何完成指令的提取以及执行、提取的数据是在CPU内部如何流动的、控制器(CU)是如何通过控制信号发挥其调度的作用的以及如何通过流水线理念提升CPU运行效率。

打开网易新闻 查看精彩图片

1.CPU的功能和结构

CPU的主要功能有:

  • 指令控制:完成取指令分析指令执行指令的操作,即程序的顺序控制;

  • 操作指令:一条指令的功能往往有若干操作信号的组合来实现的。CPU管理并产生内存取出的每条指令的操作信号,把各种操作信号送往相应的部件,从而控制这些部件按指令的要求进行动作;

  • 时间控制:对各种操作加以时间上的控制,时间控制要为每条指令按时间顺序提供应有的控制信号

  • 数据加工:对数据进行算术逻辑运算

  • 中断处理:对计算机运行过程中出现的异常情况特殊请求进行处理。

CPU的基本结构包括运算器控制器,其中运算器的作用是对数据进行加工;控制器的作用是协调控制计算机各个部件执行程序的指令序列,基本功能包括:1)取指令,自动形成指令地址,发出取指令的命令;2)分析指,对取得的指令( 操作码+操作数地址 )进行分析,对操作码进行译址(分析要完成什么操作),产生操作数的有效地址 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,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)取指令;2)分析指令;3)产生控制信号。实现相关功能结构组成主要三个:1)程序计数器PC,用以指明当前待执行指令在主存中位置;2)指令寄存器IR,用以存放待执行指令,并对指令进行分析,将指令操作码部分提供给控制单元;3)控制单元CU,也是控制器的核心,依据指令操作码的要求,综合节拍发生器提供的时序、机器周期触发器提供的周期标志以及各执行单元的反馈信号,输出一组控制指令(微命令),对控制信号集中控制,指导微操作的执行。

打开网易新闻 查看精彩图片

上面介绍了CPU控制器功能结构组成以及工作机理,可知控制单元CU是控制器的核心,针对这个核心部件功能实现有两种实现思路:1)硬布线思路,基于硬件电路的实现;2)微程序思路,基于软件微指令的实现。这已经是CU设计层面的内容,以下作者只做简单原理说明,不做具体展开。

4.1 硬布线(硬件思路)

上文将CU抽象为一个黑匣子,其输入分为4部分(时序信号指令信号周期标志反馈信号),输出为一组控制信号,如下图所示,硬布线的思路是通过逻辑电路建立输入信号—输出信号的联系,大致过程是先建立输出-输入变量之间的逻辑表达式,然后利用数字电路的知识来实现相应逻辑表达式。

打开网易新闻 查看精彩图片

硬布线实现过程为纯硬件控制,优点为响应速度快,缺点在于设计和实现过程较为复杂,且硬件实现的可扩展性比较差。适用于RISC指令系统,因为指令系统中的指令相对简单,易于电路实现。

4.2 微程序(软件思路)

计算机系统层面,软件实现与硬件实现是等效,控制单元CU输入信号和输出信号的本质就是一组0/1编码的指令,“微程序”的实现过程就是建立输入信号编码和输出信号编码的映射关系,并将它们存入专用存储器(控制存储器CM),运行通过访存提取控制信号编码,实现微操作,结构示意图如下所示。

打开网易新闻 查看精彩图片

运行时,CU按照输入信号编码,经由微地址形成部件转化成相应控制信号编码的地址,访问CM提取相应控制信号编码,并送至各控制信号(微指令),实行对应微操作,组合微操作形成指令控制。这一过程与访问存储器非常相似,所以很多部件及过程都在“访存”学名的基础上加了“”字。微程序控制器的优点在于设计和实现较为简单,扩展性好,缺点在于微指令执行需要访存,速度相对较慢,适用于CISC系统,因为指令系统中指令相对较为复杂,易于使用微操作指令实现。

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. 按数据传输格式分类

按照数据的传输的格式分类,可以分为串行总线和并行总线:1)串行总线就像单行道,数据只能只能排着队按次序逐一传送,优点在于成本低廉,适合长距离传输,缺点是数据在收发过程中需要提前拆卸和装配;2)并线总线就像双向六车道,数据无需排队,并行发送,有点在于逻辑时序比较简单,无需对数据进行拆卸和装配,电路实现相对简单,缺点在于信号线数量多,远距离传输成本高。

打开网易新闻 查看精彩图片

  1. 按总线功能分类

按总线的功能进行分类,可分为3种:

  • 片内总线

CPU芯片内部寄存器与寄存器之间、寄存器与ALU之间的公共连接线;

  • 系统总线

主存系统总线按传输信息内容的不同,又可以分为3类:1)数据总线,用来传输各功能部件间址的数据性,为双向传输线,位数与机器字长、存储字长有关;2)地址总线,用来指出数据总线上的源数据或目的数据所在的主存单元或I/O端口地址,为单向传输线,地址总线的位数与主存地址空间的大小有关;3)控制总线,传输控制信息,包括CPU送出的控制命令和主存(或外设)返回CPU的反馈信号。

系统总线按照结构可以分为:1)单总线;2)双总线;3)三总线;4)四总线。计算机系统结构越复杂,相应的总线结构也会更加复杂。

打开网易新闻 查看精彩图片

  • 通信总线

用于计算机系统之间或计算机系统与其他系统(远程通信设备、测试设备等)之间的信息传递。

  1. 按时序控制方式

分为同步总线和异步总线。

1.3 性能指标

总线的性能指标主要包括:1)总线周期,一次总线操作所需时间(包括申请阶段、寻址阶段、传输阶段),通常由若干总线时钟周期构成;2)总线时钟周期,即机器时钟周期,由时钟系统决定;3)总线的工作频率,总线周期的倒数,实际指一秒能传递几次数据;4)总线的时钟频率,即机器时钟频率;5)总线宽度,通常为数据总线的根数,决定同时能传输数的位数;

6)总线带宽

总线的数据传输速率,总线带宽=总线工作频率*总线宽度(bit/s)

7)总线复用

一种信号线在不同时间传输不同类型的信息(比如地址总线与数据总线的复用)。

8)信号线数

地址总线、数据总线以及控制总线3种总线数总和为信号线数。

2.总线仲裁与传输2.1 仲裁

如何解决多个设备争用总线的问题?此时需要引入仲裁策略,分为集中仲裁方式和分布仲裁方式两大类。集中仲裁的方式有三种:1)链式查询方式;2)计数器查询方式;3)独立请求方式。

  • 链式查询方式

总线控制部件接收到总线请求BR后,依照远近链式通过各设备接口检查请求状态,通过设备接口0时,发现BR未触发,便顺序检查设备接口1,发现BR触发,便向其发出总线允许BG并触发总线忙BS,设备1接口获得总线控制权。

打开网易新闻 查看精彩图片

  • 计数器查询方式

总线控制器接收到总线请求BR后,判断总线处于空闲状态,计数器开始计数,数值通过设备地址发往各设备接口,当请求设备接口地址与数值一致后,该设备获得总线控制权,计数器停止计数和查询,并触发总先忙BS

打开网易新闻 查看精彩图片

  • 独立请求方式

有需求的设备各自向总线控制器发送总线请求BR,总线控制器按照一定优先次序向相应设备发送请求允许BG,并触发总线忙BS,相应设备获得总线控制权。

打开网易新闻 查看精彩图片

三种集中仲裁方式的对比:

打开网易新闻 查看精彩图片

分布式仲裁:当设备由总线请求时,各自将其唯一的仲裁号发送到共享的仲裁总线上,各仲裁号相互PK,优先级高的可获得总线允许。该仲裁方式的特点为:不需要中央仲裁器,每个潜在的主模块都有自己的仲裁器和仲裁号,多个仲裁器之间争使用总线