linux - 为什么软件中断可以休眠而硬件中断不允许休眠?

标签 linux linux-kernel linux-device-driver device-driver

为什么我们可以在软件中断情况下休眠而在硬件中断情况下不允许? 例如系统调用可以休眠,ISR 不能休眠。

最佳答案

当您通过进程(即系统调用)进入内核代码时,内核被认为处于进程上下文中。这意味着内核是代表进程执行的。内核的执行与用户层同步,因此可以访问用户层。也可以调用休眠函数,因为调度程序能够调度新进程。

当您从硬件源(即中断)进入内核时,内核被称为处于中断上下文。内核的执行相对于用户级是异步的,您不能对在用户级执行的内容做任何假设。例如,某些资源可能处于某种不一致的状态。因此,代码无法阻塞,因为调度程序无法调度新进程。

Rubini 的书 Linux Device Drivers, 3rd edition 很好地解释了这种差异,即 freely available on the web .

关于linux - 为什么软件中断可以休眠而硬件中断不允许休眠?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20681620/

相关文章:

linux - 带有文本文件中心的 Gnuplot 椭圆体

c - 为什么 Linux 内核模块中定义的 mmap 返回 MAP_FAILED?

c - 原始克隆系统调用

Linux - 与设备关联的端口

linux-kernel - remap_pfn_range如何将内核内存重新映射到用户空间?

android - 以 tail -f 方式实时监视/开发文件

java - 安装 Spring Boot 应用程序

c++ - 有没有一本使用 C++ 编写控制台/终端应用程序的书?

linux - 如何在 Linux 下为新创建的网络 namespace 设置单独的内核参数?

linux - 如何在 debian 中安装 man 命令的第 9 节