Skip to content

01 从冯诺依曼体系结构开始讲起

为什么要了解计算机硬件

  • 硬件是操作系统和软件的基础
  • Linux 内核运行在计算机硬件之上,负责管理硬件资源并提供服务
  • 程序的性能问题是 Linux 系统的一个重要主题,涉及到对计算机体系结构的深入了解
  • 学习和使用 Linux 不一定需要了解硬件,但是了解硬件能够更好地学习和使用 Linux 系统

计算机:硬件(CPU、GPU、内存、硬盘、网卡等) - 操作系统(Windows、Linux、macOS 等) - 应用软件

什么是冯诺依曼体系

  • 由约翰·冯·诺依曼在 1945 年提出
  • 是一种计算机硬件设计原则和架构
  • 计算机由运算器、控制器、存储器、输入设备、输出设备五个部分组成
  • 大多数现代计算机都采用冯诺依曼体系结构

913defe1-dd8b-474b-9bb8-d894b9637bc9

简介

冯·诺依曼体系结构(Von Neumann Architecture)是由约翰·冯·诺依曼(John von Neumann)在 1945 年提出的一种计算机设计架构,它奠定了现代计算机的基础。这个体系结构的主要特点是使用单一的存储器存储程序指令和数据,并且采用顺序执行指令(按地址访问)的方式。

核心思想

冯诺依曼体系结构的核心思想是将程序和数据存储在同一个内存空间内,这样计算机就可以通过统一的处理机制来执行程序和处理数据。这种设计使得计算机能够更灵活地处理各种任务。

基本组成

冯诺依曼体系结构的核心组成部分包括:

  • 中央处理单元(CPU):负责执行计算机程序中的指令。CPU 包含以下两个主要部分:
    • 运算器(ALU,Arithmetic Logic Unit):执行算术运算(如加、减、乘、除)和逻辑运算(如与、或、非)。在大多数现代计算机中,控制器和运算器被集成在一个芯片上,称为微处理器。
    • 控制单元(CU,Control Unit):负责指挥计算机的操作,解码指令并生成控制信号,协调其他组件的工作。
    • 寄存器(Registers):是 CPU 内部用于存储临时数据和指令的高速存储单元。寄存器包括程序计数器(PC, Program Counter,用于存储当前指令的地址)、指令寄存器(IR, Instruction Register)、累加器(ACC, Accumulator)等。
  • 内存(Memory):用于存储程序和数据。内存是计算机中唯一能够直接被 CPU 读取和写入的存储区域。冯诺依曼体系结构中,程序和数据存储在同一个内存中,这也是其显著特征之一。内存通常是随机存取存储器(RAM)。内存中的内容可以被读取和写入,CPU 通过内存总线与内存进行数据交换。
  • 输入设备(Input Devices):如键盘、鼠标、扫描仪等,用于将外部数据输入到计算机中。
  • 输出设备(Output Devices):如显示器、打印机、扬声器等,用于将计算机处理后的数据以人类可理解的形式展示出来。
  • 存储设备(Storage Devices):如硬盘、固态硬盘等,用于长期保存数据和程序,即使计算机关闭电源,数据仍然保留。
  • 总线(Bus):连接计算机各部分的通信线路。主要包括数据总线(传输数据)、地址总线(传输内存地址)和控制总线(传输控制信号)。
    • 数据总线(Data Bus):用于传输数据在 CPU、内存和 I/O 设备之间。
    • 地址总线(Address Bus):用于传输内存地址,指明数据或指令的存储位置。
    • 控制总线(Control Bus):用于传输控制信号,以协调不同部件之间的操作。

工作原理

冯诺依曼体系结构的计算机按照以下步骤工作:

  1. 取指令(Fetch):控制器从内存中取出下一条指令,程序计数器 PC 指示当前指令所在的内存地址。
  2. 解码(Decode):控制器将取出的指令解码,确定需要执行的操作和操作数。
  3. 执行(Execute):控制器将指令发送给运算器执行,运算器完成所需的算术或逻辑操作。
  4. 存储(Store):运算结果存储到内存或寄存器中。
  5. 重复(Repeat):程序计数器更新到下一条指令的地址,重复以上步骤直到程序结束。

冯诺依曼瓶颈

冯诺依曼体系结构的一个主要限制是冯诺依曼瓶颈。由于程序和数据共享同一个内存和总线,CPU 在访问数据和指令时可能会遇到带宽瓶颈,影响系统的性能。这种瓶颈在现代计算机中通常通过引入缓存(Cache)和多级缓存体系来缓解。

冯诺依曼体系的优劣势

  • 优势:灵活性高,易于实现和扩展,并且适用于各种应用场景
  • 劣势:计算与存储分离,使得指令执行速度和数据传输速度之间的不匹配

特点

  • 程序存储:程序和数据存储在同一个内存中,计算机可以灵活执行各种程序。
  • 统一处理:统一的处理机制,使得计算机能够高效地执行指令。
  • 顺序执行:指令按顺序逐条执行,简化了控制逻辑。

优点

  • 简单易实现:设计简单,易于实现和理解。
  • 灵活性强:适用于多种应用场景,通用性强。

缺点

  • 冯诺依曼瓶颈:由于程序和数据共享同一条内存总线,导致数据传输速率受限,形成性能瓶颈。
  • 安全性问题:程序和数据混合存储,容易引发安全问题,如代码注入攻击。