Inter-process communication of Android

20,362 views

Published on

Inter-process communication of Android.

Published in: Technology
2 Comments
24 Likes
Statistics
Notes
  • i can successfully download this odp file
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • whenever i want to download a slide d download option is not available,dats why m not able to download it.......?
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total views
20,362
On SlideShare
0
From Embeds
0
Number of Embeds
4,791
Actions
Shares
0
Downloads
1,160
Comments
2
Likes
24
Embeds 0
No embeds

No notes for slide

Inter-process communication of Android

  1. 1. Inter-process communication of Android Tetsuyuki Kobayashi 2011.6.3 updated
  2. 2. Who am I? <ul><li>20+ years involved in embedded systems </li><ul><li>10 years in real time OS, such as iTRON
  3. 3. 10 years in embedded Java Virtual Machine
  4. 4. Now GCC, Linux, QEMU, Android, … </li></ul><li>Blogs </li><ul><li>http://d.hatena.ne.jp/embedded/ (Personal)
  5. 5. http://blog.kmckk.com/ (Corporate)
  6. 6. http://kobablog.wordpress.com/ (English) </li></ul><li>Twitter </li><ul><li>@tetsu_koba </li></ul></ul>new
  7. 7. Today's topic <ul><li>Inter process communications in Android
  8. 8. Inter process method invocation using Binder
  9. 9. Ashmem
  10. 10. System Properties </li></ul>
  11. 11. 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).
  12. 12. Kernel Inter Process Communication
  13. 13. Abstraction of Inter Process Communication Binder AIDL Intent More abstract
  14. 14. Inter Process Communication of Android <ul><li>Intent </li><ul><li>The highest level abstraction </li></ul><li>Inter process method invocation </li><ul><li>AIDL: Android Interface Definition Language </li></ul><li>binder </li><ul><li>kernel driver </li></ul><li>ashmem </li><ul><li>shared memory </li></ul></ul>
  15. 15. Intent (1) <ul><li>The highest level abstraction IPC in Android
  16. 16. Requests are queued and handled sequentially.
  17. 17. Powerful enough between applications
  18. 18. Implemented using inter process method invocation </li></ul>
  19. 19. Intent (2) <ul><li>Loosely coupling </li><ul><li>The sender need not choose the receiver
  20. 20. The sender can specify ”action”. Then proper receiver is chosen and handles it. </li><ul><li>VIEW + http://... -> Browser opens the url.
  21. 21. VIEW + geo:0,0?q=Tokyo -> Map app shows a map of Tokyo.
  22. 22. CALL + tel:01234567 -> Phone app dials the number. </li></ul></ul></ul>
  23. 23. Inter process method invocation <ul><li>used for system services
  24. 24. needs multi-thread programming
  25. 25. wrapped by AIDL to hide complexity
  26. 26. implemented using binder </li></ul>
  27. 27. Invoking method via interface In the same process
  28. 28. Inter-process invocation interface interface interface How?
  29. 29. Inter-process invocation Binder Thread interface interface interface
  30. 30. android.os.Parcel ” flatten” ” unflatten” transmit Delivering arguments of method
  31. 31. Describing in UML ... implements
  32. 32. Describing in UML ... calls implements extends
  33. 33. AIDL Auto generated from .aidl file
  34. 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. 35. Binder <ul><li>/dev/binder
  36. 36. Not for general purpose. Tuned for specific transaction.
  37. 37. Multi-thread aware </li><ul><li>Have internal status per thead
  38. 38. (CF. Socket have internal status per fd.) </li></ul></ul>
  39. 39. Comparing binder with socket 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. 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. 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. 42. Ashmem <ul><li>Android / Anonymous SHared MEMory subsystem </li><ul><li>$(ANDROID_TOP)/system/core/cutils/ashmem.h </li><ul><li>int ashmem_create_region(const char *name, size_t size) -> returns fd
  43. 43. int ashmem_set_prot_region(int fd, int prot)
  44. 44. int ashmem_pin_region(int fd, size_t offset, size_t len)
  45. 45. int ashmem_unpin_region(int fd, size_t offset, size_t len) </li></ul></ul><li>kernel reclaim not ‘pin’ ed memory
  46. 46. Similar to weak reference of Java. useful to implement cache.
  47. 47. android.os.MemoryFile from Java program </li></ul>
  48. 48. System Properties of Android <ul><li>'Key-Value store' type data base for basic system information.
  49. 49. Shared among all processes.
  50. 50. Init process has the master data.
  51. 51. The other processes have read-only copy.
  52. 52. Init process handles write request to the master data.
  53. 53. implemented using ashmem before Gingerbread.
  54. 54. At Gingerbread changed not to use ashmem. </li></ul>
  55. 55. Example of System Properties ... [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. 56. Special Key of System Properties <ul><li>Starts from ”ro.” is read-only.
  57. 57. ” ctl.start” / ”ctl.stop” is command to start/stop the service. </li><ul><li>property_set(&quot;ctl.stop&quot;, &quot;bootanim&quot;); stops boot animation service </li></ul><li>Starts from ”init.svc.” shows the state of the service. </li></ul>
  58. 58. Reading System Property Kernel init Other processes /dev/__properties__ (on tmpfs) mmap (read/write) mmap (read only) Just read the property in each process.
  59. 59. Writing System Property Kernel init Other processes /dev/__properties__ (on tmpfs) mmap (read/write) mmap (read only) Send write request to init through socket
  60. 60. Actual code of initialize 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. 61. Resources <ul><li>3 rd session of Yokohama Android Platform club </li><ul><li>http://www.yokohama.android-pf.org/study/dai-san-kai-benkyou-kai </li></ul><li>1 st session of Android SDK work group </li><ul><li>http://www.android-group.jp/index.php?%CA%D9%B6%AF%B2%F1%2FAndroid ... </li></ul><li>KMC blog </li><ul><li>http://blog.kmckk.com/archives/3611344.html
  62. 62. http://blog.kmckk.com/archives/3613707.html
  63. 63. http://blog.kmckk.com/archives/3627888.html
  64. 64. http://blog.kmckk.com/archives/3645070.html
  65. 65. http://blog.kmckk.com/archives/3647635.html
  66. 66. http://blog.kmckk.com/archives/3617229.html </li></ul></ul>
  67. 67. Q&A and demo http://www.kmckk.co.jp/eng/kzma9/ http://www.kmckk.co.jp/eng/jet_index.html

×