美文网首页
硬件结构

硬件结构

作者: 今年五年级 | 来源:发表于2021-10-11 15:41 被阅读0次

冯诺依曼模型
1945年,冯诺依曼和其他计算机科学家提出了计算机具体实现的报告,遵循了图灵机的设计,提出用 电子元件 构造计算机,并约定用二进制进行计算和存储,将计算机基本结构分为5部分:中央处理器,内存,输入设备,输出设备,总线

内存

程序和数据都存储在内存,内存的区域是线性的类似于数组(所以内存的读写任何1个数据的速度都是一样的),内存中的数据存储单位是bit,即0或1,最小的存储单位为字节byte,1byte=8bit
内存地址自增且从0开始编号,最大地址为内存总字节数-1,

CPU

平常所说的32位cpu,64位cpu称之为cpu的位宽,32 位和 64 位 CPU 最主要区别在于一次能计算多少字节数据

  • 32位位宽的cpu一次可以计算4个字节
  • 64位位宽的cpu一次可以计算8个字节
    cpu之所以这么设计是为了计算更大的数值,如果是8位位宽cpu,1次只能计算1个字节,而
    1个字节为8个二进制位,最小为0000 0000,最大为1111 1111,最小即0,最大为2^0\times1+2^1\times1+...+2^7\times1\equiv255,这样无法一次完成计算超过0~255范围内的数值

于是为了能一次计算大的数值,cpu需要支持多个字节一起计算,cpu位宽越大,可计算数值越大,比如32位cpu最大能一次计算的整数为2^32-1

cpu内部还有一些组件,常见的有寄存器控制单元逻辑运算单元等。其中,控制单元负责控制 CPU工作,逻辑运算单元负责计算,而寄存器可以分为多种类,每种寄存器的功能不相同

CPU 中的寄存器主要作用是存储计算时的数据
问题:为什么有了内存还需要寄存器?
原因很简单,因为内存离 CPU 太远了,而寄存器就在 CPU 里面,还紧挨着控制单元和逻辑运算单元,自然计算时速度会很快。常见寄存器如下:

  • 通用寄存器:存储需要运算的数据,如1+2里面的1和2
  • 程序计数器:存储cpu要执行的下一条指令所在的内存地址,注意不是存储了指令本身,指令本身还在内存里
  • 指令寄存器:存储了程序计数器指向的指令本身,指令被执行完成之前,都存储在这里

总线

总线用于CPU和存储单元(如内存)以及其他设备之间通信,可以参照上面的图片,分为3种

  • 地址总线:用于指定cpu将要操作的内存地址
  • 数据总线:用于读写内存的数据
  • 控制总线:用于发送和接收信号,比如中断,设备复位等信号,cpu收到信号后进行响应,响应的时候也需要控制总线

输入、输出设备

输入设备向计算机输入数据,计算机运算完毕后向输出设备输出数据。输入设备是键盘的话,按下按键的时候是需要和cpu进行交互的,此时用到控制总线

总线位宽与cpu位宽的关系
数据是通过操作电压的方式在总线上进行传输,低电压表示0,高电压表示1,比如十进制的7表示成2进制就是111
如果只有一条总线,那么传输111,这个数据需要传输3次,因为每次只能传递1bit的数据,这样一位一位传输的方式,称为串行,下一个bit必须等待上一个bit传输完成才能进行传输

要想传输的数据多,那么最简单的办法就是增加线路,避免低效率的串行传输,线路的位宽最好能访问所有的内存地址,如果地址总线只有1条,那么只能传送0或者1,那么cpu一次只能访问0位置内存地址和1位置内存地址,2个地址。如果有2条,那么能同时传送2bit的数据,能寻址22=4个内存地址(00,01,10,11),如果cpu要寻址4G内存地址,那么需要32根地址总线,因为232=4G

对于 64 位 CPU 就可以⼀次性算出加和两个 64 位数字的结果,因为 64 位 CPU 可以1次读出64 位的数字,并且 64 位 CPU 内部的逻辑运算单元也支持 64 位数字的计算

但不代表 64 位 CPU 性能比32 位 CPU高很多,很少需要算超过 32 位的数字,所以如果计算的数额不超过 32 位数字的情况下,32 位和 64 位 CPU 之间没什么区别的,只有当计算超过 32 位数字的情况下,64 位的优势才能体现出来

32位cpu最大只能操作4G内存,即便安装了8G内存,因为寻址不到,也没用。而64位cpu最大寻址空间为2^64

cpu的指令周期
即cpu执行程序的步骤

  1. cpu读取程序计数器获取要执行的指令地址,然后由控制单元操作地址总线找到指令的内存地址位置,然后通知内存设备准备数据,数据准备好后通过数据总线将指令数据传给cpu,cpu收到指令数据后,存储到指令寄存器
  2. cpu分析指令寄存器中的指令,确定指令的类型和参数,如果为计算类型指令,交由逻辑运算单元处理,如果为存储指令交由控制单元处理
  3. cpu执行完指令后,程序计数器值自增,指向下一条指令
    简单总结就是,一个程序执行的时候,CPU 会根据程序计数器里的内存地址,从内存中把需要执行的指令读取到指令寄存器中执行,然后根据指令长度自增,开始顺序读取下一条指令

CPU 从程序计数器读取指令、到执行、再到一条指令,这个过程会不断循环,直到程序执行结束,这个不断循环的过程被称为 CPU 的指令周期

a=1+2执行过程

  1. 首先将程序代码翻译成汇编语言程序-> 编译成汇编代码
  2. 使用汇编器翻译成机器码,机器码由0,1组成,一条条机器码,就是一条条计算机指令,这才是cpu能够认识的东西

内存中存放指令的地方叫正文段,存放数据的地方叫数据段
程序编译过程中,编译器通过分析代码,发现 1 和 2 是数据,于是程序运行时,内存会有个专门的区域来存放这些数据,这个区域就是「数据段」

指令和数据在内存中的存放
指令
指令的内容是一串二进制数字的机器码,每条指令都有对应的机器码,CPU 通过解析机器码来知道指令的内容。不同的 CPU 有不同的指令集,也就是对应着不同的汇编语言和不同的机器码

指令分为5大类

  • 数据传输类型的指令:比如store/load是寄存器与内存间数据传输的指令,mov是将将⼀个内存地址的数据移动到另一个内存地址的指令
  • 运算类型的指令:比如加减乘除、位运算、比较大小等等,它们最多只能处理两个寄存器中的数据
  • 跳转类型的指令:通过修改程序计数器的值来达到跳转执行指令的过程,比如程序中常见的if-else,switch-case,函数调用等
  • 信号类型的指令:比如发生中断的指令trap
  • 闲置类型的指令:如nop,执行后cpu会空转一个周期

指令的执行速度
CPU 的硬件参数都会有 GHz 这个参数,比如1个 1 GHz 的 CPU,指的是时钟频率是 1 G,代表着 1 秒会产生1G 次数的脉冲信号,每一次脉冲信号⾼低电平的转换就是一个周期,称为时钟周期
周期之间的关系

  • 指令周期:取出并执行一条指令的时间。
  • CPU周期:一条指令执行过程被划分为若干阶段,每一阶段完成所需时间。
  • 时钟周期:又称震荡周期,是处理操作的最基本单位。

对于一个指令周期来说,我们取出一条指令,然后执行它,至少需要两个 CPU 周期。取出指令至少需要一个 CPU 周期,执行至少也需要一个 CPU 周期,复杂的指令则需要更多的 CPU 周期。而一个CPU周期是若干时钟周期之和

如何让程序跑的更快
程序执行的时候,耗费的 CPU 时间少就说明程序是快的,对于程序的 CPU 执行时间,我们可以拆解成CPU 时钟周期数(CPU Cycles)和时钟周期时间(Clock Cycle Time)的乘积
程序的cpu执行时间=CPU 时钟周期数 x 时钟周期时间

相关文章

网友评论

      本文标题:硬件结构

      本文链接:https://www.haomeiwen.com/subject/jeaenltx.html