欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

Linux內(nèi)核時(shí)鐘驅(qū)動(dòng)的基本概念

這篇文章主要講解了“Linux內(nèi)核時(shí)鐘驅(qū)動(dòng)的基本概念”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Linux內(nèi)核時(shí)鐘驅(qū)動(dòng)的基本概念”吧!

成都創(chuàng)新互聯(lián)公司是一家專注于成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站、成都外貿(mào)網(wǎng)站建設(shè)公司與策劃設(shè)計(jì),興海網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)公司做網(wǎng)站,專注于網(wǎng)站建設(shè)十年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:興海等地區(qū)。興海做網(wǎng)站價(jià)格咨詢:028-86922220


1 基本概念
首先,有必要明確一些Linux內(nèi)核時(shí)鐘驅(qū)動(dòng)中的基本概念。
(1)時(shí)鐘周期(clock cycle)的頻率:8253/8254 PIT的本質(zhì)就是對(duì)由晶體振蕩器產(chǎn)生的時(shí)鐘周期進(jìn)行計(jì)數(shù),晶體振蕩器在1秒時(shí)間內(nèi)產(chǎn)生的時(shí)鐘脈沖個(gè)數(shù)就是時(shí)鐘周期的頻率。
Linux用宏CLOCK_TICK_RATE來表示8254 PIT的輸入時(shí)鐘脈沖的頻率(在PC機(jī)中這個(gè)值通常是1193180HZ),該宏定義在include/asm-i386/timex.h頭文件中:

#define CLOCK_TICK_RATE 1193180 /* Underlying HZ */


(2)時(shí)鐘滴答(clock tick):我們知道,當(dāng)PIT通道0的計(jì)數(shù)器減到0值時(shí),它就在IRQ0上產(chǎn)生一次時(shí)鐘中斷,也即一次時(shí)鐘滴答。PIT通道0的計(jì)數(shù)器的初始值決定了要過多少時(shí)鐘周期才產(chǎn)生一次時(shí)鐘中斷,因此也就決定了一次時(shí)鐘滴答的時(shí)間間隔長(zhǎng)度。
(3)時(shí)鐘滴答的頻率(HZ):也即1秒時(shí)間內(nèi)PIT所產(chǎn)生的時(shí)鐘滴答次數(shù)。類似地,這個(gè)值也是由PIT通道0的計(jì)數(shù)器初值決定的(反過來說, 確定了時(shí)鐘滴答的頻率值后也就可以確定8254 PIT通道0的計(jì)數(shù)器初值)。Linux內(nèi)核用宏HZ來表示時(shí)鐘滴答的頻率,而且在不同的平臺(tái)上HZ有不同的定義值。對(duì)于ALPHA和IA62平臺(tái)HZ的 值是1024,對(duì)于SPARC、MIPS、ARM和i386等平臺(tái)HZ的值都是100。該宏在i386平臺(tái)上的定義如下(include/asm- i386/param.h):

#ifndef HZ   #define HZ 100   #endif

根據(jù)HZ的值,我們也可以知道一次時(shí)鐘滴答的具體時(shí)間間隔應(yīng)該是(1000ms/HZ)=10ms。
(4)時(shí)鐘滴答的時(shí)間間隔:Linux用全局變量tick來表示時(shí)鐘滴答的時(shí)間間隔長(zhǎng)度,該變量定義在kernel/timer.c文件中,如下:
long tick = (1000000 + HZ/2) / HZ; /* timer interrupt period */
tick變量的單位是微妙(μs),由于在不同平臺(tái)上宏HZ的值會(huì)有所不同,因此方程式tick=1000000÷HZ的結(jié)果可能會(huì)是個(gè)小數(shù), 因此將其進(jìn)行四舍五入成一個(gè)整數(shù),所以Linux將tick定義成(1000000+HZ/2)/HZ,其中被除數(shù)表達(dá)式中的HZ/2的作用就是用來將 tick值向上圓整成一個(gè)整型數(shù)。
另外,Linux還用宏TICK_SIZE來作為tick變量的引用別名(alias),其定義如下(arch/i386/kernel/time.c):

#define TICK_SIZE tick

(5)宏LATCH:Linux用宏LATCH來定義要寫到PIT通道0的計(jì)數(shù)器中的值,它表示PIT將沒隔多少個(gè)時(shí)鐘周期產(chǎn)生一次時(shí)鐘中斷。顯然LATCH應(yīng)該由下列公式計(jì)算:
LATCH=(1秒之內(nèi)的時(shí)鐘周期個(gè)數(shù))÷(1秒之內(nèi)的時(shí)鐘中斷次數(shù))=(CLOCK_TICK_RATE)÷(HZ)
類似地,上述公式的結(jié)果可能會(huì)是個(gè)小數(shù),應(yīng)該對(duì)其進(jìn)行四舍五入。所以,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ù)表達(dá)式中的HZ/2也是用來將LATCH向上圓整成一個(gè)整數(shù)。
2 表示系統(tǒng)當(dāng)前時(shí)間的內(nèi)核數(shù)據(jù)結(jié)構(gòu)
作為一種UNIX類操作系統(tǒng),Linux內(nèi)核顯然采用本節(jié)一開始所述的第三種方法來表示系統(tǒng)的當(dāng)前時(shí)間。Linux內(nèi)核在表示系統(tǒng)當(dāng)前時(shí)間時(shí)用到了三個(gè)重要的數(shù)據(jù)結(jié)構(gòu):
①全局變量jiffies:這是一個(gè)32位的無符號(hào)整數(shù),用來表示自內(nèi)核上一次啟動(dòng)以來的時(shí)鐘滴答次數(shù)。每發(fā)生一次時(shí)鐘滴答,內(nèi)核的時(shí)鐘中斷處 理函數(shù)timer_interrupt()都要將該全局變量jiffies加1。該變量定義在kernel/timer.c源文件中,如下所示:

unsigned long volatile jiffies;

C語言限定符volatile表示jiffies是一個(gè)易該變的變量,因此編譯器將使對(duì)該變量的訪問從不通過CPU內(nèi)部cache來進(jìn)行。
②全局變量xtime:它是一個(gè)timeval結(jié)構(gòu)類型的變量,用來表示當(dāng)前時(shí)間距UNIX時(shí)間基準(zhǔn)1970-01-01 00:00:00的相對(duì)秒數(shù)值。結(jié)構(gòu)timeval是Linux內(nèi)核表示時(shí)間的一種格式(Linux內(nèi)核對(duì)時(shí)間的表示有多種格式,每種格式都有不同的時(shí)間 精度),其時(shí)間精度是微秒。該結(jié)構(gòu)是內(nèi)核表示時(shí)間時(shí)最常用的一種格式,它定義在頭文件include/linux/time.h中,如下所示:

struct timeval {   time_t tv_sec; /* seconds */   suseconds_t tv_usec; /* microseconds */   };

其中,成員tv_sec表示當(dāng)前時(shí)間距UNIX時(shí)間基準(zhǔn)的秒數(shù)值,而成員tv_usec則表示一秒之內(nèi)的微秒值,且1000000>tv_usec>=0。
Linux內(nèi)核通過timeval結(jié)構(gòu)類型的全局變量xtime來維持當(dāng)前時(shí)間,該變量定義在kernel/timer.c文件中,如下所示:

/* The current time */   volatile struct timeval xtime __attribute__ ((aligned (16)));

但是,全局變量xtime所維持的當(dāng)前時(shí)間通常是供用戶來檢索和設(shè)置的,而其他內(nèi)核模塊通常很少使用它(其他內(nèi)核模塊用得最多的是 jiffies),因此對(duì)xtime的更新并不是一項(xiàng)緊迫的任務(wù),所以這一工作通常被延遲到時(shí)鐘中斷的底半部分(bottom half)中來進(jìn)行。由于bottom half的執(zhí)行時(shí)間帶有不確定性,因此為了記住內(nèi)核上一次更新xtime是什么時(shí)候,Linux內(nèi)核定義了一個(gè)類似于jiffies的全局變量 wall_jiffies,來保存內(nèi)核上一次更新xtime時(shí)的jiffies值。時(shí)鐘中斷的底半部分每一次更新xtime的時(shí)侯都會(huì)將 wall_jiffies更新為當(dāng)時(shí)的jiffies值。全局變量wall_jiffies定義在kernel/timer.c文件中:
/* jiffies at the most recent update of wall time */
unsigned long wall_jiffies;
③全局變量sys_tz:它是一個(gè)timezone結(jié)構(gòu)類型的全局變量,表示系統(tǒng)當(dāng)前的時(shí)區(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)當(dāng)前所處的時(shí)區(qū)信息,如下所示:

struct timezone sys_tz;

感謝各位的閱讀,以上就是“Linux內(nèi)核時(shí)鐘驅(qū)動(dòng)的基本概念”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)Linux內(nèi)核時(shí)鐘驅(qū)動(dòng)的基本概念這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

文章題目:Linux內(nèi)核時(shí)鐘驅(qū)動(dòng)的基本概念
鏈接URL:http://aaarwkj.com/article0/ijpoio.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)網(wǎng)站制作、網(wǎng)站維護(hù)、定制開發(fā)、外貿(mào)建站、響應(yīng)式網(wǎng)站、定制網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都app開發(fā)公司
白白色最新福利视频二| 精品久久久久久久久无| 91亚洲欧美日韩在线观看| 久久91亚洲精品久久91| 九九六热这里只有精品| 人妻口爆视频一区二区三区| 亚洲国产成人一区二区精品区| 成人免费毛片内射视频| 午夜福利视频在线观看| 中文字幕五月婷婷免费| 亚洲国产专区一区二区麻豆| 2023国产精品一区| 高潮内射一区二区三区| 午夜在线观看成人av| 亚洲精品熟女国产国产老熟女| 偷拍一区二区三区夫妻| 又黄又湿又刺激中文字幕| 日韩有码一区在线观看| 国产欧美亚洲精品一区二区| 亚洲欧洲另类美女久久精品| 日韩中字在线一区二区| 日韩欧美黄色三级视频| 国产传媒网站在线观看| 日本精品1区国产精品| 深夜av一区二区三区| 人妻av一区二区三区| 日本熟女肥臀一区二区| 美国一级黄片在线观看| 成年人免费国产视频网站| 欧美精品亚洲精品日韩| 国产成人亚洲精品另类动态| 神马影院在线观看午夜| 91国产在线视频免费观看| 91美女黑丝免费国产视频| 欧美一日韩一级片免费看| 亚洲全乱码精品一区二区| 亚洲激情久热中文字幕| 91精品产综合久久香蕉| 亚洲第一区二区国产精品| 亚洲最新一区二区在线观看| 夫妻性生活一级片视频|