goter
发表于 2011-06-17 12:31
哦,才发现情景分析上软中断讲的也很好
20040925
发表于 2011-06-17 13:03
回复 10# 独孤九贱
上半部和下半部都是驱动程序实现的吧?
独孤九贱
发表于 2011-06-17 17:21
回复独孤九贱
上半部和下半部都是驱动程序实现的吧?
20040925 发表于 2011-06-17 13:03 http://bbs1.chinaunix.net/images/common/back.gif
不一定。
如果你的下半部处理是标准的,例如网卡,则内核已经实现了。如果不是,则需要你自己实现。这只是一种思路,其实你没有下半部也无怕谓(即将它合并到驱动中),嘿嘿!!
瀚海书香
发表于 2011-06-18 15:02
本帖最后由 瀚海书香 于 2011-06-18 15:04 编辑
回复 1# 独孤九贱
调度时机好像还有ksoftirqd内核线程。ksoftirqd的执行代码如下static int ksoftirqd(void * __bind_cpu)
{
set_current_state(TASK_INTERRUPTIBLE);
while (!kthread_should_stop()) {
preempt_disable();
if (!local_softirq_pending()) {
preempt_enable_no_resched();
schedule();
preempt_disable();
}
__set_current_state(TASK_RUNNING);
while (local_softirq_pending()) {
/* Preempt disable stops cpu going offline.
If already offline, we'll be on wrong CPU:
don't process */
if (cpu_is_offline((long)__bind_cpu))
goto wait_to_die;
do_softirq();
preempt_enable_no_resched();
cond_resched();
preempt_disable();
}
preempt_enable();
set_current_state(TASK_INTERRUPTIBLE);
}
__set_current_state(TASK_RUNNING);
return 0;
wait_to_die:
preempt_enable();
/* Wait for kthread_stop */
set_current_state(TASK_INTERRUPTIBLE);
while (!kthread_should_stop()) {
schedule();
set_current_state(TASK_INTERRUPTIBLE);
}
__set_current_state(TASK_RUNNING);
return 0;
}
独孤九贱
发表于 2011-06-18 22:30
回复独孤九贱
调度时机好像还有ksoftirqd内核线程。ksoftirqd的执行代码如下
瀚海书香 发表于 2011-06-18 15:02 http://bbs.chinaunix.net/images/common/back.gif
哈哈,是的,ksoftirqd是方式之一,不过你没有仔细看我的贴子,原文是“是的,除了raise_softirq在,可能会(嗯,重要的是“可能”)通过wakeup_softirqd唤醒ksoftirqd外,还得明白软中断的其它调用时机。”:em02:
smalloc
发表于 2011-06-18 22:48
回复 11# goter
为什么是才发现?
goter
发表于 2011-07-03 22:56
回复 16# smalloc
因为之前没大看懂,哈哈
kitiz
发表于 2011-09-09 10:07
1.2 激活
当需要调用软中断时,需要调用raise_softirq函数激活软中断,这里使用术语“激活”而非“调用”,
是因为在很多情况下不能直接调用软中断。所以只能快速地将其标志为“可执行”,等待未来某一时刻调用。
菜鸟请教一个问题。
上面一段话中所以只能快速地将其标志为“可执行”,等待未来某一时刻调用等待未来某一时刻,后文中分析了4种情况,如果这个时刻还是因为其它的某些原因迟迟不来的话,这样在网络中实时性岂不是很差,求解释
迟迟不来可以认为是很少发生的情况,但是如果是不可预知的,也很恐怖啊
kgatheko
发表于 2011-09-11 00:22
赞,好文!
q631951221
发表于 2011-10-12 13:49
谢谢了,看了你的文章思路清晰多了 呵呵,在研究一下代码