안드로이드 프레임웍 오버뷰

Android framework

Android JAVA Runtime 구조
    Core library (Java)
    Dalvik VM (JNI)
    Native library + Native service (C/C++)

Dalvik VM
    비표준 JAVA Virtual Machine
    Android SDK로는 Java 소스를 Dalvik용 bytecode로 직접 컴파일이 불가능
    DEX File 포맷의 Application 수행
    DX 툴을 사용하여 자바의 .class 파일을 Dalvik용 bytecode로 변환하여 실행 코드를 생성
    C++ 기반의 Class 보다 작고, 호환성이 좋음
    SUN의 라이센스 정책에 따른 비용을 회피하기 위해 개발
    JAVA는 GPLv2 하의 오픈소스지만 Java ME에서 예외가 발생
    Dalvik VM은 Register-Based Architecture로 모바일 디바이스에 최적화
    Linux Kernel 을 사용하여 프로세스 독립성과 메모리 관리 및 스레딩을 사용할 수 있음
    app_process를 통해 Dalvik VM instance 생성 (Zygote)
    
Android Runtime
    Java Runtime과 동등한 레벨
    JAVA 어플리케이션에서 Libc 기반의 C/C++ Library를 호출할 때 Runtime Library를 호출
    Android 는 Dex.(Dalvik Executables(DEX)) 실행 파일 구조를 사용
    실행 파일이 Symbolic resolution을 통하여 함수를 가지고 있다가 library 호출
    Android Runtime은 Dalvik VM과 Core Libraries 로 구성
    Dalvik VM은 작은 메모리에서도 최적화 되는 Dalvik Executable(.dex) 포맷 파일의 실행을 지원
    Dalvik VM은 스레딩과 저수준의 메모리 관리 지원을 위해 리눅스 커널을 이용

Android system 구조
    Bionic libc
        200Kb 크기로 Glibc의 절반 크기
        개별 프로세스마다 포함되는 부분이므로 제한된 CPU 파워에서 빠른 속도로 동작하기 위함
    EABI (Embedded ABI)
        EABI 지원 컴파일러는 다른 컴파일러에 의해 생성된 코드와 호환 가능한 object code를 생성
        한 컴파일러로 생성한 라이브러리와 다른 컴파일러로 생성한 object code를 링크할 수 있다
        
3rd Party Library
    SurfaceFlinger
        어플리케이션 2D/3D surface들을 frameBuffer에서의 구현을 제공
        2D/3D 하드웨어 가속기를 사용하여 blit, rotate, scale, blend 등의 표현이 가능
    OpenGL ES Library
        하드웨어 기반의 OepnGL 가속 기능을 사용 가능
    OpenCORE 기반의 Media Framework
        오디오 및 비디오와 이미지 코덱을 지원
        Hardware / Software 코덱과 결합하여 사용
            OpenMAX IL 인터페이스를 사용
    AudioFlinger
        어플리케이션에서 오디오 기능 제공
        
HAL (Hardware Abstraction Library)
    안드로이드가 하드웨어에 접근하기 위한 인터페이스
    Kernel drivers와 사용자 drivers가 포함
    안드로이드 만의 독특한 기능 (Binder, PM 등)
    
Kernel patches
    Kernel
        GPL license 기반의 open source 사용
        Linux Kernel Patches
        Patches : ashmem, binder, power manager(5단계), low memory killer, kernel debugger
        ARM EABI 지원
    
    일반 리눅스 커널에 추가된 부분
        Alarm, Low memory killer, Ashmem, Kernel debugger, binder, Power management, logger
        프로세스 관리(Zygote)
        메모리 관리 (Low memory killer) : 프로세스 그룹에 우선순위를 부여, 우선순위가 낮은 그룹을 한번에 해제
        디바이스 드라이버 관리
        파일시스템 관리
        네트워크 관리
        IPC 관리 (Binder, Ashmem)

 

Post Author: TORTUGA

TORTUGA
궁금하신 점은 새로 개편한 홈페이지의 QnA 게시판을 이용해주세요!!!!!!! http://www.hardcopyworld.com/gnuboard5/bbs/board.php?bo_table=qna

댓글 남기기

이메일은 공개되지 않습니다.