所有系统调用是否都阻塞?


13

我正在阅读一篇文章,描述系统调用时用户空间和内核空间之间的切换。文章说

在恢复用户模式执行之前,应用程序期望系统调用完成。

现在,直到现在,我还假设某些系统调用为blocking,而另一些为non-blocking。有了以上评论,我现在感到困惑。这是否意味着所有系统调用都被阻止,或者我误解了一个概念?


@Ankit请解释为什么回滚编辑。请注意,编辑以改善帖子的详细信息是SE的标准政策,并不意味着隐含批评。
拉斐尔

@Raphael对不起兄弟!我只是在摆弄,错误地推回了回滚,然后找不到以前的版本。实际上,我真的很喜欢您的编辑。:P
Ankit 2012年

@Raphael回来了。实际上,我对修订系统感到困惑(不认识“文章”是链接)。感谢您的修改。
Ankit 2012年

@Ankit:很高兴我能帮上忙!
拉斐尔

Answers:


15

您似乎在超载“阻止”一词。

您对内核进行的任何上下文切换都必须等待它切换回用户模式,然后应用程序才能继续。这通常不是所谓的“阻止”。

在当前内核设计中,阻塞调用是仅在请求完成(或发生错误)时内核返回的调用。这些调用通常会花费较长的时间,并且通常会导致您的进程被调度。例如,许多IO调用被阻止。

有一些提供异步IO的系统调用,它们是非阻塞的。请注意,这里仍然发生上下文切换,只有应用程序必须照顾调用的异步性质。

本文似乎旨在消除这种来回上下文切换(无异常系统调用),并尝试使所有调用异步化。


它实际上是一篇研究论文。这是URL: eecg.toronto.edu/~livio/papers/flexsc-osdi10.pdf
Ankit

2
@Ankit:请编辑问题并在其中添加。
Aryabhata 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.