리눅스 커널 영역에서는 사용자 메모리 공간을 포인터를 이용해서 메모리를 바로 사용할 수 없다.
따라서 복사해야 한다.
유저영역의 메모리를 커널로 복사하는 함수는 copy_from_user 이다.
이런 불편함때문에 생긴게 mmap 이다. 어플이 메모리를 커널에 바로 메모리를 (zero copy) 잡는다.
안드로이드 ipc에는 이런 코드들이 있다.
binder_wirte_read struct를 을 복사할 때는 copy_from_user, get_user 함수를 이용한다.
transport 하는 데이터는 mmap 으로 관리하도록 되어 있다.
binder_mmap 함수가 바로 그것..
그 안에 binder_update_page_range 함수를 호출하여 물리메모리와 커널의 가상메모리의 수신버퍼, 사용자 공간의 수신버퍼를 매핑한다.
'안드로이드-iOS-Webkit' 카테고리의 다른 글
SurfaceView, SurfaceFlinger, FrameBuffer 링크 모음 (0) | 2012.01.03 |
---|---|
'안드로이드 어플' 다운로드 중에 오류가 발생했습니다 (0) | 2011.12.01 |
안드로이드 binder 정보 (0) | 2011.11.24 |
안드로이드 bind , service , intent , aidl, 시스템 서비스 예제 - 프로세스 통신 (remote) (1) | 2011.11.24 |
안드로이드, 이클립스에서 샘플 예제 보는 방법 (0) | 2011.11.24 |