時間管理

鏈接:https://blog.csdn.net/yhb1047818384/article/details/69811542
linux內(nèi)核筆記之時間管理(二) : 低精度timer
## linux 內(nèi)核筆記之時間管理(三) : 高精度timer

時間獲取
驅(qū)動程序中一般不需要知道墻鐘時間(也就是年月日的時間)。但驅(qū)動可能需要處理絕對時間。
為此,內(nèi)核提供了兩個結(jié)構(gòu)體,都定義在
(1) struct timeval {
time_t tv_sec; /* seconds /
suseconds_t tv_usec; /
microseconds /
};
(2)采用秒和納秒值保存時間。
struct timespec {
time_t tv_sec; /
seconds /
long tv_nsec; /
nanoseconds */
};
(3)用do_gettimeofday()用于獲得timeval

include <linux/time.h>

void do_gettimeofday(struct timeval *tv);
(4) current_kernel_time() 用于獲得timespec

include <linux/time.h>

struct timespec current_kernel_time(void);

(5)rtc_time_to_tm(unsigned long time, struct rtc_time *tm) 將上面獲得的sec轉(zhuǎn)換為年月日...

include <linux/rtc.h>

延遲操作
1.長延遲
(1)忙等待
如果對延遲的精確度要求不高,最簡單的方法是實現(xiàn)一個監(jiān)視jiffies計時器的循環(huán)。
unsigned long delay = jiffies + 5*HZ;
while(time_before(jiffies, delay))
cpu_relax();
(2)超時

include <linux/sched.h>

signed long schedule_timeout(signed long timeout);
timeout是用jiffies表示的延遲時間,正常值返回0.
schedule_timeout在使用前需要設(shè)置當(dāng)前進程狀態(tài)。
set_current_state(TASK_INTERRUPTIBLE);
schedule_timeout(2HZ); / 睡2秒 */
進程經(jīng)過2秒后會被喚醒。
第一行調(diào)用set_current_state已設(shè)置當(dāng)前進程狀態(tài),調(diào)度器只有在超時到期且其狀態(tài)為TASK_RUNNING時才會運行這個進程。如果不希望被用戶空間打斷,可以將進程狀態(tài)設(shè)置為TASK_UNINTERRUPTIBLE。
(3)讓出處理器
while(time_before(jiffies, j1))
schedule();
在等待期間可以讓出處理器,減少CPU的負(fù)擔(dān)。
2.短延遲
對于那些最多幾十個毫秒的延遲,不需要依賴時間滴答

include <Linux/delay.h>

void ndelay(unsigned long nsecs); /*延遲納秒 /
void udelay(unsigned long usecs); /
延遲微秒 /
void mdelay(unsigned long msecs); /
延遲毫秒 */
這三個延遲函數(shù)均是忙等待函數(shù),在延遲過程中無法運行其他任務(wù)。 它們的實現(xiàn)使用了軟件循環(huán)。
實現(xiàn)毫秒級(或者更長)延遲還有一種方法,這種方法不涉及忙等待

include <Linux/delay.h>

void msleep(unsigned int millisecs); /休眠毫秒 /
void ssleep(unsigned int seconds); /
休眠秒 /
unsigned long msleep_interruptible(unsigned int millisecs);/
休眠毫秒,中斷可以喚醒
/

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容