日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

Linux操作系統(tǒng)內(nèi)核的時(shí)鐘中斷機(jī)制

摘要:
本文主要從內(nèi)核實(shí)現(xiàn)的角度分析了Linux 2.4.0內(nèi)核的時(shí)鐘中斷、內(nèi)核對時(shí)間的表示等 。本文是為那些想要了解Linux I/O子系統(tǒng)的讀者和Linux驅(qū)動(dòng)程序開發(fā)人員而寫的 。

關(guān)鍵詞:Linux、時(shí)鐘、定時(shí)器
申明:這份文檔是按照自由軟件開放源代碼的精神發(fā)布的,任何人可以免費(fèi)獲得、使用和重新發(fā)布,但是你沒有限制別人重新發(fā)布你發(fā)布內(nèi)容的權(quán)利 。發(fā)布本文的目的是希望它能對讀者有用,但沒有任何擔(dān)保,甚至沒有適合特定目的的隱含的擔(dān)保 。更詳細(xì)的情況請參閱GNU通用公共許可證(GPL),以及GNU自由文檔協(xié)議(GFDL) 。
你應(yīng)該已經(jīng)和文檔一起收到一份GNU通用公共許可證(GPL)的副本 。如果還沒有,寫信給:The Free Software Foundation, Inc., 675 Mass Ave, Cambridge,MA02139, USA 歡迎各位指出文檔中的錯(cuò)誤與疑問 。
前言
時(shí)間在一個(gè)操作系統(tǒng)內(nèi)核中占據(jù)著重要的地位,它是驅(qū)動(dòng)一個(gè)OS內(nèi)核運(yùn)行的“起博器” 。一般說來,內(nèi)核主要需要兩種類型的時(shí)間:
1. 在內(nèi)核運(yùn)行期間持續(xù)記錄當(dāng)前的時(shí)間與日期,以便內(nèi)核對某些對象和事件作時(shí)間標(biāo)記(timestamp,也稱為“時(shí)間戳”),或供用戶通過時(shí)間syscall進(jìn)行檢索 。
2. 維持一個(gè)固定周期的定時(shí)器,以提醒內(nèi)核或用戶一段時(shí)間已經(jīng)過去了 。
PC機(jī)中的時(shí)間是有三種時(shí)鐘硬件提供的,而這些時(shí)鐘硬件又都基于固定頻率的晶體振蕩器來提供時(shí)鐘方波信號輸入 。這三種時(shí)鐘硬件是:(1)實(shí)時(shí)時(shí)鐘(Real Time Clock,RTC);(2)可編程間隔定時(shí)器(Programmable Interval Timer,PIT);(3)時(shí)間戳計(jì)數(shù)器(Time Stamp Counter,TSC) 。
時(shí)鐘硬件
1、實(shí)時(shí)時(shí)鐘RTC
自從IBM PC AT起,所有的PC機(jī)就都包含了一個(gè)叫做實(shí)時(shí)時(shí)鐘(RTC)的時(shí)鐘芯片,以便在PC機(jī)斷電后仍然能夠繼續(xù)保持時(shí)間 。顯然,RTC是通過主板上的電池來供電的,而不是通過PC機(jī)電源來供電的,因此當(dāng)PC機(jī)關(guān)掉電源后,RTC仍然會(huì)繼續(xù)工作 。通常,CMOS RAM和RTC被集成到一塊芯片上,因此RTC也稱作“CMOS Timer” 。最常見的RTC芯片是MC146818(Motorola)和DS12887(maxim),DS12887完全兼容于MC146818,并有一定的擴(kuò)展 。本節(jié)內(nèi)容主要基于MC146818這一標(biāo)準(zhǔn)的RTC芯片 。具體內(nèi)容可以參考MC146818的Datasheet 。
1.1 RTC寄存器
MC146818 RTC芯片一共有64個(gè)寄存器 。它們的芯片內(nèi)部地址編號為0x00~0x3F(不是I/O端口地址),這些寄存器一共可以分為三組:
【Linux操作系統(tǒng)內(nèi)核的時(shí)鐘中斷機(jī)制】(1)時(shí)鐘與日歷寄存器組:共有10個(gè)(0x00~0x09),表示時(shí)間、日歷的具體信息 。在PC機(jī)中,這些寄存器中的值都是以BCD格式來存儲(chǔ)的(比如23dec=0x23BCD) 。
(2)狀態(tài)和控制寄存器組:共有4個(gè)(0x0A~0x0D),控制RTC芯片的工作方式,并表示當(dāng)前的狀態(tài) 。
(3)CMOS配置數(shù)據(jù):通用的CMOS RAM,它們與時(shí)間無關(guān),因此我們不關(guān)心它 。
時(shí)鐘與日歷寄存器組的詳細(xì)解釋如下:

Address Function;
00 Current second for RTC;
01 Alarm second;
02 Current minute;
03 Alarm minute;
04 Current hour;
05 Alarm hour;
06 Current day of week(01=Sunday);
07 Current date of month;
08 Current month;
09 Current year(final two digits,eg:93)
狀態(tài)寄存器A(地址0x0A)的格式如下:
其中:
(1)bit[7]——UIP標(biāo)志(Update in Progress),為1表示RTC正在更新日歷寄存器組中的值,此時(shí)日歷寄存器組是不可訪問的(此時(shí)訪問它們將得到一個(gè)無意義的漸變值) 。
(2)bit[6:4]——這三位是“除法器控制位”(divider-control bits),用來定義RTC的操作頻率 。各種可能的值如下:

Divider bits Time-base frequency Divider Reset Operation Mode;

推薦閱讀