1、问题:
linux再处理中断的时候,会因为其他更高级别的中断发生而丢失cpu吗?
linux处理中断的时候会有时间片的概念吗?
我说的是x86机器,单cpu
中断服务程序(也就是前半部)一般在关中断情况下执行,以免中断嵌套而使中断控制复杂化。
一般都是时间很短并且很紧要的任务。对于软中断,不能中断一个软中断而运行另一个软中断。
能不能告诉我:前半部分有没有时间片的概念?
后半部分有没有时间片的概念?
如果有,那么时间片结束后,会被switch?
在linux中,中断处理过程中,中断是不能嵌套的,更别说调度了。另外,系统的调度也是在从系统空间返回到用户空间的时候发生,这时候softirq已经被执行过了。
2、问题:
请问一下,在中断处理程序执行的过程中,中断处理程序是否分配有时间片。
如果有,当然这只是种假设,因为中断处理程序都能很快的被执行,但如果出现意外,比如自旋,那么中断处理程序会一直占用CPU, 还是在自己的时间片用光后让出CPU?
但是,这时的内核是处于中断上下文中,中断处理程序让出CPU后又怎么会被再次调度呢?
如果没有,那么遇到前述的问题,系统是否就会崩溃?
中断处理程序没有时间片一说,时间片是针对进程的。
自旋锁可以在中断处理程序中使用,不过在获得锁之前,首先禁止本地中断(在当前处理器上的中断请求)。。。
还有,中断处理程序运行的时候,相应的中断线在所有处理器上都被屏蔽,以防同一中断线接受另一个新的中断,但通常情况下,其他的所有中断都是打开的。。。。。。,
永远牢记:中断处理程序打断了其他代码(甚至可能是打断了在其他中断线上的另一中断处理程序),
linux的驱动程序分两个部分实现:top-half和bottom-half。
top-half在运行时,不能被其他任何中断再次中断,也不能被其他进程中断,它通过对CPU内的中断屏蔽置位实现,而bottom-half则只对top-half开中断。
这样,系统就可以根据中断服务程序的访问特点,安排那些访问临界区的服务程序为top-half,其他中断服务程序为bottom-half。
每次离开中断处理程序,系统会执行schedule(),发生进程调度。
阅读(1206) | 评论(0) | 转发(0) |