Android把 System V -IPC 拿掉,改用 Binder。
Binder 是 linux kernel 的一個 driver。user program 利用 /proc/binder 與他溝通。
Android 設計 ServiceManager 這個 program,作為 user program 和 binder 間的介面。
Binder 提供的 IPC 和被拿掉的 System V IPC 不一樣。
Android 好像只有用 Binder 實作出一個 IPC 的功能,就是類似 message的 send-reply。
但是不是任意兩個 process 都可以用 Binder 來作 IPC。
一個要是 Service,一個要是 Client。
Service 向 ServiceManager 註冊一個 Service/Interface, ServiceManager 會幫他把 service name, interface pointer 加到 Binder 的資料裡。
Client 向 ServiceManager 要求取得 XXX service (以 service name 為參數)。
ServiceManager 就會由 Binder 找出對應的 Service interface 給 Client。
然後 Client 就可以利用這個 interface 對 Service send msg.
這個 Interface prototype 是固定的,所以就像 IOControl 一樣, interface 的第一個 argument 是 function code,後面是 sendmsg (client to server), 再來是 reply (server reply to client)。
所以 service 在作這個 interface 的時候,就像 IoControl 一樣,依照 function code 對 sendmsg, replymsg 作不同的處置。
有點麻煩..
沒有留言:
張貼留言