Dmi*_*nok 5 sleep atomic linux-kernel spinlock
我最近阅读了LDDv3书的第5.5.2节(自旋锁和原子上下文):
在握住锁定时避免睡眠可能会更困难; 许多内核函数都可以睡眠,并且这种行为并不总是有很好的记录.将数据复制到用户空间或从用户空间复制数据是一个明显的例子:在复制可以继续之前,可能需要从磁盘交换所需的用户空间页面,并且该操作显然需要休眠.几乎任何必须分配内存的操作都可以睡眠; kmalloc可以决定放弃处理器,等待更多内存可用,除非明确告知不要.睡觉可能发生在令人惊讶的地方; 编写将在自旋锁下执行的代码需要注意您调用的每个函数.
我很清楚自旋锁必须始终保持最短的时间,我认为从头开始编写正确的自旋锁代码相对容易.
但是,假设我们有一个大型项目,其中螺旋锁被广泛使用.我们怎样才能确保从自旋锁保护的关键部分调用的函数永远不会睡觉?
提前致谢!
小智 5
如何为内核启用"Sleep-inside-spinlock checking"?当您运行make config时,通常可以在Kernel Debugging下找到它.您可能还尝试在代码中复制其行为.
| 归档时间: |
|
| 查看次数: |
6199 次 |
| 最近记录: |