本地资料计算机系统层次结构
SCHEDULE LOCAL10 个小节覆盖真题 20092019
关联考点计算机体系结构5计算机结构2做相关真题 · 7 道 →
做相关真题 · 7 道选中文字可高亮或加下划线
选中文字高亮 · 下划线

计算机系统层次结构

复习提示(中优先级):重点理解冯·诺依曼机的存储程序思想、五大部件及软件到机器指令的转换层次。

真题练习

需要熟悉 冯·诺依曼结构 和计算机系统中几个层次的语言,并能说明硬件与软件之间的关系。

计算机系统的基本组成

硬件 系统和 软件 系统共同构成了一个完整的计算机系统。硬件指的是有形的物理设备,是计算机系统中实际物理装置的总称。软件指的是在硬件上运行的程序和相关的数据及文档。

硬件软件 关系:硬件是计算机的物理部分,它提供了运行软件所需的基础设施,而软件则是 指令集指导 硬件如何工作以执行特定的任务。

计算机硬件

冯·诺依曼结构

冯·诺依曼提出的 “存储程序” 的思想奠定了当代计算机的基本结构,以此概念为基础的各类计算机通称为 冯·诺依曼机,其特点如下:

  1. 计算机 硬件 系统由 运算器存储器控制器输入设备输出设备 5 大部件 组成。
  2. 指令和数据 以同等地位存储在 存储器 中,形式上没有区别,但计算机应能区分它们。
  3. 指令和数据均用 二进制代码 表示,指令包含操作码和地址码,操作码指出操作的类型,地址码指出操作数的地址。
  4. 运算器 为中心,其他部件配合其工作。
冯·诺依曼机由运算器、控制器、存储器、输入设备和输出设备组成

其中五大部件的具体功能如下:

  1. 运算器(ALU):负责算术运算(加减乘除)和逻辑运算(与或非)。
  2. 控制器(CU):从 存储器 中读取指令,解码并控制其他部件协同工作。
  3. 存储器(Memory):存储程序指令和运算数据(如内存、硬盘)。
  4. 输入设备(Input):接收外部数据(如键盘、鼠标)。
  5. 输出设备(Output):将结果反馈给用户(如显示器、打印机)。

计算机软件

系统软件和应用软件

  1. 系统软件 (System Software)
    • 定义:系统软件 是直接运行在 硬件 上的 软件,为其他 软件 提供一个运行和执行的平台。
    • 功能:
      • 管理和控制计算机 硬件,使其能够与 应用软件 进行交互。
      • 提供 应用软件 开发的基础服务和接口。
  2. 应用软件(Application Software)
    • 定义:应用软件 是构建在 系统软件 之上,为用户提供特定功能或执行特定任务的 软件
    • 功能:
      • 解决用户的具体问题或满足特定需求。
      • 提供与用户的直接交互界面。

三个级别的语言

  1. 机器语言 (Machine Language):
    • 定义:这是 计算机硬件 直接理解和执行的语言,它是用 二进制代码 表示的(通常是 0 和 1)。
    • 特点:
      • 与特定计算机架构紧密相关。
      • 非常低级:每条机器代码对应 硬件 的一个操作。
      • 对于人类来说,阅读和编写是困难的。
  2. 汇编语言 (Assembly Language):
    • 定义:这是一种低级编程语言,它使用符号和助记符(而非 二进制代码)来代表机器语言的指令。
    • 特点:
      • 与特定计算机架构紧密相关。
      • 比机器语言更容易理解和编写。
      • 需要一个汇编器来将汇编代码转换为机器代码。
  3. 高级语言 (High-Level Language):
    • 定义:这是为了更方便地编写和理解计算机程序而设计的语言。它们与特定的 硬件平台 相对独立。
    • 特点:
      • 抽象度高,语法通常更接近自然语言或数学符号。
      • 可以在不同的 硬件平台 上运行,只需适当地 编译解释
      • 需要一个 编译器解释器 来将高级语言代码转换为机器代码(或执行)。

三种语言的关系可以参照下图理解:

机器语言、汇编语言和高级语言之间的抽象与翻译关系

计算机系统的工作原理

从源程序到可执行程序

  1. 预处理(Preprocessing):预处理 器会执行诸如宏替换、文件包含、条件编译等任务,仅限于某些语言,比如 CC++
  2. 编译(Compilation):编译 器将源代码或 预处理 后的源代码转换为中间代码或目标代码,目标代码通常是特定平台的汇编语言代码或机器代码。
  3. 汇编(Assembly):汇编 器将汇编语言代码转换为机器代码。
  4. 链接(Linking):链接 器将一个或多个目标文件与所需的库文件链接在一起,生成一个可执行文件。这个步骤确保所有函数或方法的调用都能找到它们在内存中的正确位置。
  5. 加载和执行(Execution):当你运行可执行文件时,操作系统的 加载器 会将它加载到内存中。CPU 开始按照程序的指令执行任务。
  # 预处理
gcc -E hello.c -o hello.i
  # 编译
gcc -c hello.c -o hello.o
  # 汇编
gcc -S hello.c
  # 链接
gcc hello.o -o hello
  # 加载和执行
./hello

层次边界与“程序开始执行”的过程

从体系结构角度看,计算机系统可沿抽象层次理解:应用程序通过高级语言与库表达问题,编译器和汇编器把它们翻译为 ISA 规定的指令,操作系统负责进程、内存和设备等资源,硬件再按照指令驱动数据通路。高层不需要知道每个触发器怎样翻转,底层也不直接理解“函数”或“对象”;层次之间依靠接口和约定连接,而不是每层都复制下一层的全部细节。

存储程序原理要求指令和数据都以二进制形式存放在存储器中。CPU 以程序计数器给出的地址取出下一条指令,送入指令寄存器译码,再按指令要求访问寄存器、主存或 I/O,最后更新 PC 到顺序地址、分支目标或异常入口。控制器负责决定何时发出控制信号,数据通路负责在寄存器、ALU 和存储器之间搬运数据;二者配合而不是二选一。

翻译、链接与加载分别解决什么

编译或汇编后形成的目标文件通常还不能独立运行:其中可能有外部符号引用、尚待确定的地址和重定位信息。链接器把多个目标文件与库组合,解析“某个调用到底对应哪个定义”,并按链接方式安排地址;加载器则在程序被启动时建立进程地址空间、把需要的代码和数据映射或装入内存,并设置初始栈、入口地址等运行环境。

静态链接把所需库代码在链接阶段复制进可执行文件,程序启动后不再依赖相应动态库版本;动态链接把部分绑定推迟到装载或首次调用时,多个进程可共享同一库的代码页。无论采取哪种方式,都不要把“链接”说成 CPU 执行指令的步骤:链接解决符号与地址,加载解决一次运行所需的内存映像,执行才是 CPU 反复取指、译码和运行指令。