尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

计算机组成原理-笔记

计算机组成原理-笔记
📅 发布时间:2026/7/17 19:19:02

今天开始我们系统学习计算机组成原理的内容,主要参考资源还是网课:王道计算机考研 计算机组成原理_哔哩哔哩_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把指令的操作码传递给CU,CU负责解析指令并向运算器、存储器、输入输出设备发送各类控制信号,完整执行一条指令分为取指令、分析指令、执行指令三个阶段,取指阶段依靠PC提供地址取出指令存入IR,分析与执行阶段依靠IR传递指令信息、由CU生成控制信号指挥计算机各个部件完成对应的操作。

这张图完整展示计算机执行程序的完整流程,我们编写的C语言这类高级语言代码需要先经过编译器翻译为二进制机器语言指令,之后连同运算所需的数据一同装入主存,主存里每一行存储单元长度为16bit也就是存储字长,每条指令分为操作码和地址码两部分,操作码代表要执行读取、乘法、加法、保存、停机这类动作,地址码标记需要访问的主存单元地址,程序计数器PC从地址0开始依次取出指令送入IR,CU解析指令后指挥硬件一步步运算:先取出地址5的数据a放入ACC,接着根据第二条指令乘以地址6的b,随后第三条指令加上地址7的c,第四条指令把最终结果存进地址8对应的y,最后执行停机指令,整个过程充分体现冯·诺依曼存储程序思想,指令与数据共同存放在主存中,控制器循环完成取指、分析指令、执行指令,依靠运算器完成计算,实现高级代码对应的数学运算。

如图所示,初始PC存放待读取指令的内存地址,先将地址送入MAR,主存根据MAR的地址把对应指令读出送入MDR,随后MDR中的指令传送至IR存放,IR将指令里的操作码发送给CU,CU识别指令类型,同时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 优先访问 Cache,Cache 与主存之间进行数据调度,辅存内的数据必须调入主存之后才能被 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对应的是ROM,RAM 属于易失性存储器,断电后数据消失,ROM 属于非易失性存储器,断电数据能够保留;ROM 发展衍生出多种类型,包括出厂固化数据、用户无法修改的 MROM,仅能一次性写入的 PROM,依靠紫外线整体擦除重写的 EPROM,支持电擦写的闪存,以及基于闪存构成的 SSD;RAM 读写速度快,用作程序运行时临时存放数据的内存,传统 ROM 以读取为主,如今闪存、SSD 这类 ROM 衍生品可反复擦写,用于长久保存各类文件资料。

实际的计算机中,我们常用的ROM主要是:

主板上的BIOS 芯片属于 ROM 类型存储器,断电后内部数据不会丢失,芯片里存放着自举装入程序。电脑开机时,首先运行 BIOS 里的这段程序,先完成硬件自检、初始化主板硬件,随后引导硬盘上的操作系统启动,是电脑开机必不可少的底层固件。

双端口RAM与多模块存储器

双端口 RAM 配备两套相互独立的地址线、数据线与控制线,能够支持两个 CPU 同时访问这块内存,以此提升多核访问内存的效率;当两个端口操作内存时分为四种情形:访问不同地址单元、同时读取同一地址单元不会产生冲突,但同时写入同一地址单元、一个端口写同一地址而另一个端口读时会出现访问冲突,需要额外的控制电路进行协调处理。

双端口RAM内置仲裁电路处理访问冲突,若两个端口同时操作同一地址,会按照预设优先级或轮转策略分配访问权限,一方先执行,另一方阻塞等待;同地址一读一写、同时写入均会触发冲突,不同地址并发访问或同地址同时读取则无需协调、可并行执行。

多体并行存储器由多个独立存储体组成,依靠并行访问提高主存带宽。高位交叉编址用地址高位选择存储体,连续数据处于同一个存储体,难以并行;低位交叉编址用地址低位选择存储体,连续地址分散在不同存储体,顺序访问时可实现多体流水线并行,效率更高,是主流方案。

通俗的说,低位交叉编址就是把连续的内存地址像发牌一样轮流分配给各个独立存储体,相邻编号的数据落在不同内存条上,CPU顺序读取连续数据时,可以流水线式同时调度多个存储体并行读出,充分利用内存带宽;但缺点是一块大的数据很容易分散横跨多个存储体,若频繁随机跳着访问内存,就会反复抢占同一个存储体,并行优势无法发挥。

单体多字存储器仅有一个存储体,每个存储单元存放m个字,总线宽度与之匹配,每次访问只能一次性读出单元内全部m个字,无法单独读取其中任意一个字,想要发挥存取效率,指令与数据需要在主存中连续存放;由于只有单个存储体,无法实现多个存储体并行工作,零散随机访问场景下容易造成带宽浪费。

主存储器与CPU的连接

聊完了主存里面的内容,我们继续了解主存怎么和CPU通信。

相关新闻

  • 6西格玛考试报名 - 众智商学院官方
  • 5分钟快速上手Yuxi智能知识库平台:企业级AI助手部署指南
  • 视频转mp3哪个软件好:5款工具实操下来这几款免费又好用 - 优企甄选

最新新闻

  • 2026年7月最新南通卡地亚官方售后客户服务热线与维修网点地址汇总 - 卡地亚服务中心
  • 【关注可白嫖源码】--课程设计+毕业设计+springboot校园流浪动物健康档案系统[编号:project17069](案例分析)
  • 第三:Pytest常用运行方式
  • 昇腾950超节点真机亮相2026世界人工智能大会
  • C 语言工业级通用组件手写 05:定时器最小堆
  • 对比上海 6 家回收门店,钻石变现认准这家 - 讯息早知道

日新闻

  • 佛山青少年训练营推荐:军博营地实力顶尖 - 秋山寄远
  • 如何快速上手PvZ2 Gardendless:免费Web版植物大战僵尸2完整指南
  • jiuwen-deepsearch核心功能详解:规划-检索-反思三合一智能工作流

周新闻

  • IX9104 PCIe5.0 高速交换芯片@ACP#完整规格 + 应用场景总结
  • Unity游戏集成Coze智能体:实现NPC智能对话与知识库联动
  • SAP EPIC 建行回单查询:从标准类CL_EPIC_EXAMPLE_CN_CCB_GHTD到Z类的5处关键修改

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号