android binder機制之–(我是binder)

來源:互聯網
上載者:User
 

(一)什麼是binder

    隨著android行動裝置平台系統的發展,Binder機製得到越來越多人的關注的。什麼是binder,總體上說,Binder是一個輕量級的IPC組件架構,binder是一個分布式的組件架構,它類似於COM和CORBA。一個叫做open-binder的開源項目,在Android的作業系統上的實現後,就成了現在人們在android上看到的binder。

   所以binder不是一個新技術和新想法,Binder在android之前就存在了。它最在開發在BeOS上,後來在Palm OS Cobalt得到產品化。andorid裡的binder基本上binder的作者按照binder最初的設計思想參考Palmsource開放出來的 開源項目openbinder在android裡面重新實現的。

(二)binder機制的特點

Android雖然構建在Linux上面,但是在IPC機制方面,沒有利用Linux提供IPC機制,而是自己實現了一套輕量級的IPC機制——binder機制。binder的如下特性,使得它成為android不可或缺的一部分:

(1) 具有分布式的架構。

(2)面向系統級的開發。

   面向系統層的,而不是面嚮應用層的。openbinder的目標是進程和IPC,而不是面向跨網路通訊。

(3)本身使用C++語言實現。

(4)多線程編程的支援。

   支援多線程編程的各種執行緒模式。不強制使用特定的執行緒模式。

(5) 可支援多作業系統平台。

   從BeOS開始, 到Windows和Palm OS Cobalt,再到android。binder都是可以在這些不同平台實現和使用的。binder使用一些組件和對象來呈現一些基本的系統服務,比如進程和共用記憶體。它沒有試圖取代和隱藏作業系統中那些傳統的概念,而是擁抱和超越它們。這使得binder可以支援大多數的傳統作業系統平台。

(6)良好的硬體伸縮性。

   對硬體要求很低。從50MHz ARM 7 CPU (without memory protection) 到 400MHz ARM 9 CPU,以及更強大的CPU。

(7). 使用者可定製性高。

   作為IPC的機制實現,串聯了系統裡的大部分組件,並且將各個組件之間的耦合行降到最低。各個組件的可以自由修改和替換,提高了使用者的可定製性。

(8)Binder對硬體要求很低,這正好符合android的實際情況,android的產品線廣泛,晶片主頻各個層次的都有,要在低端的機器上跑的順暢,軟體本身的效能要求還是很重要。

(三)binder應用程式模型

    一個IPC通訊我們可以簡單理解成用戶端-伺服器模式,用戶端請求服務,服務端接收到用戶端請求後處理相應,或可能帶回結果返回給用戶端。binder機制在android系統的進程間通訊模型總結如下:

(1)用戶端通過某種方式得到伺服器端的代理對象。從用戶端角度看來代理對象和他的本機物件沒有什麼差別。它可以像其他本機物件一樣調用其方法,訪問其變數。

(2)用戶端通過調用代理對象的方法向伺服器端發送請求資訊。

(3)代理對象通過binder裝置節點(/dev/binder),把使用者請求資訊發送到Linux核心空間(實際上是記憶體共用),由Binder驅動擷取並發送到服務進程。

(4)服務進程處理使用者請求,並通過Linux核心的Binder驅動返回處理結果給用戶端的代理對象。

(5)用戶端收到服務端的返回結果。

    整個過程大致如上所述,可以想象一下bingder機制的引入,給進程間的通訊帶來什麼好處?沒錯,就是“線程遷移”,就像是一個線程帶著參數,進入另一個進程執行,然後帶著結果返回,和調用自己的函數一樣的效果。

本文暫不對binder機制的細節進行描述,在後續文章中會有對binder機制進行詳細分析。這裡我們先來看看binder機制的架構組成。

(四)Binder機制的組成

(1)Binder驅動

    binder是核心中的一個字元驅動裝置位於/dev/binder。這個裝置是Android系統IPC的核心部分,用戶端的服務代理用來通過它向伺服器(server)發送請求,伺服器也是通過它把處理結果返回給用戶端的服務代理對象。這部分內容,在Android中通過一個IPCThreadState對象封裝了對Binder驅動的操作。

(2)Service Manager

    這個東西主要用來負責管理服務。Android中提供的系統服務都要通過Service Manager註冊自己,將自己添加進服務管理鏈表中,為用戶端提供服務。而用戶端如果要和特定的系統服務端通訊,就需要向Service Manager來查詢和獲得所需要服務。可以看出Service Manager是系統服務物件的管理中心。

(3)服務(Server)

    需要強調的是這裡服務是指的是System Server,而不是SDK server,向用戶端提供服務。

(4)用戶端

    一般是指Android系統上面的應用程式。它可以請求Server中的服務。

(5)代理對象

是指在用戶端應用程式中擷取產生的Server代理(proxy)類對象。從應用程式角度看代理對象和本機物件沒有差別,都可以調用其方法,方法都是同步的,並且返回相應的結果。

    binder機制的實現使用C/C++實現的,但在android的應用程式中,也會有java部分的內容。下面會介紹binder機制中的“服務管家”--service manager。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.