對 linux 系統來說,時鐘和計時器是兩個十分重要的概念。時鐘反應的是絕對時間,也可認為是實時時間。計時器反應的則是相對時間,即相對於系統啟動後的計時。作業系統核心需要管理執行時間(uptime)和牆上時間(wall time),而核心中大量事務需要由時間驅動。
系統時鐘
系統核心需要借助硬體設施來管理時間,實時時鐘(rtc)是用來持久存放系統時間的裝置,它由主機電池供電,因此即使關閉系統,實時時鐘仍然在持續工作。
當系統啟動時,系統核心從實時時鐘(rtc)讀取實時時間,並將該時間轉換為自 1970 年 1 月 1 日零時零分零秒以來所經歷的秒數(即 linux 時間秒),並將該秒數儲存在系統變數 xtime 中。可以說實時時鐘的主要作用就是初始化 xtime 變數。
系統計時器
系統計時器驅動著週期性發生的事件,在 x86 架構的系統中,系統計時器通常是一種可程式設計硬體晶元。系統計時器的頻率稱之為節拍率(tick rate),在核心中使用 hz 變數來表示節拍率。
對 x86 架構系統而言,核心版本 2.4 之前,系統計時器的節拍率為 100。自核心版本 2.6 開始,系統計時器節拍率設定為 1000。節拍率 hz = 1000 的含義是系統計時器每秒鐘可產生 1000 次中斷請求,每乙個計時中斷週期稱之為乙個節拍(tick),也就是說每個節拍時長為 1 秒 / 1000次 = 0.001 秒 = 1 毫秒。節拍的時長決定著系統時間控制的精度,當節拍率從 100 提公升到 1000 時,也就意味著系統計時器的精度從 10 毫秒提公升到了 1 毫秒,這大大提高了系統對時間驅動事件排程的精度。而過於頻繁的時鐘中斷會不可避免地增加系統計時開銷。
系統計時器及其計時中斷處理程式是 linux 核心管理機制的中樞,計時中斷處理程式會定期地處理以下事務(包含而不限於):
更新系統執行時間(uptime)
更新牆上時間(wall time)
在對稱多處理器系統(smp)上,均衡排程各處理器上的執行佇列
檢查當前程序時間片(time slice)是否耗盡,如果耗盡,則重新排程
執行超時的動態定時器
更新資源耗盡和處理器時間的計算
節拍、節拍率、節拍數
執行時的 linux 核心會周期性地發出計時中斷請求(irq),每秒鐘發出的計時中斷請求數稱之為節拍率,每次計時中斷週期稱之為節拍,實際計時中斷次數稱之為節拍數。
linux 核心的節拍率在編譯時通過變數 hz 來指定,一般設定為 100 或 1000,表示每秒中斷 100 次或 1000 次。如果節拍率設定為 1000,那麼乙個節拍週期則為 1 秒 / 1000 次 = 1 毫秒。linux 系統使用變數 jiffies 來記錄系統開機以來經歷的節拍數,即從系統啟動開始,每發生一次計時中斷,jiffies 則加 1。通過計算 jiffies 所表示的節拍數,便可得到系統的執行時間。
節拍數轉換為時間
時間(秒) = 節拍數 × 節拍時長 = 節拍數 / 節拍率
時間轉換為節拍數
節拍數 = 時間(秒) / 節拍時長 = 時間(秒) × 節拍率
因此若已知系統核心 hz = 1000,jiffies = 1000 時,便可以快速算出系統的執行時間為 jiffies / hz = 1000 / 1000 = 1 秒。
術語名詞
釋義備註
real time clock (rtc)
實時時鐘
wall time
牆上時鐘
即當前實時時間
uptime
執行時間
time slice
時間片timer
計時器timer interrupt request (irq)
計時中斷請求
hz每秒計時中斷請求次數,也可稱為節拍率(tick rate)
hz 值一般為 100, 250, 300 或 1000。最常見的為 1000 和 100。
tick
節拍tick 與 hz 互為倒數,表示單次計時中斷的時長。
jiffies
節拍數表示系統開機以來的節拍數,即經歷的 tick 數量。
second (s)
秒millisecond (ms)
毫秒1s = 1000ms
microsecond (us)
微秒1ms = 1000us
nanosecond (ns)
納秒1us = 1000ns
picosecond (ps)
皮秒1ns = 1000ps
ref.:
Mysql 檢視定時器 開啟定時器 設定定時器時間
1.檢視是否開啟evevt與開啟evevt。1.1 mysql evevt功能預設是關閉的,可以使用下面的語句來看evevt的狀態,如果是off或者0,表示是關閉的。show variables like sche 1.2 開啟evevt功能 setglobal event scheduler 1 ...
定時器 STM32定時器 基本定時器1
我是鼎!定時器時鐘一定要明確其中有哪些變數。上圖為stm407資料手冊摘出來的,可能看不清楚,其實就蘊含了幾點資訊。注意一點,我們看圖2,我們以apb1舉例,上面掛著很多的外設,包括usart1 adc 以及定時器,我們知道apb1上面最高時鐘頻率為84mhz,但是定時器的時鐘是要在此基礎上乘2,也...
Mysql 檢視定時器 開啟定時器 設定定時器時間
1 1.檢視是否開啟evevt與開啟evevt。23 1.1 mysql evevt功能預設是關閉的,可以使用下面的語句來看evevt的狀態,如果是off或者0,表示是關閉的。4 show variables like sche 5 1.2 開啟evevt功能 6 set global event ...