1.2.2 计算机硬件

冯·诺依曼机的基本思想

冯·诺依曼在研究 EDVAC 时提出“存储程序”思想,奠定了现代计算机的基本结构。

主要特点如下:

  1. 采用存储程序方式:程序和初始数据先存入主存,启动后计算机自动、连续取指并执行,直到程序结束。
  2. 硬件由五大部件组成:运算器、控制器、存储器、输入设备、输出设备。
  3. 指令和数据同形存储:二者在存储器中都以二进制形式保存,计算机通过使用方式识别它们。
  4. 指令和数据都采用二进制编码
  5. 指令由操作码和地址码构成:操作码说明“做什么”,地址码说明“操作谁/数据在哪里”。

计算机的功能部件

中央处理器(CPU)

  • CPU 是执行指令的核心部件。
  • 传统上由运算器控制器组成;现代处理器中通常组织为数据通路控制单元
  • 数据通路的核心包括:
    • 算术逻辑单元(ALU):执行算术与逻辑运算。
    • 通用寄存器组:提供操作数并暂存运算结果。
    • 多路选择器、内部互连等:在各部件间传送数据。
  • 控制单元负责取指、译码并产生控制信号,协调数据通路按正确顺序完成操作。

存储器

  • 按访问特性分为内存外存
  • 内存主要包括主存和高速缓存(Cache);在冯·诺依曼结构中,主存用于存放待执行的程序与数据。
  • 外存用于持久保存数据,如磁盘、固态硬盘;磁带、光盘等可用于长期备份。

外部设备与设备控制器

  • 外部设备(I/O 设备)负责实际输入或输出,如键盘、鼠标、显示器、打印机。
  • 设备控制器负责与主机通信并控制外设,如 USB 控制器、显卡、网卡、磁盘控制器。

总线

  • 总线是各部件之间传递信息的公共通路。
  • CPU、主存和 I/O 接口通过不同层次的总线互连;桥接器负责不同总线之间的数据转发和协调。

本节速记

  • 冯·诺依曼机核心:存储程序 + 二进制 + 五大部件
  • CPU 核心:ALU + 寄存器组 + 控制单元
  • 主存承担工作存储;外存承担持久存储。

1.2.4 计算机系统的层次结构

计算机系统采用多级层次结构:从用户问题到物理器件,各层向上提供更简洁的接口,向下依赖更底层的功能实现。分层使软硬件职责更清晰,也便于系统并行开发和维护。

算法与编程

解决应用问题通常经历:

  1. 把问题抽象为正确的算法。
  2. 使用编程语言把算法写成程序。
  3. 经翻译程序转换为机器可执行的形式。

编程语言要求语法严谨、语义明确,能精确描述执行顺序。

三类编程语言

类型 特点 能否直接执行
机器语言 由 0 和 1 构成,是机器唯一能直接识别的语言
汇编语言 movadd 等助记符表示指令,可读性较强 不能,需汇编器翻译
高级语言 接近自然语言,如 C、C++、Java,开发效率高 不能,需编译或解释

三类翻译程序

  • 汇编程序(汇编器):把汇编语言源程序翻译为机器语言目标程序。
  • 解释程序(解释器):逐条翻译并立即执行,一般不生成独立目标程序。
  • 编译程序(编译器):把高级语言源程序一次性翻译成汇编语言或机器语言目标程序。

操作系统

  • 所有语言处理系统都在操作系统提供的运行环境中执行。
  • 操作系统抽象底层硬件,向程序员提供一台更容易使用的“虚拟机”。

指令集体系结构(ISA)

  • ISA 是软件与硬件之间的关键接口,也是软件可见的硬件功能规范。
  • 主要规定:指令格式、操作类型、寻址方式、可访问寄存器等。
  • 软件依据 ISA 编写或生成机器指令;硬件负责解释并完成这些指令规定的操作。

微体系结构

  • 微体系结构是处理器内部实现 ISA 的具体硬件组织方式。
  • ISA 决定“能做什么”,微体系结构决定“怎么做”。
  • 同一 ISA 可以由不同微体系结构实现,因此软件通常无需修改即可兼容。
  • 设计内容包括数据通路、控制单元、流水线级数、Cache 层次、并行执行机制等。

本节速记

  • ISA 是软硬件分界面
  • 同一 ISA,不同微体系结构;软件仍可兼容
  • 典型层次自上而下:高级语言虚拟机 → 汇编语言虚拟机 → 操作系统虚拟机 → 机器语言机器。

1.2.5 计算机系统的不同用户

按使用计算机完成任务的性质,可分为四类主要角色:

用户类型

用户角色 主要工作层次 典型职责
最终用户 应用程序层 使用办公、浏览器等应用完成任务
系统管理员 操作系统层 配置和维护系统、安装软硬件、管理用户、备份与升级
应用程序员 高级语言/应用层 开发面向办公、娱乐等需求的应用软件
系统程序员 系统软件层 开发操作系统、编译器、数据库管理系统等核心软件

同一人在不同场景中可能承担多种角色。例如,计算机专业学生既可能是网上购物的最终用户,也可能是管理自己电脑的系统管理员,还可能是课程作业的应用程序员。

软硬件层次边界

理解用户角色时,应抓住两个边界:

  • ISA 以下属于硬件实现层,包括 CPU、主存和 I/O 等物理组件。
  • ISA 以上属于软件层,包括系统软件和应用软件。

下层实现通常对上层用户透明:高级语言程序员一般不需要了解 ISA 下方的具体硬件机制。

1.2.6 计算机系统的工作原理

“存储程序”工作方式

程序执行前,先把指令和数据装入主存。启动后,CPU 按地址自动、连续地取指并执行,无需人工逐条干预。

指令执行循环

  1. 取指:根据程序计数器 PC 给出的地址从主存取出指令。
  2. 译码:分析操作码,确定操作类型与所需资源。
  3. 取操作数并执行:读取操作数,由相应部件完成运算。
  4. 写回结果:把结果写回寄存器或存储器。
  5. 更新 PC
    • 顺序指令:PC 增加一条指令的长度。
    • 跳转指令:PC 改为指令指定的目标地址。

从源程序到可执行文件

以 GCC 处理 C 程序 hello.c 为例,生成可执行文件通常经历四个阶段:

阶段 工具 输入 → 输出 主要工作
预处理 cpp hello.chello.i 展开宏、处理条件编译,并把头文件内容并入源文件
编译 cc1 hello.ihello.s 把 C 程序转换为汇编语言程序
汇编 as hello.shello.o 把汇编指令转换为机器码,生成可重定位目标文件
链接 ld hello.o + 库文件 → hello 合并目标文件与库,解析外部符号,生成完整可执行文件

指令执行过程的抽象模型

  • 可执行文件中的代码段由机器指令组成,每条指令用二进制编码表示一个基本操作。
  • CPU 对指令进行“取指—译码—执行—写回”的循环。
  • 这一模型说明软件如何驱动硬件,是进一步学习 CPU 数据通路、控制器和时序机制的基础。

流程速记

程序运行:装入主存 → 取指 → 译码 → 执行 → 写回 → 更新 PC → 循环

C 程序构建:.c → 预处理 → .i → 编译 → .s → 汇编 → .o → 链接 → 可执行文件