Bulldozer™
11.08.09
조회 수 3951
추천 수 5
댓글 11


안녕하세요~^^


Bulldozer 입니다 ^^




예전에 제가 개인적으로 Android 에 대해 글을 쓰고 있는 블로그의 글을 3번에 걸쳐서


제 글을 제가 퍼온적이 있었죠? ^^ (기억하시려나... ^^;;)




오랜만에 하나 또 가져왔습니다 ^^


Android Process 와 관련된 내용 중


JNI 와 Zygote process 에 대한 글입니다 ^^




JNI 는 생소하더라도 아마 갤스가 예전 어떤 펌에서 자주 핫리붓을 하던 때가 있었는데


그때 원인 중 하나로 지목됬던것이 Zygote process 라는 부분이었죠~^^




스마트폰에 대해 여러방면으로 맛클에서 발전이 이루어지고 있는데


이런쪽도 관심을 좀 많이 가졌으면 좋겠네요~^^




예전 글도 그렇지만 전 제 블로그 글에 존칭을 쓰지 않습니다 ^^;


이해해 주세요~


혼자 공부한 내용을 적은 것이고


단지 이런 부분에 대해 제가 퍼온 제 글을 읽으시고 이쪽으로도 관심을 가지시는 분들이


생기기를 바라는 마음으로 퍼온것이니까요~^^;




==============================================================================





지난 글에서 init process 에 대해서 정리를 하였다.
처음 시작이었던 booting process 에서 간략히 여러 부분에 대해 적었으며,
init process 에서 init process 가 하는 역할 그리고 중요한 init.rc 에 대해 적었다.

사실 처음 이 쪽 공부에 관심을 갖게 된 이유가 zygote process 때문이었다.
자주 가는 스마트폰 커뮤니티 인 맛클에서 zygote 라는 것이 있다는 것을 알았으며, zygote 가
무엇인지를 그 커뮤니티 안에서 찾아보려 했으나 그 쪽으로는 글이 전무하였다.
그래서 구글링을 통해서 간략히 어떠한 역할을 하는것인지를 알게되었고, 그 관심이 좀 더 커져서
지금처럼 블로그에 안드로이드에 대해서 글을 쓰게 된것이다.

처음에 kernel build 에 관심이 있어서 kenel 에 관한 강좌를 보고 따라하며 zImage 를 추출하는 것까지는
하였으나, 그 이후 좀 더 근본적인 부분에 대한 궁금증이 생겨서 그 쪽 관련한 실제적인 적용 및 결과물 도출은
하고있지 않은 상태이다. 그 쪽으로 계속 관심을 가지고 있었던 사람들은 지금 kernel 을 짜집기하여 본인이
원하는 performance 를 만들어 내고, 순정 kenel 에 init.rc 를 수정하고 원하는 file 을 설치하는 등
한 단계씩 앞으로 나가는것 같다. 빨리 결과물을 만들어 내고 나만의 custom kernel 을 만든다던지,
application 을 만들어 보고 싶은 욕구가 강하지만... 지금은 참고 있다.
하고 있는 이론이나 구조에 대한 공부를 더 완벽히 한 후 실습적인 부분에 착수를 할 생각이다.


*. JNI (java native interface)
여러번 앞서 적었던 글에 적었듯이 안드로이드의 platform 은 java 로만 구성되어 있는것이 아니다.
java 와 C/C++ 기반 module 이 계층별로 구성되어 있다. 하나의 application 을 구동하기 위해서는 java 와 C/C++ 간의
정보 교환
이 필요하다. 간단히 GPS 를 예로 들면, GPS 정보를 요구하는 application 의 경우 이 application 은 java 로
짜여져 있다. 하지만 직접적으로 GPS 정보를 구할 수 있는것이 아니다. 이 application 은 application framework 의
location manager 가 제공하는 java API 를 호출해서 GPS 정보를 얻을 수 있게 되는 것이다. API 의 호출은 framework
내부의 GPS library 를 통해 GPS device driver 에 연결된다. 그렇기 때문에 java 와 C/C++ layer 간에 서로 통신을
가능하게 만들어 주는 무엇인가가 필요하게 된다. 이 때 나오는 개념이 JNI 이다.
즉, java layer 와 C/C++ layer 를 상호 연결하여 정보 교환이 가능하도록 만들어 주는 매개체가 JNI 라는 것이다.
일반적으로 우리가 마켓에서 다운을 받아 사용하는 application 은 android SDK 를 토대로 만들어져 있으며, 이러한
application 은 모두 Dalvik Virtual Machine 위에서 동작하는 java 기반의 program 이다. 일반적으로 java 기반의 program 은
C/C++ 과 같은 native language 로 짜여진 program 보다 처리 속도 등이 느린 단점을 내포하고 있다고 한다. 그래서
일반적이고 공통적으로 사용할 수 있는 driver 등은 모두 nitive language 인 C/C++ 로 짜여져 있으며, API 호출을 통하여
java 기반의 application 에서 사용할 수 있도록 만들어 놓은 것이다.
관련 서적에서는 JNI, NDK 에 대해 아주 상세히 적어 놓았다. source code 를 모두 분석해 놓았으며, java 에서 C library 함수를
호출하여 사용하는 방법까지 기술해 놓았다. 하지만 아직 이쪽으로 지식이 충분하지 못해 완벽히 이해하긴 힘들다.
그래서 이번 글에서는 JNI 의 개념에 대해서만 적는다. 나중에 source code 분석에 익숙해 지고, SDK 로 java 기반의
application 을 간단히나마 짤 수 있을 정도가 되면 그때 글을 업데이트 하던 새로운 글을 적을 생각이다.

*. zygote process
가장 스마트 폰에 대한 기술적인 부분을 다루는 커뮤니티 에서도 기재되어 있는 상세한 내용의 zygote 의 개념을 찾을 수가
없었다. 물론 구글링을 한다면 쉽게 그 개념을 알 수 있다. android system 에서 application 을 실행하면 zygote process 와
결합하여 구동이 된다는 것이 결론이다. zygote 자체에 대해 간단히 짚고 넘어가면 그 개념은 다음과 같다.
zygote 란 application 을 빠르게 구동하기 위하여 미리 fork 되어 있는 process 이다. system 에서 exec() 호출을
통해 특정 application 을 실행하고자 하기 전까지는 중립적인 상태를 유지하며 대기하고 있는 process 이다. 뭐 미리 공통적으로
필요한 libraries 를 탑재한 상태로 반쯤 생성이 되어 application 의 실행에 대비하고 있다는 것이다. 반쯤 생성된 process 에
실제 핵심이 되는 application 의 logic 을 태워 구동시키기 때문에 application 의 구동 속도가 빨라지는 것이다.
이제 zygote process 에 대해 좀 더 자세히 적어보겠다.
zygote process 는 init process 에 의해 구동되어 진다. init process 가 system 구동에 필요한 각 daemon 을 실행하고 나서
실행시키는 process 이다. 그리고 init process 에서 zygote process 가 실행되어지고 난 이후에는 android service 및
application 은 zygote process 를 통해 실행되어 진다. 그리고 여기에서 booting process 에 대한 글에서 적었던
PID 와 PPID 의 개념이 필요하다. adb 로 shell 접속하여 ps 명령을 하면 PID 와 PPID number 를 눈으로 확인할 수 있다.
그 number 의 관계를 통하여 init process 가 생성시킨 process 들과 zygote process 가 생성시킨 process 를 확인할 수 있다.
zygote process 를 통함으로 인해 application 의 구동속도가 빨라지는 내용은 위에 간략하게 적었다. 미리 fork 되어 있으면서
공통의 libraries 등을 탑재하고 있기 때문이라 했는데, 이 부분에 대해 조금 더 자세히 적으면 아래와 같다.
zygote process 가 실행이 되면, Dalvik VM 을 실행시키게 된다. 그런 이후 classes 와 resources 를 preloading 한 상태로 application 의 logic 을 기다리고 있는 것이다. 만약 zygote 의 개념이 없다면 application 은 구동 시에 필요한 모든 classes 와
resources 를 찾아야 하는 delay 가 발생하게 될것이다. 이 부분에서 zygote process 의 필요성이 나타난다.
그리고 zygote 는 java 로 작성된 process 이다. android system 에서 java process 를 실행하기 위해서는 Dalvik VM 이
필요하다. init process 에서 zygote process 를 실행하기 위해서 zygote process 가 생성시키는 Dalvik VM 이외에 별도의
zygote process 용 Dalvik VM 이 필요하다는 것이다. 간단히 서적에 보면 init process 중에 app_process 라는 service 가
존재하며 이 app_process 를 통해 Dalvik VM 을 실행시킨 후 zygote 를 만들어 낸다.

JNI 와 zygote process 의 경우는 좀 더 자세히 적고 싶지만 아직은 지식이 부족한 듯 하다.
source code 를 좀 더 쉽게분석할 수 있게 되었을 때 다시 적어야겠다. 지금은 단지 그 개념에 대해서만 정리를 하였다.
booting process 를 기반으로 이해를 한 후 새부적인 process 로 접근을 하니 개념에 대한 이해는 쉽게 되는 듯 하다.
하지만 역시 자세한 내용을 분석하고 구동 원리를 파악하는 데는 한계가 존재한다...



==================================================================================================

예전에 관련된 android booting process 등의 먼저 올린 글들 링크 입니다 ^^



첫 번째 글 init process-1


http://matcl.com/index.php?mid=freeboard&category=9003&document_srl=2580601





두 번째 글 init process-2


http://matcl.com/index.php?mid=freeboard&category=9003&document_srl=2643307




세 번째 글 Android file system


댓글 11
  • ?
    으아니
    11.08.09
    이 글을 보니 몇년전에 한창 리눅스 공부할 때가 생각이 나는군요^^
    독학하시는건가요? 대단하십니다 ^^;;
  • ?
    시간 나는데로 책보고, 구글링하고, 자양님이나 이카루스님 블로그 글
    읽으면서 공부한 내용을 제 블로그에 정리하고 있어요 ^^

    벌써 시작한지는 6개월 정도 되었네요 ^^
    뭐 사실 이쪽이랑은 전혀 관련없는 사람인지라... 전기쟁이랍니다 저는 ^^;
    힘든 부분도 있지만 재미있네요 ^^

    댓글 감사합니다 으아니님^^
    좋은 밤 되시길 바래요 ^^
  • ?
    잘 읽었어요! 이해는 잘...은 못했지만요 ^^;;
    제가 고3이라 지금은 못하지만, 후에 책도 읽으면서 연구해봐야 겠어요.
  • ?
    쉐리8888
    11.08.10
    전기쟁이시군요.. 저는 땜쟁이 인데 .. ^^;

    저도 최근에 스마트폰을 활용한 Project 를 하고 있는데 ..
    최근에, 커널 관련하여 관심이 있긴한데.. 이게 쉽지가 않네요..

    그냥 천천히 눈요기 하고 있긴한데.. 여간 시간 만드는게 쉽지가 않은..
  • ?
    도봉구청님 댓글 감사합니다 ^^

    시간이 생기면 이런 부분도 관심을 가져보는것도 좋을것 같아요 ^^

    테마적용이나 트러블슈팅같은 부분은
    이미 사실상 맛클 분들은 충분히 부족함이 없는데...
    뭔가 Android 에 대한 근본적인 부분까지 관심을 갖는 분들은 적은듯 하여
    제 개인적으로는 많이 안타까워서 자꾸 이런 글을 올리네요 ^^;

    좋은 하루 보내세요 ^^
  • ?
    쉐리8888 님 댓글 감사합니다 ^^

    땜쟁이라고 하시니... 전 빨래줄~~~ ^^;;

    관심이 좋은 결과를 가져오시길 바랍니다 ^^
    좋은 하루보내세요^^
  • ?
    현재 하는일의 관계상 깊이 들어가지못하는... 어차피 핑계입니다만..^^;;

    불도저님을 통해서.. 많은정보를 알게 되네요~! 너무나도.. 감사드립니다!!
  • ?
    카무이님 댓글 감사합니다~^^
    카무이님 이시라면 다 아는 내용일텐데요~^^;
    암튼 좋은 하루 보내세요~^^
  • ?
    감사합니다!~
  • ?
    감사합니다!~
  • ?
    감사합니다!~
댓글 쓰기 권한이 없습니다.
정렬 목록 검색 쓰기
등록된 글이 없습니다.
1 - 2