程序查询方式,如果想具体了解工作流程建议配合前面的P301,I/O接口的通用结构理解

书上的内容其实比较完善,这里是一些补充

程序查询实际上也可以分为两类,一类是独占式查询,一类是定时查询

相对而言定时查询拥有更好的效率,因为不至于一直在查查查,CPU也可以干别的事

这里的例题实际上说的就是定时查询而非独占式查询

只要满足每次数据寄存器满了以后的数据能够被定时带走,那么就没问题

如果满了,而且CPU干到极限了也带不走,那么就会产生数据丢失问题

独占式就没必要算什么占用时间了,就是百分百,我一直等你干完再去干别的活


程序中断方式基本概念:

这里其实主要是谈利用了程序中断这样一个特性完成主机与I/O设备的数据传送

简单来说,就是利用了CPU处理中断是单独跳出去处理,处理完了后又返回原程序

相对之前的程序查询明显有强大的效率提升

对于基本概念,建议看书,书上的内容总体非常详细


全中断工作流程及相应逻辑:

注:此处或许需要勘误,辩证读取

先对目前讨论的中断有个大致上的了解

对于异常的处理,实际上第五章有一定的讲解,但并不是计组这门课的内容

实际上是操作系统的内容,//同时后面中断源的识别实际上也只注重硬件

因为软件非向量中断是操作系统来完成的,很明显又不是计组这边需要着重的内容

详细可以参考P249,计组对异常、软件非向量的介绍很少

这里也主要是谈论I/O操作的中断信号,因为本质就是I/O利用了这个中断去进行数据传输


然后再来谈这整个处理过程

首先由外部中断源向CPU给出一个中断请求,然后CPU会在某些判断条件下响应中断请求

因为同时一般不止一个中断请求,所以会按照中断响应的优先级去判断,谁先响应

然后便是响应中断的过程,有隐程序自动进行当前CPU状态的保存(入栈,和异常处理类似

在处理完了后便会引出不同的中断服务程序(每个中断都有其相应的程序

至于怎么引出,详情参考操作系统异常处理篇以及本节的硬件向量处理篇

上面只是一个初步的工作流程介绍,具体还需要结合书上的内容、PPT上的内容去细化

补充:查询程序的速度往往没有硬件快

区分点:保存断点是中断隐指令干的事,但保护线程是中断服务程序干的事情,易错

恢复现场也是中断服务程序干的,隐指令只干前面几个任务

至于为什么要把PSW和PC送到栈,而对现场信息就没太多的要求?

因为PSW/PC内容是无法被后续命令访问的,而现场信息(如寄存器内信息是可以被访问的

所以这也是为什么把后面的现场信息保存留给中断处理程序而不是由隐指令给出

?又要勘误了?


大致上是[https://blog.csdn.net/Zevalin/article/details/136844944]


建议配合书上的内容进行进一步详细的梳理、复习,或者说开始扣字眼


对上面中断服务程序执行过程中的进一步补充:多重、单重中断

相对而言,其实单重的意思,就是在执行一个中断处理的时候不允许其他的打扰

当然NMI线发出的不可屏蔽的除外

而多重意味着可以受到别的打扰,先前还对书上一句话有所误解

多重意味着可以打扰,当不使用中断屏蔽技术的时候,优先级和响应优先级相同

?勘误?

优先级依旧是存在的,并不意味着变成了单重


关于屏蔽字:

对于自身位的屏蔽位一定是置有效的,特征上一个屏蔽字至少有一位

屏蔽字的有效位越多意味着该优先级越高,同时,屏蔽字是每一位代表一个屏蔽

也就是四位只能代表四个屏蔽源,屏蔽信号存于PSW内


程序中断方式容易考大题,这一块一定要多重视其基本的计算

王道7.3节有好几道相应的例题,课本上也有不少例题,建议精做


DMA方式概念及其工作流程:

DMA的本质是把原先CPU的一部分任务给单独取出,让CPU和外设访存各司其职

对于其工作流程:

预处理阶段,CPU会把主存地址给主存地址计数器(AR、把I/O设备地址给DAR

然后把传输数据的个数给WC,word-count,其初始内容是传输的总字数,每传一字减一

然后DMA根据相应的I/O设备地址去启动相应的I/O设备

此时CPU可以继续干活,不受DMA工作的影响

在这个阶段内外设会向DMA发送数据,向数据缓冲寄存器中写内容

当写满一个字的时候DMA请求触发器给状态控制逻辑寄存器发送一个信号

状态信号向CPU发送一个总线控制请求

同时CPU也会移交系统总线的控制权,这个指的是系统总线不是片内总线

此时DMA取得总线的控制权,将相应的主存地址、数据内容写入总线中,并指明是写操作

如果是读操作那么也是类似的

然后在传输完一个字的内容以后,就会使得AR\WC的计数自动修改

当WC计数为零或者溢出的时候代表这个数据块传输完毕,向中断机构发送一个信号

然后中断机构向CPU发送一个中断信号表示已经完成了数据的传输,总线权移交

另外此时虽然名义上CPU可以自己干自己的活,但因为系统总线被占据,实际上几乎不干

至此DMA工作流程结束,下面由CPU进行收尾工作


DMA传输方式还有需要处理的就是和CPU的访存冲突问题,书上已经较为详细

其他需要注意的就是一些细节,建议以书上、PPT整理的细节为主,类似于特征、特点

适用范围、优缺点等,细节后期补充


一些补充:

向量中断和软件查询的区别,其实就在于引出的方法不同

向量中断也被称为硬件识别、硬件处理等,实际上就是在内存中指定一块地方存放地址

这一些内存单元的内容里面就是“中断/异常处理程序的地址”

然后通过引用这些地址的内容去调用相应的异常处理程序

软件查询无非就是内存中不存这些地址

操作系统依据当前的异常、中断调用中断查询程序,然后调用相应的中断、异常处理程序

可以看到仅仅是得到异常后,去找这个异常/中断处理的程序的方法不同

类似于去图书馆找书,一个按书架位置找,一个按书分类找,单纯只是找的方法不同了

至于这个异常/中断处理程序,属于操作系统模块


中断响应判优、中断处理判优补充/勘误:

现在大致上应该能够区分了,中断响应是当多个中断请求一起来的时候,决定哪个先响应

这个响应方法就由硬件排队器或者中断查询程序决定,有趣的是,引出也有相对应的

一个是硬件向量法、一个是软件查询法,但中断处理程序均是操作系统模块

而中断处理是和中断响应不同的,是在处理一个程序的时候考虑是否要切换到优先级高的

这个判断由中断控制器决定,或者说不考虑设置中断控制器,即采用中断屏蔽或不采用

如果不采用,那么就考虑用响应优先级来代替,这个响应优先级就是单纯指已定下的规矩

这边肯定是要和单重区分开来的,单重是不允许其他中断在中断处理中再次套娃

这里只是按照响应优先级决定而已,依旧可以出现套娃的

勘误?


关于响应判优和中断处理判优之间的一些勘误、补充:


先说DMA里面的一些问题:

首先就是DMA请求,实际上应该以书上的为准,即外设给DMA控制器发出的

而不是说给CPU发出的,那个严格而言说的应该是总线控制请求

DMA是不需要保护现场的,但不代表其是不用申请主线控制权的,只有一个不用

即交替访存的时候不需要考虑主线的申请权


然后就是DMA迷一样的总线请求和中断响应:

DMA的中断是优先级最高的,这个中断应该也是和别的中断一样,在执行指令后判断的

但是总线请求就非常迷了,三种实际上完全不一样的:

第一种就是不管怎么样都要把CPU给断了

第二种就是CPU在占据总线那么优先让CPU干完,然后再去占据总线

第三种没有占据总线这回事,自然不用考虑什么了

然后就是传输问题,第一种是按一个块传输的,第二是按一个字一个字传输的

所以以“块”为基本单位传输就感觉有点太牵强了,而且电路结构估计也不一样吧


另外就是相似之处:

程序查询的定时查询和中断、DMA其实真的感觉很像

定时查询是CPU隔一段时间来看你一眼,你好了那么CPU就取走这个内容

中断那么是外部设备主动汇报已经好了那么需要CPU来取走这个内容

DMA是已经把数据传完了,然后需要CPU来进行善后同时归还总线的汇报中断


还有就是迷一样的周期问题:

如果是第一种,那么怎么样都要把总线给抢过来,然后占据一个数据块的传输时间

第二种的话,我理解为其实只要CPU没有占据总线,那么都是可以用的,没有周期一论

不过一般而言一个指令周期基本都是要访存的,也是要占据总线的

所以一般的存取周期=机器周期=存取周期,我也只能这样说了,实际上应该按总线周期


通道程序和DMA基本原理类似,见P282的双总线结构

此外,异常/中断处理程序肯定是在CPU上面进行处理的,所以才需要占用CPU时间

所以才说中断、程序查询是对CPU时间的申请,而DMA基本是对系统总线的申请


关于断点的勘误、补充:

从汇编指令角度理解,x86汇编当中的指令如JUM,ADD等,都是只能改变PC与PSW的值,但是PC和PSW的数据都是作为隐含数据无法被指令直接读出的,因此我们不能在中断服务程序中通过指令把他们【统称为断点信息】保存到栈或指定寄存器中,只能通过硬件自动完成。(相反通用寄存器等用户可见的寄存器数据【统称为现场信息】可以通过mov保存,因此可以在中断服务程序中完成)这也就是为什么在I/O系统这一章中说“指令无法直接读取PC和PSW的内容”

断点也可保存在特定的存储单元内,例如约定一律将程序断点存至主存的0号地址单元内,由于保存断点是由中断隐指令自动完成的,因此3次中断的断点都将存入0地址单元,这势必造成前两次存入的断点k+1和l+1被冲掉。为此,在中断服务程序中的开中断指令之前,必须先将0地址单元的内容转存至其它地址单元中,才能真正保存每一个断点。