【发布时间】:2014-10-18 05:06:42
【问题描述】:
这是关于等待 IO 的调用,允许上下文切换,或非阻塞调用模型:
- 它们在操作系统中究竟是如何实现的?
- 底层设备如何在指令级工作 - 例如。存储和网络硬件的确切 CPU 指令?
- 一个设备一次可以挂起多少条 IO 指令?
- 操作系统可以排队多少个 IO 请求,例如同时使用 Linux 和 Windows?在哪里可以找到其他操作系统的此信息?
编辑:这是一个广泛而具体的问题。它关于 IO 设备和 CPU,操作系统用来完成工作 - 所以请回答你能回答的问题。它也与内存有关,因为每个 IO 操作都涉及数据的内存(如果不是寻址)。 x86 和/或广泛分类的答案就可以了。对于设备,您可以选择 x86 上的网络/存储。
【问题讨论】:
-
这个问题太宽泛了。详细信息在设备类型、供应商、确切型号、操作系统类型、使用的总线等方面存在很大差异。请尽量缩小范围。
-
这些实现因操作系统而异。对于 Linux,您可以查看内核源代码;对于 Windows,您根本不会得到任何可靠的信息。
-
现代 CPU 上没有专门用于访问存储硬件或网络硬件的 CPU 指令。一些 CPU 可能有一些可用于访问设备的 I/O 指令,但许多设备可以在不使用 I/O 特定指令的情况下访问。 CPU 对挂起的 I/O 操作没有限制。操作系统通常对挂起的 I/O 操作没有固定限制。
-
马丁:谢谢。你知道 Linux 内核源代码的任何简短文档吗?
-
Ross:对于块设备和字符设备,所有内容都是逐个字符进出吗?考虑到每条 CPU 指令本身都是阻塞的,进程等待 IO 意味着什么 - 是多路复用吗?
标签: assembly io operating-system