DBus是一種IPC機制,由freedesktop.org項目提供,使用GPL許可證發行,用於進程間通信或進程與內核的通信。
注:Linux中的IPC通信機制還包括,管道(fifo),共享內存,信號量,消息隊列,Socket等。
DBus進程間通信主要有三層架構:
1.底層接口層:主要是通過libdbus這個函數庫,給予系統使用DBus的能力。
2.總線層:主要Message bus daemon這個總線守護進程提供的,在Linux系統啟動時運行,負責進程間的消息路由和傳遞,其中包括Linux內核和Linux桌面環境的消息傳遞。總線守護進程可同時與多個應用程序相連,並能把來自一個應用程序的消息路由到0或者多個其他程序。
3.應用封裝層:通過一系列基於特定應用程序框架將DBus的底層接口封裝成友好的Wrapper庫,供不同開發人員使用(DBus官方主頁http://www.freedesktop.org/wiki/Software/dbus,提供了大部分編程語言的DBus庫版本)。比如libdbus-glib, libdbus-python.
如上圖所示,Bus Daemon Process是運行在linux系統中的一個后台守護進程,dbus-daemon運行時會調用libdus的庫。Application Process1代表的就是應用程序進程,通過調用特定的應用程序框架的Wrapper庫與dbus-daemon進行通信。
從上圖也可以看出來Application和Daemon中其實還是通過socket進行通行。
DBus的三大優點:低延遲,低開銷,高可用性。
*低延遲:DBus一開始就是用來設計成避免來回傳遞和允許異步操作的。因此雖然在Application和Daemon之間是通過socket實現的,但是又去掉了socket的循環等待,保證了操作的實時高效。
*低開銷:DBus使用一個二進制的協議,不需要轉化成像XML這樣的文本格式。因為DBus是主要用來機器內部的IPC,而不是為了網絡上的IPC機制而准備的.所以它才能夠在本機內部達到最優效果。
*高可用性:DBus是基於消息機制而不是字節流機制。它能自動管理一大堆困難的IPC問題。同樣的,DBus庫被設計來讓程序員能夠使用他們已經寫好的代碼。而不會讓他們放棄已經寫好的代碼,被迫通過學習新的IPC機制來根據新的IPC特性重寫這些代碼。