跳转至

计算机系统的状态机模型

[!note] 状态机模型 - 状态集合S - 激励事件E - 状态转移规则next - 初始状态 image.png - 计算机系统

程序

  • C语言的组成:
    • 变量:计算的对象
    • 语句:计算的操作流程
    • 输入输出函数:让变量与外界交互
  • C程序的状态机模型
    • 状态集合\(S=\{<V, PC>\}\)
    • 激励事件\(E=\{语句\}\)
    • 状态转移规则:语句的语义
    • 初始状态\(S_0=<V_0, main函数的第一条语句>\)

CPU

  • CPU的状态机模型:
    • 状态集合\(S=\{<时序逻辑元件的值>\}\)
    • 激励事件\(E=\{组合逻辑\}\)
    • 状态转移规则next:\(S\times E \rightarrow S\)
      • 语句的语义
      • 由设计中的组合逻辑电路决定
      • 依据:架构师的设计文档
    • 初始状态\(S_0=<复位时时序逻辑元件的值>\)

指令集

  • 指令集是一本手册规范:定义了CPU执行指令的行为
    • 好比:C语言标准手册定义了C程序执行语句的行为
  • 指令集状态机:
    • 状态机和\(S=\{<R,M>\}\)
      • R寄存器
      • M内存
    • 激励事件\(E=\{指令\}\)
    • 状态转移规则next:\(S\times E \rightarrow S\)
    • 初始状态\(S_0=<R_0, M_0>\)

程序如何在计算机上运行

编译

  • 编译器的工作:将C程序的状态机\(S_C\)翻译为指令集的状态机\(S_{ISA}\)
    • \(s_{compile}: \left\{ PC_{c},v_{1},v_{2},v_{3}, \ldots \right\} \rightarrow \left\{ R,M \right\}\)
    • \(e_{compile}: \{语句\} \rightarrow \{指令序列\}\)
    • \(next:S\times E \rightarrow S\)使得

CPU结构设计

  • CPU结构设计的工作:根据指令集的状态机\(R_{ISA}\)用电路实现CPU的状态机\(S_{CPU}\)
    • \(S_{arch}:\{R,M\}\rightarrow \{时序逻辑电路\}\)
    • \(e_{arch}:\{E\}\rightarrow \{时序逻辑电路\}\)

程序如何在计算机上运行

  • 结构设计:根据指令集手册的功能描述,画一张CPU的电路图
  • RTL设计:用RTL代码描述CPU电路图
  • 后端物理设计:根据RTL代码生成版图文件
  • 制造生产:根据版图文件生产芯片
  • 软件编程:编写程序
  • 编译:将程序翻译成指令集手册中描述的指令序列
  • 程序在CPU上执行->指令序列控制CPU芯片电路进行状态转移
    • 使得三个状态机产生联系:\(S_C\sim S_{isa}\sim S_{cpu}\)

总结

\(\(\begin{array}{cccc} & \text { 程序 } & \text { 抽象计算机 } & \text { CPU } \\ \hline \text { 状态 } & \{<V, P C>\} & \{<R, M>\} & \text { \{时序逻辑电路 } \\ \hline \text { 状态转移规则 } & \text { C语言语句的语义 } & \text { 指令的语义 } & \text { 组合逻辑电路 } \\ \hline \mathrm{FM} & \text { C语言标准手册 } & \text { 指令集手册 } & \text { 架构设计文档 } \end{array}\)\) - 程序编译:将语句翻译成语义等价的指令序列 - 结构设计:按照指令语义设计行为等价的登录 - 程序运行:指令序列驱动电路进行状态转移