# 计算机系统概论


# 计算机系统

# 冯诺依曼计算机的组成

1. 计算机由运算器、控制器、存储器、输入、输出设备五个基本部件组成
2. 各部件功能:
存储器不仅存储数据,还能存储指令
控制器自动取出指令执行
运算器执行基本算术运算和逻辑运算
通过输入、输出设备进行通信
3. 内部以二进制表示指令和数据
4. 采用存储程序方式运行

# 计算机执行


CPU (Central Processing Unit): 中央处理器
PC (Programming Count): 程序计数器
MAR (Memory Address Register): 存储器地址寄存器
MDR (Memory Data Register): 存储器数据寄存器
ALU (Arithmetic and Logic Unit): 算术逻辑部件
IR (Instruction Register): 指令寄存器
GPRs (General Purpose Register): 通用寄存器
OP (Operation Code): 操作符
addr:地址位


# 计算机工作方式

  1. 根据 PC 取指令
  2. 指令译码
  3. 取操作数
  4. 指令执行
  5. 回写结果
  6. 修改 PC 的值
  7. 执行下一条指令

# 翻译程序

汇编程序 (Assembler):汇编语言源程序→机器语言目标程序
编译程序 (Complier):高级语言源程序→机器级目标程序
解释程序 (Interpreter):将高级语言语句逐条翻译成机器指令并立即执行,不生成目标文件。
常见编译型语言:C、C++、汇编等
常见解释型语言:Python、JavaScript、PHP 等
Java 为编译 - 解释型语言


# 典型程序的转换处理过程


.c 文件首先经过预处理,包含头文件和定义,形成.i 源文件,然后通过编译为汇编语言.s 文件,接着通过汇编程序形成.o 可重定向目标程序,最后再与其他.o 文件链接形成可执行目标程序.exe 文件

# hello 程序执行的数据流动过程

  1. 通过键盘输入./hello,shell 命令行处理将字符逐一读取到寄存器,再放入内存中
  2. 从硬盘上加载 hello 程序到主存上
  3. 执行 hello 程序,CPU 从主存中逐一读取指令,将数据由主存到寄存器再输出到显示器

# 程序开发的支撑

语言处理程序:

  1. 编辑器编写源文件
  2. 翻译转换程序处理源文件
  3. 编译方式:预处理程序,编译器,汇编器,链接器
  4. 解释方式:解释程序

操作系统:

  1. 语言运行时的系统
  2. 操作系统内核
  3. 指令集合系结构
  4. 计算机硬件

# 计算机性能评价

计算机有两种不同的性能

  • Time to do the task
    响应时间(response time)
    执行时间(execution time)
    等待时间或时延(latency)
  • Tasks per day, hour, sec, ns. ..
    吞吐率(throughput)
    带宽(bandwidth)
  • 要求吞吐率高的场合,例如:
    多媒体应用(音 / 视频播放要流畅)
  • 要求响应时间短的场合:例如:
    事务处理系统(存 / 取款速度要快)
  • 要求吞吐率高且响应时间短的场合:
    ATM、文件服务器、Web 服务器等

CPU 执行时间 = CPU 时钟周期数 / 程序 X 时钟周期
= CPU 时钟周期数 / 程序 ÷ 时钟频率
= 指令条数 / 程序 X CPI X 时钟周期
CPU 时钟周期数 / 程序 = 指令条数 / 程序 X CPI
CPI = CPU 时钟周期数 / 程序 ÷ 指令条数 / 程序
对于某一条特定的指令而言,其 CPI 是一个确定的值。但是,对于某一个程序或一台机器而言,其 CPI 是一个平均值,表示该程序或该机器指令集中每条指令执行时平均需要多少时钟周期。
假定 CPIi 和 Ci 分别为第 i 类指令的 CPI 和指令条数,则程序的总时钟数为
总时钟数 =i=1nCPIi×Ci\displaystyle \sum_{i=1}^nCPI_i\times C_i
CPU 时间 = 时钟周期 ×i=1nCPIi×Ci\times\displaystyle\sum_{i=1}^nCPI_i\times C_i

# Amdahl 定律

基本思想:对系统中某部分(硬件或软件)进行更新所带来的系统性能改进程度,取决于该部分被使用的频率或其执行时间占总执行时间的比例。

改进后的执行时间=改进部分执行时间改进部分的改进倍数+未改进部分执行时间改进后的执行时间 = \displaystyle \frac{改进部分执行时间}{改进部分的改进倍数}+ 未改进部分执行时间