首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >中断上下文下半部分(Softirq或微线程)

中断上下文下半部分(Softirq或微线程)
EN

Stack Overflow用户
提问于 2014-04-09 14:53:30
回答 2查看 1.1K关注 0票数 0

软中断/tasklets被认为是在中断上下文中执行的,我对中断上下文底部一半有以下疑问。

Q1)如果我们试图将睡眠置于微线程(中断上下文的下半部分)中,会发生什么情况(考虑到微线程是由中断处理程序调度的)。

据我所知,从中断处理程序出来时,当tasklet_schedule被调用时,它将获得tasklet_vec结构指针,如果当前没有其他中断/高优先级软中断正在进行,它将调度ksoftirqd,运行处理程序(微线程处理程序),如果微线程处理程序使用休眠,则ksoftirqd将移动到wait_queue,除非并直到另一个tasklet_schdule被调用,否则中断的微线程处理程序将在该点上继续。

我们说“中断上下文代码不能休眠”(考虑到我没有使用spint锁或者我没有禁用计时器中断,如果我在中断处理程序中使用睡眠会有什么后果)

(如果理解有误,请指正)

EN

回答 2

Stack Overflow用户

发布于 2014-04-09 16:29:32

睡眠只能在进程上下文中工作,而不能在中断上下文中工作。在中断上下文中,“当前”不是一个有效的任务,因此我们可以将其置于睡眠状态,稍后再将其唤醒。如果你想休眠,可以使用线程

票数 1
EN

Stack Overflow用户

发布于 2014-04-10 12:10:19

如果您尝试在微线程中睡眠,则会出现一个内核错误,指示在原子上下文中进行上下文切换。在下半部分,它是中断上下文,在ksoftirqd中是进程上下文。不管是在下半部分还是在ksoftirqd中处理微线程,thread_info->preempt_count都不是零,这意味着原子上下文。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22954960

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档