异步和同步I/O操作系统是否独立?

问题描述:

我的教科书通常用unix,linux和windows来解释概念。但是,当涉及到异步和同步I/O时,它只能在Windows操作系统的环境中解释它。因此,我想知道异步和同步I/O是否与操作系统无关?这两种类型的I/O都可用于所有的unix,linux和windows?或者它只是具有这些能力的Windows操作系统。异步和同步I/O操作系统是否独立?

谢谢。

+2

他们都拥有它。 – kaylum

+0

Windows API在异步I/O和异步I/O之间划分了明显的区别。据我所知,Linux API没有。你仍然可以通过任何方式实现同​​样的事情,但你做的不同。 –

+0

......我的理解是,Linux不具有异步I/O *,因为Windows使用短语*,即用户提供的缓冲区是从异步读取或写入的。相反,你发出同步呼叫,但保证他们不会阻塞。查找select()以获取更多详细信息。 –

这是一个非常宽泛的问题,答案取决于上下文。

对于CPU和其他外设之间的I/O,它取决于硬件I/O接口。系统中的大多数设备都使用同步接口,例如PCI-Express总线。其他设备(通常性能较差的设备)可以使用异步接口进行通信,例如串行端口。

如果您的问题是关于操作系统内的进程间通信,则操作系统通常提供同步或异步方法。这是因为某些应用程序特别需要同步通信,而其他应用程序特别需要异步通信。您可以考虑以下问题:您的程序在做其他事情之前是否等待发送或接收消息至关重要,或者您现在是否可以忽略它们并在稍后检查它们?

同步通信要求发件人等待,并且不执行任何操作,直到收件人成功发送邮件。这同样适用于接收消息:接收过程将等待并且不做任何事,直到收到预期的消息。

在异步通信中,发件人会发出一条消息,然后继续执行其他任务而不用等待。接收器也不需要阻塞,直到消息到达。它会定期检查是否有任何消息可用。

+0

我们可以在程序结束时检查程序,而不是自动检查频繁,对不对?我们可以等待中断,正如你在我之前的问题中为中断驱动的I/O和DMA所解释的那样http://*.com/questions/40541880/what-is-the-difference-between-programmed-polled-io-中断驱动-IO-的。 –

+1

我们的DMA讨论原则可以在这里适用,但不是100%。 – BiN4RY

+1

假设我们仍然在讨论CPU和外设之间的通信,同步I/O意味着CPU和设备都知道数据何时需要,因此“同步”。这通常涉及一个握手协议和一个使传输过程保持同步的公共时钟。在异步I/O中,CPU和设备不知道对方何时会发送消息。在这种情况下,轮询和中断都可用于处理意外消息。 – BiN4RY