1.1 计算机系统简介

软硬件概念

计算机系统

重点记住硬件系统简单来说就是由主机+外设构成。
第一章:计算机系统概论 - 图1

计算机的解题过程

电脑的应用程序由高级语言构成,但是计算机不能够直接理解高级语言,所以需要先通过“翻译”,把高级语言转换为计算机可以直接理解的低级语言,才能够执行相关的指令。
第一章:计算机系统概论 - 图2

计算机系统的层次结构

首先我们知道计算机只能识别低级语言,而低级语言都是由二进制编码,所以编程难度较大,为了更加方便的记忆低级语言,从而出现了汇编语言
简单的来说,汇编语言也是面向机器的编程语言,区别在于汇编语言采用了助记符号,让程序猿可以更容易理解代码。
汇编语言实际机器同样不能直接识别,所以需要将汇编语言翻译低级语言,这里用于翻译的机器就被称为“虚拟机器”。
然而汇编语言的编程难度同样很大,所以出现了高级语言。高级语言更容易理解和编程。与汇编语言一样,同样需要虚拟机进行翻译。
高级语言的翻译程序有两种:

  • 编译程序
  • 解释程序

两者的不同在于:

  • 编译程序:一次翻译,多次执行
  • 解释程序:一次翻译,一次执行

实际机器完成二进制指令实际还可以划分为多个动作,所以实际机器又可以向下分解为微指令机器M0
第一章:计算机系统概论 - 图3

本课程主要研究的就是硬件部分

计算机体系结构和计算机组成

计算机体系结构

程序员所见到的计算机系统的属性概念性的结构功能特性

例如:指令系统、数据类型、寻址系统、I/O机理。 例如:有无乘法指令

计算机组成

实现计算机体系结构所体现的属性

具体执行的实现。 例如:如何实现乘法指令


1.2 计算机的基本组成

冯诺依曼计算机的特点

基本特点

  • 计算机由运算器控制器输入设备输出设备存储器五大部分组成
  • 指令和数据以同等的地位存放在存储器当中,并且可以按照地址进行访问
  • 指令和数据均由二进制表示
  • 指令由操作码和地址码两大部分组成
  • 指令在计算机中按照顺序进行存放
  • 机器以运算器为核心,输入输出设备与存储器之间通过运算器完成。

    传统计算机有第六个特点,也就是以运算器为中心,但是现代计算机普遍以存储器为中心,其余五个特点现代计算机仍然保留。

冯诺依曼计算机硬件构图

冯诺依曼计算机硬件的整体架构分为五个部分:

  • 输入设备:把外界的信息转化为机器能识别的形式
  • 输出设备:把执行结果输出为人们熟悉的形式
  • 存储器:存储指令和数据
    • 主存:内存条部分
    • 辅存:辅助存储器,包括硬盘,光盘,磁带等
  • 运算器:做逻辑运算和算数运算
    • **ALU**为核心
  • 控制器:指挥程序运行
    • **CU**为核心

传统计算机以运算器为核心,数据输入之后先经过运算器,再到存储器,再返回运算器,最后再输出,但是现代计算机并不是以运算为主,所有数据都经过运算器会导致运算器压力过大。
第一章:计算机系统概论 - 图4

实线代表数据和指令的流动虚线代表控制信息的流动

以存储器为中心的硬件构图

现代计算机的普遍硬件架构如下,以存储器为核心。
第一章:计算机系统概论 - 图5
同时控制器和运算器可以统称为CPU,所以计算器硬件的构成又可以分为三个部分:

  • CPU(中央处理单元)
  • 存储器
  • 输入/输出设备

如果要划分为两部分构成硬件系统,则是主机(CPU再加上存储器的主存部分)+外设(输入输出+辅存)
第一章:计算机系统概论 - 图6
整体架构图如下:
第一章:计算机系统概论 - 图7

计算机的工作步骤

上机前准备

  1. 建立数学模型
  2. 确定计算方法
  3. 编制解题程序

    程序:运算的全部步骤 指令:每一个步骤

举个例子:计算ax2 + bx + c
步骤如下:

  1. x 至运算器中
  2. 乘以x 在运算器中
  3. 乘以a 在运算器中
  4. ax^2 在存储器中
  5. b 至运算器中
  6. 乘以x 在运算器中
  7. ax^2 在运算器中
  8. c 在运篁器中

运算器中只能做运算,不可以存储数据,所以运算第二次取数据的时候,会覆盖前一次运算完的数据,所以需要在第四步把ax2先存入到存储器当中。

采用不同的计算方式可以化简步骤,例如原式可以化为:(ax + b)x + c,那么步骤就可以是:

  1. x 至运算器中
  2. 乘以a 在运算器中
  3. b 在运算器中
  4. 乘以× 在运算器中
  5. c 在运算器中

指令构成

前面我们知道,计算的程序都是由指令构成的,所谓指令由下面两部分构成:

  • 操作码:用于标记指令执行的是什么动作,例如000001表示改指令是取操作
  • 地址码:用于标记动作执行需要的数据地址。

所以上述计算ax2 + bx + c的实际指令执行过程如下:

指令和数据存于主存单元的地址 指令 注释
操作码 地址码
0 000001 0000001000 取x到ACC中
1 000100 0000001001 乘a得到ax到ACC中
2 000011 0000001010 加b得ax+b到ACC中
3 000100 0000001000 乘x得(ax+b)x到ACC中
4 000011 0000001011 加C,结果存到ACC中
5 000010 0000001100 结果转存于主存储单元
6 000101 0000001100 打印结果
7 000110 停机
8 x 原始数据x
9 a 原始数据a
10 b 原始数据b
11 c 原始数据c

这里的ACC表示的是寄存器,相当于一个暂时存储数据的地方。

计算机的解题过程

存储器的基本组成

存储器的基本组成如下:
第一章:计算机系统概论 - 图8
其中存储体包含若干存储单元,每一个存储单元又包含若干存储元件,每一个存储元件代表一个二进制信息(0或者1)。
所以:

  • 存储单元:存放一串二进制代码
  • 存储字:存储单元中二进制代码的组合
  • 存储字长:存储单元中二进制代码的位数

    例如:存储单元的存储字为0110,那么存储字长为4。

访问主存实际访问的就是存储体,而访问存储体实际就是按照存储单元的地址进行寻访。
接下来是MAR和MDR:

  • **MAR**:存储器地址寄存器(反映存储单元个数)
  • **MDR**:存储器数据寄存器(反映存储字长)

寄存器相当于数据暂存的地方,所有的数据在存入和取出的时候,都需要经过寄存器。
地址寄存器用于存储数据需要在实际存储体中存放的位置,如果地址寄存器有四位,那么根据二进制编码的组成,就会有24=16种编码组成,16种地址编码就代表了16个存储单元,也就能从地址寄存器的位数反应存储单元的个数。
数据寄存器就是存储真实的数据,所以数据寄存器的字长是多少,就代表存储字长是多少。

假设MAR是4位,存储单元有24=16个 假设MDR是8位,存储字长就是1*8=8

运算器的基本组成和操作过程

运算器的基本组成如下:
其中:ALU作为逻辑运算单元为核心单元,负责逻辑运算和算数运算,ACCMQX是三个常用的寄存器。
做四则运算存储如下:

ACC MQ X
加法 被加数 + 和 加数
减法 被减数 + 差 减数
乘法 乘积高位 + (被乘数) 乘数 + 乘积低位 被乘数
除法 被除数 + 余数 除数

以加法为例:
在执行加法操作之前,一般会先把被加数先取出,存入ACC当中,再把被加数取出存入X当中,两个数同时送个ALU,根据指令的操作码执行加法操作,最后结果返回给ACC
第一章:计算机系统概论 - 图9
其余三则运算类似。
这里需要注意的是ACC是作为累加寄存器,一开始默认都会存储被加/减/乘/除数,乘法部分需要一开始把ACC当中的数据先存入X当中,也就是[ACC]->X
做乘法运算的时候,两个数字相乘可能会导致存储器位数不够存储相乘之后的大数字,所以需要分高位低位进行存储。

控制器的基本组成

控制器想要控制指令的完成,有下面三个步骤:

  • 取指令,一般通过**PC**(程序计数器,本质上也是一个**地址寄存器**)完成
  • 分析指令,一般通过IR完成,IR用于存放当前欲执行的指令
  • 执行指令,一般通过CU完成

    PC取指令的过程如下:程序一开始会赋予PC初始的指令地址,指令的地址又是相对连续的,所以PC只要不断使得PC = PC +1,就可以按照顺序执行完所有的指令。 注意这里的指令地址是指令原始的地址,不是指令构成里面的地址码。

主机完成一条指令的过程

我们以取数指令(从存储体当中取出一个数存入ACC中)为例:
第一章:计算机系统概论 - 图10

介图实在是太麻烦了画的,所以就直接截图看看了。

步骤分析如下:

  1. 程序一开始给PC(程序计数器)赋予初始的指令地址PC将地址传入MAR(地址寄存器)当中。
  2. 存储体根据MAR当中的地址寻访到相应的取数指令
  3. 存储体把这条指令返回给MDR(数据寄存器)
  4. MDR将指令发送给IR(分析指令)
  5. IR将分析完的指令发送给CU(执行指令),执行取数指令。
  6. IR指令地址码(注意是地址码,不是地址)存入MAR
  7. 存储体根据MAR当中的指令地址码(注意是地址码,不是地址)寻访到相应的数据
  8. 存储体把这个数据返回给MDR
  9. MDR将数据发送至ACC(累加寄存器)当中。

    上面九个步骤对应图中的九个步骤。 其余指令也类似,就不再赘述。 存数指令如下,就不解析了,应该都看得懂了。

第一章:计算机系统概论 - 图11


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

机器字长

CPU一次能处理数据的位数,和CPU中的寄存器位数有关。
虽然之前所说的存储字长也和寄存器位数有关,但机器字长不等同于存储字长。
通常情况机器字长等于存储字长,但是也有可能机器字长大于存储字长。
详情参见:
计算机组成原理——机器字长、指令字长、存储字长白芷加茯苓的博客-CSDN博客数据字长和机器字长相等吗

运算速度

计算机的运算速度有以下几个指标:

  • 主频
  • 吉普僧法
  • MIPS(每秒执行百万条指令
  • CPI(执行一条指令的时钟周期数)
  • FLOPS(每秒浮点运算次数)

    我觉得这个只要了解就好了,主要我也不想再写了。

存储容量

存储容量分为:

  • 主存容量
  • 辅存容量

其中主存容量=存储单元个数 * 存储字长
例如:MAR有10位,MDR有8位。
那么主存容量 = 210 * 8 = 8Kb,(注意这里是b也就是位,换算为B(Byte),由1B = 8b可得主存容量为1KB