mmapの機能について質問があります。カーネルがディスク上のマップされたファイルへのデータの永続化を処理する非同期モードでmmapを使用する場合、前の更新で後の更新を上書きすることは可能ですか?
時間Tで、ディスク上のファイルにメモリマップされているメモリ内の場所を変更し、時間T+1でメモリ内の同じ場所を変更するとします。ファイルへの書き込みは同期的ではないため、カーネルが最初に時間T + 1で変更を取得し、次に時間Tで変更を取得して、メモリマップトファイルに不整合が生じる可能性はありますか?
mmapの機能について質問があります。カーネルがディスク上のマップされたファイルへのデータの永続化を処理する非同期モードでmmapを使用する場合、前の更新で後の更新を上書きすることは可能ですか?
時間Tで、ディスク上のファイルにメモリマップされているメモリ内の場所を変更し、時間T+1でメモリ内の同じ場所を変更するとします。ファイルへの書き込みは同期的ではないため、カーネルが最初に時間T + 1で変更を取得し、次に時間Tで変更を取得して、メモリマップトファイルに不整合が生じる可能性はありますか?
それは正確には不可能です。msync(2)またはmunmap(2 )まで、ファイルの不整合が許容されます。その場合、ダーティ(変更された)ページがページごとにディスクに書き込まれます(場合によっては、新しいカーネルのファイルシステムによって異なります)。msync()を使用すると、書き込み終了後の同期操作とキャッシュの無効化を指定できます。これにより、キャッシュ内のデータがファイル内のデータと同じになるようにすることができます。それがないと、プログラムに新しいデータが表示される可能性がありますが、ファイルには古いデータが含まれています。かなり厄介な状況の正確な詳細は、CPUアーキテクチャとそれらのルーチンの特定のOS実装によって異なります。