커널은 메모리를 page를 단위로 다루며, 이와 관련된 메모리 API들이 있다.
kmalloc은 연속적인 물리 메모리를 할당하기 때문에 메모리 할당 속도가 빠르다. 반면, vmalloc 함수는 물리 메모리에서 연속적이지 않더라도 가상 메모리에서 연속적으로 큰 공간을 할당하기 때문에 느리더라도 메모리를 크게 할당할 수 있다.
커널은 프로세스마다 스택을 생성하여 각 프로세스가 수행할 수 있는 메모리 공간을 할당한다.
일반적으로 프로세스는 User Mode Stack과 Kernel Mode Stack을 각각 가지고 있다.
page를 다루는 커널 모듈을 작성하다 보면, 여러 개의 page를 할당하는 일이 생길 수 있다.
하지만 프로세스에 할당되는 스택의 size(일반적으로 8192kb, 2 pages)는 제한적이기 때문에 Stack guard error를 만날 수 있다.
커널에서 사용되는 Stack Guard Page는 프로세스가 지정된 메모리 공간을 넘지 않도록
stack size의 경계값에 일정한 개수의 page를 할당하고,
이 page에 접근하려 하면 stack guard error를 발생시키는 것이다.
이럴 땐, 동적으로 메모리를 할당하여야 하며, vmalloc을 통해 해결할 수 있다.