系統(tǒng)內(nèi)核需要借助硬件設(shè)施來管理時(shí)間,實(shí)時(shí)時(shí)鐘(RTC)是用來持久存放系統(tǒng)時(shí)間的設(shè)備,它由主機(jī)電池供電,因此即使關(guān)閉系統(tǒng),實(shí)時(shí)時(shí)鐘仍然在持續(xù)工作。
成都創(chuàng)新互聯(lián)公司網(wǎng)站建設(shè)提供從項(xiàng)目策劃、軟件開發(fā),軟件安全維護(hù)、網(wǎng)站優(yōu)化(SEO)、網(wǎng)站分析、效果評估等整套的建站服務(wù),主營業(yè)務(wù)為成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作,App定制開發(fā)以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。成都創(chuàng)新互聯(lián)公司深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!當(dāng)系統(tǒng)啟動(dòng)時(shí),系統(tǒng)內(nèi)核從實(shí)時(shí)時(shí)鐘(RTC)讀取實(shí)時(shí)時(shí)間,并將該時(shí)間轉(zhuǎn)換為自 1970 年 1 月 1 日零時(shí)零分零秒以來所經(jīng)歷的秒數(shù)(即 Linux 時(shí)間秒),并將該秒數(shù)保存在系統(tǒng)變量 xtime 中??梢哉f實(shí)時(shí)時(shí)鐘的主要作用就是初始化 xtime 變量。
系統(tǒng)計(jì)時(shí)器系統(tǒng)計(jì)時(shí)器驅(qū)動(dòng)著周期性發(fā)生的事件,在 X86 架構(gòu)的系統(tǒng)中,系統(tǒng)計(jì)時(shí)器通常是一種可編程硬件芯片。系統(tǒng)計(jì)時(shí)器的頻率稱之為節(jié)拍率(tick rate),在內(nèi)核中使用 HZ 變量來表示節(jié)拍率。
對 X86 架構(gòu)系統(tǒng)而言,內(nèi)核版本 2.4 之前,系統(tǒng)計(jì)時(shí)器的節(jié)拍率為 100。自內(nèi)核版本 2.6 開始,系統(tǒng)計(jì)時(shí)器節(jié)拍率設(shè)置為 1000。節(jié)拍率 HZ = 1000 的含義是系統(tǒng)計(jì)時(shí)器每秒鐘可產(chǎn)生 1000 次中斷請求,每一個(gè)計(jì)時(shí)中斷周期稱之為一個(gè)節(jié)拍(tick),也就是說每個(gè)節(jié)拍時(shí)長為 1 秒 / 1000次 = 0.001 秒 = 1 毫秒。節(jié)拍的時(shí)長決定著系統(tǒng)時(shí)間控制的精度,當(dāng)節(jié)拍率從 100 提升到 1000 時(shí),也就意味著系統(tǒng)計(jì)時(shí)器的精度從 10 毫秒提升到了 1 毫秒,這大大提高了系統(tǒng)對時(shí)間驅(qū)動(dòng)事件調(diào)度的精度。而過于頻繁的時(shí)鐘中斷會(huì)不可避免地增加系統(tǒng)計(jì)時(shí)開銷。
系統(tǒng)計(jì)時(shí)器及其計(jì)時(shí)中斷處理程序是 Linux 內(nèi)核管理機(jī)制的中樞,計(jì)時(shí)中斷處理程序會(huì)定期地處理以下事務(wù)(包含而不限于):
更新系統(tǒng)運(yùn)行時(shí)間(uptime) 更新墻上時(shí)間(wall time) 在對稱多處理器系統(tǒng)(SMP)上,均衡調(diào)度各處理器上的運(yùn)行隊(duì)列 檢查當(dāng)前進(jìn)程時(shí)間片(time slice)是否耗盡,如果耗盡,則重新調(diào)度 運(yùn)行超時(shí)的動(dòng)態(tài)定時(shí)器 更新資源耗盡和處理器時(shí)間的計(jì)算 節(jié)拍、節(jié)拍率、節(jié)拍數(shù)運(yùn)行時(shí)的 Linux 內(nèi)核會(huì)周期性地發(fā)出計(jì)時(shí)中斷請求(IRQ),每秒鐘發(fā)出的計(jì)時(shí)中斷請求數(shù)稱之為節(jié)拍率,每次計(jì)時(shí)中斷周期稱之為節(jié)拍,實(shí)際計(jì)時(shí)中斷次數(shù)稱之為節(jié)拍數(shù)。
Linux 內(nèi)核的節(jié)拍率在編譯時(shí)通過變量 HZ 來指定,一般設(shè)置為 100 或 1000,表示每秒中斷 100 次或 1000 次。如果節(jié)拍率設(shè)置為 1000,那么一個(gè)節(jié)拍周期則為 1 秒 / 1000 次 = 1 毫秒。Linux 系統(tǒng)使用變量 jiffies 來記錄系統(tǒng)開機(jī)以來經(jīng)歷的節(jié)拍數(shù),即從系統(tǒng)啟動(dòng)開始,每發(fā)生一次計(jì)時(shí)中斷,jiffies 則加 1。通過計(jì)算 jiffies 所表示的節(jié)拍數(shù),便可得到系統(tǒng)的運(yùn)行時(shí)間。
節(jié)拍數(shù)轉(zhuǎn)換為時(shí)間時(shí)間(秒) = 節(jié)拍數(shù) × 節(jié)拍時(shí)長 = 節(jié)拍數(shù) / 節(jié)拍率
時(shí)間轉(zhuǎn)換為節(jié)拍數(shù)節(jié)拍數(shù) = 時(shí)間(秒) / 節(jié)拍時(shí)長 = 時(shí)間(秒) × 節(jié)拍率
因此若已知系統(tǒng)內(nèi)核 HZ = 1000,jiffies = 1000 時(shí),便可以快速算出系統(tǒng)的運(yùn)行時(shí)間為 jiffies / HZ = 1000 / 1000 = 1 秒。
術(shù)語名詞 | 釋義 | 備注 |
---|---|---|
Real Time Clock (RTC) | 實(shí)時(shí)時(shí)鐘 | |
Wall Time | 墻上時(shí)鐘 | 即當(dāng)前實(shí)時(shí)時(shí)間 |
Uptime | 運(yùn)行時(shí)間 | |
Time Slice | 時(shí)間片 | |
Timer | 計(jì)時(shí)器 | |
Timer Interrupt Request (IRQ) | 計(jì)時(shí)中斷請求 | |
HZ | 每秒計(jì)時(shí)中斷請求次數(shù),也可稱為節(jié)拍率(tick rate) | HZ 值一般為 100, 250, 300 或 1000。最常見的為 1000 和 100。 |
Tick | 節(jié)拍 | Tick 與 HZ 互為倒數(shù),表示單次計(jì)時(shí)中斷的時(shí)長。 |
Jiffies | 節(jié)拍數(shù) | 表示系統(tǒng)開機(jī)以來的節(jié)拍數(shù),即經(jīng)歷的 Tick 數(shù)量。 |
Second (s) | 秒 | |
Millisecond (ms) | 毫秒 | 1s = 1000ms |
Microsecond (us) | 微秒 | 1ms = 1000us |
Nanosecond (ns) | 納秒 | 1us = 1000ns |
Picosecond (ps) | 皮秒 | 1ns = 1000ps |
Linux 內(nèi)核中的 jiffies 及其作用介紹及 jiffies 等相關(guān)函數(shù)詳解
Linux Kernel - Jiffies
Kernel Timer Systems