2016-07-20 9 views
3

デバイスラッピングライブラリの有効なユニットテストを行うために、Cでメモリマップデバイスを擬似したい(Linuxの場合)。CでメモリマップされたデバイスをMockingしてユーザスペースに入れよう

ここで、私はmmapというファイル記述子を原則としてそのデバイスのモックを表すユーザー空間に入れることができます。

AFAICT、私の質問はこれに帰着します:mmapが動作するファイルディスクリプタをユーザー空間で作成できますか?読み書きは適切なコールバックによって処理されますか?

また、おそらくこれは解決された問題であり、既知のカーネルドライバがありますか?

+0

おそらく、Linux?あなたがAppleかWindowsのカーネルドライバに夢中にならないと考えている。 – MSalters

+0

mmap FUSEファイルシステムファイルかもしれませんか? – Kornel

+0

@MSaltersはい、Linux - apologies(私は情報を編集したばかりです)。 –

答えて

2

Linuxシステムであることを考慮すると、1つのファイルだけで非常に単純なFUSEファイルシステムを実装できます。カーネルはそこからそれを扱うことができます。

主な問題は、カーネルがすべての書き込みをフラッシュしないことが期待できるということです。しかし、すべての未処理の書き込みをフラッシュするためのmsync()呼び出しがありますが、テスト中のシステムはそれを呼び出さないでしょう。しかし、私はあなたがファイルディスクリプタを開いて離れて得ることができると思いますO_DIRECT | O_DSYNC

+0

このケースでは、カスタムFUSEファイルシステムで騒ぎが起こると思いますか? –

+0

これは、カーネルがページキャッシュ内のページがダーティ(書き込まれた)ことを伝えます。 FUSEファイルシステムドライバはdiffを計算して、何が変更されたかを確認する必要があります。書き込みが成功したことを示す場合、カーネルはページキャッシュ内のダーティビットを再びクリアします。明白な警告:同じメモリアドレスを再読み込みすると同じ結果が得られます。 FUSEファイルのための 'volatile'と同等のものはありません。 – MSalters

+0

私は 'volatile'についてあなたの意見を完全に理解していません。これは、アクセスコードがメモリを「揮発性」と定義していても、OSが書き込まれる内容をキャッシュすることを意味しますか?これはむしろ役に立たないアプローチになっていませんか? –

関連する問題