LINUX.ORG.RU

erlangio — proof of technology обмен данными между модулем ядра Linux и виртуальной машиной Erlang

 , ,


0

1

Доброго времени суток, коллеги.

В рамках курсовой работы по курсу «Операционные системы» в МИЭМ НИУ ВШЭ, я реализовал однонаправленный механизм взаимодействия между драйвером ядра Linux и приложением на Erlang/OTP: https://github.com/MIEMHSE/erlangio.

Механизм представляет из себя следующее: драйвер при загрузке создает два устройства (одно символьное misc, а второе — файл в procfs). При записи в /dev/erlangio данные сохраняются в массив, а затем отдаются при чтении /dev/erlangio или /proc/erlangio. Приложение на Erlang/OTP при запуске создает callback на действие закрытия файла по записи с помощью механизма inotify. При вызове callback'а, данные читаются из /proc/erlangio. Почему нельзя было обойтись одним misc-устройством? Потому что при попытке открытия устройства из /dev/ с использованием операции file:open/2, возвращается eisdir. По причине странной работы с файлами, из procfs приходится читать файл небольшим костылем.

И вот, собственно, вопрос. Пытаясь изначально реализовать обмен не через procfs или сокеты (а, допустим, с помощью mmap), столкнулся с тем, что не смог найти вменяемого IPC между, собственно, ядром и юзерспейсом, если не считать kdbus (оно уже в ядре?). Может кто подскажет чего-нибудь путного почитать на эту тему?

Спасибо.


Ответ на: комментарий от BuG2BuG

Где ты узнал, что kdbus - это средство обмена между ядром и юзерспейсом, а не между юзерспейсом и юзерспейсом?

Полагаю, что

Ясно.

Иначе зачем выносить в ядро то, что NIEPLOHO работает в юзерспейсе?

Средства для реализации передачи данных без лишнего копирования есть только в ядре.

В общем, рекомендованный способ обмена между ядром и юзерспейсом - netlink. Дальше уж решай сам.

tailgunner ★★★★★
()
Последнее исправление: tailgunner (всего исправлений: 1)
Ответ на: комментарий от tailgunner

В общем, рекомендованный способ обмена между ядром и юзерспейсом - netlink. Дальше уж решай сам.

Добро! Спасибо.

BuG2BuG
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.