计算机组成指北(一)
写在开头
本笔记初次完成于2024年6月21日。由于原文篇幅过长,导致网页渲染极为卡顿,出现了严重的性能问题。因此,原文被分为多个章节进行重新整理,内容保持不变。本文旨在帮助应对期末考试,如果您的目标是考研或深造,请另寻他处。如果是为了计算机组成原理考试,请务必核对教材信息的一致性,以免知识点出现冲突。
本文能为你做什么?
有了本文,你可以豪爽的翘掉一个学期的计组。没错,这不是在吹牛,因为现在大部分的学校计组老师只会念PPT,你去了也听不进去的。而且,老师授课时往往把所有的知识一视同仁的灌输给你,缺少层次性。这就给记忆带来了极大的难度,仿佛抱着一个篮球那么大的苹果不知道何从下口,囫囵吞枣的效果极差。而真正的精华——划重点的复习PPT往往要拖到复习周才给你(因为老师知道如果提前发了大家就都不会听课了)。
所以本文能为你做的,就是在尽量丰富一些重难点的讲解同时,剔除精简掉一些庞杂或者不予考察的知识,并指出本章节的考点所在。力求重点突出,事半功倍。
如何食用?
本文是笔者在复习周时参照教材、复习PPT和网课整理而成,主要归纳了计算机组成原理的核心内容,并针对一些疑难点融入了笔者自己的思考和资料。所以推荐读者一边参照教材/PPT一边阅读本文,以阅读本文为主,教参为辅,并多做例题验证思路。如此,计组80+是完全没有问题的。倘若追求90+甚至更高,那么最好自己把教材啃一遍,这篇文章仅做参考就好。
助阅读愉快!
:)
计算机组成原理速成版
计算机组成原理速成版,五天整理出来的一篇小笔记,对标期末重点做出来的博客。教你从一名普通的大学牲逐渐成长为冯·诺依曼:)
本文基于教材《计算机组成原理》·唐朔飞、学校教学PPT,部分参考了计算机组成原理(哈工大刘宏伟)135讲(全)高清整理而成。预计共有四大部分:
- 第一部分:对应教材的1~2章,主要介绍一些计算机的基础知识,重在概念考察,难度较为简单。
- 第二部分:对应教材的3~5章,介绍了系统总线、储存器和I/O系统。存储器部分涉及到设计,需要重点掌握。
- 第三部分:对应教材的6~7章,介绍了计算机的运算方法和指令系统,重点是ALU的原理与设计,非常重要。
- 第四部分:对应教材的8~10章,涵盖了CU和CPU所有功能设计,题目比较关键,也最为复杂。
当然,为了便于排版和查找,本文还是按照传统的章节来逐章介绍,列出部分是为了帮助读者快速归纳定位到自己想要学习的知识,对整本书的知识体系有一个大概的概念。
Now, let’s begin.
第一、二章 概论
基础知识的理解,常见于选择判断题。
如:第一台计算机的名字和时间,计算机的层次结构、储存体基本名词。着重记忆。
要记住冯诺依曼计算机的基本特点
基础知识
ENIAC,全称为Electronic Numerical Integrator And Computer,即电子数字积分计算机,于1946年诞生于美国,是世界上第一台计算机。(有争议,百度上指出ABC计算机才是第一台,但是以教材为准)
目前的计算机的层次结构,可以划分为五种:
- 虚拟机器M4,用编译程序将高级语言翻译成汇编语言程序
- 虚拟机器M3,用汇编程序将汇编语言翻译成机器语言程序
- 虚拟机器M2,用机器语言解释操作系统
- 虚拟机器M1:用微指令解释机器指令
- 虚拟机器M0:由硬件直接执行微指令
其中M4~M2由软件实现,M1~M0由硬件实现。计组只要讨论的是M1~M0。
冯·诺依曼体系计算机的特点:
- 计算机由五大部件组成:运算器、存储器、控制器、输入设备和输出设备
- 指令和数据以同等地位存于存储器,可按地址寻访
- 指令和数据用二进制表示
- 指令由操作码和地址码组成
- 存储程序,指令在储存器内按顺序存放
- 机器以运算器为中心
硬件结构框图如下:
存储器的基本组成
存储器包含:
- MAR(存储器地址寄存器)
- MDR(存储器数据寄存器)
- 存储体(存储数据的内存)
存储体又包含存储单元和存储元件(0/1)。三者的关系依次对应于:大楼、房间、床位(无人/有人)。存储单元内存放一串二进制代码,每个存储单元被赋予一个地址号;存储字是存储单元内存放的二进制代码的组合,即存放不同的存储字;存储字长即存储字的位数,即一个字内有几个存储元件。
MAR是存储器地址寄存器,反映存储单元的个数。MDR是存储器数据寄存器,反映存储字长。若MAR=4,MDR=8,则有24=16个存储单元,存储字长为8。
除了存储字长,还有一个机器字长需要区分:机器字长是CPU一次能处理数据的位数,与CPU中寄存器的位数有关。一般机器字长等于ALU(算术逻辑单元)和寄存器之间的数据传输宽度和寄存器的位数。
机器字长 | 存储字长 |
---|---|
机器字长通常指的是CPU一次性能处理的数据的位数。它是计算机体系结构的一个基本参数,决定了CPU内部运算和处理数据的能力。 | 存储字长是指存储系统中一次性能读写的数据的位数。它与存储设备的设计有关,如RAM的组织方式。 |
机器字长影响着CPU的寄存器大小、指令集的设计以及数据的宽度。例如,一个32位的CPU意味着其寄存器和大多数指令都是32位宽。 | 存储字长可以与机器字长相同,也可以不同。例如,一个32位的CPU可能使用16位的存储字长,这意味着每次读写操作涉及两个存储单元。 |
机器字长直接关系到计算机的寻址能力和数据处理能力。一个较长的机器字长通常意味着更高的性能和更复杂的计算能力。 | 存储字长影响数据的存储效率和访问速度。较长的存储字长可以减少读写操作的次数,提高数据访问速度。 |
两者的主要区别在于它们的应用领域和影响范围:
- 机器字长主要影响CPU的运算能力和指令集的设计。
- 存储字长主要影响数据的存储方式和访问效率。
在实际应用中,机器字长和存储字长可能会相互影响。例如,如果存储字长小于机器字长,CPU在一次读写操作中无法获取或存储完整的机器字数据。这意味着CPU需要进行多次存储访问才能完成一次完整的数据传输,从而降低数据传输效率。反之,如果存储字长大于机器字长,每次存储访问都传输多于CPU实际需要的数据,可能导致资源浪费。例如,一个32位的CPU使用64位的存储字长,每次访问存储器都会传输64位的数据,但实际只处理32位的数据。
掌握这些概念后就可以计算存储容量了,如下图:
第三章 系统总线
总线带宽需要会计算,每秒钟传送字节的个数,总线标准的概念了解,总线结构不要求会设计,但是要知道有什么优缺点。
总线判优,通信方式
我们已经对计算机的结构有了一个初步的了解,接下来我们从总线部分开始入手,先从计算机的各个部件直接如何通信讲起。
概念
什么是总线?
总线是连接各个部件的信息传输线,是各个部件共享的传输介质。CPU通过总线来与其他部件进行通信。
分类
总线分为片内总线、系统总线和通信总线。
片内总线指芯片内部的总线,例如CPU内部各部件进行通信的总线。
系统总线则是计算机各部件之间的信息传输线
- 数据总线,双向,与机器字长、存储字长有关。宽度代表CPU一次能传输数据的大小。
- 地址总线,单向,与存储地址、I/O地址有关。宽度代表CPU能寻址的范围大小。
- 控制总线,有出有入。宽度代表CPU能进行指令调控的能力大小。比如存储器读写指令、终端确认、总线允许等。
通信总线指计算机系统之间或计算机系统与其他系统之间的通信,比如USB数据线,鼠标线等。
性能指标
总线的性能指标有许多,这里只介绍比较重要的几个:
- 总线宽度:数据线的根数
- 总线带宽:每秒传输的最大字节数(MBps)
例题:总线工作频率为33MHz,总线宽度为32位,求总线带宽
总线宽度为32位,对应32/8=4个字节。工作频率为33MHz,即一秒内工作33M次,则每秒传输最大字节数为4Byte*33M=132MBps
细节:注意单位是MBps,即 Million Byte per second,每秒传输字节数(带宽)。
总线标准
总线标准是指在计算机系统中用于数据传输的一组规范和协议,这些规范定义了数据如何在不同的硬件组件之间传输。这些协议对双方都是透明的,只要一方的设备按照标准实现了相应的接口,另一方就可以实现对接口的调用,而无须关系对方设备的具体细节(有点类似Go的接口哈)。
常见的总线标准有:PCI(现代计算机最常用的总线之一)、USB、SATA等。
更详细的内容就不介绍了,内容太多,请读者自行查阅资料扩展。
总线结构
这一节比较重要,虽然不要求设计,但是要掌握各个结构有什么优缺点。
单总线结构
所有组件通过单一的总线连接,数据、地址和控制信号都通过这个总线传输。
- 优点:设计简单,成本较低,适用于小型或简单的系统。
- 缺点:由于所有组件共享同一总线,因此数据传输速率受限,不适合高速或高容量的系统。
双总线结构
将速度较低的设备从总线上剥离下来,形成两个总线I/O设备种类很多,功能差距很大,速度差距也很大,CPU将一部分功能下放给通道,由通道对I/O统一管理。系统中存在两条总线,通常一条是主存总线(连接CPU和内存),另一条是I/O总线(连接外设)。
- 优点:将CPU与内存的高速通信和I/O设备的通信分离,减少了总线争用,提高了整体性能。
- 缺点:需要桥接器或控制器在两个总线之间进行数据传输。
三总线结构
三总线结构有两种形式,第一种:
特点是有一条主存总线用于CPU和主存的传输;I/O总线连接CPU和各种外设交换信息;DMA总线用于高速I/O设备(磁盘、磁带等)与主存交换信息。
- 优点:比单总线结构来说加快了效率
- 缺点:在三总线结构中任一时刻只能使用一条总线,效率瓶颈
第二种结构:
CPU和Cache(高速缓冲存储器)利用局部总线相连,Cache控制器将Cache连接到局部总线和系统总线上。主存通过Cache和CPU间接传递数据
主存与I/O设备传输不需要经过CPU,扩展总线将各个接口部件连接起来,每个接口又可以连一堆设备,扩展总线利用扩展总线接口与系统总线相连。
- 优点:工作效率明显提高
- 缺点:设计更加复杂
四总线结构
增加一条高速总线。各个外设速度也并不相同,高速总线桥不用经过系统总线,使得这些高速设备与CPU关系更密切。
- 优点:对高速设备而言,自身的工作可以更少依赖CPU,同时又比拓展总线上的低速设备更加靠近CPU,对于高性能设备和CPU来说,各自的效率将获得更大的提高。
- 缺点:实现更加复杂
以下是关于单总线、双总线、三总线和四总线结构的总结表格:
总线结构 | 描述 | 优点 | 缺点 |
---|---|---|---|
单总线结构 | - 设计简单 - 成本较低 - 适用于小型或简单的系统 |
- 数据传输速率受限 - 不适合高速或高容量的系统 |
|
双总线结构 | - 将CPU与内存的高速通信和I/O设备的通信分离 - 减少总线争用,提高整体性能 |
- 需要桥接器或控制器在两个总线之间进行数据传输 | |
三总线结构(第一种) | - 比单总线结构加快效率 | - 在任一时刻只能使用一条总线,效率瓶颈 | |
三总线结构(第二种) | - 工作效率明显提高 | - 设计更加复杂 | |
四总线结构 | - 高速设备与CPU关系更密切,效率更高 - 高性能设备和CPU的效率获得更大的提高 |
- 实现更加复杂 |
总线控制
设备分有主设备和从设备两种模块。主设备对总线有控制权,从设备响应从主设备发来的总线命令。要实现总线控制设备,就需要解决多个主设备发出请求时的总线仲裁权分配问题。总线仲裁的原则是:优先权、公平性。优先权高的设备优先使用设备,优先权同级别的设备则按照时间先后来公平分配。
总线的判优控制分为两种,集中式和分布式。前者将逻辑控制集中在一处(比如CPU中),后者把逻辑控制分散在与总线相连的各个部件或设备上。
集中式包括:
- 链式查询
- 计数器定时查询
- 独立请求方式
分布式的特点是:
- 自我选择:大家都把标志号放在总线上
- 碰撞检测:随便穿传,撞上了就重来,比如以太网
链式查询方式
链式查询的结构图如下:
BR或实现,只要多于一个请求,BR就为1,但总线不在意哪个设备的请求。BG串行实现。BS总线忙,表示接口占用了总线。
BG的总线同意请求从第一个I/O接口开始依次往下传,如果有一个I/O接口请求使用总线,那么BG信号就停止往下传输,并且建立BS总线忙信号,表示它占用了总线。在链式查询中,离总线控制部门最近的设备拥有最高的优先级。
- 优点:简单。只要很少的几根线就能实现总线控制,且很容易实现设备扩充,对电路故障敏感。
- 缺点:优先级低的设备很难获得总线使用权。
计数器定时查询方式
结构图如下:
多了个设备地址线,少了总线同意线BG,当某个请求的接口的设备地址与计数器一致时,获得使用权。
在接收到BR总线请求时,总线控制设备中的计数器开始计数,并通过设备地址线,向各设备发出一组地址信号。当某个请求占用总线的设备地址与计数值一致时,获得总线使用权,终止计数查询。特点是:计数终止后,可以选择归零重新计数,这样就按照设备的优先级来分配使用权;也可以选择从上一次断点继续开始计数,此时所有设备的优先级相同。计数器的初始值还可以由程序设置,故优先次序也可以改变,
- 优点:可以改变优先次序,比链式查询更加灵活。
- 缺点:实现更加复杂,对电路故障的敏感度不如链式查询。
独立请求方式
结构如下:
独立请求即每个设备都有配套的BR请求线和BG同意线,总线控制部门内置一个排队电路,可以根据优先次序确定响应哪一台设备的请求。
- 优点:响应速度快,优先次序控制更加灵活(可以用软件实现)
- 缺点:总线控制更加复杂,控制线数量多。链式查询中仅用两根线确定总线使用权属于哪个设备,计数器查询中使用log2n根线,而独立请求中要2n根线,其中n是允许接纳的最大设备数。
通信控制
我们定义一个总线传输周期为完成一次总线操作的时间,一共有四个阶段:
- 申请分配阶段:主模块申请,总线仲裁决定
- 寻址阶段:主模块向从模块给出地址和命令
- 传数阶段:主模块和从模块交换数据
- 结束阶段:主模块撤销有关信息,让出总线使用权
解决了总线判优的逻辑后,接下来涉及到的就是具体的总线控制。通信控制主要解决双方如何获知传输开始和传输结束,以及双方如何协调配合。通常有四种方式:
- 同步通信:由统一时标控制数据传送
- 异步通信:采用应答方式,没有公共时钟标准
- 半同步通信:同步和异步相结合
- 分离式通信:充分挖掘系统总线每个瞬间的动力
同步通信
- 优点:实现简单
- 缺点:
- 总线上所有设备必须按相同的时钟频率工作,导致设备必然使用速度最慢的部件来设计公共时钟,严重降低了总线的工作效率
- 为防止时钟信号扭曲,高速工作时,总线距离必须足够短
例题:假设总线时钟频率为100MHz,总线传输周期为4个时钟周期,总线宽度位32位,求总线数据传输率。
异步通信
采用应答方式。在主、从模块间增加两条应答线,主模块发送请求信号时,等到从模块返回响应信号后完成握手,再开始通信。
异步通信的应答方式又分为:不互锁、半互锁和全互锁三种:
- 不互锁:请求过一段时间后,确认从模块已经收到请求信号,撤销请求信号,CPU先后将地址、写命令、数据全给出。向CPU主存写信息即这种方式
- 半互锁:请求信号必须等到收到回答信号才能撤销,多CPU访问共享存储器,必须未被占用,才能执行后续操作。在多机系统中CPU访问某个共享存储器。
- 全互锁:回答信号必须等到请求信号撤销后才能撤销。比如网络通信。
例题:假设每秒传输120个数据帧,字符格式规定1个起始位,8个数据位,1个校验位,1个终止位
波特率:单位时间信号(或波形)改变状态的次数,单位为Baud(波特)
比特率:单位时间传递2进制数据的位数,单位为bps(位/秒)
一帧包含11位,其中有效数据位为8位
半同步通信
半同步通信是同步和异步相结合。
同步方面:发送方用系统时钟前沿发送信号,接收方用系统时钟后延判断与识别。
异步方面:允许不同速度模块的和谐工作,增加了一条“等待”响应信号。
小结一下
以上三种通信方式都有几个共同点,在一个总线传输周期内:
- 主模块发送地址和命令,占用总线
- 从模块准备数据,总线空闲
- 从模块向主模块发送数据,占用总线
说明还有空闲,没有充分挖掘出总线每个时间的潜力。
分离式通信
分离式通信能实现总线利用的效率最大化,它把一个时钟周期拆成两部分。
- 子周期1:主模块将地址、命令、主模块号放到系统总线上,一旦发送完,立即放弃总线使用权
- 子周期2:经选择、译码、读取一系列内部操作后,将A模块编号,B模块地址,所需数据放到总线上
两个传输周期都是单方向的,每个模块都变成了主模块
特点是:
- 各模块有权申请占用总线
- 采用同步方式通信,不等对方回答
- 各模块准备数据时,不占用总线
- 总线被占用时,无空闲
……
……
第一部分暂时结束,敬请阅读第二部分^^