デバイスファイルマッピングの利点

デバイスファイルマッピングの利点

デバイスファイルをマッピングするためにmmapを使用すると、どのような利点があるかを尋ねたいと思います。このデバイスファイルのファイル操作APIを実装するドライバがあります。

私が尋ねるのは、デバイスファイルがハードドライブに保存されていないため、mmapがI / Oを保存しないことです。さらに、そのデバイスファイルに直接書き込むか(マッピング後)、書き込みシステムコールを使用しても、ドライバはカーネルスペースで実装されているため、カーネルコードとシステムコールを使用しています。

ありがとう

ベストアンサー1

正式にはそうではありません。「mmapデバイスファイル」(一部の/dev/xyz特殊ファイル)は、デバイスメモリ領域をユーザ空間にマッピングします。

一部のデバイスの制御レジスタがマッピングされている場合(実際にはほとんどのPCIペリフェラルの場合)、プログラムは繰り返し呼び出しを行わずに操作を実行できますioctl(実際には時間、カーネルスペース、IO時間が節約されます)。

デバイス間で大量のデータを転送する必要がある場合(通常の例ではビデオメモリ)、デバイスのメモリをユーザー空間にマッピングすると、実際にスループットが向上します。このプログラムは lseek/write/read システムコールを削除できます。頼らなければなりませんでした。

もちろん、mmapが適用されても、プログラムはまだioctl / read / writeシステムコールを介してデバイスにアクセスできます。これは間違いなくI / Oを引き起こし、カーネル空間で時間がかかり、tのすべての利点を失います。彼のマッピングの目的は、それらを削除することです。


以下の説明について詳しく説明します。

virt_addr = map_base + target; virt_addrに書き込むたびに、デバイスドライバは後ろから読み取り機能を呼び出しますか?

デバイスのメモリがmmapされるという観点から、デバイスドライバを完全にバイパスすることができます。デバイスドライバ機能を呼び出す必要はありません。舞台裏から。 virt_addr のコンテンツ更新はシステムコールに変換されません。
何か効果があれば舞台裏からせいぜいIO-MMUです。

おすすめ記事