当前位置: 组成原理 > 01-概述 > 阅读正文

计组 计算机基本组成

2021.7.13.   245 次   3273字

当今的计算机,绝大部分是冯诺依曼式计算机

冯诺依曼机的特点

冯诺依曼最早提出了程序存储的思想,并运用在计算机设计中,我们把根据这一原理结构设计的机器,都称之为冯诺依曼计算机

冯诺依曼计算机报告中提到,计算机应该具有5大部分组成,简单理解为:

  • 运算器,计算是计算机的核心
  • 控制器,控制计算的内容
  • 存储器,冯诺依曼是存储型计算机,有存储器
  • 输入设备,我们的数据要输入到计算机当中
  • 输出设备,计算机计算的结果要给人看,能看懂

那么,这样的计算机具有什么特点?(6个)

  1. 计算机有5大部件组成
  2. 数据和指令以同等地位存储于存储器,可按地址寻访
  3. 指令和数据用二进制表示
  4. 指令由操作码和地址码组成
  5. 存储程序
  6. 以运算器为中心

具有存储能力的计算器,均称为冯诺依曼计算机,

那么我们能不能设计出不同的部件计算机呢?比如5大部件之间合并?比如数据和指令分别存储?(在很多缓存cache中,数据和指令是分离的),是否可以按内容进行查找?更多的问题需要大家去思考

如何理解以运算器为中心?

输入设备需要通过运算器,再送到存储器中

要输出内容,也要先从存储器送给运算器,再送到输出设备中

控制器控制什么?

控制器指挥,和控制程序的运行

在执行指令前,要先把数据(指令)从存储器送到控制器,控制器分析指令,完成一条指令的执行,完成指令先后顺序的控制

那么,冯诺依曼计算机有什么缺点?

运算器为5大部件的核心,全术运算,逻辑运算都要经过运算器运算,就连输入输出也得经过运算器,运算器非常繁忙,成为了计算机发展的瓶颈,我们能否对它进行一些改进?

冯诺依曼机改进

冯诺依曼计算机,具有2个明显的缺点,

  • 以运算器为中心,导致运算器非常繁忙
  • 5大部件之间没有层次关系

以存储器为中心,是对冯诺依曼计算机的一种改进

以存储器为中心,输入设备,输出设备能直接与存储器传输,控制器仍能对整个系统控制,运算器也能直接与存储器交换数据

但是这样的改进还不够完善,层次感依然比较低。

我们知道,5大部件可以组成以下结构

  • 运算器ALU,控制器CU组成了CPU
  • 主存和辅存组成了存储器
  • CPU和存储器组成了主机
  • 输入设备和输出设备组成了IO设备
  • 主机和IO设备构成了计算机

那么大概可以分成主机系统,和IO系统,后续我们将以计算机完成一个具体问题分析,讲计算机结构细分为更小的模块

实际问题的解决

一个现实中的问题,如何用计算机来解决?是不是所有的问题都能用计算机来解决?

可计算行理论,是研究计算的可行性与函数算法的理论,又称为算法理论,设函数定义域为D,值域为R,如果存在一种算法,对定义域D中给定的任意一个X,都能够给出一个对应的值f(x),那么称这个函数可计算,计算算通常表示该问题是否可以被计算机解决

假设我们后续的问题不涉及到是否可计算,假设我们的问题都可以被计算机计算,如何用计算机来解决这个问题呢?

也许我们想到的,是”编写程序”,但实际上我们往往要做的更多,比如

  • 建立数学模型(比如计算正弦交流电流)
  • 确定计算方法(指令集中往往没有sin图像指令集,最终通过数学公式计算)
  • 编写程序解题(程序指指运算的全部步骤,指令为一个步骤)

编程举例

需求: 计算ax^2+bx+c

假设我们的计算机,是一个累加器型的机器,即有2个操作数,一个操作数来自于累加器,另一个操作数来自于主存储器,此外假设机器包含了6条指令(①加法,②乘法,③取数,即从内存取数,④存数指令,存到寄存器上,⑤打印指令,到屏幕⑥停机指令),那么开始计算

  • 取x至运算器中 ==》 x
  • 乘以x在运算器中 ==》x^2
  • 乘以a在运算器中 ==》ax^2
  • 存ax^2在存储器中
  • 取b至运算器中 ==》b
  • 乘以x在运算器中 ==》bx
  • 加上ax^2 ==》 ax^2+bx
  • 加上c ==》 ax^2+bx+c

在上述算法中,我们可以进行一些优化,比如ax^2+bx+c ==》(ax+b)x+c

  • 取x至运算器中 ==》x
  • 乘以a至运算器中 ==》 ax
  • 加b至运算器中 ==》 ax+b
  • 乘以x至运算器 ==》 (ax+b)x
  • 加c至运算器 ==》 (ax+b)x+c

优化后的算法,比原算法更简单,步骤更少,这是算法上的优化,接下来我们编写一个模拟的程序清单

内存地址指令(操作码+地址码)注释
0000001 0000001000取x至acc
1000100 0000001001乘a得ax至acc
2000011 0000001010加b得ax+b至acc
3000100 0000001000乘x得(ax+b)x至acc
4000011 0000001011加c得(ax+b)x+c至acc
5000010 0000001100将结果存放至内存
6000101 0000001100打印
7000110停机
8x原始数据x
9a原始数据a
10b原始数据b
11c原始数据c
12存放结果

程序的清单有了, 如何把指令和数据存放到存储器中?存储器的结构是怎样的?如何进行访问?每次获得的数据的位数又是多少呢?

存储器是用于保存数据的,核心结构就是一个存储体,由若干个存储单元组成,存储单元又由若干个存储元件组成,这里有一些名词需要解释

  • 存储单元 ==》 存放一串二进制数据(通常1字节)
  • 存储字 ==》 存储单元中二进制数据的组合(通常2字节)
  • 存储字长 ==》 存储单元中二进制数据的位数(通常8)

在存储器中,不单有存储体,还有一些寄存器

  • MAR ==》 存储器地址寄存器,保存指令或操作数的地址,反映存储单元的个数
  • MDR ==》存储器数据寄存器,保存了cpu要送入、从存储器取出的数据,反映了存储字长大小

MAR如何反映存储单元的个数?设MAR=4,则存储单元为4*4=16

你可以理解为存储体是一个长方体,而存储单元是一个底面积,存储字长是存储体的高

已知存储体的基本结构和工作过程,那么运算器的结构是什么?运算器是如何工作的?如何进行程序的运算?

运算器的功能是什么?加法?乘法?如何根据运算器的功能推断结构?

运算器的基本功能是完成运算,则运算器的基本组成是算数逻辑单元(ALU),ALU通常是一个组合逻辑电路,ALU要能够运算,首先能读取数据,则还必须有2个寄存器保存参与运算的数据,分别是ACC和X,对于乘法指令数据会增大一倍需要一个临时存储器MQ(也叫乘商寄存器),下面我们模拟简单算数运算

ACCMQX
加法被加数
加数
减法被减数
减数
乘法乘积高位乘数
乘积低位
被乘数
除法被除数
余数
除数

在计算机中,可以使用移位实现加法,而不是简单的累加,关于更多乘法会在后续的章节中介绍

一个算数操作有几个步骤,例如加法操作过程?

首先需要一个加法指令,由于加法中需要2个数,那么初态中需要把被加数送到寄存器ACC中,接着把加数从指定的内存地址中取出,送到X中,然后执行加法运算,最后把结果存放在ACC中

那么控制器的基本结构如何呢?

控制器的基本功能是:解释指令。要完成一条指令,首先要取指令,然后是分析指令,把操作码部分送给控制单元进行分析,最后是执行指令

要取指令,指令保存在哪?它需要一个地址,那么控制器中有一个寄存器pc保存预指令的地址,执行完一条指令,它应该能指向下一个功能,所以应该有一个计数功能(pc不一定是+1,而+1仅表示计数操作,不代表实际数字)

分析指令, 把指令从内存单元中取出,送到控制单元中分析,要把指令锁存起来再取操作码部分,那么需要一个寄存器IR保存指令,区分IR中保存的是当前预执行的指令,而pc是预执行指令的内存地址,当IR取指后,PC就会+1

最后的执行指令,则由cu控制完成

运算器、控制器、存储器构成了什么?一条指令是如何在主机上构成的?一个程序是如何在主机完成的?

例如取数指令过程:

  1. PC =》MAR,
  2. MAR =》存储体
  3. 存储体 =》 MDR
  4. MDR =》IR
  5. IR =》CU
  6. IR =》MAR
  7. MAR =》存储体
  8. 存储体 =》MDR
  9. MDR =》 ACC

无论是取数、存数,都是差不多的,那么对于ax^2+bx+c程序是如何完成的?

  • 将程序通过输入设备送至计算机
  • 程序首地址 =》 PC
  • 启动程序运行
  • 取指令, PC =》 MAR =》M(表示存储体) =》MDR =》IR,pc+1
  • 分析指令,OP(IR)=》CU
  • 执行指令,Ad(IR)=》MAR =》M =》MDR =》ACC
  • 下一条指令,乘法指令,略
  • 打印结果
  • 停机

本篇完,还有疑问?

加入QQ交流群:11500065636 IT 技术交流群