'Dalvik'에 해당되는 글 1건

  1. 2009/03/23 구글의 안드로이드(Android)에 대한 짧은 생각들 (7)

구글의 안드로이드(Android)에 대한 짧은 생각들

|
지난 10회 자바 컨퍼런스에서 "Dolphin-4 Android Run-time (Dalvik VM & Core Lib) 분석"이란 주제로 안드로드이에 관한 세션을 들었습니다.

예전에 모바일 관련 어플리케이션을 개발한 경험이 있는 관계로 임베디드 환경에 상당히 많은 관심을 가지고 있었습니다. 지금은 오래된 일이지만, 아직도 임베디드 환경에서 개발하던 예전 시절을 생각하며, 임베디드 환경에 맞는 어플리케이션을 개발하고 싶은 꿈을 가지고 있었습니다.

마침 들풀이란 닉네임으로 유명하신 양정수님께서 자바 컨퍼런스에서 구글(Google) 안드로이드(Android)의 핵심이라고 볼 수 있는  "Dolphin-4 Android Run-time (Dalvik VM & Core Lib) 분석"에 관한 세션을 진행하셔서 안드로이드에 관한 좋은 설명을 듣게 되었습니다.

역시 구글의 정밀함과 기술력을 확실히 알 수 있는 좋은 세션이었습니다. 몇가지 감명깊에 들은 이야기를 정리하면 다음과 같습니다.



안드로이드의 사상입니다. 모든 플랫폼에서 가장 중요한 것이 사상인것 같습니다. 사상이 바르고 공정해야 그 플랫폼 위에서 움직이는 어플리케이션이 바르고 안정적으로 움직일 수 있습니다.

안드로이드가 뛰어난 플랫폼이라고 생각되는 부분이 바로 이 바르고 공정한 플랫폼이라는 점입니다.
모든 어플리케이션은 동일하다. 안드로이드는 폰의 기본 어플리케이션이나 제3자의 어플리케이션을 차별하지 않는다. 그것이 다이얼하는것이든 또는 홈 스크린이든 교체가 가능하다.
All applications are equal. Android does not differentiate between the phone's basic and third-party applications -- even the dialer or home screen can be replaced.

출처: http://adamac.blogspot.com/2007/12/replacing-android-home-screen.html

안드로이드를 처음 구동하면 홈 스크린(Home Screen)이란 것을 구동합니다. 즉 바탕화면 관리자 정도 되나요? 여튼, 이 홈 스크린을 통하여 다른 어플리케이션에 접근할 수 있습니다. 바탕화면에서 아이콘을 통하여 자신이 원하는 어플리케이션에 접근하는 개념이란 동일하죠..

헌데, 이 홈 스크린도 구글이 제공해주는 것을 사용할 수도 있고, 여러분들이 만든 것을 사용할 수 있습니다.

출처: http://www.jco.or.kr/c?mc=conference&sc=pds 중 "[2009, 10회] Dolphin-4 Android Run-time (Dalvik VM & Core Lib) 분석" 에서


이 스크린 샷이 컨퍼런스에서 본 화면인데요~ 잘 보시면 홈을 선택하게 되어 있습니다. 홈 스크린은 나름대로 중요한 위치에 있는 어플리케이션입니다. 홈 스크린이 고정되어 있다면, 사실 여러분들이 쓰고 싶지 않은 어플리케이션도 홈 스크린에 존재한다는 이유로 써야할 수 있습니다.

대표적으로 원도우스(Windows)에 기본 탑재되었던 인터넷 익스플로러(Internet Explorer)입니다. 이 인터넷 익스플로어는 제 기억에 분명히 넷스케이프보다 성능이 떨어지는 웹 브라우져 어플리케이션이었습니다. 하지만 성능이 떨어져도 기본 탑재되어 있기 때문에 자연스럽게 사용하기 시작했습니다. 넷스케이프는 다시 깔아서 써야 했기 때문이죠. 그 덕분에 인터넷 익스플로러가 세계에서 가장 많이 사용되는 웹 브라우져가 된 것입니다.

홈 스크린에 어플리케이션을 자연스럽게 껴서 넣는다면 자연스럽게 어플리케이션 사용율이 높아질 것이고 해당 분야에 세계 최고의 어플리케이션이 될 수도 있는 것입니다.

하지만, 구글은 역시 구글답게 홈 스크린도 선택하도록 하였습니다. 여러분들이 좋아하는 어플리케이션을 구동하기 쉽도록 재 구성한 홈 스크린을 사용할 수 있다는 것입니다. 아... 얼마나 구글다운 오픈 마인드(Open Mind)입니까?

사실 전 이 사실 하나만으로도 안드로이드의 장래가 매우 밝다고 생각합니다. 모든 것을 열어놓고 시작하는 이 정신이 안드로이드의 가치를 빛나게 해줍니다.



두번째로 재미있는 개념이 Zygote란 개념입니다.

출처: http://www.jco.or.kr/c?mc=conference&sc=pds 중 "[2009, 10회] Dolphin-4 Android Run-time (Dalvik VM & Core Lib) 분석" 에서



상기 그림에서도 설명이 나와 있는데요, 미리 Fork된 프로세스이지만, 마치 빈 껍대기 정도의 상태로 존재하는 프로세스입니다. 그리고 어플리케이션의 Run될때 바로 이 Zygote를 통해서 안드로이드 기반의 프로세스를 바로 실행시키는 구조입니다. 아~ 멋집니다.

미리 공통적으로 필요한 라이브러리들을 탑재한 상태로 반쯤 생성된 프로세스에 실제 핵심이 되는 어플리케이션의 로직을 태워, 해당 어플리케이션을 구동시키는 방법이라고 할 수 있습니다. 당근 어플리케이션 구동 속도가 엄청 빨라지겠죠~

사실 안드로이드에 관심있는 분이라면 한번쯤 들어보셨을 것입니다. 저도 들어는 봤었지만, 정확한 개념이해가 되지 않았는데, 이번 세션을 통하여 명확하게 이해할 수 있었습니다. 아싸~ 하나 건졌다 :-)



또 하나의 재미있는 부분이 달빅(Dalvik)이란 가상머신(Virtual Machine)에 관한 개념입니다.
달빅 자체는 매우 아래와 같은 환경을 고려한 Bytecode Interpreter입니다.
  • Slow CPU (250-500 MHz)
  • RAM Usage : Low-level : 20M, High-level : 24M (system library : 10M)
  • Little RAM (64MB) : Available RAM : 20M
  • Bus speed : 100MHz
  • Data Cache : 16~32K
  • No swap space,  Battery power

역시 혹독한 임베디드 환경을 고려하고 있네요.. 제가 모바일 어플리케이션을 작성할때 환경보다는 조금 나아졌습니다. 8 Gray 폰이나 16Gray 폰에 64Kbyte짜리 어플리케이션을 짜던 환경말이죠..

이러한 느린 CPU위에 돌아간다는 가정하에 달빅이란 가상머신을 돌리기 위한 최적화의 노력이 눈물겹습니다.


상기 Java 코드를 Bytecode로 변환하였을 경우에 Java VM과 Dalvik VM의 차이입니다.
Dalvik VM의인스트럭션이 상당히 적습니다. 즉 CPU가 처리해야 할 일이 그만큼 적다는 의미입니다.

일반적인 Java VM은 스택에 인스트럭션을 쌓아서 하나 하나씩 처리하는 반면, Dalvik VM은 ARM 프로세서에 최적화하여 인스트럭션 수를 줄였습니다. 즉 이터레이션(Iteration)을 한다는 의미인데요, 이터레이션을 할때 스택에 쌓을 것들을 변수로 처리하여, CPU의 연산횟수를 줄이는대신 인자는 늘어나게 됩니다. 결과적으로는 CPU의 처리 사이클이 줄어들게되지만, 스택대신 이터레이션을 사용하므로 Dalvik VM이 각 CPU 프로세서에 최적화되어 있어야 가능합니다.

이런 일들을 멋지게 처리해 놓았습니다. 앞으로 안드로이드의 성능도 좋을 것 같습니다.
이 외에도 여러 재미있는 이야기들을 들었습니다. 깊이있는 내용을 차근 차근히 잘 설명해주신 양정수님에게 감사드립니다.

참고로 양정수님은 Korea Adroid(http://www.kandroid.org)의 운영자이시기도 합니다.

Korea Adroid(http://www.kandroid.org) 에서 2009 제3회 Korea Android 세미나를 준비중이십니다. 이번주 금요일에 있으시니 관심있으신 분들은 언릉 신청하세요~ 저도 가고 싶은 마음은 굴뚝인데.. 회사에 매인 몸이라.. 어떻게 될지 모르겠네요~ :-)
선착순 300명에게는 구글 T셔츠도 준다고 하네요~ 아마 국내 최고의 안드로이드 관련 세미나가 될 것 같습니다.

혹시 다녀오시면 후기도 점 부탁드립니다. ;-)
감사합니다.
저작자 표시
Trackback 1 And Comment 7

Trackback http://blog.java2game.com/trackback/234 관련글 쓰기

  1. Subject pengu♪의 생각

    Tracked from pengu's me2DAY 2010/03/02 10:35 delete

    안드로이드 zygote 달빅 가상머신에 이은 또 하나의 재미있는 아이 'zygote' ㅋㅋ

  1. Favicon of http://greenfrog7.egloos.com greenfrog 2009/03/25 08:10 address edit & del reply

    이제 갓 1년차 개발자로 어려운 내용들이 많아 잘 이해하지는 못하지만 "모든 플랫폼에서 가장 중요한 것이 사상"이라는 말씀이 가슴 깊이 남네요.
    언제나 좋은 내용의 포스팅 잘 보고 갑니다 ^^ 선진님 좋은 하루되세요 ~~~

    • Favicon of http://blog.java2game.com 장선진 jangsunjin 2009/03/25 13:07 address edit & del

      안녕하세요~ greenfrog님 :-)

      제글이 조금이나마 도움이 되셨다니 다행입니다. 좋은 사상을 가지고 계신다면 분명히 좋은 프로그래밍을 하실 수 있으실거라 생각됩니다.

      greenfrog님도 좋은 하루 되시구요~ 언제나 들려주셔서 감사합니다. ;-)

  2. Favicon of http://shinlucky.tistory.com shinlucky 2009/09/13 19:05 address edit & del reply

    zygote찾아보다가 들렸습니다. ^_^
    추가로 이런저런 좋은 정보 잘 보고 갑니다. 감사합니다.~~!

    • Favicon of http://blog.java2game.com 장선진 jangsunjin 2009/09/14 09:30 address edit & del

      안녕하세요~ 도움이 되셨다니 다행입니다.
      앞으로도 종종 놀러와주세요 ;-)

  3. 항기오빠 2010/03/04 09:35 address edit & del reply

    좋은자료라 잘봤습니다 ^^

    궁금한게 있는데요 zygote 프로세스 두번째 그림 화살표의 관계 설명좀 해주실수있나요

    너무궁금해서... 제가 좋은자료라고 다른분들께 소개드렸더니 오히려 저에게 물어보고있어서...ㅎㅎㅎ

    부탁드려요 서비스 매니저라든지 화살표 관계, 바인더 ... 까지 ..좀 ^^;; 가능할까요?

    • Favicon of http://blog.java2game.com 장선진 jangsunjin 2010/03/05 10:06 address edit & del

      안녕하세요~ 장선진입니다. :-)
      사실 본 자료는 들풀 양정수님께서 작성하신 부분이라 제가 설명하는것이 의도에 맞는지 정확히 모르겠습니다.

      제가 아는 수준에서 말씀드리겠습니다.

      아시다피시 Android는 Linux Kernel을 기반으로 만들어진 스마트폰 플랫폼이라고 볼 수 있습니다. 즉, 전체적으로 Linux의 풍부한 라이브러리를 사용하지 않고 Kernel을 바탕으로 기본적으로 필요한 부분만 사용하고 있다고 생각하면 좋을것 같습니다.

      Zygote는 미리 포크된 프로세스입니다. 이 프로세스가 Kernel에서 관리하는 다양한 자원에 연결하거나 프로세스간 연결해서 사용해야 할 부분들이 있을 경우 IPC(Inter Process Communication)를 통하여 지원합니다. 즉 Binder를 관리해야 하구요~ 이러한 Binder를 관리하는 역활이 ServiceManager라고 볼 수 있습니다.

      즉 Zygote라는 프로세스에서 다른 프로세스간 연결을 중간에서 제어하는 역활을 하는 것입니다.

      아마 양정수님께서도 이러한 부분때문에 Zygote에 ServiceManager를 연결하고 Kernel에 Binder Driver를 연결하신 것 같습니다.

      사실 그게 맞구요~

      여튼 대략적인 부분은 다음과 같습니다.

      http://androidenea.blogspot.com/2009/07/system-server-in-android.html 도 참고해보시기 바랍니다.

      그럼 좋은 하루 보내세요~ ;-)
      SystemServer나

    • Favicon of http://blog.java2game.com 장선진 jangsunjin 2010/03/05 10:09 address edit & del

      아~ 그리고 http://makelinux.com/kernel_map 에 있는 리눅스 커널의 관계를 아시면 더 좋습니다~

prev | 1 | next