日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Linux內(nèi)核的“心跳”:jiffies如何為系統(tǒng)計(jì)時(shí)?

jf_44130326 ? 來源:Linux1024 ? 2026-02-04 16:27 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Linux內(nèi)核的世界里,有一個(gè)默默工作的"計(jì)時(shí)器"——jiffies。它不像我們手機(jī)上的時(shí)鐘那樣顯示年月日,卻掌控著內(nèi)核中絕大多數(shù)時(shí)間相關(guān)的操作:從進(jìn)程調(diào)度到設(shè)備驅(qū)動(dòng)的定時(shí)檢查,都離不開它的身影。

今天我們就來揭開jiffies的神秘面紗,再通過一段真實(shí)的網(wǎng)卡驅(qū)動(dòng)代碼,看看它在實(shí)際場景中如何大顯身手。

wKgZO2kal-uAfDWoAAKA2Cna7RQ713.png

一、什么是jiffies?內(nèi)核的"心跳計(jì)數(shù)器"

jiffies本質(zhì)上是一個(gè)全局變量,更形象地說,它是內(nèi)核的"心跳計(jì)數(shù)器"。

當(dāng)Linux系統(tǒng)啟動(dòng)時(shí),jiffies會(huì)被初始化為0,之后每過一個(gè)"時(shí)鐘節(jié)拍"Clock Tick),它的值就會(huì)加1。這個(gè)"時(shí)鐘節(jié)拍"由內(nèi)核常量HZ決定,比如HZ=1000時(shí),每1毫秒就會(huì)產(chǎn)生一個(gè)節(jié)拍,jiffies也就每秒增加1000。

不同系統(tǒng)的HZ值可能不同(常見的有100、2501000),但核心作用不變:用簡單的整數(shù)遞增,記錄系統(tǒng)從啟動(dòng)到現(xiàn)在的"時(shí)間長度"。

二、jiffies為什么重要?內(nèi)核時(shí)間管理的基石

你可能會(huì)問:為什么內(nèi)核不用我們熟悉的"///時(shí)//"來計(jì)時(shí)?

因?yàn)閮?nèi)核需要的是高效、輕量、可移植的計(jì)時(shí)方式。jiffies用一個(gè)整數(shù)遞增實(shí)現(xiàn)計(jì)時(shí),不需要復(fù)雜的日期計(jì)算,在任何硬件上都能穩(wěn)定工作。它主要用于:

?進(jìn)程調(diào)度:決定進(jìn)程何時(shí)被喚醒

?延時(shí)操作:讓程序等待指定時(shí)間

?超時(shí)判斷:檢測(cè)操作是否超時(shí)(比如網(wǎng)絡(luò)請(qǐng)求)

?頻率控制:限制某些操作的執(zhí)行頻率

三、從代碼看jiffies:網(wǎng)卡驅(qū)動(dòng)中的實(shí)際應(yīng)用

下面我們通過一段Realtek 8125網(wǎng)卡驅(qū)動(dòng)的代碼(rtl8125_fiber_link_ok函數(shù)),看看jiffies如何控制光纖鏈路的檢查頻率。

這段代碼的核心功能是:判斷網(wǎng)卡的光纖鏈路是否正常,但為了避免頻繁檢查消耗資源,需要控制檢查頻率(每100毫秒最多檢查一次)。

wKgZO2kal-uAALvvAAGQpynpOf8313.png

關(guān)鍵代碼解析

// 獲取當(dāng)前jiffies值(當(dāng)前"心跳數(shù)")unsignedlongnow = jiffies;// 核心邏輯:如果距離上次檢查還不到100毫秒,直接返回上次結(jié)果if(time_before(now, tp->last_check +msecs_to_jiffies(100))) returntp->last_link_status;// ...省略鏈路檢查邏輯...// 記錄本次檢查的jiffies,用于下次判斷時(shí)間間隔tp->last_check = now;

幾個(gè)關(guān)鍵知識(shí)點(diǎn):

1.msecs_to_jiffies(100):毫秒轉(zhuǎn)jiffies

它的作用是把"100毫秒"轉(zhuǎn)換成對(duì)應(yīng)的jiffies數(shù)。比如HZ=1000時(shí),100毫秒= 100個(gè)jiffies,這個(gè)函數(shù)會(huì)自動(dòng)幫我們計(jì)算。

2.time_before(now, ...):安全的時(shí)間比較

由于jiffies是整數(shù),總有溢出的一天(比如32jiffiesHZ=1000時(shí)約49天溢出)。time_before是內(nèi)核提供的安全比較宏,即使溢出也能正確判斷"現(xiàn)在是否早于某個(gè)時(shí)間點(diǎn)"。

3.頻率控制的邏輯

代碼通過記錄上次檢查的jiffiestp->last_check),計(jì)算與當(dāng)前jiffies的差值,確保每100毫秒內(nèi)最多執(zhí)行一次鏈路檢查。這種"節(jié)流"操作在驅(qū)動(dòng)中很常見,能減少不必要的硬件交互,提升性能。

四、jiffies的小缺點(diǎn)與內(nèi)核的解決方案

jiffies雖然簡單高效,但也有缺點(diǎn):精度受HZ限制(比如HZ=100時(shí),精度只有10毫秒)。

為此,內(nèi)核還提供了更高精度的計(jì)時(shí)方式(如ktimehrtimer),但jiffies憑借輕量、兼容性好的特點(diǎn),依然是內(nèi)核中最基礎(chǔ)的計(jì)時(shí)工具。

總結(jié):不起眼卻不可或缺的"心跳"

jiffies就像Linux內(nèi)核的脈搏,每一次跳動(dòng)都記錄著系統(tǒng)的運(yùn)行軌跡。從進(jìn)程調(diào)度到設(shè)備驅(qū)動(dòng),它用最簡單的計(jì)數(shù)方式,支撐著內(nèi)核復(fù)雜的時(shí)間管理。

看懂了jiffies,你就理解了Linux內(nèi)核時(shí)間管理的基石。下次看到內(nèi)核代碼中的jiffies、time_before等關(guān)鍵字,相信你會(huì)有更清晰的認(rèn)識(shí)~

(如果覺得有用,歡迎點(diǎn)贊分享給更多技術(shù)愛好者~)

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5210

    文章

    20680

    瀏覽量

    337365
  • 內(nèi)核
    +關(guān)注

    關(guān)注

    4

    文章

    1476

    瀏覽量

    43098
  • Linux
    +關(guān)注

    關(guān)注

    88

    文章

    11822

    瀏覽量

    219600
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    Linux系統(tǒng)內(nèi)核Linux發(fā)行套件的區(qū)別

    Linux 系統(tǒng)內(nèi)核指的是由 Linus Torvalds 負(fù)責(zé)維護(hù),提供硬件抽象層、硬盤及文件系統(tǒng)控制及多任務(wù)功能的系統(tǒng)核心程序。
    的頭像 發(fā)表于 11-02 16:45 ?1962次閱讀

    老司機(jī)帶路!ARM Linux系統(tǒng)的時(shí)鐘機(jī)制詳解

    jiffiesLinux 內(nèi)核中,時(shí)間由一個(gè)名為 jiffies 的全局變量衡量,該變量標(biāo)識(shí)系統(tǒng)啟動(dòng)以來經(jīng)過的滴答數(shù)。在最低的級(jí)別上,
    發(fā)表于 09-07 11:02

    「正點(diǎn)原子Linux連載」第五十章Linux內(nèi)核定時(shí)器實(shí)驗(yàn)

    節(jié)拍率并不會(huì)增加太大的負(fù)載壓力。根據(jù)自己的實(shí)際情況,選擇合適的系統(tǒng)節(jié)拍率,本教程我們?nèi)坎捎媚J(rèn)的100Hz系統(tǒng)節(jié)拍率。Linux內(nèi)核使用全局變量j
    發(fā)表于 03-20 11:22

    「正點(diǎn)原子Linux連載」第五十章Linux內(nèi)核定時(shí)器實(shí)驗(yàn)

    。Linux內(nèi)核使用全局變量jIFfies來記錄系統(tǒng)從啟動(dòng)以來的系統(tǒng)節(jié)拍數(shù),系統(tǒng)啟動(dòng)的時(shí)候會(huì)將
    發(fā)表于 03-20 11:22

    Linux內(nèi)核輸入子系統(tǒng)的驅(qū)動(dòng)研究

    Linux內(nèi)核輸入子系統(tǒng)的驅(qū)動(dòng)研究
    發(fā)表于 10-31 14:41 ?14次下載
    <b class='flag-5'>Linux</b><b class='flag-5'>內(nèi)核</b>輸入子<b class='flag-5'>系統(tǒng)</b>的驅(qū)動(dòng)研究

    Linux內(nèi)核配置系統(tǒng)詳解

    隨著 Linux 操作系統(tǒng)的廣泛應(yīng)用,特別是 Linux 在嵌入式領(lǐng)域的發(fā)展,越來越多的人開始投身到 Linux 內(nèi)核級(jí)的開發(fā)中。面對(duì)日益龐
    發(fā)表于 11-01 15:45 ?4次下載

    何為Linux編寫用戶空間設(shè)備驅(qū)動(dòng)程序

    了解如何為Linux編寫用戶空間設(shè)備驅(qū)動(dòng)程序。 用戶空間驅(qū)動(dòng)程序?yàn)槟承┰O(shè)備提供內(nèi)核空間驅(qū)動(dòng)程序的替代方案
    的頭像 發(fā)表于 11-22 07:04 ?4563次閱讀

    Linux時(shí)間子系統(tǒng)之二:表示時(shí)間的單位和結(jié)構(gòu)

    在32位的系統(tǒng)上,jiffies是一個(gè)32位的無符號(hào)數(shù),系統(tǒng)每過1/HZ秒,jiffies的值就會(huì)加1,最終該變量可能會(huì)溢出,所以內(nèi)核同時(shí)又
    發(fā)表于 05-06 16:38 ?1487次閱讀

    Linux 2.6內(nèi)核中的計(jì)時(shí)器和列表

    計(jì)時(shí)器是所有操作系統(tǒng)的一個(gè)必要組成部分,您將發(fā)現(xiàn)多個(gè)計(jì)時(shí)器機(jī)制。我們將首先簡要介紹一些 Linux 計(jì)時(shí)器模式,然后深入研究它們的運(yùn)行方式。
    發(fā)表于 05-12 08:48 ?1248次閱讀

    你需要了解Linux設(shè)備驅(qū)動(dòng)之定時(shí)與延時(shí)的區(qū)別

    Linux通過系統(tǒng)硬件定時(shí)器以規(guī)律的間隔(由HZ度量)產(chǎn)生定時(shí)器中斷,每次中斷使得一個(gè)內(nèi)核計(jì)數(shù)器的值jiffies累加,因此這個(gè)jiffies
    發(fā)表于 05-13 11:19 ?1888次閱讀

    需要了解的linux HZ Tick Jiffies

    JiffiesLinux核心變數(shù)(32位元變數(shù),unsigned long),它被用來紀(jì)錄系統(tǒng)自開幾以來,已經(jīng)過多少的tick。每發(fā)生一次timer interrupt,Jiffies
    發(fā)表于 05-15 09:07 ?2033次閱讀

    linux內(nèi)核是什么_linux內(nèi)核學(xué)習(xí)路線

    Linux內(nèi)核是一個(gè)操作系統(tǒng)(OS)內(nèi)核,本質(zhì)上定義為類Unix。它用于不同的操作系統(tǒng),主要是以不同的L
    發(fā)表于 09-16 15:49 ?3214次閱讀

    嵌入式LINUX系統(tǒng)內(nèi)核內(nèi)核模塊調(diào)試

    嵌入式LINUX系統(tǒng)內(nèi)核內(nèi)核模塊調(diào)試(嵌入式開發(fā)和硬件開發(fā))-嵌入式LINUX系統(tǒng)
    發(fā)表于 07-30 13:55 ?10次下載
    嵌入式<b class='flag-5'>LINUX</b><b class='flag-5'>系統(tǒng)</b><b class='flag-5'>內(nèi)核</b>和<b class='flag-5'>內(nèi)核</b>模塊調(diào)試

    Linux 是操作系統(tǒng)還是內(nèi)核?

    內(nèi)核是每個(gè)操作系統(tǒng)的中心。這不僅僅是 Linux 的事情。Windows 和 macOS 也有內(nèi)核。
    發(fā)表于 03-15 10:05 ?1696次閱讀

    Linux系統(tǒng)內(nèi)核概述

    Linux 內(nèi)核Linux 操作系統(tǒng)的主要組件,也是計(jì)算機(jī)硬件與其進(jìn)程之間的核心接口。它負(fù)責(zé)兩者之間的通信,還要盡可能高效地管理資源。
    發(fā)表于 06-09 09:29 ?1292次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>系統(tǒng)</b><b class='flag-5'>內(nèi)核</b>概述
    梁山县| 尖扎县| 阿巴嘎旗| 蓝田县| 汉中市| 吴川市| 荣成市| 塔城市| 比如县| 昆明市| 肃北| 稻城县| 松原市| 柯坪县| 石屏县| 荔波县| 贵州省| 阜南县| 高青县| 浙江省| 萝北县| 扶绥县| 五峰| 咸丰县| 依兰县| 青川县| 古蔺县| 灵石县| 佛坪县| 河源市| 洮南市| 福清市| 望都县| 镇赉县| 绵阳市| 西林县| 高台县| 岚皋县| 虹口区| 高雄市| 黄大仙区|