悟空學Linux專欄----第13篇

  下課之後悟空百思不得其解,爲什麼達人老師要敲他四下,這四下代表了什麼含義呢?悟空想了很久也沒有想明白,這時只聽到外面的打更的人連敲四下。悟空這才恍然大悟,以前菩提老祖敲三下意味着三更給他開小竈,達人敲四下是不是叫我四更去找他啊?想到這悟空立馬向達人家飛奔而去。

  悟空體力比較好,不一會兒就到了,悟空看見達人家裏的燈還開着。這讓悟空感覺自己的猜想是對的,老師果然在等他。悟空按住心裏的喜悅,連敲了幾下們。

  達人(心想這麼晚,誰跑來打擾啊)曰:誰啊?

  悟空曰:老師,我是悟空。

  達人曰:這麼晚找我有事嗎?

  悟空曰:老師,你在我頭上連敲四下,不就是叫我晚上四更來找你嗎?

  達人心想我什麼時候叫你四更來找我,我那是被你給氣的。但是達人卻覺得這樣說會打消悟空學習的積極性,所以達人想想還是默認了悟空的理解,心想或許這也菩提老祖當年的心聲吧。

  悟空曰:老師,白天我還有一個地方不理解,那就是如何將read函數的返回值cycle轉換爲時間t。

  達人曰:t= cycle / F,其中F就是時鐘頻率。

  悟空曰:可是struct clocksource結構體中沒有“F”啊?

  達人曰:雖然計算時間的原理是上面那個公式,但是由於上面那個公式的運算需要使用浮點運算。而Linux內核中是儘量避免使用浮點運算的。

  悟空曰:Linux內核爲什麼要避免使用浮點運算呢?

  達人曰:浮點的編碼跟整數編碼是不一樣的,計算時需要專門的寄存器和浮點計算單元來處理,一個浮點運算指令使用的CPU週期也更長,效率比較低、因此對於內核來說就會想盡量回避浮點數運算。而且在有些嵌入式設備上,並沒有浮點運算單元,如果要實現需要通過軟件模擬的方式實現,這樣會大大的降低CPU的效率。

  悟空曰:那麼Linux內核又是怎麼實現時間計算函數的呢?

  達人曰:Linux內核採用了一種比較巧妙的方法,從而避免了這個問題,爲了實現浮點運算,Linux內核引入了兩個事先計算好的輔助的常數,mlt和shift,並保證這三個常數之間滿足F=(1《shift)/mult關係。所以“t= cycle / F”的公式就巧妙的轉化爲了“t=(cycle * mult)》shift”公式。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章