题一:
tasklet与workqueue的区别及底层实现区别
思考过后,再到下方寻找答案
题二:
linux中断的响应执行流程?
思考过后,再到下方寻找答案
题三:
软中断的工作工程模拟了实际的中断处理过程?
思考过后,再到下方寻找答案
题一答案:
1)softirq和tasklet都属于软中断,tasklet是softirq的特殊实现;workqueue是普通的工作队列。
2)如果推后执行的任务需要睡眠,那么就选择工作队列workqueue(工作队列是基于线程的封装)。
如果推后执行的任务不需要睡眠,那么就选择tasklet。
题二答案:
1)当某一软中断时间发生后,首先需要设置对应的中断标记位,触发中断事务(raise_softirq()设置软中断状态bitmap,触发软中断事务)
2)然后唤醒守护线程去检测中断状态寄存器(在Linux中 软中断daemon线程函数为do_softirq())
3)如果通过查询发现某一软中断事务发生之后,那么通过软中断向量表调用软中断服务程序action()。
一个软中断不会去抢占另一个软中断,只有硬件中断才可以抢占软中断,所以软中断能够保证对时间的严格要求。
这就是软中断的过程,与硬件中断唯一不同 的地方是从中断标记到中断服务程序的映射过程。在CPU的硬件中断发生之后,CPU需要将硬件中断请求通过向量表映射成具体的服务程序,这个过程是硬件自 动完成的,但是软中断不是,其需要守护线程去实现这一过程,这也就是软件模拟的中断,故称之为软中断。
留言与评论(共有 0 条评论) |