首页 > 其他分享 >5.2指令执行过程

5.2指令执行过程

时间:2023-12-21 12:00:52浏览次数:27  
标签:5.2 MAR 周期 记做 指令 MDR 执行


指令周期

CPU从主存中每取出并执行一条指令所需的全部时间。
指令周期常常用若干机器周期来表示,机器周期又叫CPU周期。
一个机器周期又包含若干时钟周期(也称为节拍、T周期或CPU时钟周期,它是CPU操作的最基本单位)。

5.2指令执行过程_linux


5.2指令执行过程_linux_02


每个指令周期内机器周期数可以不等,每个机器周期内的节拍数也可以不等。

5.2指令执行过程_计算机组成原理_03

指令周期流程

5.2指令执行过程_计算机组成原理_04


5.2指令执行过程_linux_05

指令周期的数据流-取指周期

5.2指令执行过程_计算机组成原理_06


1.当前指令地址送至存储器地址寄存器,记做:(PC) ->MAR

2.CU发出控制信号,经控制总线传到主存,这里是读信号,记做:1->R

3.将MAR所指主存中的内容经数据总线送入MDR,记做:M(MAR)-> MDR

4.将MDR中的内容(此时是指令)送入lR,记做:(MDR)->IR

5.CU发出控制信号,形成下一条指令地址,记做:(PC)+1 ->PC

指令周期的数据流-间址周期

1.将指令的地址码送入MAR,记做:Ad(IR)-> MAR

或Ad(MDR)-> MAR

2.CU发出控制信号,启动主存做读操作,记做:1->R

3.将MAR所指主存中的内容经数据总线送入MDR,记做:M(MAR)-> MDR

4.将有效地址送至指令的地址码字段,记做:(MDR)->Ad(IR)

5.2指令执行过程_操作系统_07

指令周期的数据流-执行周期

执行周期的任务是根据IlR中的指令字的操作码和操作数通过ALU操作产生执行结果。不同指令的执行周期操作不同,因此没有统一的数据流向。

指令周期的数据流-中断周期

中断:暂停当前任务去完成其他任务。为了能够恢复当前任务,需要保存断点。一般使用堆栈来保存断点,这里用SP表示栈顶地址,假设SP指向栈顶元素,进栈操作是先修改指针,后存入数据。

1.CU控制将SP减1,修改后的地址送入MAR

记做:(SP)-1 -> SP,(SP) ->MAR

本质上是将断点存入某个存储单元,假设其地址为a,故可记做: a -> MAR

2.CU发出控制信号,启动主存做写操作,记做:1 ->w

3.将断点(PC内容)送入MDR,记做:(PC) -> MDR

4.CU控制将中断服务程序的入口地址(由向量地址形成部件产生)送入PC,记做:向量地址 ->PC

5.2指令执行过程_linux_08

指令执行方案

一个指令周期通常要包括几个时间段(执行步骤),每个步骤完成指令的一部分功能,几个依次执行的步骤完成这条指令的全部功能。
方案1.单指令周期
对所有指令都选用相同的执行时间来完成。
指令之间串行执行;指令周期取决于执行时间最长的指令的执行时间。
对于那些本来可以在更短时间内完成的指令,要使用这个较长的周期来完成,会降低整个系统的运行速度。
方案2.多指令周期
对不同类型的指令选用不同的执行步骤来完成。指令之间串行执行;可选用不同个数的时钟周期来完成不同指令的执行过程。
需要更复杂的硬件设计。
方案3.流水线方案
在每一个时钟周期启动一条指令,尽量让多条指令同时运行,但各自处在不同的执行步骤中。指令之间并行执行。


标签:5.2,MAR,周期,记做,指令,MDR,执行
From: https://blog.51cto.com/xiaowangkkk/8921038

相关文章

  • Postman运行一次时其中的请求执行多次
    背景运行1次时,实现其中的几个请求执行多次,每次执行时的参数不同方式在要开始循环的请求中通过pm.environment.set('next',pm.info.requestId)将这个请求的id记下来然后当要循环这个请求的的时候,先改变请求中的变量,然后再通过postman.setNextRequest跳转到要循环执行的请求,从......
  • 类的生命周期及执行顺序
    类的生命周期一个类完整的生命周期,会经历五个阶段,分别为:加载、连接、初始化、使用和卸载。其中的连接又分为验证、准备和解析三个步骤。如下图所示:简单一句话概括,类的加载机制就是:找到需要加载的类并把类的信息加载到jvm的方法区中),然后在堆区中实例化一个java.lang.Class对象,......
  • ElasticSearch 命令执行漏洞
    漏洞编号:CVE-2014-3120漏洞详情CVE编号CVE-2014-3120漏洞级别中危6.8标题Elasticsearch默认配置允许动态脚本执行漏洞披露时间2014/07/29漏洞总结Elasticsearch1.2版本及之前的默认配置启用了动态脚本,攻击者可以通过_search的source参数执行任意MVEL表达式和......
  • java.io.FileInputStream#read(byte[]) 阻塞导致没办法继续执行的问题处理
    在对设备节点进行操作的时候,发现读的时候进入阻塞状态(可能是设备节点异常),导致没办法继续执行后面的代码 查看了一下,文件的方式读,是没办法配置超时的自动报异常的设计了一段代码,针对读阻塞做异常处理 publicstaticStringsendCmdToFile(StringfromFile,Stringcmd......
  • javascript Pipe方法执行流
    pipe的概念很简单,就是将n个函数组合起来,他是一个从左到右的流,每个函数执行的时候都传入之前函数的结果。下面写一个返回一个人名字的函数:getName=(person)=>person.name;getName({name:"Buckethead"})//返回"Buckethead"接下来写一个将字符串大写的函数uppercase=(......
  • SQL 的执行顺序,你搞清楚了吗?
    这是一条标准的查询语句: 这是我们实际上SQL执行顺序:from子句组装来自不同数据源的数据;where子句基于指定的条件对记录行进行筛选;groupby子句将数据划分为多个分组;使用聚集函数进行计算;使用having子句筛选分组;计算所有的表达式;select的字段;使用orderby对结......
  • linux常用指令之用户及权限
    一、创建用户及用户组1、groupadd组名-----------创建用户组2、groupdel组名----------删除用户组3、cat/ect/group----------查看所有用户组4、useradd人名 ------------创建用户(在当前用户组下)5、useradd-g用户组人名 -----------------在某个用户组下创建用......
  • (三十五)C#编程基础复习——C#预处理器指令
    预处理指定的作用主要是向编译器发出指令,以便在程序编译开始之前对信息进行一些预处理操作。在C#中,预处理器指令均以#开头,并且预处理器指令之前只能出现空格不能出现任何代码。另外,预处理器指令不是语句,因此它们不需要分好;结尾。在C#中,预处理指令用于帮助条件编译。不同于C和C++......
  • JavaScript 执行上下文
    一旦整个JavaScript程序运行,就会创建执行上下文。全局执行上下文已创建。它有两个组件,变量环境和变量。执行线程,它分两个阶段创建。第一阶段,是创建阶段。在创建阶段,我们为全局空间内的所有变量和函数分配内存。我们分配了一个未定义的变量。对于函数,我们实际上存储整个函数。这......
  • PowerDesigner SqlServer 表列描述脚本无法执行问题
    1.原脚本,sp_addextendedproperty的0级别类型写的是user,这个类型在高版本中已经删除,无法使用,应该切换成SCHEMA [ifexists(select1fromsys.extended_propertiespwherep.major_id=object_id('[%QUALIFIER%]%TABLE%')andp.minor_id=(selectc.column_idfrom......