Chinaunix首页 | 论坛 | 博客
  • 博客访问: 499457
  • 博文数量: 106
  • 博客积分: 6010
  • 博客等级: 准将
  • 技术积分: 1083
  • 用 户 组: 普通用户
  • 注册时间: 2007-09-22 18:20
文章分类

全部博文(106)

文章存档

2009年(1)

2008年(105)

我的朋友

分类: LINUX

2008-05-09 16:23:27

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) |
给主人留下些什么吧!~~