在Linux中实现阻塞系统调用

时间:2015-03-20 18:44:16

标签: linux-kernel linux-device-driver system-calls

我想了解实现阻塞I / O系统调用与非阻塞有何不同?谷歌搜索没有多大帮助,任何链接或参考将不胜感激。

感谢。

1 个答案:

答案 0 :(得分:1)

http://faculty.salina.k-state.edu/tim/ossg/Device/blocking.html

阻止系统调用会使任务(调用线程)进入休眠状态(阻止它在CPU上运行),并且syscall将仅在事件(或超时)之后返回。非阻塞系统调用不会阻塞线程,它只是检查内核状态并立即返回。

更详细的说明:http://www.makelinux.net/ldd3/chp-6-sect-2

  

一个重要问题:如果驱动程序无法立即满足请求,它将如何响应?当没有数据可用时,可能会发出读取调用,但预计将来会有更多数据。或者进程可能会尝试写入,但您的设备尚未准备好接受数据,因为您的输出缓冲区已满。通话过程通常不关心这些问题;程序员只需要调用读或写,并在完成必要的工作后返回调用。因此,在这种情况下,您的驱动程序应该(默认情况下)阻止进程,使其进入睡眠状态,直到请求继续进行。 ....

有几种形式的wait_event内核函数来阻止调用者线程,检查include/linux/wait.h;线程可以通过不同的方式唤醒,例如使用wake_up / wake_up_interruptible

相关问题