计组学习第二天 2023.6.9 异常中断和流水线

异常和中断

异常和中断的比较

异常是由CPU内部引起的,和正在执行的指令有关的
中断是由CPU外部引起的,和正在执行的指令无关的

异常是CPU内部检测到的,而中断是外部设备发送给CPU信号CPU进行检测的

异常

异常处理流程

在执行指令中间突然碰到突发情况!!CPU跑过去解决问题,然后根据问题接着正常程序流程运行或者直接终止(因为解决不了)

异常的分类

异常有硬件异常(硬件控制出错了)和软件异常(执行指令出错了)

故障
故障是软件异常,主要是软件执行出错了就比如译码错,取数据错、执行指令出错,对于部分错误,CPU可以自行处理。类似于CPU内部执行:

try:
	#取数据
exception as “缺页”:
	#调页

当然也有处理不了的,就比如用户输入错误,像除数为0或者操作不存在这种的就不能由CPU自行处理,需要终止程序。

自陷
自陷也是软件异常,它是一种事先安排好的“异常”事件,就好像是猎人提前设下了陷阱。

在碰到自陷指令的时候,CPU根据不同的自陷类型进行处理,然后返回自陷指令的下一条指令进行处理。(按照程序流程),就相当于在这里用户对透明的CPU进行了一次交互。

平时debug打断点的时候就是利用了自陷

终止
终止就是硬件故障了,这时候程序无论如何都不能继续运行。

中断

中断的分类

可屏蔽中断:如果这个中断优先级不是很重要,可以被调控为屏蔽,则使用可屏蔽中断请求线INTR来发送中断请求。

不可屏蔽中断:如果这个中断是优先级特别高,就比如刷新ROM?就需要从不可屏蔽中断线NMI进行中断传输。

中断和异常的响应过程

(1)关中断:首先先保证我在执行中断和异常的时候不被别人打扰。
(2)保留上下文context:保证我处理完中断和异常之后能回到正常工作的程序。
(3)识别并转入处理程序:进行具体的处理工作。

写在最后:最好对每种中断类型严重不严重,是什么引起的都了如指掌,那样能更快的完成题目,每次就一道选择题。

指令流水线

主要思想:提高硬件的利用率,将指令分成不同的功能部件,保证同一时刻有多条指令正在被不同的功能部件处理。

两个方向:
1、从时间上并行:任务按照功能部件分成子任务,在同一时刻执行多个任务的不同子任务,叫流水线技术

2、从空间上并行:多增设功能部件,使得同一时刻有很多指令都能在同一个子任务上工作,叫超标量处理机

最经典的五段流水线技术:

IF段:取指,从IR(指令寄存器)或者cache中取指令顾名思义
ID段:译码,就翻译呗,把指令翻译成人话并获取执行需要的操作数
EX段:执行,执行翻译出来的人话
MEM段:访存,对存储器进行操作(读电脑的内存,CPU的外存)
WB段:写回,把结果写回寄存器

为什么只有MEM能访存,因为五段流水线必须的条件包括只有LOAD和STORE指令能访存,也就是只有这两种指令才能在MEM干活,如果采用的是直接寻址并add,那么就没法简单的用一条指令进行表示,需要用到两条或者三条指令来表示。

(流水线的时空图网上太多了,我懒得抄了,感觉掌握的还行,注意横坐标是时间轴!!)

指令流水线个数以最复杂指令所用的功能段个数为准。长度以最复杂的操作所花费的事件为准(画出时空图来就知道了)

时空图的画法:记住一个时间内一个功能部件不能有两条指令在用就行

注意:流水线无法提升单个指令的运行速度,甚至可能减缓,但一定会增加大量连续任务执行的效率

流水线的三种冒险

结构冒险

竞争资源,同一时刻使用同一功能部件。
解决方法:
1、停顿,下一个指令停一停等前面的用完。
2、单独设置数据存储器和指令存储器(避免ID和IF冲突)

数据冒险

RAW 写后读:read after write,写完的数据还没写到寄存器里就被读出来了。
WAR 读后写:write after read,读完的数据读成刚刚写进去的了。
WAW 写后写: write after write,写完的数据被覆盖的顺序可能乱了。

五段流水线只会出现RAW冲突,解决方法还是离不开停顿,还有:
增加特殊的数据通路,数据前传EX传给ID
调整指令顺序

控制冒险

PC值可能被后面的改变,导致下一条指令读取出错。
解决方法:
对下一条指令进行预测,静态预测在面临选择的时候总是选择一个决策,而动态预测会根据上一条指令是否成功跳转而进行跳转,还有延迟槽等技术(计算机体系结构)
ID级就形成跳转的指令码,并前传给IF取指。
停顿,永远的停顿

流水线的性能指标

吞吐率:单位时间内执行的任务数量,任务/s
加速比:不用流水线的T除以用流水线的T,通常大于1

高级流水线技术

排列组合
超流水技术:一个任务分特别特别特别多的子任务
超标量流水技术:空间和时间均提升,一个时钟周期能流入指令。
超长指令字技术:将能并行处理的指令合并成超长指令字一起处理。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值