我想实现非繁忙等待机制,以便在linux内核模块中创建以纳秒为单位的延迟。
现在我在看的功能
ndelay(ns);
但是https://www.kernel.org/doc/Documentation/timers/timers-howto.txt
这里提到ndelay函数是一种繁忙等待机制。
但我想要非繁忙的等待延迟。因此,我正在考虑linux内核模块中的nop
,如下所示:
asm volatile ("nop");
我研究过nop需要一个周期才能执行。因此,我将实现嵌套的nop,以获得所需的延迟。我的问题是
通过使用nop,我会以非繁忙等待的方式实现以纳秒为单位的延迟吗?谁能证实一下吗?此外,参考一些期刊和资源也会有所帮助。
顾名思义,"NOP"是一种不会修改机器状态的操作,但这并不意味着处理器在执行NOP时处于空闲或"非繁忙"状态。与任何其他指令一样,NOP在执行时仍然会占用处理器的一些资源。
显然,现代超级流水线处理器很复杂,通常会同时执行许多操作,因此NOP可能会比分支、字符串比较或浮点运算等更复杂的操作使用更少的资源,但假设NOP像你说的那样不忙是不安全的。