Изменение таблицы страниц процесса Linux для доступа к физической памяти без системного вызова
Я разрабатываю приложение реального времени для Linux 3.5.7. Приложение должно управлять устройством PCI-E.
Для доступа к пространствам карт PCI-E я использую mmap в сочетании с /dev / mem. Однако (пожалуйста, поправьте меня, если я ошибаюсь) каждый раз, когда я читаю или записываю отображенную память, требуется системный вызов для псевдодрайвера /dev/mem для обработки доступа к памяти.
Чтобы избежать накладных расходов на этот системный вызов, я думаю, что можно написать ядро модуль так, что, например, в вызове ioctl я могу изменить таблицу страниц процесса, чтобы сопоставить страницы физического устройства страницам пользовательского пространства и избежать системного вызова.
Не могли бы вы дать мне какую-нибудь ориентировку по этому вопросу?
Спасибо и с уважением
1 ответ:
Однако (пожалуйста, поправьте меня, если я ошибаюсь) каждый раз, когда я читаю или пишу отображенную память, требуется системный вызов
Вы ошибаетесь.
Должна быть возможность написать модуль ядра так, чтобы, например, в вызове ioctl я мог изменить таблицу страниц процесса
Именно это и делает mmap ().