티스토리 뷰

개발/Linux

kmalloc, vmalloc...

Jaeyeon Baek 2012. 4. 18. 16:27

kmalloc

 

: 연속적인 메모리 공간 사용

: 최대 32 * PAGE_SIZE(4096byte) = 32*4096byte = 131,072 byte

: 그 이상의 할당을 시도 할 경우 정상적인 예외처리가 지원하지 않는다면 프로그램이 비정상 종료 될 수 있음.

: 이는 미리 slab에 지정 되어 있는 사이즈의 최대 cache가 131,072이기 때문, 즉 include/linux/kmalloc_sizes.h의   편집을 통해 값을 조정 할 수도 있다. (커널에서 확인은 cat /proc/slabinfo)

: 4K가 초과되는 경우 garbage collector가 동작하고 메모리를 더 확보하기 위한 시도가 있다고 하는데 확인 못함

: 함수 형태

static inline void *kmalloc(size_t size, gfp_t flags)
{       
    return __kmalloc(size, flags);
}

: flogs 값

/*
 * Fallback definitions for an allocator not wanting to provide
 * its own optimized kmalloc definitions (like SLOB).
 */
 
/**
 * kmalloc - allocate memory
 * @size: how many bytes of memory are required.
 * @flags: the type of memory to allocate.
 *
 * kmalloc is the normal method of allocating memory
 * in the kernel.
 *
 * The @flags argument may be one of:
 *
 * %GFP_USER - Allocate memory on behalf of user.  May sleep.
 *
 * %GFP_KERNEL - Allocate normal kernel ram.  May sleep.
 *
 * %GFP_ATOMIC - Allocation will not sleep.
 *   For example, use this inside interrupt handlers.
 *
 * %GFP_HIGHUSER - Allocate pages from high memory. 
 *
 * %GFP_NOIO - Do not do any I/O at all while trying to get memory.
 *
 * %GFP_NOFS - Do not make any fs calls while trying to get memory.
 *
 * Also it is possible to set different flags by OR'ing
 * in one or more of the following additional @flags:
 *
 * %__GFP_COLD - Request cache-cold pages instead of
 *   trying to return cache-warm pages.
 *
 * %__GFP_DMA - Request memory from the DMA-capable zone.
 *                                        
 * %__GFP_HIGH - This allocation has high priority and may use emergency pools.
 *      
 * %__GFP_HIGHMEM - Allocated memory may be from highmem.
 *      
 * %__GFP_NOFAIL - Indicate that this allocation is in no way allowed to fail
 *   (think twice before using).
 *
 * %__GFP_NORETRY - If memory is not immediately available,
 *   then give up at once.
 *      
 * %__GFP_NOWARN - If allocation fails, don't issue any warnings.
 *      
 * %__GFP_REPEAT - If allocation fails initially, try once more before failing.
 */

: kfree로 메모리 해제

 

 

vmalloc

 

: 비연속적인 메모리 공간 사용

: kmalloc으로 allocation하지 못하는 size를 지원 할 수 있음,

: 함수 형태

void *vmalloc(unsigned long size)
{
    return __vmalloc(size, GFP_KERNEL | __GFP_HIGHMEM, PAGE_KERNEL);
}

: kmalloc에 비해 메모리 공간 참조가 늦음 (비연속적인 allocation이기 때문에)

: vfree로 메모리 해제

 

 

 

 

 

오늘은 일단 여기까지만 포팅.. 시간 있을때 마다 덧붙임 예정입니다..

 

댓글
최근에 올라온 글
최근에 달린 댓글
글 보관함
Total
Today
Yesterday