linux kernel: HZ, tick and jiffies

本文深入探讨了Linux内核中与时间相关的关键概念,包括HZ、tick和jiffies,解释了它们的定义、作用及相互关系,并通过实验证明了HZ设置对timer中断频率的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://linux.chinaunix.net/bbs/archiver/tid-985372.html

 

Linux Kernel: 简介HZ, tick and jiffie


               
Linux[/b]核心幾個重要跟時間有關的名詞或變數,底下將介紹HZ[/b]、tick與jiffies。
HZ[/b]
Linux[/b]核心每隔固定週期會發出timer interrupt (IRQ 0),HZ[/b]是用來定義每一秒有幾次timer interrupts。舉例來說,HZ[/b]為1000,代表每秒有1000次timer interrupts。HZ[/b]可在編譯核心時設定,如下所示 (以核心版本2.6.20-15為例):
adrian@adrian-desktop:~$ cd /usr/src/linux[/b]
adrian@adrian-desktop:/usr/src/linux[/b]$ make menuconfig
Processor type and features  ---> Timer frequency (250 HZ[/b])  --->
其中HZ[/b]可設定100、250、300或1000。以小弟的核心版本預設值為250。
小實驗
觀察/proc/interrupt的timer中斷次數,並於一秒後再次觀察其值。理論上,兩者應該相差250左右。
adrian@adrian-desktop:~$ cat /proc/interrupts | grep timer && sleep 1 && cat /proc/interrupts | grep timer
0:             9309306               IO-APIC-edge          timer
0:                    9309562               IO-APIC-edge         timer
上面四個欄位分別為中斷號碼、CPU中斷次數、PIC與裝置名稱。
問題來了,timer interrupt會做哪些事情? 答案如下所列:
[list][*]更新時間、日期與系統從開機至目前經過多少時間 。[*]更新系統資源使用率統計[*]檢查正在執行的程序是否已經超過其所分配的執行時間額度。如果是的話,則侵佔(preempt)該程序以利執行其它 等待執行的程序。[*]檢查軟體時間器(Software timer,如alarm系統呼叫)跟時間延遲函式(Delay function)的延遲時間是否已經超過。[/list]Tick
Tick是HZ[/b]的倒數,意即timer interrupt每發生一次中斷的時間。如HZ[/b]為250時,tick為4毫秒 (millisecond)。
Jiffies
Jiffies為Linux[/b]核心變數(32位元變數,unsigned long),它被用來紀錄系統自開幾以來,已經過多少的tick。每發生一次timer interrupt,Jiffies變數會被加一。值得注意的是,Jiffies於系統開機時,並非初始化成零,而是被設為-300*HZ[/b] (arch/i386/kernel[/b]/time.c),即代表系統於開機五分鐘後,jiffies便會溢位。那溢位怎麼辦? 事實上,Linux[/b]核心定義幾個macro(timer_after、time_after_eq、time_before與 time_before_eq),即便是溢位,也能藉由這幾個macro正確地取得jiffies的內容。

外,80x86架構定義一個與jiffies相關的變數jiffies_64
,此變數64位元,要等到此變數溢位可能要好幾百萬年。因此要等到溢位這刻發生應該很難吧。那如何經由jiffies_64取得jiffies資訊呢?
事實上,jiffies被對應至jiffies_64最低的32位元。因此,經由jiffies_64可以完全不理會溢位的問題便能取得jiffies。

               

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值