2014.09.22– 2014.09.28
读《计算机组成原理》 I – 唐朔飞老师,不含第二章“计算机的发展和应用”、第十章“控制单元的设计”。除此,留下的话题有“定、浮点运算法则”、“扩展操作码”、“指令流水”、“指令对应的微操作”。
技术的实现细节日新月异(优化或变革),从培养阅读能力及掌握此技术细节上讲可细读之。
学习C。对应C代码到汇编指令(阅读反汇编),了解指令执行过程(计算机组成原理)。了解操作系统的一些实现机制。
1 PARTI
(1) 计算机的多层次结构
[My comprehension]
- 虚拟机的概念源自“传统的机器(电脑)可以运行机器语言”。
- 如此就可以将处理(如编译)高级语言(如C)、汇编语言的可执行程序称之为“虚拟机”。
- 在硬件平台之上的操作系统提供进程供上层虚拟机完成自己的工作(接收并处理对应的源码)。一个经编译、链接的程序必须通过操作系统将其加载到内存中后,传统的机器才能处理它。
- 一条机器指令可能对应着传统机器的多个操作,每个操作对应一条微指令。对于微指令系统,CPU内保存了每条指令对应的微指令,当执行机器指令时,实际上执行的是此指令对应的微指令程序。
在微指令系统中,一个源程序到被机器执行的过程大概如此。
(2) 算术运算 逻辑运算
算术运算就是数的加、减、乘、除以及乘方开方等数学运算。
逻辑运算:在逻辑代数中,有与、或、非三种基本逻辑运算。
(3) 存储字(长) 机器字长
主存储器(主存或内存)包括存储体M、各种逻辑部件及控制电路。存储体由许多存储单元组成,每个存储单元又包含若干个存储元件。每个存储元件能够存一位二进制代码(“0”或“1”)。一个存储单元可以存储一串二进制代码,这串二进制代码称为存储字,这个二进制代码的位数称为存储字长。通常称寄存器的位数为机器字长。
(4) 由存储字长到字节个数
随着计算机应用范围的不断扩大,解题精度的不断提高,往往要求指令字长是可变的,数据字长也要求可变(char,int,float)。为了适应指令和数据字长的可变性,其长度不由存储字长来确定,而由字节的个数来表示。一个字节(Byte)被定义为8位(bit)二进制代码组成。
(5) 计算机硬件的主要技术指标
- 机器字长:字长越长,数的表示范围越大,精度也越高。机器也会影响机器的运算速度,若CPU字长较短,又要运算位数较多的数据,那么需要经过多次的运算才能完成。
- 存储容量:主存和辅存。
- 运算速度:MIPS(Million Instruction Per Second,百万条指令每秒)。CPI(Cycle Per Instruction),机器主频倒数。FLOPS(Floating Point Operation Per Second,浮点运算次数每秒)。
[2014.09.22– 21:57]
2 PARTII
总线
(1) 总线
计算机的几大部件之间的互联方式有两种,一种是各部件之间使用单独的连线,称为分散连接;另一种是将各部件连到一组公共信息传输线上,称为总线连接。这一组公共的传输线就叫总线。现代计算机大多采用三态逻辑门来构成总线。
(2) 总线特性
总线特性包括机械特性、电气特性、功能特性及时间特性。电气特性和时间特性在读总线标准时会被关注得较多。
电气特性是指总线的每一根传输线上信号的传递方向和有效的电平范围。[后文帮助理解] 通常规定由CPU发出的信号称为输出信号,送入CPU的信号称为输入信号。例如,地址总线属于单向输出线,数据总线属于双向传输线。他们都定义高电平为1,低电平为0。大多数的电平定义范围与TTL相符合。
时间特性是指总线中的任意一根线在什么时间内有效。每条总线上的各种信号相互存在一种有效的时序的关系,因此,时间特性一般可用信号时序图来描述。
(3) 总线标准
所谓总线标准,可视为系统与各模块、模块与模块之间的一个互连的标准界面。[后文帮助理解] 这个界面对它两端的模块都是透明的,即界面的任一方只需根据总线标准的要求完成自身一方接口的功能要求,而无须了解对方接口与总线的连接要求。
以RS-232C总线理解总线标准
DTE(Data Terminal Equipment)是数据终端设备,它是产生二进制信号的数据源,也是接收信息的目的地,是由数据发生器或接收器或兼具两者组成的设备。它可以是一台计算机。DCE(Data Communication Equipment)是数据通信设备,它实质是一个信号的匹配器,既能满足DTE的要求,又能使传输信号符合线路要求。它具有提供数据终端设备与通信线路之间通信的建立。维持和终止连接等功能,同时还执行信号变换与编码。它可以是一个Modem(调制解调器)。DTE与DCE之间传输的是0或1的数据,通过RS-232C接口规定的各种控制信号,可实现两者之间的协调配合。
[My comprehension]
按照总线标准定义,RS-232C规定是界面。STM32与MAX232是界面的两端。TX,RX及TIN,ROUT是按照总线标准设计的引脚(接口)。
[2014.09.23 – 21:53]
(4) 总线周期
通常将完成一次总线操作的时间称为总线周期。
(5) 总线通信控制
总线通信控制主要解决通信双方如何获知传输开始和传输结束,以及通信双方如何协调如何配合。通常有四种方式:同步方式、异步方式、半同步通信和分离方式。
- 同步方式:通信双方由同一时标控制数据传送。
- 异步方式:采用应答方式,即当主模块发出请求信号时,一直等待从模块反馈回来“响应”信号后,才开始通信。异步信号分为不互锁,半互锁和全互锁三种类型。
- 半同步方式:增加一条“等待”响应信号,采用插入时钟等待周期来协调双方通信。地址、命令信号依旧按照时标来发送。
- 分离格式:将一个传输周期(总线周期)分解为两个子周期。分解子周期的点为从模块准备数据的时间。当从模块准备好数据后又重新申请总线来传输数据。在从模块准备数据期间,总线的控制权可以让别的模块使用。
总线除了具有传送数据的功能之外。再考虑CPU效率出现各种总结结构。I/O设备通过总线都会连接到主存和CPU之上。为了提升CPU的效率,CPU的片内总线也出现各种结构。
[2014.09.24– 12:26]
存储器
(1) 存储器和CPU的速度
由于超大规模集成电路的制作技术,使CPU得速度变得惊人的高,而存储器的存数和取数的速度与它很难匹配,这使计算机系统的运行速度在很大程度上受存储器速度的制约。
(2) 存储器分类
(3) 存储器层次结构
对于虚拟存储器而言,其逻辑地址变换到物理地址的工作是由计算机系统的硬件和操作系统自动完成的,对程序员是透明的。
(4) 半导体主存
半导体存储器与半导体存储芯片:半导体存储器是由许多芯片组成的,为此需要用片选信号来确定哪个芯片被选中。如,一个64K X 8位的存储器可由32片16K X 1位的存储芯片组成。每次读出一个存储字时,只需要选中8片。
通过半导体存储芯片译码驱动方式来看半导体存储芯片的结构:
Figure7. 线选法访问存储器
在图7中用线选法访问存储器,一次可访问一行(8个位)即一字节。在图8中用重位法每次可访问一个位(1 bit)。这两种芯片可以组成容量更大,存储字长更大的半导体存储器。
(5) 主存的技术指标
主存的主要技术指标是存储容量,存储速度及存储器带宽。
[2014.09.24– 21:49]
(6) 提高访存措施
根据主存的技术指标会对主存进行改进。除了寻找高速元件和采用层次结构外,调整主存结构也可提高访存速度。具体包含单体多字系统,多体并行系统及高性能存储芯片。高性能芯片的一段发展为:
- SDRAM,同步RAM。与DRAM相比,SDRAM的改进之处有“锁存CPU给出的地址和控制信号,指定时钟周期数给SDRAM响应,在此期间,CPU可去执行其它任务”、“SDRAM支持猝发访问模式,即可根据CPU发出的一个地址就可以连续访问一个数据块(如32字节)”、“SDRAM芯片内可以包含多个存储体”。
- RDRAM,Rambus DRAM主要解决存储器带宽问题。
- CDRAM,带Cache的DRAM。
(7) 设计Cache的原因
第一:避免CPU与I/O设备争抢访存。第二:高速缓存Cache可以解决主存与CPU速度的不匹配问题。一段缓存历史包含多级缓存,统一缓存及分离缓存。Cache的基本结构主要包含Cache存储体,地址映射变换机构,替换机构。后两者对应着策略来实现对应的功能。
(8) 超前控制和流水线控制
超前控制是指当前指令执行过程尚未结束就提前将下一条准备执行的指令取出。流水线控制实质上市多条指令同时执行。
[2014.09.25– 16:44]
I/O系统
(1) I/O系统发展
Figure12. I/O系统发展
与通道及I/O处理机管理I/O系统的内容在“计算机体系结构”中讲述。
(2) I/O系统组成
(3) I/O接口组成及类型
按数据传送方式分类,有并行接口和串行接口。按功能分,有可编程接口和不可编程接口。按通用性分类有通用接口和专用接口。按数据传送的控制方式,有程序型和DMA型接口。
(4) 程序中断接口电路配置的硬件线路
每台外部设备必须要有一个中断请求触发器。凡能向CPU提出中断请求的因素叫做中断源。当多个中断源同时提出请求时,CPU必须对这些请求进行排队,且只能接受级别最高的中断源请求,这样I/O接口中需要设置一个屏蔽触发器MASK来屏蔽其余中断源的请求(非嵌套中断)。
当多个中断源向CPU提出中断请求时,CPU只能按中断源的不同性质给其排队,寄予不同等级的优先权。这个功能由排队器电路完成。
CPU一旦响应中断就会暂停现运行的程序转去执行该设备的中断服务程序。不同的设备有不同的中断服务程序,每个服务程序都有一个入口地址。CPU必须找到这个入口地址。入口地址的寻找可以用硬件方法或者软件的方法。硬件向量方法是通过向量地址来找设备的中断服务程序入口地址。向量地址由中断向量地址形成部件电路产生。中断向量地址形成部件的输入来自排队器的输出,它的输出是中断向量即向量地址。
获取中断服务程序的方法有:硬件向量法和软件查询法。
(5) 中断服务程序的流程
一般中断服务程序的流程分四大部分:保护现场、中断服务、恢复现场和中断返回。这个过程有点像调用一个子函数的过程(看对应的反汇编代码)。
(6) 中断嵌套
计算机在处理中断的过程中,有可能出现新的中断请求。此时如果CPU暂停现行的中断服务程序,转去执行新的中断请求,这种现象称为中断嵌套。
(7) DMA与主存交换数据的方法
- 停止CPU访问主存:当外设要求传送一批数据时,由DMA接口向CPU发一个停止信号,要求CPU放弃地址线、数据线和有关控制线的使用权。
- 周期挪用(周期窃取):当I/O设备发出DMA请求时,I/O设备便挪用或窃取总线占用一个或几个主存周期(实际时间大于这个周期),而DMA不请求时,CPU仍继续访问主存。
- DMA与CPU交替访问:当CPU的工作周期比主存周期长时。用CPU大于存储周期的时间来供DMA使用。
DMA的数据传送过程分为预处理、数据传送和后处理3个阶段。
预处理:给DMA控制逻辑指明数据传送方向是输入还是输出;向DMA设备地址寄存器送入设备号,并启动设备;向DMA设备地址寄存器送入交换数据的起始地址;对字计数器赋予交换数据的个数。
数据传送:DMA方式是以数据块为单位传送的。
后处理:当DMA中断请求得到响应后,CPU停止原程序的执行,转去执行中断服务程序,做一些DMA的结束工作。如校验跟主存交换的数据是否正确,决定是否继续用DMA传送其它数据块,若继续传送则又要对DMA接口进行初始化,若不需要传送则停止外设;测试在传送过程中是否发生错误,若出错,则转错误诊断及处理错误程序。
(8) I/O中断和DMA
- 程序中断方式中断现行程序,故需要保护和恢复现场;DMA方式不中断现行程序,无须保护线场。
- 程序中断靠程序传送,DMA方式靠硬件传送。
- 程序中断是在一条指令执行结束时响应;DMA方式可在指令周期内的任一存取周期结束时响应。
- DMA的优先级比程序中断高。
3 PART III
计算机的二进制世界
(1) 机器数
把符号数字化的数称为机器数。机器数包含源码,反码,补码及移码等表示方法。各有其定义或来源原理。
(2) 定点数和浮点数
小数点固定在某一位置的数为定点数。当小数点位于数和第一数值位之间时,机器内的数为纯小数;当小数点位于数值位之后时,机器内的数为纯整数。采用定点数的机器称为定点机。
在定点机中,表示小数时需要乘上一个比例因子,否则会产生溢出。
定点机中数的表示对应机器数。
浮点数即小数点的位置可以浮动的数。采用浮点数数据格式的机器称为浮点机。浮点数的规格化,基数不同的浮点数规格化过程不同。当基数为2时,尾数最高位为1的数称为规格数。
浮点数的IEEE 754标准:
数符位表示数的正负。阶码用移码表示,阶码的真值都被加上(具体见《CSAPP》“IEEE浮点表示”章节,其讲解更为详细)一个常数(偏移量)。如短实数和长实数对应的偏移量值分别为7FH [2^(8 - 1) - 1],3FFH [ 2^(11 - 1) - 1 ]。尾数通常用规格化数表示,所以常将尾数的最高位省略,以提高数的表示精度。浮点数是一个相当复杂的话题,不同平台的浮点数表示和浮点运算也有较大差异。
(3) 有符号定点数的算术移位运算
计算机中机器的字长往往是固定不变的,当机器数左移n位或右移n位时,必然会使其n位低位或n位高位出现空位。那么,对空出的位补0还是补1与 机器数及其有符号和无符号数有关。有符号数的移位称为算术移位,无符号数的移位称为逻辑移位,无符号数的逻辑移位运算都是补0。
[2014.09.26– 18:21]
指令系统
(1) 机器指令格式
Figure19. 指令格式
一台机器的指令系统各条指令间的位数可以不同。地址码中表主存的个数决定访主存的次数。无地址码例如空操作(NOP)、停机(HLT)这类指令只有操作码。程序返回(RET)、中断返回(IRET)这类指令没有地址码,其操作数的地址隐含在堆栈指针SP中。由以上操作数和地址码构成指令系统,指令系统反应机器的主要功能及硬件结构。
(2) 数据在存储器中的存放方式
[My words]
现用4块Figure 7中的存储器m。简单组成存储字长为32位(一行有32位)的存储器M,使此存储器的地址线为4根,编号为A0A1…A3。数据线32根,重新编号为D0D1…D31。为Figure 7中的存储块加一个片选信号。当给地址线一个值并给对应的片选信号时,就访问M的一个存储字长(A0A1…A3某整行)、16位(A0A1…A3行连续的两个m被选中)、8位(A0A1…A3的某个m被选中)二进制串,再通过数据线输出就得到对应内存中的值。
在C语言程序中,假设有一个int类型(32bit)变量i,若它刚好被分配到M的某一行之上,则只需要往地址线A0A1…A3输一次i的地址就可以访问到i。若i的各字节被分配到相邻的两行之上(如两低字节在第一行,两高字节在第二行),则需要往地址线上先输入第一行的地址访问到i在第一行的内容,再往地址线上输入第二行地址访问到i在第二行的内容,再将两次访问的内容处理后才能得到i的内容。这就使得访问i需要访问M两次。
观察存储器M的结构(第一行地址为0),只要将变量的地址分配到此变量所占内存大小(以字节为单位)的整数倍上,那么此变量的所有字节都会处于内存M的同一行,只需要往地址线上输入一次地址即只访问一次主存就可以得到此变量。这样的地址被称为此变量的边界。在C中使用结构体时,结构体内的元素(变量)的地址会被自动分配到其边界之上,这样的现象称为边界对齐(内存对齐)。
字节的次序有两种:低字节为低地址;高字节为低地址。
[book’s photo]
CPU的结构及功能
(1) CPU功能及组成
对于冯·洛伊曼的计算机而言,一旦程序进入存储器后,就可由计算机自动完成取指令和执行指令的任务,控制器就是专用于完成此项工作的,它负责协调并控制计算机各部件执行程序的指令序列,其基本功能是取指令、分析指令和执行指令。
(2) 指令周期
CPU每取出并执行一条指令所需的全部时间称为指令周期。取指和完成指令分析的时间称为取指周期,执行指令的时间称为执行周期。此外,当遇到间接寻址的指令时,由于指令字中只给出操作数有效地址的地址,因此为了取出操作数,需访问一次存储器,取出有效地址,然后再访问存储器,取出操作数。这样间接寻址的指令周期就包括取指周期、间址周期和执行周期三个阶段。当CPU采用中断方式实现主机与I/O设备交换信息时,CPU在每条指令执行阶段结束前,都要发中断查询信号,以检查是否有某个I/O设备提出中断请求。这样,一个完整的指令周期应包括取指、间址、执行和中断四个子周期。
[2014.09.27– 20:43]
(3) 中断系统
4 PART IV
CU
(1) 微操作命令
微操作命令即控制信号。不同的指令对应不同的微操作命令序列(闲时可去熟悉它们)。
(2) CU结构,功能和控制方式
为了使控制单元按一定的先后顺序、一定的节奏发出各个控制信号,控制单元必须受时钟控制,每一个时钟脉冲使CU发出一个微操作命令,或发出一组需要同时执行的操作命令。
现行指令的操作码决定了不同指令在执行周期所需完成的不同操作,故指令的操作码字段是CU的输入信号,它与时钟配合可产生不同的控制信号。
控制单元有时需依赖CPU当前所处的状态(如ALU操作的结果)产生控制信号,如BAN指令,CU需要根据上述指令的结果是否为负而产生不同的控制信号。所以标志也是CU的输入信号。
来自系统总线(控制总线)的控制信号,如中断请求,DMA等。
CPU内的控制信号主要用于CPU内的寄存器之间的传送和控制ALU实现不同的操作。送至系统总线(控制总线)的信号用于命令主存或I/O读/写、中断响应等。二者都属于输出信号。
CU控制一条指令执行的过程实质上是一次执行一个确定的微操作序列的过程。将如何形成控制不同微操作序列所采用的时序控制方式称为CU的控制方式。其控制方式有同步控制、异步控制、联合控制和人工控制四种。
(3) 机器周期
机器周期是执行机器指令中某一个步骤(取指,间址,执行,中断)所需的时间。
(4) 时钟周期
在一个机器周期里可完成若干个微操作(如在读存储器过程中,发出地址命令算一个微操作),每个微操作都需要一定的时间,这个时间就是时钟周期。
(5) 指令周期 机器周期 时钟周期关系
一个指令周期包含若干个机器周期,一个机器周期又包含若干个时钟周期(节拍),每个指令周期内的机器周期数可以不等,每个机器走起内的节拍数也可以不等。
Figure24. 指令周期,机器周期,节拍和时钟周期关系
这几者可以对应到Figure1中“多级层次结构的计算机系统”中理解,每一级对应一个周期。
机器的运行速度不仅与主频有关,还与机器周期中所含的时钟周期数以及指令周期中所含的机器周期数有关。同样主频的机器,由于机器周期所含的时钟周期不同,运行速度也不同。
[2014.09.28– 14:50]