linux ns級定時器 Linux 時鐘與計時器

2021-10-16 18:13:17 字數 2181 閱讀 6842

對 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 ...