0

ユーザー空間バッファーからカーネル空間バッファーにコピーすることと、ユーザー空間バッファーをカーネル空間バッファーにマッピングしてから、カーネル空間バッファーを別のカーネル データ構造にコピーすることの違いは何ですか?

私が言いたかったのは:

  1. 最初の方法はcopy_from_user()関数です。

  2. 2番目の方法は、ユーザー空間バッファーがカーネル空間にマップされ、カーネルが物理アドレスで渡され(たとえば、を使用して/proc/self/pagemap)、カーネル空間が渡された物理アドレスを呼び出しphys_to_virt()て、対応するカーネル仮想アドレスを取得します。次に、カーネルは、そのデータ構造の 1 つからデータskb_buffを、呼び出しからphys_to_virt()呼び出しから取得したカーネル仮想アドレスにコピーします。

    注:渡された物理アドレスにphys_to_virt()のオフセットを追加して、0xc0000000カーネルの仮想アドレスを取得しますよね?

2 番目の方法は、KNI モジュールの DPDK の機能を説明しており、ユーザー空間からカーネル空間へのコピーのオーバーヘッドを排除するとドキュメントに記載されています。方法を教えてください。

4

0 に答える 0