Для ядра Linux вместо kdbus предложен механизм межпроцессных коммуникаций Bus1

В списке рассылки разработчиков ядра Linux предложена для обсуждения реализация новой системы межпроцессных коммуникаций Bus1, пришедшей на смену шине kdbus, которую в своё время не удалось продвинуть в основной состав ядра. Bus1 разработан с нуля и концептуально ближе к IPC-маханизмам Android Binder, Cap’n Proto, Mojo и seL4, чем к kdbus. Bus1 реализован в виде универсального модуля для ядра Linux, не требующего наличия каких-либо обязательных компонентов в пространстве пользователя. Код Bus1 распространяется под лицензией LGPLv2.1+.

Bus1 предоставляет объектно-ориентированный IPC-интерфейс для организации обмена данными между процессами (пирами), сочетающий легковесность и масштабируемость организации совместной работы с такими возможностями, как модульность, разделение привилегий, учёт ресурсов, изоляция и сокрытие информации. Работа с объектами реализована через легковесные дескрипторы. Поддерживается доставка данных как в режиме точка-точка, так и в режиме мультикаст (от одного отправителя к группе получателей) с гарантированным сохранением порядка следования данных. На базе Bus1 в пространстве пользователя могут быть реализованы различные UAPI для обмена сообщениями, включая Binder UAPI.

Bus1 работает децентрализовано и только в локальных контекстах, не предоставляя общего глобального состояния совместного доступа или глобальных блокировок. Ключевыми примитивами в Bus1 являются узлы и дескрипторы: узлы представляют объекты локальных пиров, а дескриптор выполняет роль указателя на узел. Узлы могут создаваться любым пиром, всегда оставаясь закреплёнными за своим создателем. Дескрипторы, ссылающиеся на узлы, могут передаваться с прикреплением сообщений в качестве вспомогательных данных. После доставки дескриптора, на стороне получателя создаётся его копия, которая указывает на тот же узел, что и оригинальный дескриптор.

Любой пир может отправлять сообщения через один из своих дескрипторов, которые будут направлены владельцу связанного с дескриптором узла. Если пир не предоставил дескриптор, то сообщение заданному узлу отправить невозможно. Дескриптор в данном случае выступает в роли механизма для предоставления эксклюзивного доступа, при этом доступ можно делегировать другим пирам просто передавая дескриптор. Права доступа не отзываются, но владелец узла в любой момент может его удалить и разрушить таким образом все привязанные дескрипторы. Пиры не могут адресоваться напрямую, полностью отделены и могут взаимодействовать с другими пирами только через узлы и дескрипторы. Со стороны все узлы равнозначны и невозможно определить принадлежат узлы одному пиру или разным.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.