计算机系统层次结构

了解基本概念,可能在选择题中考察。

计算机系统的基本组成

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

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

计算机硬件

冯诺依曼结构

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

  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