似たような質問が既にあることは知っており、それらを調べてみましたが、私の質問に対する明確な一義的な答えを見つけることができませんでした。これらの機能とメモリ層との関係についてオンラインで調査していました。特に、メモリ層についての良い洞察を与えてくれるこの美しい記事を見つけました

fflush()アプリケーションからカーネル ファイルシステム バッファにデータを移動するようで、問題ありません。誰もがこの点に同意しているようです。私を困惑させた唯一のことは、同じ記事で、fsync()「データは安定したストレージレイヤーに保存される」と書かれたライトバックキャッシュを想定し、「ストレージ自体が書き込み時にデータを保存する可能性がある」と付け加えたことです。 -バックキャッシュなのでfsync()、データを安定したストレージに保存するために、O_DIRECT で開かれたファイルにはまだ必要です。"
あちこちを読むと、真実のように見えますが、データをストレージデバイスに入れますが、これにキャッシュレイヤーがある場合は、ここに移動するだけで、すぐに永続的なストレージに移動するのではなく、電源障害が発生した場合にデータが失われる可能性さえあります. バリアが有効になっているファイルシステムがない限り、「/およびその他の操作により、適切な CACHE FLUSH (ATA) または SYNCHRONIZE CACHE (SCSI) コマンドがデバイスに送信されます」[Web サイトの回答から]fsync()sync()sync()fsync()
質問:
更新するデータが既にカーネル バッファーにあり、デバイスにライトバック モードの揮発性キャッシュ レイヤーがある場合、記事で述べたように、
fsync()[そしてsync()私が推測する] ような操作はデータを安定したメモリ レイヤーに同期するというのは本当ですか?揮発性のものをスキップしますか?これは、ライトバック キャッシュではなく、ライトスルー キャッシュで起こることだと思います。私が読んだことから、ライトバックキャッシュをオンにfsync()すると、データを揮発性キャッシュに入れるデバイスにデータを送信することができ、後でのみ永続メモリに入ることがわかりましたfsync()私はそれがファイル記述子で動作し、次に単一のファイルで動作することを読みsync()ましたが、バッファの全体的な展開が発生するため、更新されるすべてのデータに適用されます。また、このページから、ディスクへの実際の書き込みの終了を待たずfsync()に、ディスクへの書き込みの終了を待機します。sync()2 つの間のメモリ データ転送に関連する他の違いはありますか?
助けようとする人々に感謝します