Dalvik Virtual Machine ㍳
㫆㡗䞚, ῢ㣿㧎, 㟧㔏㭖, ⺇㥺䦻
㍲㤎╖䞯ᾦὋὒ╖䞯㩚₆䅊䜾䎆Ὃ䞯
e-mail : ypcho, yikwon, sjyang@sor.snu.ac.kr, ypaek@snu.ac.kr
Analysis of Dalvik Virtual Machine
Yeongpil Cho, Yongin Kwon, Seungjun Yang, Yunheung Paek Dept. of Electrical Engineering, Seoul National University
殚檃
䡚㨂 㓺Ⱎ䔎䙆㠦㍲ Ṗ㧻 ⍦Ⰲ 㝆㧊⓪ OS ⓪ 㞞✲⪲㧊✲㧊┺. 㞞✲⪲㧊✲⓪ 㡺䝞 ㏢㓺 䝢⨁䙒 㧊₆ ➢ⶎ㠦 㧊⯒ 㑮㩫䞮㡂 ₆㫊 ₆㑶㦚 Ṳ㍶䞮Ệ⋮ ㌞⪲㤊 ₆㑶㦚 Ṳ䞮⩺⓪ 㔲☚Ṗ Ⱔ㧊 㧊⬾㠊 㰖ἶ 㧞┺. 㧊⯒ 㥚䟊 䞚㑮㩗㦒⪲ 㔲䟟䟊㟒 䞶 ộ㧊 Dalvik Virtual Machine 㦚 ㍳䞮⓪ 㧧㠛㧊┺. 㧊 㠦, ⽎ 㡆ῂ⓪ Dalvik Virtual Machine 㦮 㭒㣪 㣪㏢⯒ ㍳䞮㡖┺.
1. 昢嵦
㾲⁒ IT ㌆㠛㦮 ⶊỢ㭧㕂㦖 㓺Ⱎ䔎䙆㠦 ⏩㡂㧞┺.
㌂㔺 ὒỆ㠦☚ 㥞☚㤆 ⳾㧒㧊⋮ 㕂゚㞞㦚 OS 㺚㣿 䞲 㓺Ⱎ䔎䙆㧊 㫊㨂䟞㦒Ⳇ, ⁎ 㧊㩚㠦⓪ 㥞☚㤆 CE
⋮ Ⰲ㓺⯒ ₆㦒⪲ 䞮⓪ PDA (Persnal Digital Assistant)Ṗ 㫊㨂䞮㡖┺. 䞮㰖Ⱒ 㧊✺㦮 㔲㧻 䕢 ⩻ 㦖 䡚㨂㦮 㓺Ⱎ䔎䙆㠦 ゚䞮㰖 ⴑ䟞┺.
2007 ⎚ 㞚㧊䙆㦮 㿲㔲⓪ 㓺Ⱎ䔎䙆 㔲㧻㠦 ㌞⪲㤊 䕾⩂┺㧚㦚 㩲㔲䞮㡖┺. 㼁 ⻞㱎⓪ UX (User Experien- ce)⯒ 䌫㦒⪲ 䞮⓪ ㌂㣿㎇ ṫ䢪㧊Ⳇ, ⚦ ⻞㱎⓪ 㓺 Ⱎ䔎䙆 OS 㢖 㟇㦚 䌫㦒⪲ 䞮⓪ ECO 㔲㓺䎲㧊┺.
㧊⩂䞲 䕾⩂┺㧚㦖 㔲㧻㠦 ㎇Ὃ㩗㦒⪲ 㩫㹿䞮Ợ ♮㠞 㦒Ⳇ, 㑮 Ⱔ㦖 ₆㠛✺㧊 䕾ῢ㦚 ⏎Ⰲἶ 㔲㧻㠦 㰚㿲 䞮Ợ ♮㠞┺.
⁎Ⱂ1 㓺Ⱎ䔎䙆 OS ⼚ 㔲㧻 㩦㥶㥾[1]
⁎Ⱂ 1 㠦 2010 ⎚ 䎆 2011 ⎚ ₢㰖 㭒㣪 㓺Ⱎ䔎䙆 OS 㦮 㔲㧻㩦㥶㥾㧊 ⋮䌖⋮㧞⓪◆, 㧊⯒ ⽊Ⳋ 㞞✲⪲
㧊✲㦮 㔲㧻 㩦㥶㥾㧊 ∎㭖䧞 ⏨㞚㰖⓪ ộ㦚 䢫㧎䞶 㑮 㧞┺. 㧊⩂䞲 ộ㠦⓪ Ⱔ㦖 㧊㥶Ṗ 㧞Ỷ㰖Ⱒ, Ṗ㧻
䋆 㤦㧎㦒⪲⓪ 㞞✲⪲㧊✲Ṗ 㡺䝞 ㏢㓺 OS ⧒⓪ 㩦㦚
✺ 㑮 㧞┺.
㧊㻮⩒ 㞞✲⪲㧊✲㦮 㔲㧻 㩦㥶㥾㧊 ⏨㞚㰦㠦 ➆⧒
㞞✲⪲㧊✲⯒ ₆㦒⪲ 䞮⓪ 㑮Ⱔ㦖 㦧㣿ὒ ₆⻫㧊 Ṳ♮ἶ 㧞㦒Ⳇ, 㧊⩂䞲 Ṳ㦚 㥚䟊 㞞✲⪲㧊✲㦮
⌊ ῂ㫆, 䔏䧞 Dalvik VM (Virtual Machine) 㦮 ῂ㫆
⯒ 䕢㞛䟊㟒 䞶 䞚㣪㎇㧊 㧞┺. ➆⧒㍲ ⽎ 㡆ῂ⓪ Dalvik VM㦮 ῂ㫆⯒ ṗ 㣪㏢ ⼚⪲ ㌊䘊⽊₆ 㥚䟊, Ⲓ 㩖 2 㧻㠦㍲ Dalvik VM 㧊 ⶊ㠝㧎㰖 ㌊䘊⽊ἶ, 3 㧻㠦
㍲ Dalvik VM 㦮 㭒㣪 㣪㏢⯒ ㍳䞲 ⛺, 4 㧻㠦㍲ Ⱎ ⶊⰂ⯒ 䞶 ộ㧊┺.
2. Dalvik VM
⁎Ⱂ 2 㞞✲⪲㧊✲ 䝚⩞㧚㤢䋂[2]
⁎Ⱂ 2 㠦 ⋮䌖⋮ 㧞⓪ ộ㻮⩒, DVM (Dalvik VM)㦖 㞞✲⪲㧊✲ 䝚⩞㧚㤢䋂㦮 ⩆䌖㧚 䢮ἓ㦚 ╊╏䞮ἶ 㧞
┺. DVM 㦖 JVM (Java Virtual Machine)ὒ 㥶㌂䞮㰖Ⱒ ⳝⳝ 㹾㧊㩦㦚 Ṗ㰖ἶ 㧞┺.
제37회 한국정보처리학회 춘계학술대회 논문집 제19권 1호 (2012. 4)
- 45 -
DVM JVMs DEX code Java Bytecode Register based Stack Based Concurrent GC Various GCs
䚲2 DVM ὒ JVM ゚ᾦ
3. Dalvik VM 汞 渂殚 殚暒 把昣
(1) Ⲫ⳾Ⰲ 䞶╏
DVM 㦖 Ⲫ⳾Ⰲ ὖⰂ⯒ 㥚䟊 ⌊㩗㦒⪲ mspace ⯒
㌂㣿䞮ἶ 㧞㦒Ⳇ, 㧊✺ mspace 㭧 GC (Garbage Collection)㦮 ╖㌗㧊 ♮⓪ mspace ⯒ GcHeap 㧊⧒⓪ 㧦⬢ῂ㫆⪲ ὖⰂ䞮ἶ 㧞┺. DVM 㠦㍲ GcHeap 㠦 Ⲫ⳾
Ⰲ⯒ 䞶╏䞶 ➢ ㌂㣿䞮⓪ 䞾㑮⓪ dvmMalloc(size, flag) 㧊Ⳇ, 㧊⓪ ṳ㼊⋮ ⺆㡊㦮 䞶╏ ❇㠦 ⍦Ⰲ ㌂㣿♲┺.
Ⲫ⳾ⰂṖ 㫇䞮㡂 䞶╏㠦 㔺䕾䞶 ἓ㤆 dvmMalloc 㦖 㤆㍶㩗㦒⪲ GC ⯒ 䢎㿲䞮㡂 soft/weak/phantom ⩞䗒⩆
㓺⯒ 㩲Ệ䞲┺. ⁎ 䤚㠦☚ 䞶╏㠦 㔺䕾䞶 ἓ㤆 GC ⯒ 䢎㿲䞮㡂 finalizable ⩞䗒⩆㓺⯒ 㩲Ệ䞮Ợ ♮Ⳇ, Ἒ㏣
䟊㍲ 䞶╏㠦 㔺䕾䞶 ἓ㤆 GcHeap 㦚 䢫㧻䞮Ợ ♲┺.
(2) 㓺⩞✲ 䞶╏
㞞✲⪲㧊✲㠦㍲ ㌂㣿♮⓪ ⳾✶ 㓺⩞✲⓪ Ⰲ㓺㠦 㰗㩧 ὖⰂ♮⓪ 㓺⩞✲㧊Ⳇ, 㓺⩞✲⓪ 㟇㠦㍲ Java API
⯒ 䐋䟊 䞶╏䞮⓪ 㔳ὒ DVM ⌊㠦㍲ 䞶╏䞮⓪
㔳㧊 㧞┺. DVM ⌊㠦㍲ 㓺⩞✲⯒ 䞶╏䞶 ἓ㤆㠦
⓪ dvmCreateInternalThread(pthread_t, name, func, func_a- rgs)⯒ 䐋䟊 䞶╏䞮Ợ ♲┺. 䞶╏♲ 㓺⩞✲⓪ DVM ⌊
㩚㡃 㧦⬢ῂ㫆㧎 DvmGlobals 㠦㍲ threadList ⼖㑮
⯒ 䐋䟊 ὖⰂ♲┺. 㧊⯒ 䐋䟊 GC ⯒ 㑮䟟䞶 ➢, 䔏㩫 㓺⩞✲⯒ 㩫㰖䞮⓪ ❇㦮 㧧㠛㦚 䞶 㑮 㧞┺.
(3) 䋊⧮㓺, Ⲫ㏢✲ resolve
DVM 㠦㍲ ṳ㼊⯒ ㌳㎇䞮₆ 㥚䟊㍲⓪ 䟊╏ ṳ㼊㦮 䋊⧮㓺Ṗ resolve ♮㠊 㧞㠊㟒 䞲┺. Ⱎ㺂Ṗ㰖⪲, DVM 㠦㍲ 䔏㩫 䋊⧮㓺㦮 Ⲫ㏢✲⯒ 䢎㿲䞮₆ 㥚䟊㍲⓪ 䟊
╏ Ⲫ㏢✲Ṗ resolve ♮㠊 㧞㠊㟒 䞲┺. DVM 㦖 resolve
⯒ 䐋䟊 䟊╏ 䋊⧮㓺 Ⲫ㏢✲⯒ Ⲫ⳾Ⰲ㠦 ⪲❿䞮Ợ
♲┺. resolve 㠦 ㌂㣿♮⓪ 䞾㑮⓪ dvmResolveClass(refe- rrer , classIdx, fromUnverifiedConstant) 㢖 dvmResolve- Method(referrer, methodIdx, methodType)㧊 㧞┺. ⚦ 䞾 㑮㠦 Ὃ䐋㩗㦒⪲ ㌂㣿♮⓪ referrer 㦖 䟊╏ 䋊⧮㓺 Ⲫ㏢✲⯒ 䢎㿲䞮⓪ 䋊⧮㓺⯒ 㦮⹎䞮Ⳇ, resolve 䞾㑮⓪ referrer ⪲䎆 DEX 䕢㧒㦮 㩫⽊ 䋊⧮㓺⪲▪ 㩫⽊
⯒ 䣣✳䞮Ợ ♲┺. ⁎Ⰲἶ classIdx, methodIdx ⓪ DEX 䕢㧒 ⌊, 䟊╏ 䋊⧮㓺 䢏㦖 Ⲫ㏢✲ 㩫⽊Ṗ 㩖㧻♲ 㧎
◇㓺⯒ 㦮⹎䞲┺.
(4) Ⲫ㏢✲ 䢎㿲
Ⲫ㏢✲Ṗ resolve ♮Ⳋ 䢎㿲㦚 䞶 㑮 㧞┺. 㞞✲⪲
㧊✲㠦㍲ Ⲫ㏢✲⯒ 䢎㿲䞮⓪ ⻫㦖 ┺㦢ὒ ṯ㧊 ῂ
䞶 㑮 㧞┺.
(a) 㧎䎆䝚Ⰲ䔎 Ⲫ㏢✲㠦㍲ 㧎䎆䝚Ⰲ䔎 Ⲫ㏢✲ 䢎㿲 (b) 㧎䎆䝚Ⰲ䔎 Ⲫ㏢✲㠦㍲ ⍺㧊䕆ぢ Ⲫ㏢✲ 䢎㿲 (c) ⍺㧊䕆ぢ Ⲫ㏢✲㠦㍲ 㧎䎆䝚Ⰲ䔎 Ⲫ㏢✲ 䢎㿲 㧊㻮⩒ 㹾㧊Ṗ ㌳䞮⓪ 㧊㥶⓪ ṗ Ⲫ㏢✲㦮 㓺䌳 䝚
⩞㧚㧊 㥚䂮䞮⓪ Ὁ㧊 ┺⯊₆ ➢ⶎ㧊┺. 㧎䎆䝚Ⰲ䔎 Ⲫ㏢✲㦮 㓺䌳 䝚⩞㧚㦖 DVM ⌊㦮 Ṗ㌗ 㓺䌳㠦
㌳㎇♮Ⳇ ⍺㧊䕆ぢ Ⲫ㏢✲㦮 㓺䌳 䝚⩞㧚㦖 㧒㩗㧎 㠊㎞な⩂ 䝚⪲㔲㩖㢖 Ⱎ㺂Ṗ㰖⪲ SP (Stack Point)⯒ 䌫㦒⪲ ㌳㎇♲┺. 㧊 ➢ⶎ㠦, (a)㦮 ἓ㤆⓪ DVM 㧎䎆 䝚Ⰲ䎆 ⌊㠦 Ṗ㌗ 㓺䌳 㥚㠦 㓺䌳 䝚⩞㧚㦚 㕩⓪ 䆪✲Ṗ 㫊㨂䞲┺. (b)㦮 ἓ㤆㠦⓪ dvmInvokeMethod(obj, method, argList, params, returnType, noAccessCheck)䞾㑮
⯒ ㌂㣿䞲┺. 㧊➢ obj ⓪ Ⲫ㏢✲⯒ 䢎㿲䞮⓪ ṳ㼊⯒
㦮⹎䞮Ⳇ 㩫㩗 Ⲫ㏢✲⯒ 䢎㿲䞶 ἓ㤆㠦 obj ⓪ NULL 㧊 ♲┺. Ⱎ㰖Ⱏ㦒⪲ (c)㦮 ἓ㤆㠦⓪ JNI 㧎䎆䗮㧊㓺
⯒ ㌂㣿䟊 Ⲫ㏢✲⯒ 䢎㿲䞮Ợ ♲┺.
4. 廎怺庲
DVM 㦮 㭒㣪 㣪㏢⯒ Ṛ⨋䧞 ㌊䘊⽊㞮┺. DVM 㦖 㡂⩂ 㠦㍲ JVM ὒ 㥶㌂䞲 㩦㧊 Ⱔ┺. 㧊⓪ DVM 㧊 ASF (Apache Software Foundation)㦮 㡺䝞 㧦 䝚⪲
㩳䔎㧎 䞮⳾┞[3]⯒ ₆㦒⪲ 䞮㡂 Ṳ♮㠞₆ ➢ⶎ㧊 Ⳇ, 㧊⩂䞲 ₢╃㠦 DVM 㦮 ⳾✶ ㏢㓺䆪✲⓪ 㞚䕢䂮
⧒㧊㍶㓺 ′㩫㦚 䌫㦒⪲ ὋṲ♮㠊 㧞┺. ⁎⩒㠦☚
ῂ䞮ἶ ⳾㧒 䢮ἓ㧊⧒⓪ 䔏㎇㌗ DVM 㦖 Zygote 㦮 ㌂㣿㧊⋮ DEX 䕢㧒㦮 ㌂㣿 ❇ Ⱔ㦖 㠦㍲ ☛ 㺓㎇㦚 ⽊㧊ἶ 㧞┺.
Acknowledgement
⽎㡆ῂ⓪ᾦ㥷ὒ䞯₆㑶/䞲ῃὒ䞯㨂┾㤆㑮㡆ῂ㎒䎆 㥷㎇㌂㠛(ὒ㩲⻞䢎 2012-0000470), 2011 ⎚☚㩫(ᾦ㥷 ὒ䞯₆㑶)㦮㨂㤦㦒⪲䞲ῃὒ䞯㨂┾㦮ῃṖ㰖㩫㡆ῂ㔺
㌂㠛(No.2011-0018609) IDEC 㦮㰖㤦㦚㞚㑮䟟♮㠞 㔋┞┺.
焾処怾竒 [1] Gartner, Inc
[2] http://developer.android.com/guide/basics/what-is- android.html
[3] http://harmony.apache.org/
제37회 한국정보처리학회 춘계학술대회 논문집 제19권 1호 (2012. 4)
- 46 -