Binder機制的一些小感悟

2021-08-20 11:38:17 字數 835 閱讀 9862

在這裡針對看到的這些介紹寫一些自己的理解,以便加深下記憶。

而這三種跨程序通訊的模式大致相同,都是採用的cs結構的通訊,而對於android為什麼採用binder作為其底層的程序間通訊?因為沒有研究過這三種跨程序通訊的源**,不知其內部的執行原理,也就不誤導別人了。

如我們前面所述,binder機制也是採用的cs結構,有乙個client,乙個server,中間通過某種協議將他們進行連線,而這個協議的實現就是binder驅動及servicemanager。

假如我們寫乙個應用程式需要進行程序間通訊,那麼我們就要首先確定乙個server,這個server為我們提供我們想要完成的功能,並且這個server要提供乙個位址,以便client知道怎麼去訪問它(也就是對應的介面描述符),server把自己註冊到binder驅動,binder驅動告知servicemanager有乙個叫什麼的(介面描述符)可以提供服務,如果有其他程序需要這個叫什麼的(介面描述符),那你就給那個程序乙個該服務的**,讓那個程序通過**來獲取對應的服務。client通過binder驅動從servicemanager獲取到server的**,通過transact方法將需要的請求,及期待拿回結果的資料物件傳給server,server得到client的資料報後,解包並根據client的要求,進行資料處理,處理結束後將資料寫到結果的資料物件中,binder驅動喚醒client執行緒讀取結果,完成一次跨程序通訊。

對於上面servicemanager為什麼只給乙個**,而不直接把對應的binder給該程序呢?

個人感覺這裡主要是為了安全的考慮,防止每個呼叫的程序都占用該binder然後對該binder程序操作,造成資料的不一致。

以上是個人的一些小理解,未來有更深入的學習,再繼續更新,歡迎討論

Android中的binder機制

binder 使用client server 的通訊方式 乙個程序作為 server client 向server 傳送服務請求,獲得所需要的服務。對於 binder 而言,binder 可以看成是 server 提供的實現某乙個特定服務的訪問接入點,client 可以通過這個 位址 向 serve...

binder的機制和原理

binder的作用 binder是實現不同程序之間的通訊。binder的意義 binder是乙個驅動,工作在linux層面,並且是在核心中執行。它的操作完成是基於一段記憶體。所以程式中對binder的使用都是通過系統的呼叫完成的。binder的組成 server端 client端 binder驅動端...

binder傳遞fd的機制

程序獲得的fd是程序fd table中的index,在fd table中記錄了file指標,file物件保留在kernel空間中.因此不同程序間傳遞fd本身並沒有什麼意義.binder通過parcel傳遞fd的本質,是將源程序的fd table中對應項指標,記錄到target程序的fd table中...