最初の後、私たちが知っている最初のものは、どの機器を介してデータの伝送を実現するために、第二の操作が発生し、ブロッキング呼び出しであるIOモデルを、理解するために基礎となるオペレーティングシステムであるIOモデルを理解する必要があり、その後、基本的な知識以上で、我々は理解し始めましたIOモデルは進化し、最終的にはIOモデルの進化によって、私たちは知識を共有するためにマインドマップのカバーは、以下の点の区別IOモデルに関連付けられている主な用語を特定する方法!
データの伝送交換媒体
Unixオペレーティングシステムアーキテクチャ図
概要説明
-
ユーザースペース:上記のユーザーレベルの一部またはユーザ空間と呼ばれるUNIXプログラミングアプリケーションは、私たちは、ブートプロセスでカーネルのコマンドを呼び出すことができますが、ハードウェアデバイスや他の事業から完成読み出しや書き込みを持っています
-
カーネル:アプリケーションは、コンピュータ・ハードウェア・レベルを直接扱っている、コンピュータ関連の書籍は、オペレーティングシステムと呼ばれる、いくつかのコンポーネントは、通信の相互作用のコンピュータのハードウェア動作とプロセスを完了ヘルプユーザーにオペレーティング・システム・レベルによって提供されてもよい、と呼ぶことができますトランジットポイントとして
-
等、ネットワークプログラミングのために、関連するハードウェアデバイスは、ネットワークインタフェースコントローラである、バイトストリームデータを介して、ネットワーク・インターフェース・コントローラとインターネットIPアドレスに送信され、他のコンピュータ・システムのアプリケーションに送信された情報、マルチ:ハードウェアコンピュータシステム間の通信
-
LINUX / UNIXシステム、プロセスファイル格納ファイル記述テーブル(メモリ・アレイ)において、ストレージアレイ構造ポインタファイルタイプ、ファイルは、配列インデックスで操作を完了するために、ファイルを処理し、配列:ファイル記述子(ファイル記述子)インデックスファイルディスクリプタは、fdなどと呼ばれています
したがって、上記の図及び簡単な説明clearによって、ユーザプロセスが直接次いでコンピュータプロセスネットワークデータ送信ニーズを横切って、カーネル、ハードウェアデバイスに対応するコマンド操作を解析し、実行し、開始カーネルにハードウェアデバイス必須要求コマンドを操作することができませんカーネルは、ネットワーク・インターフェース・コントローラにデータを送信、通信、ネットワーク・インターフェース・コントローラを介してコンピュータ間で下に示します:
ネットワークIOブロック操作
IO操作ステップコアを読み取ります
-
カーネルが開始データへのユーザー・プロセスが動作要求を読んで、カーネルは、ハードウェアデバイス準備からデータを取得するために、データパケットまで待たなければなりません
-
デバイスからのカーネルが良いを準備するときに、データパケットは、ユーザ空間へのカーネルからコピーする必要があります
IOブロック操作
-
recvfrom機能:ユーザプロセスのコンテキスト空間からカーネル空間に切り替える必要がある期間の後にスイッチバックするためには、実行するとき、ここでIOオペレーションシステムコール、著名なシステムのカーネルとユーザプロセスとしては、関数を呼び出します
-
/ poll関数を選択します。複数のイベントのいずれかの発生を待つためにカーネルに指示するプロセスを可能にし、そしてだけで、1つまたは複数のイベントが発生した以上の時間の指定された期間よりも現在のイベントを通知するために、ユーザ・プロセスをウェイクアップします準備ができています
IO操作コントラスト
-
recvfrom関数:時間の現在の関数を呼び出し、その後、ユーザプロセスは、システムのカーネル内でブロックされ、他のプロセスがこの時点でコールに要求を開始したときに、他のプロセスと1である要求を、対処するための作業を完了するために、システムのカーネルの外で待機しなければならない:1モデル
-
/ poll関数を選択:起こされるまでの時間の指定された期間よりもカーネル記述子以上を選択するために、時間の現在の関数を呼び出し、その後、ユーザプロセスが現在選択機能でブロックされ、継続的にポーリング準備状態を、システム関数呼び出しを選択する記述子を運ぶことによるものですカーネルのセット、N記述子を聞くことが可能である(仮の可読状態イベントに準備完了状態と呼ばれる記述、議論イベントは後述される)、すなわち、N:1モデル、次のように:
IOモデルの進化
データ伝送に基づいてIOが理解操作をブロッキング、システムカーネルを介してネットワークにより送信されたデータを読み取るために必要なプログラミングネットワークは、ユーザの空間が必要であり、カーネルは、データの準備が完了するのを待って、ステップ2の間にユーザ空間にデータをコピーしながらする必要があります概念を簡単にするために、低TCPソケットおよびその他の情報隠蔽は、Unixの下でUDPトランスポートにIOモデルの5種類を示すために、シンプルで理解しやすい方法では、説明できません
IOモデルをブロック
-
アプリケーションプロセス開始のrecvfromシステムコールので、その間にそれ以外の場合は、ブロックされた状態のままになり、カーネルが中断異常戻っていない限り、ユーザー空間にデータグラムの情報をコピーされますので、この時間は待つようにブロックされてきました
-
以下はブロッキングIOを示すタイミング図です。
ノンブロッキングIOモデル
-
recvfromシステムコール、システムのカーネルは、データグラムを受信していないこの時間、エラーがユーザプロセス伝える、ユーザプロセスに直接戻されたときに主にユーザプロセスに反映されている非ブロッキングが開始され、「現在、ノーデータグラムまで、後半に戻ってくるの。」
-
ユーザー・プロセスは、「情報を受信しますが、ユーザー・プロセスは、最大データグラムとき、彼は、ポーリング(ポーリング)を開始したように、システムコールのrecvfromシステムのカーネルを開始することを、知らない、まだデータを求めて、エラーを返し続けない場合は、」
-
コピーが完了した後、システムコールのrecvfromグラムアップするまで、ユーザによって開始ポーリングプロセス、ユーザプロセスが成功を返しますレポートにデータをコピーするためのバッファカーネルシステムを待つこの時間必要が促さ
-
以下のタイミング図が示す道NIO
IO多重化モデル
-
IO多重化モデルは、(のrecvfromコールはシステムコールをブロックする実際のIO操作をされる)実際のIO操作を2つの系統のいずれかが機能しているコールをブロックするのではなく、実際にはブロッキング、システム・カーネルへの呼び出しを開始するために選択するか、ポーリング機能を使用することです
-
システムカーネルの準備ができたデータのための機能、待機を選択し、読み取り可能な状態に現在のイベントを通知するために着信拒否
-
選択カーネル状態通知イベントが読み出された受信した場合、ユーザが開始データコールにシステムのカーネルにコピーすることができるのrecvfromバッファ空間
-
以下IO多重化モードのタイミングチャート
モデル駆動信号IO
-
最初のターンシグナルIOドライバ機能ソケットとコールシステムは、直接コールを開始した後に返されます、組み込みのsignaction信号処理機能によってインストールされています
-
次いで、信号処理機能をユーザプロセスに現在のデータに、コアネットワークからの送信信号をデータ・パケットを受信するために待機した後
-
信号処理機能は、カーネル空間をコピーするユーザのためにシステムコールを開始情報のrecvfromデータグラムバッファ待機を受信します
-
成功のヒントは、コピーが完了した受信戻った後、アプリケーション・プロセスは、ネットワークからデータを読み出すために始めることができます
-
:システムのカーネル記述子は、ユーザプロセスSIGNOに成功のヒントを返すために待っているのrecvfromシステム・コールを開始するには、この時間を送信できるようになります時には、上記次のようにプロセスがあり、IOモデルを駆動する信号です。
非同期IOモデル
-
POSIX仕様は、準備された、データを読み取ることができ、動作を開始待ち時間とコアが動作を通じてデータが含ませて、データ複製処理の処理の完了後にユーザデータを通知するカーネル通知によって定義されます
-
IOモデルは、非同期信号を区別するために、上記の操作がダイレクトIO完了したとき、我々はスタートIO操作に気づくことができたときに、IO信号である私たちに通知します
-
タイミング図は次の
IOモデルの5種類
-
IOモデルを遮断するために、1:カーネルが一つだけの要求を処理することができるである1モデル、他の要求を処理する現在の要求を待つためにやってきた、パフォーマンスは、非常に貧弱であるマルチスレッドのNに変更して:1モデル非ブロッキング同様IOを区別は、後者のマルチスレッド・シングルスレッド前者ことです
-
それは非ブロッキングIOモデルが、より複雑なカーネルベースの実装機構通知コールバックである(及び秩序を維持するために、IOオペレーション非同期信号処理機能におけるデータの読み出しがIOモデル駆動型の信号のために、個人的に私は、信号が正しく機能対処するために設計されていないと思います操作は、即ち、後続のデータは、読み出し動作等)
-
関係IOをブロックしますが、スイッチングカーネルとユーザースペースが存在するため、常にポーリングによる方法を開始したのrecvfromシステム・コール、および損失性能に比べて、IOモデルを非ブロックするための
-
IOモデルを多重化するため、呼び出しが機能を選択するためのイベントや読み出し通知のためのイベントや待機を対応するカーネルまで、(トラバース自然へのファイルディスクリプタのセットに基づいて)機能を選択するためにブロックします
-
そして、AIOモデルのため、それは真の非ブロッキング非同期IOモードですが、Linux / UNIXシステムのサポートで、このIOモデルの設計確認されていません
-
ほとんどのUnix / Linuxベースのサーバは、最適化を強化/ポーリング方式を選択するように、あること、IO多重化モデルを最適化し、改善されています
IOキー規約
同期および非同期の定義
-
同期:fnが通話を開始、あなたはコールが戻るのを待つ必要があり、呼び出しはどちらかである結果は望ましい結果が例外の結果がスローされるか、それはそれは、アトミック操作(成功または復帰に失敗のいずれか)と言うことができます
-
非同期:fnが結果はハンドラは結果を得るために、発信者に通知するための手段を「ウェイクアップ」を実行するために呼び出された後にのみ返すことを待たずに直接通話を開始(ウェイクアップモードのコールバック、イベント通知など)
-
要約:当該プログラムとの間の同期および非同期通信
ブロッキングとノンブロッキングの定義
-
ブロッキング:スレッドがある場合を説明するために、スレッドのアナロジーを遮断、リソースの競合の同時マルチスレッド競合状態で、すでにロックを保持して、その後、現在のスレッドが待機状態に懸濁されるロックを取得しません
-
ノンブロッキング:スレッドがロックを解除すると、他のスレッドは、資格のあるロックの準備状態、競争を入力します
-
概要:ブロッキングと非ブロッキングは、複数のプログラムの結果待ちの状態が心配されます
-
目標は同じ問題ではない、関連付けを阻止するとの同期および非同期の非ブロッキングが存在しない、見ることができます
同期および非同期IO IO(POSIX仕様に基づきます)
-
同期IO:実際のアプリケーション・プロセスがIO操作要求(のrecvfromを)開始を表すプロセスは、待機状態でIO操作が正常にプロンプトのリターンを完了するまでのプロセスがブロックされているこの時間となっている原因
-
非同期IOは:実際のアプリケーション・プロセスがIO操作要求(のrecvfrom)、システムのカーネルは、直接ユーザプロセスにエラーメッセージを返します。この時間開始を表す「さて、あなたは気付くだろうに対処していないプロセスを伝えると同等のものを。」
-
ブロッキングIO:待ち時間は、それがブロックされている場合、主反射IOオペレーションは、処理を許可する要求を受信した後、カーネルおよびカーネルに通知するための要求を開始します
-
ノンブロッキングIO:とき要求に関係なく伝える方法のプロセスの結果のIO操作は、ノンブロッキングである「後半戻ってきて、DOは待っていない、」開始しました
IOモデル比較
定義された同期および非同期IOとIOモデルに応じて公知に関連して上述した、およびのみIO非同期POSIX仕様に非同期IOモデル適合は、IO他のモデルは、システムコールがブロックされているのrecvfromカーネル存在に属する同期IO操作、それによって次のように要約されます。
-
同期または非同期IOとIO、またはIOのモデル名として知られている言い換えれば、上記で言及
-
ほとんどのオペレーティングシステムは、オペレーティング・システム・サポートは、IOモデル非同期、同期IOの方法に基づいて、厳密な意味でのIOモデルで実用的作業に曝され、不確実であるブロッキング-IOを(IOブロッキング)と呼ばれるべきですそして非ブロッキング-IO(IO非ブロッキング)の代わりに、同期および非同期IO IO
-
要約:呼び出しの結果を待っている状態のため、ブロッキングと非ブロッキングのプログラムのための同期および非同期通信機構