which functions are used for dynamically allocating memory in the kernel?