作者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