Interrupt
Updated: Sep 21st, 2023
硬件中断(Interrupt)是现在OS与设备交互的一种主要方式。设备有事情需要通知系统时(通知有请求到来,或有操作完成),会触发特定的中断引脚,CPU则根据中断引脚调用指定的中断处理函数,实现OS和设备的交互(如硬盘与CPU、网卡与CPU)。
硬件实现的中断1自然性能最好,延迟最小。但目前而言无论是触发中断,还是处理中断,都必须在内核态中处理。由于此,目前大多数涉及 I/O 操作的硬件设备,都需要在内核态实现驱动。如果需要在用户态实现驱动,则要借助 Linux 中的 uio 框架来转发硬件中断的信息,或使用 uio 框架把设备的地址空间暴露到用户态,以让用户态驱动直接读写。
2022-05-31 https://zhuanlan.zhihu.com/p/49944748 有个叫 VFIO 的东西也可以
例子:
软中断(software interrupt)是一种延后执行的方法,用于执行一些是紧急但又无法直接在硬件中断上下文中执行的工作。当有这种工作要做时,子系统会通过设置一个 flag 来触发软中断;这会使得在下一个合适的时机会调用其处理程序,通常是在硬件中断处理完成后就立即调用,或在从系统调用返回到用户空间之前调用。如果处理时间过长,相关处理也可以推送到专门的 ksoftirqd 线程中。有关此机制的更详细讨论,请参见这篇文章https://lwn.net/Articles/779738/以及 Weisbecker 为改进它所做的另一次尝试。 软中断有许多使用者,包括 tasklets、网络、块设备子系统、读-拷贝-更新(RCU)以及内核定时器。在某些工作场景中,软中断处理可能成为 CPU 总负载的一个重要部分;它可能会运行相当长的时间,从而对运行在用户空间中的软件导致延迟。会禁用软中断处理的那些内核代码(为了避免与处理程序的产生 race condition)会变成不可抢占的,这也会导致出现不太愉快的延迟。总之,与 BKL 一样,软中断反映了几十年前很适用但是现在存在问题的一种设计。 查看. mp.weixin.qq.com