(미완성)평범한 개발자의 C 프로그래밍 이야기

본 토픽은 현재 준비중입니다. 공동공부에 참여하시면 완성 되었을 때 알려드립니다.

linux kernel - ion에서 사용된 데이터 heap 소개

가장 먼저 볼 것이 ion allocator라는 것입니다.

ion은 드라이버간 혹은 프로세스간에, 아니면 드라이버와 프로세스간에 메모리를 공유할 수 있도록 해주는 드라이버 모듈입니다. 필요에 따라 커널에서 메모리를 할당받을 수도 있고, 커널이 관리하는 메모리가 아닌 영역의 메모리를 할당받을 수도 있습니다. ion의 역할은 자세하게 알 필요는 없고 코드 디자인에 대해서만 알아보겠습니다.

http://lxr.linux.no/linux+v3.16/drivers/staging/android/ion/ion_dummy_driver.c
이 파일이 ion을 사용하는 예를 보여주는 파일입니다. 가장 먼저 보이는게 dummy_heaps라는 배열과 dummy_ion_pdata라는 객체입니다. 뭔가 시리얼 번호 생성에서 비슷한걸 본듯한 기억이 나지 않으세요?
 

 

ion은 heap이라는 서로 다른 특성들을 가진 메모리 풀에서 원하는 힙을 지정해서 메모리를 할당하는 기능을 제공합니다. ION_HEAP_TYPE_SYSTEM, ION_HEAP_TYPE_SYSTEM_CONTIG 등 여러가지 타입이 존재하는데 각기 용도가 다르고 메모리 특성이 다릅니다.

ion_dummy_driver 모듈은 dummy_heaps라는 배열을 만들어서 어떤 타입의 힙을 사용할 것인지를 선언합니다. 이런 힙들의 속성을 struct ion_platform_heap 구조체로 표현합니다.

  37/**
  38 * struct ion_platform_heap - defines a heap in the given platform
  39 * @type:       type of the heap from ion_heap_type enum
  40 * @id:         unique identifier for heap.  When allocating higher numbers
  41 *              will be allocated from first.  At allocation these are passed
  42 *              as a bit mask and therefore can not exceed ION_NUM_HEAP_IDS.
  43 * @name:       used for debug purposes
  44 * @base:       base address of heap in physical memory if applicable
  45 * @size:       size of the heap in bytes if applicable
  46 * @align:      required alignment in physical memory if applicable
  47 * @priv:       private info passed from the board file
  48 *
  49 * Provided by the board file.
  50 */
  51struct ion_platform_heap {
  52        enum ion_heap_type type;
  53        unsigned int id;
  54        const char *name;
  55        ion_phys_addr_t base;
  56        size_t size;
  57        ion_phys_addr_t align;
  58        void *priv;
  59};

type은 이미 정해진 타입들이 있으므로 자신이 사용할 메모리가 어떤 메모리인지를 판단해서 타입에 맞게 ION_HEAP_TYPE_SYSTEM 등을 지정합니다. id는 번호인데 주석에 있는 것처럼 메모리 할당할 때 큰 값을 가진 힙에서부터 메모리 할당을 시도합니다. 그 외의 값들도 힙의 특성에 맞게 설정하면 됩니다.

댓글

댓글 본문
작성자
비밀번호
버전 관리
gurugio
현재 버전
선택 버전
graphittie 자세히 보기