32239


WindowsやLinuxにおいて、ドライバ開発をする際にはCPU Cache操作が必要になることがあるとおもいますが、CPU
CacheをWritebackしたり、Invalidateしたりする関数はあるのでしょうか？

x86の命令には、WBINVD命令（Write Back and Invalidate Cache）やINVD命令（Invalidate Internal
Caches）があると思うので最終的にはこの命令を呼ぶとおもうのですが、これらをラップした関数が用意されているのか教えていただきたいです。


CC BY-SA 4.0
2017-01-27T09:40:56.880
32201
2022-07-18T07:49:16.610
2022-07-18T07:49:16.610
3060
4260
question
linux windows cpu
WindowsやLinuxにおいて、CPU CacheをWritebackしたり、Invalidateしたりする関数はあるのでしょうか？


メモリマップドI/Oとかでしょうか。

たとえばLinuxに含まれるfbdev（フレームバッファドライバ）の場合、wbinvdをインラインアセンブラで呼び出すインライン関数を定義しています。

[code]

    static inline void flush_cache(void)
    {
            asm volatile ("wbinvd":::"memory");
    }
    
[/code]

まあ、ラップしなくちゃならないほどのものでもないかと。


CC BY-SA 3.0
2017-01-27T15:10:51.933
32209
2017-01-27T15:10:51.933
4010
32201
answer


Visual
C++ですと[`<intrin.h>`ヘッダーに定義されている`__wbinvd`関数](https://msdn.microsoft.com/ja-
jp/library/ct1z0fcz.aspx)を使うことで`WBINVD`命令に展開できます。


CC BY-SA 3.0
2017-01-30T01:31:21.800
32239
2017-01-30T01:31:21.800
4236
32201
answer