Очевидно, что вы можете создавать общую память с помощью copy_from_user и т. Д., Вы можете легко настроить драйвер символьного устройства, в основном все, что вам нужно сделать, это создать структуры file_operation, но это далеко не самый быстрый способ.
У меня нет тестов, но системные вызовы на современных системах должны быть самыми быстрыми. Я считаю, что это то, что было наиболее оптимизировано для. Раньше считалось, что для перехода от ядра user -> нужно было создать прерывание, которое затем попадало бы в таблицу прерываний (массив), затем определяло местонахождение прерывания прерывания (0x80) и затем переходило в режим ядра. Это было очень медленно, а затем появилась инструкция .sysenter, которая в основном делает этот процесс очень быстрым. Не вдаваясь в подробности, .sysenter считывает из реестра CS: EIP сразу, и изменения происходят довольно быстро.
Совместно используемая память, напротив, требует записи в память и чтения из памяти, что бесконечно дороже, чем чтение из регистра.