中断和异常的概念

  • 中断Interruption
  • 异常Exception

在操作系统中引入核心态用户态这两种工作状态后,就需要考虑这两种状态之间如何切换。操作系统内核工作在核心态,而用户程序工作在用户态。但系统不允许用户程序实现核心态的功能,而它们又必须使用这些功能。因此,需要在核心态建立一些“门”,实现从用户态进入核心态。在实际操作系统中,CPU运行上层程序时唯一能进入这些“门”的途径就是通过中断或异常

当中断或异常发生时,运行用户态的CPU会立即进入核心态,这是通过硬件实现的(例如,用一个特殊寄存器的一位来表示CPU所处的工作状态,0表示核心态,1表示用户态。若要进入核心态,只需将该位置0即可)。

中断是操作系统中非常重要的一个概念,对一个运行在计算机上的实用操作系统而言,缺少了中断机制,将是不可想象的。

中断(Interruption)

中断(Interruption),也称外中断,指来自CPU执行指令以外的事件的发生,如:

  • 设备发出的I/O结束中断,表示设备输入/输出处理已经完成,希望处理机能够向设备发下一个输入/输出请求,同时让完成输入/输出后的程序继续运行。
  • 时钟中断,表示一个固定的时间片已到,让处理机处理计时、启动定时运行的任务等。

这一类中断通常是与当前程序运行无关的事件,即它们与当前处理机运行的程序无关。

异常(Exception)

异常(Exception),也称内中断、例外或陷入(Trap),指源自CPU执行指令内部的事件,如:

程序的非法操作码、地址越界、算术溢出、虚存系统的缺页以及专门的陷入指令等引起的事件。

对异常的处理一般要依赖于当前程序的运行现场,而且异常不能被屏蔽,一旦出现应立即处理。关于内中断和外中断的联系与区别如图1-2所示。

图1-2 内中断和外中断的联系与区别

Wu_Being博客声明:本人博客欢迎转载,请标明博客原文和原链接!谢谢!
《中断和异常的概念》:
http://blog.csdn.net/u014134180/article/details/78418428

如果你看完这篇博文,觉得对你有帮助,并且愿意付赞助费,那么我会更有动力写下去。

时间: 2024-09-26 23:29:50

中断和异常的概念的相关文章

80386的中断和异常

80386除了保持8086/80386的相关功能外,还增强了中断处理能力,并引入了"异常"的概念.本文将介绍80386中断和异常的机制. 8086/8088把中断分为内部中断和外部中断两大类.为了支持多任务和虚拟存储器等功能,80386把外部中断称为"中断",把内部中断称为"异常".与8086/8088一样,80386通常在两条指令之间响应中断或异常.80386最多处理256种中断或异常. 1.中断     对80386而言,中断是由异步的外部事

Linux内核中断和异常分析(中)

在linux内核中,每一个能够发出中断请求的硬件设备控制器都有一条名为IRQ的输出线.所有现在存在的IRQ线都与一个名为可编程中断控制器的硬件电路的输入引脚相连,上次讲到单片机的时候,我就讲到了单片机中断的一些概念.我们现在来看一幅图,更好说明一个问题:      这下面的这幅图是51单片机的一个关于矩阵键盘的学习的一个proteus的仿真电路图. 其中P3.2和P3.3为外部中断引脚,当可编程控制器(51MCU)收到外部中断响应的时候,会执行一些特定的操作,当然这需要开发者去编写一个中断初始化

中断和异常的转移方法

80386实模式下的中断和异常的转移方法与8086相同.这里介绍的中断和异常的转移方法是指 80386在保护模式下响应中断和处理异常时所采用的转移方法. 1.中断描述符表IDT 与8086/8088一样,在响应中断或者处理异常时,80386根据中断向量号转对应的处理程序.但是,在保护模式下,80386不使用实模式下的中断向量表,而是使用中断描述符表IDT.在保护模式下,80386把中断向量号作为中断描述符表IDT中描述符的索引,而不再是中断向量表中的中断向量的索引.象全局描述符表GDT一样,在整

Linux的中断和异常扫盲笔记

广义的中断: 什么是中断: 所谓中断是指CPU对系统发生的某个事件作出的一种反应,让CPU暂时停止当前程序的执行转而执行处理新情况的程序和执行过程:CPU在遇到某个事件时,暂停正在执行的程序,保留现场后自动地转去执行相应的处理程序,处理完该事件后再返回断点继续执行被"打断"的程序.事实上CPU对于中断和异常的具体处理机制本质上是完全一致的 即在程序运行过程中,系统出现了一个必须由CPU立即处理的情况,此时,CPU暂时中止程序的执行转而处理这个新的情况的过程就叫做中断. 广义的中断包含异

Linux内核中断和异常分析(上)

中断,通常被定义为一个事件.打个比方,你烧热水,水沸腾了,这时候你要去关掉烧热水的电磁炉,然后再去办之前手中停不下来的事情.那么热水沸腾就是打断你正常工作的一个信号机制.当然,还有其它的情况,我们以后再做分析.       中断也就是这样产生的,中断分为同步中断还有异步中断.       同步中断在Intel的手册中被称为异常,而异步中断被称作中断.打个比方在ARM处理器的异常种类就有不少,有未定义指令异常,软中断异常,快中断异常等等.异常是由程序错误产生的,或者是内核必须处理的异常条件产生的.

《LINUX3.0内核源代码分析》第二章:中断和异常 【转】

转自:http://blog.chinaunix.net/uid-25845340-id-2982887.html 摘要:第二章主要讲述linux如何处理ARM cortex A9多核处理器的中断.异常.介绍了中断向量表的入口.通用的中断处理代码.中断和软中断.延迟处理.中断异常的返回过程. 第二章内容较多,会分几个部分讲述.本部分主要讲进入.退出中断的过程,这部分代码涉及的都是汇编部分.   法律声明:<LINUX3.0内核源代码分析>系列文章由谢宝友(scxby@163.com)发表于ht

Java异常--其他概念—throw、throws、Exception、RuntimeException、断言

1.throws关键字 假设定义一个除法的方法div(),对于除法来说:有可能出现异常,有可能不出现异常.所以对于这样的方法来说,最好使用throws关键字进行声明.一旦出现了异常,则交给调用处处理. 因为div()方法使用了throws关键字声明.所以调用此方法的时候,必须进行异常处理. class Math{ public int div(int i,int j) throws Exception{ // 定义除法操作,如果有异常,则交给被调用处处理 int temp = i / j ; /

Java异常--基本概念try...catch...finally

1.异常: 2.异常处理格式: public class ExceptionDemo05{ public static void main(String args[]){ System.out.println("********** 计算开始 ***********") ; int i = 0 ; // 定义整型变量 int j = 0 ; // 定义整型变量 try{ String str1 = args[0] ; // 接收第一个参数 String str2 = args[1] ;

Java异常的概念和分类

java异常是java提供的用于处理程序中错误的一种机制. 所谓错误是指在程序运行的过程中发生的一些异常事件(如:除0溢出,数组下标越界,所要读取的文件不存在). 设计良好地程序应该在程序异常发生时提供处理这些错误的方法,使得程序不会因为异常的发生而阻断或产生不可预见的结果. Java程序的执行过程中如出现异常事件,可以生成一个异常类对象,该异常对象封装了异常事件的信息,并将被提交给java运行时系统,这个过程称为抛出(throw)异常. 当Java运行时系统接收到异常对象时,会寻找能处理这一异