티스토리 뷰
◆ 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로 메모리 해제
오늘은 일단 여기까지만 포팅.. 시간 있을때 마다 덧붙임 예정입니다..
'개발 > Linux' 카테고리의 다른 글
Why do a lot of #defines in the kernel use do { ... } while(0)? (0) | 2013.05.09 |
---|---|
커널에서 사용 가능한 DNS 개수? (0) | 2012.06.27 |
UTC (Universal Time Coordinated) (0) | 2012.03.13 |
file_operations - compat_ioctl() (0) | 2012.03.07 |
likely, unlikely (0) | 2011.12.27 |
댓글
최근에 올라온 글
최근에 달린 댓글
글 보관함
- Total
- Today
- Yesterday