前言
这个 主要是 最开始的时候了解驱动的时候, 看到的一系列的 case, 这里 来大致剖析一下 相关的道理
这些模块 是怎么和内核交互的, 内核的这些业务是怎么实现的
这里主要是一个模块创建了一个 hrtimer, 然后 0.3秒后执行, 然后 在执行的过程中递归加入当前任务到下一次队列
然后这里主要是设计了 模块来调用 timer 的相关系统函数, 以及 kthread 的相关知识
ksoftirqd 的执行主要是处理 相关软中断
ksoftirqd 的执行
ksoftirqd 进程的执行主要是处理 未执行的软中断相关
如果没有活干了, 则 ksoftirqd 会阻塞
如果是在 __do_softirq 处理的期间又有新的 软中断 加入队列, 则此处会唤醒 ksoftirqd 进程来处理具体的软中断
__do_softirq 的执行是在那些进程?
根据代码 以及汇编 以及上下文 推到, task 是放在 rcx
比如这里的 apic_timer_interrupt 是由 244号 进程 sh 来触发的
比如这种 中断的处理 是由 8号 进程 ksoftirqd 来触发的
ksoftirqd 工作线程的主要业务如下
循环检查 是否有待处理的软中断, 如果有 则进行处理, 如果没有 调用 schedule 调度其他进程
发送软中断, 也会尝试唤醒 ksoftirqd
ksoftirqd 进程的创建
然后在 kthread_create_on_node 中会将 ksoftirqd 放到 create->list, 中由 kthreadd 来创建该进程
完