В чем разница между копированием буфера пространства пользователя в буфер пространства ядра и отображением буфера пространства пользователя в буфер пространства ядра, а затем копированием буфера пространства ядра в другую структуру данных ядра?
Что я хотел сказать is:
Первый метод - copy_from_user()
function.
Второй метод, скажем, буфер пространства пользователя отображается в пространство ядра и ядро передается с физическим адресом (скажем, с использованием /proc/self/pagemap
), затем пространство ядра вызывает phys_to_virt()
по переданному физическому адресу, чтобы получить соответствующий виртуальный адрес ядра. Затем ядро копирует данные из одной из своих структур данных, скажем skb_buff
, в виртуальный адрес ядра, полученный при вызове phys_to_virt()
.
Примечание: phys_to_virt()
добавляет смещение 0xc0000000
к переданный физический адрес для получения виртуального адреса ядра, верно?
Второй метод описывает функциональные возможности в DPDK для модуля KNI, и в документации говорится, что он устраняет издержки копирования из пространства пользователя в пространство ядра. Пожалуйста, объясните мне, как.