D-Bus — система міжпроцесної комунікації, яка дозволяє застосункам в операційній системі спілкуватися один з одним.
Тип | IPC |
---|---|
Розробник | Freedesktop.org |
Стабільний випуск | 1.14.0 (28 лютого 2022 ) |
Операційна система | багатоплатформовий |
Мова програмування | C |
Ліцензія | GPL 2+ або [en] 2.1 |
Репозиторій | gitlab.freedesktop.org/dbus/dbus.git |
Вебсайт | www.freedesktop.org |
D-Bus є частиною проєкту freedesktop.org. Вона має високу швидкість роботи, не залежить від робочого середовища, працює на POSIX-сумісних операційних системах. Також існує версія для Windows (поки що на стадії розробки). Складається з двох частин: демона і низькорівневого API. Існують високорівневі бібліотеки для фреймворків Qt, Java, GLib, C#, Python і бібліотека для .
Передумови створення
Програми одного середовища робочого столу можуть тісно взаємодіяти між собою. У графічному середовищі KDE для цього не так давно використовувався , але інші настільні середовища (наприклад, GNOME) не мали аналогічних систем.
Існувала можливість комунікації у вигляді CORBA, SOAP або XML-RPC, але CORBA використовує велику кількість ресурсів (KDE і GNOME пройшли етап його використання за час свого існування), а SOAP і XML-RPC призначені для вебсервісів.
Раніше GNOME використовував , заснований на CORBA, але через залежність від , не використовувався в інших робочих середовищах, а низька швидкодія CORBA позначалося на швидкості всього середовища.
Потрібно було організувати обмін повідомленнями між застосунками двох різних середовищ. Для вирішення цього завдання і був створений проєкт D-Bus. Реалізація виявилася вдалою і згодом було вирішено проєкт KDE 4 перевести на використання D-Bus.
Принципи роботи
D-Bus надає системі декілька шин:
- Системна шина. Створюється при старті демона D-BUS. З її допомогою відбувається спілкування різних демонів, вона практично недоступна для застосунків користувача.
- Сесійна шина. Створюється для користувача, авторизованого в системі. Для кожної такої шини запускається окрема копія демона, за допомогою неї будуть спілкуватися програми, з якими працює користувач.
Кожне повідомлення D-BUS, передане по шині, має свого відправника і свого одержувача, їхні адреси називаються шляхами об'єктів, оскільки D-BUS припускає, що кожен застосунок складається з набору об'єктів, а повідомлення пересилаються не між застосунками, а між об'єктами цих самих застосунків.
Кожен об'єкт може підтримувати один або більше інтерфейсів, які представлені тут у вигляді іменованих груп методів і сигналів — аналогічно інтерфейсам Glib, Qt або Java.
D-BUS також передбачає концепцію сервісів. Сервіс — унікальне місце розташування застосунків на шині. При запуску програма реєструє один або кілька сервісів, якими вона буде володіти доти, поки самостійно не звільнить. До цього моменту жоден застосунок, що претендує на той же сервіс, зайняти його не зможе. Іменуються сервіси аналогічно інтерфейсам.
Сервіси роблять доступною ще одну функцію — запуск необхідних програм у разі надходження до них повідомлень. Для цього повинна бути включена автоактивація, а в конфігурації D-BUS за цим сервісом має бути закріпленим один застосунок. Тоді D-BUS зможе його запустити при появі повідомлення.
Після закриття програми асоційовані сервіси також реконструюються, а D-BUS посилає сигнал про те, що сервіс закритий. Інші програми можуть отримувати такі сигнали і відповідним чином реагувати.
Після підключення до шини застосунок повинен вказати, які повідомлення він бажає отримувати, шляхом додавання масок збігів (matchers). Маски є наборами правил для повідомлень, які будуть доставлятися застосунком, фільтрація може ґрунтуватися на інтерфейсах, шляхах об'єктів і методах. Таким чином, застосунки будуть отримувати лише те, що їм необхідно, проблеми доставки в цьому випадку бере на себе D-BUS.
Повідомлення в D-BUS бувають чотирьох видів: виклики методів, результати викликів методів, сигнали і помилки. Перші призначені для виконання методів над об'єктами, підключеними до D-BUS. Посилаючи таке повідомлення, ви даєте об'єкту завдання, а після його обробки він зобов'язаний повернути вам або результат виклику, або помилку — через повідомлення відповідних типів. Сигнальні повідомлення, як і належить, не беруть до уваги дії об'єктів, оскільки ті можуть сприймати їх як завгодно (або ж не отримувати взагалі).
Щоб повідомлення досягло певного об'єкту, потрібен спосіб послатися на об'єкт. У багатьох мовах програмування це реалізується за допомогою вказівників. Однак вони реалізуються як адреси пам'яті, прив'язані до локального адресного простору програми, і не можуть бути передані від одного застосунку іншому.
Тому в D-Bus кожен об'єкт має своє, унікальне ім'я, яке виглядає як шлях у файловій системі. Наприклад, об'єкт може бути іменований /org/kde/kspread/sheets/3/cells/4/5. Звичайно, найкращими є ті імена, які несуть якесь смислове навантаження, тим не менш, розробники можуть вибрати і таке /com/mycompany/c5yo817y0c1y1c5b, якщо в цьому є певний сенс.
Імена об'єктів лежать у просторах імен, щоб забезпечити розмежування різних програмних модулів. До них зазвичай додається префікс, специфічний для розробника, наприклад /org/kde.
kdbus: реалізація на рівні ядра
З 2010 року зусиллями компанії і Грега Кроа-Гартмана (Greg Kroah-Hartman), одного з провідних мейнтейнерів ядра Лінукс, розробляється kdbus — надійна, швидка і безпечна система обміну повідомленнями, що підтримує доставку повідомлень як в мультикаст-режимі (від одного відправника до групи одержувачів), так і в режимі точка-точка. Kdbus може використовуватися як відокремлено, наприклад, ця система вже підтримується у systemd, так і для створення реалізації D-Bus, що не вимагає запуску окремого демона в просторі користувача.
З основних переваг реалізації шини kdbus на рівні ядра зазначається:
- Висока продуктивність за рахунок мінімізації перемикання контексту процесів, меншого виконання операцій копіювання, скорочення системних викликів, використання ;
- Висока безпека через виключення впливу користувацьких процесів на вміст шини і використання механізмів ядра для управління передачею даних, у тому числі з можливістю контролю з боку модулів LSM;
- До повідомлень може бути прикріплено більше метаданих;
- Придатність для застосунків, що обробляють великі потоки даних, з можливістю розстановки повідомлень в черзі на підставі пріоритетів та завдання глобального впорядкування повідомлень. Наприклад, деякі розробники знайшли застосування в kdbus навіть для передачі звуку в системі;
- Несхильність багатьом станам гонитви, які важко усунути в реалізації на рівні користувача. Наприклад, ситуація від'єднання клієнта від шини тільки за умови відсутності повідомлень у його черзі;
- Можливість моніторингу на рівні ядра. Привілейовані користувачі можуть підключити до потоку повідомлень без створення спеціалізованих механізмів у просторі користувача;
- Можливість прямої доставки повідомлення без постановки у чергу, що зручно при організації обробки запитів активації по шині;
- Можливість раннього доступу до шини, на етапі виконання .
Дивись також
Примітки
- dbus 1.14.2. 10 листопада 2014. оригіналу за 28 лютого 2022. Процитовано 24 листопада 2014.
- . Архів оригіналу за 29 листопада 2014. Процитовано 24 листопада 2014.
- . Архів оригіналу за 29 листопада 2014. Процитовано 24 листопада 2014.
- initrd
Джерело
- Роман Хімов. Посередник D-BUS [ 23 грудня 2010 у Wayback Machine.] / / Chip Special Linux
Посилання
- Офіційний сайт [ 22 вересня 2004 у Wayback Machine.] (англ.)
- Керівництво по використанню [ 28 серпня 2015 у Wayback Machine.] (англ.)
- . З прикладами.
- Стаття в журналі Linux Format [ 23 квітня 2011 у Wayback Machine.].
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
D Bus sistema mizhprocesnoyi komunikaciyi yaka dozvolyaye zastosunkam v operacijnij sistemi spilkuvatisya odin z odnim D BusTipIPCRozrobnikFreedesktop orgStabilnij vipusk1 14 0 28 lyutogo 2022 2 roki tomu 2022 02 28 Operacijna sistemabagatoplatformovijMova programuvannyaCLicenziyaGPL 2 abo en 2 1Repozitorijgitlab freedesktop org dbus dbus gitVebsajtwww freedesktop org D Bus ye chastinoyu proyektu freedesktop org Vona maye visoku shvidkist roboti ne zalezhit vid robochogo seredovisha pracyuye na POSIX sumisnih operacijnih sistemah Takozh isnuye versiya dlya Windows poki sho na stadiyi rozrobki Skladayetsya z dvoh chastin demona i nizkorivnevogo API Isnuyut visokorivnevi biblioteki dlya frejmvorkiv Qt Java GLib C Python i biblioteka dlya C Peredumovi stvorennyaProgrami odnogo seredovisha robochogo stolu mozhut tisno vzayemodiyati mizh soboyu U grafichnomu seredovishi KDE dlya cogo ne tak davno vikoristovuvavsya ale inshi nastilni seredovisha napriklad GNOME ne mali analogichnih sistem Isnuvala mozhlivist komunikaciyi u viglyadi CORBA SOAP abo XML RPC ale CORBA vikoristovuye veliku kilkist resursiv KDE i GNOME projshli etap jogo vikoristannya za chas svogo isnuvannya a SOAP i XML RPC priznacheni dlya vebservisiv Ranishe GNOME vikoristovuvav zasnovanij na CORBA ale cherez zalezhnist vid ne vikoristovuvavsya v inshih robochih seredovishah a nizka shvidkodiya CORBA poznachalosya na shvidkosti vsogo seredovisha Potribno bulo organizuvati obmin povidomlennyami mizh zastosunkami dvoh riznih seredovish Dlya virishennya cogo zavdannya i buv stvorenij proyekt D Bus Realizaciya viyavilasya vdaloyu i zgodom bulo virisheno proyekt KDE 4 perevesti na vikoristannya D Bus Principi robotiD Bus nadaye sistemi dekilka shin Sistemna shina Stvoryuyetsya pri starti demona D BUS Z yiyi dopomogoyu vidbuvayetsya spilkuvannya riznih demoniv vona praktichno nedostupna dlya zastosunkiv koristuvacha Sesijna shina Stvoryuyetsya dlya koristuvacha avtorizovanogo v sistemi Dlya kozhnoyi takoyi shini zapuskayetsya okrema kopiya demona za dopomogoyu neyi budut spilkuvatisya programi z yakimi pracyuye koristuvach Kozhne povidomlennya D BUS peredane po shini maye svogo vidpravnika i svogo oderzhuvacha yihni adresi nazivayutsya shlyahami ob yektiv oskilki D BUS pripuskaye sho kozhen zastosunok skladayetsya z naboru ob yektiv a povidomlennya peresilayutsya ne mizh zastosunkami a mizh ob yektami cih samih zastosunkiv Kozhen ob yekt mozhe pidtrimuvati odin abo bilshe interfejsiv yaki predstavleni tut u viglyadi imenovanih grup metodiv i signaliv analogichno interfejsam Glib Qt abo Java D BUS takozh peredbachaye koncepciyu servisiv Servis unikalne misce roztashuvannya zastosunkiv na shini Pri zapusku programa reyestruye odin abo kilka servisiv yakimi vona bude voloditi doti poki samostijno ne zvilnit Do cogo momentu zhoden zastosunok sho pretenduye na toj zhe servis zajnyati jogo ne zmozhe Imenuyutsya servisi analogichno interfejsam Servisi roblyat dostupnoyu she odnu funkciyu zapusk neobhidnih program u razi nadhodzhennya do nih povidomlen Dlya cogo povinna buti vklyuchena avtoaktivaciya a v konfiguraciyi D BUS za cim servisom maye buti zakriplenim odin zastosunok Todi D BUS zmozhe jogo zapustiti pri poyavi povidomlennya Pislya zakrittya programi asocijovani servisi takozh rekonstruyuyutsya a D BUS posilaye signal pro te sho servis zakritij Inshi programi mozhut otrimuvati taki signali i vidpovidnim chinom reaguvati Pislya pidklyuchennya do shini zastosunok povinen vkazati yaki povidomlennya vin bazhaye otrimuvati shlyahom dodavannya masok zbigiv matchers Maski ye naborami pravil dlya povidomlen yaki budut dostavlyatisya zastosunkom filtraciya mozhe gruntuvatisya na interfejsah shlyahah ob yektiv i metodah Takim chinom zastosunki budut otrimuvati lishe te sho yim neobhidno problemi dostavki v comu vipadku bere na sebe D BUS Povidomlennya v D BUS buvayut chotiroh vidiv vikliki metodiv rezultati viklikiv metodiv signali i pomilki Pershi priznacheni dlya vikonannya metodiv nad ob yektami pidklyuchenimi do D BUS Posilayuchi take povidomlennya vi dayete ob yektu zavdannya a pislya jogo obrobki vin zobov yazanij povernuti vam abo rezultat vikliku abo pomilku cherez povidomlennya vidpovidnih tipiv Signalni povidomlennya yak i nalezhit ne berut do uvagi diyi ob yektiv oskilki ti mozhut sprijmati yih yak zavgodno abo zh ne otrimuvati vzagali Shob povidomlennya dosyaglo pevnogo ob yektu potriben sposib poslatisya na ob yekt U bagatoh movah programuvannya ce realizuyetsya za dopomogoyu vkazivnikiv Odnak voni realizuyutsya yak adresi pam yati priv yazani do lokalnogo adresnogo prostoru programi i ne mozhut buti peredani vid odnogo zastosunku inshomu Tomu v D Bus kozhen ob yekt maye svoye unikalne im ya yake viglyadaye yak shlyah u fajlovij sistemi Napriklad ob yekt mozhe buti imenovanij org kde kspread sheets 3 cells 4 5 Zvichajno najkrashimi ye ti imena yaki nesut yakes smislove navantazhennya tim ne mensh rozrobniki mozhut vibrati i take com mycompany c5yo817y0c1y1c5b yaksho v comu ye pevnij sens Imena ob yektiv lezhat u prostorah imen shob zabezpechiti rozmezhuvannya riznih programnih moduliv Do nih zazvichaj dodayetsya prefiks specifichnij dlya rozrobnika napriklad org kde kdbus realizaciya na rivni yadraZ 2010 roku zusillyami kompaniyi i Grega Kroa Gartmana Greg Kroah Hartman odnogo z providnih mejntejneriv yadra Linuks rozroblyayetsya kdbus nadijna shvidka i bezpechna sistema obminu povidomlennyami sho pidtrimuye dostavku povidomlen yak v multikast rezhimi vid odnogo vidpravnika do grupi oderzhuvachiv tak i v rezhimi tochka tochka Kdbus mozhe vikoristovuvatisya yak vidokremleno napriklad cya sistema vzhe pidtrimuyetsya u systemd tak i dlya stvorennya realizaciyi D Bus sho ne vimagaye zapusku okremogo demona v prostori koristuvacha Z osnovnih perevag realizaciyi shini kdbus na rivni yadra zaznachayetsya Visoka produktivnist za rahunok minimizaciyi peremikannya kontekstu procesiv menshogo vikonannya operacij kopiyuvannya skorochennya sistemnih viklikiv vikoristannya Visoka bezpeka cherez viklyuchennya vplivu koristuvackih procesiv na vmist shini i vikoristannya mehanizmiv yadra dlya upravlinnya peredacheyu danih u tomu chisli z mozhlivistyu kontrolyu z boku moduliv LSM Do povidomlen mozhe buti prikripleno bilshe metadanih Pridatnist dlya zastosunkiv sho obroblyayut veliki potoki danih z mozhlivistyu rozstanovki povidomlen v cherzi na pidstavi prioritetiv ta zavdannya globalnogo vporyadkuvannya povidomlen Napriklad deyaki rozrobniki znajshli zastosuvannya v kdbus navit dlya peredachi zvuku v sistemi Neshilnist bagatom stanam gonitvi yaki vazhko usunuti v realizaciyi na rivni koristuvacha Napriklad situaciya vid yednannya kliyenta vid shini tilki za umovi vidsutnosti povidomlen u jogo cherzi Mozhlivist monitoringu na rivni yadra Privilejovani koristuvachi mozhut pidklyuchiti do potoku povidomlen bez stvorennya specializovanih mehanizmiv u prostori koristuvacha Mozhlivist pryamoyi dostavki povidomlennya bez postanovki u chergu sho zruchno pri organizaciyi obrobki zapitiv aktivaciyi po shini Mozhlivist rannogo dostupu do shini na etapi vikonannya Divis takozhPortal Vilne programne zabezpechennya HAL XPCOMPrimitkidbus 1 14 2 10 listopada 2014 originalu za 28 lyutogo 2022 Procitovano 24 listopada 2014 Arhiv originalu za 29 listopada 2014 Procitovano 24 listopada 2014 Arhiv originalu za 29 listopada 2014 Procitovano 24 listopada 2014 initrdDzhereloRoman Himov Poserednik D BUS 23 grudnya 2010 u Wayback Machine Chip Special LinuxPosilannyaOficijnij sajt 22 veresnya 2004 u Wayback Machine angl Kerivnictvo po vikoristannyu 28 serpnya 2015 u Wayback Machine angl Z prikladami Stattya v zhurnali Linux Format 23 kvitnya 2011 u Wayback Machine