éžè©±
ã¯ããã«
幌çšåã§ã¯ãå¿ãåãããã人ã ãšç§ã¯ããã¿ã解åãããã®æ§é ãæŽçããããšãæãã§ããŸããã åŠæ ¡ã§ã¯ãã©ãžãªããã·ã¢ããã¯ãã ä»ããããŸããã ç 究æã§ã¯ãããããç¹°ãè¿ãåé 眮ãããè»ã®å転ã§ããã é¢å¿ã¯å€ãããŸãããããå解ãããããšãã欲æ±ãæã ç®èŠããä»æ¥ã§ã¯Androidã察象ãšããŠããŸãã
Androidã®ãœãŒã¹ã³ãŒãã¯äœå圹ã«ç«ã¡ãŸãããïŒ æ°ããããŸãã Androidã¯ãªãŒãã³ãªãããžã§ã¯ãã§ãããæ®å¿µãªãããèªãããšãã§ããã®ã¯ç§ãã¡ã ãã§ãã Googleã®åŸæ¥å¡ã§ãªããŠãAndroidã³ãŒããç·šéããããšã¯ã»ãšãã©äžå¯èœã§ãã ãã®ç¬éã«æ²ãã¿ããªããžããªãããŒãããŸãã ãããè¡ãæ¹æ³ã¯ãå ¬åŒWebãµã€ãã§è©³ãã説æãããŠããŸã ã

äžè¬çãªã¢ãŒããã¯ãã£
Androidã®ã¢ãŒããã¯ãã£ã¯ã次ã®ããã«æŠç¥çã«è¡šãããšãã§ããŸãã

å ã®ã¹ããŒã ã«ã¯ãã«ãŒãã«ã®æ©èœã«é¢ããæ å ±ãå«ãŸããŠãããããã€ã³ããŒããã³ã·ã¹ãã ãµãŒãã¹ã«çŠç¹ãåãããŠããŸããã ãã ãããã€ã³ããŒã¯ãã·ã¹ãã ã®ãã¹ãŠã®ã³ã³ããŒãã³ãããã€ã³ããããæ¥çå€ãã§ãã
ååãšããŠãæ¬ã§ã¯å·Šäžã®éãé·æ¹åœ¢ãã€ãŸãã¢ããªã±ãŒã·ã§ã³éçºè ãå©çšã§ããAPIã«ã€ããŠèª¬æããŠããŸãã 以äžã®ãã¹ãŠã«èå³ããããŸãã ä»æ¥ã¯ã³ã¢ã®ã¿ãæ€èšããŸãã
ã³ã¢
ã«ãŒãã«ã¯ãLinuxãšåŒã°ãããã£ã¹ããªãã¥ãŒã·ã§ã³ã®äžå¿éšåã§ãã ã ã¯ãªãŒã³ãª ãã«ãŒãã«ãå©çšã§ããã«ãããããããå€ãã®éçºè ïŒUbuntuãFedoraãSuSeãªã©ïŒã¯ããã£ã¹ããªãã¥ãŒã·ã§ã³ã«å«ãŸããåã«ããããè¿œå ããŸãã Androidãåãããã«åäœããŸãããçŽæ¥çãªäºææ§ã倱ããšããç ç²ãæãã ãã§ãããã¯ãªãŒã³ãªãã«ãŒãã«ã§ã¯èµ·åããŸããã çŸåšãã«ãŒãã«ã®ã¡ã€ã³ããŒãžã§ã³ã«ãã¢ã³ããã€ãããå«ããæå³ããããŸã; 2011幎ã«ãLinus Torvalds ã¯ãã®ããã»ã¹ã4ã5幎äžããŸãã ã ã«ãŒãã«ããŒãžã§ã³3.5ã«wakelocksã¡ã«ããºã ãå«ããããšã«ããããã§ã«æåãåããŠããŸãã
ãã¢ã³ããã€ããã«ã€ããŠããã«è©³ããèããŠã¿ãŸãããã
ãŠã§ã€ã¯ããã¯
ãã®ã¡ã«ããºã ã®æŽå²ã¯å£®å€§ã§ã;ãLinuxãžã®ãŠã§ã€ã¯ããã¯ã®éããšããèšäºã®ã³ã¬ã¯ã·ã§ã³ãå©çšããŸãïŒåœŒãã®è°è«ã¯LKMLã¡ãŒãªã³ã°ãªã¹ãã§çŽ2000éã®æçŽãåããŸããã
ãã¹ã¯ãããã³ã³ãã¥ãŒã¿ãŒãšã©ãããããã«ã¯ããšãã«ã®ãŒã¢ãŒãã®ã·ã¹ãã ã確ç«ãããŠããŸãïŒx86ããã»ããµãŒã«ã¯ããã€ããããŸãïŒãã³ã³ãã¥ãŒã¿ãŒã¯ãäœããå®è¡ããããšããã«ã¹ããŒããã§å®è¡ãããã·ã¹ãã ãã¢ã€ãã«ç¶æ ã«ãªããšãšãã«ã®ãŒå¹çã®é«ãã¢ãŒãã«ãªããŸãã ãã¹ãªãŒããã¢ãŒãã«å ¥ãã®ã¯ãããªãé·ãæééã¢ã¯ãã£ãã«ãªã£ãåŸããŸãã¯ã©ãããããã®ãµããéãããšããªã©ãæåã§çºçããŸãã
é»è©±ã§ã¯ãå¥ã®ã¡ã«ããºã ãå¿ èŠã§ãããã·ã¹ãã ã®äž»ãªç¶æ ã¯ãäŒæ¢ç¶æ ãã§ãã·ã¹ãã ããã®éåºã¯å¿ èŠãªå Žåã«ã®ã¿å®è¡ãããŸãã ãããã£ãŠãã¢ããªã±ãŒã·ã§ã³ãã¢ã¯ãã£ãã§ãã£ãŠããã·ã¹ãã ãã¹ãªãŒãç¶æ ã«ãªãå¯èœæ§ããããŸãã Androidã¯ããŠã§ã€ã¯ããã¯ã¡ã«ããºã ãå®è£ ããŸãããã¢ããªã±ãŒã·ã§ã³ïŒãŸãã¯ãã©ã€ããŒïŒãè«ççãªçµè«ã«éããéèŠãªäœããå®è¡ãããšããŠã§ã€ã¯ããã¯ãããã£ããã£ãããããã€ã¹ãã¹ãªãŒãç¶æ ã«ãªãã®ãé²ããŸãã
wakelockã¡ã«ããºã ãã«ãŒãã«ã«ç§»æ€ããããšãããšãå€ãã®éçºè ããæµæããããŸããã Androidããã°ã©ããŒã¯ç¹å®ã®åé¡ã解決ããŸãããããã®è§£æ±ºçã¯ç¹å®ã®ã¡ã«ããºã ã§ããã åé¡ã®æ¡ä»¶ã¯éåžžã«çãã£ãã ã¿ãŒã²ãããã©ãããã©ãŒã ã¯ARMã§ããããããã®æ©èœã䜿çšãããŸãããARMããã»ããµã¯ãåœåx86ãšã¯ç°ãªãããã¹ãªãŒããããã³ããŠã§ã€ã¯ãåäœã¢ãŒãã®é »ç¹ãªå€æŽãæ³å®ããŠããŸããã Androidã§ã¯ãã¢ããªã±ãŒã·ã§ã³ã¯PowerManagerãä»ããŠé»æºç®¡çã·ã¹ãã ãšéä¿¡ããŸããLinuxã¯ã©ã€ã¢ã³ãã¢ããªã±ãŒã·ã§ã³ã¯äœããã¹ãã§ããïŒ
Androidéçºè ã¯ããå°æ¥ãã«å ±éã®ãœãªã¥ãŒã·ã§ã³ãèŠã€ããããšãããããã¡ã€ã³ã³ã¢ã«ã·ãŒã ã¬ã¹ã«æµã蟌ã¿ããã®åé¡ã«ã€ããŠLinuxã«ãŒãã«ã³ãã¥ããã£ã«çžè«ããŸããã§ããã ãããã責ããããšã¯ã§ããŸããïŒ äžèšã®ãã¹ãŠã®åé¡ãšè°è«ã«ãããããããåããªãŒãã¹ãªãŒãæ©èœãæã€APIãã«ãŒãã«ã«ç»å ŽããŸããã
ãã©ãããã©ãŒã ãšãã©ã€ããŒããã¹ãªãŒããã¢ãŒããèæ ®ããŠçŸ©åãåŠçãããããAndroidã¢ããªã±ãŒã·ã§ã³ããã°ã©ããŒã¯ãã£ãã«wakelock-sã«å¯ŸåŠããå¿ èŠã¯ãããŸããã ãã ãã䜿ãæ £ããPowerManagerã¯ããã®ããã»ã¹ã«ä»å ¥ããã®ã«åœ¹ç«ã¡ãŸãã ã¡ãªã¿ã«ãäœè ã¯ãBroadcastReceiverãããµãŒãã¹ãéå§ãããšãã«æºåž¯é»è©±ãã¹ãªãŒãç¶æ ã«ãªããªãããã«ããã·ããªãªã1ã€ã ãèãåºããŸããããã¯ãAndroidãµããŒãã©ã€ãã©ãªWakefulBroadcastReceiverã®è£å©ã¯ã©ã¹ã«ãã£ãŠæ±ºå®ãããŸãã
äœã¡ã¢ãªãã©ãŒ
æšæºã®Linuxã«ãŒãã«ã«ã¯Out of Memory Killerããããbadnessãã©ã¡ãŒã¿ãŒã«åºã¥ããŠã匷å¶çµäºããããã»ã¹ã決å®ããŸãã
badness_for_task = total_vm_for_task / (sqrt(cpu_time_in_seconds) *
sqrt(sqrt(cpu_time_in_minutes)))
ãããã£ãŠãããã»ã¹ãã¡ã¢ãªãããå€ãæ¶è²»ãã寿åœãçãã»ã©ã幞éã¯å°ãªããªããŸãã
ããã¥ã¡ã³ããèªãã ããã€ã³ã¿ãã¥ãŒã«åæ Œãããã¹ãŠã®ããã°ã©ããŒã¯ããŸãããã»ã¹ãã殺ããããšãã§ãã次ã«ç¡æã®ãªãœãŒã¹ãããå Žåã¯ãä»ã®åºæºã«åŸã£ãŠã¯ã©ãŠãã¢ãŠãã®åè£ãéžæããããšãç¥ã£ãŠããŸãããã©ã€ããAndroidã³ã³ããŒãã³ãã®ååšãå¯èŠæ§ãŠãŒã¶ãŒãªã©ã
ã¡ã«ããºã ã¯éåžžã«åçŽã§ãïŒåããã»ã¹ã«ã¯-17ãã16ãŸã§ã®åªå 床ãå²ãåœãŠãããŸãããåªå 床ãé«ãã»ã©ããã»ã¹ã匷å¶çµäºããå¯èœæ§ãé«ããªãã空ãã¡ã¢ãªã®éã«å¿ããŠãããã»ã¹ãå®äºããåªå 床ãéžæãããŸãã åªå é äœã¯ProcessList.javaã§èª¬æãããŠããŸãã èå³æ·±ãããšã«ãHOME_APP_ADJããŒã ç»é¢ã¢ããªã±ãŒã·ã§ã³ã®åªå é äœã¯éåžžã«é«ãã§ãããç§ã¯èããŸããïŒãªããããåžžã«åèµ·åããã®ã§ããïŒ
é åmOomAdjããã³mOomMinFreeLow / mOomMinFreeHighã¯ãããã€äœãã¯ãªã¢ãããããšããã«ãŒã«ãèšå®ããã ãã§ãã
private final int[] mOomAdj = new int[] {FOREGROUND_APP_ADJ, VISIBLE_APP_ADJ, PERCEPTIBLE_APP_ADJ, BACKUP_APP_ADJ, CACHED_APP_MIN_ADJ, CACHED_APP_MAX_ADJ}; private final long[] mOomMinFreeHigh = new long[] {49152, 61440, 73728,86016, 98304, 122880};
ãããã£ãŠãããŒã ç»é¢ã¢ããªã±ãŒã·ã§ã³ã¯ãç»é¢ã«1280x800ã®RAMãš700 MBã®RAMãæã€73728 KBã®æ®ãã®ç©ºãã¡ã¢ãªã§åŒ·å¶çã«åé€ãããŸãã
updateOomLevelsã¡ãœããã§ç¢ºèªã§ããããã«ãProcessListã¯å¯Ÿå¿ããå€ãã«ãŒãã«ã«æž¡ããŸãã
ããã»ã¹ã®åªå é äœã¯ã Activity Managerãä»ããŠéä¿¡ã§ããå€ãã®ã·ã¹ãã ãµãŒãã¹ã®1ã€ã§ããActivity ManagerãµãŒãã¹ã«ãã£ãŠèšå®ãããŸãã
ãã€ã³ããŒ
Binder㯠ãä»ã®ãœãªã¥ãŒã·ã§ã³ïŒãã¡ã€ã«ãã·ã°ãããœã±ããããã€ããã»ããã©ãå ±æã¡ã¢ãªãªã©ïŒãšãšãã«ãããã»ã¹ééä¿¡ã®åé¡ã解決ããŸãã ãã®ãœãªã¥ãŒã·ã§ã³ã®èã¯OpenBinderãããžã§ã¯ãããçºå±ãããã®éçºè ã¯äžåºŠã«AndroidããŒã ã«åãæ¿ããŸããã
Bionic ïŒlibcå®è£ ïŒã¯System V IPCã䜿çšããŸãããããã¯ãAndroidç°å¢ã§ã¯æšæºããŒã«ããªãœãŒã¹ãªãŒã¯ãåŒãèµ·ããããã§ãã
æ©èœïŒ
- ãããŒå¶åŸ¡ïŒAIDLããµããŒããããµãŒãã¹ã¯ãã«ãã¹ã¬ããç°å¢ã§åäœããªããã°ãªããªãããšã¯èª°ããèŠããŠããŸãïŒã ã¹ã¬ããã®æ倧æ°ã¯15ïŒ ProcessState.c ã open_driverã¡ãœããïŒã§ãããããäžå¿ èŠãªå¿ èŠããªãéãããã€ã³ããŒã¹ã¬ããã倧éã«ãããã¯ããªãã§ãã ããã
- ãã€ã³ããŒã æ»äº¡ãžã®ãªã³ã¯ ããªããžã§ã¯ããä¿æããããã»ã¹ã®æ»äº¡éç¥ã¡ã«ããºã ã ããšãã°ã Window Managerã¯ããããä»ããŠãã¢ããªã±ãŒã·ã§ã³ã®çµäºã«ã€ããŠåŠç¿ããããã«é¢é£ä»ããããŠãããŠã£ã³ããŠãåé€ããŸãã ãŸãã LocationManagerã¯ããã¹ãŠã®ãªã¹ããŒãæ»äº¡ãããšãGPSåä¿¡æ©ãžã®åãåãããåæ¢ããŸãã Lowmemorykillerã¯æºè¶³ããŠããŸãã :)
- 2ã€ã®åŒã³åºãã¢ãŒãïŒããããã³ã°ãšãã³ããããã³ã°ïŒçéïŒã åè ã®å ŽåãåŒã³åºãã¹ã¬ããã¯ãããã¯ãããã¡ãœããããã³ãã©ãŒããã»ã¹ã®ã¹ã¬ããã§åŠçãããã®ãåŸ ã¡ãŸãã ããã°ã©ãã¯ãã€ã³ããä»ããŠã¡ãœãããåŒã³åºãã ãã§ããã©ãããã©ãŒã ã¯ã¹ã¬ããã®çžäºäœçšãåŠçããŸãã
- ã»ãã¥ãªãã£ã®ããã«UIDãšPIDãæž¡ããŸãã ã·ã¹ãã ãµãŒãã¹ã¯ãããããä»ããŠãåŒã³åºãå ããã»ã¹ã«èŠæ±ãããã¢ã¯ã·ã§ã³ãå®è¡ããæš©å©ããããã©ãããå€æããŸãã
- Javaããã°ã©ããŒã®å Žåããã€ã³ããŒãã©ã³ã¶ã¯ã·ã§ã³ã§åŒã³åºããJavaã¡ãœããã«å€æããããã®ãããã·ãšã¹ã¿ããäœæããããã®ããŒã«ã
LocationManagerã®äŸã§ãããã©ã®ããã«æ©èœããããèŠãŠã¿ãŸãããã

GPSæ å ±ãååŸãããå Žåã次ã®ããšãèµ·ãããŸãã
- ã¢ããªã±ãŒã·ã§ã³ã¯ãLocationManagerã§é©åãªã¡ãœãããåŒã³åºããŸãã
- LocationManagerã¯ãJavaã¡ãœãããšãªããžã§ã¯ãããã€ã³ããŒãã©ã³ã¶ã¯ã·ã§ã³ã«å€æãããããã·ãªããžã§ã¯ããžã®åŒã³åºããå§ä»»ããŸãïŒ locationManagerã®ãããã·ãªããžã§ã¯ãã¯mServiceã§ãïŒã
- ãã©ã³ã¶ã¯ã·ã§ã³ã¯ã«ãŒãã«ãã©ã€ããŒã«éä¿¡ãããã«ãŒãã«ãã©ã€ããŒã¯.LocationManager.Stubããç¶æ¿ããLocationManagerServiceã«ãªãã€ã¬ã¯ãããŸãã
- .LocationManager.Stubã¯éã®åŠçãè¡ããŸãããã©ã³ã¶ã¯ã·ã§ã³ãJavaã¡ãœããã®åŒã³åºãã«å±éããŸãã
- .LocationManagerServiceã¯èŠæ±ãåŠçããŸãïŒããšãã°ãGPSãã©ã€ããŒã䜿çšããŠïŒã
- ã¹ã¿ããªããžã§ã¯ãã¯å¿çããã©ã³ã¶ã¯ã·ã§ã³ã«ããã¯ããããã»ã¹ã¯å察æ¹åã«é²ã¿ãŸãã
- ãã©ã€ããŒã¯å¿çãéãè¿ããŸãã
- ãããã·ãªããžã§ã¯ãã¯ãã¡ãœããåŒã³åºãã®çµæãJavaãªããžã§ã¯ãã«è§£åããŸãã
ã芧ã®ãšãããã·ã¹ãã ãµãŒãã¹ã¡ãœããã®åŒã³åºãã®èåŸã«ã¯ããªãå€ãã®ããžãã¯ãé ããŠããŸãã
ã¢ã·ã¥ã¡ã
å¿åå ±æã¡ã¢ãªïŒashmemïŒ-å ±æã¡ã¢ãªã¡ã«ããºã ã Linuxã§ã¯ãååãšããŠããã®ã¡ã«ããºã ã¯POSIX SHMãä»ããŠå®è£ ãããŸãã Androidéçºè ã¯ããããååã«ä¿è·ãããŠããªããšèãããã«ãŠã§ã¢ã®æã«æž¡ãå¯èœæ§ããããŸãã ashmemã®æ©èœã¯ããªã»ããæã«å ±æã¡ã¢ãªã解æŸã§ããåç §ã«ãŠã³ã¿ãŒïŒããšãã°ã䜿çšããŠãããã¹ãŠã®ããã»ã¹ãå®äºãããšã¡ã¢ãªã解æŸãããïŒãããã³ã·ã¹ãã ã«ååãªã¡ã¢ãªããªãå Žåã®å ±æé åã®åæžã§ãã
ashmemã®äœ¿çšäŸãšããŠã¯ãzygoteããã»ã¹ããããŸãããã®ããã»ã¹ã§ã¯ãDalvik VMã®éå§ããŒãžã§ã³ã«åºæ¬ã¯ã©ã¹ãšãªãœãŒã¹ãããŒããããæ®ãã®ã¢ããªã±ãŒã·ã§ã³ã¯ãã®ã¡ã¢ãªãåç §ããã ãã§ãã
ãã€ã³ããŒã«ã¯1 MBã®ãã©ã³ã¶ã¯ã·ã§ã³ãµã€ãºå¶éããããŸãïŒããã§ãªãå Žåã TransactionTooLargeExceptionãã¹ããŒãããŸãïŒã ããããã»ã¹ããå¥ã®ããã»ã¹ã«å€§éã®ããŒã¿ã転éããå¿ èŠãããå Žåã¯ã Ashmemã䜿çšã§ããŸããMemoryFileãäœæãããã¡ã€ã«èšè¿°åãå¥ã®ããã»ã¹ã«è»¢éããŸãã
ãã¬ãŒ
éåžžãåŸæ¥ã®ãã£ã¹ããªãã¥ãŒã·ã§ã³ã§ã¯ãdmesgã³ãã³ãã§ã¢ã¯ã»ã¹ã§ããã«ãŒãã«ãã°ãšãéåžž/ var / logãã£ã¬ã¯ããªã«ããã·ã¹ãã ãã°ã®2ã€ã®ãã°ã·ã¹ãã ã䜿çšããŸãã
Androidã·ã¹ãã ã«ã¯ããŠãŒã¶ãŒããã°ã©ã ã®ã¡ãã»ãŒãžãæ ŒçŽããããã®åŸªç°ãããã¡ãŒãããã€ãããïŒèªã¿æžããµã€ã¯ã«ãç¡é§ã«ãªããªããããã¡ã¢ãªã«ãŒãã®å¯¿åœã延ã³ãŸãïŒãæšæºsyslogã§äœ¿çšããããœã±ããã®æäœã«ããè¿œå ã®é 延ã¯ãããŸããã

ãã®å³ã¯ãäžè¬çãªAndroidãã®ã³ã°ã·ã¹ãã ã瀺ããŠããŸãã ãã®ã³ã°ãã©ã€ããŒã¯ã/ dev / log / *ãä»ããŠåãããã¡ãŒãžã®ã¢ã¯ã»ã¹ãæäŸããŸãã ã¢ããªã±ãŒã·ã§ã³ã¯çŽæ¥ã¢ã¯ã»ã¹ããããšã¯ã§ããŸããããliblogã©ã€ãã©ãªãä»ããŠã¢ã¯ã»ã¹ããŸãã liblogã©ã€ãã©ãªã¯ã Log ãSlog ãããã³EventLogã¯ã©ã¹ãšéä¿¡ããŸã ã adb logcatã³ãã³ãã¯ããã¡ã€ã³ããããã¡ãŒã®å 容ã衚瀺ããŸãã
ãããã«
ãã®èšäºã§ã¯ãLinuxã·ã¹ãã ãšããŠã®Androidã®æ©èœã®ããã€ããç°¡åã«èª¿ã¹ãŸããã ã·ã¹ãã ãµãŒãã¹ãã·ã¹ãã ã¹ã¿ãŒãã¢ããããã»ã¹ãªã©ããã©ãããã©ãŒã å šäœã®éèŠãªåŽé¢ã ãã§ãªããäžéšã®ãã®ä»ã®éšåïŒpmemãRAMã³ã³ãœãŒã«ãªã©ïŒãæ¬åŒ§ã®å€ã«æ®ããŸããã ãã®ãããã¯ãèå³æ·±ãå Žåã¯ã次ã®èšäºã§ããããæ€èšããŸãã