n3wFake3

计算机组成原理(02318) 第一章 计算机系统概述

课程内容

1.1 计算机硬件的基本组成

1.2 计算机软件概述

1.3 计算机系统的层次结构

1.4 程序开发与执行过程

1.5 计算机系统性能评价

考核知识点/重点/难点

主要复习知识点

  1. 计算机硬件基本组成
    • 冯诺依曼结构计算机的工作方式,硬件基本组成,各部件功能
  2. 计算机软件概述
    • 软件/系统软件/应用软件/操作系统/语言处理程序
    • 计算机软件分类,各类系统软件和应用软件的功能
  3. 计算机系统的层次结构
    • 硬件软件之间的关系;计算机系统的层次化结构;各类计算机用户在计算机中所处位置;本课程在计算机系统中所处位置
  4. 程序开发与执行过程
    • 用户程序(应用程序)/文本文件/源程序文件/可执行(目标)文件/指令/程序计数器(PC)/通用寄存器(GPR)/算术逻辑运算部件(ALU)/标志寄存器/指令寄存器(IR)/控制器/主存储器/总线/控制信号/时钟信号
    • 程序开发和执行过程/各种语言处理程序(解释程序,编译程序,汇编程序)的功能/程序和指令的关系/高级语言与低级语言之间的关系/汇编语言与机器语言之间的关系/指令执行的过程
  5. 计算机系统性能评价
    • 什么因素影响计算机性能
    • 能对计算机系统性能进行简单计算
  6. 重点难点
    • 冯诺依曼计算机结构特点/计算机硬件基本组成/计算机工作过程/计算机系统层次结构
    • 计算机系统的层次结构

硬件是物理装置的总称

软件是运行在硬件上的程序和数据以及相关文档

程序是指挥计算机如何操作的一个指令序列,也就是程序由指令组成

指令则是计算机硬件能够直接理解执行的最基本操作

数据指令操作的对象


1.1 计算机硬件的基本组成

1945年3月,冯诺依曼发表存储程序(stored-program)方式的电子数字计算机方案EDVAC,宣告现代计算机结构思想诞生.

基本思想 : 必须将实现编好的程序和原始数据传入主存后才能执行程序,一旦启动执行,计算机能在不需要操作人员干预下自动完成指令取出和执行任务

1946年在普林斯顿高级研究院(the Institute for Advance Study at Princeton,IAS)冯诺依曼以及同事开始设计存储程序计算机,该计算机被称为IAS计算机,是现代冯诺依曼结构计算机的原型机

1.1.1 冯诺依曼结构基本思想

  • 冯诺依曼结构计算机基本思想
  1. 采用"存储程序"工作方式
  2. 运算器,控制器,存储器,输入设备,输出设备五个基本部件组成
  3. 存储器不仅能放数据,还能放指令;形式上数据和指令没区别,但计算机能区分;控制器应能自动执行指令;运算器应能进行加减乘除四种基本算术运算,并且也能进行逻辑运算;操作人员通过输入/输出设备使用计算机
  4. 计算机内部以二进制形式表示指令和数据;每条指令由操作码地址码两部分组成,操作码指出操作类型,地址码指出操作数地址;由一串指令组成程序

冯诺依曼结构原型机的基本组成

  • AC为累加器,MQ为乘商寄存器,DR为数据寄存器
    • AC : 在加法中存放被加数bai/和,在减法中du存放被减数/差,在乘法中存放乘积高位,除法中存储被除数/余数
    • MQ : 在乘法中存储乘数/乘积低位,除法中存商

1.1.2 现代计算机的基本组成

  • 现在计算机硬件基本组成
  1. 中央处理器(Central Processing Unit,CPU) 简称为处理器.
    • Intel公司研制的各种处理芯片,早期的i386,Pentium(奔腾)到现在的Core系列
  • CPU是整个计算机的核心部件,主要用于指令执行. 主要包含两个基本部分:
    • 数据通路(datapath) : 指令执行过程中数据所流经的不见,包括各类运算部件.
      • 最重要的是算术逻辑部件(Arithmetic Logic Unit,ALU),用于基本算术和逻辑运算.
      • ALU中最基本的部件是加法器,所有算术运算都可以基于加法运算和逻辑运算实现
    • 控制器(controller) : 对指令进行译码,生成相应控制信号,控制数据通路进行特定操作
  1. 存储器 分为内存外存.
  • 内存 : 主存储器(main memory,主存)高速缓冲存储器(cache)
    • 早期计算机中没有cache,所以一般情况不区分内存和主存,两者含义相同.
  • 外存 : 辅助存储器和海量后备存储器.
    • 辅助存储器(辅存) : 系统运行时直接和主存交换信息的存储器
      • 磁盘存储器和固态硬盘
    • 海量后备存储器 : 磁带存储器和光盘存储器,主要用于信息备份和脱机存档
  1. 外部设备(外设) 也称I/O设备(Input/Output).
  • I/O控制器(I/O适配器) : 用于外设的控制逻辑,统称为设备控制器
  1. 总线(bus) 是部件之间用于传输信息的通路.
    • CPU,主存,外设通过总线互连

计算机主机由多个电路板用总线连接而成,每个电路板上又焊接多个集成电路芯片,每个芯片中有十几个电路模块,每个模块中有上千万个单元,每个单元中有几个门电路,每个门电路实现基本的逻辑运算

个人计算机硬件结构解剖

  • 主板有多个电路板
  • 每个电路板有十几个集成电路
  • 每个集成电路有十几个模块
  • 每个模块有成千上万个单元
  • 每个单元有几个门电路
  • 每个门电路实现基本逻辑运算

1.2 计算机软件概述

  • 计算机的工作由存储在其内部的程序控制,这是冯诺依曼结构计算机的存储程序工作方式的重要特征,因此程序或者软件质量的好坏将影响计算机性能的发挥.
  • 软件的发展受计算机硬件和计算机应用的推动和制约,发展过程大致分成三阶段
  1. 第一阶段(1945-1956),从第一台计算机上的第一个机器代码程序出现到实用的高级语言出现
    • 以科学计算为主,计算量大,但输入输出量不大
    • 机器以CPU为中心,存储器较小
    • 直接采用机器语言编程,因而程序设计与编制工作复杂/繁琐/易出错.
    • 尚未出现软件一词
  2. 第二阶段(1956-1968年),从实用的高级程序设计语言出现到软件工程概念出现.
    • 科学计算外,出现大量数据处理问题,计算量不大,输入输出量较大
    • 机器结构转向以存储器为中心,出现大容量存储器,输入输出设备增加,软件概念开始出现
    • 出现操作系统,充分利用处理器/存储器等
    • 提供编程工作效率,出现高级语言
    • 适应大量数据处理,出现数据库及其管理系统
    • 克服软件危机,出现软件工程
  3. 第三阶段(软件工程出现至今)
    • 复杂的大型软件,采用基于个人和简单团队分工的传统开发效率低/可靠性差/难完成,必须采用工程方法
    • 因此,20世纪60年代开始软件工程技术迅速发展,出现计算机辅助软件设计/软件自动化等技术方法和试验系统
    • 改进软件开发技术外,还研究具有智能化,自动化,集成化,并行化以及自然化特征的软件新技术

  • 根据软件用途,分为
  1. 系统软件(system software)
    • 为有效/安全试用和管理计算机以及为开发和运行应用软件而提供的各种软件,介于硬件与应用程序之间,与具体应用关系不大
    • 操作系统(Operating System,OS) : Windows/UNIX/Linux
      • 管理整个计算机系统资源,调度/管理/监视和服务.
      • 提供人机交互界面,提供对应用软件的支持
    • 语言处理系统 : Visual Studio/GCC
      • 提供一个用高级编程语言的环境(源程序编辑/翻译/调试/链接/装入运行等)
    • 数据库管理系统 : Oracle
    • 各类实用程序 : 磁盘碎片整理/备份程序
  2. 应用软件(application software)
    • 专门为数据处理/科学计算/事务管理/多媒体处理/工程设计以及过程控制等应用所编写的各类程序

1.3 计算机系统的层次结构

计算机系统是一个层次结构系统,通过向上层用户提供一个抽象的简洁接口而将较低层次的实现细节隐藏起来

计算机解决应用问题的过程就是不同抽象层进行转换的过程

1.3.1 计算机系统抽象层的转换

计算机系统抽象层及其转换

  • 计算机解决任何问题最开始是用自然语言描述,但计算机硬件只识别机器语言.

  • 将自然语言描述的问题转换为机器语言程序需要经过多个抽象层的转换

    1. 将应用问题转换成算法(algorithm),让问题变成流程化的清晰步骤,能确保步骤是有限的.
      • 任何一个问题都有多个求解算法,需要进行算法分析以确定哪个算法在时间和空间上能够得到优化
    2. 算法转换成用编程语言描述的程序(program).
      • **程序语言(programming language)**有严格的执行顺序,不存在二义性,能够唯一的确定计算机执行指令的顺序.
      • 编程语言分成高级语言和低级语言
        • 高级语言(high-level language) : 和底层计算机结构关联不大,是机器语言无关语言
        • 低级语言(low-level language) : 和运行计算机底层结构密切相关,通常称为机器级语言(machine-level language).
          • 机器级语言 :
            • 机器语言(machine language) : 二进制进行编码的机器指令(instruction),每条机器指令都是一个0/1序列. 可读性差,不易记忆,编写和阅读困难
            • 汇编(assembly language) : 用简短英文符号和二进制代码建立对应关系,方便编写和阅读
    3. 将高级语言转换成计算机理解的机器语言程序. 转换过程是自动完成的,需要计算机有能够执行自动转换的程序(对源程序进行编辑转换并链接),使用的是语言处理系统.
      • 任何一个语言处理系统都包括一个翻译程序(translator), 把一种编程语言转换成等价的另一种编程语言
      • 被翻译的语言和程序分别称为 : 源语言和源程序
      • 翻译生成的语言和程序分别为 : 目标语言和目标程序
      • 翻译程序有三类:
        1. 汇编程序(assembler),也称汇编器.将汇编语言翻译成机器语言
        2. 解释程序(interpreter),也称解释器.将源程序中的语句按其顺序逐条用子程序进行解释,最终转换成机器指令执行
        3. 编译程序(compiler),也称编译器.将高级语言翻译成汇编语言或机器语言
  • 操作系统是对计算机底层结构和计算机硬件的一种抽象,构成了一台可以使用的虚拟机

  • 指令集体系结构(Instruction Set Architecture,ISA) : 简称体系结构也称系统结构(architecture). 机器语言程序所运行的计算机硬件和软件之间的一个桥梁,是软件和硬件之间接口的一个完整定义.

    • ISA定义了一台计算机可以执行的所有指令的集合,每条指令规定计算机执行的操作,以及所处理的操作数存放的地址空间和操作数类型
    • ISA是对指令系统的一种规定或结构规范,具体实现组织(organization)成为微体系结构(microarchitecture),简称微架构
      • ISA和微体系结构是不同层面的概念,微体系结构是软件不可感知的部分.
      • 微体系结构最终是由**逻辑电路(logic circuit)**实现的. 微结构的功能可用不同的逻辑实现,但得到的性能和成本有差异.
      • 每个基本的逻辑电路是按照特定的**器件技术(device technology)**实现. 例如,CMOS电路中使用的器件和NMOS电路中使用的器件不同
    • 指令集体系结构是指软件能感知到的部分,也称软件可见部分或用户可见部分
    • 机器语言程序就是一个ISA规定的指令的序列,硬件执行机器语言程序的过程就是让其执行一条条指令的过程.
    • ISA规定的内容:
      1. 数据类型及格式
      2. 指令格式
      3. 寻址方式和可访问地址空间大小
      4. 程序可访问的寄存器个数/位数和编号
      5. 控制寄存器的定义
      6. I/O空间的编址方式
      7. 中断结构
      8. 机器工作状态的定义和切换
      9. 输入/输出结构和数据传送方式
      10. 存储保护方式

1.3.2 不同用户所在的工作层次

  1. 最终用户(end user)
    • 使用应用程序完成特定任务的计算机用户. 使用外设与计算机交互,通过操作系统提供的界面启动执行应用程序或系统命令. 只能感知道到的只有系统提供的简单交互界面和安装在计算机的相关程序.
  2. 系统管理员(system administrator)
    • 利用操作系统等软件提供的功能对系统进行配置/管理和维护, 建立高效合理的系统环境供end user使用
    • 安装/配置和维护系统软硬件,建立管理用户账户,升级软件,备份和恢复业务系统和数据等
    • end user解决不了的问题,系统管理员必须能够解决
    • 能够感知系统中部分硬件层面,系统管理层面以及相关实用程序和人机交互界面
  3. 应用程序员(application programmer)
    • 使用高级程序语言编写应用软件的程序员
    • 程序设计高级语言是面向算法设计的较接近于日常英语书面语言的程序设计语言(BASIC C/C++ Fortran Java)
    • 计算机硬件/擦偶哦系统提供的API/人机交互界面和实用程序/相应语言处理系统/集成开发环境(Integrated Development Environment,IDE)/语言处理系统包括可提供应用程序调用的各类函数库
  4. 系统程序员(system programmer)
    • 设计和开发系统软件的程序员
    • 开发操作系统.编译器.和实用程序等系统软件,需要熟悉底层相关硬件和系统结构,甚至需要直接与硬件和指令系统打交道
    • 需熟悉指令系统,机器结构和相关机器功能特性,使用汇编语言编写程序

  • 一个计算机系统可以认为是各种硬件和各类软件采用层次化方式构建的分层系统,不同计算机用户工作所在的系统层如图

计算机系统的层次化结构

  • ISA处于硬件和软件的交界面上,硬件所有功能被抽象成一个指令集体系结构,因此硬件功能由ISA集中体现,软件的程序代码由ISA规定的指令组成,通过CPU执行一条条指令完成程序执行.
  • ISA是整个计算机系统中的核心部分
    • ISA层下面是硬件部分,上面是软件部分
    • 硬件包括CPU/主存/输入输出等主要功能,通过数字逻辑电路设计实现
    • 软件包括底层的操作系统软件和高层的应用软件; 汇编程序,编译程序和操作系统等系统软件直接在ISA实现
    1. 系统程序员看到的机器的属性属于ISA层面内容,看到的机器是配置了指令系统的机器,成为机器语言机器,工作在该层次的程序员成为机器语言程序员
    2. 系统管理员工作在操作系统层,看到的是配置了操作系统的虚拟机器,成为操作系统虚拟机
    3. 汇编语言程序员工作在提供汇编程序的虚拟机器级,所看到的机器成为汇编语言虚拟机
    4. 应用程序员大多工作在提供编译器或解释器等翻译程序的语言处理系统层,大多数使用高级语言编写程序,成为高级语言程序员,所看到的虚拟机器成为高级语言虚拟机
    5. 最终用户则工作在最上层的应用程序层

  • 在计算机技术中,一个存在的事物/概念从某个角度看似乎不存在(对实际存在的事物/概念感觉不到),则称之为透明.
    • 比如,一个计算机系统中,系统程序员看到的底层机器级的概念性结构和功能特性对高级语言程序员(应用程序员)来说就是透明的,也即看不到或感觉不到. 因为对应用程序员来说,直接用高级语言编程,不需要了解有关汇编语言的编程问题,也不用了解机器语言中规定的指令格式/寻址方式/数据类型和格式等指令系统方面的问题

1.4 程序开发与执行过程

程序的开发和执行涉及计算机系统各个不同层面,因而计算机系统层次结构的思想体现在程序开发和执行过程的各个环节.

程序有时被称为用户程序(user program)应用程序(application program), 因为程序最终是为了解决用户的应用问题

1.4.1 从源程序到可执行目标程序

  1. 通过程序编辑软件得到源程序文件. 该文件在计算机中以ASCII字符存放. 通常把ASCII码字符或汉字字符表示的文件成为文本文件(text file),源程序文件都是文本文件,是可显示和可读的.
  2. 源程序进行预处理/编译/汇编和链接,最终生成可执行目标文件.

以下步骤仅针对C程序

  • 预处理阶段 : 预处理程序(cpp) 对源程序中以字符#开头的命令进行处理. 输出结果还是一个源程序文件,以.i为扩展名
  • 编译阶段 : 编译程序(ccl) 对预处理后的源程序进行编译,生成一个汇编语言源程序文件,以.s为扩展名
  • 汇编阶段 : 汇编程序(as) 对汇编语言源程序进行汇编,生成一个可重定位目标文件(relocatable object file), 以.o为扩展名,是一种二进制文件(binary file), 其中的代码已经是机器指令,数据以及其他信息都用二进制表示,打开乱码(不可读)
  • 链接阶段 : 链接程序(ld)多个可重定位目标文件和标准库函数目标模块合并成为一个可执行目标文件(executable object file),简称为可执行文件.
    • 例如 : 链接器将hello.o和标准库函数printf所在的可重定位目标模块printf.o进行合并,生成可执行文件hello

源程序文件到可执行目标文件的转换过程


1.4.2 冯诺依曼结构模型机

  • 下图为冯诺依曼原型机,通过描述其工作原理,以说明指令的含义和指令的执行过程

一种冯诺依曼结构模型机

  • 以上模型机中,
  1. 算术逻辑部件(ALU)用于进行算术运算和逻辑运算
  2. 通用寄存器组(General Perpose Registers,GPRs),由若干个通用寄存器组成,每个通用寄存器有一个编号,用于存放操作数或操作数的地址,通过指令指定哪个编号的寄存器的数据作为ALU运算的操作数
  3. 标志寄存器用于存放ALU运算得到的一些标志信息,如结果是否为0,有无产生进位或借位,结果是否负数的目光
  4. 程序计数器(Program Counter,PC),用于存放将要执行的下一条指令的地址
  5. 指令寄存器(Instruction Register,IR),存放从主存储器读出的指令,指令中的操作码被送到控制器译码,生成控制信号,可以控制如何修改PC得到下一条指令地址;可以控制ALU执行什么运算;可以控制主存储器进行读还是写操作(读写控制信号)…等等
  6. 主存储器存储指令和操作数. 每个存储单元都有编号,称为主存地址(内存地址),CPU可以读取主存的指令和操作数,也可以将运算结果写入主存
  7. CPU和主存储器用一组总线相连,总线中有(地址/控制和数据)三组信号线.
    • 存储器地址寄存器(Memory Address Register,MAR),存放将要送到主存储器的主存地址,MAR的地址信息被直接送到地址线上; 控制线有读/写信号线,指出数据是从CPU写入主存储器还是从主存储器读出到CPU;
    • 存储器数据寄存器(Memory Data Register,MDR), 存放CPU与主存储器交换的数据,根据读写操作控制将MDR的数据直接送到数据线上还是将数据线上的数据接收到MDR
    • 当CPU需要读写主存储器时,会将所访问的指令或擦u哦作书所在的主存地址送到地址线上,将读写命令信号送到控制线上.
  8. CPU和主存构成主机,主机外部的输入输出通过相应方式与主机相连.

1.4.3 程序与指令的关系

  1. 可执行目标文件中包含机器代码段,可执行文件的执行实际是所包含的机器代码段执行的过程.
  2. 机器代码由一条条指令构成. 程序被启动后,CPU通过逐条执行指令实现程序功能

  • 指令(instruction),是用01表示的一串0/1序列, 用来指示CPU完成一个特定的基本操作.
    1. 取指令(load instruction),从存储单元取出一个数据存放到CPU内的GPR
    2. 存数指令(store instruction),将CPU中GPR的内容写入到一个存储单元
    3. ALU指令(ALU instruction),将两个GPR内容进行某种算术或逻辑运算后再送入一个GPR
  • 指令通常被划分为若干个字段(操作码字段/地址码地段等).
    1. 操作码字段,指出指令的操作类型(加减/传送/跳转等)
    2. 地址码字段,指出指令处理的操作数的存储地址(通用寄存器编号/内存单元地址)

不同层次语言之间的等价转换

  1. 两数转换再高级语言程序中可直观地用三个赋值语句实现
  2. 编译后生成的汇编语言源程序中,用4条汇编指令表示,两条是取数指令(load word),另两条是存数指令(store word)
  3. 汇编生成的机器语言程序中,对应的机器指令是特定格式二进制代码.
    • 第一条lw指令对应机器码1000 1100 0100 1111 0000 0000 0000 0000, 这是一条标准的MIPS体系结构的指令, 其中高6位1000 11操作码, 随后五位00 010通用寄存器编号(2),在后面5位0 1111为另一个通用寄存器编号, 最后16位为立即数0.
    • CPU可以通过逻辑电路直接执行以二进制表示的机器指令.
    • 指令执行时通过控制器指令操作码进行译码, 以解释成**控制信号(control signal)**来控制数据通路执行.
      • 例如, 控制信号 ALUop = add 可以控制 ALU 进行加法操作, RegWr = 1 可以控制将结果写入通用寄存器
    • 关于立即数
    立即数就是写在指令里的常数。
    用函数举例子,函数语句y = f(x,12),那么这个12 就在函数语句里,而x 是未知数。 那么12 相当于指令里的立即数。
    

1.4.4 指令的执行过程

冯诺依曼结构模采用存储程序的工作方式, 故组成一个程序的指令序列和程序所处理的操作数都被事先存放到主存储器中. 第一条指令地址置于PC中,一旦程序启动执行,CPU会按照以下步骤自动逐条取出程序指令执行.

  1. 根据PC取指令到IR.
    将PC的内容送到MAR,MAR的内容直接送到地址线,然后控制将读信号送到读/写信号线, 主存根据地址线上的地址和"读命令"信号,从执行存储单元读取指令,并送到数据线上,MDR从数据线接受指令消息,并传给指令寄存器IR
    
  2. 指令译码并送出控制信号.
    控制器根据IR的操作码对指令译码,生成相应的控制信号,然后将控制信号送到不同的执行部件. 
    例如,
    若IR中的指令时ALU运算指令,则控制信号被送到ALU的操作控制端,控制ALU将要进行的运算; 
    若IR中的指令时取数或存数指令(lw/sw), 则控制信号被送到总线的控制线上
    
  3. 取操作数
    若是ALU运算类指令,则根据IR中指令指定的寄存器编号选择两个或一个寄存器中的内容作为操作数,送到ALU输入端
    
  4. 执行指令
    若是ALU运算类指令,则ALU在控制信号的控制下,进行相应运算,生成运算结果和相应标志信息
    若是取数/存数指令,则主存在读写控制信号的控制下,对地址线指定的存储单元进行读写. 
    
  5. 回写结果
    将ALU运算的结果写入指定编号的寄存器或指定的主存单元中. 
    

  • 为了能自动执行程序指令,CPU必须能够自动得到下一条指令的地址并送到PC.
  • 对于定长指令系统(每条指令长度都一样), 只要每次将PC自动加上指令长度即可, 通常在主存取指令时修改PC.
  • 对于变长指令系统, 则要对指令译码,根据不同情况使PC加上不同的值.
  • 但不管是定长还是变长, 当一条指令执行结束后, PC中一定是下一条指令的地址
  • CPU执行一条指令的过程可被分为若干步骤, 每一步功能由相应操作来完成.
    1. 指令周期 : 取一条指令并执行的时间.
    2. CPU的主脉冲信号/CPU的时钟信号(clock signal) : 每条指令的指令周期都会包含不同的操作,这些操作要有相应的控制信号进行控制,何时发出/作用时间多长,都要有相应的定时信号进行同步(同步信号)
      • 宽度成为CPU的时钟周期
  • 每条指令的执行由时钟信号进行定时,一个指令周期包含一个或多个时钟周期.

1.5 计算机系统性能评价

1.5.1 计算机性能的定义

  • 吞吐率(throughput)响应时间(response time) 是考量一个计算机系统性能的两个基本指标
    • 吞吐率 : 表示单位时间内完成的工作量; 某些场合下也成为带宽(bandwidth)
    • 响应时间 : 也称执行时间(execution time)等待时间(latency). 指的是, 从作业提交开始到作业完成所用的时间.
  • 通常情况,一个程序的响应时间除了程序本身包含的指令的执行时间,还包括磁盘访问时间/存储器访问时间/输入输出操作所需时间以及操作系统运行这个程序所用的额外开销等.
  • 不同应用场合下用户关心的性能是不同的.

1.5.2 用CPU执行时间进行性能评估

不考虑应用背景直接比较性能,则使用执行时间衡量,完成同样工作量所需时间最短的就是性能最好的

  • 用户感觉到的执行时间分成
  1. CPU时间 : CPU用于程序执行的时间,包含以下两部分
    • 用户CPU时间 : 真正用于执行用户程序的时间
    • 系统CPU时间 : 为了执行用户程序而需要CPU运行操作系统程序的时间(为了执行用户程序CPU运行操作系统程序的时间)
  2. 其他时间 : 等待I/O操作完成的时间或CPU用于执行其他用户程序的时间
  • 计算机系统的性能评价主要考虑的是CPU性能. 但系统性能与CPU性能不等价, 系统性能指系统响应时间, 与CPU外的其他部分也有关系(内存/硬盘等); CPU性能指用户CPU时间,只包含CPU运行用户程序的时间
  • 对用户CPU进行计算用到的概念
    1. 时钟周期 : 计算机执行一条指令的过程被分成若干个步骤, 由每一步中相应的操作来完成指令功能. 每一步操作都有相应控制信号进行控制, 用于对控制信号进行定时的同步信号就是CPU的时钟信号, 时钟信号的宽度为一个时钟周期(clock cycle, tick, clock tick, clock)
    2. 时钟频率 : CPU的主频就是CPU时钟信号的时钟频率(clock rate), 是CPU时钟周期的倒数. 单位为MHz/GHz. 主频为1.0MHz表示每秒钟发生 \(10^6 \) 个时钟信号, 因此时钟周期为 \( 10^{-6} \) s(秒) = 1μs(微秒) ; 主频为1GHz表示每秒钟发生 \( 10^9 \) 个时钟信号, 因此时钟周期为 \( 10^{-9} \) s(秒) = 1ns(纳秒)
    3. CPI(cycles per instruction) : 表示执行一条指令所需的时钟周期数. 不同指令有不同功能, 执行不同指令所需的时钟周期数也不同.
      1. 对于一条特定指令而言, 其CPI指执行该条指令所需的时钟周期数, 此时CPI是一个确定值.
      2. 对于一个程序或一台机器而言, 其CPI指的是该程序或该机器指令集中所有指令执行所需的平均时钟周期数, 此时CPI是一个平均值, 称为 综合CPI.

  • 已知上述参数或指标, 可通过以下公式计算用户程序的CPU时间:

CPU执行时间 = 程序所含时钟周期数÷时钟频率=程序所含时钟周期数×时钟周期

  • 上述公式中,程序所含时钟周期数可由程序所含指令条数和相应的CPI求得. 如果已知程序总的指令条数和综合CPI, 则可用以下公式求计程序的总时钟周期数

程序总时钟周期数 = 程序所含指令条数×CPI

  • 如果已知程序中共有n种不同类型的指令,第i种指令的条数和CPI分别为 \(C_1\) 和 \(CPI_i \) , 则

$$ 程序总时钟周期数 = \sum_{i=1}^{n}(CPI_i × C_i) $$

  • 程序的总和CPI也可以由以下公式求得, 其中F_i表示第i种指令在程序中所占的比例

$$ CPI = \sum_{i=1}^{n}(CPI_i×F_i) $$

  • 因此, 若知程序综合CPI和指令条数,则根据下列公式计算CPU时间

CPU执行时间=CPI×程序总指令条数×时钟周期


  • CPU执行时间可以平台两台计算机性能的好坏. 计算机性能可以堪称是CPU时间的倒数, 两台计算机性能之比就是CPU时间之比的倒数.
    • 若计算机M1和M2的性能之比为n, 则说明"计算机M1的速度是计算机M2的速度的n倍", 就是说,“在计算机M2上执行程序的时间(消耗)是在计算机M1上执行程序时间(消耗)的n倍”
  • CPU时间度量公式中的时钟周期/指令条数/CPI三个因素是互相制约的.
    • 更改指令集可以减少程序所含指令的条数, 但是同时可能会引起CPU结构的调整, 从而可能会增加时钟周期的宽度(降低时钟频率).
    • 对于解决同一个问题的不同程序, 即使在同一台计算机上, 指令条数最少的程序也不一定执行得最快.

1.5.3 用执行速度进行性能评估

1.5.4 用基准程序进行性能评估


从1.5内容起需要重新看一遍

comments powered by Disqus