婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁(yè) > 知識(shí)庫(kù) > Linux時(shí)間子系統(tǒng)之時(shí)間的表示示例詳解

Linux時(shí)間子系統(tǒng)之時(shí)間的表示示例詳解

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

前言

在Linux內(nèi)核中,為了兼容原有的代碼,或者符合某種規(guī)范,并且還要滿足當(dāng)前精度日益提高的要求,實(shí)現(xiàn)了多種與時(shí)間相關(guān)但用于不同目的的數(shù)據(jù)結(jié)構(gòu):

1)jiffies和jiffies_64

內(nèi)核用jiffies_64全局變量記錄系統(tǒng)自啟動(dòng)以來(lái)經(jīng)過(guò)了多少次Tick。它的聲明如下(代碼位于kernel/time/timer.c中):

__visible u64 jiffies_64 __cacheline_aligned_in_smp = INITIAL_JIFFIES;

EXPORT_SYMBOL(jiffies_64);

可以看出來(lái)jiffies_64被定義成了64位無(wú)符號(hào)整數(shù)。但是,由于歷史的原因,內(nèi)核源代碼中還包含了另一個(gè)叫做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變量是一個(gè)unsigned long類型的全局變量,如果在32位處理器上只有4個(gè)字節(jié)長(zhǎng)(32位)。但是,如果在64位處理器上也有8個(gè)字節(jié)長(zhǎng)(64位),這時(shí)候jiffies和jiffies_64兩個(gè)全局變量是完全等價(jià)的。

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

jiffies = jiffies_64;

玄機(jī)在這里,原來(lái)在鏈接的時(shí)候指定了符號(hào)jiffies和jiffies_64指向同一個(gè)地址。也就是說(shuō),在32位機(jī)器上,jiffies和jiffies_64的低4個(gè)字節(jié)是一樣的。

一般情況下,無(wú)論在32位或64位機(jī)器上,我們都可以直接訪問jiffies全局變量,但如果要獲得jiffies_64全局變量,則需要調(diào)用get_jiffies_64函數(shù)。對(duì)于64位系統(tǒng)來(lái)說(shuō),兩者一樣,而且jiffies被申明成了volatile的且是Cache對(duì)齊的,因此只需要直接返回jiffies就好了:

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

而對(duì)于32位系統(tǒng)來(lái)說(shuō),由于其對(duì)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到來(lái)都會(huì)加1的,而Tick的周期HZ是由內(nèi)核編譯選項(xiàng)配置的。在32位系統(tǒng)中,我們假設(shè)HZ被設(shè)置成了250,那么每個(gè)Tick的周期就是4毫秒,那么該計(jì)數(shù)器將在不到200天后達(dá)到最大值后溢出。如果HZ被設(shè)置的更高,那這個(gè)溢出時(shí)間會(huì)更短。當(dāng)然,如果在64位系統(tǒng)中,則完全不用考慮這個(gè)問題。因此,在用jiffies進(jìn)行時(shí)間比較的時(shí)候,需要用系統(tǒng)已經(jīng)定義好的幾個(gè)宏:

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)

為了保險(xiǎn)起見,內(nèi)核也提供了對(duì)應(yīng)的64位版本。這些宏可以有效的解決回繞問題,不過(guò)也不是無(wú)限制的。具體是怎么做到的呢?我們挑一個(gè)time_after宏來(lái)看看就知道了:

#define time_after(a,b) \

 (typecheck(unsigned long, a) && \

 typecheck(unsigned long, b) && \

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

先是對(duì)兩個(gè)變量做類型檢查,必須都是unsigned long型的。最重要的是后面,先將兩個(gè)無(wú)符號(hào)長(zhǎng)整形相減,然后將他們變成有符號(hào)的長(zhǎng)整型,再判斷其是否為負(fù)數(shù),也就是32位的最高位是否為1。

為什么這樣可以部分解決所謂回繞的問題呢?我們可以舉個(gè)例子,為了簡(jiǎn)單起見,以8位無(wú)符號(hào)整數(shù)為例,其取值范圍是0到255(0xFF)。假設(shè)當(dāng)前時(shí)間是250,那么過(guò)5個(gè)Tick之后,就是255了,已經(jīng)到達(dá)了能表達(dá)的最大值。這時(shí),如果再過(guò)一個(gè)Tick,也就是6個(gè)Tick之后,就將會(huì)溢出變成0了。此時(shí),如果簡(jiǎn)單的通過(guò)對(duì)兩個(gè)值的比較來(lái)判斷哪個(gè)時(shí)間再后面的話,顯然就要出錯(cuò)了,因?yàn)檫^(guò)了6個(gè)Tick之后的時(shí)間是0,反而小于當(dāng)前的時(shí)間,這個(gè)問題就是所謂的回繞。但是,如果我們先將這兩個(gè)數(shù)相減,也就是0-250(0-0xFA),也會(huì)產(chǎn)生溢出,最終得到的數(shù)剛好是6。但這也是有限制的,兩個(gè)比較的時(shí)間之間的差值不能超過(guò)最大表示范圍的一半。假設(shè)現(xiàn)在的時(shí)間還是250,而過(guò)了128個(gè)Tick之后,時(shí)間值將變成122,再將兩者相減的話就是122-250(0x86-0xFA),減出來(lái)的數(shù)字就是128了,此時(shí)轉(zhuǎn)成有符號(hào)數(shù)就變成負(fù)數(shù)了,結(jié)果就錯(cuò)了。

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

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時(shí)(UTC時(shí)間)以來(lái)經(jīng)過(guò)的秒數(shù)。__kernel_time_t最終定義成了long型,也就是在32位系統(tǒng)上是32位長(zhǎng),而在64位系統(tǒng)上是64位長(zhǎng)。

tv_nsec:存放自上一秒開始經(jīng)過(guò)的納秒(ns)數(shù)。

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

typedef __s64 time64_t;

......

struct timespec64 {
 time64_t tv_sec;
 long tv_nsec;
};

這個(gè)結(jié)構(gòu)體中的變量定義和timespec一樣,只不過(guò)tv_sec的類型一定是64位無(wú)符號(hào)數(shù)。所以,也就是說(shuō)在64位系統(tǒng)上,timespec和timespec64結(jié)構(gòu)體是一模一樣的。

3)ktime_t

在Linux的時(shí)間子系統(tǒng)內(nèi),一般使用ktime_t來(lái)表示時(shí)間,其定義如下(代碼位于include/linux/ktime.h):

typedef s64 ktime_t;

就是一個(gè)非常簡(jiǎn)單的64位帶符號(hào)整數(shù),表示的時(shí)間單位是納秒。

4)timeval

gettimeofday和settimeofday函數(shù)使用timeval作為時(shí)間單位:

struct timeval {
 __kernel_time_t tv_sec;
 __kernel_suseconds_t tv_usec;
};

tv_sec:存放自1970年1月1日0時(shí)(UTC時(shí)間)以來(lái)經(jīng)過(guò)的秒數(shù)。__kernel_time_t最終定義成了long型,也就是在32位系統(tǒng)上是32位長(zhǎng),而在64位系統(tǒng)上是64位長(zhǎng)。

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

所以,這個(gè)結(jié)構(gòu)體其實(shí)和timespec結(jié)構(gòu)體大同小異,tv_sec存的值是一樣的,而只需要將timespec中的tv_nsec除以1000就是timeval中的tv_usec。

總結(jié)

到此這篇關(guān)于Linux時(shí)間子系統(tǒng)之時(shí)間的表示的文章就介紹到這了,更多相關(guān)Linux時(shí)間的表示內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

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

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Linux時(shí)間子系統(tǒng)之時(shí)間的表示示例詳解》,本文關(guān)鍵詞  Linux,時(shí)間,子系統(tǒng),之時(shí),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Linux時(shí)間子系統(tǒng)之時(shí)間的表示示例詳解》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于Linux時(shí)間子系統(tǒng)之時(shí)間的表示示例詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    国产精品日韩成人| 91丝袜美腿高跟国产极品老师 | 婷婷中文字幕一区三区| 色老汉一区二区三区| 天天综合天天综合色| 国产欧美1区2区3区| 日本高清视频一区二区| 奇米色一区二区| 精品999在线播放| 不卡视频一二三| 91婷婷韩国欧美一区二区| 午夜av一区二区| 久久精品人人做| 亚洲va国产天堂va久久en| 精品欧美久久久| 欧美日韩精品一区二区三区蜜桃| 99国产精品久久久久久久久久| 亚洲高清免费视频| 美女视频一区二区三区| 图片区小说区区亚洲影院| 中文字幕中文字幕一区| 国产精品全国免费观看高清| 久久久国产午夜精品| 26uuu另类欧美亚洲曰本| 日韩免费高清视频| 欧美videossexotv100| 日韩精品一区国产麻豆| 日韩欧美激情在线| 国产亚洲午夜高清国产拍精品| 精品成人一区二区三区四区| 久久精品亚洲国产奇米99| 国产清纯白嫩初高生在线观看91| 久久精品男人天堂av| 国产精品热久久久久夜色精品三区| 中文久久乱码一区二区| 亚洲婷婷综合久久一本伊一区| 洋洋av久久久久久久一区| 亚洲成在人线免费| 久久 天天综合| 国产91在线观看| 9i看片成人免费高清| 欧美日韩综合不卡| 久久影院视频免费| 中文字幕在线播放不卡一区| 亚洲精品国产精华液| 性做久久久久久久免费看| 男人的j进女人的j一区| 国产精品一二三在| 一本到不卡精品视频在线观看| 欧美丰满美乳xxx高潮www| 久久日一线二线三线suv| 国产精品成人免费| 丝袜美腿亚洲一区二区图片| 国产在线看一区| 91在线小视频| 日韩美女视频在线| 亚洲婷婷综合色高清在线| 蜜臀av性久久久久蜜臀aⅴ四虎| 另类小说一区二区三区| av中文字幕不卡| 日韩写真欧美这视频| 亚洲精品成人少妇| 国产一区二区三区av电影| 91精品91久久久中77777| 精品久久久久久无| 亚洲成人你懂的| 成人av影视在线观看| www国产精品av| 国产精品久久久久久久浪潮网站 | 亚洲一区影音先锋| 国产乱国产乱300精品| 欧美午夜寂寞影院| 久久久国产精品麻豆| 亚洲成人免费在线观看| 波多野结衣中文字幕一区二区三区| 欧美一级xxx| 亚洲精品免费在线| av一区二区三区在线| 久久久天堂av| 麻豆精品在线播放| 欧美一区二区久久| 亚洲国产精品视频| 99久久国产综合精品女不卡| 久久久久久影视| 麻豆精品视频在线观看视频| 在线亚洲+欧美+日本专区| 国产精品不卡一区| 99久久国产综合精品女不卡| 欧美大度的电影原声| 肉丝袜脚交视频一区二区| 欧美亚洲精品一区| 日韩伦理免费电影| 成人激情黄色小说| 欧美大片一区二区| 激情久久久久久久久久久久久久久久| 69久久夜色精品国产69蝌蚪网| 亚洲精品中文在线观看| 99精品国产视频| 亚洲免费观看视频| 欧美日韩中文国产| 亚洲不卡在线观看| 91精品在线麻豆| 麻豆成人综合网| 久久综合网色—综合色88| 精品一区二区三区在线视频| 欧美mv日韩mv亚洲| 粉嫩av一区二区三区粉嫩 | 欧美xxx久久| 麻豆精品一区二区综合av| 久久色在线观看| 成人免费观看视频| 亚洲日本护士毛茸茸| 91久久精品一区二区三区| 亚洲一区二区影院| 日韩一区二区三区电影在线观看| 蜜桃av一区二区三区电影| 精品日产卡一卡二卡麻豆| 国产麻豆视频精品| 亚洲欧洲av在线| 欧美三级日韩三级| 久久国产精品色| 国产精品理论在线观看| 色菇凉天天综合网| 日韩精品乱码av一区二区| 久久久精品欧美丰满| 91在线高清观看| 日韩高清不卡一区| 国产亚洲一区二区三区在线观看| 91麻豆国产福利精品| 日韩成人av影视| 中文字幕精品在线不卡| 色欧美片视频在线观看| 三级久久三级久久| 中文字幕一区二区在线观看| 91福利在线看| 国产福利一区在线| 亚洲小说欧美激情另类| 精品日产卡一卡二卡麻豆| 成人一区二区三区视频| 午夜精品久久久久| 日本一区二区三区电影| 色嗨嗨av一区二区三区| 蜜臀av一级做a爰片久久| 最新日韩av在线| 一区二区理论电影在线观看| 亚洲国产高清aⅴ视频| 成人午夜视频网站| 午夜精彩视频在线观看不卡| 日韩免费看网站| 一级中文字幕一区二区| 亚洲欧美日韩在线不卡| 91黄视频在线| 一个色综合网站| 亚洲国产成人91porn| 日本精品一区二区三区四区的功能| 99久久婷婷国产综合精品| 日本强好片久久久久久aaa| 亚洲视频你懂的| 亚洲国产精品黑人久久久| 日韩精品中文字幕一区| 色乱码一区二区三区88| 国产精品一区二区男女羞羞无遮挡 | 欧美性大战久久| 成人激情视频网站| 国产二区国产一区在线观看| 麻豆91精品91久久久的内涵| 亚洲一区二区欧美| 亚洲色图丝袜美腿| 国产精品女上位| 国产午夜亚洲精品不卡| wwwwxxxxx欧美| 日韩精品一区二区三区四区视频| 56国语精品自产拍在线观看| 欧美三级在线视频| 欧美精三区欧美精三区| 777色狠狠一区二区三区| 欧美午夜视频网站| 欧美手机在线视频| 欧美日韩成人综合在线一区二区| 在线观看一区二区精品视频| 天天色 色综合| 日韩高清在线一区| 三级不卡在线观看| 日韩国产欧美视频| 青青草97国产精品免费观看| 日日夜夜免费精品| 美女免费视频一区| 韩国v欧美v亚洲v日本v| 国产美女在线观看一区| 大美女一区二区三区| 99久久精品情趣| 欧美日韩精品三区| 欧美一区二区三区四区在线观看| 在线成人午夜影院| 欧美成人高清电影在线| 国产精品午夜免费| 一区二区三区av电影| 蜜臀久久久久久久| 国产成人av福利| 91久久线看在观草草青青|