计算机系统层次结构

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

计算机系统的基本组成

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

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

计算机硬件

冯诺依曼结构

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

  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):
    • 定义:这是为了更方便地编写和理解计算机程序而设计的语言。它们与特定的 硬件平台 相对独立。
    • 特点:
      • 抽象度高,语法通常更接近自然语言或数学符号。
      • 可以在不同的 硬件平台 上运行,只需适当地 编译解释
      • 需要一个 编译器解释器 来将高级语言代码转换为机器代码(或执行)。

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

ProgrammingLanguageLevelscluster_high高级语言 (High-Level Language)cluster_assembly汇编语言 (Assembly Language)cluster_machine机器语言 (Machine Language)HighLevel高级语言• Python, Java, C++• 接近自然语言• 硬件独立• 抽象度高Compiler编译器(Compiler)HighLevel->Compiler编译Interpreter解释器(Interpreter)HighLevel->Interpreter解释Examples💻 代码示例:━━━━━━━━━━━━━print('Hello World')for i in range(10):   print(i)━━━━━━━━━━━━━Examples->HighLevelAssembly汇编语言• 符号和助记符• 架构相关• 比机器语言易读Assembler汇编器(Assembler)Assembly->Assembler汇编AsmExamples💾 代码示例:━━━━━━━━━━━━━MOV AX, 5ADD AX, 3INT 21h━━━━━━━━━━━━━AsmExamples->AssemblyMachine机器语言• 二进制代码 (0,1)• CPU直接执行• 硬件相关Hardware计算机硬件CPU, 内存, 存储Machine->Hardware直接执行BinaryExamples⚙️ 代码示例:━━━━━━━━━━━━━━━━━━10110000 0110000101001000 11000111━━━━━━━━━━━━━━━━━━BinaryExamples->MachineCompiler->Machine生成Interpreter->Machine逐行转换Assembler->Machine转换Abstract抽象程度Abstract->HighLevelAbstract->AssemblyAbstract->Machine

计算机系统的工作原理

从源程序到可执行程序

  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