冯·诺伊曼模型

计算机运行有两个前提:任务描述(以程序或代码方式表述)和计算机本身的运行能力(任务的执行者)

程序是计算机指令的集合,每条指令就是一个计算机的基本动作,指令是程序的最小单位(原子操作),即要么都执行,要么都不执行,不可能只执行一部分。计算机就是通过一条条的执行指令来完成工作任务的。

冯·诺依曼模型包括五个部分:内存,处理单元,控制单元, 输入,输出

 

内存单元包括MAR(Memory Address Register 内存地址寄存器)和MDR(Memory Data Register 内存数据寄存器)组成

MAR存放操作地址,MDR存放操作内容。以读写为例:

读:将被访问的内存单元的地址放入MAR,然后发送读信号通知内存,内存将该单元存放的内容传送至MDR。

写:   将被访问的内存单元的地址放入MAR,然后将要写入的数据放入MDR,接着发送写信号通知内存,这样,MDR中的内容将被写入MAR(注意,写入过程会把之前MAR指向的地址内存放的数据内容覆盖,并且无法还原

 

处理单元是信息被真正处理的地方,目前的计算机处理单元已经非常复杂,由很多个处理单元组成,ALU(算术逻辑单元)是最简单的功能单元,也是冯诺依曼体系的唯一处理单元,ALU包括基本运算(ADD SUBTRACT)和基本的逻辑操作(AND OR NOT)

ALU单次所能处理的数据的长度(书上叫size of quantity)通常被称为计算机的字长,通常所说的32位机器和64位机器就分别代表不同机器的字长。(书上翻译为量化大小,个人感觉表述为能单次处理的数据长度更为合适,比如16位机器单次就只能操作16个bit位的数据。但是请注意,这并不表示不能处理更多位数的数据,比如两个64位数相加,在64位机器上只需执行一次加操作,但是在16位上执行4次加操作也能获得结果。这也和书开篇指出的计算机能完成所有计算,不同的配置影响的只是获得结果的快慢而已)

通常在ALU附近会配置少量的存储器,用于存放中间结果,原因是用临时存储空间可以减少不必要的内存访问,内存访问和计算过程耗时相比花费的时间通常都更多,这在很多时候都是不能接受的。临时存储器常见设计方式就是一组寄存器,具体数量由不同的结构决定,而寄存器的宽度和计算机的字长是一致的,宽度为1个字。

 

输入\输出

信息能够被处理的前提是“信息事先需要输入到计算机”,这个通过输入设备完成。(键盘,鼠标等)

同时,处理结果需要通过不同的方式输出到计算机外部。这个通过输出设备来完成。(显示器等)

 

控制单元

控制单元就是计算机的大脑,在程序的逐步执行过程中,即负责控制程序执行过程的每一步,有负责控制其中每条指令执行的每一步。

控制单元中有几个特殊的寄存器

 IR(instruction register 指令寄存器) 保存正在执行的指令

PC(Program Counter, 程序计数器)也称作PC寄存器,同时更为合理的叫法是指令指针。该寄存器存放的内容为指向下一条待处理指令的地址。

冯诺依曼模型的一个实例

 

指令处理

冯诺依曼模型的核心思想就是程序和数据都是以bit流的方式存放在计算机内存中,程序在控制单元的控制下,依次完成指令的读取和执行。

指令是程序的最小单位,指令本身由操作码(opcode)和操作数两部分组成。

操作码表示该指令是做什么的,操作数表明是对哪些数据做操作。

 

指令周期

指令在控制单元的控制下,精确的一步一步的完成,这个执行步骤顺序为指令周期,周期中的每一步称为节拍。

一个指令周期包括6个节拍(大多数计算机设计都是如此,但也不是全部)

1.取指令(FETCH)

这就是装载需要执行的指令到IR的过程。首先将PC寄存器的内容装入MAR,并且将PC寄存器的值+1(因为我们完成当前这一条指令之后还需要继续进行下一条,就是通过这种方式来实现指令的顺序执行的)。

然后将地址指向的内容装入MDR,最后控制单元将MDR中的内容送入IR,至此,我们完成了指令的读取

 

2译码(DECODE)

译码操作就是分析,检查指令的类型,同时确定对应的微结构的操作细节。

3地址计算(EVALUATE ADDRESS)

如果指令执行存在地址操作,则在此节拍完成(这一步不是必须)

4取操作数(FETCH OPERAND)

该节拍负责读取指令处理所需要的源操作数

5执行(EXECUTE)

该节拍负责指令的执行操作,不同的操作码该节拍操作不同,甚至可能不需要在这一步做任何操作。

6存放结果(STORE RESULT)

指令执行的最后节拍,将之前的结果写入目的寄存器。

 

在存放结果节拍完成之后,控制单元复位指令周期,即从取指令节拍重新开始下一个指令的处理。

前后指令在存储空间是顺序存放的,所以我们称计算机的执行方式是顺序执行的。

当然,我们可以通过控制指令来改变执行顺序。

控制指令

控制指令在执行节拍阶段修改PC的内容,覆盖之前取指令时对PC内容的修改,这样,在下一个周期执行的指令就通过修改后的PC指向的地址获取了

指令周期控制

节拍的所有子步骤需要顺序执行(不可并行),如取指令先将PC值装入MAR,然后读内存将内容装入MDR,最后将MDR的内容送入IR。 这个过程的顺序受控于控制单元中的有限状态机。

 

停机操作

计算机一条一条的执行指令,好像永远不会停止,那要如何停止呢?

用户程序的停止好办,只需要在用户程序结束处埋放一条控制指令,任务是修改PC寄存器,使之跳回操作系统,而操作系统也常常借助于这一时刻启动一个新的用户程序。

但是,对于计算机来讲,操作系统本身也是一条指令一条指令的执行,和用户程序并没有什么不同,那怎么样才能真正停止呢?

答案是终止“时钟”。

时钟就是机器周期,一个机器周期的开始,意味着节拍中下一个步骤的开始,或当前指令周期中下一个节拍的开始。因此,终止时钟,就终止了指令的执行。

 

要终止时钟,只需要将Run状态清0即可。LC-3和大多数机器一样由操作系统来控制完成这个步骤的。(老机器有HALT指令)

HALT能够清零RUN锁存器,时钟停止,但是无法设计出指令来设置RUN锁存器来重启指令周期,因为这个时候指令已经无法执行了!!!!!! 这种情况必须要有一个外部的输入来重启指令,如中断信号

 

  • 7
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值