






















本系列的最后一篇文章了,就浅浅回顾一下我学到的东西吧。
这学期已经结束了,虽然不想承认,但还是得说,感谢计原不是闭卷考试。怎么说呢,这学期的计原课其实挺新鲜的,从微机基础到中断系统这些章节都有在认真学,但直到后来开始疯狂讲述各种具体芯片的管脚功能时就跟不上了。自己的原因肯定是有的,毕竟本人从没想过要记忆这么多细致的玩意儿,这些难道不是用的时候查找手册就行了嘛😥。不过无论怎样,距离本系列的上一篇文章已经过去了快两个月了,也到了总结的时候了。本文不会按照上课的方式去梳理,也不是很全面,毕竟有些东西确实没会啊😥,就先说这么多吧,剧组开机!
Statement
The author USTC-elbitsiserri has no full ownership to the content of this article.
This article is a reorganized and recreated work based on the original resources shared by Roselia
It is hereby declared and disclaimed
计算机系统简史
ENIAC(埃尼阿克),它是基于电子管搭建,标志着电子管时代的到来(1946-1957)IBM7090,标志着晶体管时代的到来(1958-1964)Von-Neumann architecture
运算器、存储器、控制器和I/O设备
指令和数据以同等地位存储在存储器中,并可以按置寻访二进制表示操作码和地址码组成按顺序存放运算器为核心,这与现代计算机以存储器为核心不同中央处理器CPU五大部件功能
存储体、地址寄存器MAR、数据寄存器MDR,MAR和MDR通常存储与CPU重,MAR的位数反映寻址空间的大小,MDR的位数反映机器字长CPU访问存储器的基本单位,存储单元具有存储和读写数据的功能,以8位二进制为一个存储单元,即一个字节。每个存储单元都有一个对应地址二进制代码组合最大二进制位数,可以是8位、16位、32位等,位数一般等于MDR大小算术逻辑单元ALU、累加寄存器(ACC)、乘商寄存器(MQ)、通用寄存器(X)、基址变址寄存器(BX,SI,DI)、状态寄存器等AX,BX,CX,DX,BP,SP,SI,DIAX为累加器、CX为计数器、BX,BP为基址寄存器、SI,DI为变址寄存器、BP为基指针、SP为堆栈指针存放存储单元在段内的偏移量。作为通用寄存器,也用于存储算术逻辑运算的操作数与运算结果存放堆栈内存储单元的偏移量。作为通用寄存器,也用于存储算术逻辑运算的操作数与运算结果存放下次将执行的指令在代码段内的偏移量条件码寄存器,用来存放两类信息:一类是当前指令执行结果的各种状态信息,比如进位、溢出、奇偶等;一类是控制信息,比如中断允许、单步跟踪等控制单元CU、程序计数器PC、指令寄存器IR存放下一条指令的地址,取指令后自动加一 
计算机寻址方式
存放在内存中,指令中直接给出操作数的有效地址(EA,即偏移地址)。在不使用段跨越前缀的情况下,操作数默认存放在数据段DS中在不使用段跨越前缀的情况下,如果有效地址存放在SI、DI、BX中,则以DS段寄存器为段地址;若存放在BP中,则以SS段寄存器为段地址计算机性能指标
存储器性能指标
一般用存储器总容量衡量存储器性能
总容量=存储单元数×存储单元大小。存储单元数可由MAR的位数反映出存储单元最多的个数;存储单元大小等于存储字长,可有MDR的位数反映大小。例如16位的MAR和32位的MDR,则存储器总容量为$2^{16}\times 32bit=2^{21}bit=2^8KB=256KB$
CPU性能指标
时钟周期是CPU最小的时间单位,每个动作至少需要一个时钟周期。主频是时钟周期的倒数。主频越高,指令执行速度越快,单位一般为GHZ平均时钟周期数由上面两个指标可以计算得到CPU执行含有N条指令的程序所需要的时间t=N×(CPI×T)
此外,还有IPS(每秒执行的指令数)、FLOPS(每秒执行的浮点运算数)等指标
系统整体性能指标
CPU能一次处理的二进制位数,一般等于内部寄存器的位数大小数据通路带宽是指数据总线一次能够传输的数据位数,它可能不等于CPU的机器字长 吞吐量是指单位时间内处理请求的数量,它主要取决于主存的存取周期进制转换
码制——BDC码(Binary-Code-Decimal)
8421码、2421码、5421码、余三码、循环码等。前三种码制是有权码,后两者是无权码原码、反码、补码各种码
真值就是一个属的实际值机器码就是将数的大小和符号一起表示为二进制后的编码原码就是用一位(首位)来代表符号位,其余位表示数值绝对值大小,正数符号位为0,负数符号位为1反码和原码相同,负数的反码是将除符号位外的数值位按位取反补码与原码相同,负数的补码是在反码的基础上加1,也即保持符号位不同,依次取反原码数值位加一移码是在补码的基础上将符号位取反,它只能表示整数ASCII码是用八位二进制数来表示字符的一种编码,0-9的ASCII码为48-57;A-Z的ASCII码为65-90;a-z的ASCII码为97-122存储器分类
三级层次化结构分类
从上到下,分别是寄存器、高速缓存、主存、辅存、外村。其中能够和CPU直接交换信息的有高速缓存和主存。存储系统的两个主要层次为:Cache-主存层次:主要解决CPU和主存速度不匹配的问题主存-辅存层次:实现虚拟内存,主要解决主存容量不够的问题
易失性存储器volatile memeory和非易失性存储器non-volatile memory;根据读出后信息是否被破坏,分为破坏性读出和非破坏性读出两种存储器的基本组成和原理
存储器包括存储体、MAR、MDR。存储体就是一个矩阵结构,所以也被称为存储矩阵
一行就是一个存储单元,是存储器读写的基本单位
根据存储器的规格,可以计算出地址线和数据线的条数,例如对于16K×8位规格的存储器,可以知道地址线有14条,数据线有8条
存储器的行列地址
在上面的模型中,译码器输出端的输出线是2的指数倍,需要连接的选通线太多,不容易实现。所以,将存储器的存储单元在二维空间上排列,分为行地址和列地址,当行和列两根线都对这个存储单元选同时,才能对存储单元进行读和写。这样的做法可以显著减少译码器输出线的用量。例如有N条地址线的存储矩阵,对于一维排列,所需的译码器输出线为$2^N$条;对于二维排列,行数和列数都是$2^{\frac{N}{2}}$,总的输出线就为$2^{\frac{N}{2}+1}$条
SRAM & DRAM

存储芯片的扩展
主存一般包含多块存储芯片,且可由多个内存条组成,CPU通过地址总线找到主存中的存储单元,通过数据总线与主存进行数据传输,通过读写等信号控制主存行为。但是存储芯片可能和CPU出现不匹配的问题,这就包括寻址能力和寻址字长不匹配,这时就要对存储芯片进行位扩展和字扩展,下图就生动形象地反映了这一问题

将多个存储芯片的地址端、片选端和I/O控制端并联,将数据端单独引出。8个8K×1bit的存储芯片进行位扩展后可以视为一个8K×8bit的芯片
地址线、数据线和读写控制线并联,通过片选信号来区分不同芯片的地址范围
Cache的原理
Cache利用局部性原理,把程序中正在使用的部分存放在高速缓存中,CPU每次访问数据时先去缓存中找
局部性原理具体分为:
CPU在缓存中寻找数据,存在找到和找不到两种情况,分别称为命中和没命中。利用Cache高速缓存可以显著提高存储器性能

对于题中的思考题,是这么做的:
$$\begin{aligned}
T_{a}=0.95\times t+0.05\times 6t=1.25t\\
5t/1.25t=4
\end{aligned}$$
存储器性能提高到原来的4倍,即提高了3倍
Cache行 & 主存块
Cache会存储与当前使用的数据所在存储单元临近的数据,判断临近,采用的方式是将主存分块(分页),每次将数据所在的块送入到Cache中,Cache中存储的块称为行
Cahce行和主存之间的映射关系
全相联映射
在全相联映射方式下,主存中的每个块都可以对应Cache中的任意行。只要有空位就可以放,没有空位了就替换。而Cache的行要与主存的块建立映射关系,需要存储相应的主存块号。
主存块号计算方法
假设Cache行的大小为512B,主存中存储单元的数目为1MB,按字节编址,那么主存的地址总共有$2^{20}$个。主存块和Cache行大小相等,均为512B,因此主存可以划分为$2^{11}$个块。主存的20位地址可以拆分为如下形式:
Cache除了存储主存储块号外,还需要存储一个有效位来表示该存储单元是否有效
全相联映射访问数据步骤:假设20位地址,如上
直接映射
直接映射通过模取的方式建立主存块和Cache行之间的映射关系,一个块只能放到Cache的某个行。
存取方法
这里取模的除数就是Cache的行数,比如,如果Cache有8行,0%8=0,放到第一行,以此类推。由此可以发现,Cache的行与主存块是一对多的关系,要区分映射在同一个Cache行的不同主存块,依然需要存储标记,但这时的标记不必存储整个主存块号,这是因为存放在同一Cache行的主存块的主存块号二进制码的最后三位都是相等的,这三位就代表了Cache的行号 一般的,使用直接映射,主存地址划分如下:

直接映射访问数据的步骤
组相联映射
全相联映射比较灵活,Cache的空间利用率高,但查找标记比较慢;直接映射可以直接找到Cache行,查找标记快,但空间利用率低。组相联映射介于二者之间:给Cache行分组,组间直接映射,组内全相联映射
特殊地,当组相联映射分组为1,就变成了全相联映射;当分组为Cache行数,就变成了直接映射
存取方法
假设Cache共有8行,每组两行,分为四组,那么20位的地址就划分为:

组相联映射访问数据的步骤
Cache的替换算法
当Cache行存储满了,就涉及到替换问题
Cache的替换算法是针对全相联映射或组相联映射的,直接映射替换对应的内存单元即可。常用的替换算法有:
LRU位,它的位数和组的大小有关。计数器的变化规则如下:比其低的计数器值+1,其余不变新装入行的计数器置0,其他行计数器+1淘汰计数值为3的那一行的主存块,装入新块后置0,其余行的计数器+1 指令系统又称为指令集ISA,表示一台计算机所能执行的全部机器指令的集合,由该计算机的CPU决定。ISA是硬件设计的依据
指令格式的设计与原则
冯·诺伊曼结构的计算机采用存储程序的思想,给出一个包含n个指令的程序,计算机能够自动执行这些命令。为了自动执行,一条指令必须明确或隐含包含的信息有:操作码OP、源操作数或地址、结果的地址、下一条指令的地址

据此,我们可以给指令分类,一下假设操作数都有两个

减少指令中地址个数的目的是增加寻址范围,假设指令共32位:
所以,指令系统的设计原则是:
字节是内存的最小编址单位寻址方式再回顾

CISC & RISC
CISC即复杂指令系统计算机,它通过不断向指令系统中增加更多更复杂的指令,以适应不同应用领域的需求。其特点是:
精简指令系统计算机,它的中心思想是要求指令系统精简化以提升程序性能,其特点如下:Load/Store(取数/存储)指令,其余指令都是在寄存器之间进行,所以很高效 CPU由运算器、控制器和寄存器组成。运算器进行算术逻辑运算,控制器进行取指令、分析指令和执行指令

CPU的时序系统
早期计算机采用三级时序系统

一条指令包括一个或多个机器周期,而一个机器周期需要执行多个微操作,一个微操作需要一个时钟周期(节拍)的时间,时钟周期(节拍)是操作执行的最小时间单位。节拍可以由脉冲组合得到
现代计算机没有机器周期的概念,只存在时钟周期的概念
CPU数据通路分类
add R3,R1,R2这样的算数运算指令,由于单总线只能同时传输一个数据,所以需要分两次获取操作数,把先获取到的操作数放在暂存器Y中;结果也要先存放在暂存器Z中,再送入目标寄存器。所以需要执行3个微操作,即3个时钟周期 取指电路
设计分析:

总线的概念与组成
和CPU内部的总线(片内总线)不同,这里研究的总线是连接计算机内各部件,如CPU、主存和各种输入输出设备的总线,称为系统总线。系统总线是一组能为多个部件分时共享的公共信息传输通路

共享是指多个设备共同使用同一个总线;分时是指某一时刻只允许一个设备向总线发送信息,但可以有多个接收方
总线存在于电脑的主板上。主板上刻印的线就是总线。此外提供了很多IO设备的接口
系统总线包括地址总线、数据总线和控制总线,我们需要关注它们的传输方向:
总体是双向的。一根控制总线包含很多根线,每根线上传输不同的控制信号。就控制总线的某一根而言是单向的总线的结构
总线分为单总线结构、双总线结构、三总线结构、四总线结构
各设备频率相差很大,所以有的时候效率很低
直接内存访问总线,它可以在内存和高速外设之间传送数据;而IO总线则用于CPU和低速的外设之间传送数据 
靠近CPU的是北桥芯片,远离CPU的是南桥芯片。它们共同组成桥接器,连接计算机的各部分 
总线的性能指标
机器/CPU的时钟频率单位时间内总线上可传输数据的位数,公式为:总线带宽=总线工作频率×总线宽度突发传送和非突发传送两种。非突发传输每次进行数据传输都是先传地址,再获得数据;突发传输则是先给出一个地址,接下来可以从连续的地传输成块的数据,相当于地址自动++
IO系统组成 & 常见外设
IO系统包括IO软件和IO硬件。软件包括驱动程序、用户程序、管理程序等;硬件包括外部设备、设备控制器和接口、IO总线等
常见的输入输出设备有:
磁盘存储器 & 性能指标
磁表面存储器利用N极和S极的朝向来存储0或1.写入采用电生磁的原理,读取采用磁生电的原理。在自然状态下,由于磁性可以长期维持,所以磁盘是非易失性存储器。

磁盘可以分为存储区域和控制区域
记录面,每个记录面划分为若干磁道,每条磁道又可以划分为若干扇区。扇区(块)是磁盘读写的最小单位
磁盘有如下性能指标:
道密度和位密度沿半径方向单位长度的磁道数目;位密度就是一个磁道上单位长度可以存储的比特是内道和外道的容量是一样大的,因此内圈的 位密度更大 
I/O接口结构与功能
I/O接口是主机与外设之间进行信息交换的媒介,基本结构如下

I/O接口在主机侧通过I/O总线与内存、CPU相连:
I/O接口的主要功能有:
I/O接口类型
按照主机访问I/O接口的方式,分为程序查询I/O方式、中断I/O方式、DMA方式。相应地,I/O接口可以分为程序查询接口、中断接口、DMA接口
程序查询方式

中断I/O方式
程序查询方式的缺点是外设会独占CPU,使CPU的速度降到外设的水平,不能充分发挥CPU的性能。
中断的概念是,当计算机执行当前程序时出现了一些特殊请求或异常情况,CPU暂时终止现行程序,保存断点后转去对特殊请求或异常进行处理,处理完后恢复现场,继续执行原程序。它的好处是:
CPU与I/O设备的并行工作,相当于外设有事了就戳CPU一下多道程序的切换需要借助于中断系统
上图中,CPU在现行程序和中断服务程序之间切换,实现了CPU和外设的并行工作。但是中断I/O方式依然存在问题:①有多个外设同时发出中断请求的优先级判别②现行程序不想被中断如何处理
开中断;IF为0表示为关中断,即当前程序不能被可屏蔽中断中断,但是不能屏蔽关机等硬件强制中断,即非屏蔽中断故障中断优先级最高;高速设备优先于低速设备;非屏蔽中断优于可屏蔽中断等。中断的优先级用中断屏蔽字来表示,屏蔽字为0表示可以被该中断源中断,为1表示不能被该中断源中断
DMA方式
使用中断后,打印机等设备可以与CPU并行工作,但硬盘每次的读写仍需要CPU控制,依然会占用大量CPU时间。解决的方式是为硬盘再加一个精简版的CPU:DMA控制器
在DMA控制器的控制下进行数据的传输,无需处理器干涉。当传输完成时以中断方式通知CPU进行处理即可,这样就实现了CPU与DMA并行工作。需要注意的是DMA每次的读写也是以块为单位
数据传输阶段,DMA控制器会占用系统总线与主存进行数据传输。DMA占用系统总线时,CPU就不能访问内存了,所以需要合理地选择DMA的传送方式

此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。