質問: Windows, Linuxで実際のところはどうなっているのか? Windowsでの方策1 ------------ CreateFileMapping()でflProtect引数に A.SEC_NOCACHEを指定した場合にのみ キャッシュを通さずメモリに直接アクセスされる。 B.指定しなくても キャッシュを通さずメモリに直接アクセスされる。 C.その他 のいずれでしょうか? Windowsでの方策2 ------------ CreateFileMapping()でflProtect引数にSEC_NOCACHEを指定しないとキャッシュ経由になる? キャッシュからメモリへの書き込み、メモリからキャッシュへの充てんは FlushViewOfFile()を使う? Linuxでの方策1 ---------- mmap()またはshm_open()で返されるアドレスへのアクセスは 常にキャッシュを通さずにメモリに書いて、キャッシュを通さずメモリから読みだす? Linuxでの方策2 ---------- mmap()またはshm_open()で返されるアドレスへのアクセスは常にキャッシュ経由のアクセスで、 キャッシュからメモリへの書き込み、メモリからキャッシュへの充てんはmsync()を使う?
回答: (1)メモリー共有やファイルのキャッシュはOSが提供する機能上の話。 (2)L1、L2、L3各キャッシュやそれらの調停はCPU内の回路設計上の話。 です。両者はほぼ無関係なので混ぜて考えてはいけない概念ですね。