计算机组成原理-笔记

📅 发布时间:2026/7/17 19:18:05
计算机组成原理-笔记 今天开始我们系统学习计算机组成原理的内容主要参考资源还是网课王道计算机考研 计算机组成原理_哔哩哔哩_bilibili如何理解计算机组成原理呢如图所示如果把计算机世界这样划分的话可以清晰地看到计算机的由软件硬件与操作系统组成软件主要涉及的是数据结构那么硬件主要涉及的就是操作系统。比较常见的硬件包括现在我们来学习计算机硬件的基本组成计算机硬件组成主流的有两种组成结构我们首先来学习早期的冯诺依曼结构这张图展示了冯・诺依曼体系计算机五大核心组成结构包含输入设备、存储器、运算器、控制器、输出设备其中实线代表数据线虚线代表控制线与反馈线。工作流程如下首先输入设备把外部的数据和程序计算步骤转换成计算机能够识别的二进制信息送入存储器统一保存控制器从存储器读取程序指令解析后发出控制信号指挥整机有序工作根据指令要求存储器将待处理的数据传输给运算器完成算术、逻辑运算运算产生的中间结果可回存至存储器运算完成后最终数据再传递到输出设备转换为人能够看懂的形式向外输出。整个过程里控制器依靠控制线向输入设备、存储器、运算器、输出设备下发控制命令各个部件也会通过反馈线把自身状态回传给控制器持续协调所有硬件配合完成计算同时遵循冯・诺依曼核心思想数据与程序一同存放在存储器中计算机自动逐条读取指令执行运算。这里还要引出另一个概念在计算机系统中软件和硬件在逻辑上是等效的。一个既定的功能逻辑既可以使用硬件电路直接实现也可以依靠软件编程实现从上层使用者视角看最终对外表现的功能、行为完全一致无法区分底层到底是硬件还是软件在干活。但二者在运行速度、成本、灵活性上存在明显差异硬件实现速度快、功能固定软件实现灵活性高、易于修改但执行速度相对较慢。这一原理是计算机系统软硬件取舍、指令集设计、硬件加速、虚拟机与模拟器技术的理论基础。冯·诺依曼计算机一共有六个特点整机由输入设备、输出设备、存储器、运算器、控制器五大硬件部分组成指令和数据放在同一个内存里地位一样依靠地址找到对应的内容不管是指令还是数据在电脑内部全都用0和1的二进制表示每一条指令分成两部分一部分说明要做什么运算一部分说明去哪里找数据核心思路是把提前写好的程序和数据一起放进内存电脑就能自动一条接着一条执行不用人工反复操作早期的冯诺依曼机器所有数据传输都要经过运算器是以运算器为中心而我们现在的电脑是以存储器内存为中心这点需要区分开。然后就是我们现代计算机的结构早期机型以运算器为中心所有外设和存储器之间的数据交换都必须经过运算器中转而现代计算机转变为以存储器内存为中心依靠 DMA 技术让外设能够直接和内存传输数据不再全程占用 CPU除此之外现代计算机将运算器与控制器整合封装为 CPU采用统一总线连接各个硬件方便设备扩展新增中断机制优化 CPU 与外设的通信方式还在 CPU 和内存之间加入高速缓存 Cache以此弥补 CPU 运算速度和内存访问速度之间巨大的性能差距解决了原始架构 CPU 负担重、拓展性差、速度不匹配的诸多问题。接着我们开始深入学习内部的组件结构我们已经知道了现代计算机的中心是存储数据的存储器其内部结构如图所示。我们可以结合菜鸟驿站的类比完整理解这张图主存储器由存储体、MAR地址寄存器、MDR数据寄存器三部分构成存储体就相当于驿站里摆放包裹的货架每一个存放位置都拥有独一无二的地址MAR存储地址寄存器如同店员接收的取件号用来记录我们想要访问的存储单元编号CPU把地址送入MAR后硬件根据这个地址定位存储体里对应的存储单元MDR存储数据寄存器相当于对外交互的柜台负责临时存放即将从存储体读出、或是准备写入存储体的数据整个存取流程就像顾客把取件号交给店员CPU将地址送入MAR店员依据取件号找到货架上对应的包裹硬件根据MAR地址定位存储体单元再把包裹放到柜台交给顾客数据在存储体与MDR之间传输CPU从MDR拿到数据写入操作则反过来顾客先把包裹放到柜台数据送入MDR提供取件号地址存入MAR店员将包裹放到货架对应位置MAR只保存地址信息MDR只负责暂存数据二者分工配合完成内存的数据读写。这张图展示了主存储器三大组成部分以及相关基础概念存储体是存放数据的主体内部划分出许多存储单元每个存储单元对应唯一地址MAR 用来存放访问目标单元的地址它的位数决定能够寻址多少个存储单元比如 4 位 MAR 就能寻址 2⁴共 16 个存储单元MDR 负责临时存放读写的数据MDR 的位数等于存储字长也就是单个存储单元能存放的二进制位数图中例子里 16 位 MDR 代表一个存储单元可以存放 16bit 的数据接着区分几组易混名词存储元是最基础硬件元件只能保存 1bit 二进制多个存储元组成一个存储单元存储单元里保存的二进制信息叫做存储字存储字所占的位数就是存储字长还要注意字节 Byte 固定为 8bit和存储字长没有必然相等的关系CPU 访问内存时先把地址送入 MAR 定位存储体中的单元读出或写入的数据都会经过 MDR 中转以此完成内存的数据交互。这张图展示早期经典运算器的内部结构核心执行单元是ALU算术逻辑单元专门依靠电路完成加减乘除算术运算以及与或非等逻辑运算X寄存器用来存放其中一个操作数ACC累加器存放另一个操作数运算结束后结果也保存在ACC里MQ乘商寄存器主要服务于乘法、除法运算可以和ACC互相传递数据表格清晰标明了四则运算时各个寄存器承载的数据加法运算中ACC存被加数、X存加数运算和放回ACC减法ACC存被减数、X存减数差值存回ACC乘法里ACC最终存放乘积高位、MQ存放乘数与乘积低位、X存放被乘数除法时ACC存放被除数和余数MQ存放商X存放除数整个运算流程就是先把参与计算的数据送入对应的寄存器交由ALU完成运算最终结果暂存在寄存器中等待传输到存储器。这张图展示控制器由PC程序计数器、IR指令寄存器、CU控制单元三部分构成PC存放着下一条将要读取指令的内存地址并且具备自动自增的能力顺利实现程序顺序执行CPU依靠PC里的地址从主存取出指令送到IR暂时存放当前这条正在处理的指令IR把指令的操作码传递给CUCU负责解析指令并向运算器、存储器、输入输出设备发送各类控制信号完整执行一条指令分为取指令、分析指令、执行指令三个阶段取指阶段依靠PC提供地址取出指令存入IR分析与执行阶段依靠IR传递指令信息、由CU生成控制信号指挥计算机各个部件完成对应的操作。这张图完整展示计算机执行程序的完整流程我们编写的C语言这类高级语言代码需要先经过编译器翻译为二进制机器语言指令之后连同运算所需的数据一同装入主存主存里每一行存储单元长度为16bit也就是存储字长每条指令分为操作码和地址码两部分操作码代表要执行读取、乘法、加法、保存、停机这类动作地址码标记需要访问的主存单元地址程序计数器PC从地址0开始依次取出指令送入IRCU解析指令后指挥硬件一步步运算先取出地址5的数据a放入ACC接着根据第二条指令乘以地址6的b随后第三条指令加上地址7的c第四条指令把最终结果存进地址8对应的y最后执行停机指令整个过程充分体现冯·诺依曼存储程序思想指令与数据共同存放在主存中控制器循环完成取指、分析指令、执行指令依靠运算器完成计算实现高级代码对应的数学运算。如图所示初始PC存放待读取指令的内存地址先将地址送入MAR主存根据MAR的地址把对应指令读出送入MDR随后MDR中的指令传送至IR存放IR将指令里的操作码发送给CUCU识别指令类型同时IR里的地址码再次送入MAR去寻找需要参与运算的数据地址主存读出数据经由MDR传输到运算器的寄存器完成算术或逻辑运算运算结束后可把结果通过MDR写回主存完成当前指令后PC自动更新为下一条指令地址重复这套取指、分析、执行的循环需要注意两处细节一是PC自增跳转发生在取指阶段二是区分两次访问内存第一次取指令、第二次取操作数不要混淆两次MAR寻址的对象。那这里不就带出一个新问题了就是我们取指令和第二次取操作数都是去 MAR 取如何区分呢MAR只是一个单纯存放地址的中转寄存器它本身不会区分这个地址是指令地址还是数据地址区分依靠当前处在什么工作阶段、由控制器CU掌控时序取指阶段PC把指令地址送入MAR我们访问主存读取出来的内容就当成指令送到IR完成取指后PC完成自增进入执行阶段IR拿出地址码送入MAR此时访问主存读出的内容就当作运算用的操作数送往运算器简单来说不是靠MAR本身标记类型而是依靠机器所处的阶段来定义本次内存访问的目的CU把控整个时序流程规定什么时候MAR里放指令地址、什么时候放数据地址两套访问内存动作在时间上错开不会发生混淆。鉴于这部分知识点较多我们稍微做一个总结计算机硬件核心包含主存、运算器、控制器三大模块主存由存储体、MAR地址寄存器、MDR数据寄存器组成MAR存放访问主存的单元地址位数决定可寻址存储单元总数MDR暂存读写的数据位数等于存储字长运算器依靠ALU完成算术与逻辑运算搭配ACC累加器、MQ乘商寄存器、通用操作数寄存器X暂存运算相关数据控制器包含PC程序计数器、IR指令寄存器与CU控制单元PC保存下一条指令地址且具备自增能力IR存放当前正在执行的指令CU解析指令并向整机发送控制信号计算机运行遵循存储程序思想程序与数据一同存放在主存中启动后PC持续送出指令地址至MAR从主存取出指令经MDR送入IR完成取指阶段PC同步自增准备读取下一条指令IR将操作码送入CU完成指令分析随后CU根据指令类型控制硬件把IR地址码送入MAR再次访问主存获取操作数送入运算器运算不同指令执行步骤存在差异整套取指、分析、执行的流程不断循环驱动计算机自动完成运算任务。计算机软件一般来说会把软件分为应用软件和系统软件应用软件就是比如我们平时常见的APP应用而系统软件就是诸如操作系统等可以去与硬件产生交互的软件并为应用软件提供服务。这里介绍了三种级别的语言这个倒是老生常谈。机器语言是二进制代码可直接被 CPU 识别汇编语言使用助记符需要汇编器翻译成机器语言C/C 这类高级语言源程序存在两种处理方式一是通过编译器一次性全部翻译为机器语言再执行二是像 Python、JavaScript 这类语言依靠解释器逐行翻译并立刻执行编译器、汇编器、解释器可以统称为翻译程序。这里再次重复了软件和硬件的逻辑等效性也就是软件可以实现的功能硬件也可以做但是我主要想介绍一下ISA指令集体系结构ISA是软件和硬件之间的接口规范它定义了处理器可执行的指令种类、指令格式、寄存器、寻址方式等编程模型基于ISA可以体现软硬件逻辑功能等价性同一功能如果ISA包含对应专用指令可由硬件电路直接实现、执行效率更高若缺少该指令则能够利用多条基础指令通过软件模拟实现只是性能更低同时同一套ISA允许采用不同微架构完成硬件实现上层软件无需感知CPU内部电路细节。这张图展示计算机系统六层层次结构遵循下层是上层基础、上层是下层功能扩展的原则自上而下M4 高级语言虚拟机面向程序员高级语言程序依靠编译程序翻译为汇编语言交给 M3 汇编语言虚拟机汇编程序再经由汇编器翻译成二进制机器指令传递给 M2 操作系统机器操作系统通过系统调用这类广义指令对硬件资源进行管控虚线划分软硬件边界M1 传统机器能够执行机器语言指令再交由最底层 M0 微程序机器由硬件直接执行微指令来完成最终运算每一层都屏蔽下层实现细节向上提供更加易用的指令与服务。这张图显示了一个程序员写的代码如何演变成最后的.exe文件当然这里是以C举例子。程序员编写 hello.c 源程序后先由预处理器处理带 #的指令得到预处理文件 hello.i随后编译器将其翻译为汇编语言程序 hello.s汇编器再把汇编代码转换成二进制机器语言的目标模块 hello.o最后链接器将当前目标模块与 printf.o 等其他引用的目标模块整合拼接生成最终的 hello.exe 可执行文件。接下来我们来学习衡量一个计算机的一系列性能指标。计算机性能指标当然我们有必要复习一下关于二进制存储的内容这是计算机的存储容量大小。这里是一系列评价CPU性能的指标CPU 时钟周期是时钟信号一次完整震荡的时长主频为时钟周期的倒数单位为赫兹CPI 代表执行单条指令所需时钟周期数不同指令的 CPI 存在差异单条指令耗时等于 CPI 乘以时钟周期由此推导出 CPU 执行程序的总时间等于指令条数乘以平均 CPI 再除以主频IPS 表示 CPU 每秒能够执行的指令数量数值为主频除以平均 CPI衍生出 KIPS、MIPS 等单位FLOPS 代表每秒完成的浮点运算次数包含 KFLOPS、MFLOPS、GFLOPS、TFLOPS图中 K、M、G、T 采用十进制数量标准。数据通路带宽代表数据总线一次能够并行传输信息的位数用于硬件间的数据传递吞吐量是系统单位时间处理请求的数量由于各项数据交互流程大多需要访问主存系统吞吐量主要受主存存取周期制约响应时间是用户发起请求到得到最终结果的总等待时长由程序运行占用的 CPU 时间以及磁盘访问、内存读写、I/O 操作、系统调度等各类等待时间共同组成。存储系统我们接着来学习存储器的层次结构自顶层 CPU 内的寄存器向下依次为高速缓存 Cache、主存内存、磁盘辅存、磁带与光盘外存整体呈现出越靠近 CPU读写速度越快、存储容量越小、单位成本越高越底层则读写速度越慢、存储容量越大、单位成本越低的规律。该图展示存储器层次化结构分为 Cache— 主存层、主存 — 辅存层两大层级CPU 优先访问 CacheCache 与主存之间进行数据调度辅存内的数据必须调入主存之后才能被 CPU 访问主存和辅存相互传输数据整套存储层级依靠数据在相邻存储部件间调度平衡访问速度与存储容量的需求。主存 — 辅存层次用以实现虚拟存储解决主存容量不足的问题Cache— 主存层次则用来缓解主存运行速度与 CPU 运算速度不匹配的矛盾。相联存储器 CAM 依靠内容检索存储位置进行读写Cache 中的快表就是典型应用随机存取存储器 RAM 访问任意存储单元耗时一致和单元物理位置无关顺序存取存储器 SAM 读写耗时由存储单元所处物理位置决定磁带属于此类直接存取存储器 DAM 兼具随机与顺序存取特点先定位信息区域再顺序访问硬盘是典型代表其中顺序存取存储器与直接存取存储器都归属于串行访问存储器访问耗时受存储单元物理位置影响。速度从快 → 慢排序相联存储器CAM 随机存取存储器RAM 直接存取存储器DAM硬盘 顺序存取存储器SAM磁带。这里的原理可以这样理解相联存储器不用地址硬件同时扫全部存储单元、拿内容直接比对找目标查找速度最快随机存取存储器RAM就像独立储物柜随便选哪个格子开门耗时都一样不受存放位置影响直接存取存储器代表硬盘先移动磁头跳到目标所在区域之后再顺着轨道顺序读取数据顺序存取存储器磁带需要从头一路卷到目标位置目标离起点越远等待时间就越长速度最慢。然后我们学习一下如何寻址。寻址这张图以总容量 1KB、字长 4B的存储器为例讲解寻址方式的核心逻辑存储器芯片依靠地址线送入地址经过译码驱动选中存储矩阵里对应的存储单元再通过读写电路、数据线完成数据交互同样 1KB 的总存储空间按照不同寻址粒度划分存储单元数量与单个单元大小完全不同按字节寻址时拥有 1024 个单元每个单元存放 1 字节按字寻址共 256 个单元每个单元存放 4 字节按半字寻址共 512 个单元每个单元存放 2 字节按双字寻址共 128 个单元每个单元存放 8 字节地址线根数由存储单元总数决定而非单个单元的大小这也是现代计算机普遍选择按字节寻址的根本原因能够灵活访问任意字节的数据。我们来学习主存储器内部的组成部分主存储器组成部分DRAM和SRAM我们现在来说两种RAM。SRAM靠稳定电路保存数据通电就能一直存着不用反复维护读取数据不会破坏原有内容读写速度很快但造价高、芯片里放不下太多存储单元常用来做CPU高速缓存DRAM依靠电容带电与否记录信息电容会漏电不仅读取数据时会清空电荷需要重新写入还要不断刷新补电才能保住数据行列地址得分两次发送读写速度慢一些不过更容易大规模制造、价格便宜适合做成大容量内存条当作主存这两种内存断电之后里面的数据都会直接消失。ROM与RAM对应的是ROMRAM 属于易失性存储器断电后数据消失ROM 属于非易失性存储器断电数据能够保留ROM 发展衍生出多种类型包括出厂固化数据、用户无法修改的 MROM仅能一次性写入的 PROM依靠紫外线整体擦除重写的 EPROM支持电擦写的闪存以及基于闪存构成的 SSDRAM 读写速度快用作程序运行时临时存放数据的内存传统 ROM 以读取为主如今闪存、SSD 这类 ROM 衍生品可反复擦写用于长久保存各类文件资料。实际的计算机中我们常用的ROM主要是主板上的BIOS 芯片属于 ROM 类型存储器断电后内部数据不会丢失芯片里存放着自举装入程序。电脑开机时首先运行 BIOS 里的这段程序先完成硬件自检、初始化主板硬件随后引导硬盘上的操作系统启动是电脑开机必不可少的底层固件。双端口RAM与多模块存储器双端口 RAM 配备两套相互独立的地址线、数据线与控制线能够支持两个 CPU 同时访问这块内存以此提升多核访问内存的效率当两个端口操作内存时分为四种情形访问不同地址单元、同时读取同一地址单元不会产生冲突但同时写入同一地址单元、一个端口写同一地址而另一个端口读时会出现访问冲突需要额外的控制电路进行协调处理。双端口RAM内置仲裁电路处理访问冲突若两个端口同时操作同一地址会按照预设优先级或轮转策略分配访问权限一方先执行另一方阻塞等待同地址一读一写、同时写入均会触发冲突不同地址并发访问或同地址同时读取则无需协调、可并行执行。多体并行存储器由多个独立存储体组成依靠并行访问提高主存带宽。高位交叉编址用地址高位选择存储体连续数据处于同一个存储体难以并行低位交叉编址用地址低位选择存储体连续地址分散在不同存储体顺序访问时可实现多体流水线并行效率更高是主流方案。通俗的说低位交叉编址就是把连续的内存地址像发牌一样轮流分配给各个独立存储体相邻编号的数据落在不同内存条上CPU顺序读取连续数据时可以流水线式同时调度多个存储体并行读出充分利用内存带宽但缺点是一块大的数据很容易分散横跨多个存储体若频繁随机跳着访问内存就会反复抢占同一个存储体并行优势无法发挥。单体多字存储器仅有一个存储体每个存储单元存放m个字总线宽度与之匹配每次访问只能一次性读出单元内全部m个字无法单独读取其中任意一个字想要发挥存取效率指令与数据需要在主存中连续存放由于只有单个存储体无法实现多个存储体并行工作零散随机访问场景下容易造成带宽浪费。主存储器与CPU的连接聊完了主存里面的内容我们继续了解主存怎么和CPU通信。