이 두 함수는 할당 속도가 빠르고 사용법이 간단해 디바이스 드라이버에서 가장 많이 사용된다.

단, kmalloc() 함수를 사용할 때는 할당 가능한 크기가 32 x PAGE_SIZE라는 점을 주의해야 한다. 그리고 메모리의 특성을 주거나 메모리 할당 시점에 처리 방식을 다음과 같은 매개 변수 값으로 줄 수 있다.

GFP_KERNEL
kmalloc() 함수에 사용하는 대표적인 인자값으로, 동적 메모리 할당이 항상 성공하도록 요구한다. 커널이 관리하는 메모리가 충분치 않을 경우에는 디바이스 드라이버를 호출한 프로세스가 수행을 멈추고, 동적 메모리를 할당할 수 있는 상태가 될 때까지 잠든다. 그러다가 다른 프로세스에서 메모리를 반환해 커널이 동적 메모리를 할당할 수 있는 상태가 되면 깨어 난다.

GFP_ATOMIC
커널에 할당 가능한 메모리가 있으면 무조건 할당하고, 없으면 즉시 NULL을 반환한다.

GFP_DMA
연속된 물리 메모리를 할당받을 때 사용한다. 디바이스 드라이버가 작동하는 메모리 공간은 물리적인 메모리가 아닌 가상 주소 메모리다. 프로세스 입장에서 보면 가상 주소 공간이 연속적으로 보여도 실제 물리적 공간은 분할되어 있을 수 있다.

 

+ Recent posts