# 第一章 计算机组成与体系结构

系统构建于硬件与操作系统之上,如果我们不对计算机底层原理有一定认识,会导致一系列安全与性能问题。本章将从计算机的组成,计算机的指令系统,存储系统等方面展开论述。

# 1.1 计算机系统组成

计算机系统是一个硬件和软件的综合体,可以把它看成按功能划分的多级层次结构。

# 1.1.1 计算机硬件的组成

硬件通常指一切看得见,摸得着的设备实体。原始的冯诺依曼计算机在结构上是以运算器为中心的,而发展到现在,已转向以存储器为中心了。

  • 控制器
  • 运算器
  • 主存储器
  • 辅助存储器
  • 输入设备
  • 输出设备

# 1.1.2 计算机系统结构的分类

计算机的发展经历了电子管和晶体管时代、集成电路时代。

  • 存储程序的概念

控制、运算、存储、输入和输出

  • Flynn 分类

1966 年,Michael.J.Flynn 提出根据指令流、数据流的多倍性特征对计算机系统进行分类,有关定义如下。

  • 指令流:指机器执行的指令序列
  • 数据列:指由指令流调用的数据序列,包括输入数据和中间结果,但不包括输出数据。

Flynn 根据不同的指令流-数据流组织方式,把计算机系统分类一下四类:

  • 单指令流单数据流:传统的顺序执行的单处理器计算机
  • 单指令流多数据流:以并行处理机为代表
  • 多指令流单数据流:这类系统很少见到
  • 多指令流多数据流:多核处理器、多处理机。现代计算机的主流。

# 1.1.3 复杂指令集系统与精简指令集系统

在计算机系统结构发展的过程中,指令系统的优化设计有两个截然相反的方向。

  • 一个是增强指令的功能,设置一些功能复杂的指令,把一些原来由软件实现的、常用的功能改用硬件的指令系统来实现,这种计算机系统称为复杂指令系统计算机。
  • 另一个是尽量简化指令功能,只保留那些功能简单,能在一个节拍内执行完成的指令,较复杂的功能用一段子程序来实现,这种计算机系统称为精简指令系统计算机。

# 1.1.4 总线

总线(Bus)是一种用于在各个硬件组件之间传输数据、地址和控制信号的通信路径。它是计算机硬件体系结构中的一个关键组成部分,负责协调和管理数据、指令和状态信息在处理器、内存和其他外设之间的流动。

总线可以分为以下几种主要类型:

  1. 数据总线(Data Bus):用于在处理器、内存和外设之间传输数据。
  2. 地址总线(Address Bus):用于在处理器和内存之间传输地址信息,以便处理器知道要读取或写入哪个内存位置。
  3. 控制总线(Control Bus):用于在处理器和其他硬件组件之间传输控制信号,如启动、停止、读/写等。

# 1.2 存储器系统

传统的存储器系统一般分为高速缓冲存储器(Cache)、主存、辅存三级。

  • 主存:主存可由 CPU 直接访问,存取速度快,但容量较小,一般用来存放当前正在执行的程序和数据。
  • 辅存:辅存设置在主机外部,它的存储容量大,价格较低,但存取速度较慢,一般用来存放暂时不参与运行的程序和数据。
  • Cache:当 CPU 速度很高时,为了使访问存储器的速度能与 CPU 的速度相匹配,又在主存和 CPU 间增设了一级 Cache。

# 1.2.1 主存储器

# 1.2.2 辅助存储器

# 1.2.3 Cache 存储器

# 1.3 流水线

流水线技术把一个任务分解为若干顺序执行的子任务,不同的子任务由不同的执行机构负责执行,而这些机构可以同时并行工作。在任一时刻,任一任务只占用其中一个执行机构,这样就可以实现多个任务的重叠执行,以提高工作效率。

# 1.3.1 流水线周期

流水线应用过程中,会将需要处理的工作分为 N 个阶段,最耗时的那一段所消耗的时间为流水线周期。

处理器在一个时钟周期内只能完成一个指令的取指、解码、执行和写回操作。

因此,最耗时的那一段工作所消耗的时间决定了流水线周期。为了提高处理器的性能,设计人员需要尽量减少每个阶段的时间,并优化整个流水线结构。

# 1.3.2 计算流水线执行时间

除了第 1 个任务需要完整的时间外,其他都通过并行,节省下了大量的时间。所以流水线的执行时间可通俗的表 达为:

$ 流水线执行时间 = 第 1 条指令的执行时间+(n-1) *流水线周期 $

例:某计算机系统,一条指令的执行需要经历取指(2ms)、分析(4ms)、执行(1ms)三个阶段,现要执行 100 条指令,利用流水线技术需要多长时间?

理论上来说, 1 条指令的执行时间为: 2ms+4ms+1ms=7ms。 所以理论流水线执行时间为:2ms+4ms+1ms+(100-1)*4=403ms。

# 1.3.3 流水线的吞吐率

流水线的吞吐率(Though Put rate, TP)是指在单位时间内流水线所完成的任务数量或输出的结果数量。

# 1.3.4 流水线的加速比

完成同样一批任务,不使用流水线所用的时间与使用流水线所用的时间之比称为流水线的加速比(speedup ratio)。

# 1.4 其他

  • 缓存系统(Cache System):通过优化缓存系统可以减少内存访问延迟。
  • 分支预测(Branch Prediction):正确预测分支指令可以减少冒险处理时间。
  • 乱序执行(Out-of-Order Execution):乱序执行技术允许处理器在某些情况下重新排列指令的执行顺序,以提高性能。