kernel에서 kmalloc 이용할때

jgm2000의 이미지

char *a

a = kmalloc(1024, GFP_KERNEL);

보통 이렇게 쓰는데요. size는 32 * PAGE_SIZE 인걸로 알고 있습니다.
그렇다면 32 바이트 단위로 할당이 되는겁니까?

아니면

a = kmalloc(21, GFP_KERNEL);
이렇게 해서 21바이트만 할당받고 싶은데..이렇게는 안되나요?

아시는 분계시면 답변부탁드립니다.

swunk의 이미지


kmalloc()함수는 128Kb까지의 임의의 메모리 (연속된) 사이즈를 할당 받는걸로 알고 있는데요...

페이지 단위로 할당 하는거는 alloc_pages() 이고,
커널 오브젝트 단위로 할당 받는거는 kmem_cache_alloc() 이고,

굳이 연속적이지 않은 메모리를 할당 받기위해서는 vmalloc()을 쓰면 됩니다.

맞게 기억하고 있는지 모르겠네요..한번 확인해 보세요...