日韩av色在线_av不卡在线观看_亚洲国产精品第一页_在线看日本不卡_色成人综合网_国产丝袜在线视频_国产精成人品localhost_国产91富婆露脸刺激对白_韩国视频一区_国产精品人成电影

當前位置:首頁 > 嵌入式培訓 > 嵌入式學習 > 講師博文 > linux內核時間管理

linux內核時間管理 時間:2017-11-23      來源:未知

前言:

Linux中如何對時間進行管理?時鐘節拍的概念及延時函數的用法很多同學都用不好,下面我給大家總結一下。

 

一,linux時鐘運作機制

1,linux時鐘運作機制

• 大部分PC機中有兩個時鐘源,分別是實時時鐘(RTC)和 操作系統(OS)時鐘

• 實時時鐘也叫CMOS時鐘,它靠電池供電,即使系統斷電,也可以維持日期和時間。

• RTC和OS時鐘之間的關系通常也被稱作操作系統的時鐘運作機制

• 不同的操作系統,其時鐘運作機制也不同

linux中的時鐘機制大致如下圖所示

linux中時鐘機制

由上圖可知:

RTC是硬件時鐘,它為整個計算機提供一個計時標準,是原始底層的時鐘數據,由紐扣電池供電,系統斷電后仍然在工作

OS時鐘產生于PC主板上的定時/計數芯片,由操作系統控制這個芯片的工作,OS時鐘的基本單位就是該芯片的計數周期,開機時操作系統取得RTC中的時間數據來初始化OS時鐘,所以它只是在開機有效,由操作系統控制,已被稱為軟時鐘或系統時鐘。操作系統通過OS時鐘提供給應用程序和時間有關的服務。

擴展:OS時鐘其本質是一個計數器,計數器從計數初值開始,每收到一次脈沖信號,計數器減1,當減至0時,就會輸出高電平或低電平,然后獲取重載值重新從初值開始計數,不斷循環,這樣就得到一個輸出脈沖,這個脈沖作用中斷控制器上,產生中斷信號,觸發時鐘中斷。

 

2,OS時鐘中斷

 

• OS時鐘是由可編程定時/計數器產生的輸出脈沖觸發中斷而產生的,而輸出脈沖的周期叫做一個“時鐘節拍”(Tick,又稱滴答),(中斷觸發時會進入中斷處理函數,使jiffies+1)

• 操作系統的“時間基準” 由設計者決定,Linux的時間基準是1970年1月1日凌晨0點

• OS時鐘記錄的時間就是系統時間。系統時間以“時鐘節拍”為單位

•時鐘中斷觸發的頻率,由內核HZ來確定,系統啟動時會按照定義的HZ值對硬件進行設置

比如對HZ的定義如下:

#define  Hz 100      

內核時間頻率:表示每秒鐘觸發100次時鐘中斷,即每10ms觸發一次,

   每次中斷jiffies+1,,則每秒jiffies增加了100,

 

• Linux中用全局變量 jiffies表示系統自啟動以來的時鐘節拍數目(時鐘中斷觸發的次數)

   因此系統運行的時間以s為單位計數,  就等于 jiffies/HZ

   內核啟動時將該變量初始化為0,此后,每次時鐘中斷處理程序都會增加該變量的值,每秒鐘觸發中斷的次數為Hz, 

 

3、實際時間

 

實際時間就是現實中鐘表上顯示的時間,其實內核中并不常用這個時間,主要是用戶空間的程序有時需要獲取當前時間,所以內核中也管理著這個時間。

實際時間的獲取是在開機后,內核初始化時從RTC讀取的。

內核讀取這個時間后就將其放入內核中的 xtime 變量中,并且在系統的運行中不斷更新這個值。

 

當前實際時間(墻上時間):  xtime.tv_sec以秒為單位,存放著自1970年7月1日(UTC)以來經過的時間,1970年1月1日被稱為紀元。多數Unix系統的墻上時間都是基于該紀元而言的。xtime.tv_nsec記錄自上一秒開始經過的納秒數。

在<Time.h(incluce/linux)>中 

extern struct timespec xtime; 

#ifndef _STRUCT_TIMESPEC 

#define _STRUCT_TIMESPEC 

struct timespec {      /*高精度*/

     time_t  tv_sec;     /* seconds */ 

    long    tv_nsec;    /* nanoseconds 納秒*/ 

}; 

     #endif

 從用戶空間取得墻上時間的主要接口是gettimeofday(),在內核中對應的系統調用為sys_gettimeofday():

雖然內核也實現了time()系統調用,但是gettimeofday()幾乎完全取代了它。C庫函數也提供了墻上時間相關的庫調用,比如ftime(),ctime()。

  除了更新xtime時間外,內核不會想用戶空間程序那樣頻繁的使用xtime。但是,在文件系統的實現代碼中存放訪問時間戳(創建,存取,修改等)需要使用xtime。

 

4,時鐘中斷處理程序----操作系統的脈搏

 

每一次時鐘中斷的產生都觸發下列幾個主要的操作:

– 給jiffies變量加 1

– 更新時間和日期,既更新xtime墻上時間

– 確定當前進程在CPU 上已運行了多長時間,如果已經超過了分配給它的時間,則搶占它

– 更新資源使用統計數

– 檢查定時器時間間隔是否已到,如果是,則執行它注冊的函數(運行于底半部軟中斷中)

 

 以上工作每秒要發生 Hz次,也就是說PC上的時鐘中斷處理程序執行的頻率為Hz

 

5、時間系統總結

1、節拍----->jiffies

     又稱時鐘滴答,是一個全局變量,它的值在系統引導的時候初始化為0,在時鐘中斷初始化完成后,每次時鐘中斷發生,在時鐘中斷處理例程中都會將jiffies的值 +1。

     jiffies_64:為了解決jiffies溢出問題,更重要的是通過jiffies_64可以知道自開機以來的時間間隔。

2、節拍率---->HZ

     HZ表示時鐘中斷發生的頻率。可以在.config的配置文件中改寫。1/HZ是每個jiffies+1的時間間隔。

3、通過jiffies可以進行時間的比較和時間轉換

4、時間比較

     32位                                                    64位

     time_after(a,b)                                    time_after64(a,b)

     time_before(a,b)                                 time_before64(a,b)

     time_after_eq(a,b)                              time_after_eq64(a,b)

     time_before_eq(a,b)                           time_before_eq64

     time_in_range(a,b,c)                           time_in_range(a,b,c)

5、時間轉換

     a、jiffies和msecs以及usecs的轉換:

     unsigned int jiffies_to_msecs(const unsigned long);

     unsigned int jiffies_to_usecs(const unsigned long);

     unsigned long msecs_to_jiffies(const unsigned int m);

     unsigned long usecs_to_jiffies(const unsigned int u);

 

    b、jiffies和timespec以及timeval的轉換

     在用戶空間,應用程序更多的使用秒以及毫秒等時間形式,而在內核中多使用jiffes。

     內核定義了struct timeval 和 struct timespec 兩種數據結構

     struct timespec {

               __kernel_time_t tv_sec;

               long              tv_nsec;

      }

     struct timeval {

               __kernel_time_t          tv_sec;

              __kernel_suseconds_t  tv_usec;

    }

    相互轉換函數:

     unsigned long timespec_to_jiffies(const struct timespec *value);

     void jiffies_to_timespec(const unsigned long jiffies, struct timespec *value);

     unsigned long timeval_to_jiffies(const struct timeval *value);

     void jiffies_to_timeval(const unsigned long jiffies, struct timeval *value);

 

6、要注意的是jiffies的精度問題。如果HZ = 1000,則jiffies增加1代表1ms。

     如果要用到更高精度的始終,要用其他的硬件機制。

 

 

二、內核短延時

 

Linux內核中提供了下列3個函數以分別進行納秒、微秒和毫秒延遲:

 

void ndelay(unsigned long nsecs);

void udelay(unsigned long usecs);

void mdelay(unsigned long msecs);

 

上述延遲的實現原理本質上是忙等待,它根據CPU頻率進行一定次數的循環。如果沒有特殊的理由(比如在中斷上下文中獲取自旋鎖的情況),不推薦使用這些函數延遲較長的時間,浪費CPU。

注:ndelay 和 mdelay都是基于udelay,將udelay的次數除1000就是ndelay,因此ndelay的次數為1000的整數倍才準確。

 

 

有時候,人們在軟件中進行下面的延遲:

void delay(unsigned int time)

{

while(time--);

}

ndelay()、udelay()和mdelay()函數的實現方式原理與此類似。

內核在啟動時,會運行一個延遲循環校準(Delay Loop Calibration),計算出lpj(Loops Per Jiffy)即處理器在一個jiffy時間內運行一個內部的延遲循環的次數,內核啟動時會打印如下類似信息:

Calibrating delay loop... 530.84 BogoMIPS (lpj=1327104)

如果我們直接在bootloader傳遞給內核的bootargs中設置lpj=1327104,則可以省掉這個校準的過程節省約百毫秒級的開機時間。

 

睡著延時

毫秒時延(以及更大的秒時延)已經比較大了,在內核中,好不要直接使用mdelay()函數,這將耗費CPU資源,對于毫秒級以上的時延,內核提供了下述函數:

 

void msleep(unsigned int millisecs);

unsigned long   msleep_interruptible(unsigned int millisecs);

void ssleep(unsigned int seconds);

 

上述函數將使得調用它的進程睡眠參數指定的時間為millisecs,msleep()、ssleep()不能被打斷,而msleep_interruptible()則可以被打斷。

受系統Hz以及進程調度的影響,msleep()類似函數的精度是有限的。

 

三、內核長延時

在內核中,一個直觀的延時的方法是將所要延遲的時間設置的當前的jiffies加上要延遲的時間,這樣就可以簡單的通過比較當前的jiffies和設置的時間來判斷延時的時間時候到來。針對此方法,內核中提供了簡單的宏用于判斷延時是否完成。

 

time_after(a,b);         /*如果時間a在b之后 (a>b),則返回真,否則返回0*/

time_before(a,b);      /*如果時間a在b之前 (a<b),則返回真,否則返回0*/

 

長延時實現舉例:

/* 延遲 100 個 jiffies */

unsigned long delay = jiffies + 100;

while(time_before(jiffies, delay));

 

/* 再延遲 2s */

unsigned long delay = jiffies + 2*Hz;

while(time_before(jiffies, delay));

 

與time_before()對應的還有一個time_after(),它們在內核中定義為(實際上只是將傳入的未來時間jiffies和被調用時的jiffies進行一個簡單的比較):

#define time_after(a,b) \

(typecheck(unsigned long, a) && \

typecheck(unsigned long, b) && \

((long)(b) - (long)(a) < 0))

 

#define time_before(a,b) time_after(b,a)

 

 

為了防止在time_before()和time_after()的比較過程中編譯器對jiffies的優化,內核將其定義為

volatile變量,這將保證每次都會重新讀取這個變量。因此volatile更多的作用還是避免這種讀合并。

 

 

四、讓進程睡固定的時間

 

下面兩個函數可以將當前進程添加到等待隊列中,從而在等待隊列上睡眠,當超時發生時,進程將被喚醒:

 

sleep_on_timeout(wait_queue_head_t *q, unsigned long timeout);

interrupt_sleep_on_timeout(wait_queue_head_t *q, unsigned long timeout);

上一篇:Linux設備驅動申請設備號過程分析

下一篇:Linux設備驅動模型之kobject linux2.6.0

熱點文章推薦
華清學員就業榜單
高薪學員經驗分享
熱點新聞推薦
前臺專線:010-82525158 企業培訓洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權所有 ,京ICP備16055225號-5京公海網安備11010802025203號

回到頂部

欧美日韩国产激情| 亚洲制服中文| 91超碰这里只有精品国产| 国产成人高清视频| 国产永久精品大片wwwapp| 亚洲h片在线看| 中文字幕www| 天天干,夜夜操| 国产一级二级三级视频| 韩国一区二区在线播放| 大桥未久一区二区| 亚洲aⅴ日韩av电影在线观看| 国产一区二区三区久久精品| 婷婷亚洲久悠悠色悠在线播放 | 黄色成人在线网| 春暖花开亚洲| 欧美女人天堂| 国产免费无遮挡| 日本 欧美 国产| www.久久com| 四虎精品欧美一区二区免费| 亚洲综合精品一区二区| 欧美高清在线视频观看不卡| 亚洲第一网站免费视频| 欧美日韩亚洲一区二| 国产日韩欧美在线一区| 国内精品久久久久影院薰衣草 | 黄色片视频免费观看| 精品久久一二三| 欧美精品123| 91精品国产综合久久男男| 久久6免费高清热精品| 亚洲成色777777女色窝| 色婷婷综合久久久中文一区二区| 国产嫩草影院久久久久| 高清不卡一二三区| 日本伊人精品一区二区三区观看方式| 日韩欧美网址| 红杏aⅴ成人免费视频| 97人人做人人爽香蕉精品| 在线免费观看的av网站| 绯色av一区| 国产对白国语对白| 日本黄色免费| 国内精品久久久久久影院8f| 亚洲色图偷拍自拍| 亚洲黄色在线免费观看| 最新在线中文字幕| 黄色免费av网站| 欧美日韩综合一区二区| 精品一区二区三区蜜桃在线| 国产人妻黑人一区二区三区| av小说在线播放| 欧美另类极品| 尤物在线视频| 三级国产在线观看| 中文在线中文字幕| 黄网站app在线观看大全免费视频| h视频免费网站| 丁香激情五月婷婷| 福利在线网站| xxxx黑人da| 黄色三级在线| av免费在线电影| 免费av观看网站| 成人图片小说| 国产午夜视频| 超碰在线公开超碰在线| 中文字幕电影在线| 免费一级毛片在线观看| 国产色a在线| 日本三级视频在线观看| 日本亚洲精品| av日韩国产| 小黄鸭精品aⅴ导航网站入口| 欧美黑人疯狂性受xxxxx野外| gay欧美网站| 黑人一区二区三区| 视频在线观看免费影院欧美meiju 视频一区中文字幕精品 | 久久激情视频免费观看| 最近2019好看的中文字幕免费| 亚洲日韩中文字幕| 在线观看日韩www视频免费| 国产亚洲精品91在线| 最新69国产成人精品视频免费| 中文字幕亚洲综合久久| 欧美理论片在线观看| 91高潮精品免费porn| 国产精品最新在线观看| 粉嫩av免费一区二区三区| 欧美成人一区二区在线| 色中文字幕在线观看| www.欧美黄色| 久久国产这里只有精品| 91视频在线免费| 青青青手机在线视频| 日韩成人在线免费视频| 一级一片免费看| 国产成人av免费看| 亚洲精品乱码电影在线观看| 你懂的网站在线观看网址| 电影天堂最新网址| 久久av少妇| 国产777精品精品热热热一区二区| 女生影院久久| 色狼人综合干| 国产精品成人一区二区网站软件| 日本少妇一区二区| 91麻豆成人久久精品二区三区| 亚洲日穴在线视频| 欧美女孩性生活视频| 国产亚洲欧美另类中文| 欧美一区二区色| 国产精品美女黄网| 日韩成人三级视频| 亚洲成人精品在线播放| 欧美人禽zoz0强交| 超碰在线观看99| brazzers欧美最新版视频| 老司机aⅴ毛片免费观看| 久久99精品久久久久久野外| 欧美黑人一区二区三区| 热门国产精品亚洲第一区在线| 亚洲a级精品| 成人高清av| 日av在线不卡| 国产精品人妖ts系列视频| 一本大道久久精品懂色aⅴ| 精品国产亚洲在线| 欧美激情亚洲另类| 国产综合第一页| 免费成人在线视频网站| 制服丝袜av在线| 国偷自拍第113页| 自拍偷拍国产| 免费白浆视频| 日韩精品极品| 成人久久久久| 风流少妇一区二区| 黄色成人av网| 色妞在线综合亚洲欧美| 成人综合网网址| 国产一区二区四区| 蜜桃传媒一区二区亚洲| 91精品中文字幕| 成年网站视频| 日韩激情av| 国产一区二区三区四区五区传媒| 国产在线视频一区二区| 精品久久久免费| 久久久99免费视频| 久久精品国产第一区二区三区最新章节| 亚洲色欲综合一区二区三区| 亚洲国产123| 亚洲色图图片区| 亚洲精品套图| 欧一区二区三区| 日韩高清一级片| 亚洲成人自拍偷拍| 久久亚洲精品一区二区| 任我爽在线视频精品一| 欧美xxxxx精品| 国产毛片一区二区三区va在线| 18岁免费网站| 亚洲电影观看| 日韩视频在线一区二区三区| 亚洲免费观看高清完整| 中国人与牲禽动交精品| 久久精品美女| 先锋资源av在线| 亚洲国产福利视频| 在线免费观看av网站| 欧美精品影院| 国产精品996| 欧美一区二区三区在线视频| 国产精品你懂得| 超碰在线97免费| 亚洲欧美一二三区| 毛片视频免费| 51精品国产| 成人性生交大片免费| 日韩一级欧美一级| 91一区二区三区| 伊人成人免费视频| 999久久久久久| 在线观看视频污| 先锋影音国产精品| 国产欧美日韩在线| 综合网日日天干夜夜久久| 伊人色综合影院| 黑鬼狂亚洲人videos| 九九爱在线视频观看免费视频| 91久久国产综合久久91猫猫| 奇米一区二区三区av| 在线播放视频一区| 国内精品视频在线播放| 女教师淫辱の教室蜜臀av软件| 九色91播放| 欧美日韩五码| 国产成人精品免费在线| 亚洲欧洲中文天堂| 一本二本三本亚洲码| 国产黄色片视频| 裸体av在线| 你懂的视频欧美| 亚洲色图制服诱惑| 欧美亚洲在线视频| 自拍视频第一页| 欧美日韩不卡中文字幕在线| 不卡av影片| 国产91丝袜在线播放| 亚洲欧美制服丝袜| 成人免费在线网| 一级二级三级视频| 国产在线高清视频| 三级在线观看一区二区| 欧美一级黄色录像| 亚洲欧洲精品一区二区三区波多野1战4 | 日韩精品极品在线观看播放免费视频| 蜜桃传媒视频第一区入口在线看| 国产在视频线精品视频| 影音av在线| 国产日韩视频在线| 亚洲成人www| 99久久伊人精品影院| 久久一级免费视频| av网站免费| 国产精品久久久久蜜臀| 91成人免费在线视频| 精品久久久久亚洲| 日韩黄色在线视频| 精品视频二区| 老鸭窝毛片一区二区三区| 欧美sm美女调教| 中文字幕超清在线免费观看| 亚洲 小说区 图片区| 五月天激情在线| 紧缚捆绑精品一区二区| 美日韩精品视频免费看| 在线免费看污网站| www.国产在线观看| 久久99免费视频| 欧美视频一区二区三区| 无码免费一区二区三区免费播放| 免费无码国产精品| 激情网站在线| av网站免费线看精品| 97视频在线观看亚洲| 国产美女免费无遮挡| www.成人69.com| 伊人久久久大香线蕉综合直播| 精品粉嫩超白一线天av| 中国丰满人妻videoshd| √天堂资源中文www| 欧美区一区二区| 色综合久久久久久久久久久| 色噜噜一区二区| www黄色在线观看| 欧美成人福利| 亚洲精品国产无天堂网2021 | 精品一区二区三区四| 91精品专区| 高清成人免费视频| 国产成人综合久久| 久久久久香蕉视频| 在线午夜影院| 中文字幕欧美激情一区| 99久久国产免费免费| 波多野结衣视频免费观看| 精品丝袜在线| 亚洲免费伊人电影| 日韩欧美亚洲日产国| 女人床在线观看| 亚洲一级片免费看| 97成人超碰| 色婷婷综合中文久久一本| 欧美视频在线第一页| 一本久久精品| 精品久久久久久久| 精品久久久久久亚洲综合网 | 国产aⅴ超薄肉色丝袜交足| 精品久久影院| 国产午夜精品久久久| 九色91porny| 欧美18一12sex性处hd| 国产乱人伦偷精品视频免下载| 国产精品444| 日本高清不卡码| 日韩毛片在线| 91国产丝袜在线播放| 欧美啪啪免费视频| 拍拍拍无挡免费播放视频在线观看| 国精品一区二区三区| 欧美久久精品午夜青青大伊人| 国产91在线播放九色| 蜜臀av在线| 精品久久久久久国产| 黄色成人在线看| 88av看到爽| 国产中文字幕一区| 亚洲综合最新在线| 亚洲精品字幕在线| 欧美色图在线播放| www国产精品com| 九九免费精品视频| av亚洲一区二区三区| 欧美羞羞免费网站| 天天干天天操天天玩| 亚洲尤物在线视频| 日本一区二区在线不卡| 亚洲午夜激情| 日产乱码一卡二卡三免费| 美女久久网站| 国产一区二区视频在线观看| 精品国产18久久久久久| 精品免费视频| 欧美激情精品久久久久久| av大片在线免费观看| caoporn成人免费视频在线| 亚洲精品视频免费| 四虎884aa成人精品| 精品欧美一区二区三区在线观看| 在线免费一区三区| 先锋资源在线视频| 免费在线看a| 欧美日韩亚洲成人| 日本一二三四区视频| 婷婷在线视频观看| 精品国产1区2区| 久久久久中文字幕亚洲精品 | 欧美一区二区在线| 国产不卡精品一区二区三区| 亚洲综合三区| 91九色蝌蚪成人| 久色视频在线观看| 奇米色一区二区三区四区| 国内一区二区三区在线视频| 麻豆91免费| 成人一道本在线| 日本成人在线不卡| 在线黄色av| 亚洲成人免费在线观看| 岛国大片在线免费观看| 91超碰国产在线| 欧美变态tickle挠乳网站| 蜜臀av午夜精品久久| 1313精品午夜理伦电影| 久久色精品视频| 国产精品久久久久久免费| 美国一级片在线免费观看视频 | 性猛交富婆╳xxx乱大交天津| 66视频精品| 91九色综合久久| 国产又猛又粗| 成人午夜电影久久影院| 2022中文字幕| 国产香蕉在线| 欧美日韩在线精品一区二区三区激情| 免费成人深夜夜行p站| jizzyou欧美16| 欧美成人激情视频| 丰满肥臀噗嗤啊x99av| 日韩福利视频导航| 亚洲欧洲久久| 午夜影院在线免费观看| 91精品办公室少妇高潮对白| 五月婷婷综合在线观看| 精品欧美视频| 97国产suv精品一区二区62| 午夜视频www| 国产传媒欧美日韩成人| 久久这里只有精品23| 免费黄色在线网站| 精品日本一线二线三线不卡| 亚洲男人的天堂在线视频| 欧美日韩专区| 久久99精品国产99久久| 写真福利片hd在线观看| 欧美性生交xxxxx久久久| 欧美88888| 日韩久久视频| 国产亚洲自拍偷拍| 一级毛片aaaaaa免费看| 欧美中文字幕一二三区视频| 亚洲熟女毛茸茸| 色爱综合网欧美| 久久99久久精品国产| 最近2018中文字幕免费在线视频| 欧美体内谢she精2性欧美| 色婷婷粉嫩av| 99久久亚洲精品蜜臀| 国产欧美日本在线| 色佬视频在线观看| 欧美一区二区在线免费观看| 欧美一区二区三区网站| 久久福利精品| 国产免费黄色一级片| 免费在线小视频| 欧美富婆性猛交| 91p0rn永久地址|