考研408《计算机组成原理》复习笔记,第七章(2)——I/O方式
一、本章学习内容
二、CPU处理I/O方式
1、程序查询方式
首先要注意:
我们主要学的是【程序查询方式的:条件传送方式】
具体【流程】和【优点缺点】总结如下(放大查看):
尤其流程要记住!!
- 中间【第3步】开始会进入循环,CPU不断查询设备的状态,看是否状态已就绪
- 针对这个【CPU查询方式】又分称2种:
- 【独占查询】:
- 记住:CPU会花100%的时间在处理【I/O操作】上,会一直在循环等待设备告知CPU自己是否已准备好条件?
- 而且这种CPU等待设备响应、设备等待CPU发出控制的工作流程是【完全的串行工作方式】
- 【定时查询】:
- 周期性查询,在查完一次设备状态后,CPU就可以不用干等而是干别的事,直到下一周期再去查询,直到设备返回响应状态、数据
- 而这需要注意,【周期】只能尽量短,不能长!因为外设每次返回的数据都会覆盖上一次的数据,若CPU来不及检查,则会导致数据丢失
- 还有【第5步】在CPU收到设备满足条件的状态信息后
- 不是一次性持续发完数据,而是【只发一次数据】
- 然后到【第6步:修改地址和计数器参数】后:
- 【第7步:判断是否传送完毕】
- 没有传送完的情况下下一次传送数据依旧要重复【第3步~循环等待设备状态响应】的步骤,每传一次数据都要执行这样的步骤
关于【程序查询方式——定时查询】如何设置查询周期时间
2、程序中断方式
1)中断基本概念
记住下面CPU中断的那个图
提示:通常计组第7章这默认中断都是:外中断+可屏蔽中断
;
然后需要注意的知识点:
- 1、CPU去响应执行中断的时机是——上一指令的【执行周期结束】、【终端周期开始】
- 外中断是来自CPU外部的中断信号引起,与CPU执行无关;而内中断才是CPU执行过程中发生的(下图回忆CPU执行指令的过程)
- 2、中断也分为【中断响应】和【中断处理】2个阶段:
- 【中断请求】:CPU执行自己的事、外设准备数据,二者【并行工作】!!
- 【中断响应时】:CPU执行【中断隐指令】
- 【中断处理时】:CPU执行【中断微服务程序】
- 【中断微服务程序】前期:传输数据
- 【中断微服务程序】后期:处理和外设无关的后处理,外设又可以干别的事,CPU与外设二者【再次并行工作】!!!
- 3、对于上面简略的【CPU响应、处理中断】,结合这个过程图加深印象
2)中断请求
中间那一坨中断的分类只是结合操作系统,让大家回忆知识点的,可以忽略
重点就2个:
- 1、【开中断】和【关中断】:图中也标出来了,就像开关一样
- 开:允许中断处理,PSW里的【中断标志位IF:1】
- 关:屏蔽中断,继续按流程执行当前任务,PSW里的【中断标志位IF:1】
- 2、【不可屏蔽中断】和【可屏蔽中断】
- 【不可屏蔽中断】:NMI先发出
- 不受中断标志位IF影响,管你开、关中断,有中断请求你就必须响应
- 【中断优先级高】:因为本质就是无论如何都要处理中断啊
- 比如:拔电源关机、接线短路、时钟中断......
- 类似非常紧急的紧急通知:医院通知你马上去急诊室看亲人,不管你开不开免打扰,他们都会有办法通知到你而且你必须要马上停下手头的事,先处理这种紧急情况
- 【可屏蔽中断】:INTR线发出
- 受中断标志位IF影响,【IF=1开中断】时要响应中断请求
- 【中断优先级低】:因为你本来都不是很想被中断处理
- 比如:原子操作
- 有点类似你朋友天天特么的发屎视频给你,你都懒得回复直接开免打扰了,除非有正事你才关免打扰,回应他的消息
3)中断响应优先级
精华:放大查看
注意点:
- 【中断请求标记除触发器INTR】:每个中断设置的状态,1就是有中断请求,0就是没事
- 【中断请求标记寄存器】:存放所有的【中断请求标记除触发器INTR】,让CPU查询到当前谁在发出中断请求
- 【中断响应优先级】:那么,同时发出中断请求的多个设备不可能都响应,只能根据优先级判断:“先理谁?”
- 注意:
- 【中断响应优先级】不可改变!!!一出厂就已经规定死了!!!
- 只会【根据优先级判断先响应谁】,上面思维导图也明确标明了
- 另外,【多重中断下】:【中断处理优先级】比【中断响应优先级】牛逼,后面会学
4)中断响应过程
(注意:这个过程是完整的【多重中断】的过程,实际【单重中断】里只有【开头一次:关中断】、【结尾一次:开中断】,中间处理阶段不再开关中断,外界任何中断都屏蔽掉,只处理自己响应了的那【一个中断】)
;
;
⭐【中断向量】
中断识别分为【向量中断】和【非向量中断】
- 【向量中断】:就是用【软件查询法】,这里简单了解,不深入学
- 【非向量中断】:用【硬件向量法】
- 首先明白这三个概念
- 然后大致的流程就是:
- 【中断类型号】计算出【向量地址】在向量表的位置
- 靠【向量地址】找到【中断向量(中断程序的入口地址)】
- 最终根据【中断向量】找到【中断程序】,开始执行中断
![]()
- 了解一下如何【根据 <中断类型> 计算出 <向量地址> 在哪】
5)多重中断
对比