免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4850 | 回复: 5
打印 上一主题 下一主题

系统时钟中断的优先级一般有多高? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-06-02 18:27 |只看该作者 |倒序浏览
如果系统在执行一个低级别的中断服务程序的时候,产生了系统时钟中断,我们知道系统时钟中断会做一件事情:计算当前进程上下文的时间片。但是此时的时钟中断是中断了另外一个中断服务程序而来的,那它计算的是哪个进程的时间片呢?

论坛徽章:
0
2 [报告]
发表于 2010-06-03 10:26 |只看该作者
本帖最后由 star1983653 于 2010-06-03 10:28 编辑

时钟中断的优先级是仅次于复位中断的。
中断就是中断,没有进程的概念,也没时间片的概念。

论坛徽章:
0
3 [报告]
发表于 2010-06-03 19:48 |只看该作者
回复 2# star1983653


    谢谢你的回答。

还有个疑问:在内核态中执行自旋锁函数spin_lock_irqsave函数的时候,书上说是禁止本地中断了的,那么这个时候时钟中断也是被禁止了么

论坛徽章:
0
4 [报告]
发表于 2010-06-04 09:02 |只看该作者
我看了下源码,spin_lock_irqsave里调用了local_irq_save
local_irq_save 里用嵌入式汇编调用了cli指令,是关掉了当前处理器所有中断的。

论坛徽章:
0
5 [报告]
发表于 2010-06-06 20:48 |只看该作者
at first,我们还是来点情景。
假设此时A在执行,来了一个串口中断(一般上半部是在关中断条件执行的,这里我们假设(just 假设)此时是在开中断的情况下执行中断的),进入内核空间执行,此时用的是进程A的内核栈(stack),如果此时来了个时钟中断,打断了串口中断服务的执行,去执行时钟中断处理程序,此时钟中断处理程序still在进程A的内核栈,而我们知道内核有一个current宏获取当前进程task_struct地址,我们都知道时钟中断就是就是改变它的时间片。他是怎么获取的呢???

我们知道内核栈是和task_struct结果一起分配的,好像是3个页面,而有了现在的栈顶指针,获取task_struct结果只需要做些巧妙地转换。所以结论已经浮出了水面,就是时钟中断使用在哪个进程内核栈,就递减哪个进程的时间片,而如果时钟中断发生在中断里,我们就一级级的向上推,就能找到此进程

论坛徽章:
0
6 [报告]
发表于 2010-06-09 17:55 |只看该作者
回复 5# zhy-linux


    分析的非常精彩!谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP