Introduce
PMEM (physical memory map ping feature)은 잘 쓰이지 않고 각종 vendor에서 PMEM-like한 것들을 새로 구현하여 사용하기 시작했습니다.
그래서 Android Platform 진영에서 fragmented memory manager를 하나로 통합하고자 Android 4.0 (Ice Cream Sandwich)에서 ION memory manager로 대체 하기로 결정했습
PMEM (physical memory map ping feature)은 잘 쓰이지 않고 각종 vendor에서 PMEM-like한 것들을 새로 구현하여 사용하기 시작했습니다.
그래서 Android Platform 진영에서 fragmented memory manager를 하나로 통합하고자 Android 4.0 (Ice Cream Sandwich)에서 ION memory manager로 대체 하기로 결정했습니다. 각 vendor사들은 PMEM-like interface는 NVIDIA "NVMAP", TI OMAP "CMEM", Qualcomm MSM "PMEM"을 사용했습니다. 그러다가 ION으로 전부 교체했습니다.
user-space와 kernel-space간의 인터페이스를 요악합니다. ION은 memory pool manager가 되고 ION의 client간의 buffer들을 공유할 수 있도록 합니다.
ION heaps
ION은 하나 이상의 memory pool을 관리합니다. 이 중에 일부는 fragmentation을 방지하고 특별한 hardware의 요구사항에 맞춰 boot time에 미리 설정 해놓을 수도 있습니다.
예를 들면, GPU, display controller, camera 들이 있다. (이들은 대게 특별히 그 디바이스에 맞게 할당된 memory 영역이 있다. 그것을 ION을 통해서 관리 가능하다). 기본적으로 제공되는 heap type 이외에 특정 device를 위한 ion heap type을 설정해서 사용할 수 있는데 이런 경우 꼭 제공해야하는 callback 을 구현해줘야 한다. 그 callback 은 다음과 같다.
file location : drivers/gpu/ion/ion_priv.h
struct ion_heap_ops {
int (*allocate) (struct ion_heap *heap,
struct ion_buffer *buffer, unsigned long len,
unsigned long align, unsigned long flags);
void (*free) (struct ion_buffer *buffer);
int (*phys) (struct ion_heap *heap, struct ion_buffer *buffer,
ion_phys_addr_t *addr, size_t *len);
struct scatterlist *(*map_dma) (struct ion_heap *heap,
struct ion_buffer *buffer);
void (*unmap_dma) (struct ion_heap *heap,
struct ion_buffer *buffer);
void * (*map_kernel) (struct ion_heap *heap,
struct ion_buffer *buffer);
void (*unmap_kernel) (struct ion_heap *heap,
struct ion_buffer *buffer);
int (*map_user) (struct ion_heap *heap, struct ion_buffer *buffer,
struct vm_area_struct *vma);
};
'개발 이야기' 카테고리의 다른 글
[파이썬 완전정복] 제어문-반복문 [2] (0) | 2020.05.21 |
---|---|
[파이썬 완전정복] 제어문 - 반복문 [1] (0) | 2020.05.21 |
HAL 유형 (0) | 2020.05.12 |
Origin HAL Interface (0) | 2020.05.12 |
[파이썬 완전정복] 제어문 - 조건문 (0) | 2020.05.10 |