2012-03-12 77 views
2

開始體驗一些實時線程。 我只是通過調用usleep(TIME)將我的線程發送到睡眠。 這將保證線程至少睡眠TIME。 我現在用TIME = 10ms進行了測量,得到了一個期望值爲μ= 10,1ms的高斯函數。第二次測量的時間= 1us:我在4us處得到一個大的峯值。正在忙着等待

那麼,爲什麼第二次測量不是高斯?我的第一個想法是,這個線程並沒有真正的睡眠,但它卻讓人忙於等待。如here (old beahavior)所述,沒有忙等待。如何解釋這兩條曲線?

+0

出於興趣,你在運行什麼操作系統來獲得系統定時器的這種分辨率?我見過的最好的是4ms,而不是4us ...... :) – 2012-03-12 13:37:06

+0

你用什麼底層系統實時線程?你見過[RTAI](https://www.rtai.org/)嗎? – Shahbaz 2012-03-12 13:43:02

+0

它是一個xilinx fpga(PPC440),帶有linux 3.0內核 – user1264182 2012-03-12 13:45:38

回答

4

由於定時功能的分辨率。你自己說,它保證當時睡在至少。它不能保證準確睡眠的原因是因爲它很可能以四微秒的間隔運行。

man page也提到這樣的現象:

睡眠可能略有通過任何系統活性,或通過用在處理由系統計時器的粒度呼叫或的時間被延長。

+0

,所以你的意思是(睡覺時1us)沒有其他的活動,除了睡覺和醒來,因爲它沒有延長。 – user1264182 2012-03-12 13:43:58

+0

@ user1264182:可能它是一個實現細節 - 它可能會延遲這樣的延遲,使得它有時會睡4個微秒(例如25%的時間),有時不睡(例如75%的時間)。就我個人而言,我對此表示懷疑,這會爲已經標記爲短時間內不準確的電話帶來不必要的複雜性。可以這麼說,在某個較低的範圍內,無論您要求什麼,您都會等待'X'微秒。 – paxdiablo 2012-03-12 13:48:06

+0

我預計至少會有X us。令人困惑的是,當我的線程正在休眠並且最小的睡眠時間X將被忽略時,沒有其他線程開始。 – user1264182 2012-03-12 14:09:24

1

這可以用函數調用的開銷來解釋,也許是一種等待較小間隔的不同方法。你可以考慮一個不可避免的延遲,但可以減去較大的等待時間。