系统调用可以中断吗?

The*_*eer 2 linux scheduling interrupt linux-kernel

请评论下面的句子:

在没有 rt 补丁的标准 Linux 内核上,中断不能中断正在进行的系统调用。当从硬盘获取数据时,我们的机器没有停止工作的原因是我们用于该操作的系统调用是阻塞的。阻塞意味着一旦它向硬盘发出请求,它将进程状态更改为阻塞,并自愿放弃处理器时间。没有办法在非实时内核上中断正在进行的系统调用。

这是我对主题的理解,但是,我不确定它是否正确。

slm*_*slm 5

可以通过使用信号来中断系统调用,例如SIGINT(由CTRL+生成C)、SIGHUP等。您只能通过 PID 与系统调用交互来中断它们,但是在使用 Unix 信号和kill命令时。

rt_patch 和系统调用

@Alan 问了以下后续问题:

是否可以中断系统调用与主线 Linux 内核中接受 rt_patch 直接相关?

我的回复:

我会这么认为。在研究这一点时,我找不到一个确凿的证据表明你可以/不能这样做,这让我相信你可以。

另一个让我想到这一点的数据点是,Unix 中内置的底层信号机制对于能够与进程交互是必不可少的。我不明白安装了这些补丁的系统如何在没有使用信号的情况下运行

顺便提一下,信号在过程级别运行。我知道没有任何方法/API 可以直接向系统调用注入中断。

参考

  • @Alan 你应该试着找一本更新的书。那个涵盖了内核 2.2,当时 2.4 即将问世。它甚至没有提到在 2.6 的更新中引入的完全公平调度程序,并且在最新的版本 3 中,内核空间下的抢占进程也有很大的变化。 (4认同)