2018年5月10日 星期四

開放原碼架構設計:D-BUS 觀念小談

原文 http://www.jollen.org/blog/2007/05/talking_d-bus.html
jollen 發表於 May 24, 2007 11:04 AM
近期以來,因為工作上的需求,花費許多時間在開放原碼的架構設計上;最近已經將相關的作業都準備的差不多了,我想,可以跟大家分享一些架構設計的小觀念。
首先,先由 [D-BUS] 介紹起。使用 D-Bus 來取代傳統的 IPC,並與外部工具(eg. mjpegtools)做整合。
D-BUS 本身屬於 low-level 的 library(libdbus),實務上,我採用了 glib binding 來實作程式,以簡化工作:
D-BUS 是一種 'message bus',未來將取代傳統 IPC 的使用。傳統 IPC 實作,必須將程式架構成 monolithic process,因此在 process 的行為控制,以及 application 間的整合上,都很一定的難度,非常不易於實作「系統」。
引進 D-BUS 技術後,傳統的 monolithic process 被區分為「pieces of D-BUS services」,每個服務,都可以透過「D-BUS patch」來尋找並叫用(invoke);透過 D-BUS 所建立的框架(framework)或是架構,解決了以往難以整合各種應用程式的困境。此外,D-BUS 目前也透過 kobject 與 kernel 做整合,如此一來,D-BUS 便能輕易整合 kernel、application 與 desktop,真正解決以往「系統整合」所遇到的障礙。
例如,如何實作「按鍵觸發應用程式」的系統?
傳統的做法,會讓程式設計師進入「不斷使用 low-level C API 來 try-and-error」的可怕輪迴,但是使用 D-BUS 的架構後,我們只要修改 device driver,將按鍵的動作透過 kobject event layer 傳送(經由 netlink socket)給 D-BUS 即可,D-BUS 會根據我們所定義的路徑,來叫用 application。
D-BUS 所提供的 message bus 分為二種:
* system bus
* local bus
System bus 最大的用途便是整合 kernel 與 application;local bus 為 session bus,即訊息的傳遞只限於該 session。

沒有留言: