当前位置:  技术问答>linux和unix

关于中断处理程序的一点疑惑?

    来源: 互联网  发布时间:2015-12-19

    本文导语:  书上说到:一个中断处理程序以异步的方式执行,并且,它有可能打断其他重要的代码(甚至包括其他中断处理程序)。 又有:中断处理程序不是在“进程上下文”中运行,当执行一个中断处理程序时内核处于“中...

书上说到:一个中断处理程序以异步的方式执行,并且,它有可能打断其他重要的代码(甚至包括其他中断处理程序)。
又有:中断处理程序不是在“进程上下文”中运行,当执行一个中断处理程序时内核处于“中断上下文”,中断上下文和内核上下文没有瓜葛,因为没有进程背景,所以中断上下文不可以睡眠。
现在问题是:一个中断处理程序可以打断另外一个中断处理程序。但是,中断处理程序又不可以睡眠,此时被打断的中断处理程序到底处于什么状态呢?

|
中断可以发生在任何进程正在执行的过程中,如果此时进程A在运行,发生中断,如果在中断休眠的话,那么就会让进程A不运行,你有什么权利让进程A休眠呢??也有可能这个中断发生在进程B中,同样的道理,你有什么权利让进程B休眠呢???这就是不合逻辑的地方,再者,如果你休眠完成之后,再次调度这个进程时,这个进程如果退出了咋个办??????你总不能强制要求一个进程非得等待你的中断休眠完成之后再退出吧??再者,还有设备的问题,中断肯定不能占用太长的时间,你却要求进程休眠,这岂不是背道而驰吗?中断时间过长,会丢失中断的.
中断是发生在任何一个进程运行的过程中,如果一个进程在运行,中断发生,那么中断就处在这个进程的上下文中,占用的是这个进程的页表,使用的是这个进程的地址空间,所谓中断不属于进程上下文,是指中断不发生在一个指定的进程上下文中.中断可以嵌套,是指高优先级可以打断低优先级的运行,比如进程A在运行,中断1发生,处于进程A的上下文中,执行了一小段时间后,又一高优先级的中断2到来,打断A,这个中断还是处于进程A的上下文中,直到两个中断退出,才会执行进程调度

当然,你也可以在中断到来之时进行调度或者休眠,不过系统将会处于未知状态,你可以写一个这样的驱动来测试

|
不确定“中断上下文”是个什么意思,楼上第二段解释的很清楚。

|
"中断上下文"实际上是cpu作中断处理时的寄存器内容,这些内容保存在每个进程的TASK_STRUCT结构所在的8k内存;

上下文只是某个特定时刻对这些寄存器的通称概念,感觉"tb01412"把上下文当成一种内存概念,我承认这些中断上下文是保存在进程的"内核堆栈里面",但不同意说"中断就处在这个进程的上下文中"

还有进程调度只能是在中断返回前夕作这个工作,如果在中断处理时作这个事情就是一个错误!

|
tb01412(tb)
中断是发生在任何一个进程运行的过程中,如果一个进程在运行,中断发生,那么中断就处在这个进程的上下文中,占用的是这个进程的页表,使用的是这个进程的地址空间,所谓中断不属于进程上下文,是指中断不发生在一个指定的进程上下文中.
-----------------------------------------------------------------------

不同意这段解释,至少在VxWorks下面中断的堆栈是独立的,而不是使用进程的。

|
LZ的上下文是指寄存器环境吧,2楼的解释比较清楚了已经。

    
 
 

您可能感兴趣的文章:

  • ***对一个中断机制的疑惑***
  • 疑惑求助:unix线程执行被异步中断后的问题
  • 在linux上怎么编写一个模块来提供某个中断的中断处理程序呢?而且有哪些中断可以自己添加中断处理程序呢?
  • 问专家们 一个问题,为什么在中断嵌套过程中或者中断处理过程中不能发生进程的调度?
  • 检测不到中断,无法进入中断处理程序。
  • 关于linux内核中中断处理的问题
  • 中断处理程序究竟做哪些工作?
  • 在linux中,中断处理是否作为单独的进程执行?
  • linux中断处理 如何调用内核的中断操作
  • 中断处理函数中使用自旋锁的疑问
  • 请教内核高手,抽空解释一下系统中断调用处理流程
  • 请问linux下半部处理的时候是否要关闭中断?
  • 嵌入式s3c2410的中断处理问题
  • 如何计算中断处理函数消耗的CPU时钟?
  • vmware 虚拟Linux 驱动并口处理中断问题!
  • 关于中断处理的问题:为什么schedule()后不直接跳到进程执行?而要再判断一次?
  • 兄弟们,请帮帮忙吧,关于LINUX 的调度和时钟中断处理代码的分析!在线等待啊。。。:(
  • 为什么内核模块在中断处理中(INT3),使用current->tgid,机子就会死掉[suse11 linux-2.6.27.45-0.1]
  • linux 中断处理串口通讯
  • 中断处理函数 IRQn_interupt 在那里定义的
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Linux 系统中的中断是不是没有中断优先级
  • 请问软件中断的中断号与端口号是什么关系?
  • 中断上下文,进程上下文 ,内核抢占,用户抢占,中断
  • 求助,ADS调试中断2440无法进入中断服务。。。
  • 除零中断那些中断是怎么工作的?
  • 傻傻得问,如果两个设备共享一个中断线,中断响应程序怎么区分?
  • 求教:一进程执行过程中被同一外部中断程序大量反复中断会不会引起内核栈溢出?
  • kernel 什么时候可以中断 什么时候不可以中断
  • 在Linux驱动中如何开中断和关中断?
  • LINUX下系统调用是不能中断的,要怎么改造成可以中断系统调用?
  • 中断延迟和中断响应、调度延迟的关系?谁来讲讲?
  • linux内核中的中断向量号是如何与硬件的中断Pin关联的?
  • 书上说,中断用自旋锁,进程,用信号量,但是,为什么中断不能用信号量?
  • ucosII 移植到arm 用ads,关于关中断、开中断
  • 关于中断共享的问题:ADC 与触摸屏的中断共享
  • Linux驱动中注册的中断号与实际的硬件中断号的关系
  • 中断函数用法的问题
  • 内核会丢中断吗?
  • 为什么这个中断会一直响应呢????
  • 中断的问题???


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3