目录
1. I/O 方式简介
2. 程序查询方式
3. 程序中断方式
1. I/O 方式简介
2. 程序查询方式
程序查询方式流程图
程序查询方式接口结构
一次只能传送一个字的原因在于:这种方式下,外设传过来的数据是放在寄存器中的;即使外设传的数据想放到主存中,也需要先放到 CPU 寄存器中,再从这个寄存器移到主存相应位置。
所以程序查询的方式用来管理这些高速设备是非常不科学的。
一般来说,从频率的角度来考虑,计算量会比较小,但需要对频率的概念理解准确。
系统总线和 I/O总线的区别: 点我
3. 程序中断方式
整体逻辑:
中断这种机制是用来提高整个计算机系统的工作效率的,而 I/O 这块介绍的程序中断方式只是这种中断机制在控制 I/O 设备的数据传送这一块的一个具体应用。 所以要先理解好中断机制。
中断的基本概念
中断请求的分类
将中断分类之后,如何告诉 CPU 现在发过来的请求是哪一类呢?
做法类似中断标志位的处理,给每一类中断都设置一个特定的位置,通过这个位置上的二进制位来表示这一类中断是否提出了请求。这种情况下,当检测到某一个中断的时候,只需要看一下是哪个位置发出来的就知道是哪一类中断请求。
中断请求标记
具体的做法就是给每个中断源都设计一个中断请求标记触发器 INTR,触发器可以存放一个二进制位,当某个中断源需要提出中断请求的时候,就把这个触发器中的内容改成1,CPU 检测到这个触发器中的内容是 1 的时候就知道这个中断源提出了中断。而这个触发器可以把它整理成一个统一的硬件,设置在 CPU 中,也可以把这个标记的触发器做在那个中断源所处的硬件中。比如打印机对应的触发器就可以做在打印机中,(光电输入机一般指鼠标)。
中断可以分为内中断和外中断,内中断的发生和指令的执行有关。所以它的中断请求是否产生,在执行指令的过程中就可以顺便去做一下查询,不需要统一在某个时间点再安排。外中断和当前的指令执行是无关的,所以需要在一些特定的时间点,专门地发出一些查询信号去查询一下它们的中断请求发出的情况。
也有的地方说的是指令结束的时刻查询中断信号,这两种说法都有出现,所以遇到概念题以排除法为主,有其它更明显的错误就不要纠结这两个说法。
当然,也存在一些特殊情况,当某些指令执行时间很长的时候,可以在执行过程中设置若干个 " 查询断点 "。
查询到中断之后,CPU 要先做一定的判断再决定要不要响应中断。
允许中断(开中断)、不允许中断(关中断 )。
当有多个中断请求同时被查询到的时候,需要进行中断判优。
中断判优
流程图了解下即可。
这两种实现的方式对中断请求都是有一定的优先级的(排在前面的最先被响应)
优先级设置
在练习中遇到的优先级问题,及时积累。(这个知识点不用特意去学,在题目中积累即可)
这个时候,中断机制的工作流程就过完了两步,中断请求和中断响应,接着学习中断处理。
中断处理过程
在中断服务程序执行完成之后,需要将 PC 的内容设置为 k+1,回到中断前的任务继续执行。但是如果在执行完 k 这条指令的时候,中断服务程序是直接将 PC 的内容覆盖掉的(将 PC 的地址改为了中断服务程序的第一条指令地址),也就意味着在末尾不知道 k+1 是多少了,所以保存 PC 的任务没有办法通过中断服务程序来执行(执行中断服务程序的第一步就是把 PC 改掉)。所以想要保存 PC 需要在执行中断服务程序之前通过硬件来完成。把完成这个任务的一系列硬件操作统称为中断隐指令。
中断隐指令的任务
把各个不同的中断服务程序的入口地址统一地存在一段主存中,这个入口地址叫做中断向量,这些中断向量是放在主存的某个单元中,这个单元也有一个地址,该地址叫向量地址(中断向量的地址)。
补充:有的系统中,中断向量地址形成部件形成的不是直接的向量地址,而是中断类型号,中断类型号和向量地址是成一定的倍数关系,所以给出了中断类型号,也就意味着给出了向量地址。
那为什么不是直接给出这个中断服务程序的入口地址呢?而是先给出一个地址,在这个地址中存储入口地址(即中断向量)?
因为这样的方式下,用于存中断向量的地址是不需要修改的(中断向量存储在固定的地址)。而具体中断服务程序在哪个地方,以及有多长调整起来就非常灵活。可以把这个程序写好之后,在把这个入口地址存放到这个向量地址所对应的单元中。也就意味着中断向量地址形成部件在形成地址的时候还是之前的地址,但地址里面的内容改变了,就可以很灵活的调整这些设备所对应的中断源。也就是修改完某一个触发器所对应的中断源之后,只要对应地写出它的中断服务程序内容,然后将入口地址放到它所对应的向量地址所指出的单元中就可以了。
中断服务程序的任务
这两个图需要会画 !!
程序中断的作用
CPI 的含义是执行一条指令需要多少个时钟周期。
思考:怎么算完成了一次传送? 从外设启动开始,到下一次启动这段时间就是完成了一次传送,所以在计算的时候是 15*4。
小结:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)