校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > Linux時間子系統之時間的表示示例詳解

Linux時間子系統之時間的表示示例詳解

熱門標簽:地圖標注員有發展前景嗎 高德地圖標注公司需要錢 宜賓銷售外呼系統軟件 濰坊寒亭400電話辦理多少錢 廈門防封電銷電話卡 四川保險智能外呼系統 外呼系統全國 地圖標注能更改嗎 云南電商智能外呼系統哪家好

前言

在Linux內核中,為了兼容原有的代碼,或者符合某種規范,并且還要滿足當前精度日益提高的要求,實現了多種與時間相關但用于不同目的的數據結構:

1)jiffies和jiffies_64

內核用jiffies_64全局變量記錄系統自啟動以來經過了多少次Tick。它的聲明如下(代碼位于kernel/time/timer.c中):

__visible u64 jiffies_64 __cacheline_aligned_in_smp = INITIAL_JIFFIES;

EXPORT_SYMBOL(jiffies_64);

可以看出來jiffies_64被定義成了64位無符號整數。但是,由于歷史的原因,內核源代碼中還包含了另一個叫做jiffies的變量。jiffies的引用(代碼位于include/linux/jiffies.h中)申明為:

extern u64 __cacheline_aligned_in_smp jiffies_64;
extern unsigned long volatile __cacheline_aligned_in_smp __jiffy_arch_data jiffies;

因此,jiffies變量是一個unsigned long類型的全局變量,如果在32位處理器上只有4個字節長(32位)。但是,如果在64位處理器上也有8個字節長(64位),這時候jiffies和jiffies_64兩個全局變量是完全等價的。

但是翻遍所有代碼你也找不到全局變量jiffies的定義,最終在內核的鏈接腳本中(對于Arm64架構來說腳本位于arch/arm64/kernel/vmlinux.lds.S中)找到了下面這行:

jiffies = jiffies_64;

玄機在這里,原來在鏈接的時候指定了符號jiffies和jiffies_64指向同一個地址。也就是說,在32位機器上,jiffies和jiffies_64的低4個字節是一樣的。

一般情況下,無論在32位或64位機器上,我們都可以直接訪問jiffies全局變量,但如果要獲得jiffies_64全局變量,則需要調用get_jiffies_64函數。對于64位系統來說,兩者一樣,而且jiffies被申明成了volatile的且是Cache對齊的,因此只需要直接返回jiffies就好了:

static inline u64 get_jiffies_64(void)
{
 return (u64)jiffies;
}

而對于32位系統來說,由于其對64位讀寫不是原子的,所以還需要持有jiffies_lock讀順序鎖:

u64 get_jiffies_64(void)
{
 unsigned int seq;
 u64 ret;

 do {
 seq = read_seqbegin(&jiffies_lock);
 ret = jiffies_64;
 } while (read_seqretry(&jiffies_lock, seq));
 return ret;
}

jiffies基本上是每一次Tick到來都會加1的,而Tick的周期HZ是由內核編譯選項配置的。在32位系統中,我們假設HZ被設置成了250,那么每個Tick的周期就是4毫秒,那么該計數器將在不到200天后達到最大值后溢出。如果HZ被設置的更高,那這個溢出時間會更短。當然,如果在64位系統中,則完全不用考慮這個問題。因此,在用jiffies進行時間比較的時候,需要用系統已經定義好的幾個宏:

time_after(a,b)
time_before(a,b)
time_after_eq(a,b)
time_before_eq(a,b)
time_in_range_open(a,b,c)
time_is_before_jiffies(a)
time_is_after_jiffies(a)
time_is_before_eq_jiffies(a)
time_is_after_eq_jiffies(a)

為了保險起見,內核也提供了對應的64位版本。這些宏可以有效的解決回繞問題,不過也不是無限制的。具體是怎么做到的呢?我們挑一個time_after宏來看看就知道了:

#define time_after(a,b) \

 (typecheck(unsigned long, a) && \

 typecheck(unsigned long, b) && \

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

先是對兩個變量做類型檢查,必須都是unsigned long型的。最重要的是后面,先將兩個無符號長整形相減,然后將他們變成有符號的長整型,再判斷其是否為負數,也就是32位的最高位是否為1。

為什么這樣可以部分解決所謂回繞的問題呢?我們可以舉個例子,為了簡單起見,以8位無符號整數為例,其取值范圍是0到255(0xFF)。假設當前時間是250,那么過5個Tick之后,就是255了,已經到達了能表達的最大值。這時,如果再過一個Tick,也就是6個Tick之后,就將會溢出變成0了。此時,如果簡單的通過對兩個值的比較來判斷哪個時間再后面的話,顯然就要出錯了,因為過了6個Tick之后的時間是0,反而小于當前的時間,這個問題就是所謂的回繞。但是,如果我們先將這兩個數相減,也就是0-250(0-0xFA),也會產生溢出,最終得到的數剛好是6。但這也是有限制的,兩個比較的時間之間的差值不能超過最大表示范圍的一半。假設現在的時間還是250,而過了128個Tick之后,時間值將變成122,再將兩者相減的話就是122-250(0x86-0xFA),減出來的數字就是128了,此時轉成有符號數就變成負數了,結果就錯了。

另外,jiffies是每個Tick更新一次的,而Tick的周期又是編譯的時候定義好的,所以可以將jiffies的數值轉換成具體過了多少時間,反之亦然。因此,內核提供了如下轉換函數:

unsigned int jiffies_to_msecs(const unsigned long j);
unsigned int jiffies_to_usecs(const unsigned long j);
unsigned long msecs_to_jiffies(const unsigned int m);
unsigned long usecs_to_jiffies(const unsigned int u);

2)timespec和timespec64

timespec由秒和納秒組成,其定義如下(代碼位于include/uapi/linux/time.h):

struct timespec {
 __kernel_time_t tv_sec;
 long tv_nsec;
};

tv_sec:存放自1970年1月1日0時(UTC時間)以來經過的秒數。__kernel_time_t最終定義成了long型,也就是在32位系統上是32位長,而在64位系統上是64位長。

tv_nsec:存放自上一秒開始經過的納秒(ns)數。

timespec還有一個64位的擴展結構,其定義如下(代碼位于include/linux/time64.h):

typedef __s64 time64_t;

......

struct timespec64 {
 time64_t tv_sec;
 long tv_nsec;
};

這個結構體中的變量定義和timespec一樣,只不過tv_sec的類型一定是64位無符號數。所以,也就是說在64位系統上,timespec和timespec64結構體是一模一樣的。

3)ktime_t

在Linux的時間子系統內,一般使用ktime_t來表示時間,其定義如下(代碼位于include/linux/ktime.h):

typedef s64 ktime_t;

就是一個非常簡單的64位帶符號整數,表示的時間單位是納秒。

4)timeval

gettimeofday和settimeofday函數使用timeval作為時間單位:

struct timeval {
 __kernel_time_t tv_sec;
 __kernel_suseconds_t tv_usec;
};

tv_sec:存放自1970年1月1日0時(UTC時間)以來經過的秒數。__kernel_time_t最終定義成了long型,也就是在32位系統上是32位長,而在64位系統上是64位長。

tv_usec:__kernel_suseconds_t實際最終也被定義成了long型,存放自上一秒開始經過的微秒(us)數。

所以,這個結構體其實和timespec結構體大同小異,tv_sec存的值是一樣的,而只需要將timespec中的tv_nsec除以1000就是timeval中的tv_usec。

總結

到此這篇關于Linux時間子系統之時間的表示的文章就介紹到這了,更多相關Linux時間的表示內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

標簽:巴彥淖爾 廊坊 回訪 滁州 湛江 紅河 廣安 德州

巨人網絡通訊聲明:本文標題《Linux時間子系統之時間的表示示例詳解》,本文關鍵詞  Linux,時間,子系統,之時,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Linux時間子系統之時間的表示示例詳解》相關的同類信息!
  • 本頁收集關于Linux時間子系統之時間的表示示例詳解的相關信息資訊供網民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    亚洲色图视频网| 精品一区二区三区欧美| 日韩av网站在线观看| 成人免费视频免费观看| 91精品蜜臀在线一区尤物| 国产蜜臀av在线一区二区三区| 亚洲成人福利片| 97se亚洲国产综合自在线观| 精品久久久久一区| 婷婷中文字幕一区三区| av成人免费在线观看| 国产午夜亚洲精品羞羞网站| 日本不卡视频一二三区| 欧美日韩在线精品一区二区三区激情 | 国产suv精品一区二区883| 欧美日韩高清在线| 亚洲一区二区三区四区不卡| 成人av在线影院| 久久久久国产精品麻豆ai换脸| 免费成人在线播放| 日韩一级视频免费观看在线| 亚洲午夜在线观看视频在线| 91麻豆国产精品久久| 国产精品免费aⅴ片在线观看| 国产美女视频一区| 26uuu国产日韩综合| 男人的天堂久久精品| 91国在线观看| 亚洲午夜精品一区二区三区他趣| 色中色一区二区| 亚洲综合一区二区| 在线免费观看日韩欧美| 自拍视频在线观看一区二区| 99国产精品国产精品久久| 国产精品乱人伦| 99久久精品免费| **网站欧美大片在线观看| 91在线一区二区| 一区二区三区在线免费视频| 欧洲精品在线观看| 亚洲成人手机在线| 日韩欧美一区中文| 久久99国产精品尤物| 国产午夜精品在线观看| 国产成人亚洲综合a∨猫咪| 国产精品色噜噜| 色女孩综合影院| 日韩影视精彩在线| 亚洲精品在线电影| 成人一区在线观看| 亚洲综合在线免费观看| 欧美绝品在线观看成人午夜影视| 免费高清在线视频一区·| 26uuu亚洲综合色| 成人黄色a**站在线观看| 亚洲午夜在线观看视频在线| 日韩你懂的在线播放| 懂色av一区二区三区免费观看| 一区精品在线播放| 91 com成人网| 国内精品伊人久久久久av影院| 中文字幕av在线一区二区三区| 在线欧美一区二区| 精品中文字幕一区二区小辣椒| 中文字幕国产一区| 911精品产国品一二三产区| 国产乱理伦片在线观看夜一区| 亚洲精品精品亚洲| 2020国产精品自拍| 欧美日韩一区二区三区免费看| 精油按摩中文字幕久久| 18成人在线观看| 亚洲精品一区在线观看| 在线观看不卡一区| 国产精品一二三区在线| 无吗不卡中文字幕| 国产精品久久久久久久久久免费看| 欧美日韩日日夜夜| 国产成人av在线影院| 首页亚洲欧美制服丝腿| 欧美—级在线免费片| 制服丝袜日韩国产| 一本色道a无线码一区v| 国产精品99久久久久久久女警| 午夜欧美在线一二页| 中文字幕一区二区三| 久久久久久麻豆| 欧美一级在线视频| 欧美日韩黄色影视| 91丨九色丨国产丨porny| 国产一区视频在线看| 午夜视频一区在线观看| 一区二区三区四区视频精品免费 | 欧美优质美女网站| 成人午夜视频网站| 国产精品系列在线观看| 久久国产精品99久久人人澡| 午夜欧美2019年伦理| 亚洲精品videosex极品| 亚洲欧洲精品一区二区三区| 久久一夜天堂av一区二区三区| 制服丝袜亚洲精品中文字幕| 欧美视频你懂的| 一本一道波多野结衣一区二区| 高清不卡一二三区| 成人中文字幕电影| 国产99久久久精品| 国产精品18久久久久| 国产综合色产在线精品| 久久精品噜噜噜成人av农村| 日本v片在线高清不卡在线观看| 亚洲精品欧美激情| 玉米视频成人免费看| 亚洲精品国久久99热| 亚洲精品一二三| 亚洲小少妇裸体bbw| 亚洲一区二区成人在线观看| 一区二区在线观看免费视频播放| 日本一区二区三区免费乱视频| 国产欧美日韩不卡免费| 国产欧美一区二区三区在线老狼| 欧美国产精品一区| 日韩一区中文字幕| 亚洲综合一二区| 青青草原综合久久大伊人精品 | 91国内精品野花午夜精品| 91福利在线观看| 制服丝袜av成人在线看| 日韩欧美一区二区在线视频| 精品国产露脸精彩对白| 国产女人aaa级久久久级| 日韩一区在线播放| 亚洲成人免费电影| 极品销魂美女一区二区三区| 成人一级黄色片| 欧美一区二区三级| 久久尤物电影视频在线观看| 日本一区二区三区高清不卡| 国产精品沙发午睡系列990531| 一区二区在线观看视频在线观看| 亚洲午夜激情网站| 国产在线国偷精品免费看| 成人精品鲁一区一区二区| 欧美亚洲综合一区| 2023国产精品自拍| 亚洲女子a中天字幕| 日本不卡在线视频| 成人精品视频.| 7777精品久久久大香线蕉| 精品久久久久久久一区二区蜜臀| 日本一区二区久久| 日韩精品五月天| 国产精选一区二区三区| 91久久精品国产91性色tv | 国产精品久久99| 肉肉av福利一精品导航| 国产一区二区美女| 欧美色精品在线视频| 久久新电视剧免费观看| 亚洲妇女屁股眼交7| 国产一区二区福利| 在线看日韩精品电影| 国产亚洲一区二区三区| 日韩国产一区二| 91在线一区二区三区| 精品国产成人在线影院| 亚洲一区二区三区视频在线播放 | 成人国产在线观看| 欧美夫妻性生活| 亚洲精品免费看| 国产91精品久久久久久久网曝门| 在线不卡一区二区| 亚洲美女在线国产| 国产精品亚洲人在线观看| 9191精品国产综合久久久久久| 综合激情成人伊人| 国产麻豆精品视频| 日韩一级片在线播放| 夜夜嗨av一区二区三区网页| 高清久久久久久| 久久蜜桃av一区二区天堂| 日韩国产欧美在线观看| 欧美日韩另类一区| 一区二区三区日韩欧美| 国产成人精品免费网站| 久久这里只有精品视频网| 免费视频最近日韩| 91精品国产高清一区二区三区| 亚洲综合色成人| 欧美亚洲国产怡红院影院| 亚洲色图欧美偷拍| 一本一本久久a久久精品综合麻豆| 欧美激情一区二区三区| 国产真实乱子伦精品视频| 精品福利一区二区三区免费视频| 日本aⅴ亚洲精品中文乱码| 制服丝袜亚洲播放| 另类人妖一区二区av| 日韩精品一区二区在线| 久久国产精品区|