linux核心提供3個函式分別進行納秒,微妙和毫秒延時:
void ndelay(unsigned long nsecs);
void udelay(unsigned long usecs);
void mdelay(unsigned long msecs);
這3個函式的延時原理是忙等待,也就是說在延時的過程中並沒有放棄cpu,根據cpu的頻率進行一定次數的迴圈。
在核心中對於毫秒級以上的延時,最好不要直接使用mdelay函式,這將無謂的浪費cpu的資源,對於毫秒級以上的延時,核心提供了下列函式:
void msleep(unsigned int millisecs);
unsigned long msleep_interruptible(unsigned int milosecs);
void ssleep(unsigned int seconds);
注:受系統hz以及程序排程的影響,msleep類似函式的精度是有限的。
1 長延時
在核心中,乙個直觀的延時的方法是將所要延遲的時間設定的當前的jiffies加上要延遲的時間,這樣就可以簡單的通過比較當前的jiffies和設定的時間來判斷延時的時間時候到來。針對此方法,核心中提供了簡單的巨集用於判斷延時是否完成。
time_after(jiffies,delay); /*此刻如果還沒有到達延時的時間,則返回真,否則返回0*/
time_before(jiffies,delay);/*如果延時還沒有完成,則返回真,否則返回0*/
下面兩個函式可以將當前程序新增到等待佇列中,從而在等待佇列上睡眠,當超時發生時,程序將被喚醒:
sleep_on_timeout(wait_queue_head_t *q, unsigned long timeout);
interrupt_sleep_on_timeout(wait_queue_head_t *q, unsigned long timeout);
Linux核心的延時函式
第一類延時函式原型是 忙等 標頭檔案是 include void ndelay unsigned long nsecs void udelay unsigned long usecs void mdelay unsigned long msecs 說明 核心函式 ndelay,udelay,以及 m...
Linux核心中的延時函式
第一類延時函式原型是 忙等 標頭檔案是 include void ndelay unsigned long nsecs void udelay unsigned long usecs void mdelay unsigned long msecs 說明 核心函式 ndelay,udelay,以及 m...
linux 使用者空間 和 核心空間 延時函式
2011 06 19 15 28 22人閱讀 收藏舉報 使用者空間 1.unsigned int sleep unsigned int seconds sleep 會使當前程式休眠seconds秒。如果sleep 沒睡飽,它將會返回還需要補眠的時間,否則一般返回零。2.void usleep uns...