通过初始化编程向8259A写入相应的初始化命令ICW,可以使芯片处于一个规定的基本工作方式,并在此方式下进行工作。8259A的初始化命令字共有4个ICW1-ICW4,进行初始化时要求ICW1-ICW4按一定的顺序写入。
首先,一个外部中断请求信号通过中断请求线 IRQ ,传输到 IMR (中断屏蔽寄存器) , IMR 根据所设定的中断屏蔽字( OCW1 ),决定是将其丢弃还是接受。如果可以接受,则 8259A 将 IRR (中断请求暂存寄存器)中代表此 IRQ 的位置位,以表示此 IRQ 有中断请求信号,并同时向 CPU 的 INTR (中断请求) 管脚发送一个信号,但 CPU 这时可能正在执行一条指令,因此 CPU 不会立即响应,而当这 CPU 正忙着执行某条指令时,还有可能有其余的 IRQ 线送来中断请求,这些请求都会接受 IMR 的挑选,如果没有被屏蔽,那么这些请求也会被放到 IRR 中,也即 IRR 中代表它们的 IRQ 的相应位会被置 1 。
当 CPU 执行完一条指令时后,会检查一下 INTR 管脚是否有信号,如果发现有信号,就会转到中断服务,此时, CPU 会立即向 8259A 芯片的 INTA (中断应答) 管脚发送一个信号。当芯片收到此信号后,判优部件开始工作,它在 IRR 中,挑选优先级最高的中断,将中断请求送到 ISR (中断服务寄存器) ,也即将 ISR 中代表此IRQ 的位置位,并将 IRR 中相应位置零,表明此中断正在接受 CPU 的处理。同时,将它的编号写入中断向量寄存器 IVR 的低三位( IVR 正是由 ICW2 所指定的,不知你是否还记得 ICW2 的最低三位在指定时都是 0 ,而在这里,它们被利用了!)这时, CPU 还会送来第二个 INTA 信号,当收到此信号后,芯片将 IVR 中的内容,也就是此中断的中断号送上通向 CPU 的数据线。
这里需要理解的是中断屏蔽与优先级判定并不是一回事,如果被屏蔽了,那么参加判定的机会也都没了。在默认情况下, IRQ0 的优先级最高, IRQ7 最低。当然我们可以更改这个设定,这样在下面有详细描述。
言归正传,当芯片把中断号送上通往 CPU 的数据线后,就会检测 ICW4 中的 EOI 是否被置位。如果 EOI 被置位表示需要自动清除中断请求信号,则芯片会自动将 ISR 中的相应位清零。如果 EOI 没有被置位,则需要中断处理程序向芯片发送 EOI 消息 ,芯片收到 EOI 消息后才会将 ISR 中的相应位清零。
这里的机关存在于这样一个地方。优先权判定是存在于 8259A 芯片中的,假如 CPU 正在处理 IRQ1 线来的中断,这时 ISR 中 IRQ1 所对应的位是置 1 的。这时来了一个 IRQ2 的中断请求, 8259A 会将其同 ISR 中的位进行比较,发现比它高的 IRQ1 所对应的位被置位,于是 8259A 会很遗憾的告诉 IRQ2 :你先在 IRR 中等等。而如果这时来的是 IRQ0 ,芯片会马上让其进入 ISR ,即将 ISR 中的 IRQ0 所对应的位置位,并向 CPU 发送中断请求。这时由于 IRQ1 还在被 CPU 处理,所以 ISR 中 IRQ1 的位也还是被置位的,但由于 IRQ0 的优先级高,所以 IRQ0 的位也会被置位,并向 CPU 发送新的中断请求。此时 ISR 中 IRQ0 与 IRQ1 的位都是被置位的,这种情况在多重中断时常常发生,非常正常。
如果 EOI 被设为自动的,那么 ISR 中的位总是被清零的(在 EOI 被置位的情况下, 8259A 只要向 CPU 发送了中断号就会将 ISR 中的相应位清零),也就是如果有中断来,芯片就会马上再向 CPU 发出中断请求,即使CPU 正在处理 IRQ0 的中断, CPU 并不知道谁的优先级高,它只会简单的响应 8259A 送来的中断,因此,这种情况下低优先级的中断就可能会中断高优先级的中断服务程序。所以在 PC 中,我们总是将 EOI 位清零,而在中断服务程序结束的时候才发送 EOI 消息。
8259A是一个中断控制器。在一个8259A芯片有如下几个内部寄存器: Interrupt Mask Register (IMR) Interrupt Request Register (IRR) In Sevice Register (ISR) IMR被用作过滤被屏蔽的中断;IRR被用作暂时放置未被进一步处理的Interrupt;当一个Interrupt正在被CPU处理时,此中断被放置在ISR中。 除了这几个寄存器之外,8259A还有一个单元叫做Priority Resolver,当多个中断同时发生时,Priority Resolver根据它们的优先级,将高优先级者优先传递给CPU。当一个中断请求从IR0到IR7中的某根线到达IMR时,IMR首先判断此IR是否被屏蔽,如果被屏蔽,则此中断请求被丢弃;否则,则将其放入IRR中。 在此中断请求不能进行下一步处理之前,它一直被放在IRR中。一旦发现处理中断的时机已到,Priority Resolver将从所有被放置于IRR中的中断中挑选出一个优先级最高的中断,将其传递给CPU去处理。IR号越低的中断优先级别越高,比如IR0的优先级别是最高的。 8259A通过发送一个INTR(Interrupt Request)信号给CPU,通知CPU有一个中断到达。CPU收到这个信号后,会暂停执行下一条指令,然后发送一个INTA(Interrupt Acknowledge)信号给8259A。8259A收到这个信号之后,马上将ISR中对应此中断请求的Bit设置,同时IRR中相应的bit会被reset。比如,如果当前的中断请求是IR3的话,那么ISR中的bit-3就会被设置,IRR中IR3对应的bit就会被reset。这表示此中断请求正在被CPU处理,而不是正在等待CPU处理。 随后,CPU会再次发送一个INTA信号给8259A,要求它告诉CPU此中断请求的中断向量是什么,这是一个从0到255的一个数。8259A根据被设置的起始向量号(起始向量号通过中断控制字ICW2被初始化)加上中断请求号计算出中断向量号,并将其放置在Data Bus上。比如被初始化的起始向量号为8,当前的中断请求为IR3,则计算出的中断向量为8+3=11。 CPU从Data Bus上得到这个中断向量之后,就去IDT中找到相应的中断服务程序ISR,并调用它。如果8259A的End of Interrupt (EOI)通知被设定位人工模式,那么当ISR处理完该处理的事情之后,应该发送一个EOI给8259A。 8259A得到EOI通知之后,ISR寄存器中对应于此中断请求的Bit会被Reset。 如果8259A的End of Interrupt (EOI)通知被设定位自动模式,那么在第2个INTA信号收到后,8259A ISR寄存器中对应于此中断请求的Bit就会被Reset。 在此期间,如果又有新的中断请求到达,并被放置于IRR中,如果这些新的中断请求中有比在ISR寄存中放置的所有中断优先级别还高的话,那么这些高优先级别的中断请求将会被马上按照上述过程进行处理;否则,这些中断将会被放在IRR中,直到ISR中高优先级别的中断被处理结束,也就是说知道ISR寄存器中高优先级别的bit被Reset为止.
- 【k8s】基础概念 + 工作原理
工作原理: 原理图 工作原理描述: 1>用户通过kubectl或者API server的REST API接口,提交需要运行的docker容器(创建pod请求): 2>api server将 ...
- Security:蠕虫的行为特征描述和工作原理分析
________________________ 参考: 百度文库---蠕虫的行为特征描述和工作原理分析 http://wenku.baidu.com/link?url=ygP1SaVE4t4-5fi ...
- 通俗易懂描述dubbo工作原理
关于dubbo的描述就不再赘述,直接进入主题,那就是dubbo的工作原理.dubbo分为服务提供者和服务消费者,主要的工作内容有以下几点:提供者暴露服务.消费者引入服务.提供者和消费者和注册中心之间的 ...
- 第四次作业 描述HDFS体系结构、工作原理与流程
1.用自己的图,描述HDFS体系结构.工作原理与流程. 读数据的流程 2.伪分布式安装Hadoop.
- 描述Cookie和Session的作用,区别和各自的应用范围,Session工作原理
Session用于保存每个用户的专用信息. 每个客户端用户访问时,服务器都为每个用户分配一个唯一的会话ID(Session ID) . 她的生存期是用户持续请求时间再加上一段时间(一般是20分钟左右) ...
- 【夯实Nginx基础】Nginx工作原理和优化、漏洞
本文地址 原文地址 本文提纲: 1. Nginx的模块与工作原理 2. Nginx的进程模型 3 . NginxFastCGI运行原理 3.1 什么是 FastCGI ...
- 浏览器内部工作原理--作者:Tali Garsiel
本篇内容为转载,主要用于个人学习使用,作者:Tali Garsiel 一.介绍 浏览器可以被认为是使用最广泛的软件,本文将介绍浏览器的工作原理,我们将看到,从你在地址栏输入google.com到你看到 ...
- HTTP协议请求响应过程和HTTPS工作原理
HTTP协议 HTTP协议主要应用是在服务器和客户端之间,客户端接受超文本. 服务器按照一定规则,发送到客户端(一般是浏览器)的传送通信协议.与之类似的还有文件传送协议(file transfer p ...
- TODO:浅谈pm2基本工作原理
TODO:浅谈pm2基本工作原理 要谈Node.js pm2的工作原理,需要先来了解撒旦(Satan)和上帝(God)的关系. 撒旦(Satan),主要指<圣经>中的堕天使(也称堕天使撒旦 ...
随机推荐
- 快速构建Windows 8风格应用13-SearchContract构建
原文:快速构建Windows 8风格应用13-SearchContract构建 本篇博文主要介绍如何在应用中构建SearchContract,相应的原理已经在博文<快速构建Windows 8风格 ...
- SQL点滴17—使用数据库引擎存储过程,系统视图查询,DBA,BI开发人员必备基础知识
原文:SQL点滴17-使用数据库引擎存储过程,系统视图查询,DBA,BI开发人员必备基础知识 在开发过程中会遇到需要弄清楚这个数据库什么时候建的,这个数据库中有多少表,这个存储过程长的什么样子等等信息 ...
- 云服务器下ASP.NET Core 1.0环境搭建(包含mono与coreclr)
最近.net core如火如荼,国内这方面环境搭建方面的文档也非常多,但是不少已经是过时的,就算按照那个流程走下去也避免不了一些地方早就不一样了.所以下面我将从头到尾的教大家搭建一次环境,并且成功运行 ...
- 浅谈DevExpress<四>:TreeList中的拖拽功能
本篇要实现的目标,简单来说就是把一个treelist的节点用鼠标拖到另外的节点(自身或其他的listview)上,如下图: 1
- RDLC(Reportview)报表直接打印,支持所有浏览器,客户可在linux下浏览使用
最近在做一个打印清单的,但是rdlc报表自带的工具栏中的打印按钮只有在ie内核下的浏览器才可以使用(其他的就会 隐藏),这导致了使用火狐和谷歌浏览器还有使用linux系统的客户打印成了问题,于是就自己 ...
- 解决Timer回调方法重复调用的问题
如果Timer的回调方法的执行时间很长,计时器可能在上个回调方法还没有完成的时候再次触发,如果我们只是想让一个回调方法执行完后再执行下一个回调方法,可以这样: private static Timer ...
- Controller的激活
Controller的激活 概述 在此系列开篇的时候介绍了MVC的生命周期 , 对于请求的处理,都是将相应的类的方法注册到HttpApplication事件中,通过事件的依次执行从而完成对请求的处理. ...
- ios学习笔记之UIControl解读
UIControl,相信大家对其并不陌生吧,比如平常最常用的UIButton就是继承自UIControl的.按照惯例,还是先来看看为什么有UIControl这个类?什么时候用到它? 查下文档就可以看到 ...
- nosql和关系型数据库比较?
nosql和关系型数据库比较? 优点: 1)成本:nosql数据库简单易部署,基本都是开源软件,不需要像使用oracle那样花费大量成本购买使用,相比关系型数据库价格便宜 2)查询速度:nosql数据 ...
- download youtube video
using youtube-dl to download youtube video: (1) sudo apt-get install youtube-dl (2) run.sh #!/bin/ba ...