Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
Android ͨÐÅÆª -- ÉîÈëÆÊÎöBinderÔ­Àí
 
  2653  次浏览      27
 2018-9-20
 
±à¼­ÍƼö:
±¾ÎÄÀ´×ÔÓÚÍøÂç,±¾Îļòµ¥½éÉÜÁËÕû¸öͨÐŹý³Ì,¶¼ÐèÒª 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 Çý¶¯»á¶ÔÕâ¸ö¿çÔ½½ø³Ì±ß½çµÄ¶ÔÏó¶ÔÒ»µãµãÌØÊâ´¦Àí£¬×Ô¶¯Íê³É´úÀí¶ÔÏóºÍ±¾µØ¶ÔÏóÖ®¼äµÄת»»¡£

   
2653 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

Éî¶È½âÎö£ºÇåÀíÀôúÂë
ÈçºÎ±àд³öÓµ±§±ä»¯µÄ´úÂë
ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
ÍŶÓÏîÄ¿¿ª·¢"±àÂë¹æ·¶"ϵÁÐÎÄÕÂ
Ïà¹ØÎĵµ

ÖØ¹¹-¸ÄÉÆ¼ÈÓдúÂëµÄÉè¼Æ
Èí¼þÖØ¹¹v2
´úÂëÕû½àÖ®µÀ
¸ßÖÊÁ¿±à³Ì¹æ·¶
Ïà¹Ø¿Î³Ì

»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì