1. IOとは何ですか?
データの(データは、レジスタ、キャッシュ、メモリ、ディスク、ネットワークカード、等の、物理的媒体上に格納されている)、そこにはアクセスせず、読み取りのすべての時間は、これらが、コンピュータにIO操作と呼ばれます。
2.ブロッキングIO
(1)ユーザが、カーネル(カーネル)にスレッドIO要求、システムコール(システムコール)を開始IO操作を行います
この時点で、(2)ユーザスレッドブロックは、カーネルデータを待っていることは準備ができています
(3)カーネルデータはユーザ空間にカーネル空間からデータをコピーする準備ができて、かつユーザスレッドの最後のブロックに戻ります。
3.ノンブロッキングIO
(1) IOオペレーションを実行するためにカーネルにユーザ要求スレッドIO、システムコールによって開始されます
(2)この時点で、カーネルがエラーを指示するデータを返す準備ができていない、とユーザスレッドをブロックしていない場合、スレッドは繰り返すことができ、ユーザーは、IO要求を開始します
ユーザが開始を要求し、カーネルスレッドは、データの準備ができている場合(3)は、データは、(このプロセスはブロックのユーザスレッドに必要である)カーネル空間からユーザ空間にコピーユーザに返されます
4.多重IO
(1)ユーザシステムコールは、スレッドの呼び出しを選択した後、その後、ユーザスレッドがブロックされている(カーネルはソケットを選択し、すべての監視を担当します)
(2)カーネルがデータを返します準備ができている、と通知ユーザスレッド読み出し動作、カーネルとユーザ空間リターンにデータをコピーするには、この時間
ブロックとIO IOを非ブロック?
IO操作はIOをブロックにカーネルスレッドによってIO操作に続いて、ユーザスレッド、カーネルスレッドによって開始され、すぐには戻りませんが、ユーザスレッドがブロックされている間だけのリターンにメモリ空間にコピーするデータ、待っている:IOをブロック。
IOをノンブロッキング:結果がエラーであれば、すぐにIO操作後、ユーザーが再起動要求のスレッドがブロックされていないことができIOと閉塞異なるカーネルスレッドが戻ると、データいったんカーネルは準備ができていると、ユーザーは、IOスレッドを開始その要求は、ユーザ空間にデータをコピーします。
我々は、IO動作は、大きく二つの部分に分割されていることを上記のグラフを見て:
(1)ユーザー・スレッドがカーネルの準備ができたデータはありませんが、IO要求を開始します
(2)ユーザ・スレッドは、準備ができているために、IO要求、カーネルデータを開始します
我々は、IOとIOこのステップ(1)ことを除いて同様の処理である非ブロッキングでこのプロセスをブロック(2)と、2つの図は、流れと比較することによって見ることができます。ブロッキングおよび非ブロッキングIO IOの間の差は、直ちに返した場合、IO操作の実装をもたらす直ちに返されるカーネルスレッドすることです
非ブロックIOに比べて戻り、それ以外の場合は、IOをブロックしています。
6.同期および非同期IO?
非同期IO:それはすぐに戻ります非同期読み込みを受信し、ユーザスレッドへの妨害を引き起こすことはありませんときに、ユーザーのスレッドによって開始IO操作は、あなたはカーネルスレッドのために、一方で、すぐに他のことを行うことができます。データはにカーネル空間からデータをコピーするカーネルの後に準備ができているときは、ユーザ空間、カーネルは、ユーザーがIO操作を完了したユーザーに信号を送ります。
同期IO:IO同期キーは(あること、(2)の手順は、前述した)あなたが実際にデータを読み込む際に、ユーザースレッドがブロックされているかどうかです。非ブロックがIOはすぐにユーザーが開始要求を返しますが、カーネルの準備ができたデータであるとき、任意のコース要求スレッドがユーザ空間にカーネル空間からデータをコピーし、そのための非ブロッキングIO同期IOに属します開始するには、ユーザーが必要になります。