write() は非同期的に書いていますか?

write() は非同期的に書いていますか?

オペレーティングシステムの概念の観点から

I / Oパフォーマンスに影響を与える可能性があるもう1つの問題は、ファイルシステムへの書き込みが同期的に発生するのか非同期的に発生するのかです。

同期書き込みディスクサブシステムから受信した順序で発生します。書き込み操作はバッファリングされません。。したがって、呼び出しルーチンは、続行する前にデータがディスクドライブに到着するのを待つ必要があります。

非同期書き込みデータはキャッシュに保存されます。、制御権が発信者に返されます。

ほとんどの書き込みは非同期です。ただし、メタデータの書き込みなどは同期式にすることができます。openオペレーティングシステムは、多くの場合、プロセスが書き込みを同期的に実行するように要求できるように、システムコールにフラグを含めます。たとえば、データベースはアトミックトランザクションでこの機能を使用して、データが必要な順序で安定したストレージに到達することを保証します。

  1. 同期書き込みでは、「書き込みはバッファリングされません」。同期書き込みと直接I / Oは同じ概念ですか?

  2. open「オペレーティングシステムは、書き込みが同期的に実行されるようにプロセスが要求できるように、システムコールにフラグを含めることがよくあります。」同期書き込みはどの関数を呼び出すことによって達成され、どうなりますか? ?open()O_DIRECT

  3. write()デフォルトではブロックし、バッファキャッシュへの書き込みが完了すると返されることは正しいですか(必ずしもファイルに書き込む必要はありません)。write()参照で定義されているように同期書き込みは行われますか?

  4. aio_write()非同期I/Oとも呼ばれます。非同期で作成しますかaio_write()、または非同期的に作成しませんか?

ありがとうございます。

ベストアンサー1

O_SYNCとO_DIRECTは次のように異なります。

  • O_SYNCはディスク同期を引き起こしますが、コンテンツはキャッシュに入るため、キャッシュから読み取られます。
  • O_DIRECT はキャッシュをバイパスしますが、同期はしません。
  • (たとえば)襲撃の場合、私が知っている限り、O_DIRECTのためにアイテムは襲撃として送信される可能性がありますが、その値以下では送信されません。
  • O_SYNC は、ディスク全体の同期を引き起こし、他のパーティションや他のファイルのデータ同期を引き起こし、ハードウェアキャッシュもフラッシュできます。

再ブロック、はい、いいえ:

  • ファイルシステムが同期的にマウントされていない場合、データがカーネルにコピーされるとすぐに返されます。カーネルに使用可能なバッファースペースがある限り、これは即時です。もはやバッファ空間が存在しない場合、バッファ空間が生じるまでブロックされる。
  • ファイルシステムが同期マウントを使用している場合はブロックされます。

再開、ソースman 2 open

   O_SYNC Write operations on the file  will  complete  according  to  the
          requirements  of  synchronized I/O file integrity completion (by
          contrast with the synchronized  I/O  data  integrity  completion
          provided by O_DSYNC.)

詳しくはマンページをご覧ください。

おすすめ記事