1.1 计算机发展历程
1.1.1 国外计算机发展概况
- 1946年,电子数字计算机ENIAC(电子数字积分计算机),第一台计算机
- 计算机的发展历程
- 1.第一代计算机:电子管计算机(1946-1958)
- 2.第二代计算机:晶体管计算机(1958-1964)
- 3.第三代计算机:集成电路计算机(1964-1971)
- 4.第四代计算机:超大规模集成电路计算机(1971-至今)
1.1.2 摩尔定律
- 摩尔定律:当价格不变时,集成电路上可容纳的晶体管数量大约18-24个月翻一番,性能也将提升一倍。
1.1.3 集成电路工艺发展概况
- 略
1.1.4 我国计算机发展概况
- 略
1.2 计算机系统的组成
- 一台完整的计算机包括硬件和软件两部分,还有一部分固化的软件称为固件,兼具软件和硬件的特性,如个人计算机的BIOS。
- 固件是将软件存入只读存储器中
- 计算机系统包含软件系统和硬件系统。
1.2.1 计算机硬件系统
- 计算机硬件系统是构成计算机系统的电子线路和电子元件等物理设备的总称。
- 硬件是构成计算机的物质基础,是计算机的系统核心。
- 冯诺伊曼体系结构
- 采用二进制作为数字计算机数制基础的理论
- 0和1两个状态更容易用物理状态实现
- 适合采用布尔代数的方法实现运算电路
- 采用存储程序和程序控制的思想
- 存储程序就是将解题的步骤编制成程序,然后将程序和运行程序所需的数据以二进制的形式存放到存储器中。
- 程序控制是指计算机中的控制器按照地址访问存储器,从存储器中取出指令,并按顺序执行,控制各功能部件进行相应的操作,完成数据的加工处理。
- 存储程序和程序控制是冯诺伊曼结构计算机的主要思想。
- 冯诺依曼计算机的硬件系统包含
- 运算器
- 控制器
- 存储器
- 输入设备
- 输出设备
- 运算器与控制器合称为中央处理器(CPU),CPU和存储器通常称为主机,输入设备和输出设备通常称为输入输出设备,由于输入输出设备位于主机的外部,也称为外部设备。
- 与CPU组成主机的存储器指的是内存储器
1. 存储器
- 存储器的主要功能是存放程序和数据。
- 程序是计算机操作的依据
- 数据是计算机操作的对象
- 在存储器中,程序和数据都是用二进制形式表示的
- 程序和数据统称为信息
- 存储器的工作模式
- 读
- 写
- 存储器的工作原理
- 按地址进行访问,读写数据
2. 运算器
- 运算器是一种用于信息加工处理的部件,对数据进行算数运算和逻辑运算。
- 算术运算是按照算术规则进行的加减乘除等运算
- 逻辑运算一般泛指非算术运算,如与、或、非等。
- 运算器通常由算术逻辑单元(ALU)和一系列寄存器组成。
- 算术逻辑单元是完成算术与逻辑运算的部件
- 寄存器用于存放运算操作数
- 累加器除存放运算操作数,在连续运算中用于存放中间结果和最后结果。
- 一般将运算器一次能处理的二进制位数称为机器字长
- 机器字长是计算机的重要性能指标。
3. 控制器
- 控制器的基本功能
- 产生指令执行过程中所需要的控制信号
- 控制信号的形式
- 电平信号
- 脉冲信号
- 控制信号的产生方式
- 微程序
- 硬布线
- 控制相关功能部件执行相应操作
- 控制器是整个计算机的指挥中心,使计算机各部件协调的工作。
- 计算机中的信息类别
- 控制流信息,即操作命令
- 控制流信息的发源地是控制器
- 控制器产生控制流信息的依据
- 机器指令
- 状态寄存器
- 时序电路
- 数据流信息,受控制流信息的控制
4. 输入设备
- 输入设备是将信息输入计算机的外部设备
- 输入设备是将人们熟悉的信息形式转成计算机能接收并识别的信息形式。
- 输入设备与主机之间通过接口连接。
5. 输出设备
- 输出设备是将计算机运算结果转换成人们和其他设备能接收和识别的信息形式的设备。
- 输出设备与主机之间通过接口连接。
- 外存储器也是计算机中重要的外部设备
6. 系统互连
- 在现代计算机中使用较多的系统互连方案为:总线互连方案。
- 总线(Bus)是连接两个或多个设备(部件)的公共信息通路。
- 总线主要由数据线、地址线、控制线组成。
- CPU连接计算机中各主要部件的总线称为系统总线。
1.2.2 计算机软件系统
- 计算机软件是将解决问题的思想、方法和过程用程序进行描述
- 程序是软件的核心组成部分。
- 程序通常存储在存储介质中。
- 一台计算机中全部程序的集合称为这台计算机的软件系统
- 计算机软件按其功能分成
- 应用软件
- 应用软件是用户为解决某种问题而编制的一些程序
- 系统软件
- 系统软件用于对计算机系统进行管理、调度、监视和服务等,其目的是方便用户、提高计算机使用效率、扩展系统功能。
- 几种重要的系统软件
- 操作系统
- 操作系统是管理计算机中各种资源、自动调度用户作业、处理各种中断的软件。
- 操作系统管理的资源通常有
- 硬件
- 软件
- 数据信息
- 语言处理程序
- 数据库管理系统
- 硬件系统与软件系统的关系
- 相互依存
- 硬件是软件运行的基础
- 软件是硬件发挥作用的重要途径
- 逻辑等效性
- 计算机中的部分功能可由硬件实现,也可由软件实现。
- 协同发展
- 软件系统与硬件系统相互促进发展
1.3 计算机系统的层次结构
1.3.1 系统层次结构
- 操作系统层用于对计算机系统的硬件和软件资源进行统一管理和调度,提高计算机系统的使用效率,方便用户使用计算机。
- 操作系统层为用户和程序提供了使用计算机硬件资源的接口
- 第1、2、3层是硬件层
- 是计算机系统的基础和核心
- 计算机的所有功能最终都由硬件完成
- 第4、5、6层是软件层
- 第4层面向机器,为满足高层的需要而设置的
- 第5、6层是面向应用的,为程序员解决应用问题而设置的。
1.3.2 各层之间的关系
- 计算机系统层次结构中,高层是低层功能的扩展,低层是高层的基础
- 站在不同层次观察计算机会得到不同的概念
- 不同层次所看到的计算机属性有所不同
- 低层的具体实现对于高层是透明的
- 计算机结构的层次划分不是绝对的
- 第三层指令集架构层,是计算机软件系统和硬件系统之间的界面和纽带(分界线)
1.3.3 软件和硬件的逻辑功能等价性
- 计算机中的部分功能可由硬件实现,也可由软件实现。
1.4 计算机性能指标和评价
1.4.1 基本性能指标(非时间指标)
1. 机器字长
- 机器字长一般是指CPU一次能处理的数据位数,用二进制数的长度来衡量
- 机器字长一般与计算机内部寄存器、运算器、数据总线的位宽相等
- 机器字长一般以字节(Byte)为基本单位,不同计算机的字长可以不同,但是必须都是字节的整数倍
- 现代计算机的字长一般为32位或64位。
- 机器字长对计算机性能的影响
- 影响计算精确度
- 字长越长,计算精确度越高,反之计算精确度越低
- 影响数据的表示范围和精度
- 字长越长,定点数的表示范围越大,浮点数的表示范围越大、精度越高。
2. 总线宽度
- 总线宽度是数据总线一次能并行传送的最大信息位数。
3. 主存容量
- 主存容量是指主存能存储的最大信息量,一般使用M×N表示
- M表示存储单元数,也称字容量
- 存储单元的大小一般为字节的整数倍,M表示存储单元数,每个存储单元为若干个字节,相当于表示可以存储多少个字节,也称字容量
- N表示每个存储单元存储的二进制位数,也称位容量
- 每个存储单元中存储的为若干位的二进制数,一个二进制数为一个bit(比特,位),所以也称位容量
- 增加储存容量,能减少程序运行期间访问储存的次数,有利于提高程序的执行速度,也有利于计算机性能的提高。
- 内存容量足够,需要使用到的程序指令都在内存中,无需从外存中调入,所以可以减少访问外存的次数
- 存储容量与地址线数量的对应关系
- 1K存储单元 => 10根地址线
- 1K = 210 = 1024,使用二进制进行表示需要10位的0或1,一根地址线传输一位二进制数,所以1K存储单元需要10根地址线
- 1M存储单元 => 20根地址线
- 1M = 220
- 1G存储单元 => 30根地址线
- 1G = 230
4. 存储带宽
- 存储带宽是单位时间内与主存交换的二进制信息量
- 常用单位:B/s(字节/秒)
- 影响存储带宽的指标包括
- 数据位宽
- 数据位宽越大,一次能并行传输的数据位数越多,存储带宽越大。
- 数据传输速率
- 数据传输速率越大,单位时间内能传输的数据越多,存储带宽越大
1.4.2 与时间有关的性能指标
- 时间是衡量计算机系统性能最基本的标准
- 执行同一程序所需要的时间越少,表明该计算机的性能越高
- CPU执行时间也称为CPU时间,是CPU真正花费在程序上的时间
- CPU执行时间包括
- 执行用户程序本身所花费的CPU时间(用户CPU时间)
- 为执行程序而花费在操作系统上的时间(系统CPU时间)
1. 主频 f
- 主频是CPU内核工作的时钟频率,是CPU内数字脉冲信号振荡的速率。
2. 时钟周期
- 时钟周期是计算机中最基本的、最小的时间单位
- 在一个时钟周期内,CPU仅完成一个最基本的动作
- 时钟周期是时钟频率的倒数,也称为节拍周期或T周期。
3. 外频
- 外频是CPU(内存)与主板间同步的时钟频率(系统总线的工作频率)。
4. 倍频
- 倍频是CPU主频与外频之间的倍数
- 主频 = 外频 × 倍频
5. CPI
- CPI是执行每条指令所需要的平均时钟周期数
- CPI即可表示每条指令执行所需要的时钟周期数,也可指一类指令或一段程序中所有指令执行所需要时钟周期数的平均值。
- 假设程序中包含的总指令条数用IC表示,程序执行所需时钟周期数为m,时钟周期为T,频率为f,则CPI为
- C P I = m I C CPI = \frac{m}{IC}CPI=ICm
- 若能知道某程序中每类指令的使用频率P i P_iPi,每类指令的CPI(C P I i CPI_iCPIi),每类指令的条数I C i IC_iICi,则程序的CPI可表示为
- C P I = ∑ i = 1 n ( C P I i × P i ) = ∑ i = 1 n ( C P I i × I C i I C ) CPI = \sum_{i=1}^{n}(CPI_i × P_i) = \sum_{i=1}^{n}(CPI_i × \frac{IC_i}{IC})CPI=∑i=1n(CPIi×Pi)=∑i=1n(CPIi×ICICi)
6. CPU时间
- CPU时间与下列三个因素紧密相关
- 时钟频率
- CPI
- 指令条数
- 某段程序的CPU时间T c p u T_{cpu}Tcpu可表示为
- T c p u = m × T = m f T_{cpu} = m × T = \frac{m}{f}Tcpu=m×T=fm
- 考虑CPI后,CPU时间表示为
- T c p u = C P I × I C × T = C P I × I C f T_{cpu} = CPI × IC × T = \frac{CPI × IC}{f}Tcpu=CPI×IC×T=fCPI×IC
7. IPC
- IPC是指每个时钟周期CPU能执行的指令条数,是CPI的倒数。
8. MIPS
- MIPS即每秒百万条指令
- 更大的单位有GIPS
- 可用每秒执行完成的指令数量作为衡量计算机性能的一个指标,这个指标衡量的指令数量是以百万为单位的
- MIPS的计算公式
- M I P S = I C T c p u × 1 0 6 MIPS = \frac{IC}{T_{cpu} × 10^6}MIPS=Tcpu×106IC
- 带入 T c p u = C P I × I C f T_{cpu} = \frac{CPI × IC}{f}Tcpu=fCPI×IC 后得
- M I P S = f C P I = I P C × f MIPS = \frac{f}{CPI} = IPC × fMIPS=CPIf=IPC×f (CPU全性能公式)
- 时钟频率f得单位为MHz
- 计算机性能与指令的CPI和主频有直接关系
- 主频越高,MIPS值越高
- CPI越小,MIPS值越高
9. MFLOPS
- MFLOPS是指计算机每秒执行浮点运算的次数
- 2MFLOPS:每秒浮点运算200万次
- MFLOPS是计算机在理论上能达到的浮点运算处理速度
- MFLOPS用程序中浮点运算次数除以程序在特定输入时的执行时间得到:
- M F L O P S = I C f l o p s T c p u × 1 0 6 MFLOPS = \frac{IC_{flops}}{T_{cpu} × 10^6}MFLOPS=Tcpu×106ICflops
- MFLOPS值越大,表示该系统得浮点运算能力越强
1.4.3 CPU性能公式应用
例 1.1
某程序的目标代码主要由4类指令组成,它们在程序中所占的比例和各自的CPI如表1.4所示,试回答下列问题。
(1)求该程序的CPI。
(2)若该CPU的主频为400MHz,求该机的MIPS。
解:
(1)
一段程序的CPI为程序中所有指令执行所需要时钟周期数的加权平均值
(2)
例 1.2
若计算机A和B是基于相同指令集设计的两种不同类型的计算机,A的时钟周期为2ns,某程序在A上运行时的CPI为3。B的时钟周期为4ns,同一程序在B上运行时的CPI为2。对这个程序而言,计算机A与B哪个更快?快多少?
解:
例 1.3
设某计算机中A、B、C 3类指令的CPI如表1.5所示。
现有两种不同的编译器将同一高级语言的语句编译成两种不同类型的代码序列,其中包含上述3类指令的数量如表1.6所示。
请求解下列问题。
(1)两种代码序列的CPI分别是多少?
(2)哪种代码的执行速度快?
解:
(1)
一段代码(程序)的CPI为程序中所有指令执行所需要时钟周期数的加权平均值
(2)
1.4.4 性能测试及其工具
- 略