-
简述中断处理的6个步骤_完整的中断处理过程分为那几个阶段?
2020-12-23 01:29:17展开全部1)中断e69da5e6ba903231313335323631343130323136353331333431366338响应的事前准备:系统要想能够应对各种不同的中断信号,总的来看就是需要知道每种信号应该由哪个中断服务程序负责以及这些中断服务程序...展开全部
1)中断e69da5e6ba903231313335323631343130323136353331333431366338响应的事前准备:
系统要想能够应对各种不同的中断信号,总的来看就是需要知道每种信号应该由哪个中断服务程序负责以及这些中断服务程序具体是如何工作的。系统只有事前对这两件事都知道得很清楚,才能正确地响应各种中断信号和异常。
2) CPU检查是否有中断/异常信号
CPU在执行完当前程序的每一条指令后,都会去确认在执行刚才的指令过程中中断控制器(如:8259A)是否发送中断请求过来,如果有那么CPU就会在相应的时钟脉冲到来时从总线上读取中断请求对应的中断向量。
对于异常和系统调用那样的软中断,因为中断向量是直接给出的,所以和通过IRQ(中断请求)线发送的硬件中断请求不同,不会再专门去取其对应的中断向量。
3) 根据中断向量到IDT表中取得处理这个向量的中断程序的段选择符
CPU根据得到的中断向量到IDT表里找到该向量对应的中断描述符,中断描述符里保存着中断服务程序的段选择符。
4) 根据取得的段选择符到GDT中找相应的段描述符
CPU使用IDT查到的中断服务程序的段选择符从GDT中取得相应的段描述符,段描述符里保存了中断服务程序的段基址和属性信息,此时CPU就得到了中断服务程序的起始地址。
5) CPU根据特权级的判断设定即将运行的中断服务程序要使用的栈的地址
CPU会根据CPL和中断服务程序段描述符的DPL信息确认是否发生了特权级的转换,比如当前程序正运行在用户态,而中断程序是运行在内核态的,则意味着发生了特权级的转换,这时CPU会从当前程序的TSS信息(该信息在内存中的首地址存在TR寄存器中)里取得该程序的内核栈地址。
6) 保护当前程序的现场
CPU开始利用栈保护被暂停执行的程序的现场:依次压入当前程序使用的eflags,cs,eip,errorCode(如果是有错误码的异常)信息。
7) 跳转到中断服务程序的第一条指令开始执行
CPU利用中断服务程序的段描述符将其第一条指令的地址加载到cs和eip寄存器中,开始执行中断服务程序。这意味着先前的程序被暂停执行,中断服务程序正式开始工作。
8) 中断服务程序处理完毕,恢复执行先前中断的程序
在每个中断服务程序的最后,必须有中断完成返回先前程序的指令,这就是iret(或iretd)。程序执行这条返回指令时,会从栈里弹出先前保存的被暂停程序的现场信息,即eflags,cs,eip重新开始执行。
扩展资料
硬件中断导致处理器通过一个上下文切换(context switch)来保存执行状态(以程序计数器和程序状态字等寄存器信息为主);软件中断则通常作为CPU指令集中的一个指令,以可编程的方式直接指示这种上下文切换,并将处理导向一段中断处理代码。
中断在计算机多任务处理,尤其是实时系统中尤为有用。这样的系统,包括运行于其上的操作系统,也被称为“中断驱动的”(interrupt-driven)。
中断使CPU中止正在执行的程序而转去处理特殊事件的操作,这些引起中断的事件称为中断源,它们可能是来自外设的输入输出请求,也可能是计算机的一些异常事故或其它内部原因。
在运行一个程序的过程中,断续地以“插入”方式执行一些完成特定处理功能的程序段,这种处理方式称为中断。
-
:I/O中断处理过程包括哪几个阶段?中断服务程序流程分为哪几部分?
2020-03-22 19:20:25完整的中断处理过程分为 1)中断响应的事前准备: 系统要想能够应对各种不同的中断信号,总的来看就是需要知道每种信号应该由哪个中断服务程序负责以及这些中断服务程序具体是如何工作的。系统只有事前对这两件事都...完整的中断处理过程分为
1)中断响应的事前准备:
系统要想能够应对各种不同的中断信号,总的来看就是需要知道每种信号应该由哪个中断服务程序负责以及这些中断服务程序具体是如何工作的。系统只有事前对这两件事都知道得很清楚,才能正确地响应各种中断信号和异常。
2) CPU检查是否有中断/异常信号
CPU在执行完当前程序的每一条指令后,都会去确认在执行刚才的指令过程中中断控制器(如:8259A)是否发送中断请求过来,如果有那么CPU就会在相应的时钟脉冲到来时从总线上读取中断请求对应的中断向量。
对于异常和系统调用那样的软中断,因为中断向量是直接给出的,所以和通过IRQ(中断请求)线发送的硬件中断请求不同,不会再专门去取其对应的中断向量。
3) 根据中断向量到IDT表中取得处理这个向量的中断程序的段选择符
CPU根据得到的中断向量到IDT表里找到该向量对应的中断描述符,中断描述符里保存着中断服务程序的段选择符。
4) 根据取得的段选择符到GDT中找相应的段描述符
CPU使用IDT查到的中断服务程序的段选择符从GDT中取得相应的段描述符,段描述符里保存了中断服务程序的段基址和属性信息,此时CPU就得到了中断服务程序的起始地址。
5) CPU根据特权级的判断设定即将运行的中断服务程序要使用的栈的地址
CPU会根据CPL和中断服务程序段描述符的DPL信息确认是否发生了特权级的转换,比如当前程序正运行在用户态,而中断程序是运行在内核态的,则意味着发生了特权级的转换,这时CPU会从当前程序的TSS信息(该信息在内存中的首地址存在TR寄存器中)里取得该程序的内核栈地址。
6) 保护当前程序的现场
CPU开始利用栈保护被暂停执行的程序的现场:依次压入当前程序使用的eflags,cs,eip,errorCode(如果是有错误码的异常)信息。
7) 跳转到中断服务程序的第一条指令开始执行
CPU利用中断服务程序的段描述符将其第一条指令的地址加载到cs和eip寄存器中,开始执行中断服务程序。这意味着先前的程序被暂停执行,中断服务程序正式开始工作。
8) 中断服务程序处理完毕,恢复执行先前中断的程序
在每个中断服务程序的最后,必须有中断完成返回先前程序的指令,这就是iret(或iretd)。程序执行这条返回指令时,会从栈里弹出先前保存的被暂停程序的现场信息,即eflags,cs,eip重新开始执行。
中断服务程序流程
保护现场
保护现场有两个含义,其一是保存程序的断点;其二是保存通用寄存器和状态寄存器的内
容。前者由中断隐指令完成(详见8.4.4节),后者由中断服务程序完成。具体而言,可在中断
服务程序的起始部分安排若干条存数指令,将寄存器的内容存至存储器中保存,或用进栈指令
(PUSH)将各寄存器的内容推入堆栈保存,即将程序中断时的“现场”保存起来。2.中断服务(设备服务)
这是中断服务程序的主体部分,对于不同的中断请求源,其中断服务操作内容是不同的,例
如,打印机要求CPU将需打印的一行字符代码,通过接口送人打印机的缓冲存储器中(参见图
573)以仕打印机打印又如,显示设各要求CPU将需显示的一屏字符代码通过接口送人显示
5.23)以供打印机打印。又如,显示设备要求CPU将需显示的一屏字符代码通过接口送入显示
器的显示存储器中(参见图5.18)。3.恢复现场
这是中断服务程序的结尾部分,要求在退出服务程序前,将原程序中断时的“现场”恢复至
原来的寄存器中。通常可用取数指令或出栈指令(POP),将保存在存储器(或堆栈)中的信息这
回到原来的寄存器中。4.中断返回
中断服务程序的最后一条指令通常是–条中断返回指令,使其返回到原程序的断点处,以信
继续执行原程序。
计算机在处理中断的过程中,有可能出现新的中断请求,此时如果CPU暂停现行的中断月
务程序,转去处理新的中断请求,这种现象称为中断嵌套,或多重中断。倘若CPU在执行中断月
务程序时,对新的中断请求不予理睬,这种中断称为单重中断。这两种处理方式的中断服务程戶
略有区别。图5.43(a)和图5.43(b)分别为单重中断和多重中断服务程序流程。比较图5.4
()和图5.43(h)可以发现.其区别在千“开中断”的设置时间不同。 -
中断处理过程示意图_中断及中断处理过程
2020-12-20 04:41:16中断及中断处理过程1. 中断和异常的概念区别Intel的官方文档里将中断和异常理解为两种中断当前程序执行的不同机制。这是中断和异常的共同点。不同点在于:中断(interrupt)是异步的事件,典型的比如由I/O设备触发;...中断及中断处理过程
1. 中断和异常的概念区别
Intel的官方文档里将中断和异常理解为两种中断当前程序执行的不同机制。这是中断和异常的共同点。不同点在于:
中断(interrupt)是异步的事件,典型的比如由I/O设备触发;异常(exception)是同步的事件,典型的比如处理器执行某条指令时发现出错了等等。
中断又可以分为可屏蔽中断和非可屏蔽中断,异常又分为故障、陷阱和异常中止3种,它们的具体区别很多书籍和官方文档都解释的比较清楚这里不再赘述。
关于它们的区别有两点是需要注意的:
1)平常所说的屏蔽中断是不包括异常的,即异常不会因为CPU的IF位被清(关中断,指令:cli)而受影响,比如缺页异常,即使关了中断也会触发CPU的处理。
2)通常说的int 80h这种系统调用使用的中断方式实际上硬件上是理解为异常处理的,因此也不会被屏蔽掉,这也很好理解,int 80h这种中断方式是程序里主动触发的,对于CPU来说属于同步事件,因此也就属于异常的范畴。
2. 中断(异常)处理过程
需要明确的一点是CPU对于中断和异常的具体处理机制本质上是完全一致的,即:
当CPU收到中断或者异常的信号时,它会暂停执行当前的程序或任务,通过一定的机制跳转到负责处理这个信号的相关处理程序中,在完成对这个信号的处理后再跳回到刚才被打断的程序或任务中。这里只描述保护模式下的处理过程,搞清楚了保护模式下的处理过程(更复杂),实模式下的处理机制也就容易理解了。
具体的处理过程如下:
0)中断响应的事前准备:
系统要想能够应对各种不同的中断信号,总的来看就是需要知道每种信号应该由哪个中断服务程序负责以及这些中断服务程序具体是如何工作的。系统只有事前对这两件事都知道得很清楚,才能正确地响应各种中断信号和异常。
[a]系统将所有的中断信号统一进行了编号(一共256个:0~255),这个号称为中断向量,具体哪个中断向量表示哪种中断有的是规定好的,也有的是在给定范围内自行设定的。
中断向量和中断服务程序的对应关系主要是由IDT(中断向量表)负责。操作系统在IDT中设置好各种中断向量对应的中断描述符(一共有三类中断门描述符:任务门、中断门和陷阱门),留待CPU查询使用。而IDT本身的位置是由idtr保存的,当然这个地址也是由OS填充的。
[b]中断服务程序具体负责处理中断(异常)的代码是由软件,也就是操作系统实现的,这部分代码属于操作系统内核代码。也就是说从CPU检测中断信号到加载中断服务程序以及从中断服务程序中恢复执行被暂停的程序,这个流程基本上是硬件确定下来的,而具体的中断向量和服务程序的对应关系设置和中断服务程序的内容是由操作系统确定的。
1)CPU检查是否有中断/异常信号
CPU在执行完当前程序的每一条指令后,都会去确认在执行刚才的指令过程中中断控制器(如:8259A)是否发送中断请求过来,如果有那么CPU就会在相应的时钟脉冲到来时从总线上读取中断请求对应的中断向量[2]。
对于异常和系统调用那样的软中断,因为中断向量是直接给出的,所以和通过IRQ(中断请求)线发送的硬件中断请求不同,不会再专门去取其对应的中断向量。
2)根据中断向量到IDT表中取得处理这个向量的中断程序的段选择符
CPU根据得到的中断向量到IDT表里找到该向量对应的中断描述符,中断描述符里保存着中断服务程序的段选择符。
3)根据取得的段选择符到GDT中找相应的段描述符
CPU使用IDT查到的中断服务程序的段选择符从GDT中取得相应的段描述符,段描述符里保存了中断服务程序的段基址和属性信息,此时CPU就得到了中断服务程序的起始地址。
这里,CPU会根据当前cs寄存器里的CPL和GDT的段描述符的DPL,以确保中断服务程序是高于当前程序的,如果这次中断是编程异常(如:int 80h系统调用),那么还要检查CPL和IDT表中中断描述符的DPL,以保证当前程序有权限使用中断服务程序,这可以避免用户应用程序访问特殊的陷阱门和中断门[3]。
4)CPU根据特权级的判断设定即将运行的中断服务程序要使用的栈的地址
CPU会根据CPL和中断服务程序段描述符的DPL信息确认是否发生了特权级的转换,比如当前程序正运行在用户态,而中断程序是运行在内核态的,则意味着发生了特权级的转换,这时CPU会从当前程序的TSS信息(该信息在内存中的首地址存在TR寄存器中)里取得该程序的内核栈地址,即包括ss和esp的值,并立即将系统当前使用的栈切换成新的栈。这个栈就是即将运行的中断服务程序要使用的栈。紧接着就将当前程序使用的ss,esp压到新栈中保存起来。
6)保护当前程序的现场
CPU开始利用栈保护被暂停执行的程序的现场:依次压入当前程序使用的eflags,cs,eip,errorCode(如果是有错误码的异常)信息。
官方文档[1]给出的栈变化的示意图如下:
7)跳转到中断服务程序的第一条指令开始执行
CPU利用中断服务程序的段描述符将其第一条指令的地址加载到cs和eip寄存器中,开始执行中断服务程序。这意味着先前的程序被暂停执行,中断服务程序正式开始工作。
8)中断服务程序处理完毕,恢复执行先前中断的程序
在每个中断服务程序的最后,必须有中断完成返回先前程序的指令,这就是iret(或iretd)。程序执行这条返回指令时,会从栈里弹出先前保存的被暂停程序的现场信息,即eflags,cs,eip重新开始执行。
-
中断处理过程
2019-08-13 16:05:45概念 中断全过程指的是从中断源发出中断请求开始,CPU响应这个请求,现行程序被中断,转至中断服务程序,直到中断...大体上可以把中断全过程分为5个阶段:中断请求、中断判优、中断响应、中断处理和中断返回。 ...中断
在CPU执行程序的过程中,出现了某种紧急情况或异常的事件时,暂停正在执行的程序,转去处理该事件,并在处理完该事件之后返回断点处(指返回主程序时执行的第一条指令的地址)继续执行刚刚被暂停的程序。
中断源
任何引发中断的事件。
中断分类
1)硬件中断(即外中断)
(1)非屏蔽中断(NMI):整个系统只有一个。
(2)可屏蔽中断(INTR)
2)软件中断(内中断)
(1)除法错误中断
(2)溢出中断
(3)单步中断
(4)断点中断
(5)中断指令INT n中断
单步中断和断点中断用来调试程序
中断优先级:8086的中断优先级排序:内中断(除单步中断),NMI,INTR,单步中断。
中断向量表:是存放中断向量(中断服务程序的入口地址)的一个特定的内存区域。这里有必要注意一下,8086可以处理256种中断。
中断处理步骤
(1)中断请求:中断源向CPU发出中断请求
(2)中断响应
(3)保护断点和现场:以便在中断服务程序执行后正确的返回主程序。
(4)中断处理
(5)中断返回
8086中断处理步骤
(1)内部中断以及NMI中断不需要从数据总线上读取中断类型码,而INTR需要,而且该中断类型码由发出中断请求的接口电路提供。
(2)CPU得到中断类型码后将标志寄存器内容压入栈中(PUSHF),保护中断时标志位的状态。
(3)令单步标志TF =0(禁止CPU以单步方式执行中断服务程序)。
(4)令中断允许标志IF=0(即:在响应该中断后不再响应别的中断。由于CPU在中断响应时,自动将IF置为0,如果要允许中断嵌套,必须在后面的中断服务程序中用开中断指令STI重新将IF置为1)
(6)将当前CS:IP入栈,即保护断点和现场。
(7)根据中断类型码在中断向量表中找到相应中断服务程序的入口地址,将其装入CS:IP,转向中断服务程序。
(8)为了保证NMI中弄断有着实质性的优先级,所以在执行中断服务之前需要再次检查是否有NMI中断。
(9)执行中断服务程序。
(10)IRET指令实现原CS:IP,标志寄存器的出栈,即恢复断点并返回到主程序。 -
中断及中断处理过程
2018-10-09 17:32:02中断及中断处理过程 1. 中断和异常的概念区别 Intel的官方文档里将中断和异常理解为两种中断当前程序执行的不同机制。这是中断和异常的共同点。不同点在于: 中断(interrupt)是异步的事件,典型的比如由I/O... -
wince中断处理过程
2015-02-27 17:27:05因此,了解中断的处理过程对驱动开发极其重要,下面对WINCE下的中断处理过程做一个简单介绍。 中断处理可以分为两部分:中断服务例程-ISR、中断服务线程-IST。系统在处理中断异常的时候,应该要尽可 -
中断的概念和中断处理过程
2013-05-30 22:17:06中断的概念和中断处理过程 (1)中断: 在运行一个程序的过程中,断续地以“插入”方式执行一些完成特定处理功能的程序段,这种处理方式称为中断。 (2)中断的作用: ◎并行操作 ◎硬件故障报警与处理 ◎... -
中断处理过程(含8086)
2019-07-13 12:46:19中断处理过程 中断的相关定义 中断:在CPU执行程序的过程中,出现了某种紧急情况或异常的事件时,暂停正在执行的程序,转去处理该事件,并在处理完该事件之后返回断点处(指返回主程序时执行的第一条指令的地址)... -
Linux在x86上的中断处理过程
2019-06-11 16:39:56Linux在x86上的中断处理过程一:引言二:x86的中断处理过程三:注意事项术语解释:CPL,DPL,RPL5.1.CPL5.2.DPL5.3.RPLx86 Registers 一:引言 在Intel的文档中,把中断分为两种。一种是异常,也叫 同步中断 。一种称... -
linux3.10 中断处理过程(三)softirq 软中断
2019-08-19 23:23:361. 为什么要软中断 ...于是,linux内核设计出了一种架构,中断函数需要处理的任务分为两部分,一部分在中断处理函数中执行,这时系统关闭中断。另外一部分在软件中断中执行,这个时候开启中断,系统可... -
WinCE下的中断处理过程15814101899
2010-09-27 16:17:00因此,了解中断的处理过程对驱动开发极其重要,下面对WINCE下的中断处理过程做一个简单介绍。 中断处理可以分为两部分:中断服务例程-ISR、中断服务线程-IST。系统在处理中断异常的时候,应该要尽可能快的完成,... -
嵌入式系统/ARM技术中的Linux在x86上的中断处理过程
2020-11-07 10:00:08作者:李志敏,华清远见... 二:x86的中断处理过程 由于中断是开着的,所以当执行完一条指令后,cs和eip这对寄存器中已经包含了下一条将要执行的指令的逻辑地址。在处理那条指令之前,控制单元会检查在运行前一条指 -
中断处理基础(二) 处理过程
2013-02-05 13:30:10中断及中断处理过程 1. 中断和异常的概念区别 Intel的官方文档里将中断和异常理解为两种中断当前程序执行的不同机制。这是中断和异常的共同点。不同点在于: 中断(interrupt)是异步的事件,典型的比如由I/O... -
Nucleus中断处理过程!!!!
2015-09-14 09:55:27Nucleus的中断分为管理的和非管理的中断。 管理中断:需要向操作系统注册该中断向量,中断产生后通过该中断向量注册的低级中断服务程序(LISR)来激活高级的中断服务程序(HISR)。 非管理中断:不... -
linux在x86上的中断处理过程(详细)
2012-04-04 21:17:30Linux在x86上的中断处理过程 一:引言 在Intel的文档中,把中断分为两种。一种是异常,也叫同步同断。一种称之为中断,也叫异常中断。同步中断指的是由CPU控制单元产生,之所以称之为同步,是因为只有一条指令执行完毕... -
中断全过程
2020-03-27 18:54:19中断全过程指的是从中断源发出中断请求开始,CPU响应这个...中断处理过程基本上由3部分组成: 第一部分为准备部分,其基本功能是保护现场,对于非向量中断方式则需要确定中断源,最后开放中断,允许更高级的中断请求... -
系统中断和处理过程
2018-11-25 23:15:56cpu状态分为用户态和内核态(也被成为supervisor mode)两种,听名字也知道这两种权限不一样,前者只能使用普通命令,而后者可以使用所有的命令。 特权指令是只能由操作系统使用的命令(内核级别), 比如启动I/O, ... -
linux 中断机制的处理过程
2018-10-19 09:10:21一、中断的概念 中断是指在CPU正常运行期间,由于内外部事件或由程序预先安排的事件引起的CPU暂时停止正在运行的程序,转而为该内部或外部事件或...Linux中通常分为外部中断(又叫硬件中断)和内部中断(又叫异... -
中断,异常,系统调用的处理过程
2019-09-05 07:49:00处理过程分为硬件处理和软件处理,每个外设都有相对应的中断号,从而让操作系统和所识别; 中断 一:硬件(外设) 设置中断标记(CPU初始化) 1:将内部外部事件设置中断标记 2:找出中断事件ID,让操作系统识别... -
linux中断机制的处理过程
2014-08-22 13:38:58一、中断的概念 中断是指在CPU正常运行...Linux中通常分为外部中断(又叫硬件中断)和内部中断(又叫异常)。 在实地址模式中,CPU把内存中从0开始的1KB空间作为一个中断向量表。表中的每一项占4个字节。但是在保