第一章 计算机系统概论

1.1 计算机系统简介

1.1.1、计算机系统

  • 计算机系统由软硬件组成
    • 硬件是计算机的实体,如主机,外设等
    • 软件是利用硬件执行的程序,由由具有各类特殊功能的信息(程序)组成
  • 软件的分类:系统软件和应用软件
    • 系统软件:管理整个计算机系统,包括:语言处理程序,操作系统,服务性程序,数据库管理系统,网络软件
    • 应用软件:按任务需要编写的各种程序……

1.1.2、计算机系统的层次结构

  • 微指令系统->机器语言->操作系统->汇编语言->高级语言
  • 微指令语言构成了机器语言
  • 汇编语言使用了操作系统的中断
    计算机系统的层次结构

1.1.3、小结

计算机组成与计算机体系结构从研究内容上来说有什么区别呢?

  • 计算机体系结构:程序员所见到的计算机系统的属性 概念性的结构与功能特性。如:指令系统、数据类型、寻址技术、I/O机理
  • 计算机组成:实现计算机体系结构所体现的属性,具体指令的实现。
  • 就一个乘法指令来说:计算机体系结构规定的是指令集中有没有乘法指令,能够对什么类型数据做乘法操作,数据的长度多长;计算机组成关注的是利用计算机体系结构的规定研究如何实现乘法指令。

1.2 计算机的基本组成

1.2.1、冯·诺依曼计算机的特点

  • 计算机由五大部件组成,运算器、控制器、存储器、输入设备、输出设备
  • 指令和数据以同等地位存于存储器,可按地址寻访
  • 指令和数据用二进制表示
  • 指令由操作码和地址码组成,操作码表示指令要做什么操作,地址码表示操作数所在的地址
  • 存储程序(核心特征),存放在存储器中
  • 以运算器为中心,输入输出设备通过运算器与存储器传送数据
    冯·诺依曼计算机硬件框图
    冯·诺依曼计算机硬件框图

    虚线表示控制和状态反馈,实线表示数据通路。在这种层次结构下,在控制器的指挥下,输入和输出设备输入一些数据给运算器进行各种运算,如果产生中间结果,就会给存储器,计算完成结果给到输出设备。运算器为中心,成为计算机发展的瓶颈,因为运算器过于繁忙。

1.2.2、计算机硬件框图

  • 以存储器为中心的计算机硬件框图
    以存储器为中心的计算机硬件框图

    以存储器为中心,输入输出,数据的转运工作都是通过存储器来运输的.

  • 现代计算机硬件框图
    现代计算机硬件框图

1.2.3、系统复杂性管理的方法-2(3’Y)

  • 层次化(Hierachy):将被设计的系统划分为多个模块或子模块
  • 模块化(Modularity):有明确定义(well-defined)的功能和接口
  • 规则性(regularity):模块更容易被重用

1.2.4、存储器的基本组成

存储器的功能:存储器由存储体、MAR、MDR组成,存储器是用以保存和记录原始数据、运算步骤及中间结果等多种信息的装置。存储器又分内存储器和外存储器,CPU可以直接访问的是主存,主存主要存放的是程序和数据,是计算机实现“存储程序”控制的基础;外存中信息必须加载进主存后,CPU才可以访问。内存储器可以直接和运算器联系。外存储器的容量比内存储器大,它与运算器不直接发生联系,但可以和内存储器交换代码。

  • 存储体包含若干个存储单元,存储单元包含多个存储元件
    • 存储体(大楼) > 存储单元(房间) > 存储元件(0/1)(床位(有人/无人))
    • 存储体:存放0/1代码,可能是指令或数据,被分成多个存储单元
    • 存储单元:存放一串二进制代码
    • 存储元件:也称存储元或存储基元,存放一位二进制信息
    • 存储字:存储单元中的数据
    • 存储字长:存储单元中数据的位数,每个存储单元赋予一个地址号
  • MAR:存储器地址寄存器,保存了存储单元的地址,位数(长度)和存储单元的个数有关
  • MDR:存储器数据寄存器,保存了送往CPU、存储体的数据或刚从存储体取出的数据,长度和存储单元长度相同,反映存储字长

    主存储器由许多存储单元组成,每个存储单元包含多个存储元,每个存储元存储1位二进制代码0或1,故存储单元可存储一串二进制代码,称这串代码为存储字,而这串代码的位数称为存储字长,存储字长一般是一个字节(8位)或字节的偶数倍。同时许多存储单元共同构成了一个存储体。

存储器的基本组成

  • 数据在存储体中是按照地址存储的,每个地址对应一个存储单元;
  • 存储单元数目=2^MAR位数,例如如果MAR为10位,则存储单元数目为2^10 = 1024。
  • MDR的位数表示存储字长,例如MDR为16,表示存储字长为16,也表示1个字(word)=16bit
  • 注意区分字(word)和字节(Byte),1个字节等于8个bit,而1个字的大小取决于机器
  • 1B=1个字节,1b=1个bit

1.2.5、运算器的基本组成

运算器的功能:运算器是对代码进行算术运算和逻辑运算的装置。

  • 运算器由算数逻辑单元(ALU)、累加器(ACC)、操作数寄存器(X)、乘商寄存器(MQ)组成
  • ALU:一种组合电路,输入撤销输出端也相应撤销
  • ACC:具有特殊用途的二进制8位寄存器,专门用来存放操作数或运算结果。在CPU执行某种运算前,两个操作数中的一个通常应放在累加器A中,运算完成后累加器A中便可得到运算结果。
  • MQ:乘商寄存器主要负责数据的乘法与除法运算并可保存运算结果,是运算器的基本组成部分,是运算器三个基本寄存器之一。
  • X:操作数寄存器

各寄存器存放的各类操作数

设M表示存储器中任意地址号,[M]表示M地址中的内容,X表示X寄存器,[X]表示X寄存器中的内容, ACC表示累加器,[ACC]表示ACC中的内容,MQ表示乘商寄存器,[MQ]表示MQ中的内容。->表示数据存放过程。

假设ACC已有前一时刻的运算结果,并作为下述运算中的一个操作数。

加法操作过程

[M] -> X  
[ACC] + [X] -> [ACC]
即将[ACC]看作被加数,先从内存中取出一个地址M中的加数[M],存放于寄存器X
中,然后将被加数[ACC]和加数[X]相加,和放入ACC中。

加法操作

减法操作过程

[M] -> X  
[ACC] - [X] -> [ACC]
即将[ACC]看作被减数,先从内存中取出一个地址M中的减数[M],存放于寄存器X
中,然后将被减数[ACC]和减数[X]相减,差放入ACC中。

减法操作

乘法操作过程

[M] -> MQ
[ACC] -> X
0 -> ACC
[X] × [MQ] -> ACC//MQ
即把[ACC]看作被乘数,先把M地址中的乘数[M]送入MQ,把ACC中被乘数[ACC]
送入X,将ACC清0,然后[X]和[MQ]相乘,其结果积的高位保存至ACC,低位保存至MQ。

乘法操作

除法操作过程

[M] -> X
[ACC] ÷ X -> MQ
余数R存在ACC中
即把[ACC]看作被除数,先把M地址中的除数[M]送入X,然后[ACC]除以[X],
其结果商暂留于MQ,余数R存在ACC,若要将商保留在ACC,需做一步[MQ] -> ACC。

除法操作

1.2.6、控制器的基本组成

控制器是计算机组成的神经中枢,由它指挥全机各部件自动、协调地工作。 控制器由程序计数器PC( Program Counter),指令寄存器IR( InstructionRegister)以及控制单元CU几部分组成。

  • PC用来存放当前欲执行指令的地址,它与主存的MAR之间有一条直接通路,且具有自动加1的功能,即可自动形成下一条指令的地址。
  • IR用来存放当前的指令,IR的内容来自主存的MDR。IR中的操作码(OP(IR)送至CU(记作OP(IR)→CU),用来分析指令;其地址码(Ad(IR)作为操作数的地址送至存储器的MAR(记作Ad(IR)→MAR)。
  • CU用来分析当前指令所需完成的操作,并发出各种微操作命令序列,用以控制所有被控对象。

控制器的功能

  • 解释指令。指取指->分析->取操作数->执行指令->保存结果全过程。
  • 保证指令有序地执行。

主机完成一条指令的过程

1.以取数指令为例

取数指令

  • 取指令:开始时要执行的指令地址保存在PC中,指令保存在存储体中。

    1.PC把指令的地址送给MAR
    2.MAR将指令地址送给存储体
    3.在控制器的控制下存储体把指定存储单元中保存的取数指令取出,送入MDR
    4.将MDR中取出的指令送入IR

  • 分析指令:在控制单元内部进行。对这条指令进行分析,指出该指令要完成什么样的操作,并按寻址特征指明操作数的地址

    5.将IR中的指令送入控制单元,进行分析。

  • 执行指令:根据操作数所在的地址,取出操作数并完成某种操作

    6.从IR将操作数的地址码取出,送入MAR
    7.MAR将地址送入存储体
    8.从存储体根据地址取出操作数,存入MDR
    9.将操作数送入ACC

2.以存数指令为例

存数指令

  • 取指令:开始时要执行的指令地址保存在PC中,指令保存在存储体中。

    1.PC把指令的地址送给MAR
    2.MAR将指令地址送给存储体
    3.在控制器的控制下存储体把指定存储单元中保存的取数指令取出,送入MDR
    4.将MDR中取出的指令送入IR

  • 分析指令:在控制单元内部进行。对这条指令进行分析,指出该指令要完成什么样的操作,并按寻址特征指明操作数的地址

    5.将IR中的指令送入控制单元,进行分析。

  • 执行指令:根据操作数所在的地址,取出操作数并完成某种操作

    6.从IR将操作数的地址码取出,送入MAR
    7.MAR将地址送入存储体,告诉MAR要存入数据
    8.将ACC中的数据送入MDR
    9.将MDR中的数据保存到存储体

1.2.7、ax^2+bx+c程序的运行过程

操作码表示机器所执行的各种操作,如取数、存数、加、减、乘、除、停机、打印等等。 地址码表示参加运算的数在存储器内的位置。

机器指令的操作码和地址码都采用0/1代码的组合来表示。下图列出了某机与上例有关的各条机器指令的操作码及其操作性质的对应关系。

操作码与操作性质对应表

此例中所用到的数a、b、c、x,事先需存入存储器的相应单元内。按ax^2+bx+c的运算分解,可用上述机器指令编写出一份运算的程序清单,如下图所列

ax^2+bx+c程序运行清单

ax^2+bx+c程序的运行过程

  • 将程序通过输入设备送至计算机
  • 程序首地址->PC
  • 启动程序运行
  • 取指令 PC->MAR->M->MDR->IR,PC + 1 -> PC
  • 分析指令 OP(IR)->CU
  • 执行指令 Ad(IR) MAR->M->MDR->ACC
  • 打印结果
  • 停机

计算机解题全过程

首先按操作码与操作性质对应表所列的有序指令和数据,通过键盘输入到主存第0号至第12号单元中,并置PC的初值为0(即令程序的首地址为0)。 启动机器后,计算机便自动按存储器中所存放的指令顺序,有序地逐条完成取指令、分析指令和执行指令,直至执行到程序的最后一条指令为止。

例如,启动机器后,控制器立即将程序计数器的内容送至主存的MAR(记作PC→MAR)并命令存储器做读操作,此刻主存“0”号单元的内容“000010000000” 便被送入MDR内。然后由MDR送至控制器的IR(记作MDR→R),完成了一条指令的取指过程。经CU分析操作码“000001”为取数指令,于是CU又将IR中的 地址码“000001000”送至MAR,并命令存储器做读操作,将该地址单元中的操作数x送至MDR,再由MDR送至运算器的ACC(记作MDR→ACC),完成了此指令 的执行过程。此刻,也即完成了第一条取数指令的全过程,即将操作数x送至运算器ACC中。与此同时,PC完成自动加1的操作,形成了下条指令的地址“1”号。 同上所述,由PC送至MAR,命令存储器做读操作,将“0001000000001”送入MDR,又由MDR→IR。接着CU分析操作码“00100”为乘法指令,故CU又向存储器发 出读命令,取出对应地址为“000010”单元中的操作数a,经MDR送至运算器MQ,CU再向运算器发乘法操作命令,完成ax的运算,并把运算结果ax存放在ACC中。 同时PC完成一次(PC)+1→PC,形成下一条指令的地址“2”号。依次类推,逐条取指、分析、执行,直至打印出结果。最后执行完停机指令后,机器便自动停机。

1.3 计算机硬件的主要技术指标

  • 机器字长

机器字长是指CPU一次能处理数据的位数,通常与CPU的寄存器位数有关。字长越长,数的表示范围也越大,精度也越高。 机器的字长也会影响机器的运算速度。倘若CPU字长较短,又要运算位数较多的数据,那么需要经过两次或多次的运算 才能完成,这样势必影响整机的运行速度。机器字长对硬件的造价也有较大的影响。它将直接影响加法器(或ALU)、数据总线以及储字长的位数。所以机器 字长的确定不能单从精度和数的表示范围来考虑。

  • 存储容量

存储器的容量应该包括主存容量和辅存容量。主存容量是指主存中存放二进制代码的总数。即存储容量=存储单元个数×存储字长。

  • 运算速度

计算机的运算速度与许多因素有关,如机器的主频、执行什么样的操作、主存本身的速度(主存速度快,取指、取数就快)等等都有关。

运算速度的衡量指标

  1. cpu主频:CPU的时钟频率,计算机的操作在时钟信号的控制下分步执行,每个时钟信号周期完成一步操作,时钟频率的高低在很大程度上反映了CPU速度的快慢。
  2. cpu核数,每个核支持的线程数
  3. 吉普森( Gibson)法:它综合考虑每条指令的执行时间以及它们在全部操作 中所占的百分比。即 \(T_{m}=\sum ^{n}_{i=1}f_{i}t_{i}\) ,$T_{m}$为机器运行速度,$f_{i}$为第i种指令占全部操作的百分比数,$t_{i}$为第i种指令的执行时间
  4. MIPS(Million Instruction Per Second):每秒执行百万条指令,如某机器每秒执行200万条指令,则为2MIPS
  5. CPI(Cycle PerInstruction):执行一条指令所需的时钟周期(主频的倒数)数
  6. FLOPS(Floating Point Operation Per Second):每秒浮点运算次数