Linuxの5つのIOモデル

Linuxの5つのIOモデル

  • Javaでは、3つのIOモデルはIO(NIO)と非同期IO(AIO)非ブロッキング、IO(BIO)をブロックしているがあります。

  • ファイルハンドルは、実際には、IO操作が実装されているオペレーティングシステムレベルに依存していると、Javaは、IO関連のAPIを提供します。

  • Linuxオペレーティングシステムでは、5種類の合計:ブロッキングIOモデル、非ブロッキングIOモデル、IO多重化モデル、モデルとIO信号が非同期IOモデルを駆動します。

  • カーネル空間は、中間遷移領域と呼ばれ、ユーザ空間へIOハードウェア(ハード・ディスク)から読み出されたデータを指します。

1.ブロックIOモデルの
ここに画像を挿入説明
アプリケーション・プロセスは、システムを介してデータを受信するためにはrecvfromを呼び出しますが、カーネルは、アプリケーション・プロセスがカーネルの準備ができて、データグラム、閉塞を終了するのrecvfromデータグラムの完全なコピージョブのアプリケーションプロセスがあるまでブロックすることになります準備ができていないデータグラムです状態。

  • シンプル、低並行性、低適時要件。

2.非ブロックIOモデル
ここに画像を挿入説明

  • カーネルとの対話へのアプリケーション・プロセスの前に、目的は、もはや盲目的に待っていない、達したが、直接返されません。そして、ポーリングによって方法は、カーネルデータの準備ができているかどうか尋ねるために停止します。世論調査は、データの準備ができていることが判明した場合、それはユーザ空間にデータをコピーします。準備ができていないカーネルはエラーを返します場合。
  • 2つの要求のクリアランスは、時間効率を高め、他のタスクを完了します。

3.ドライブ信号IOモデル
ここに画像を挿入説明

  • ファイルを読み込むときにイベントが発生した場合、アプリケーション・プロセスは、ソケットをカーネルに通知し、私に信号を送ってください。信号を受信した後、信号処理機能は、後続の処理に対応します。
  • カーネルデータがプロセスにシグナルを送信する準備ができたときにシグナルハンドラを登録するには、カーネルへの事前のアプリケーションプロセスは、ユーザー・プロセスは、障害なく返し、ユーザプロセスは、シグナルハンドラになりますユーザ空間にデータをコピーし始めました。
  • 複合体を実装
  1. IO多重化モデル
    ここに画像を挿入説明
  • IOが同じパイプライン上の複数のプロセスに登録することができ、このパイプラインは統一し、カーネルの相互作用します。データパイプラインのための要求の準備ができて必要とする場合、プロセスはユーザ空間にコピーされたデータに対応します。
  • マルチIOマルチプレクサ転送が選択機能である場合、IO複数のプロセスは、すべての必要なデータ場合は、ユーザー・プロセスは、すべての登録された良好なIOの選択、選択聴取を呼び出すとき、IOモニタ、同じ選択するために登録することができますとき準備ができていない、呼び出し元プロセスがブロックされます選択。必要なIOデータのいずれかの準備ができると、選択コールが戻ると、プロセスは、データののrecvfromコピーすることによって行われます。
  • ここIO多重化モデル、および信号処理機能をカーネルに登録されていないので、彼はノンブロッキングではなかったです。すべてのIO操作は、モニターに必要なデータの少なくとも一つの準備ができているを選択するまで、選択プロセスを発行した後、我々は返却する必要があり、また、ファイルをコピーするための要求を再送信する必要があります。
  • 効果的な家庭の効率を言及。

4種類が同期され、実際のデータコピー処理が同時に行われます。

データの準備ができた後、カーネル通知処理を信号を駆動し、その後のrecvfromのコピー操作を介してデータを処理します。データのコピーを同期したデータの準備フェーズが非同期であると考えることができ、しかし、まだ、すべてのプロセス全体が非同期であるとみなすことはできませんされています。

5.非同期IOモデル

  • IOは、カーネルに要求するアプリケーション・プロセスの後、カーネルによってファイルの完全なコピーが動作します。関連するコア事業が完了した後、それが完了した、このIOアプリケーション・プロセスを指示する信号を送信します。
    ここに画像を挿入説明
    ユーザプロセスが開始aio_readを全体の操作は、どのように通知プロセスを完了した後、すぐに他のことを行うされたときに、カーネルに伝えるために、カーネル記述子、バッファポインタ、バッファサイズなどを渡し、操作の後。カーネルを受信するとaio_read後に、我々はすぐに戻り、その後、データの準備を待って、あなたがユーザ空間にコピーする準備が整いましたし、このIOが完了した通知されます。

5 IOモデル比較

ここに画像を挿入説明

おすすめ

転載: blog.csdn.net/qq_35958788/article/details/93708886