'kmalloc'에 해당되는 글 1건

  1. 2012.07.20 kmalloc, cache allocator
리눅스/커널2012. 7. 20. 21:25
cache allocator 의 핵심:
1) 메모리를 각각 다른 사이즈의 오브젝트 들끼리 모아놓은 pool 들로 나누는 것
2) 메모리 할당에 대한 request가 오면 1)에서 맞는 사이즈를 가진 pool을 리턴

이런 pool들을 cache하고 하며 kmem_cache_t 의 타입으로 선언되어 있다. kmem_cache_t에는 cache에 대한 여러가지 정보를 담을 수 있는 변수들이 준비되어 있다.
kmem_cache_create()를 통하여 cache를 생성할 수 있다.
kmem_cache_create()는 caller에서 넘겨중 사이즈만한 cache를 생성하며 cache_cache라는 생성된 cache들의 global list에 넣는다.

cache_cache는 static kmem_cache_t 타입이며 시스템 전반적으로 cache들을 가지고 있다. 따라서 pool이 속해있는 object들의 사이즈는 sizeof(kmem_cache_t) 이다. 시스템 전반에 걸친 cache들에 대한 정보는 /proc/slabinfo에서 볼 수 있다. cache_cache외에도 cache들의 array 형태로 되어있는 일반적인 cache들이 있다. array마다 2배수로 커지는 사이즈 형태이며 각 사이즈별로 2개의 cache(일반 cache, DMA용 cache)가 있다. kmalloc()은 이 일반적인 cache들에서 맞는 사이즈의 cache를 찾고 __kmem_cache_alloc()으로 cache 오브젝트을 caller에게 넘겨주는 일을 한다.
유사하게 kfree() 은 __kmem_cache_free()으로 오브젝트를 cache에 돌려준다.

iPhone 에서 작성된 글입니다.

'리눅스 > 커널' 카테고리의 다른 글

boot memory allocator 의 필요성  (0) 2012.09.04
defunct 프로세스 죽이기  (0) 2012.08.16
리눅스커널 timestamp 찍는 법  (0) 2012.07.18
__user  (0) 2012.07.01
__initcall(), module_init()  (0) 2012.07.01
Posted by code cat