中断中的资源锁定

埃卢

我有一个内核模块,该模块在数据包路由的不同位置带有netfilter钩子,并且这些钩子使用共享资源。此外,模块具有可写入的char设备,这也会影响这些资源。

我不确定在不同的处理程序访问这些资源时是否需要使用锁。我读到中断无法入睡,这是否意味着我可以保证我的处理程序(钩子和读取处理程序)将一个接一个地执行,还是我需要使用锁来防止从不同的功能同时访问相同的资源?

谢谢。

克里斯·唐纳

取决于您写的内容和使用的数据结构,这很难说,但是:

我读到中断无法入睡,这是否意味着我可以保证我的处理程序(钩子和读取处理程序)将一个接一个地执行,还是我需要使用锁来防止从不同的功能同时访问相同的资源?

虽然确实不允许中断睡眠,但您还必须考虑与此数据结构接口的中断也可以同时在另一个CPU上运行,否则另一个中断可能会堆叠在您正在执行的当前中断之上,从而将其中断暂时关闭CPU。无论哪种情况,您都需要处理死锁情况,以及两个线程竞争写/读的情况。

因此,是的,没有理由仅根据您所写的内容就相信您不需要某种同步机制。根据您的特定情况,如果在该CPU上禁用进一步的中断(例如,在percpu变量的情况下),则可能会发现同步更简单。

适当的机制取决于您所保护的访问权限以及可能要花费的时间和费用,尽管由于您正在执行中断,所以您在一定程度上受到限制,因为您只能选择非阻塞原语。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章