linux 内核获取时间,Linux内核中的jiffies 以及时间的获取time
硬件給內(nèi)核提供一個(gè)系統(tǒng)定時(shí)器用以計(jì)算和管理時(shí)間,內(nèi)核通過(guò)編程預(yù)設(shè)系統(tǒng)定時(shí)器的頻率,即節(jié)拍率(tick rate),每一個(gè)周期稱(chēng)作一個(gè)tick(節(jié)拍)。Linux內(nèi)核從2.5版內(nèi)核開(kāi)始把頻率從100調(diào)高到1000(當(dāng)然帶來(lái)了很多優(yōu)點(diǎn),也有一些缺點(diǎn)).
jiffies是內(nèi)核中的一個(gè)全局變量,用來(lái)記錄自系統(tǒng)啟動(dòng)一來(lái)產(chǎn)生的節(jié)拍數(shù)。譬如,如果計(jì)算系統(tǒng)運(yùn)行了多長(zhǎng)時(shí)間,可以用 jiffies/tick rate 來(lái)計(jì)算。jiffies定義在文件中:
extern unsigned long volatile jiffies;
可以利用jiffies設(shè)置超時(shí)等,譬如:
unsigned long timeout = jiffies + tick_rate * 2; // 2秒鐘后超時(shí)
if(time_before(jiffies, timeout){
// 還沒(méi)有超時(shí)
}
else{
// 已經(jīng)超時(shí)
}
內(nèi)核提供了四個(gè)宏來(lái)比較節(jié)拍計(jì)數(shù),這些宏定義在文件中:
time_before(unknown, known)
time_after(unknown, known)
time_before_eq(unknown, known)
time_after_eq(unknown, known)
比較的時(shí)候用這些宏可以避免jiffies由于過(guò)大造成的回繞問(wèn)題。
除了系統(tǒng)定時(shí)器外,還有一個(gè)與時(shí)間有關(guān)的時(shí)鐘:實(shí)時(shí)時(shí)鐘(RTC),這是一個(gè)硬件時(shí)鐘,用來(lái)持久存放系統(tǒng)時(shí)間,系統(tǒng)關(guān)閉后靠主板上的微型電池保持計(jì)時(shí)。系統(tǒng)啟動(dòng)時(shí),內(nèi)核通過(guò)讀取RTC來(lái)初始化Wall Time,并存放在xtime變量中,這是RTC最主要的作用。
===================================
struct timeval tv;
do_gettimeofday(&tv);
總結(jié)
以上是生活随笔為你收集整理的linux 内核获取时间,Linux内核中的jiffies 以及时间的获取time的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 基于Redis、Storm的实时数据查询
- 下一篇: 基础总结