除了内核定时器,有没有办法在设定的时间间隔内重复执行一个功能?

时间:2011-12-17 12:45:48

标签: linux-kernel kernel

我正在编写一个充当内存存储的内核模块。我想每10秒将数据备份到一个文件。我认为内核计时器可以解决这个问题,但我认为使用它太麻烦了,似乎无法使用kthread运行。除了使用内核计时器之外,在设定的时间间隔内重复执行功能的任何更好的方法。请建议我一些更好的方法。如果可能的话,请告诉我更多关于如何实施或给我一些关于它的用法的参考。 谢谢

2 个答案:

答案 0 :(得分:1)

我不认为内核的计时器api使用起来很麻烦,只需要调用2个函数(init_timer()和setup_timer())。请参阅此处以获取示例:http://www.ibm.com/developerworks/linux/library/l-timers-list/index.html?ca=drs-

答案 1 :(得分:1)

您可以查看schedule_delayed_work()中的<linux/workqueue.h>。在您指定的延迟后,它会在流程上下文中运行您的工作项。你需要你的工作函数重新安排自己再次运行(即再次调用schedule_delayed_work()),但这是一个非常标准的事情。

如果你真的想拥有自己的内核线程,可以使用schedule_timeout()来延迟自己10秒钟。或者去睡觉并使用计时器唤醒自己(我同意另一个答案 - 计时器API非常容易使用)。