今天為一家國際手機廠進行 Android 底層相關的內訓,課堂中提到一個概念,就是基於 Android 的 SystemServer 架構,可以藉由「架構面」改善過去 Linux 驅動程式在 Rentrant Code 議題面的程式碼模式。藉由模式的調整,可改善程式碼的效率。
過去,多個 Process 同時(Concurrency)存取同一份 Linux 驅動程式時,若驅動程式進行 Re-scheduling 操作,驅動程式的 Driver Method 就會重覆進入,因此需要考量做同步控制。
若是藉由 SystemServer 的架構,也就是「Single Process 存取驅動程式」,就能簡化重覆進入的議題。如下圖所示。
這是一個很簡單的模型,在 Middleware 層面,透過「限制應用程式的模式」來達到簡化重覆進入的議題。以 Android 作業系統為例,SystemServer 可以扮演這個「Single Process」的角色。當然,也可以設計成一個獨立的「My SystemServer」,根據對問題的分析來決定要修改 SystemServer,或是建立 My SystemServer。
對應用程式來說,只需要透過 IPC 與 SystemServer 溝通即可。當 SystemServer 需要交付資料(Data)給應用程式(Clients)時,可以採取下列二種方式:
1. Message & Handler
2. 註冊 Listener、由 SystemServer Callback
目前,正在進行「Android HAL & Framework:軟硬整合實作訓練」課程的第三次修訂,將會加入這個主題,以實例介紹 Android 框架如何影響 Linux 驅動程式的程式碼寫作風格,希望能在驅動程式的程式碼優化方面進行討論。
Jollen's Blog 使用 Github issues 與讀者交流討論。請點擊上方的文章專屬 issue,或 open a new issue
您可透過電子郵件 jollen@jollen.org,或是 Linkedin 與我連絡。更歡迎使用微信,請搜尋 WeChat ID:jollentw