• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Inter-process communication of Android
 

Inter-process communication of Android

on

  • 12,214 views

Inter-process communication of Android.

Inter-process communication of Android.

Statistics

Views

Total Views
12,214
Views on SlideShare
8,432
Embed Views
3,782

Actions

Likes
16
Downloads
816
Comments
2

10 Embeds 3,782

http://kobablog.wordpress.com 3212
http://blog.kmckk.com 548
http://www.slideshare.net 6
http://translate.googleusercontent.com 5
url_unknown 3
https://twitter.com 2
http://webcache.googleusercontent.com 2
http://paper.li 2
http://twitter.com 1
https://kobablog.wordpress.com 1
More...

Accessibility

Categories

Upload Details

Uploaded via as OpenOffice

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel

12 of 2 previous next

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
  • i can successfully download this odp file
    Are you sure you want to
    Your message goes here
    Processing…
  • whenever i want to download a slide d download option is not available,dats why m not able to download it.......?
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Inter-process communication of Android Inter-process communication of Android Presentation Transcript

    • 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
    • Describing in UML ... calls implements extends
    • AIDL Auto generated from .aidl file
    • 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
    • Binder
      • /dev/binder
      • Not for general purpose. Tuned for specific transaction.
      • Multi-thread aware
        • Have internal status per thead
        • (CF. Socket have internal status per fd.)
    • 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
    • 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
    • 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
    • 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
          • int ashmem_set_prot_region(int fd, int prot)
          • int ashmem_pin_region(int fd, size_t offset, size_t len)
          • int ashmem_unpin_region(int fd, size_t offset, size_t len)
      • kernel reclaim not ‘pin’ ed memory
      • Similar to weak reference of Java. useful to implement cache.
      • android.os.MemoryFile from Java program
    • System Properties of Android
      • 'Key-Value store' type data base for basic system information.
      • Shared among all processes.
      • Init process has the master data.
      • The other processes have read-only copy.
      • Init process handles write request to the master data.
      • implemented using ashmem before Gingerbread.
      • At Gingerbread changed not to use ashmem.
    • 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] ...
    • Special Key of System Properties
      • Starts from ”ro.” is read-only.
      • ” 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.
    • Reading System Property Kernel init Other processes /dev/__properties__ (on tmpfs) mmap (read/write) mmap (read only) Just read the property in each process.
    • Writing System Property Kernel init Other processes /dev/__properties__ (on tmpfs) mmap (read/write) mmap (read only) Send write request to init through socket
    • 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
    • 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
        • http://blog.kmckk.com/archives/3613707.html
        • http://blog.kmckk.com/archives/3627888.html
        • http://blog.kmckk.com/archives/3645070.html
        • http://blog.kmckk.com/archives/3647635.html
        • http://blog.kmckk.com/archives/3617229.html
    • Q&A and demo http://www.kmckk.co.jp/eng/kzma9/ http://www.kmckk.co.jp/eng/jet_index.html