计算机组成概述(1.概述)


计算机组成原理——第一章

1.1 计算机与案件的更新换代

  1. 摩尔定律:当价格不变,集成电路上可容纳的晶体管的数目,约每隔18个月便会增加一倍。也就是说,我们现在和18个月后花同样价钱买到的CPU,后者的性能是前者的2倍。
  2. 半导体存储器的发展:1970年,仙童半导体公司产出第一个较大容量的半导体存储器。
  3. 微处理机机器字长:32位和64位指的是机器字长。指计算机进行一次整数计算所能处理的二进制数据的位数
  4. *硬件发展:逻辑元件从电子管 -> 晶体管 -> 中小规模集成电路 -> 大规模、超大规模集成电路

1.2 计算机系统硬件

  • 系统软件(管理整个计算机系统,如操作系统OS、数据库管理系统DBMS、标准程序库、网络软件、服务程序)
  • 应用软件(按任务需要编写的程序)
  • 硬件是计算机物理基础。决定了计算机的 “天花板” 、“瓶颈”在哪,软件决定了我们可以把硬件性能发挥到什么程度。

1.2.1 计算机硬件

1. 冯·诺依曼机的基本思想

冯·诺依曼在研究EDVAC及时提出了“存储程序”的概念。特点如下:

  • 采用存储程序的结构,将指令以二进制代码的形式,事先输入计算机的主储存器,然后按其在储存器中的首地址执行程序的第一条指令,以后就按该程序的规定顺序执行其他指令,直至程序执行结束。
  • 计算机硬件由运算器、存储器、控制器、输入设备、输出设备组成
  • 指令和数据以同等地位存储在存储器中

Schematic_diagram_of_von_Neumann_machine

图中实线表示数据传输,虚线表示控制线以及反馈线

  • 输入设备:将信息转成及其能识别的形式

  • 存储器:存数据和程序。存储器还分为主存和辅存

    • 主存:内存
    • 辅存:机械硬盘、固态硬盘等等。平时应用程勋存在辅存中,需要的时候才读入主存,所以辅存也算是一种I/O设备
  • 运算器:alu算数运算和逻辑运算

  • 输出设备:将结果转成人们熟悉的形式

  • 控制器:解析指令 & 指挥程序运行

  • 以上五个设备总和:硬件

  • 数据程序:软件

在计算机系统中,软件和硬件在逻辑上是等效的

  • eg:乘法运算,可以设计专门的硬件电路去实现,也可以用软件执行多次加法来实现

2. 冯·诺依曼机的特点

  • 计算机有五大部件组成(输入输出设备统称I/O设备(input & output)

  • 指令和数据,以同等地位存于存储器,可以用地址去寻访

  • 指令和数据用二进制表示

  • 指令有操作码和地址码组成

  • 可以存储程序

  • 以运算器为中心(这样会导致各种数据传输效率低下,所以线代计算机以存储器为中心,以下是原理图)

Schematic_diagram_of_modern_computer

由于运算器控制器之间逻辑关系十分紧密,所以在大规模集成电路工艺出现之后,这两个部件通常是整合在一个芯片上的,也就是我们现在的CPU。以下是简化原理图。

Simplified_schematic_d_agram_of_computer

在计算机组成原理中,CPU和主存储器统称主机,而且并不是指平时日常生活中的电脑主机

graph LR
A(硬件) -->B(主机)
B -->B1(CPU)
B -->B2(主存)
A -->C(IO设备)
C -->C1(辅存)
C -->C2(输入设备)
C -->C3(输出设备)
B2 -->D(存储器)
C1 -->D
B1 -->E(运算器)
B1 -->F(控制器)

1.3 硬件各个部件

1.主存储器

MAR:地址寄存器

MDR:数据寄存器

线代计算机通常把MAR&MDR集成在CPU内

graph TB
subgraph memory
A[存储体] 
subgraph register
	MAR(MAR地址寄存器)
	MDR(MDR数据寄存器)
end
end

在MAR给个地址,MAR去存储器寻找对应的数据,然后存放至MDR。可以类比为下图:

graph TB
subgraph memory
A[仓库,机器人去找货物] 
subgraph register
	MAR(MAR机器人,给机器人地址) 
	MDR(MDR柜台,机器人给你货物)
end
MAR -->A
A -->MDR
end

其中,你要去取这个货物,就好比CPU要去取存储器的数据,从而完成整个数据访问过程。

如果要存数据,就把要存的数据放在MDR,对应地址给MAR,然后通过总线把数据存进存储体(仓库)。

  • 存储体

    本身会被分为一个个的存储单元,按地址存储。

    • 存储单元:每个存储单元存放一串二进制代码,每个地址对应一个存储单元。

    • 存储自(word):存储单元中二进制代码的组合

    • 存储字长:存储单元中二进制代码的位数,通常是8bit的整数倍

    • *存储元:存二进制的电容,每个存1bit

    • MAR位数反映存储单元的个数

  • eg:MAR = 8 位 -> 总共有 2的8次方 个存储单元

    • MAR位数 = 存储字长

    • eg:MDR = 32位 -> 每个存储单元可存放32bit,一个字 = 32 bit

    • 字(word)和字节(byte)

      一个字节(byte)= 8 bit

      1B = 一个字节,1b = 1个bit

2. 运算器

用于实现算术运算(加减乘除)和逻辑运算(与或非)

ACC: 累加器,用来存放操作数 / 运算结果

MQ: 乘商寄存器,惩处运算用来存放操作数 / 运算结果

x: 通用的 操作数寄存器,存放操作数

ALU: 算术逻辑单元,实现算术运算和逻辑运算

ACC 被加数、和 被减数、差 乘积高位 被除数、余数
MQ 成熟、乘积低位
X 加数 减数 被乘数 除数

3. 控制器

CU: 控制单元,分析指令,给出控制信号

IR:指令寄存器,存放当前执行的指令

PC:程序计数器,存放吓一跳指令的地址,有自动+1的功能

完成一条指令的流程:

  • 取指令:PC
  • 分析指令:IR
  • 执行指令:CU
  • 指令:操作码 +地址码
  • OP(IR):取操作码
  • Ad(IR):取地址码
    • CPU区分指令和数据的依据:指令周期的不同阶段

schematic_diagram

  • 运算器的核心部件是ALU,控制器的核心部件是CU。

1.4 计算机系统层次结构

代码需要翻译成机器语言,CPU在执行这些机器指令的时候,还需要细分为更细的小步骤来执行,这些小步骤称为微指令/微操作

用微程序机器的微指令,逐步解析传统机器的每一条机器指令,并执行。

这样设计程序是很不方便的,所以现在出现了符号式程序设计语言,也就是汇编语言。识别汇编语言的机器叫虚拟机器。(因为虽然程序员看这台机器,好像可以直接识别汇编语言,但其实机器不可能真的识别出汇编语言,汇编语言必须先翻译成机器语言。才叫虚拟机器)

graph TB
	subgraph software
	M4(M4虚拟机器--高级语言机器)
	M3(M3虚拟机器--汇编语言机器)
	M2(M2虚拟机器--操作系统机器)
	end
	subgraph hardware
	M1(M1虚拟机器--机器语言机器)
	M0(M0虚拟机器--微指令系统)
	end
	M4 -->M3
	M3 -->M2 
	M2 -->M1
	M1 -->M0

翻译程序有以下三类:

  • 汇编程序:汇编器

  • 解释程序:解释器

  • 编译程序:编译器

  • 汇编语言是一种 “助记符”,帮助人类记忆用的,本质上和机器语言是一一对应的。

  • 高级语言需要先经过汇编,再翻译成机器语言。如果使用其他的库函数,还需要进行链接。使用编译程序

  • 有的高级语言不是通过编译程序,而是用解释器,将程序翻译成与之对等的机器语言。很多脚本类的语言都是使用解释器,python、JavaScript,shell等等。

  • 编译程序:将高级语言编写的源程序全部语句一次全部翻译成机器语言,而后在执行机器语言程序(只能翻译一次)

    会生成可执行文件,如 *.exe程序等等。

  • 解释程序:将源程序的一条语句翻译成对应于机器语言的语句,并立即执行,紧接着再翻译下一句(每次执行都需要翻译)

  • 编译型的执行效率更高一些,解释性的执行效率更低一些。

  • 编译、汇编、解释程序,可统称为 翻译程序

  • *计算机体系结构学习的是:如何设计硬件与软件之间的接口

    计算机组成原理学习的是:如何用硬件实现所定义的接口

1.5 计算机性能指标

1 主储存器的性能指标

  • MAR位数反映存储单元最多支持的个数,可支持 2的MAR次方

  • MDR位数=存储字长=每个存储单元的大小

  • 总容量 = 存储单元个数 * 存储字长 bit = 存储单元个数 *存储字长 / 8 Byte1 Byte = 8 bit

    eg:MAR=32位,MDR=8位,总容量 = 2^32 * 8 bit = 4GB

$$
K=2^{10}\\M=2^{20}\\G=2^{30}\\T=2^{40}
$$

2 cpu的性能指标

  • cpu的时钟周期:
    把CPU的每一个脉冲信号的时间周期叫做cpu的时钟周期,单位是微秒或纳秒。

$$
CPU主频(时钟频率) = \frac{1}{CPU时钟周期}
$$

  • CPI(Clock cycle Per Instruction):执行一条指令所需的时间周期数

    不同的指令,不同的CPI;甚至相同的指令,CPI也可能不同

$$
执行一条指令的耗时 = \frac{CPI}{CPU的时钟周期} \\
CPU执行时间(整个程序耗时) = \frac{CPU时钟周期}{主频} = \frac{(指令条数*CPI)}{主频}
$$

  • IPS (Instructions Per Second) :每秒执行多少条指令

    • 可细分为KIPSMIPS
      $$
      IPS = \frac{主频}{平均CPI}
      $$
  • FLOPS (Floating-point Operations Per Second) 每秒执行多少次浮点运算

    • 可细分为KFLOPSMFLOPS, GFLOPSTFLOPS
  • 此处K、M、G、T为数量单位,要与文件大小的指标区分开
    $$
    K=kilo=10^3 \\ M=million=10^6 \\ G=giga=10^9 \\ T=tera=10^{12}
    $$

3 系统整体的性能指标

  • 数据通路带宽:数据总线一次所能并行传送的信息的位数(各个硬件部件通过数据总线传输数据)

  • 吞吐量:指系统在单位时间内处理请求的数量

  • 响应时间:指从用户向计算机发送一个请求,到系统对这个请求作出响应,并获得它所需的结果 的等待时间

  • 基准程序(跑分软件):用来测量计算机处理速度的一种程序。

    便于被测量的计算机性能可以与运行相同的程序的其他计算机性能进行比较

思考问题:

  • Q:主频高的CPU一般比主频低的CPU快吗?
  • A:不一定,需要看CPI,以及不同指令系统
    (如果指令系统做过优化,即使主频和CPI不占优势,也有可能在某个方面性能更强)

文章作者: 拓佑豪
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 拓佑豪 !
评论
  目录