(새 문서: 분류: 리눅스 커널 API == 개요 == static __always_inline void *kmalloc(size_t size, gfp_t flags) Kmalloc은 리눅스 커널에서 메모리를 할당시키는 함수이다. kmalloc은 내부적으로 slab cache를 사용하여 메모리를 할당한다. * kmalloc은 vmalloc과는 다르게 physically contiguous한 메모리를 보장한다. * kmalloc은 부팅 시간에는 hugepage로 부팅후에는 4KB page로 할당된다. * 8K보다 큰 메모리는 buddy s...) |
잔글편집 요약 없음 |
||
9번째 줄: | 9번째 줄: | ||
* kmalloc은 부팅 시간에는 hugepage로 부팅후에는 4KB page로 할당된다. | * kmalloc은 부팅 시간에는 hugepage로 부팅후에는 4KB page로 할당된다. | ||
* 8K보다 큰 메모리는 buddy system을 통해서 할당한다. | * 8K보다 큰 메모리는 buddy system을 통해서 할당한다. | ||
== 자주 사용하는 실수들 == | |||
# GFP_ATOMIC과 GFP_KERNEL은 동시에 사용할 수 없다. GFP_KERNEL은 실행이 blocking될 수 있는 일반적인 커널 컨텍스트에서 사용되며, 페이지를 reclaim하거나 I/O 작업을 수반할 수도 있다. 그러나 GFP_ATOMIC은 인터럽트 컨텍스트나 spin_lock이 걸려있는 상태에서 사용되기 때문에, 메모리 할당 요청이 블록킹 되지 않는다. 즉 GFP_KERNEL은 GFP_NON_ATOMIC으로 이해하는 것이 편하다. |
2024년 11월 21일 (목) 08:55 판
개요
static __always_inline void *kmalloc(size_t size, gfp_t flags)
Kmalloc은 리눅스 커널에서 메모리를 할당시키는 함수이다. kmalloc은 내부적으로 slab cache를 사용하여 메모리를 할당한다.
- kmalloc은 vmalloc과는 다르게 physically contiguous한 메모리를 보장한다.
- kmalloc은 부팅 시간에는 hugepage로 부팅후에는 4KB page로 할당된다.
- 8K보다 큰 메모리는 buddy system을 통해서 할당한다.
자주 사용하는 실수들
- GFP_ATOMIC과 GFP_KERNEL은 동시에 사용할 수 없다. GFP_KERNEL은 실행이 blocking될 수 있는 일반적인 커널 컨텍스트에서 사용되며, 페이지를 reclaim하거나 I/O 작업을 수반할 수도 있다. 그러나 GFP_ATOMIC은 인터럽트 컨텍스트나 spin_lock이 걸려있는 상태에서 사용되기 때문에, 메모리 할당 요청이 블록킹 되지 않는다. 즉 GFP_KERNEL은 GFP_NON_ATOMIC으로 이해하는 것이 편하다.