《電子技術(shù)應用》
您所在的位置:首頁 > 嵌入式技術(shù) > 業(yè)界動態(tài) > linux世界里的時間

linux世界里的時間

2017-06-21
關(guān)鍵詞: Linux 計數(shù)器

      通常,操作系統(tǒng)可以使用三種方法來表示系統(tǒng)的當前時間與日期:

  ①最簡單的一種方法就是直接用一個64位的計數(shù)器來對時鐘滴答進行計數(shù)。

  ②第二種方法就是用一個32位計數(shù)器來對秒進行計數(shù),同時還用一個32位的輔助計數(shù)器對時鐘滴答計數(shù),之子累積到一秒為止。因為232超過136年,因此這種方法直至22世紀都可以讓系統(tǒng)工作得很好。

  ③第三種方法也是按時鐘滴答進行計數(shù),但是是相對于系統(tǒng)啟動以來的滴答次數(shù),而不是相對于相對于某個確定的外部時刻;當讀外部后備時鐘(如RTC)或用戶輸入實際時間時,根據(jù)當前的滴答次數(shù)計算系統(tǒng)當前時間。

  UNIX類操作系統(tǒng)通常都采用第三種方法來維護系統(tǒng)的時間與日期。

  1 基本概念

  首先,有必要明確一些Linux內(nèi)核時鐘驅(qū)動中的基本概念。

  (1)時鐘周期(clock cycle)的頻率:8253/8254 PIT的本質(zhì)就是對由晶體振蕩器產(chǎn)生的時鐘周期進行計數(shù),晶體振蕩器在1秒時間內(nèi)產(chǎn)生的時鐘脈沖個數(shù)就是時鐘周期的頻率。

  Linux用宏CLOCK_TICK_RATE來表示8254 PIT的輸入時鐘脈沖的頻率(在PC機中這個值通常是1193180HZ),該宏定義在include/asm-i386/timex.h頭文件中:

  #define CLOCK_TICK_RATE 1193180 /* Underlying HZ */

  (2)時鐘滴答(clock tick):我們知道,當PIT通道0的計數(shù)器減到0值時,它就在IRQ0上產(chǎn)生一次時鐘中斷,也即一次時鐘滴答。PIT通道0的計數(shù)器的初始值決定了要過多少時鐘周期才產(chǎn)生一次時鐘中斷,因此也就決定了一次時鐘滴答的時間間隔長度。

  (3)時鐘滴答的頻率(HZ):也即1秒時間內(nèi)PIT所產(chǎn)生的時鐘滴答次數(shù)。類似地,這個值也是由PIT通道0的計數(shù)器初值決定的(反過來說, 確定了時鐘滴答的頻率值后也就可以確定8254 PIT通道0的計數(shù)器初值)。Linux內(nèi)核用宏HZ來表示時鐘滴答的頻率,而且在不同的平臺上HZ有不同的定義值。對于ALPHA和IA62平臺HZ的 值是1024,對于SPARC、MIPS、ARM和i386等平臺HZ的值都是100。該宏在i386平臺上的定義如下(include/asm- i386/param.h):

  #ifndef HZ

  #define HZ 100

  #endif

  根據(jù)HZ的值,我們也可以知道一次時鐘滴答的具體時間間隔應該是(1000ms/HZ)=10ms。

  (4)時鐘滴答的時間間隔:Linux用全局變量tick來表示時鐘滴答的時間間隔長度,該變量定義在kernel/timer.c文件中,如下:

  long tick = (1000000 + HZ/2) / HZ; /* timer interrupt period */

  tick變量的單位是微妙(μs),由于在不同平臺上宏HZ的值會有所不同,因此方程式tick=1000000÷HZ的結(jié)果可能會是個小數(shù), 因此將其進行四舍五入成一個整數(shù),所以Linux將tick定義成(1000000+HZ/2)/HZ,其中被除數(shù)表達式中的HZ/2的作用就是用來將 tick值向上圓整成一個整型數(shù)。

  另外,Linux還用宏TICK_SIZE來作為tick變量的引用別名(alias),其定義如下(arch/i386/kernel/time.c):

  #define TICK_SIZE tick

  (5)宏LATCH:Linux用宏LATCH來定義要寫到PIT通道0的計數(shù)器中的值,它表示PIT將沒隔多少個時鐘周期產(chǎn)生一次時鐘中斷。顯然LATCH應該由下列公式計算:

  LATCH=(1秒之內(nèi)的時鐘周期個數(shù))÷(1秒之內(nèi)的時鐘中斷次數(shù))=(CLOCK_TICK_RATE)÷(HZ)

  類似地,上述公式的結(jié)果可能會是個小數(shù),應該對其進行四舍五入。所以,Linux將LATCH定義為(include/linux/timex.h):

  /* LATCH is used in the interval timer and ftape setup. */

  #define LATCH ((CLOCK_TICK_RATE + HZ/2) / HZ) /* For divider */

  類似地,被除數(shù)表達式中的HZ/2也是用來將LATCH向上圓整成一個整數(shù)。

  2 表示系統(tǒng)當前時間的內(nèi)核數(shù)據(jù)結(jié)構(gòu)

  作為一種UNIX類操作系統(tǒng),Linux內(nèi)核顯然采用本節(jié)一開始所述的第三種方法來表示系統(tǒng)的當前時間。Linux內(nèi)核在表示系統(tǒng)當前時間時用到了三個重要的數(shù)據(jù)結(jié)構(gòu):

  ①全局變量jiffies:這是一個32位的無符號整數(shù),用來表示自內(nèi)核上一次啟動以來的時鐘滴答次數(shù)。每發(fā)生一次時鐘滴答,內(nèi)核的時鐘中斷處 理函數(shù)timer_interrupt()都要將該全局變量jiffies加1。該變量定義在kernel/timer.c源文件中,如下所示:

  unsigned long volatile jiffies;

  C語言限定符volatile表示jiffies是一個易該變的變量,因此編譯器將使對該變量的訪問從不通過CPU內(nèi)部cache來進行。

  ②全局變量xtime:它是一個timeval結(jié)構(gòu)類型的變量,用來表示當前時間距UNIX時間基準1970-01-01 00:00:00的相對秒數(shù)值。結(jié)構(gòu)timeval是Linux內(nèi)核表示時間的一種格式(Linux內(nèi)核對時間的表示有多種格式,每種格式都有不同的時間 精度),其時間精度是微秒。該結(jié)構(gòu)是內(nèi)核表示時間時最常用的一種格式,它定義在頭文件include/linux/time.h中,如下所示:

  struct timeval {

  time_t tv_sec; /* seconds */

  suseconds_t tv_usec; /* microseconds */

  };

  其中,成員tv_sec表示當前時間距UNIX時間基準的秒數(shù)值,而成員tv_usec則表示一秒之內(nèi)的微秒值,且1000000>tv_usec>=0。

  Linux內(nèi)核通過timeval結(jié)構(gòu)類型的全局變量xtime來維持當前時間,該變量定義在kernel/timer.c文件中,如下所示:

  /* The current time */

  volatile struct timeval xtime __attribute__ ((aligned (16)));

  但是,全局變量xtime所維持的當前時間通常是供用戶來檢索和設(shè)置的,而其他內(nèi)核模塊通常很少使用它(其他內(nèi)核模塊用得最多的是 jiffies),因此對xtime的更新并不是一項緊迫的任務,所以這一工作通常被延遲到時鐘中斷的底半部分(bottom half)中來進行。由于bottom half的執(zhí)行時間帶有不確定性,因此為了記住內(nèi)核上一次更新xtime是什么時候,Linux內(nèi)核定義了一個類似于jiffies的全局變量 wall_jiffies,來保存內(nèi)核上一次更新xtime時的jiffies值。時鐘中斷的底半部分每一次更新xtime的時侯都會將 wall_jiffies更新為當時的jiffies值。全局變量wall_jiffies定義在kernel/timer.c文件中:

  /* jiffies at the most recent update of wall time */

  unsigned long wall_jiffies;

  ③全局變量sys_tz:它是一個timezone結(jié)構(gòu)類型的全局變量,表示系統(tǒng)當前的時區(qū)信息。結(jié)構(gòu)類型timezone定義在include/linux/time.h頭文件中,如下所示:

  struct timezone {

  int tz_minuteswest; /* minutes west of Greenwich */

  int tz_dsttime; /* type of dst correction */

  };

  基于上述結(jié)構(gòu),Linux在kernel/time.c文件中定義了全局變量sys_tz表示系統(tǒng)當前所處的時區(qū)信息,如下所示:

  struct timezone sys_tz;

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經(jīng)濟損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
国产精品影片在线观看| 亚洲欧洲精品一区二区三区波多野1战4 | 亚洲一区日韩| 99国产麻豆精品| 亚洲日本欧美在线| 亚洲日本中文字幕免费在线不卡| 激情欧美国产欧美| 国产综合视频在线观看| 国产一区二区三区在线观看网站| 国产欧美日韩一区二区三区在线 | 欧美三区在线观看| 欧美日产国产成人免费图片| 欧美大片在线观看一区二区| 蜜臀a∨国产成人精品| 久久综合综合久久综合| 噜噜噜在线观看免费视频日韩 | 黑人一区二区| …久久精品99久久香蕉国产| 亚洲国产精品123| 91久久亚洲| 日韩网站在线| 中文av一区二区| 亚洲欧美经典视频| 欧美中文字幕不卡| 亚洲激情国产精品| 亚洲精选在线| 亚洲天堂成人在线视频| 亚洲砖区区免费| 欧美一区二区精品在线| 久久九九热免费视频| 免费欧美视频| 欧美日韩亚洲一区二区三区在线观看| 欧美色综合天天久久综合精品| 国产精品www色诱视频| 国产日本欧美一区二区三区| 狠狠色狠色综合曰曰| 在线欧美三区| 99在线|亚洲一区二区| 亚洲欧美影院| 亚洲人成毛片在线播放| 亚洲视频欧美视频| 性久久久久久| 麻豆成人在线| 欧美日韩一区二区在线| 国产午夜精品在线观看| 亚洲国产精品久久人人爱蜜臀 | 欧美日韩一区二区在线播放| 国产精品免费视频观看| 狠狠综合久久av一区二区老牛| 91久久精品国产91性色| 亚洲一区国产视频| 亚洲国产老妈| 亚洲制服欧美中文字幕中文字幕| 久久久亚洲精品一区二区三区| 欧美激情女人20p| 国产精品欧美经典| 在线观看欧美一区| 中文欧美在线视频| 亚洲第一免费播放区| 一区二区欧美日韩| 久久久久国产精品www| 欧美久久一级| 国模一区二区三区| 一区二区三区.www| 亚洲第一伊人| 性色av一区二区三区在线观看| 欧美a级片网站| 国产日韩欧美高清免费| 91久久夜色精品国产网站| 亚洲欧美日韩精品在线| 99视频在线观看一区三区| 久久精品夜色噜噜亚洲aⅴ| 欧美人妖另类| 精品va天堂亚洲国产| 亚洲夜间福利| 一本高清dvd不卡在线观看| 久久久国产视频91| 欧美午夜女人视频在线| 在线观看视频免费一区二区三区| 亚洲午夜在线视频| 99re热这里只有精品免费视频| 久久精品一二三| 国产精品久久久久久久久久免费看 | 亚洲自拍偷拍麻豆| 亚洲视频一区在线观看| 免费亚洲电影在线观看| 国产在线视频欧美一区二区三区| 一区二区三区四区五区精品| 亚洲精品一区二区三区福利| 久久综合色一综合色88| 国产日韩欧美一区二区三区四区| 亚洲最新合集| 一本色道婷婷久久欧美| 欧美不卡视频一区发布| 国产亚洲毛片在线| 亚洲在线视频观看| 亚洲综合好骚| 欧美午夜国产| 亚洲乱码国产乱码精品精可以看| 亚洲国产精品成人综合色在线婷婷| 欧美伊人久久久久久午夜久久久久 | 国产精品视频一区二区三区| 夜夜爽99久久国产综合精品女不卡| 亚洲精品国产品国语在线app| 久久一区亚洲| 国产一区在线视频| 西西人体一区二区| 午夜精品视频在线观看一区二区 | 国产精品一区=区| 一区二区三区四区五区视频| 亚洲视频一区二区| 欧美日韩亚洲一区在线观看| 亚洲精品乱码久久久久久蜜桃麻豆| 亚洲欧洲日韩在线| 另类av导航| 在线精品亚洲| 亚洲国产精品传媒在线观看| 久久婷婷国产综合国色天香| 国产中文一区二区| 久久精品91久久久久久再现| 久久亚洲二区| 在线成人小视频| 亚洲欧洲在线播放| 欧美国产日本高清在线| 亚洲精品小视频在线观看| 在线视频你懂得一区二区三区| 欧美日韩美女一区二区| 在线综合亚洲欧美在线视频| 亚洲一区中文| 国产精品日韩欧美大师| 欧美一区国产一区| 麻豆久久久9性大片| 亚洲高清不卡一区| 中文日韩在线视频| 国产精品入口尤物| 久久aⅴ乱码一区二区三区| 麻豆91精品| 亚洲精品一区二区三区av| 国产精品99久久久久久宅男| 国产精品你懂的在线欣赏| 欧美一区二区三区在| 女同一区二区| av成人激情| 久久狠狠久久综合桃花| 伊人久久大香线蕉综合热线| 亚洲精品字幕| 国产精品久久久久久久电影 | 欧美日本韩国一区| 一区二区欧美日韩| 久久精品欧美日韩精品| 精品福利免费观看| 亚洲最新在线| 国产日产欧美一区| 亚洲人成人99网站| 国产精品国产自产拍高清av王其| 午夜一区不卡| 欧美激情精品久久久六区热门| 亚洲网站在线看| 久久久最新网址| 亚洲欧洲精品一区二区三区| 亚洲欧美日韩中文播放| 精品999日本| 亚洲一区二区在| 国产一区二区三区高清在线观看| 亚洲精品色婷婷福利天堂| 国产精品成人在线观看| 欧美伊人影院| 欧美日韩精品不卡| 欧美一区免费| 欧美日韩视频一区二区| 欧美一区久久| 欧美日韩综合视频网址| 欧美在线免费观看视频| 欧美日本中文| 久久成人精品一区二区三区| 欧美日韩精品免费观看视一区二区 | 免费日韩av电影| 亚洲一区二区三区四区在线观看| 久久在线播放| 在线亚洲激情| 欧美大片在线观看一区二区| 亚洲影视中文字幕| 欧美精品久久久久a| 欧美在线你懂的| 国产精品a级| 亚洲片区在线| 国产麻豆91精品| 亚洲视频一区在线观看| 136国产福利精品导航| 欧美中文在线观看国产| 日韩一级视频免费观看在线| 老司机免费视频一区二区| 亚洲资源av| 欧美色欧美亚洲另类二区| 亚洲国产精品久久久久秋霞不卡| 国产精品视频男人的天堂| 一区二区三区精品| 亚洲国产精品一区二区www在线| 久久精品国产一区二区三区免费看| 99xxxx成人网|