1.28学习记录
调度自己的taasklet
可以使用task_disable()来禁止某个指定的tasklet,若正在执行,那么就会等待其执行完毕再结束。
也可以使用tasklet_disable_nosync()强制禁止。
使用tasklet_enable()可以激活一个tasklet();
使用tasklet_kill()函数从挂起列队中去掉一个tasklet。
ksoftirqd
每个处理器都有一个辅助处理软中断(和tasklet)内核线程。这些内核线程会辅助处理他们。
在处理软中断的时候,会遇到处理器时间安排上的问题,特别是在高负载的情况下,越有可能遇到问题。
在设计软中断时,作为改进,当大量软中断出现的时候,内核会唤起一组内核线程来处理这些负载,这些
线程在最低的优先级上运行。以避免和其他重要的任务抢夺重要资源。
每个处理器都有一个一个这样的线程, 线程的名字叫做ksoftirqd/n n为处理器的编号,一旦线程被初始化
就会执行如下的死循环。
for(;;)
{
if(!softirq_pending(cpu))
schedule();
set_current_state(TASK_RUNNING);
while(softirq_pending(cpu)){
do_softirq();
if(need_resched())
schedule();
}
set_current_state(TASK_RUNNING);
}
调度自己的taasklet
可以使用task_disable()来禁止某个指定的tasklet,若正在执行,那么就会等待其执行完毕再结束。
也可以使用tasklet_disable_nosync()强制禁止。
使用tasklet_enable()可以激活一个tasklet();
使用tasklet_kill()函数从挂起列队中去掉一个tasklet。
ksoftirqd
每个处理器都有一个辅助处理软中断(和tasklet)内核线程。这些内核线程会辅助处理他们。
在处理软中断的时候,会遇到处理器时间安排上的问题,特别是在高负载的情况下,越有可能遇到问题。
在设计软中断时,作为改进,当大量软中断出现的时候,内核会唤起一组内核线程来处理这些负载,这些
线程在最低的优先级上运行。以避免和其他重要的任务抢夺重要资源。
每个处理器都有一个一个这样的线程, 线程的名字叫做ksoftirqd/n n为处理器的编号,一旦线程被初始化
就会执行如下的死循环。
for(;;)
{
if(!softirq_pending(cpu))
schedule();
set_current_state(TASK_RUNNING);
while(softirq_pending(cpu)){
do_softirq();
if(need_resched())
schedule();
}
set_current_state(TASK_RUNNING);
}