计算机硬件基础

CPU

时序电路(寄存器)+ 逻辑电路(CPU算数逻辑单元)构成CPU的电路系统。最终通过时钟系统来控制整个电路系统的运转。 :::info CPU每秒处理20000亿个浮点数(双精度8Byte),但是内存每秒只能传输250亿个浮点数。因此要想CPU满负荷运行,内存每秒传输250亿个浮点数同时数据操作80次。现实情况是没有数据在每次加载时,需要操作80次。
CPU具有强大的数据处理能力,还需要内存宽度来平衡。 :::

GPU

GPU主要应用于图像渲染处理,有大量的核心支持数千个线程,用于大量的并行计算,将复杂的问题拆分,一次性解决。 :::info 对比CPU,CPU需要负责多个进程的上下文切换,开销很大,因此限制了支持的线程数量。而GPU可以说是简化版的CPU只负责相对简单的计算。 :::

I/O设备

硬盘、鼠标、键盘、显示器。

总线

信息传输的介质通道。

  • 数据总线:数据传输的通道。决定数据交互一个数据传送量。
  • 地址总线:地址总线的宽度决定CPU寻址能力。
  • 控制总线:最简单的锁存器(门电路 )上有一根线,用来控制锁存器是输出数据还是写入数据。

    I\O桥接控制芯片

    总线数据传输的中间控制芯片,提供数据缓存、DMA功能。

  • 主要是为了解决CPU读取不同存储器数据速度的差异。对慢速的设备,直接交给I\O桥接控制芯片去读取数据,使得CPU能够继续处理下一个指令,不必中断等待数据传回。

计算机硬件基础 - 图1

内存地址空间

image.png

  • CPU会给计算机中所有存储设备,包括主存、显存、ROM,分配地址空间,以便CPU能够读写I\O设备中的数据。比如:CPU向内存中的8000H地址写入数据,会被写入到显存中显示。
  • 如果地址总线的寻址空间有限,存储空间太大的主存其实也不是都可以物尽其用。
  • 汇编语言是基于硬件系统编程,必须知道硬件系统的内存地址分配情况。

    物理地址

  1. 8086CPU地址总线是20位,而寄存器是16位。
  2. 段地址 * 16 + 偏移地址 = 20位地址。通过地址加法器,传给20位地址总线。

地址计算分析段地址采用4位十六进制数表示,段地址 * 16相当于(二进制数表示的)段地址左移4位,换句话说20位地址中的前16位已经确定。如果偏移地址是0,则物理地址就是段地址的首地址。
偏移地址分析16位偏移地址决定段地址的寻址空间为64KB,所以一个段的最大长度为64KB。
段地址分析

  • 段地址必须是16的倍数。
  • 通过地址分段来寻址,对于数据、代码段读取来说,提供高效的数据检索和隔离。

    寄存器

    寄存器本质上就是触发器,既可以存储数据,也可以写数据。与主存最大的区别就是它与复杂的逻辑控制电路连接。

    寄存器分类

    因为不同寄存器与特定的逻辑电路相连接,可以实现特定的功能。

  • 通用寄存器存放一些一般的数据,并可以拆分为两个独立的8位寄存器使用。

    • AX(AH、AL)
    • BX(BH、BL)
    • CX(CH、CL)
    • DX(DH、DL)
  • 段寄存器存储内存各个不同分段的首地址。
    • CS:代码段首地址。
    • DS:数据段首地址。
    • SS:栈段首地址。SS:SP始终指向栈顶。
    • ES:扩展段寄存器。
  • 指针寄存器
    • IP:代码段偏移地址。IP寄存器会在CPU取到指令数据后,会根据数据大小自动增加。
    • SP:栈段偏移地址。

问:地址总线宽度和寻址空间的关系?

  1. 假定地址总线位宽为10位,它可以控制2^10个锁存器(一个锁存器读写1bit),寻址空间就是2^10bit。一个地址,每次读写数据只需要1bit。
  2. 设定8个锁存器(1个内存单元)共享1个地址,那么寻址空间就是2^10Byte。一个地址,每次读写数据需要8bit,分别给8个锁存器。

    问:存储单元为什么是8位?

  3. 英文文本信息(ASCII)的状态有100多,需要7位二进制表示100多个状态。换句话说存储单元位数至少要有7位。

  4. 7位作为存储单元,不方便表示、扩展。最终,可寻址存储单元就是8位。

    问:计算机如何读取内存中数据和指令?

    计算机通过地址总线、数据总线、控制总线的数据传输通道,发出一条指令给内存,这条指令就是三条总线上的电平表示。内存收到信号,通过地址总线上的信号找到内存单元。通过控制总线的信号知道是读还是写数据总线上的数据。

    问:计算机如何区分数据总线上的信息是表示数据还是指令?

  • 内存中的代码和数据的存储没有任何区别,关键在于如何解释。
  • 计算机通过存储16位地址的两个寄存器的类型,来区分数据和指令。CS:IP寄存器指向的内存空间就是指令。其他寄存器指向的内存空间就是数据。

image.png