文章目录
一、CPU
CPU内部结构
-
CPU内部的算术逻辑单元(Arithmetic and Logic Unit,ALU)是处理器最核心的部件,相当于CPU的大脑。
ALU由算术单元和逻辑单元组成,
算术单元主要负责数学运算,如加、减、乘等;
逻辑单元主要负责逻辑运算,如与、或、非等。 -
ALU只是纯粹的运算单元,要想完成一个指令运行的整个流程,还需要控制单元的协助。
控制单元根据程序计数器PC中的地址,会不断地从内存RAM中取指令,放到指令寄存器中并进行译码,将指令中的操作码和操作数分别送到ALU,执行相应的运算。
二、计算机体系结构
冯·诺依曼架构
很多现代处理器都采用这种架构,如X86、ARM7、MIPS等。
哈弗架构
8051系列的单片机采用的就是哈弗架构。
混合架构
CPU引入了Cache机制:指令Cache和数据Cache,用来缓存数据和指令,提升计算机的运行效率。
现代的ARM SoC芯片架构一般如图所示,
SoC芯片内部的Cache层采用哈弗架构,集成了指令Cache和数据Cache,
而SoC芯片外部则采用冯·诺依曼架构。
三、CPU性能提升
Cache机制(高速缓存)
在CPU和主存之间设置“Cache”的作用是为了解决主存与CPU速度不匹配的问题。
并不是所有的处理器都有Cache,
如C51系列单片机、cortex-M0、cortex-M1、cortex-M2、cortex-M3、cortex-M4系列的ARM处理器都没有Cache。
不要觉得奇怪:适合自己的,才是最好的,不是所有的牛奶都叫特仑苏。
流水线:
本质:拿空间换时间
指令的每一小步都有独立的电路单元来执行
CPU内部的流水线如此,工厂里的手机生产流水线也是如此,通过不断地往流水线增加人手来提高流水线的生产效率,也就是增加流水线的吞吐率。
处理器指令的流水线执行过程:
四、多核CPU
在多核处理器设计中,还有一种技术叫超线程技术(Hyper-Threading,HT),目前主要应用在Intel、AMD的X86多核处理器上
五、后摩尔时代:异构计算的崛起
GPU
GPU(Graphic Process Unit,图形处理单元)主要用来处理图像数据,
DSP
DSP(Digital Signal Processing,数字信号处理器),主要用在音频信号处理和通信领域
FPGA
FPGA(Field Programmable Gate Array,现场可编程门阵列)在专用集成电路(Application Specific Integrated Circuit,ASIC)领域中是以一种半定制电路的形式出现的
六、总线与地址
CPU内部的寄存器是没有地址的,可直接通过寄存器名访问。
而内存和外部设备控制器中的寄存器都需要有一个地址,
计算机的内存简单点理解,其实就是将一系列存储单元和译码器组装在一起,当CPU想访问其中一个存储单元时,可通过CPU管脚发出一组信号,经过译码器译码,选中与这个信号对应的存储单元,CPU管脚发出的这组信号,也就是存储单元对应的编号,即地址。
假如我们的RAM容量大小为4字节,那么需要两根信号线就可以访问这4个存储单元了。
占的字节=2的n次方:一条信号线发出两种信号
X86处理器的PCI总线
ARM处理器的AMBA总线
嵌入式采用统一编址,在统一编址模式下,内存RAM、外部设备控制器的寄存器、集成在外部设备控制器内部的RAM共享CPU的可寻址空间。在统一编址模式下,CPU可以像操作内存一样去读写外部设备的寄存器和内部RAM。
七、指令集与微架构
ARM架构的处理器只支持ARM指令,X86架构的处理器只支持X86指令。
CPU支持的有限个指令的集合,我们称之为指令集。
微架构,对应的英文是Microarchitecture,也就是处理器架构
在嵌入式处理器中,微架构不等于SoC,大家不要把概念混淆了,微架构一般也称为CPU内核。在一个ARM SoC芯片上,我们把CPU内核和各种外设IP通过AMBA总线连接起来,构成一个片上系统,即SystemOn Chip,简称SoC。
指令助记符:汇编语言
一个指令通常由操作码和操作数组成,指令格式是二进制的,就是一串数字,非常不好记,可读性差。
为了方便编程,我们给这些二进制指令定义了各种助记符,这种助记符其实就是汇编指令。一段汇编程序经过汇编器的翻译,才能变成CPU真正能识别、译码和运行的二进制指令。
在一些嵌入式软件优化、启动代码、Linux内核OOPS调试等场合,也需要你对汇编语言有一定的掌握。
精简指令集与复杂指令集
复杂指令集(CISC):x86采用的是复杂指令集
精简指令集(RISC):ARM指令集属于精简指令集
八、ARM介绍
ARM架构
1)Cortex-A:用于高性能应用,主要支持分页内存管理单元MMU,linux需要MMU的支持才能运行。
2)Cortex-R:侧重于实时性应用,如汽车系统。
3)Cortex-M:侧重于微控制器,常用的STM32就是此内核。
ARM工作模式
- 用户模式属于普通模式,有些特权指令是运行不了的,需要切换到特权模式下才能运行。
- 在ARM处理器中,除了用户模式是普通模式,剩下的几种工作模式都属于特权模式。
- 应用程序正常运行时,处理器处于普通模式,没有权限对 内存和底层硬件进行操作。应用程序如果要读写磁盘上的音频数据,驱动声卡播放音乐,往屏幕写数据显示歌词,则要首先通过系统调用或软 中断进入处理器特权模式,运行操作系统内核或硬件驱动代码,才能对底层的硬件设备进行读写操作。
ARM处理器(CPU)中的寄存器
在ARM处理器内部,除了基本的算术运算单元、逻辑运算单元、浮点运算单元和控制单元,还有一系列寄存器.
通用寄存器:
寄存器R0~R12属于通用寄存器,除了FIQ工作模式,在其他工作模式下这些寄存器都是共用、共享的:
R0~R3通常用来传递函数参数,
R4~R11用来保存程序运算的中间结果或函数的局部变量等,
R12常用来作为函数调用过程中的临时寄存器。
专用寄存器:
除了这些在各个模式下通用的寄存器,还有一些寄存器在各自的工作模式下是独立存在的,
如R13、R14、R15、CPSP、SPSR寄存器,在每个工作模式下都有自己单独的寄存器。
-
R13寄存器又称为堆栈指针寄存器 (Stack Pointer,SP),用来维护和管理函数调用过程中的栈帧变化,
R13总是指向当前正在运行的函数的栈帧,一般不能再用作其他用途。 -
R14寄存器又称为链接寄存器(Link Register,LR),在函数调用过程 中主要用来保存上一级函数调用者的返回地址。
-
R15又称为程序计数器(Program Counter,PC),CPU从内存取指令执行,就是默认从PC保存的地址中取的,每取一次指令,PC寄存器的地址值自动增加。
-
当前处理器状态寄存器(Current Processor State Register,CPSR)主要用来表征当前处理器的运行状态。除了各种状态位、标志位,CPSR寄存器里也有一些控制位,用来切换处理器的工作模式和中断使能控制。
-
程序状态保存寄存器(SavedProcessor State Register,SPSR)。
现场保护: 当ARM处理器切换工作模式或发生异常时,SPSR用来保存当前工作模式下的处理器现场,即将CPSR寄存器的值保存到当前工作模式下的SPSR寄存器。当ARM处理器从异常返回时,就可以从SPSR寄存器中恢复原先的处理器状态,切换到原来的工作模式继续运行。 -
在ARM所有的工作模式中,有一种工作模式比较特殊,即FIQ模 式。为了快速响应中断,减少中断现场保护带来的时间开销,在FIQ工作模式下,ARM处理器有自己独享的R8~R12寄存器。