DALVIK VIRTUAL MACHINE DD143X KUNGLIGA TEKNISKA HÖGSKOLAN, CSC Handledare Av Cristian Bogdan Aked Hindi Michael Lindblom 840419-3099 850903-0394 0736-861130 0730-517223 aked_player@yahoo.fr lindblom.micke@gmail.com
Sammanfattning Android är ett relativt nytt operativsystem som kämpar för att vinna nya användare och har den sista tiden blivit ett allt mer populärt operativsystem att utveckla programvara på. Utvecklingen av programvara sker i java-miljö, många bibliotek identiska med dem som finns i java SDK 5; dock finns det en hel del skillnader 1. Denna uppsats beskriver Android ur en arkitektisk synpunkt. Hur är Android uppbyggt, har de anpassat arkitekturen för mobila enheter och framför allt, vad är det som skiljer Android jämte mot java under programkörning? Fokus ligger därför på Android är dess Virtual Machine som Open Handset Alliance 2 valt att kalla Dalvik 3. Detta är själva motorn i Android som används när all programvara körs. Optimeringar har gjorts både för att minska minnesanvändningen och processorcyklar; allt för att anpassa Android för den relativt svaga hårdvaran en mobil enhet har idag. Externa resultat 4 visar att dessa optimeringar har gjort nytta. Minnesanvändningen har minskat och det krävs färre klockcyklar då kod körs för Dalvik Virtual Machine. Abstract 1 Ed Burnette. Hello,Android introducing Google s mobile development platform.2010 2 http://www.openhandsetalliance.com/ 3 Namnet är taget från en by på Island där Dan Bornstein, skapare av Dalivks, förfäder en gång levde, 4 Dan Bornstein, Google. Presentation-Of-Dalvik-VM-Internals. 2008-05-29 2
Innehållsförteckning 1. Bakgrund 4 1.1. Android 4 1.2. Java 4 2. State of art 4 3. Vad gör Android speciellt 5 4. Androids arkitektur 6 4.1. Linux Kernel 6 4.2. Native Libraries 6 4.3. Applikationsramverk 6 4.4. Androids livscykel 6 5. Virtual Machine 6 5.1. Stack Virtual Machine 6 5.2. Register Virtual Machine 6 6. Java Virtual Machine 6 6.1. Java Virtual Machine ramverk 6 7. Dalvik Virtual Machine 7 7.1. Dalvik Virtual Machine ramverk 7 7.2. Varför behövs Dalvik 7 8. Metod 7 8.1. Tillvägagångssätt 7 8.2. Egna tester 7 8.3. Jämförelse 7 8.3.1. Arkitektur 7 8.3.2. Minnesanvändning 7 8.3.3. Prestanda 7 9. Resultat 7 9.1. Diskussion 7 10. Slutsats 7 11. Litteratursammanfattning 8 3
1. Bakgrund 1.1. Android Android är ett öppet operativ system för PDA och Smartphones ursprungligen är utvecklat av Google; lansering skedde officiellt den 15 november 2007. Android utvecklas numera av en allians vid namnet Open handset Alliance ; en grupp bestående av 65 framstående teknologiska företag inom mobilteknologi. Android har det senaste året gjort ett starkt avtryck inom den mobila industrin och anses idag vara en stark konkurrent till andra mobila operativsystem såsom Windows mobile, Symbian och Iphone OS. Tillväxten för Android är mycket stark och Android är för tillfället det snabbast växande operativsystemet för smartphones. Detta ger Android en unik och eftertraktad position hos utvecklare som ser möjligheten att lansera program på en reaktivt ny plattform som växer i rasande takt. 1.2. Java Programmeringsspråket Java 5 utvecklades ursprungligen av Sun Microsystems i början av 90 talet och var främst avsett att användas i intelligenta elektroniska komponenter som t.ex. microvågsungar och tvättmaskiner. Språket fick först namnet Oak(efter en ek som växte utanför utvecklarens fönster James Goslings ) men eftersom det fanns ett annat programmeringsspråk med samma namn byttes namnet till Java. Målet med att utveckla Java var att utveckla ett språk som var plattformsoberoende och mer lättanvänt jämfört med C++ konstruktioner som ansågs vara onödigt komplicerade och svåra att använda. Ironiskt nog bygger syntaxen i Java fortfarande på C++. Idag anses Java vara ett av de mest populära 6 programmeringsspråken och används av tusentals programmera världen över. 2. State of art Open handset Alliance har vidtagit flera åtgärden för att göra Android så attraktivt och effektivt som möjligt för att locka till sig programmerare på den kraftigt uppdelade marknaden för mobila operativsystem. Att använda precis samma syntax som Java men att köra den på en egenutvecklad Virtual Machine var ett taktiskt och medvetet val av Google och Open Handset Alliance. Då Java i alla dess former har en mycket stark användarbas kan programmerare runt om i världen utan större ansträngningar lära sig att programmera för Android. Samtidigt har man sett ett behov av att optimera motorn i Java och har därför utvecklat en egen Virtual Machine som Open Handset Alliance valt att kalla Dalvik. På köpet har man också lyckats komma runt licenskraven från Sun då Android inte använder sig av Java Virtual Machine och kan på så sätt erbjuda Android utan licenskostnader. 5 http://sectordata.se/laromedel/java/javasite4_02.html 6 http://www.langpop.com/ 4
Att använda Java som utvecklingsspråk för mobila enheter är dock ingen nyhet. Java ME 7 har länge funnits på marknaden men har aldrig riktigt fått någon genomslagskraft. Detta beror främst på att äldre operativsystem som Symbian, BlackBerry OS och Windows Mobile uppmuntrat utvecklare till att använda programmeringsspråk anpassade för respektive plattform. Suns filosofi och slogan för Java write once, run everywhere har heller inte helt infriats. Olika modeller av mobiltelefoner, till och med från samma tillverkare, har olika implementationer av Java Virtual Machine. Därmed har koden fått anpassats till olika modeller och krånglat till det för utvecklarna i onödan. Med Dalvik Virtual Machine har Open Handset Alliance som avsikt att standardisera och optimera motorn för alla enheter som kör Android. Dalvik Virtual Machine har flera arkitektiska skillnader jämfört med Java Virtual Machine. En av dessa arkitektiska skillnader är den metod Open Handset Alliance valt för att lagra maskinkod i Dalvik. I Java lagras maskinkoden som en stack, den ena instruktionen läggs över den andra som på så sätt länkar ihop koden. Instruktionerna vet precis var nästa instruktion är placerad då instruktionerna systematiskt är placerade intill varandra. I Dalvik har man valt att använda en helt skild metod. Genom att istället använda registers har man helt gått ifrån den till synes mycket enkelt strukturerade maskinkoden java använder sig av. Maskinkoden i Dalvik har ingen inbördes ordning, varje instruktion länkar istället till nästa instruktion med hjälp av en minnesadress. Denna till synes ostrukturerade arkitekturen har flera fördelar och nackdelar som behandlas i avsnitt (5 Virtual Machine) och (6 Metod) Den utan tvekan största konkurrenten för Android är inte Java i dess standardutförande eller mobila versioner som Java ME. Android är främst ett operativsystem riktat till mobila enheter och idag har Apple med sin Iphone 8 en mycket stark användarbas. Iphone använder sig inte av Java utan en special anpassad version av utvecklingsmiljön för Mac OS X Cocoa development, samma utvecklingsmiljö som används för deras stationära och bärbara datorer. Då detta skiljer sig radikalt från den metod Open handset Alliance valt att använda med en specialanpassad Virtual Machine kommer denna uppsats inte ta upp skillnader eller liknelser med hur Iphone fungerar. 3. Vad gör Android speciellt 7 http://www.roughlydrafted.com/2009/11/06/inside googles android and apples iphone os as coreplatforms/ 8 http://developer.apple.com/iphone/index.action 5
4. Androids arktitektur 4.1. Linux kernel Android är ett operativsystem byggt på en mycket stabil grund; Linux kernel. Linus Torvalds, linux grundare, släppte den första versionen av Linux 1991. Idag kan man hitta olika varianter av Linux i allt från de simplaste väckarklockarna till de snabbaste superdatorerna. Tack vare att Android bygger på den mycket flexibla linuxkärnan kan android porteras till flera olika plattformar utan större modifieringar om så behövs. 4.2. Native libraries Lagret ovanför Linuxkärnan innehåller Androids native libraries. Detta är ett delat bibliotek skrivet i C eller C++, kompilerat för den specifika hårdvaran Android enheten använder. Några av de viktigaste biblioteken är följande. Surface Manager(fönster hanterare): Android använder sig av en komposithanterare 9 som på många sätt liknar Compiz 10, men på Android fungerar detta på ett mycket förenklat sätt. Istället för att skriva direkt till skärmens skriv buffer; hamnar alla Fortsättning följer 4.3. Applikationsramverk 4.4. Androids livscykel 5. Virtual Machine 5.1. Stack Virtual Machine 5.2. Register Virtual Machine 6. Java Virtual Machine För att exekvera ett program som är skrivit i Java, behöver man först kompilera koden med hjälp av en kompilator t.ex. javac. Då genereras en bytekod fil med filnamnstillägg class, filen innehåller maskin språk som bara kan exekveras av Java Virtual Machine. Den är plattformsberoende, dvs, en Java virtuel Java motor kan utvecklas till vilken plattform som helst och kan därmed exekveras på alla system som har tillgång till en javainterpreterare. Java virtual maskin är en javainterpreterare som kan läsa, förstå och exekvera bytekoden 11. 6.1. Java Virtual Machine ramverk 9 En fönsterhanterare som använder sig av 3D effekter (http://sv.wikipedia.org/wiki/kompositionshanterare) 10 Vanligt förekommande fönsterhanterare för Linux (http://sv.wikipedia.org/wiki/compiz) 11 Norman Matloff, Thomas Fifield. The Java Virtual Machine. University of California at Davis. 2007 6
7. Dalvik Virtual Machine Dalvik Virtual Machine har många likheter med hur Java Virtual Machine fungerar 12. För att få en Java kod att funka på operativsystemet Android behöver man först kompilera koden med en Java kompilator. Resultatet är en bytekod fill (.class). För att kunna köra koden på en Android enhet behövs filen konverteras till dex fil med hjälp av dx tool som slår ihop alla class filer till en dex fil. Den sist nämnda kan bara exekveras med dalvik virtual machine. 7.1. Dalvik Virtual Machine ramverk 7.2. Varför behövs Dalvik 8. Metod 8.1. Tillvägagångssätt 8.2. Egna tester 8.3. Jämförelse 8.3.1. Arkitektur 8.3.2. Minnesanvändning 8.3.3. Prestanda 9. Resultat 9.1. Diskussion 10. Slutsats 12 Dan Bornstein, Google. Presentation Of Dalvik VM Internals 2008 05 29 7
11. Litteratursammanfattning Hemsidor 1. http://www.mobileburn.com/news.jsp?id=8684 Denna webbsida handlar om Myriad som är den nya Dalvik. Myriad är en turbo version av Dalvik som gör att programmen exekveras snabbare och med mindre minne. 2. Yunhe Shi, David Gregg, Andrew Beatty, M. Anton Ertl. Virtual Machine Showdown: Stack Versus Registers.Department of Computer Science, University of Dublin, Trinity College. I den här rapporten gemförs virtual stack machine s(jvm), Dalvik virtual register machine s(dvm) arkitektur d.v.s. att de tar hänsyn till bytekod storlek, minnesanvändning och prestanda. 3. Norman Matloff, Thomas Fifield. The Java Virtual Machine. University of California at Davis. 2007. Denna uppsats handlar om att beskriva vad en virtual machine är för någonting, vad den används för och om dess arkitektur. 4. Dan Bornstein, Google. Presentation-Of-Dalvik-VM-Internals. 2008-05-29. I den här presentationen ges en definition på vad Dalvik är, vad den används för och systemkrav. 5. http://www.openhandsetalliance.com/ Open Hanset Alliance, organisationen bakom Android, alla utveckling sker numera av OHA. 6. http://sectordata.se/laromedel/java/javasite4_02.html Beskrivande text om Javas ursprung. 7. http://www.roughlydrafted.com/2009/11/06/inside-googles-android-and-applesiphone-os-as-core-platforms/ Jämförelse mellan de vanligaste mobila operativsystemen. 8. http://developer.apple.com/iphone/index.action Iphone s Dev Center, information kring utvekling av applikationer för Iphone. 9. http://www.seminarprojects.com/thread-android-full-report Teknisk rapport, ger detaljerad beskrivning av Android. Böcker 10. Ed Burnette. Hello,Android introducing Google s mobile development platform.2010. I den här boken ges en översikt på Androids arkitektur och flera exempel på hur man utvecklar et program till Android. Den delen som är intressant för rapporten är själva arkitekturen. 8