计算机系统层次结构

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

计算机系统的基本组成

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

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

计算机硬件

冯·诺依曼基本思想

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

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

计算机的功能部件

  1. 运算器 (Arithmetic Logic Unit, ALU)
    • 功能:负责执行所有的算术运算(如加、减、乘、除)和逻辑运算(如AND、OR、NOT、比较等)。
    • 组件:包括运算部件(执行具体的数学和逻辑操作)和临时存储用的寄存器。
  2. 存储器 (Memory)
    • 功能:存储数据和指令。主存储器(如RAM)临时存储正在运行的程序和数据,而辅助存储器(如硬盘、SSD)用于长期存储。
    • 种类:包括随机存取存储器(RAM)、只读存储器(ROM)、硬盘、SSD等。
  3. 控制器 (Control Unit)
    • 功能:管理和协调计算机的各个部件,确保指令按正确的顺序执行,并控制数据流。
    • 组件:包括指令寄存器、程序计数器和一个解码器,它们共同参与指令的获取、解码和执行。
  4. 输入设备 (Input Devices)
    • 功能:允许用户或其他系统将数据输入计算机。
    • 重要性:它们构成了用户与计算机系统之间的主要交互界面。
  5. 输出设备 (Output Devices)
    • 功能:显示或输出计算机处理的结果。
    • 例子:显示器、打印机、扬声器、投影仪等。

计算机软件

系统软件和应用软件

  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