考一考!嵌入式面试题3道

题一:

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 条评论)
   
验证码:

相关文章

推荐文章

'); })();