精華區beta CSSE 關於我們 聯絡資訊
※ 引述《dcleft (SOSOYA)》之銘言: : 我看恐龍本的第二章有提到 : I/O 有分 synchronous I/O 及 Asynchronous I/O : 我對Synchronous I/O 有點不明白 : 當一個process A執行disk I/O,Process A要等待disk I/O 完成, : 這時候scheduler會把cpu轉換給另一個process B執行嗎? : 那這個process B 如果要執行 printer I/O 那process B就要等disk I/O 完成, : 才能執行printer I/O? : 在實務上,有什麼OS是用synchronous I/O的嗎? : 另一個問題是 non-blocking I/O 是 Asynchronous I/O的一種嗎? ======= 那個圖說的是 I/O Methods: (a)Synchronous (b)Asynchronous Synchronous I/O method 是說一個 process 呼叫 system call 要讀取 I/O 裝置的資料時, OS 會先啟動 I/O (start i/o) 讓 裝置去讀資料, 當資料讀進來時 (i/o complete), 這個 process 才會從 system call 離開 os 還原回來, 此時 CPU 才會回到 這個 process 執行, 繼續 system call 之後的下一個動作. 還回 的時機, 就剛好就在資料已進來的時候, 跟資料可以取用的時間是 同步的. 這段從 i/o start 到 i/o complete 的時間, 呼叫此 i/o 動作的 process 是不會被執行的, 就相當於是 waiting i/o completion. 從 start i/o 到 i/o completion 這段時間, cpu 跑去做了那些事 是 OS 處理與決定的事, 是真的等待還是讓 cpu 做別的事通常是根 據這段時間長短而定. 若是去做別的事, 通常是利用 i/o completion 產生 interrupt , 通知 cpu 要立即回來進行 i/o completion 之後 的對應動作, 也就是將 cpu 回到原叫用 i/o 動作的 process 去執行. Asynchronous I/O method 就是通稱的 non-blocking I/O , 當 process 透過 system call 使用 I/O 裝置, 於啟動 I/O 之後, 會立 即還回 process 執行 system call 之後的其他跟此 i/o 無關的動作, 但此時因資料轉移還沒有完成, 需由 OS 接收到 i/o completion 的 中斷通知後, 由 OS 產生 event flag 供 process 來查驗是否該進行 i/o 完成之後的動作. 產生通知給 process 有關 i/o 狀態的方法之 一是使用 callback function. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.115.4.12
dcleft:感謝大大 04/05 09:48