Изменение таблицы страниц процесса Linux для доступа к физической памяти без системного вызова


Я разрабатываю приложение реального времени для Linux 3.5.7. Приложение должно управлять устройством PCI-E.

Для доступа к пространствам карт PCI-E я использую mmap в сочетании с /dev / mem. Однако (пожалуйста, поправьте меня, если я ошибаюсь) каждый раз, когда я читаю или записываю отображенную память, требуется системный вызов для псевдодрайвера /dev/mem для обработки доступа к памяти.

Чтобы избежать накладных расходов на этот системный вызов, я думаю, что можно написать ядро модуль так, что, например, в вызове ioctl я могу изменить таблицу страниц процесса, чтобы сопоставить страницы физического устройства страницам пользовательского пространства и избежать системного вызова.

Не могли бы вы дать мне какую-нибудь ориентировку по этому вопросу?

Спасибо и с уважением

1 3

1 ответ:

Однако (пожалуйста, поправьте меня, если я ошибаюсь) каждый раз, когда я читаю или пишу отображенную память, требуется системный вызов

Вы ошибаетесь.

Должна быть возможность написать модуль ядра так, чтобы, например, в вызове ioctl я мог изменить таблицу страниц процесса

Именно это и делает mmap ().