안드로이드 사용자 모임 게시판
(글 수 3,442)
아무리 안드로이드를 들여다 봐도, 별로 구글 답지 않은 모습때문에 굉장히 실망입니다.. 그냥 대학원생들이 텀 프로젝트 하듯이 만든것 같다는 느낌이랄까요.. 일단, 안드로이드의 파티션과 구조에 대해서 대강 설명해 보겠습니다..
/system
/cache
/data
/sdcard
가 주요 디렉토리입니다.. /system이 시스템 커넬과 펌웨어가 깔려 있는 핵심입니다.. 이 파티션은 Read only로 설정되어 있어서, 어떻게 부술 방법이 없습니다.. 그게 한 140메가 됩니다.. 라이브러리라던가 이것 저것 여기 다 깔려 있습니다..
/cache디렉토리는, 업데이트 할때 update.zip을 다운받는 용로로 사용됩니다. 시스템 캐쉬 운운하는 글들을 찾으실수 있는데, 뻥입니다.. 이 파티션이 제일 맘에 안 듭니다. 크기가 90메가나 되는데, 사용이 안됩니다.. 물론 90메가나 되는 이유는 update.zip을 문제없이 받을수 있도록 하기 위해서랍니다.. (2.0.1에서 2.1로 가거나 3.0으로 가는것 같이)
/data에 유저 인스톨 어플과, 실행 데이터, 그리고 dalvik-cache가 들어갑니다.. 여기서 유저 앱은 /data/app에 들어가고, 실행 데이터는 /data/data디렉토리에 들어갑니다.. 여기서 각각의 어플은 독자적으로 디렉토리를 만드는데, 예를 들면 gmail은 com.google.android.gm이란 서브 디렉토리를 만듭니다. 이때 각각의 어플 디렉토리는 유저 아이디와 그룹 아이디가 달라서, Super User권한을 가진 어플이 아닌한, 다른 어플의 데이터를 건드릴수 없습니다.. 기본적인 보안이 유지되는 이유죠..
어플 디렉토리는 대게, cache, databases, lib그리고 files등의 디렉토리를 공통적으로 가집니다.. cache가 캐쉬고, databases는 메일의 메일함 같은겁니다.. 모든 어플들이 별도로 cache디렉토리를 데이터 파티션에 가지고 있습니다. /cache를 사용하는게 아닙니다..
dalvik-cache는 Dalvik VM이 실행하기 위해서 사용하는 바이너리입니다.. apk에 비해서, index를 사용하여 메모리 액세스 하는걸 시간을 줄이기 위해서, 절대 번지 액세스 방식으로 바꾼것이라고 합니다.. 대충 apk와 비슷한 용량을 가집니다.. 이 Dalvik cache파일인 obex때문에, 1메가짜리 어플을 깔면 2메가를 잡아먹습니다.. 하지만 런처가 어플을 표시할때 정보를 apk에서 읽어옵니다.. 뭐.. 하나로 통일해서 용량을 줄이던가, 실행할때 사용할것도 아니면서 용량만 잡아먹습니다.. 이 디렉토리에는 유저가 깐 어플의 cache만 들어가는게 아닙니다.. 시스템 어플의 vm도 들어가죠.. /data파티션이 256MB인데, 실제 256MB가 안되는건 시스템 어플에서 비롯된 dalvik cache때문입니다..
그래서, 안드로이드를 사용하기 시작하면, 두가지 방식으로 용량을 잡아먹는데요, dalvik cache가 용량을 키우고, 어플에서 생성하는 데이터와 캐쉬가 용량을 먹기 시작합니다.. 그리고, 플래시 메모리의 특성상, 용량이 작아지면 질수록 퍼포먼스가 기하급수적으로 떨어집니다.. 100메가남아있을때랑 20메가 남아 있을때의 성능이 다릅니다..
자, 요즘 이슈가 되는 SKAF같은 경우, System 파티션에 깔면 됩니다.. 2.0.1기준으로 한 50메가쯤 남아 있으니, 20메가짜리 SKAF가 깔린다고 별 무리가 있을리 없습니다.. 여전히 30메가나 남아 있죠..
그리고, 요즘 SD로 App을 깔수 있게 구글이 해결해 줄것으로 기대하는데, FAT32로는 안됩니다.. FAT32에선 퍼미션을 제대로 지원하지 않기 때문에, 기본적인 보안성을 유지할수 없습니다. 해커가 특정 코드를 집어 넣어서 다른 어플의 디렉토리를 뒤지는것, 예를 들면, Personal Assistant같이 금융 정보를 저장하는 어플을 건드리게 되는걸 막을수가 없습니다.. 결국, ext2로 동작하는 가상 파티션을 만들거나, 아니면 SD를 Linux FS로 포맷해야 하는데, 그걸 리콜하지 않고, update.zip안에 들어있는 스크립트로 하기엔 너무 위험 부담이 큽니다.. 데이터를 임시 저장고로 옮기고, 포맷하고 이런 복잡한 과정을 실행하다 잘못해서 데이터 날아가면, 유저들의 그 원성을 어떻게 감당할수 있겠습니까.. 가상 파티션을 만들거나, 포맷을 새로 하거나, 다이나믹하게 용량을 변경할수 있는건 아니라서, 1기가로 잡던 2기가로 잡던 결국 용량 제한은 또 생깁니다..
기술적으로 힘든건 아니지만, 깔끔한 해결책도 없습니다.. 그리고, OMAP이란 걸출한 CPU를 제대로 사용도 못하고 있는 안드로이드를 보자면.. 아키텍쳐를 150% 깔끔하게 사용하는 애플이랑 경쟁하는게, 회사원이랑 고등학생이랑 싸움하는 느낌이랄까요.. 열정에 가득차고, 숫자가 많은 고등학생이긴 하지만, 일처리가 깔끔하지 못하는건 아마추어라서 그런가 느끼고 있습니다..
400메가 짜리 DSP를 놀리고 있는데, AAC Encoding이나, JPEG Encoder그리고, Video Encoding/Decoding하는 데 밖에 사용안합니다.. 이걸 Audio playback하는데 사용했었어야죠.. 그러면 ARM이 무슨 짓을 하던 음악이 끊기는것 따위의 어설픈 결점은 안 나왔을 겁니다.. 지금은 플래시를 액세스 하거나, ARM의 클럭을 변경하거나등, ARM이 시간내에 응답할수 없는 어떤 Task를 실행하는 경우, Audio Codec에 데이터를 줄수 없으니 여지없이 음악이 끊어집니다.. 뭐.. 10~20MIPS만 있으면 되는 Mp3이긴 하지만.. 그래도 사람귀가 소리에 얼마나 민감한데요. 영상은 중뇌가 대강 pre processing해서 대뇌로 보내기 때문에 속이기 쉽지만, 소리는 대뇌가 직접 처리하기 때문에 아주 아주 민감한 감각중 하나입니다.. 애플은, 별도 DSP쓰는걸로 압니다.. 제가 안드로이드 만들었다면 이렇게는 안했을것 같은게 너무 많아요..
2010.02.28 12:05:14
옙.. 바로 말씀하신 바로 그 점이 제가 안드로이드에서 가장 맘에 안 드는 점입니다.. 구글의 자세는 이겁니다.. 우리가 안드로이드라는 그럴듯한 걸 만들었는데, 소스 코드 다 줄테니까 최적화는 너희가 알아서 해.. 우린 몰라.. 그런데, 그 소스 코드를 받은 제조사들은 그런 코드를 최적화해본 경험도 없고, 능력도 없고, 디바이스 드라이버 엮어대는데도 허덕데는 터라, 어떤 제조사던 붕어빵처럼 똑같은 구조를 하고 있죠.. (디바이스 드라이버도 칩 제조사에서 공급하고, 성능 최적화나, 문제가 생기면 제조사 엔지니어 불러다 디버깅 합니다.. 실제로 폰 제조사의 S/W역량이란거 별로 강하지 않습니다.. )
그 덕분에, 넥서스 원에 올린 2.1이.. 학교 다니는 학생이 그럭 저럭 몇개 library짜깁기 해서 (2.0.1에서 가져온) 올렸더니, 2.0.1이 돌아가던 기계가 2.1머신이 되는거죠.. ^^ 구글이 그런 자세로 일관하는 한.. 안드로이드에게 현혹된 유저만 불쌍할 뿐입니다.. 애플이 삼성 프로세서를 정하기 전에, 여러 회사 돌아다니면서 각각의 프로세서를 심각하고 고려할때가 있었는데, 상당히 꼼꼼하게 따져본 다음에 선택했습니다.. 실제로 100%이상 잘 쓰고 있죠..
CPU가 여러개가 있다는 것도 말장난입니다.. 겨우 3개 밖에 없는걸요. 그리고 2개는 같은 회사 제품이라 비슷해요.. 하지만 구글은 그 중에서 최소 공약수를 찾아서, 그것만 지원합니다.. 그러니 ARM에서만 돌아갈밖에요.. 그런데, 쓰레드를 별개로 떼와서 다른 DSP로 올리려고 하면 안드로이드를 얼마나 뜯어고쳐야 할까요? 제 회사 제품은 내부에 프로세서가 3개씩 들어가는 거라, 각 프로세서 간의 통신 때문에 세마포어 문제가 생기거나, 메모리 충돌이 나거나 여러가지 최적화를 하는데 1년씩 걸립니다.. OS도 제 회사가 만들고, 제품도 항상 똑같은 것인데도..
이걸 칩 받아다가, 폰 만들던 모토롤라나 삼성 같은 회사에서, 제대로 된 디버깅 툴도 없이, 최적화를 한다구요? 그것때문에 구글이 못마땅한겁니다.. 내가 소스 줬지? 그러니 잘 해? 말장난입니다..
참 그리고, 캐쉬 파티션 문제도 그렇습니다.. 원래 용도는 여러 어플들의 캐쉬 용도였던것 같은데, 그럴려면, 데이터 파티션에 어플용 데이터 서브 디렉토리를 만들때 캐쉬만 별도로 캐쉬 파티션에 만들거나, 아니면 심볼릭 링크를 걸어줘야 하는데, 이런건 제조사 최적화와 관련 없습니다.. OS내부 처리 방식인걸요.. 이런걸 제조사가 맘대로 바꾸기 시작하면 안드로이드 제품끼리 가장 기본적인 File I/O에서 호환성 문제가 생겨버립니다..
2010.02.28 14:34:06
제가 궁금했던 부분. 답답하지만 전문 지식이 없던 부분을 정확하게 써 주셨네요.
아무래도 좀 방치되는 느낌이랄까 그렇습니다.
시기나 일정도 매우 중요하다 생각합니다.
사용자가 늘어나고 볼멘소리가 여기저기서 나오는데 정작 구글은 조용합니다.
사용자가 느낀 배신감. 선택에 대한 후회가 자리잡힐 즈음엔 행동하고 대응해도 다시 돌리기 힘들죠.
아무래도 좀 방치되는 느낌이랄까 그렇습니다.
시기나 일정도 매우 중요하다 생각합니다.
사용자가 늘어나고 볼멘소리가 여기저기서 나오는데 정작 구글은 조용합니다.
사용자가 느낀 배신감. 선택에 대한 후회가 자리잡힐 즈음엔 행동하고 대응해도 다시 돌리기 힘들죠.
2010.02.28 22:40:34
2.x 버전으로 가면서 최적화가 어느정도 된 것이라 생각했는데.
말씀을 들어보니, 아직 해야할 부분이 많은 것 같네요.
그렇다고, 제조사도 구글도 안드로이드를 버리지는 않겠죠?
제조사는 다른 대체OS 가 등장하면 갈아탈테니, 그전에 구글도 어느정도 자리잡으려고 노력하겠죠.
그 시기가 윈폰7 이 나올 즈음일까요? 그 전에 승부를 봐야 하는 상황? 그러면 그리 시간이 많지는 않겠군요.
말씀을 들어보니, 아직 해야할 부분이 많은 것 같네요.
그렇다고, 제조사도 구글도 안드로이드를 버리지는 않겠죠?
제조사는 다른 대체OS 가 등장하면 갈아탈테니, 그전에 구글도 어느정도 자리잡으려고 노력하겠죠.
그 시기가 윈폰7 이 나올 즈음일까요? 그 전에 승부를 봐야 하는 상황? 그러면 그리 시간이 많지는 않겠군요.
2010.03.01 01:32:21
폰 제조사는, 안드로이드던 아니던 상관없습니다.. 조금더 좋은 OS가 나오고 그게 돈이 될것 같으면 쉽게 옮겨탑니다.. 쉽게 옮겨타기 위해서 안드로이드에 크게 돈 쓸 이유가 없습니다.. 그러니까, 기본적으로 돌아가게끔만 만듭니다.. 모토롤라 CEO가 언급했듯이, 모토롤라도 안드로이드에 별 미련없는것 같습니다.. 만약 윈7이 아주 괜찮아서 잘 팔리면.. 그쪽으로 또 가겠죠.. 윈 7은, MS가 하드웨어 사양을 제한한다고 하니.. 아마 하드웨어 사양에 대한 최적화를 이뤄낼겁니다.. 그게 하드웨어 사양을 제한하는 이유니까요..
2010.03.01 01:33:58
구글의 계획은 sd 카드에 저장되는 어플리케이션을 암호화한다는 것 같던데, 저 경우 fat32 포맷을 바꾸지 않고도 가능할는지... 그렇다면 사용자들이 기존 카드를 포맷하지 않아도 될텐데요. 잘은 모르겠지만, 이래저래 쉽지는 않겠군요.
http://phandroid.com/2010/01/05/application-storage-on-sd-card/
Applications saved to the SD card memory will be encrypted so that it will be incredibly difficult to pirate any applications.Q: Why 512MB for app storage only?
A: They store apps in the internal ROM and not on the SD card now, for piracy reasons, but they will offer an upgrade soon for installing apps on the SD card.
[via Gizmodo]
http://phandroid.com/2010/01/05/application-storage-on-sd-card/
좋은 글 잘 읽었습니다 ^^
몇가지 집고 넘어가야 할 것이 있을 듯합니다.
/data 파티션의 크기는 안드로이드가 정하는 것이 아니라 제조사에서 정하는 것이랍니다.
그러므로 각 세트마다 달라질 수 있을 듯하구요.
위에서 언급한 안드로이드의 /data 파시션이 256M 는 아니라는 것입니다.
그리고, 후반부에 이야기하신 DSP 사용 문제도 각 제조가 혹은 CPU 벤더가 포팅하기 나름이랍니다.
안드로이드가 사용되는 CPU 가 OMAP 만 있는 것도 아니구요.
CPU 벤더가 얼마나 효율적으로 사용하지는 하기 나름이랍니다.
MS CE도 기본구조만 제공하고, HW 관련 포팅 / 옵티마이져는 각 HW 벤더에서 한답니다.