2016-04-01 58 views
1

我想實現非繁忙的等待機制,在linux內核模塊中創建納秒級的延遲。是不是很忙?

現在我是看着它被提及ndelay函數是忙等待機制的作用

ndelay(ns); 

https://www.kernel.org/doc/Documentation/timers/timers-howto.txt

這裏。

但我想要非忙等待延遲。所以,我想在Linux內核模塊約nop這樣的:

asm volatile ("nop"); 

我已經研究了NOP需要一個週期來執行。所以,我將實現嵌套nop來獲得所需的延遲。我的問題是 -

通過使用nop將我在一個非繁忙的等待方式實現納秒延遲?任何人都可以請確認嗎?另外對某些期刊和資源的參考也會有所幫助。

+0

這是一個循環「無所事事」指令。如果你的CPU發生了一個納秒級的週期時間,那麼是的,nop會是「幾納秒的延遲」。但請注意,基於CPU時鐘速度的延遲會有所不同。一個1ghz的CPU會有1納秒的延遲,而100MHz的CPU會有10納秒。 –

+0

感謝您的評論。但這會造成一個非繁忙的等待延遲? –

+0

我不確定'非忙'對你意味着什麼。根據我的經驗,您要麼忙於等待(重複檢查條件),要麼調用內核函數,以防止線程調度程序在線程滿足條件(如信號量)之前分配時間。根據定義,任何執行的指令都會使CPU保持繁忙。也就是說,你看過「暫停」指令嗎? –

回答

1

正如其名稱所示,「NOP」是一種不會修改機器狀態的操作,但這並不意味着處理器在執行NOP時處於空閒狀態或「非繁忙狀態」。像任何其他指令一樣,NOP在處理器執行時仍然會聲稱處理器的一些資源。

很明顯,現代的超級流水線處理器很複雜,通常會同時執行許多操作,所以它可能會比使用分支,字符串比較或浮點操作等更復雜的操作使用更少的資源,但它並不安全假設NOP不像你說的那樣忙碌。

+0

爲了在內核模塊中實現非繁忙的納秒精度延遲,我還可以做其他任何事情嗎?我沒有想法。 –