正常中断和非正常中断的区别
不是外界事件首先引发了中断跳转,跳转时顺便置上中断标志,而是外界事件导致置上了中断标志,然后中断标志再进一步引发了跳转。
标志置上了并不等于立即就会引发跳转。标志本身只是用来看的,就是说,得等CPU看到这个标志,才能真正引发跳转。
触发中断的实质上既不是外部设备,也不是标志,而是CPU自己。
CPU只在每个指令周期的开头瞅一眼中断标志,有,则进入处理过程,没有,则继续做它自己的事。
如果不巧标志置晚了,CPU已经瞅完了,那就只能等下一轮指令周期。
所谓的屏蔽中断,就是人为在中断标志前面挂个幕布,不许瞅。只是不许瞅而已,但没有不许立标志,外部设备尽可以来立标志,只是立得再久也没人处理而已,直到幕布被摘下。
当CPU瞅到了一个标志、并进入其处理过程之时,还会自己给自己戴个眼罩,此时哪怕还有别的标志,也瞅不见了,所以此时别的中断发生,也得不到处理。
当CPU处理完了这个中断,会自己把眼罩摘掉,于是又能愉快的瞅标志了。
如果有别的标志正巧竖在那,那就处理吧。
显而易见当CPU放眼一瞅的时候,瞅到不止一个中断标志是完全可能的,而它一次只能选一个来处理。
一般来说肯定挑出其中最有价值的一个,剩下的先放着,等下回瞅。
这就是传说中的中断优先级。再刨根问底一点,当CPU已经开始处理一个中断的时候,这标志会怎样?
——根据中断的具体类型不同,这标志可能被CPU自动清除掉,也可能不会,而要等用户程序来手动清除。如果用户犯2了没清除标志怎么办?那么下次CPU放眼瞅的时候,这个标志还在!会不会再被处理一遍?
——会的,而且不止一遍,只要你不清,它就根本停不下来。为什么系统要这么设计,给用户以犯2的机会?
——有一种情况是,向量表不够装,多个中断共用一个向量,那么进入处理程序时,要有手段来区分到底是发生了哪个中断。所以标志要活到那个时候来给用户检查。
然后我们终于面对了这个问题:如果一个标志还没被处理呢,就有人要来竖一个同样的标志(重点是:同样的),会怎样?
——没错,前一个会丢失。
竖标志的场地只有一个,只能记录标志有没有,不能记录标志有几个。——这不是很可怕?——别急,先来仔细分析下:很多中断,属于不作不死型:即,只有发起相应操作,才能收到相应结果的中断。不种瓜不可能得瓜。
——对于这种,只要在收到前一个操作的结果中断之前不发起后一个操作(且不管机能上能不能做得到),就不会面临中断丢失的情况。还有一些中断,来几个意义都不变。比如我妈喊我吃饭,没等我去,我爸又来喊我一遍,最后我妹又来喊我一遍。
无论如何我最终都是去吃这一顿饭而已,不会吃三顿。
这种中断自然也不怕丢失。
若非以上情况,就没办法了,只能尽快处理,不要浪费太多时间在眼罩阶段,而耽误了瞅标志。但是……世事不尽如人意,如果长时间戴眼罩不可避免,又必须及时处理另一个中断,怎么办?有的系统具备一种功能,能让某些中断标志发出动感光波,射穿眼罩直达狗眼。妈妈再也不怕我瞅不着标志了,哪怕正在处理一个中断,也立即给你扔下,跑去处理另一个更NB的中断。
这就是中断嵌套。自然不能所有中断标志都能发出动感光波,那世界就乱了。
这种特权要严密控制,只能交给少量真正高大上的中断源。
而当CPU进入这种中断的处理程序的时候,给自己戴的也不是一般的眼罩了,而是超强合金眼罩,连光波都能抵挡的,这保证了多个光波中断源之间也不会抢来抢去而乱了规矩。不过当然规矩也是人定的,没准某个系统里就需要有更更更高级的中断源,需要更更更强的光波,连合金眼罩也能射穿,同时自己还得具备更更更强的氪金眼罩……OK这是可行的,根据中断源不同,光波也好眼罩也好都存在多个级别,这叫做中断的嵌套优先级。而前面说的优先级则叫做中断的响应优先级。响应优先级和嵌套优先级是两个不同的概念,但有时被搞混。理论上响应优先级再高也没法让你能打断别人的中断处理过程,嵌套优先级再高也没法让你比人优先被瞅到(当然先瞅到别人再被你打断另说)。当然系统的关键中断往往两种优先级都很高。另外多个中断的响应优先级一般没有同级的,因为事到临头总是要分个高下的。而嵌套优先级则可以同级,而同级一般是不能互相打断的。说回来以上描述的参照的是答主自己熟悉的平台,别的平台可能有细微差别,但精神都是类似的。
免责声明:本站发布的教育资讯(图片、视频和文字)以本站原创、转载和分享为主,文章观点不代表本网站立场。
如果本文侵犯了您的权益,请联系底部站长邮箱进行举报反馈,一经查实,我们将在第一时间处理,感谢您对本站的关注!
新励学网教育平台
海量全面 · 详细解读 · 快捷可靠
累积科普文章数:18,862,126篇