オペレーティングシステムの概念の観点から
I / Oパフォーマンスに影響を与える可能性があるもう1つの問題は、ファイルシステムへの書き込みが同期的に発生するのか非同期的に発生するのかです。
同期書き込みディスクサブシステムから受信した順序で発生します。書き込み操作はバッファリングされません。。したがって、呼び出しルーチンは、続行する前にデータがディスクドライブに到着するのを待つ必要があります。
中 非同期書き込み、データはキャッシュに保存されます。、制御権が発信者に返されます。
ほとんどの書き込みは非同期です。ただし、メタデータの書き込みなどは同期式にすることができます。
open
オペレーティングシステムは、多くの場合、プロセスが書き込みを同期的に実行するように要求できるように、システムコールにフラグを含めます。たとえば、データベースはアトミックトランザクションでこの機能を使用して、データが必要な順序で安定したストレージに到達することを保証します。
同期書き込みでは、「書き込みはバッファリングされません」。同期書き込みと直接I / Oは同じ概念ですか?
open
「オペレーティングシステムは、書き込みが同期的に実行されるようにプロセスが要求できるように、システムコールにフラグを含めることがよくあります。」同期書き込みはどの関数を呼び出すことによって達成され、どうなりますか? ?open()
O_DIRECT
write()
デフォルトではブロックし、バッファキャッシュへの書き込みが完了すると返されることは正しいですか(必ずしもファイルに書き込む必要はありません)。write()
参照で定義されているように同期書き込みは行われますか?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.)
詳しくはマンページをご覧ください。