中断与异常有什么区别? 谢谢各位

thinker008 2004-09-16 01:09:44
中断与异常有什么区别? 谢谢各位
...全文
2566 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
nicknide 2004-09-16
  • 打赏
  • 举报
回复
中断是异常的一种,比如经常用的INTO或者0xCC中断,如果没有捕获,都将导致程序的崩溃。
但是我们也可以自己捕获它们,那样就不会有问题了……
不过不是C++语言中的异常,而是系统的异常机制,比如WIN系列的SEH机制
yoboo_yb 2004-09-16
  • 打赏
  • 举报
回复
mark
fannwong1982 2004-09-16
  • 打赏
  • 举报
回复
可以这么说,中断是由程序以外的事件引发的,比如I/O等。异常是由程序本身的错误引起的,比如除数为0
redleaves 2004-09-16
  • 打赏
  • 举报
回复
goodluckyxl(Yaz!|X) 都给了定义,怎么还.......

中断,是计算机的基础概念.它可以由系统错误(异常!?),系统事件(如按键,计时器),软件等触发.
异常是出错的另一个表述.
但如果和中断放在一起说,那异常只是引起中断的一个条件,是指出错而造成的中断.

而OS,C++中的异常是指处理错误(不一定是真的错)的一种手段.通常也是由硬件或软件引起中断,然后系统的中断处理代码调用异常处理函数/过程....

至于谁正常,谁不正常?都没法说.异常处理也是正常行为嘛,而且自己也可以抛出异常(软件中断).
dick4610 2004-09-16
  • 打赏
  • 举报
回复
中断是属于正常现象。
异常:是由于软件错误而引起
星羽 2004-09-16
  • 打赏
  • 举报
回复
8086/8088把中断分为内部中断和外部中断两大类。为了支持多任务和虚拟存储器等功能,80386把外部中断称为“中断”,把内部中断称为“异常”。与8086/8088一样,80386通常在两条指令之间响应中断或异常。80386最多处理256种中断或异常。
1.中断
对80386而言,中断是由异步的外部事件引起的。外部事件及中断响应与正执行的指令没有关系。通常,中断用于指示I/O设备的一次操作已完成。与8086/8088一样,80386有两根引脚INTR和NMI接受外部中断请求信号。INTR接受可屏蔽中断请求。NMI接受不可屏蔽中断请求。在80386中,标志寄存器EFLAGS中的IF标志决定是否屏蔽可屏蔽中断请求。
外部硬件在通过INTR发出中断请求信号的同时,还要向处理器给出一个8位的中断向量。处理器在响应可屏蔽中断请求时,读取这个由外部硬件给出的中断向量号。处理器对这个中断向量号并没有规定。但在具体的微机系统中,系统必须通过软件和硬件的配合设置,使得给出的这个中断向量号不仅与外部中断源对应,而且要避免中断向量号使用冲突情况的出现。可编程中断控制器芯片8259A可配合80386工作,能够根据设置向处理器提供上述中断向量号,还能处理中断请求的优先级。每个8259A芯片可以支持8路中断请求信号,如果使用9个8259A芯片(一个主片,8个从片),就可使80386在单个引脚INTR上接受多达64个中断源的中断请求信号。
处理器不屏蔽来自NMI的中断请求。处理器在响应NMI中断时,不从外部硬件接收中断向量号。与8086/8088一样,在80386中,不可屏蔽中断所对应的中断向量号固定为2。为了不可屏蔽中断的嵌套,每当接受一个NMI中断,处理器就在内部屏蔽了再次响应NMI,这一屏蔽过程直到执行中断返回指令IRET后才结束。所以,NMI处理程序应以IRET指令结束。
2.异常
异常是80386在执行指令期间检测到不正常的或非法的条件所引起的。异常与正执行的指令有直接的联系。例如,执行除法指令时,除数等于0。再如,执行指令时发现特权级不正确。当发生这些情况时,指令就不能成功完成。软中断指令“INT n”和“INTO”也归类于异常而不称为中断,这是因为执行这些指令产生异常事件。
80386识别多种不同类别的异常,并赋予每一种类别以不同的中断向量号。异常发生后,处理器就象响应中断那样处理异常。即根据中断向量号,转相应的中断处理程序。把这种中断处理程序称为异常处理程序可能更合适。
根据引起异常的程序是否可被恢复和恢复点不同,把异常进一步分类为故障(Fault)、陷阱(Trap)和中止(Abort)。我们把对应的异常处理程序分别称为故障处理程序、陷阱处理程序和中止处理程序。
故障是在引起异常的指令之前,把异常情况通知给系统的一种异常。80386认为故障是可排除的。当控制转移到故障处理程序时,所保存的断点CS及EIP的值指向引起故障的指令。这样,在故障处理程序把故障排除后,执行IRET返回到引起故障的程序继续执行时,刚才引起故障的指令可重新得到执行。这种重新执行,不需要操作系统软件的额外参与。故障的发现可能在指令开始执行之前,也可能在指令执行期间。如果在指令执行期间检测到故障,那么中止故障指令,并把指令的操作数恢复为指令开始执行之前的值。这可保证故障指令的重新执行得到正确的结果。例如,在一条指令的执行期间,如果发现段不存在,那么停止该指令的执行,并通知系统产生段故障,对应的段故障处理程序可通过加载该段的方法来排除故障,之后,原指令就可成功执行,至少不再发生段不存在的故障。
陷阱是在引起异常的指令之后,把异常情况通知给系统的一种异常。当控制转移到异常处理程序时,所保存的断点CS及EIP的值指向引起陷阱的指令的下一条要执行的指令。下一条要执行的指令,不一定就是下一条指令。因此,陷阱处理程序并不是总能根据保存的断点,反推确定出产生异常的指令。在转入陷阱处理程序时,引起陷阱的指令应正常完成,它有可能改变了寄存器或存储单元。软中断指令、单步异常是陷阱的例子。
中止是在系统出现严重情况时,通知系统的一种异常。引起中止的指令是无法确定的。产生中止时,正执行的程序不能被恢复执行。系统接收中止后,处理程序要重新建立各种系统表格,并可能重新启动操作系统。硬件故障和系统表中出现非法值或不一致的值是中止的例子。

hcj2002 2004-09-16
  • 打赏
  • 举报
回复
中断:一般指操作系统处理一事件的时候,其他优先等级比目前高的事件有了请求,这个时候操作系统会先去做另外一个事件,处理完了再回来处理刚才在处理事件.

异常:就是错误的意思吧.
doolin 2004-09-16
  • 打赏
  • 举报
回复
我个人认为不应该把中断和异常放在一起比较,中断是一种正常的行为.而异常是一种出错的行为.况且一个是硬件层面的概念,另一个是软件层面的概念.
to brucegong(飞行猪)缺页也是一种中断,当产生这个中断后,CPU要利用页面置换算法为缺页进程'腾出'页面.不过缺页中断捎不同于其他中断 -- 一般中断是在一条指令执行完后产生.
而缺页中断可能在一条指令执行过程中产生,并且可能是多个,所以它有'保留'中断的功能.
这已经是操作系统上的概念了,不好意思,跑题了.:)
pleasehelpme 2004-09-16
  • 打赏
  • 举报
回复
呵呵,大家真热心.
yjhyn 2004-09-16
  • 打赏
  • 举报
回复
楼上的真是仔细呀,那异常呢?怎么不贴出来
goodluckyxl 2004-09-16
  • 打赏
  • 举报
回复
1.中断的概念

所谓中断是指CPU对系统发生的某个事件作出的一种反应:CPU暂停正在执行的程序,保留现场后自动地转去执行相应的处理程序,处理完该事件后再返回断点继续执行被“打断”的程序。

引起中断的事件称为中断源,中断源向CPU提出进行处理的请求称为中断请求。

2.中断类型

按中断事件来源进行分类,主要有两类:

(1)中断。由CPU以外的事件引起的中断,如I/O中断、时钟中断、控制台中断等。

(2)异常(exception)。来自CPU的内部事件或程序执行中的事件引起的过程。如由于CPU本身故障、程序故障和请求系统服务的指令引起的中断等。

3.中断的一般处理过程

中断处理一般分为中断响应和中断处理两个步骤。中断响应由硬件实施,中断处理主要由软件实施。

(1)中断响应

对中断请求的整个处理过程是由硬件件和软件结合起来而形成的一套中断请求机构实施的,发生中断时,CPU暂停执行当前的程序,而转去处理中断。这个硬件对中断请求作出反应的过程,称为中断响应。

一般来说,中断响应顺序执行下述三步动作:①中止当前程序的执行;②保存原程序的断点信息;③转到相应的处理程序。

通常CPU在执行一条指令后,立即检查有无中断请求。如有,则立即作出响应。

(2)中断处理

中断响应后,就由软件(中断处理程序)进行相应处理。中断处理过程大致分为四个阶段:保存被中断程序的现场,分析中断原因,转入相应处理程序进行处理,恢复被中断程序现场(即中断返回)。中断处理过程为:①保存现场;②分析原因;③分析原因;④中断返回。
brucegong 2004-09-16
  • 打赏
  • 举报
回复





http://www-900.ibm.com/developerWorks/cn/linux/kernel/l-page/index.shtml
http://www.chinaitlab.com/www/news/article_show.asp?id=22719

我记的“缺页”是异常而不是中断,不知道为什么用google一搜索发现出来的都是“缺页中断”

异常有可恢复异常和不可恢复异常。我知道的可恢复异常好像只有“缺页”这一种(可能还有我没有关注到)。
中断发生时,会执行完发生中断时已经请求的指令,然后转入中断,中断恢复时从下一条开始执行
(缺页)异常则不同。缺页异常处理程序会将页面找回来装入内存,并从当前指令开始执行




sharkhuang 2004-09-16
  • 打赏
  • 举报
回复
异常也是中断.异常的优先级比中断高!
freefalcon 2004-09-16
  • 打赏
  • 举报
回复
异常,顾名思义,是出现了不正常的状态
中断,顾名思义,是暂时终止当前的操作,去处理另外一件事情

异常一般会导致中断,中断并不意味着异常
hearlihong 2004-09-16
  • 打赏
  • 举报
回复
如果要衍生到嵌入式中去,
就要讲到,中断指令,中断号,中断指令入口,等知识。不知道你说的是哪一个。
hearlihong 2004-09-16
  • 打赏
  • 举报
回复
对于你这个问题我还真不知道怎么说。
程序运行的时候,由于程序本身的原因,或外部环境原因,导致运行不正常。运行异常,
中断。中断,将程序运行中断。

呵呵。
Squall1009 2004-09-16
  • 打赏
  • 举报
回复
中断:一般指操作系统处理一事件的时候,其他优先等级比目前高的事件有了请求,这个时候操作系统会先去做另外一个事件,处理完了再回来处理刚才在处理事件.

异常:就是错误的意思吧.
doolin 2004-09-16
  • 打赏
  • 举报
回复
中断是CPU所具备的功能 -- 硬件
异常是软件运行过程中的一种开发过程中没有考虑到的程序错误 -- 软件
daylove 2004-09-16
  • 打赏
  • 举报
回复
中断:系统停止当前正在运行的程序而转向其他服务,可能是因为优先级高的请求服务了,或者是因为人为安排中断。中断是属于正常现象。
异常:是由于软件错误而引起的
whyglinux 2004-09-16
  • 打赏
  • 举报
回复
中断是功能调用,异常是错误退出。
加载更多回复(1)

65,206

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧