±à¼ÍƼö: |
±¾ÎÄÀ´×ÔÓÚÍøÂç,±¾Îļòµ¥½éÉÜÁËÕû¸öͨÐŹý³Ì,¶¼ÐèÒª
Binder Çý¶¯µÄ½ÓÈë,Ï£Íû¶ÔÄúµÄѧϰÓаïÖú¡£ |
|
Binder ¸ÅÊö
Binder ÊÇÒ»ÖÖ½ø³Ì¼äͨÐÅ»úÖÆ£¬»ùÓÚ¿ªÔ´µÄ OpenBinder ʵÏÖ£»OpenBinder Æð³õÓÉ
Be Inc. ¿ª·¢£¬ºóÓÉ Plam Inc. ½ÓÊÖ¡£´Ó×ÖÃæÉÏÀ´½âÊÍ Binder ÓнºË®¡¢Õ³ºÏ¼ÁµÄÒâ˼£¬¹ËÃû˼Òå¾ÍÊÇÕ³ºÍ²»Í¬µÄ½ø³Ì£¬Ê¹Ö®ÊµÏÖͨÐÅ¡£
ΪʲôҪÀí½â Binder£¿
Ò»°ãAndroidÓ¦Óÿª·¢ºÜÉÙÖ±½ÓÓõ½¿ç½ø³ÌÐÅͨÐÅ£¨IPC£©£¬µ«Èç¹ûÄãÏëÖªµÀ£º
1.AppÊÇÈçºÎÆô¶¯²¢³õʼ»¯µÄ£¿
2.ActivityµÄÆô¶¯¹ý³ÌÊÇÔõÑùµÄ£¿
3.½ø³Ì¼äÊÇÈçºÎͨÐŵģ¿
4.AIDLµÄ¾ßÌåÔÀíÊÇʲô£¿
5.ÖÚ¶à²å¼þ»¯¿ò¼ÜµÄÉè¼ÆÔÀí µÈµÈ
ÕâЩÎÊÌâµÄ±³ºó¶¼Óë Binder ÓÐĪ´óµÄ¹ØÏµ£¬ÒªÅª¶®ÉÏÃæÕâЩÎÊÌâÀí½â Bidner ͨÐÅ»úÖÆÊDZØÐëµÄ¡£
ÎÒÃÇÖªµÀ Android Ó¦ÓóÌÐòÊÇÓÉ Activity¡¢Service¡¢Broadcast Receiver
ºÍ Content Provide ËÄ´ó×é¼þÖеÄÒ»¸ö»òÕß¶à¸ö×é³ÉµÄ¡£ÓÐʱÕâЩ×é¼þÔËÐÐÔÚͬһ½ø³Ì£¬ÓÐʱÔËÐÐÔÚ²»Í¬µÄ½ø³Ì¡£ÕâЩ½ø³Ì¼äµÄͨОÍÒÀÀµÓÚ
Binder IPC »úÖÆ¡£²»½öÈç´Ë£¬Android ϵͳ¶ÔÓ¦ÓòãÌṩµÄ¸÷ÖÖ·þÎñÈ磺ActivityManagerService¡¢PackageManagerService
µÈ¶¼ÊÇ»ùÓÚ Binder IPC »úÖÆÀ´ÊµÏֵġ£Binder »úÖÆÔÚ Android ÖеÄλÖ÷dz£ÖØÒª£¬ºÁ²»¿äÕŵÄ˵Àí½â
Binder ÊÇÂõÏò Android ¸ß¼¶¹¤³ÌµÄµÚÒ»²½¡£
ΪʲôÊÇ Binder ?
Android ϵͳÊÇ»ùÓÚ Linux Äں˵ģ¬Linux ÒѾÌṩÁË ¹ÜµÀ¡¢ÏûÏ¢¶ÓÁС¢¹²ÏíÄÚ´æ ºÍ
Socket µÈ IPC »úÖÆ¡£ÄÇΪʲô Android »¹ÒªÌṩ Binder À´ÊµÏÖ IPC ÄØ£¿
Ö÷ÒªÊÇ»ùÓÚ ÐÔÄÜ¡¢Îȶ¨ÐÔ ºÍ °²È«ÐÔ ¼¸·½ÃæµÄÔÒò£¡
ÐÔÄÜ
Ê×ÏÈ˵˵ÐÔÄÜÉϵÄÓÅÊÆ¡£
Socket£º×÷Ϊһ¿îͨÓýӿڣ¬Æä´«ÊäЧÂʵͣ¬¿ªÏú´ó£¬Ö÷ÒªÓÃÔÚ¿çÍøÂçµÄ½ø³Ì¼äͨÐźͱ¾»úÉϽø³Ì¼äµÄµÍËÙͨÐÅ¡£
ÏûÏ¢¶ÓÁк͹ܵÀ£º²ÉÓô洢-ת·¢·½Ê½£¬¼´Êý¾ÝÏÈ´Ó·¢ËÍ·½»º´æÇø¿½±´µ½Äں˿ª±ÙµÄ»º´æÇøÖУ¬È»ºóÔÙ´ÓÄں˻º´æÇø¿½±´µ½½ÓÊÕ·½»º´æÇø£¬ÖÁÉÙÓÐÁ½´Î¿½±´¹ý³Ì¡£
¹²ÏíÄڴ棺ËäÈ»ÎÞÐ追±´£¬µ«¿ØÖƸ´ÔÓ£¬ÄÑÒÔʹÓá£
Binder£ºÖ»ÐèÒªÒ»´ÎÊý¾Ý¿½±´£¬ÐÔÄÜÉϽö´ÎÓÚ¹²ÏíÄÚ´æ¡£

Îȶ¨ÐÔ
ÔÙ˵˵Îȶ¨ÐÔ£¬Binder »ùÓÚ C/S ¼Ü¹¹£¬¿Í»§¶Ë£¨Client£©ÓÐʲôÐèÇó¾Í¶ª¸ø·þÎñ¶Ë£¨Server£©È¥Íê³É£¬¼Ü¹¹ÇåÎú¡¢Ö°ÔðÃ÷È·ÓÖÏ໥¶ÀÁ¢£¬×ÔÈ»Îȶ¨ÐÔ¸üºÃ¡£¹²ÏíÄÚ´æËäÈ»ÎÞÐ追±´£¬µ«ÊÇ¿ØÖƸºÔð£¬ÄÑÒÔʹÓᣴÓÎȶ¨ÐԵĽǶȽ²£¬Binder
»úÖÆÊÇÓÅÓÚ¹²ÏíÄÚ´æµÄ¡£
°²È«ÐÔ
Android ×÷Ϊһ¸ö¿ª·ÅÐÔµÄÆ½Ì¨£¬Êг¡ÉÏÓи÷ÀຣÁ¿µÄÓ¦Óù©Óû§Ñ¡Ôñ°²×°£¬Òò´Ë°²È«ÐÔ¶ÔÓÚ Android
ƽ̨¶øÑÔ¼«ÆäÖØÒª¡£×÷ΪÓû§µ±È»²»Ï£ÍûÎÒÃÇÏÂÔØµÄ APP ͵͵¶ÁÈ¡ÎÒµÄͨÐż£¬ÉÏ´«ÎÒµÄÒþ˽Êý¾Ý£¬ºǫ́͵ÅÜÁ÷Á¿¡¢ÏûºÄÊÖ»úµçÁ¿¡£´«Í³µÄ
IPC ûÓÐÈκΰ²È«´ëÊ©£¬ÍêÈ«ÒÀÀµÉϲãÐÒéÀ´È·±£¡£Ê×ÏÈ´«Í³µÄ IPC ½ÓÊÕ·½ÎÞ·¨»ñµÃ¶Ô·½¿É¿¿µÄ½ø³ÌÓû§ID/½ø³ÌID£¨UID/PID£©£¬´Ó¶øÎÞ·¨¼ø±ð¶Ô·½Éí·Ý¡£Android
Ϊÿ¸ö°²×°ºÃµÄ APP ·ÖÅäÁË×Ô¼ºµÄ UID£¬¹Ê¶ø½ø³ÌµÄ UID ÊǼø±ð½ø³ÌÉí·ÝµÄÖØÒª±êÖ¾¡£´«Í³µÄ
IPC Ö»ÄÜÓÉÓû§ÔÚÊý¾Ý°üÖÐÌîÈë UID/PID£¬µ«ÕâÑù²»¿É¿¿£¬ÈÝÒ×±»¶ñÒâ³ÌÐòÀûÓ᣿ɿ¿µÄÉí·Ý±êʶֻÓÐÓÉ
IPC »úÖÆÔÚÄÚºËÖÐÌí¼Ó¡£Æä´Î´«Í³µÄ IPC ·ÃÎʽÓÈëµãÊÇ¿ª·ÅµÄ£¬Ö»ÒªÖªµÀÕâЩ½ÓÈëµãµÄ³ÌÐò¶¼¿ÉÒԺͶԶ˽¨Á¢Á¬½Ó£¬²»¹ÜÔõÑù¶¼ÎÞ·¨×èÖ¹¶ñÒâ³ÌÐòͨ¹ý²Â²â½ÓÊÕ·½µØÖ·»ñµÃÁ¬½Ó¡£Í¬Ê±
Binder ¼ÈÖ§³ÖʵÃû Binder£¬ÓÖÖ§³ÖÄäÃû Binder£¬°²È«ÐԸߡ£
´«Í³IPCͨÐÅÔÀí
Á˽â Linux IPC Ïà¹ØµÄ¸ÅÄîºÍÔÀíÓÐÖúÓÚÎÒÃÇÀí½â Binder ͨÐÅÔÀí¡£Òò´Ë£¬ÔÚ½éÉÜ Binder
¿ç½ø³ÌͨÐÅÔÀí֮ǰ£¬ÎÒÃÇÏÈÁÄÁÄ Linux ϵͳÏ´«Í³µÄ½ø³Ì¼äͨÐÅÊÇÈçºÎʵÏÖ¡£
»ù´¡¸ÅÄî
½ø³Ì¸ôÀë
¼òµ¥µÄ˵¾ÍÊDzÙ×÷ϵͳÖУ¬½ø³ÌÓë½ø³Ì¼äÄÚ´æÊDz»¹²ÏíµÄ¡£Á½¸ö½ø³Ì¾ÍÏñÁ½¸öƽÐеÄÊÀ½ç£¬A ½ø³Ìû·¨Ö±½Ó·ÃÎÊ
B ½ø³ÌµÄÊý¾Ý£¬Õâ¾ÍÊǽø³Ì¸ôÀëµÄͨË×½âÊÍ¡£A ½ø³ÌºÍ B ½ø³ÌÖ®¼äÒª½øÐÐÊý¾Ý½»»¥¾ÍµÃ²ÉÓÃÌØÊâµÄͨÐÅ»úÖÆ£º½ø³Ì¼äͨÐÅ£¨IPC£©¡£
½ø³Ì¿Õ¼ä
ÏÖÔÚ²Ù×÷ϵͳ¶¼ÊDzÉÓõÄÐéÄâ´æ´¢Æ÷£¬¶ÔÓÚ 32 λϵͳ¶øÑÔ£¬ËüµÄѰַ¿Õ¼ä£¨ÐéÄâ´æ´¢¿Õ¼ä£©¾ÍÊÇ 2 µÄ
32 ´Î·½£¬Ò²¾ÍÊÇ 4GB¡£²Ù×÷ϵͳµÄºËÐÄÊÇÄںˣ¬¶ÀÁ¢ÓÚÆÕͨµÄÓ¦ÓóÌÐò£¬¿ÉÒÔ·ÃÎÊÊܱ£»¤µÄÄÚ´æ¿Õ¼ä£¬Ò²¿ÉÒÔ·ÃÎʵײãÓ²¼þÉ豸µÄȨÏÞ¡£ÎªÁ˱£»¤Óû§½ø³Ì²»ÄÜÖ±½Ó²Ù×÷Äںˣ¬±£Ö¤Äں˵ݲȫ£¬²Ù×÷ϵͳ´ÓÂß¼ÉϽ«ÐéÄâ¿Õ¼ä»®·ÖΪÓû§¿Õ¼ä£¨User
Space£©ºÍÄں˿ռ䣨Kernel Space£©¡£Õë¶Ô Linux ²Ù×÷ϵͳ¶øÑÔ£¬½«×î¸ßµÄ 1GB
×Ö½Ú¹©ÄÚºËʹÓ㬳ÆÎªÄں˿ռ䣻½ÏµÍµÄ 3GB ×Ö½Ú¹©¸÷½ø³ÌʹÓ㬳ÆÎªÓû§¿Õ¼ä¡£
ϵͳµ÷ÓÃ
ËäÈ»´ÓÂß¼ÉϽøÐÐÁËÓû§¿Õ¼äºÍÄں˿ռäµÄ»®·Ö£¬µ«²»¿É±ÜÃâµÄÓû§¿Õ¼äÐèÒª·ÃÎÊÄÚºË×ÊÔ´£¬±ÈÈçÎļþ²Ù×÷¡¢·ÃÎÊÍøÂçµÈµÈ¡£ÎªÁËÍ»ÆÆ¸ôÀëÏÞÖÆ£¬¾ÍÐèÒª½èÖúϵͳµ÷ÓÃÀ´ÊµÏÖ¡£ÏµÍ³µ÷ÓÃÊÇÓû§¿Õ¼ä·ÃÎÊÄں˿ռäµÄΨһ·½Ê½£¬±£Ö¤ÁËËùÓеÄ×ÊÔ´·ÃÎʶ¼ÊÇÔÚÄں˵ĿØÖÆÏ½øÐе쬱ÜÃâÁËÓû§³ÌÐò¶Ôϵͳ×ÊÔ´µÄԽȨ·ÃÎÊ£¬ÌáÉýÁËϵͳ°²È«ÐÔºÍÎȶ¨ÐÔ¡£
Linux ʹÓÃÁ½¼¶±£»¤»úÖÆ£º0 ¼¶¹©ÏµÍ³ÄÚºËʹÓã¬3 ¼¶¹©Óû§³ÌÐòʹÓá£
µ±Ò»¸öÈÎÎñ£¨½ø³Ì£©Ö´ÐÐϵͳµ÷ÓöøÏÝÈëÄں˴úÂëÖÐÖ´ÐÐʱ£¬³Æ½ø³Ì´¦ÓÚÄÚºËÔËÐÐ̬£¨ÄÚºË̬£©¡£´Ëʱ´¦ÀíÆ÷´¦ÓÚÌØÈ¨¼¶×î¸ßµÄ£¨0¼¶£©Äں˴úÂëÖÐÖ´ÐС£µ±½ø³Ì´¦ÓÚÄÚºË̬ʱ£¬Ö´ÐеÄÄں˴úÂë»áʹÓõ±Ç°½ø³ÌµÄÄÚºËÕ»¡£Ã¿¸ö½ø³Ì¶¼ÓÐ×Ô¼ºµÄÄÚºËÕ»¡£
µ±½ø³ÌÔÚÖ´ÐÐÓû§×Ô¼ºµÄ´úÂëµÄʱºò£¬ÎÒÃÇ³ÆÆä´¦ÓÚÓû§ÔËÐÐ̬£¨Óû§Ì¬£©¡£´Ëʱ´¦ÀíÆ÷ÔÚÌØÈ¨¼¶×îµÍµÄ£¨3¼¶£©Óû§´úÂëÖÐÔËÐС£
IPCͨÐÅÔÀí
Àí½âÁËÉÏÃæµÄ¼¸¸ö¸ÅÄÎÒÃÇÔÙÀ´¿´¿´´«Í³µÄ IPC ·½Ê½ÖУ¬½ø³ÌÖ®¼äÊÇÈçºÎʵÏÖͨÐŵġ£
ͨ³£µÄ×ö·¨ÊÇÏûÏ¢·¢ËÍ·½½«Òª·¢Ë͵ÄÊý¾Ý´æ·ÅÔÚÄڴ滺´æÇøÖУ¬Í¨¹ýϵͳµ÷ÓýøÈëÄÚºË̬¡£È»ºóÄں˳ÌÐòÔÚÄں˿ռä·ÖÅäÄڴ棬¿ª±ÙÒ»¿éÄں˻º´æÇø£¬µ÷ÓÃ
copyfromuser() º¯Êý½«Êý¾Ý´ÓÓû§¿Õ¼äµÄÄڴ滺´æÇø¿½±´µ½Äں˿ռäµÄÄں˻º´æÇøÖС£Í¬ÑùµÄ£¬½ÓÊÕ·½½ø³ÌÔÚ½ÓÊÕÊý¾ÝʱÔÚ×Ô¼ºµÄÓû§¿Õ¼ä¿ª±ÙÒ»¿éÄڴ滺´æÇø£¬È»ºóÄں˳ÌÐòµ÷ÓÃ
copytouser() º¯Êý½«Êý¾Ý´ÓÄں˻º´æÇø¿½±´µ½½ÓÊÕ½ø³ÌµÄÄڴ滺´æÇø¡£ÕâÑùÊý¾Ý·¢ËÍ·½½ø³ÌºÍÊý¾Ý½ÓÊÕ·½½ø³Ì¾ÍÍê³ÉÁËÒ»´ÎÊý¾Ý´«Ê䣬ÎÒÃdzÆÍê³ÉÁËÒ»´Î½ø³Ì¼äͨÐÅ
ÎÒÃÇÀ´¿´ÏÂÔÀíͼ£º

ÕâÖÖ´«Í³µÄ IPC ͨÐÅ·½Ê½ÓÐÁ½¸öÎÊÌ⣺
1¡¢ÐÔÄܵÍÏ£¬Ò»´ÎÊý¾Ý´«µÝÐèÒª¾Àú£ºÄڴ滺´æÇø --> Äں˻º´æÇø
--> Äڴ滺´æÇø£¬ÐèÒª 2 ´ÎÊý¾Ý¿½±´£»
2¡¢½ÓÊÕÊý¾ÝµÄ»º´æÇøÓÉÊý¾Ý½ÓÊÕ½ø³ÌÌṩ£¬µ«ÊǽÓÊÕ½ø³Ì²¢²»ÖªµÀÐèÒª¶à´óµÄ¿Õ¼äÀ´´æ·Å½«Òª´«µÝ¹ýÀ´µÄÊý¾Ý£¬Òò´ËÖ»ÄÜ¿ª±Ù¾¡¿ÉÄÜ´óµÄÄÚ´æ¿Õ¼ä»òÕßÏȵ÷ÓÃ
API ½ÓÊÕÏûϢͷÀ´»ñÈ¡ÏûÏ¢ÌåµÄ´óС£¬ÕâÁ½ÖÖ×ö·¨²»ÊÇÀ˷ѿռä¾ÍÊÇÀË·Ñʱ¼ä¡£
Binder¿ç½ø³ÌͨÐÅÔÀí
Àí½âÁË Linux IPC Ïà¹Ø¸ÅÄîºÍͨÐÅÔÀí£¬½ÓÏÂÀ´ÎÒÃÇÕýʽ½éÉÜÏ Binder IPC µÄÔÀí¡£
¶¯Ì¬Äں˿ɼÓÔØÄ£¿é
ÕýÈçÇ°ÃæËù˵£¬¿ç½ø³ÌͨÐÅÊÇÐèÒªÄں˿ռä×öÖ§³ÖµÄ¡£´«Í³µÄ IPC »úÖÆÈç¹ÜµÀ¡¢Socket ¶¼ÊÇÄں˵ÄÒ»²¿·Ö£¬Òò´Ëͨ¹ýÄÚºËÖ§³ÖÀ´ÊµÏÖ½ø³Ì¼äͨÐÅ×ÔÈ»ÊÇûÎÊÌâµÄ¡£µ«ÊÇ
Binder ²¢²»ÊÇ Linux ϵͳÄں˵ÄÒ»²¿·Ö£¬ÄÇÔõô°ìÄØ£¿Õâ¾ÍµÃÒæÓÚ Linux µÄ ¶¯Ì¬Äں˿ɼÓÔØÄ£¿é£¨Loadable
Kernel Module£¬LKM£©µÄ»úÖÆ£»Ä£¿éÊǾßÓжÀÁ¢¹¦ÄܵijÌÐò£¬Ëü¿ÉÒÔ±»µ¥¶À±àÒ룬µ«ÊDz»ÄܶÀÁ¢ÔËÐС£ËüÔÚÔËÐÐʱ±»Á´½Óµ½ÄÚºË×÷ΪÄں˵ÄÒ»²¿·ÖÔËÐС£ÕâÑù£¬Android
ϵͳ¾Í¿ÉÒÔͨ¹ý¶¯Ì¬Ìí¼ÓÒ»¸öÄÚºËÄ£¿éÔËÐÐÔÚÄں˿ռ䣬Óû§½ø³ÌÖ®¼äͨ¹ýÕâ¸öÄÚºËÄ£¿é×÷ΪÇÅÁºÀ´ÊµÏÖͨÐÅ¡£
ÔÚ Android ϵͳÖУ¬Õâ¸öÔËÐÐÔÚÄں˿ռ䣬¸ºÔð¸÷¸öÓû§½ø³Ìͨ¹ý Binder ʵÏÖͨÐŵÄÄÚºËÄ£¿é¾Í½Ð
Binder Çý¶¯£¨Binder Dirver£©¡£
ÄÇôÔÚ Android ϵͳÖÐÓû§½ø³ÌÖ®¼äÊÇÈçºÎͨ¹ýÕâ¸öÄÚºËÄ£¿é£¨Binder Çý¶¯£©À´ÊµÏÖͨÐŵÄÄØ£¿ÄѵÀÊǺÍÇ°ÃæËµµÄ´«Í³
IPC »úÖÆÒ»Ñù£¬ÏȽ«Êý¾Ý´Ó·¢ËÍ·½½ø³Ì¿½±´µ½Äں˻º´æÇø£¬È»ºóÔÙ½«Êý¾Ý´ÓÄں˻º´æÇø¿½±´µ½½ÓÊÕ·½½ø³Ì£¬Í¨¹ýÁ½´Î¿½±´À´ÊµÏÖÂð£¿ÏÔÈ»²»ÊÇ£¬·ñÔòÒ²²»»áÓпªÆªËù˵µÄ
Binder ÔÚÐÔÄÜ·½ÃæµÄÓÅÊÆÁË¡£Õâ¾ÍÉæ¼°µ½ ÄÚ´æÓ³Éä µÄ¸ÅÄîÁË¡£
ÄÚ´æÓ³Éä
Binder IPC »úÖÆÖÐÉæ¼°µ½µÄÄÚ´æÓ³Éäͨ¹ý mmap() À´ÊµÏÖ£¬mmap() ÊDzÙ×÷ϵͳÖÐÒ»ÖÖÄÚ´æÓ³ÉäµÄ·½·¨¡£ÄÚ´æÓ³Éä¼òµ¥µÄ½²¾ÍÊǽ«Óû§¿Õ¼äµÄÒ»¿éÄÚ´æÇøÓòÓ³Éäµ½Äں˿ռ䡣ӳÉä¹ØÏµ½¨Á¢ºó£¬Óû§¶ÔÕâ¿éÄÚ´æÇøÓòµÄÐ޸ĿÉÒÔÖ±½Ó·´Ó¦µ½Äں˿ռ䣻·´Ö®Äں˿ռä¶ÔÕâ¶ÎÇøÓòµÄÐÞ¸ÄÒ²ÄÜÖ±½Ó·´Ó¦µ½Óû§¿Õ¼ä¡£
ÄÚ´æÓ³ÉäÄܼõÉÙÊý¾Ý¿½±´´ÎÊý£¬ÊµÏÖÓû§¿Õ¼äºÍÄں˿ռäµÄ¸ßЧ»¥¶¯¡£Á½¸ö¿Õ¼ä¸÷×ÔµÄÐÞ¸ÄÄÜÖ±½Ó·´Ó³ÔÚÓ³ÉäµÄÄÚ´æÇøÓò£¬´Ó¶ø±»¶Ô·½¿Õ¼ä¼°Ê±¸ÐÖª¡£Ò²ÕýÒòΪÈç´Ë£¬ÄÚ´æÓ³ÉäÄܹ»Ìṩ¶Ô½ø³Ì¼äͨÐŵÄÖ§³Ö¡£
Binder IPC ʵÏÖÔÀí
Binder IPC ÕýÊÇ»ùÓÚÄÚ´æÓ³É䣨mmap£©À´ÊµÏֵ쬵«ÊÇ mmap() ͨ³£ÊÇÓÃÔÚÓÐÎïÀí½éÖʵÄÎļþϵͳÉϵġ£
±ÈÈç½ø³ÌÖеÄÓû§ÇøÓòÊDz»ÄÜÖ±½ÓºÍÎïÀíÉ豸´ò½»µÀµÄ£¬Èç¹ûÏëÒª°Ñ´ÅÅÌÉϵÄÊý¾Ý¶ÁÈ¡µ½½ø³ÌµÄÓû§ÇøÓò£¬ÐèÒªÁ½´Î¿½±´£¨´ÅÅÌ-->Äں˿ռä-->Óû§¿Õ¼ä£©£»Í¨³£ÔÚÕâÖÖ³¡¾°ÏÂ
mmap() ¾ÍÄÜ·¢»Ó×÷Óã¬Í¨¹ýÔÚÎïÀí½éÖʺÍÓû§¿Õ¼äÖ®¼ä½¨Á¢Ó³É䣬¼õÉÙÊý¾ÝµÄ¿½±´´ÎÊý£¬ÓÃÄÚ´æ¶Áдȡ´úI/O¶Áд£¬Ìá¸ßÎļþ¶ÁȡЧÂÊ¡£
¶ø Binder ²¢²»´æÔÚÎïÀí½éÖÊ£¬Òò´Ë Binder Çý¶¯Ê¹Óà mmap() ²¢²»ÊÇΪÁËÔÚÎïÀí½éÖʺÍÓû§¿Õ¼äÖ®¼ä½¨Á¢Ó³É䣬¶øÊÇÓÃÀ´ÔÚÄں˿ռ䴴½¨Êý¾Ý½ÓÊյĻº´æ¿Õ¼ä¡£
Ò»´ÎÍêÕûµÄ Binder IPC ͨÐŹý³Ìͨ³£ÊÇÕâÑù£º
1¡¢Ê×ÏÈ Binder Çý¶¯ÔÚÄں˿ռ䴴½¨Ò»¸ö Êý¾Ý½ÓÊÕ»º´æÇø £»
2¡¢½Ó×ÅÔÚÄں˿ռ俪±ÙÒ»¿éÄں˻º´æÇø£¬½¨Á¢ Äں˻º´æÇø ºÍ ÄÚºËÖÐÊý¾Ý½ÓÊÕ»º´æÇø
Ö®¼äµÄÓ³Éä¹ØÏµ£¬ÒÔ¼° ÄÚºËÖÐÊý¾Ý½ÓÊÕ»º´æÇø ºÍ ½ÓÊÕ½ø³ÌÓû§¿Õ¼äµØÖ· µÄÓ³Éä¹ØÏµ£»
3¡¢·¢ËÍ·½½ø³Ìͨ¹ýϵͳµ÷Óà copyfromuser() ½«Êý¾Ý
copy µ½ÄÚºËÖеÄÄں˻º´æÇø£¬ÓÉÓÚÄں˻º´æÇøºÍ½ÓÊÕ½ø³ÌµÄÓû§¿Õ¼ä´æÔÚÄÚ´æÓ³É䣬Òò´ËÒ²¾ÍÏ൱ÓÚ°ÑÊý¾Ý·¢Ë͵½Á˽ÓÊÕ½ø³ÌµÄÓû§¿Õ¼ä£¬ÕâÑù±ãÍê³ÉÁËÒ»´Î½ø³Ì¼äµÄͨÐÅ¡£
ÎÒÃÇÀ´¿´ÏÂÔÀíͼ£º

Binder ͨÐÅÄ£ÐÍ
½éÉÜÍê Binder IPC µÄµ×²ãͨÐÅÔÀí£¬½ÓÏÂÀ´ÎÒÃÇ¿´¿´ÊµÏÖ²ãÃæÊÇÈçºÎÉè¼ÆµÄ¡£
Ò»´ÎÍêÕûµÄ½ø³Ì¼äͨÐűØÈ»ÖÁÉÙ°üº¬Á½¸ö½ø³Ì£¬Í¨³£ÎÒÃdzÆÍ¨ÐŵÄË«·½·Ö±ðΪ ¿Í»§¶Ë½ø³Ì £¨Client£©ºÍ
·þÎñ¶Ë½ø³Ì £¨Server£©£¬ÓÉÓÚ½ø³Ì¸ôÀë»úÖÆµÄ´æÔÚ£¬Í¨ÐÅË«·½±ØÈ»ÐèÒª½èÖú Binder À´ÊµÏÖ¡£
Client/Server/ServiceManager/Çý¶¯
Ç°ÃæÎÒÃǽéÉܹý£¬Binder ÊÇ»ùÓÚ C/S ¼Ü¹¹µÄ¡£ÓÉһϵÁеÄ×é¼þ×é³É£¬°üÀ¨ Client¡¢Server¡¢ServiceManager¡¢Binder
Çý¶¯¡£
1.Client¡¢Server¡¢Service Manager ÔËÐÐÔÚÓû§¿Õ¼ä£¬Binder
Çý¶¯ÔËÐÐÔÚÄں˿ռ䡣
2.Service Manager ºÍ Binder Çý¶¯ÓÉϵͳÌṩ£¬¶ø
Client¡¢Server ÓÉÓ¦ÓóÌÐòÀ´ÊµÏÖ¡£
3.Client¡¢Server ºÍ ServiceManager
¾ùÊÇͨ¹ýϵͳµ÷Óà open¡¢mmap ºÍ ioctl À´·ÃÎÊÉ豸Îļþ /dev/binder£¬´Ó¶øÊµÏÖÓë
Binder Çý¶¯µÄ½»»¥À´¼ä½ÓµÄʵÏÖ¿ç½ø³ÌͨÐÅ¡£
ÈçÏÂÔÀíͼ£º

Client¡¢Server¡¢ServiceManager¡¢Binder Çý¶¯Õ⼸¸ö×é¼þÔÚͨÐŹý³ÌÖаçÑݵĽÇÉ«¾ÍÈçͬ»¥ÁªÍøÖзþÎñÆ÷£¨Server£©¡¢¿Í»§¶Ë£¨Client£©¡¢DNSÓòÃû·þÎñÆ÷£¨ServiceManager£©ÒÔ¼°Â·ÓÉÆ÷£¨Binder
Çý¶¯£©Ö®Ç°µÄ¹ØÏµ¡£
ͨ³£ÎÒÃÇ·ÃÎÊÒ»¸öÍøÒ³µÄ²½ÖèÊÇÕâÑùµÄ£ºÊ×ÏÈÔÚä¯ÀÀÆ÷ÊäÈëÒ»¸öµØÖ·£¬Èç https://www.google.com
È»ºó°´Ï»سµ¼ü¡£µ«ÊDz¢Ã»Óа취ͨ¹ýÓòÃûµØÖ·Ö±½ÓÕÒµ½ÎÒÃÇÒª·ÃÎʵķþÎñÆ÷£¬Òò´ËÐèÒªÊ×ÏÈ·ÃÎÊ DNS ÓòÃû·þÎñÆ÷£¬ÓòÃû·þÎñÆ÷Öб£´æÁË
https://www.google.com ¶ÔÓ¦µÄ ip µØÖ· 10.249.23.13£¬È»ºóͨ¹ýÕâ¸ö
ip µØÖ·²ÅÄÜÕÒµ½ https://www.google.com ¶ÔÓ¦µÄ·þÎñÆ÷¡£
ÈçÏÂͼËùʾ£º

Android Binder Éè¼ÆÓëʵÏÖÒ»ÎÄÖÐ¶Ô Client¡¢Server¡¢ServiceManager¡¢Binder
Çý¶¯ÓкÜÏêϸµÄÃèÊö£¬ÒÔÏÂÊDz¿·Öժ¼£º
Binder Çý¶¯
Binder Çý¶¯¾ÍÈçͬ·ÓÉÆ÷Ò»Ñù£¬ÊÇÕû¸öͨÐŵĺËÐÄ£»Çý¶¯¸ºÔð½ø³ÌÖ®¼ä Binder ͨÐŵĽ¨Á¢¡¢Binder
ÔÚ½ø³ÌÖ®¼äµÄ´«µÝ¡¢Binder ÒýÓüÆÊý¹ÜÀí¡¢Êý¾Ý°üÔÚ½ø³ÌÖ®¼äµÄ´«µÝºÍ½»»¥µÈһϵÁеײãÖ§³Ö¡£
ServiceManager ÓëʵÃû Binder
ServiceManager ºÍ DNS ÀàËÆ£¬×÷ÓÃÊǽ«×Ö·ûÐÎʽµÄ Binder Ãû×Öת»¯³É Client
ÖжԸà Binder µÄÒýÓã¬Ê¹µÃ Client Äܹ»Í¨¹ý Binder µÄÃû×Ö»ñµÃ¶Ô Binder
ʵÌåµÄÒýÓá£×¢²áÁËÃû×ÖµÄ Binder ½ÐʵÃû Binder£¬¾ÍÏñÍøÕ¾Ò»Ñù³ýÁËÓÐ IP µØÖ·ÒÔÍ⻹ÓÐ×Ô¼ºµÄÍøÖ·¡£Server
´´½¨ÁË Binder£¬²¢ÎªËüÆðÒ»¸ö×Ö·ûÐÎʽ£¬¿É¶ÁÒ׼ǵÃÃû×Ö£¬½«Õâ¸ö Binder ʵÌåÁ¬Í¬Ãû×ÖÒ»ÆðÒÔÊý¾Ý°üµÄÐÎʽͨ¹ý
Binder Çý¶¯·¢Ë͸ø ServiceManager £¬Í¨Öª ServiceManager ×¢²áÒ»¸öÃûΪ¡°ÕÅÈý¡±µÄ
Binder£¬ËüλÓÚij¸ö Server ÖС£Çý¶¯ÎªÕâ¸ö´©Ô½½ø³Ì±ß½çµÄ Binder ´´½¨Î»ÓÚÄÚºËÖеÄʵÌå½ÚµãÒÔ¼°
ServiceManager ¶ÔʵÌåµÄÒýÓ㬽«Ãû×ÖÒÔ¼°Ð½¨µÄÒýÓôò°ü´«¸ø ServiceManager¡£ServiceManger
ÊÕµ½Êý¾Ýºó´ÓÖÐÈ¡³öÃû×ÖºÍÒýÓÃÌîÈë²éÕÒ±í¡£
ϸÐĵĶÁÕß¿ÉÄܻᷢÏÖ£¬ServierManager ÊÇÒ»¸ö½ø³Ì£¬Server ÊÇÁíÒ»¸ö½ø³Ì£¬Server
Ïò ServiceManager ÖÐ×¢²á Binder ±ØÈ»Éæ¼°µ½½ø³Ì¼äͨÐÅ¡£µ±Ç°ÊµÏÖ½ø³Ì¼äͨÐÅÓÖÒªÓõ½½ø³Ì¼äͨÐÅ£¬Õâ¾ÍºÃÏñµ°¿ÉÒÔ·õ³ö¼¦µÄǰÌáÈ´ÊÇÒªÏÈÕÒÖ»¼¦Ïµ°£¡
Binder µÄʵÏֱȽÏÇÉÃ¾ÍÊÇÔ¤ÏÈ´´ÔìÒ»Ö»¼¦À´Ïµ° ¡£ServiceManager ºÍÆäËû½ø³ÌͬÑù²ÉÓÃ
Bidner ͨÐÅ£¬ServiceManager ÊÇ Server ¶Ë£¬ÓÐ×Ô¼ºµÄ Binder ʵÌ壬ÆäËû½ø³Ì¶¼ÊÇ
Client£¬ÐèҪͨ¹ýÕâ¸ö Binder µÄÒýÓÃÀ´ÊµÏÖ Binder µÄ×¢²á£¬²éѯºÍ»ñÈ¡¡£ServiceManager
ÌṩµÄ Binder ±È½ÏÌØÊ⣬ËüûÓÐÃû×ÖÒ²²»ÐèҪע²á¡£µ±Ò»¸ö½ø³ÌʹÓà BINDERSETCONTEXT_MGR
ÃüÁ×Ô¼º×¢²á³É ServiceManager ʱ Binder Çý¶¯»á×Ô¶¯ÎªËü´´½¨ Binder
ʵÌå £¨Õâ¾ÍÊÇÄÇÖ»Ô¤ÏÈÔìºÃµÄÄÇÖ»¼¦£© ¡£Æä´ÎÕâ¸ö Binder ʵÌåµÄÒýÓÃÔÚËùÓÐ Client Öж¼¹Ì¶¨Îª
0 ¶øÎÞÐèͨ¹ýÆäËüÊֶλñµÃ¡£Ò²¾ÍÊÇ˵£¬Ò»¸ö Server ÏëÒªÏò ServiceManager ×¢²á×Ô¼ºµÄ
Binder ¾Í±ØÐëͨ¹ýÕâ¸ö 0 ºÅÒýÓÃºÍ ServiceManager µÄ Binder ͨÐÅ¡£Àà±È»¥ÁªÍø£¬0
ºÅÒýÓþͺñÈÊÇÓòÃû·þÎñÆ÷µÄµØÖ·£¬Äã±ØÐëÔ¤Ïȶ¯Ì¬»òÕßÊÖ¹¤ÅäÖúá£Òª×¢ÒâµÄÊÇ£¬ÕâÀï˵µÄ Client ÊÇÏà¶ÔÓÚ
ServiceManager ¶øÑԵģ¬Ò»¸ö½ø³Ì»òÕßÓ¦ÓóÌÐò¿ÉÄÜÊÇÌṩ·þÎñµÄ Server£¬µ«¶ÔÓÚ ServiceManager
À´ËµËüÈÔÈ»ÊǸö Client¡£
Client »ñµÃʵÃû Binder µÄÒýÓÃ
Server Ïò ServiceManager ÖÐ×¢²áÁË Binder ÒÔºó£¬ Client ¾ÍÄÜͨ¹ýÃû×Ö»ñµÃ
Binder µÄÒýÓÃÁË¡£Client Ò²ÀûÓñ£ÁôµÄ 0 ºÅÒýÓÃÏò ServiceManager ÇëÇó·ÃÎÊij¸ö
Binder: ÎÒÉêÇë·ÃÎÊÃû×Ö½ÐÕÅÈýµÄ Binder ÒýÓá£ServiceManager ÊÕµ½Õâ¸öÇëÇóºó´ÓÇëÇóÊý¾Ý°üÖÐÈ¡³ö
Binder Ãû³Æ£¬ÔÚ²éÕÒ±íÀïÕÒµ½¶ÔÓ¦µÄÌõÄ¿£¬È¡³ö¶ÔÓ¦µÄ Binder ÒýÓÃ×÷Ϊ»Ø¸´·¢Ë͸ø·¢ÆðÇëÇóµÄ
Client¡£´ÓÃæÏò¶ÔÏóµÄ½Ç¶È¿´£¬Server ÖÐµÄ Binder ʵÌåÏÖÔÚÓÐÁ½¸öÒýÓãºÒ»¸öλÓÚ ServiceManager
ÖУ¬Ò»¸öλÓÚ·¢ÆðÇëÇóµÄ Client ÖС£Èç¹û½ÓÏÂÀ´Óиü¶àµÄ Client ÇëÇó¸Ã Binder£¬ÏµÍ³ÖоͻáÓиü¶àµÄÒýÓÃÖ¸Ïò¸Ã
Binder £¬¾ÍÏñ Java ÖÐÒ»¸ö¶ÔÏóÓжà¸öÒýÓÃÒ»Ñù¡£
Binder ͨÐŹý³Ì
ÖÁ´Ë£¬ÎÒÃÇ´óÖÂÄÜ×ܽá³ö Binder ͨÐŹý³Ì£º
1¡¢Ê×ÏÈ£¬Ò»¸ö½ø³ÌʹÓà BINDERSETCONTEXT_MGR
ÃüÁîͨ¹ý Binder Çý¶¯½«×Ô¼º×¢²á³ÉΪ ServiceManager£»
2¡¢Server ͨ¹ýÇý¶¯Ïò ServiceManager ÖÐ×¢²á
Binder£¨Server ÖÐµÄ Binder ʵÌ壩£¬±íÃ÷¿ÉÒÔ¶ÔÍâÌṩ·þÎñ¡£Çý¶¯ÎªÕâ¸ö Binder
´´½¨Î»ÓÚÄÚºËÖеÄʵÌå½ÚµãÒÔ¼° ServiceManager ¶ÔʵÌåµÄÒýÓ㬽«Ãû×ÖÒÔ¼°Ð½¨µÄÒýÓôò°ü´«¸ø
ServiceManager£¬ServiceManger ½«ÆäÌîÈë²éÕÒ±í¡£
3¡¢Client ͨ¹ýÃû×Ö£¬ÔÚ Binder Çý¶¯µÄ°ïÖúÏÂ´Ó ServiceManager
ÖлñÈ¡µ½¶Ô Binder ʵÌåµÄÒýÓã¬Í¨¹ýÕâ¸öÒýÓþÍÄÜʵÏÖºÍ Server ½ø³ÌµÄͨÐÅ¡£
ÎÒÃÇ¿´µ½Õû¸öͨÐŹý³Ì¶¼ÐèÒª Binder Çý¶¯µÄ½ÓÈë¡£ÏÂͼÄܸü¼ÓÖ±¹ÛµÄÕ¹ÏÖÕû¸öͨÐŹý³Ì(ΪÁ˽øÒ»²½³éÏóͨÐŹý³ÌÒÔ¼°³ÊÏÖÉϵķ½±ã£¬ÏÂͼÎÒÃǺöÂÔÁË
Binder ʵÌå¼°ÆäÒýÓõĸÅÄî)£º
ÔÀíͼ£º

Binder ͨÐÅÖеĴúÀíģʽ
ÎÒÃÇÒѾ½âÊÍÇå³þ Client¡¢Server ½èÖú Binder Çý¶¯Íê³É¿ç½ø³ÌͨÐŵÄʵÏÖ»úÖÆÁË£¬µ«ÊÇ»¹ÓиöÎÊÌâ»áÈÃÎÒÃÇÀ§»ó¡£A
½ø³ÌÏëÒª B ½ø³ÌÖÐij¸ö¶ÔÏó£¨object£©ÊÇÈçºÎʵÏÖµÄÄØ£¿±Ï¾¹ËüÃÇ·ÖÊô²»Í¬µÄ½ø³Ì£¬A ½ø³Ìû·¨Ö±½ÓʹÓÃ
B ½ø³ÌÖÐµÄ object¡£
Ç°ÃæÎÒÃǽéÉܹý¿ç½ø³ÌͨÐŵĹý³Ì¶¼ÓÐ Binder Çý¶¯µÄ²ÎÓ룬Òò´ËÔÚÊý¾ÝÁ÷¾ Binder Çý¶¯µÄʱºòÇý¶¯»á¶ÔÊý¾Ý×öÒ»²ãת»»¡£µ±
A ½ø³ÌÏëÒª»ñÈ¡ B ½ø³ÌÖÐµÄ object ʱ£¬Çý¶¯²¢²»»áÕæµÄ°Ñ object ·µ»Ø¸ø A£¬¶øÊÇ·µ»ØÁËÒ»¸ö¸ú
object ¿´ÆðÀ´Ò»Ä£Ò»ÑùµÄ´úÀí¶ÔÏó objectProxy£¬Õâ¸ö objectProxy ¾ßÓкÍ
object һģһÑùµÄ·½·¨£¬µ«ÊÇÕâЩ·½·¨²¢Ã»ÓÐ B ½ø³ÌÖÐ object ¶ÔÏóÄÇЩ·½·¨µÄÄÜÁ¦£¬ÕâЩ·½·¨Ö»ÐèÒª°ÑÇëÇó²ÎÊý½»¸øÇý¶¯¼´¿É¡£¶ÔÓÚ
A ½ø³ÌÀ´ËµºÍÖ±½Óµ÷Óà object Öеķ½·¨ÊÇÒ»ÑùµÄ¡£
µ± Binder Çý¶¯½ÓÊÕµ½ A ½ø³ÌµÄÏûÏ¢ºó£¬·¢ÏÖÕâÊǸö objectProxy ¾ÍÈ¥²éѯ×Ô¼ºÎ¬»¤µÄ±íµ¥£¬Ò»²é·¢ÏÖÕâÊÇ
B ½ø³Ì object µÄ´úÀí¶ÔÏó¡£ÓÚÊǾͻáȥ֪ͨ B ½ø³Ìµ÷Óà object µÄ·½·¨£¬²¢ÒªÇó B
½ø³Ì°Ñ·µ»Ø½á¹û·¢¸ø×Ô¼º¡£µ±Çý¶¯Äõ½ B ½ø³ÌµÄ·µ»Ø½á¹ûºó¾Í»áת·¢¸ø A ½ø³Ì£¬Ò»´ÎͨОÍÍê³ÉÁË¡£
ÔÀíͼ£º

Binder µÄÍêÕû¶¨Òå
ÏÖÔÚÎÒÃÇ¿ÉÒÔ¶Ô Binder ×ö¸ö¸ü¼ÓÈ«ÃæµÄ¶¨ÒåÁË£º
1.´Ó½ø³Ì¼äͨÐŵĽǶȿ´£¬Binder ÊÇÒ»ÖÖ½ø³Ì¼äͨÐŵĻúÖÆ£»
2.´Ó Server ½ø³ÌµÄ½Ç¶È¿´£¬Binder Ö¸µÄÊÇ Server
ÖÐµÄ Binder ʵÌå¶ÔÏó£»
3.´Ó Client ½ø³ÌµÄ½Ç¶È¿´£¬Binder Ö¸µÄÊÇ¶Ô Binder
´úÀí¶ÔÏó£¬ÊÇ Binder ʵÌå¶ÔÏóµÄÒ»¸öÔ¶³Ì´úÀí
4.´Ó´«Êä¹ý³ÌµÄ½Ç¶È¿´£¬Binder ÊÇÒ»¸ö¿ÉÒÔ¿ç½ø³Ì´«ÊäµÄ¶ÔÏó£»Binder
Çý¶¯»á¶ÔÕâ¸ö¿çÔ½½ø³Ì±ß½çµÄ¶ÔÏó¶ÔÒ»µãµãÌØÊâ´¦Àí£¬×Ô¶¯Íê³É´úÀí¶ÔÏóºÍ±¾µØ¶ÔÏóÖ®¼äµÄת»»¡£ |