操作系統(tǒng)基礎(chǔ)7-支持操作系統(tǒng)的最基本的硬件-時(shí)鐘

時(shí)鐘又稱為計(jì)時(shí)器,簡(jiǎn)單來(lái)說(shuō)作用就是負(fù)責(zé)維護(hù)時(shí)間。

可以分為兩種時(shí)間:硬件時(shí)鐘、系統(tǒng)時(shí)鐘

硬件時(shí)鐘:

是存儲(chǔ)在PC主板上CMOS里的時(shí)鐘,依靠電池供電的芯片(晶體振蕩器)。

什么是CMOS?【Complementary Metal Oxide Semiconductor互補(bǔ)金屬氧化物半導(dǎo)體】,它是指制造大規(guī)模集成電路芯片,用的一種技術(shù)或用這種技術(shù)制造出來(lái)的芯片,是電腦主板上的一塊可讀寫(xiě)的RAM芯片(存放數(shù)據(jù))。

也叫做RTC(Real Time Clock)時(shí)鐘或CMOS時(shí)鐘。即使系統(tǒng)斷電,RTC也可以維持日期和時(shí)間。由于它獨(dú)立于操作系統(tǒng),所以也被稱為硬件時(shí)鐘,它為整個(gè)計(jì)算機(jī)提供一個(gè)計(jì)時(shí)標(biāo)準(zhǔn),是最底層的時(shí)鐘數(shù)據(jù)。

晶振

系統(tǒng)時(shí)鐘

系統(tǒng)時(shí)鐘并不是本質(zhì)意義的時(shí)鐘,它實(shí)際是硬件(定時(shí)/計(jì)數(shù)器)和軟件(時(shí)鐘中斷處理程序)結(jié)合的產(chǎn)物。在開(kāi)機(jī)時(shí),操作系統(tǒng)取得硬件時(shí)鐘(RTC)中的時(shí)間數(shù)據(jù)來(lái)初始化系統(tǒng)時(shí)鐘,然后通過(guò)定時(shí)/計(jì)數(shù)芯片向下形成系統(tǒng)時(shí)鐘。定時(shí)/計(jì)數(shù)器Time Stamp CounterTSC)從RTC接收輸入脈沖,并對(duì)接收到脈沖計(jì)數(shù),每次計(jì)數(shù)到期,定時(shí)/計(jì)數(shù)器就產(chǎn)生一個(gè)輸出脈沖,而后再?gòu)念^開(kāi)始另一次計(jì)數(shù)。

定時(shí)/計(jì)數(shù)器采用可編程的定時(shí)/計(jì)數(shù)芯片(典型的芯片是8253/8254),總體上有兩部分組成:計(jì)數(shù)硬件通信寄存器。通信寄存器包含有控制寄存器、狀態(tài)寄存器、計(jì)數(shù)初始值寄存器、計(jì)數(shù)輸出寄存器等。通信寄存器計(jì)數(shù)硬件操心系統(tǒng)之間建立聯(lián)系,用于二者之間的通信。操作系統(tǒng)通過(guò)這些寄存器控制計(jì)數(shù)硬件的工作方式、讀取計(jì)數(shù)硬件的當(dāng)前狀態(tài)和計(jì)數(shù)值等信息。

在操心系統(tǒng)內(nèi)核初始化時(shí),內(nèi)核向定時(shí)/計(jì)數(shù)器寫(xiě)入控制字和計(jì)數(shù)初值,而后計(jì)數(shù)硬件就會(huì)按照一定的計(jì)數(shù)方式對(duì)晶振產(chǎn)生的脈沖進(jìn)行計(jì)數(shù)操作:計(jì)數(shù)器從計(jì)數(shù)初值開(kāi)始,每收到一次脈沖信號(hào),計(jì)數(shù)器就減1,當(dāng)計(jì)數(shù)器減至0時(shí),就會(huì)輸出高電平或低電平(輸出脈沖),然后從計(jì)數(shù)初值開(kāi)始重復(fù)另一次計(jì)數(shù),從而產(chǎn)生一個(gè)輸出脈沖。定時(shí)/計(jì)數(shù)器產(chǎn)生的輸出脈沖是系統(tǒng)時(shí)鐘的硬件基礎(chǔ),因?yàn)檫@個(gè)輸出脈沖將接到中斷控制器上,定期產(chǎn)生中斷信號(hào)。這個(gè)中斷就是時(shí)鐘中斷。操心系統(tǒng)利用時(shí)鐘中斷維護(hù)系統(tǒng)時(shí)鐘的正常工作。每次時(shí)鐘中斷,操作系統(tǒng)的時(shí)間計(jì)數(shù)變量就加1。

定時(shí)/計(jì)數(shù)器對(duì)從晶振輸入的脈沖進(jìn)行計(jì)數(shù)(分頻),產(chǎn)生三個(gè)輸出脈沖Out0、 Out1、Out2,三個(gè)輸出脈沖分別輸出到中斷控制器、DRAM和揚(yáng)聲器。Out0送到中斷控制器的0號(hào)管腳,觸發(fā)周期性的時(shí)鐘中斷。每個(gè)時(shí)鐘中斷稱為一個(gè)時(shí)鐘"滴答"(tick),Out0的輸出頻率就是產(chǎn)生時(shí)鐘中斷的頻率,也就是tick的頻率。

Linux操作系統(tǒng)中,這個(gè)頻率定義為:

#define HZ 100

即1秒鐘會(huì)產(chǎn)生100次中斷供系統(tǒng)軟件調(diào)度。

計(jì)算機(jī)內(nèi)部的時(shí)間以tick為單位,每一次時(shí)鐘滴答,系統(tǒng)時(shí)間就會(huì)加1。

Linux利用全局變量jiffies表示自系統(tǒng)啟動(dòng)以來(lái)的時(shí)鐘滴答數(shù)目。其定義為:

unsigned long volatile?jiffies=0;

除了jiffies外,Linux還提供了更符合人們習(xí)慣的時(shí)間表示方式,即用一個(gè)數(shù)據(jù)結(jié)構(gòu)表示時(shí)間,其定義為:

struct?timeval?{

int?tv_sec;?//秒

int?tv_usec; //微秒

}

在操作系統(tǒng)內(nèi)定義更符合大眾習(xí)慣的時(shí)間表示:年、月、日。當(dāng)然,所有的時(shí)間都建立在jiffies上。 因此,RTC也就是硬件時(shí)鐘處于最底層,提供最原始的時(shí)鐘數(shù)據(jù)。系統(tǒng)時(shí)鐘建立在硬件時(shí)鐘之上,初始化完成后 將完全由操作系統(tǒng)控制,和硬件時(shí)鐘脫離關(guān)系。操作系統(tǒng)通過(guò)系統(tǒng)時(shí)鐘提供給應(yīng)用程序所有和時(shí)間有關(guān)的服務(wù)。 由于系統(tǒng)時(shí)鐘基本是一個(gè)軟件變量,其表達(dá)時(shí)間的方式在不同的操作系統(tǒng)上也是不相同的。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容