2016-11-12 11 views
0

私の教科書は、通常、unix、linux、およびwindowsに関して概念を説明しています。しかし、非同期および同期I/Oに関しては、Windows OSのコンテキストでのみ説明します。このため、非同期および同期I/OがOSに依存しないかどうか疑問に思っていますか? Unix、Linux、Windowsのすべてで、両方のタイプのI/Oが利用できますか?あるいは、これらの能力を持つのはWindows OSだけです。非同期および同期I/OはOSに依存しませんか?

ありがとうございます。

+2

彼らはすべてそれを持っています。 – kaylum

+0

Windows APIは、非同期I/Oと同期I/Oを区別します。私が知る限り、Linux APIはそうではありません。どちらにしても同じことを達成することはできますが、あなたはそれを違う方法で行います。 –

+0

...私の理解では、Linuxが非同期にI/O *を持っていないという意味で、Windowsは*、つまりユーザが提供するバッファを読み書きしたり、非同期的に書き込んだりするという意味ではない。代わりに、同期呼び出しを発行しますが、ブロックされないことを保証します。詳細はselect()を参照してください。 –

答えて

1

これは非常に広い質問であり、その答えはコンテキストによって異なります。

CPUと他の周辺装置との間のI/Oは、ハードウェアI/Oインターフェイスによって異なります。システム内のほとんどのデバイスは、PCI Expressバスなどの同期インタフェースを使用します。他のデバイス(通常は低速のデバイス)は、シリアルポートなどの非同期インターフェイスを使用して通信することができます。

オペレーティングシステム内のプロセス間通信に関する質問がある場合、OSは通常、同期メソッドまたは非同期メソッドの両方を提供します。これは、特定のアプリケーションが特に同期通信を必要とするためであり、他のアプリケーションでは特に非同期通信が必要なためです。代わりに次の質問を考えることができます:あなたのプログラムは、何か他のことをする前にメッセージを送受信するのを待つことが重要ですか?それとも無視して後で確認できますか?

同期通信では、メッセージが受信者によって正常に配信されるまで、送信者は待機して何もしないでください。同じことがメッセージの受信にも適用されます。受信プロセスは待機し、意図したメッセージが受信されるまで何もしません。

非同期通信では、送信者はメッセージを送信し、待機せずに他のタスクを続行します。レシーバは、メッセージが到着するまでブロック待機する必要もありません。利用可能なメッセージがあるかどうか定期的にチェックします。

+0

自動的に頻繁にチェックするのではなく、プログラムが終了したことを知らせるときにチェックすることができます。以前の質問で割り込み駆動のI/OとDMAについて説明したように、割り込みを待つことができます。http://stackoverflow.com/questions/40541880/what-is-the-difference-between-programmed-polled-io-割り込み駆動型 - io-an。 –

+1

私たちが持っていたDMA議論の原則はここでは適用できますが、100%ではありません。 – BiN4RY

+1

CPUと周辺機器との間の通信については、同期I/Oとは、CPUとデバイスの両方がデータがいつ期待されるかを知っていることを意味します。これには、通常、ハンドシェイクプロトコルと、転送プロセスを同期させた共通クロックが含まれます。非同期I/Oでは、CPUとデバイスは、相手がいつメッセージを送信するかを知りません。この場合、ポーリングと割り込みの両方を使用して予期しないメッセージを処理できます。 – BiN4RY

関連する問題