2016-11-12 113 views
0

我的教科書通常用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()以獲取更多詳細信息。 –

回答

1

這是一個非常寬泛的問題,答案取決於上下文。

對於CPU和其他外設之間的I/O,它取決於硬件I/O接口。系統中的大多數設備都使用同步接口,例如PCI-Express總線。其他設備(通常性能較差的設備)可以使用異步接口進行通信,例如串行端口。

如果您的問題是關於操作系統內的進程間通信,則操作系統通常提供同步或異步方法。這是因爲某些應用程序特別需要同步通信,而其他應用程序特別需要異步通信。您可以考慮以下問題:您的程序在做其他事情之前是否等待發送或接收消息至關重要,或者您現在是否可以忽略它們並在稍後檢查它們?

同步通信要求發件人等待,並且不執行任何操作,直到收件人成功發送郵件。這同樣適用於接收消息:接收過程將等待並且不做任何事,直到收到預期的消息。

在異步通信中,發件人會發出一條消息,然後繼續執行其他任務而不用等待。接收器也不需要阻塞,直到消息到達。它會定期檢查是否有任何消息可用。

+0

我們可以在程序結束時檢查程序,而不是自動檢查頻繁,對不對?我們可以等待中斷,正如你在我之前的問題中爲中斷驅動的I/O和DMA所解釋的那樣http://stackoverflow.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