1. 程式人生 > >Android基礎相關面試問題-binder面試問題詳解

Android基礎相關面試問題-binder面試問題詳解

面試 連接 跨進程通信 通信機制 識別 man 系統 linu 資源

Linux內核的基礎知識:

  • 進程隔離/虛擬地址空間:在操作系統中為了保護某個進程互不幹擾就設計了一個叫“進程隔離”的技術,防止進程A可以操作進程B的數據。而進程隔離技術用到了虛擬地址空間,進程A的虛擬地址空間跟進程B的虛擬地址空間其實是不同的,而如果進程與進程之間要進行通知則需要某種通信機制才能完成,在android裏面就是binder通信機制。
  • 系統調用:因為系統對內核存在某種保護機制來告訴應用程序你只可能訪問某些許可的資源,不許可的資源是不能被訪問的,也就是把Linux的內核層與應用層抽象隔離,也就是內核層和用戶空間,用戶可以通用系統調用在用戶空間去訪問內核的某些程序。
  • binder驅動:在android系統中它是運行在內核空間當中,它負責各各用戶進程通過binder通信的內核進行交互的一個模塊則為binder驅動。可以通過它來訪問硬件。

Binder通信機制介紹:

  • 為什麽要使用Binder?

    a、Android使用的Linux內核擁有著非常多的跨進程通信機制,如:管道、socket等,那為什麽Android還要特意搞個Binder通信機制呢?主要是以下兩點的考慮:
    b、性能:移動設備中如果廣泛的使用跨進程通信機制肯定會對通信機制提出嚴格的要求,而Binder相比較傳統的進程通信方式更加的高效。
    c、安全:由於傳統進程通信方式沒有對通信的雙方和身方做出嚴格的驗證,只有上層協議才會去架構,如socket連接的IP地址可以人為的偽造。而Binder身份校驗也是android權限模式的基礎。

  • binder通信模式:

    a、電話基站:binder驅動
    b、通信錄:serviceManager
    這裏用一個比較形像的例子來說明上面的通信錄和電話基站在binder通信模型中的作用:A同學要給B同學打電話,首先A同學會去從通訊錄中找到B同學的電話號碼,而serviceManager驅動的角色就相當於這裏說到的通訊錄,存了通信雙方的一些類似電話號碼可以去識別對方的東東,但是找到電話號碼要想打通對方,還需要電話基站的支持,電話基站是用來傳替雙方信號的,所以binder驅動就相當於電話基站。下面用圖來說明:

AIDL:

Android基礎相關面試問題-binder面試問題詳解