Loading

计算机体系结构


返回 我的技术栈(Technology Stack)



图灵机(Turing Machine)

image

读写头上有⼀些部件,⽐如存储单元、控制单元以及运算单元:
1、存储单元 ⽤于存放数据;
2、控制单元 ⽤于识别字符是数据还是指令,以及控制程序的流程等;
3、运算单元 ⽤于执⾏运算指令。

不同的架构CPU,指令集不同,支持运行的及其指令也不同,但是有一条是相同的,那就是:
每一种CPU只能支持有限个指令,任何复杂的运算最终都可以分解成有限个基本指令来完成:加、减、乘、除、与、或、非、位移运算或逻辑运算。

在计算机上玩游戏、听音乐、看奥运会视频等,这些复杂多变的应用程序,最终都可以分解成CPU所支持的有限个基本指令。


计算机体系结构

指令和数据都需保存,根据保存的方式不同,计算机可以分为两种不同的架构:冯·诺依曼架构 和 哈弗架构

冯·诺依曼架构

image
冯·诺依曼架构也称为普林斯顿结构。

  • 指令和数据存储方式:程序中的指令和数据混合存储,存储在同一块存储器的不同物理地址上
  • 特点:结构简单,工程上容易实现,所以现代很多处理器都采用这种架构,如X86、ARM7等。

汇编语言的语法由 由 操作码(指令) 和 操作数(指令的对象) 构成
image

image
根据上图,可以定义计算机的5个基本部分:中央处理器(CPU)、内存、输入设备、输出设备、总线,这5个部分也被称为冯·诺依曼模型。

  • 内存

    • 程序和数据都存储在内存,存储的区域是线性的。是由一组动态随机存取存储器(DRAM)组成。
    • 数据存储单位是一个二进制位(bit),即0或1。最小的存储单位是字节(byte),1byte=8bit
    • 内存地址从0自增,因为有地址的缘故,内存读写任何一个数据速度都是一样的。
  • 中央处理器(CPU)

    • 32位和64位CPU主要区别在于一次能计算多少字节:
      32位CPU一次可以计算4个字节:4字节×8位=32位CPU
      64位CPU一次可以计算8个字节:8字节×8位=64位CPU
      这里32位和64位通常是指CPU的位宽
    • 为什么有了内存还需要寄存器?
      因为,一方面,一些寄存器有特殊的作用,例如计数记录地址等,另一方面,内存离CPU太远了,而寄存器就在CPU里面,计算时候速度快些。
    • 常见的寄存器种类:
      通用寄存器:用来存放需要进行运算的数据,比如需要进行加和运算的两个数据
      程序计数器:⽤来存储 CPU 要执⾏下⼀条指令「所在的内存地址」,注意不是存储了下⼀条要执⾏的指令,此时指令还在内存中,程序计数器只是存储了下⼀条指令的地址
      指令寄存器:⽤来存放程序计数器指向的指令,也就是指令本身,指令被执⾏完成之前,指令都存储在这⾥。
  • 总线

    • 贯穿整个系统的是一组电子管道,称作总线,它携带信息字节并负责在各个部件间传递。
      通常总线被设计成传送定长的字节块,也就是宇 (word) 。
      字中的字节数(即字长)是一个基本的系统参数,各个系统中都不尽相同。
      现在的大多数机器字长要么是4个字节 (32位),要么是8个字节 (64 位)。
    • 总线用于CPU和内存及其他设备之间的通信,总线可分为3种:
      地址总线:用于指定CPU将要操作的地址。
      数据总线:用于读写内存的数据。
      控制总线:⽤于发送和接收信号,⽐如中断、设备复位等信号,CPU 收到信号后⾃然进⾏响应,这时也需要控制总线。
  • 输入输出设备

    • 一般最常见就是键盘输入、屏幕输出。

哈弗架构

image
哈弗架构是相对于冯·诺依曼架构的。

  • 指令和数据存储方式:程序中的指令和数据分开存储,分别存储在程序存储器和数据存储器
  • 特点:每个存储器都独立编址,独立访问,而且指令和数据可以在一个时钟周期内并行访问,所以使用哈弗架构的处理器运行效率更高,8051系列的单片机采用的就是哈弗架构

混合架构

随着科技的发展,现在内存RAM的工作频率跟不上CPU了,往往CPU和内存之间传输数据,CPU执行完了,内存可能刚开始没多久,比如CPU执行一条指令仅需要零点几纳秒,而RAM则需要30纳秒。读写一次RAM的时间,CPU都可以执行几百条指令了,为此,为了减少内存瓶颈(速度更不上CPU)带来的影响,CPU引入了Cache机制:指令Cache和数据Cache,用来缓存指令和数据,以此提高计算机效率。

现代的ARM SoC芯片架构如下
image

SOC芯片内部采用了哈弗架构,集成了指令Cache和数据Cache。
当CPU到RAM中读取数据时,一次缓存一块地址连续的数据到Cache中,等下次CPU再去取指令和数据的时候,可以先到两个Cache中查找,如果找不到,再去内存中读取;当CPU写数据的时候,也是先把数据暂时存放在Cache中,等待时机一次性刷新到内存中。因此,Cache缓存机制可以大幅提高CPU的访问效率。

SOC芯片外部采用了冯·诺依曼架构,工程实现简单。


参考:
[1]嵌入式C语言自我修养:从芯片、编译器到操作系统/王利涛编著.——北京:电子工业出版社,2021.4
[2]《图解系统》小林coding
[3]深入理解计算机系统(原书第3版)/(美)兰德尔.E.布莱恩特(Randal E.Bryant)等著;龚奕利,贺莲译.——北京:机械工业出版社,2016.7
[4]计算机是怎么跑起来的/(日)矢泽久雄;胡屹译.——北京:人民邮电出版社,2021.4


posted @ 2021-07-28 19:14  言非  阅读(656)  评论(0编辑  收藏  举报