![](https://csdnimg.cn/release/download_crawler_static/11094753/bg4.jpg)
12、linux 中中断的实现机制,tasklet 与 workqueue 的区别及底层实现区别?
为什么要区分上半部和下半部?
答案一:
Linux 中断分为硬件中断和内部中断(异常),调用过程:外部中断产生->发送
中断信号到中断控制器->通知处理器产生中断的中断号,让其进一步处理。对于
中断上半部和下半部的产生,为了中断处理过程中被新的中断打断,将中断处理
一分为二,上半部登记新的中断,快速处理简单的任务,剩余复杂耗时的处理留
给下半部处理,下半部处理过程中可以被中断,上半部处理时不可被中断。至于
tasklet 和工作队列,在网上看了一圈,由于不常用,看的有点迷糊,个人理解:
两者都是中断下半部的一种实现方法,区别在于,tasklet 支持 smp,不可睡眠。
工作队列基于线程的封装,因此支持睡眠。
答案二:
内核把中断处理分为两部分:上半部(tophalf)和下半部(bottomhalf),上
半部(就是中断服务程序)内核立即执行,而下半部(就是一些内核函数)留着
稍后处理。下半部运行时是允许中断请求的,而上半部运行时是关中断的,这是
二者之间的主要区别。
13、linux 中断的响应执行流程?中断的申请及何时执行(何时执行中断处理函
数)?
中断的响应流程:cpu 接受终端->保存中断上下文跳转到中断处理历程->执行中
断上半部->执行中断下半部->恢复中断上下文。
中断的申请 request_irq 的正确位置:应该是在第一次打开 、硬件被告知终端
之前。
14、linux 中的同步机制?spinlock 与信号量的区别?
linux 中的同步机制:自旋锁/信号量/读取所/循环缓冲区
spinlock 在得不到锁的时候,程序会循环访问锁,性能下降
信号量在得不到锁的时候会休眠,等到可以获得锁的时候,继续执行。
15、linux 中 RCU 原理?
rcu 是 2.6 出现的一种读写锁,可以说是老的读写锁的升级版,主要用在链表这
种数据结构上,经典使用场景是多读者少写者的情况,rcu 允许多个读者一个写
者共同操作数据而不必加锁,这是经典用法,若出现多个写者时,写者与写者之
间就得自己手动同步。当要删除一个节点时,删除后并不会马上释放节点,而是
会等待在删除动作之前已经开始读该节点的读者都完成读操作之后才会释放此
节点,这段时间被称为宽限期。
16、linux 中软中断的实现原理?
Linux 系统中的软中断是专为一些不是不是特别要紧的耗时任务而产生的一种
机制,多数用在中断处理过程中,典型应用就是用于中断下半部,tasklet 机制