FreeBSD kernel
编程分配内存可以参考这两篇文档:MALLOC(9)和CONTIGMALLOC(9)。需要注意以下几点:
(1)在中断上下文中使用malloc
系列分配内存函数时,要使用M_NOWAIT
标记;
(2)contigmalloc
有一个boundary
参数:
If the given value “boundary” is non-zero, then the set of physical pages cannot cross any physical address boundary that is a multiple of that value.
举个例子,如果boundary
设置为1M
,则实际分配的物理内存页面可以位于0
~1M
,1M
~2M
,而不能位于1.9M
~2.1M
。