作者ggg12345 (ggg)
看板CSSE
標題Re: [問題] I/O structure的問題
時間Fri Apr 3 22:46:06 2009
※ 引述《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
1F:推 dcleft:感謝大大 04/05 09:48