《嵌入式工程师自我修养/C语言》系列——CPU是如何工作的?什么是冯·诺依曼架构和哈弗架构?
- 一、CPU内部结构及工作原理
- 1.1 CPU的结构
- 1.2 CPU工作流程举例
- 二、计算机体系结构
- 2.1 冯·诺依曼架构
- 2.2 哈弗架构
- 三、总结
快速学习嵌入式开发其他基础知识?>>>>>>>>> 返回专栏总目录 《嵌入式工程师自我修养/C语言》<<<<<<<<<
Tip📌:鼠标悬停双虚线关键词/句,可获得更详细的描述
一、CPU内部结构及工作原理
1.1 CPU的结构
CPU内部构造很简单,宏观上划分为算术逻辑运算单元、控制单元和存储单元。程序代码存储在内部存储器(内存)中,CPU可以从内存中一条一条地取指令、翻译指令并执行它。
RAM、ROM、DRAM、SRAM、Flash、EMMC傻傻分不清?建议先阅读:>>>>>> 一文帮你快速区分常用存储器!<<<<<<
算术逻辑单元(Arithmetic and Logic Unit,ALU):由算术单元和逻辑单元组成(他俩分别负责加、减、乘等数学运算以及与、或、非等逻辑运算),是处理器最核心的部件。ALU只是纯粹的运算单元,要想完成一个指令运行的整个流程,还需要控制单元的协助。
控制单元:通俗的讲,该部分会根据程序计数器PC中的地址,会不断地从内存RAM中取指令,放到指令寄存器中并进行译码,将指令中的操作码和操作数分别送到ALU,执行相应的运算。实际上,该单元还可以进一步划分,比如划分为:
- 指令控制:完成取指令、分析指令、PC自增等操作,然后交给执行单元来执行;
- 时序控制:主要分为时钟发生器、倍频定义单元,时钟发生器由石英晶体振荡器发出非常稳定的脉冲信号,也就是CPU的主频,而倍频定义单元则定义了CPU主频是存储器频率(总线频率)的几倍;
- 总线控制:控制地址总线、数据总线、控制总线等CPU的内外部总线;
- 中断控制:控制各种各样的中断请求,并根据优先级的高低对中断请求进行排队,逐个交给CPU处理。
存储单元:主要包括通用寄存器(比如R0、R1. . .)、状态寄存器(CPSR)以及内部cache(缓存)。
- 通用寄存器:用于传送和暂存数据,也可参与算术逻辑运算,并保存运算结果;
- 状态寄存器:主要有两大功能,第一是存放当前指令执行结果的各种状态或条件码,比如结果是否为负、是否为0、是否进位、是否溢出等;其次就是存放控制信息,比如中断标志位;
- cache:进行高速数据交换的存储器(为了解决CPU的工作频率与内存访问速度间差异过大导致的性能问题而存在,后文会解释)。
1.2 CPU工作流程举例
假设通过高级语言编写的一行代码实现的功能是两个整数A、B相加,该程序代码经过编译器编译后,作为机器指令存储在内存RAM中,如下图所示;
控制单元通过指令译码电路会将该指令分解为操作码和操作数,再根据操作数地址从内存RAM中加载数据A和B,传送到ALU的输入端,然后将操作运算类型(操作码)即加法也告诉ALU。ALU有了输入数据和操作类型,就可以直接进行相应的运算了,并输出运算结果。
为了效率考虑,运算结果一般会先保存到寄存器中,然后由控制单元将该数据从寄存器存储(Store)到内存RAM中。至此,一个完整的加法指令执行流程就结束了,控制单元会继续取下一条指令,然后翻译指令、运行指令, 周而复始。
Tips📌:
- 内存带宽的瓶颈会拖CPU的后腿,影响CPU的性能。为了提高性能,防止RAM拖后腿,CPU一般都会在内部配置一些寄存器,用来保存CPU在计算过程中的各种临时结果和状态值。
- ALU在运算过程中,当运算结果为0、为负、数据溢出时,会有一些Flags标志位输出,这些标志位对控制单元特别有用,如一些条件跳转指令,其实就是根据运算结果的这些标志位进行跳转的。
二、计算机体系结构
上文提到CPU内部的结构其实很简单,除了ALU、控制单元、寄存器和少量Cache,根本没有多余的空间存放我们编写的代码。因此我们通常将编写的程序(指令序列)存储在额外的内部存储器——内存RAM中(建议先阅读:>>>>>> 一文帮你快速区分常用存储器!<<<<<<)。
但上文我们也提到,内存带宽瓶颈会影响CPU的性能,于是为了兼顾存储和效率,计算机系统一般会采用内存+外存的存储结构:程序指令保存在诸如磁盘、NAND Flash、SD卡等外部存储器中,当程序运行时,相应的程序会首先加载到内存,然后CPU从内存一条一条地取指令、翻译指令和运行指令。
计算机主要用来处理数据。我们编写的程序,除了指令,还有各种各样的数据。指令和数据都需要保存在存储器中,根据保存方式的不同,计算机可分为两种不同的架构:冯·诺依曼架构和哈弗架构。
2.1 冯·诺依曼架构
采用冯·诺依曼架构的计算机,其特点是程序中的指令和数据混合存储,存储在同一块存储器的不同物理地址上。
一般我们会把指令和数据存放到外存储器中,当程序运行时,再把这些指令和数据从外存储器加载到内存储器(内存储器支持随机访问并且访问速度快,这里说的外存储器通常是flash、EMMC等,内存储器指的是RAM,通常为DRAM,再次建议先阅读:>>>>>> 一文帮你快速区分常用存储器!<<<<<<),如下图所示。
Tips📌:
由于该架构结构简单,工程上容易实现,所以很多现代处理器都采用这种架构,如X86、ARM7、MIPS等。
2.2 哈弗架构
采用哈弗架构的计算机,其特点是程序中的指令和数据被分开独立存储,它们分别被存放到程序存储器和数据存储器,如下图所示。
Tips📌:
- 每个存储器都独立编址,独立访问,而且指令和数据可以在一个时钟周期内并行访问;
- 使用该架构的处理器运行效率更高,但缺点是CPU实现会更复杂。8051系列单片机采用的就是哈弗架构。
三、总结
综上所述,CPU是计算机的核心组件,它负责执行计算机程序中的指令。冯·诺依曼架构和哈弗架构是两种不同的计算机体系结构。
冯·诺依曼架构的特点是将程序指令和数据存储在同一块内存中,通过一个共享的总线进行数据传输。这种结构的优点是简单易懂,容易实现,广泛应用于现代计算机系统中。而哈弗架构则是将指令和数据分开存储,通过不同的总线进行数据传输,这种结构可以提高计算机的并行处理能力。总的来说,他们都各有优劣,选择哪种架构取决于具体的应用场景和需求。
>>>>>>>>> 返回专栏总目录 《嵌入式工程师自我修养/C语言》<<<<<<<<<