問題タブ [userspace]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linux-kernel - ユーザー空間メモリのコピーとユーザー空間メモリのマッピングの違い
ユーザー空間バッファーからカーネル空間バッファーにコピーすることと、ユーザー空間バッファーをカーネル空間バッファーにマッピングしてから、カーネル空間バッファーを別のカーネル データ構造にコピーすることの違いは何ですか?
私が言いたかったのは:
最初の方法は
copy_from_user()
関数です。2番目の方法は、ユーザー空間バッファーがカーネル空間にマップされ、カーネルが物理アドレスで渡され(たとえば、を使用して
/proc/self/pagemap
)、カーネル空間が渡された物理アドレスを呼び出しphys_to_virt()
て、対応するカーネル仮想アドレスを取得します。次に、カーネルは、そのデータ構造の 1 つからデータskb_buff
を、呼び出しからphys_to_virt()
呼び出しから取得したカーネル仮想アドレスにコピーします。注:渡された物理アドレスに
phys_to_virt()
のオフセットを追加して、0xc0000000
カーネルの仮想アドレスを取得しますよね?
2 番目の方法は、KNI モジュールの DPDK の機能を説明しており、ユーザー空間からカーネル空間へのコピーのオーバーヘッドを排除するとドキュメントに記載されています。方法を教えてください。