我是Linux内核领域的新手,我有这些(愚蠢)的问题,请帮我正确理解
当前进程休眠时,内核会采取适当的操作来定位一些进程 通过将缓冲区刷新到磁盘或通过从内存交换内存来释放内存 用户流程。
所以(也许)如果内核在执行了上述所有操作后仍然没有足够的内存来满足分配,那么当前进程是否还必须等待它?是否有任何情况下当前进程必须永远等待足够的内存进行分配(我的意思是其他设备,不仅仅是计算机)?
正如我所读到的,GFP_ATOMIC在进程的上下文之外使用""。所以我想这组词的含义是,如果我有一个正常的过程A正在运行
process A
{
command 1;
command 2;
.....;
}
然后我有一个使用GFP_ATOMIC
的中断处理程序B. interrupt handler B
{
command 1;
command 2;
......;
kmalloc ( , GFP_ATOMIC);
......;
}
所以我的当前进程A仍然在没有睡眠的情况下运行,直到它完成并且中断处理程序B中的分配是否成功,中断处理程序B不会影响我的进程A.这是真的吗?
非常感谢你的帮助!
答案 0 :(得分:1)
kmalloc(,GFP_KERNEL)不能永远等待,除非您添加可选标志__GFP_NOFAIL。请注意,在最近的内核上不推荐使用这个。
GFP_ATOMIC仅在原子上下文中使用:这意味着禁用抢占,或禁用中断或在中断上下文(ISR)中。一个简单的规则:只要您有权睡觉,最好使用GFP_KERNEL,否则,您必须使用GFP_ATOMIC。
希望有所帮助。 Aymen。