Inter-process communication of Android Tetsuyuki Kobayashi 2011.6.3  updated
Who am I? 20+ years involved in embedded systems 10 years in real time OS, such as iTRON
10 years in embedded Java Virtual Machine
Now GCC, Linux, QEMU, Android, … Blogs http://d.hatena.ne.jp/embedded/  (Personal)
http://blog.kmckk.com/  (Corporate)
http://kobablog.wordpress.com/ (English) Twitter @tetsu_koba new
Today's topic Inter process communications in Android
Inter process method invocation using Binder
Ashmem
System Properties
Processes running on Android $ ps ... root  37  1  248  156  c00aef2c 0000875c S /sbin/ueventd system  42  1  768  260  c022950c afd0b6fc S /system/bin/servicemanager root  43  1  3824  564  ffffffff afd0bdac S /system/bin/vold root  44  1  3796  560  ffffffff afd0bdac S /system/bin/netd root  45  1  628  264  c02588c0 afd0c0cc S /system/bin/debuggerd radio  46  1  4336  672  ffffffff afd0bdac S /system/bin/rild root  47  1  62224  27576 c00aef2c afd0b844 S zygote media  48  1  16828  3736  ffffffff afd0b6fc S /system/bin/mediaserver bluetooth 49  1  1216  572  c00aef2c afd0c59c S /system/bin/dbus-daemon root  50  1  776  316  c02a8424 afd0b45c S /system/bin/installd keystore  51  1  1704  432  c02588c0 afd0c0cc S /system/bin/keystore shell  52  1  696  336  c0050934 afd0c3ac S /system/bin/sh root  53  1  3356  160  ffffffff 00008294 S /sbin/adbd system  67  47  172464 32596 ffffffff afd0b6fc S system_server system  115  47  80028  20728 ffffffff afd0c51c S com.android.systemui app_24  124  47  80732  20720 ffffffff afd0c51c S com.android.inputmethod.latin radio  135  47  87848  20324 ffffffff afd0c51c S com.android.phone app_18  144  47  89136  24160 ffffffff afd0c51c S com.android.launcher app_7  165  47  86136  22736 ffffffff afd0c51c S android.process.acore app_0  197  47  73996  17472 ffffffff afd0c51c S com.android.deskclock app_14  208  47  75000  18464 ffffffff afd0c51c S android.process.media app_3  219  47  72228  17652 ffffffff afd0c51c S com.android.bluetooth app_25  234  47  85336  17836 ffffffff afd0c51c S com.android.mms app_26  254  47  74656  19080 ffffffff afd0c51c S com.android.email app_27  266  47  74912  18100 ffffffff afd0c51c S com.android.providers.calendar app_1  285  47  71616  16280 ffffffff afd0c51c S com.android.protips app_19  293  47  72184  16572 ffffffff afd0c51c S com.android.music app_21  301  47  74728  17208 ffffffff afd0c51c S com.android.quicksearchbox app_28  311  47  75408  18040 ffffffff afd0c51c S com.cooliris.media shell  323  52  856  316  00000000 afd0b45c R ps $ More than 30 processes (200+ threads).
Kernel Inter Process Communication
Abstraction of Inter Process Communication Binder AIDL Intent More abstract
Inter Process Communication of Android Intent The highest level abstraction Inter process method invocation AIDL: Android Interface Definition Language binder kernel driver ashmem shared memory
Intent (1) The highest level abstraction IPC in Android
Requests are queued and handled sequentially.
Powerful enough between applications
Implemented using inter process method invocation
Intent (2) Loosely coupling The sender need not choose the receiver
The sender can specify ”action”. Then proper receiver is chosen and handles it. VIEW + http://... -> Browser opens the url.
VIEW + geo:0,0?q=Tokyo -> Map app shows a map of Tokyo.
CALL + tel:01234567 -> Phone app dials the number.
Inter process method invocation used for system services
needs multi-thread programming
wrapped by AIDL to hide complexity
implemented using binder
Invoking method via interface In the same process
Inter-process invocation interface interface interface How?
Inter-process invocation Binder Thread interface interface interface
android.os.Parcel ” flatten” ” unflatten” transmit Delivering arguments of method
Describing in UML ... implements

Inter-process communication of Android

  • 1.
    Inter-process communication ofAndroid Tetsuyuki Kobayashi 2011.6.3 updated
  • 2.
    Who am I?20+ years involved in embedded systems 10 years in real time OS, such as iTRON
  • 3.
    10 years inembedded Java Virtual Machine
  • 4.
    Now GCC, Linux,QEMU, Android, … Blogs http://d.hatena.ne.jp/embedded/ (Personal)
  • 5.
  • 6.
  • 7.
    Today's topic Interprocess communications in Android
  • 8.
    Inter process methodinvocation using Binder
  • 9.
  • 10.
  • 11.
    Processes running onAndroid $ ps ... root 37 1 248 156 c00aef2c 0000875c S /sbin/ueventd system 42 1 768 260 c022950c afd0b6fc S /system/bin/servicemanager root 43 1 3824 564 ffffffff afd0bdac S /system/bin/vold root 44 1 3796 560 ffffffff afd0bdac S /system/bin/netd root 45 1 628 264 c02588c0 afd0c0cc S /system/bin/debuggerd radio 46 1 4336 672 ffffffff afd0bdac S /system/bin/rild root 47 1 62224 27576 c00aef2c afd0b844 S zygote media 48 1 16828 3736 ffffffff afd0b6fc S /system/bin/mediaserver bluetooth 49 1 1216 572 c00aef2c afd0c59c S /system/bin/dbus-daemon root 50 1 776 316 c02a8424 afd0b45c S /system/bin/installd keystore 51 1 1704 432 c02588c0 afd0c0cc S /system/bin/keystore shell 52 1 696 336 c0050934 afd0c3ac S /system/bin/sh root 53 1 3356 160 ffffffff 00008294 S /sbin/adbd system 67 47 172464 32596 ffffffff afd0b6fc S system_server system 115 47 80028 20728 ffffffff afd0c51c S com.android.systemui app_24 124 47 80732 20720 ffffffff afd0c51c S com.android.inputmethod.latin radio 135 47 87848 20324 ffffffff afd0c51c S com.android.phone app_18 144 47 89136 24160 ffffffff afd0c51c S com.android.launcher app_7 165 47 86136 22736 ffffffff afd0c51c S android.process.acore app_0 197 47 73996 17472 ffffffff afd0c51c S com.android.deskclock app_14 208 47 75000 18464 ffffffff afd0c51c S android.process.media app_3 219 47 72228 17652 ffffffff afd0c51c S com.android.bluetooth app_25 234 47 85336 17836 ffffffff afd0c51c S com.android.mms app_26 254 47 74656 19080 ffffffff afd0c51c S com.android.email app_27 266 47 74912 18100 ffffffff afd0c51c S com.android.providers.calendar app_1 285 47 71616 16280 ffffffff afd0c51c S com.android.protips app_19 293 47 72184 16572 ffffffff afd0c51c S com.android.music app_21 301 47 74728 17208 ffffffff afd0c51c S com.android.quicksearchbox app_28 311 47 75408 18040 ffffffff afd0c51c S com.cooliris.media shell 323 52 856 316 00000000 afd0b45c R ps $ More than 30 processes (200+ threads).
  • 12.
    Kernel Inter ProcessCommunication
  • 13.
    Abstraction of InterProcess Communication Binder AIDL Intent More abstract
  • 14.
    Inter Process Communicationof Android Intent The highest level abstraction Inter process method invocation AIDL: Android Interface Definition Language binder kernel driver ashmem shared memory
  • 15.
    Intent (1) Thehighest level abstraction IPC in Android
  • 16.
    Requests are queuedand handled sequentially.
  • 17.
  • 18.
    Implemented using interprocess method invocation
  • 19.
    Intent (2) Looselycoupling The sender need not choose the receiver
  • 20.
    The sender canspecify ”action”. Then proper receiver is chosen and handles it. VIEW + http://... -> Browser opens the url.
  • 21.
    VIEW + geo:0,0?q=Tokyo-> Map app shows a map of Tokyo.
  • 22.
    CALL + tel:01234567-> Phone app dials the number.
  • 23.
    Inter process methodinvocation used for system services
  • 24.
  • 25.
    wrapped by AIDLto hide complexity
  • 26.
  • 27.
    Invoking method viainterface In the same process
  • 28.
    Inter-process invocation interfaceinterface interface How?
  • 29.
    Inter-process invocation BinderThread interface interface interface
  • 30.
    android.os.Parcel ” flatten”” unflatten” transmit Delivering arguments of method
  • 31.
    Describing in UML... implements
  • 32.
    Describing in UML... calls implements extends
  • 33.
    AIDL Auto generatedfrom .aidl file
  • 34.
    Kernel Use case:Who calls ”onPause” in Activity? Activity queue 3:”onPause” is called in main thread 1:Call ”schedulePauseActivity” across process 2:Send message by Handler
  • 35.
  • 36.
    Not for generalpurpose. Tuned for specific transaction.
  • 37.
    Multi-thread aware Haveinternal status per thead
  • 38.
    (CF. Socket haveinternal status per fd.)
  • 39.
    Comparing binder withsocket socket binder internal status associated to FD associated to PID (FD can be shared among threads in the same process) read & write operation as a stream done at once by ”ioctl” network transparency Yes No expects local only
  • 40.
    Transaction of Binder(1) if ( ioctl (fd, BINDER_WRITE_READ, &bwt ) >= 0) err = NO_ERROR; else err = -errno; write_size write_consumed write_buffer read_size read_consumed read_buffer binder_write_read
  • 41.
    Transaction of Binder(2) Process A Process B Binder Process A Binder Process B Copy memory by copy_from _user Copy memory by copy_to_user Then, wake up process B Process A and B have different memory space. They can not see each other. Kernel Kernel
  • 42.
    Ashmem Android /Anonymous SHared MEMory subsystem $(ANDROID_TOP)/system/core/cutils/ashmem.h int ashmem_create_region(const char *name, size_t size) -> returns fd
  • 43.
  • 44.
    int ashmem_pin_region(int fd,size_t offset, size_t len)
  • 45.
    int ashmem_unpin_region(int fd,size_t offset, size_t len) kernel reclaim not ‘pin’ ed memory
  • 46.
    Similar to weakreference of Java. useful to implement cache.
  • 47.
  • 48.
    System Properties ofAndroid 'Key-Value store' type data base for basic system information.
  • 49.
    Shared among allprocesses.
  • 50.
    Init process hasthe master data.
  • 51.
    The other processeshave read-only copy.
  • 52.
    Init process handleswrite request to the master data.
  • 53.
    implemented using ashmembefore Gingerbread.
  • 54.
    At Gingerbread changednot to use ashmem.
  • 55.
    Example of SystemProperties ... [ro.bt.bdaddr_path]: [/sys/module/board_mahimahi/parameters/bdaddr] [ro.ril.def.agps.mode]: [2] [ro.ril.fast.dormancy.rule]: [1] [ro.ril.fd.scron.timeout]: [4] [ro.ril.fd.scroff.timeout]: [3] [ro.ril.gprsclass]: [10] [init.svc.adbd]: [running] [ril.reload.count]: [1] [init.svc.bootanim]: [stopped] [hw.keyboards.0.devname]: [mahimahi-keypad] [hw.keyboards.65537.devname]: [mahimahi-keypad] [hw.keyboards.131075.devname]: [h2w headset] [net.hostname]: [android_200142d4dfd0d25c] [dev.bootcomplete]: [1] [gsm.version.ril-impl]: [HTC-RIL 2.2.1001G (Jul 16 2010,21:52:13)] [gsm.sim.operator.numeric]: [] [gsm.sim.operator.alpha]: [] [gsm.sim.operator.iso-country]: [] [gsm.sim.state]: [ABSENT] [gsm.current.phone-type]: [1] [wlan.driver.status]: [ok] [init.svc.wpa_supplicant]: [running] ...
  • 56.
    Special Key ofSystem Properties Starts from ”ro.” is read-only.
  • 57.
    ” ctl.start” / ”ctl.stop” is command to start/stop the service. property_set("ctl.stop", "bootanim"); stops boot animation service Starts from ”init.svc.” shows the state of the service.
  • 58.
    Reading System PropertyKernel init Other processes /dev/__properties__ (on tmpfs) mmap (read/write) mmap (read only) Just read the property in each process.
  • 59.
    Writing System PropertyKernel init Other processes /dev/__properties__ (on tmpfs) mmap (read/write) mmap (read only) Send write request to init through socket
  • 60.
    Actual code ofinitialize System Properties fd = open (&quot;/dev/__properties__&quot;, O_RDWR | O_CREAT, 0600); if (fd < 0) return -1; if ( ftruncate (fd, size) < 0) goto out; data = mmap (NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); if(data == MAP_FAILED) goto out; close (fd); fd = open (&quot;/dev/__properties__&quot;, O_RDONLY); if (fd < 0) return -1; unlink (&quot;/dev/__properties__&quot;); $(ANDROID_TOP)/system/core/init/property_service.c Give this fd to other processes. No longer access by file name. /dev is a tmpfs
  • 61.
    Resources 3 rd session of Yokohama Android Platform club http://www.yokohama.android-pf.org/study/dai-san-kai-benkyou-kai 1 st session of Android SDK work group http://www.android-group.jp/index.php?%CA%D9%B6%AF%B2%F1%2FAndroid ... KMC blog http://blog.kmckk.com/archives/3611344.html
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
    Q&A and demohttp://www.kmckk.co.jp/eng/kzma9/ http://www.kmckk.co.jp/eng/jet_index.html