亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

用于喚醒計(jì)算機(jī)系統(tǒng)的低功率振鈴檢測(cè)的制作方法

文檔序號(hào):7566636閱讀:390來(lái)源:國(guó)知局
專(zhuān)利名稱(chēng):用于喚醒計(jì)算機(jī)系統(tǒng)的低功率振鈴檢測(cè)的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及到下列未決的申請(qǐng)申請(qǐng)第08/097334號(hào),1993年7月23日提出,題為“帶有單一開(kāi)關(guān)掛起/繼續(xù)功能的臺(tái)式計(jì)算機(jī)”(委托案第BC9-93-018(21322/00158)號(hào));申請(qǐng)第08/097250號(hào),1993年7月26日提出,題為“具有零電壓系統(tǒng)掛起的臺(tái)式計(jì)算機(jī)系統(tǒng)”(委托案第BC9-93-016(21322/00161)號(hào));申請(qǐng)第08/097246號(hào),1993年7月23日提出,題為“保存和恢復(fù)在受保護(hù)方式下執(zhí)行代碼的CPU的狀態(tài)的方法”(委托案第BC9-93-017(21322/00162)號(hào));申請(qǐng)第08/097251號(hào),1993年7月26日提出,題為“具有多級(jí)電源管理的臺(tái)式計(jì)算機(jī)系統(tǒng)”(委托案第BC9-93-015號(hào)(21322/00163)號(hào));申請(qǐng)第08/303102號(hào),1994年9月7日提出,題為“掛起系統(tǒng)中電源故障的自動(dòng)排除”(委托案第BC9-94-043(21322一00197)號(hào));申請(qǐng)第08/302148號(hào),1994年9月7日提出,題為“掛起文件的自動(dòng)分配”(委托案第BC9-94-044(21322/00198)號(hào));申請(qǐng)第08/279639號(hào),1994年7月25日提出,題為“用于掛起系統(tǒng)的電源管理處理器”(委托案第BC9-94-103(21322-00203)號(hào));申請(qǐng)第08/302147號(hào),1994年9月7日提出,題為“用于掛起系統(tǒng)的多功能電源開(kāi)關(guān)和反饋LED”(委托案第BC9-94-108(21322-00202));申請(qǐng)第08/302157號(hào),1994年9月7日提出,題為“用于計(jì)算機(jī)系統(tǒng)喚醒的低功率振鈴檢測(cè)”(委托案第BC9-94-110(21322-002404)號(hào));申請(qǐng)第08/301464號(hào),1994年9月7日提出,題為“斷電時(shí)用系統(tǒng)管理中斷執(zhí)行系統(tǒng)任務(wù)”(委托案第BC9-94-112(21322-00206)號(hào));申請(qǐng)第08/302066號(hào),1994年9月7日提出,題為“掉電之后用戶(hù)選擇的自動(dòng)恢復(fù)”(委托案第BC9-94-113(21322-00207)號(hào));申請(qǐng)第08/303103號(hào),1994年9月7日提出,題為“用于防止數(shù)據(jù)丟失的待機(jī)檢查點(diǎn)”(委托案第BC9-94-114(21322-00208)號(hào));申請(qǐng)第號(hào),1994年月日提出,題為“用于高級(jí)電源管理(APM)的自動(dòng)備份系統(tǒng)”(委托案第BC9-94-01118號(hào));本發(fā)明在總體上涉及計(jì)算機(jī)系統(tǒng)的結(jié)構(gòu),具體地說(shuō),涉及到一種具有系統(tǒng)掛起/繼續(xù)能力的臺(tái)式計(jì)算機(jī)系統(tǒng),該系統(tǒng)帶有一多功能開(kāi)關(guān)和受BIOS支持的發(fā)光二極管(LED),所說(shuō)的開(kāi)關(guān)能進(jìn)行狀態(tài)轉(zhuǎn)換,從而使系統(tǒng)更便于使用。
個(gè)人計(jì)算機(jī)系統(tǒng)在本技術(shù)中是周知的。一般的個(gè)人計(jì)算機(jī)系統(tǒng)特別是IBM個(gè)人計(jì)算機(jī)系統(tǒng)業(yè)已有廣泛的應(yīng)用,從而為當(dāng)今社會(huì)的許多方面提供了計(jì)算機(jī)的威力。個(gè)人計(jì)算機(jī)一般界定為臺(tái)式微機(jī)、落地式微機(jī)或便攜式微機(jī),它包括一系統(tǒng)組件,此組件帶有一個(gè)單一的中央處理單元(CPU)以及包括所有RAM和BIOSROM在內(nèi)的相關(guān)易失性和非易失性存儲(chǔ)器,一系統(tǒng)監(jiān)視器、一鍵盤(pán)、一個(gè)或多個(gè)軟盤(pán)驅(qū)動(dòng)器、一固定的磁盤(pán)存儲(chǔ)器(也稱(chēng)為“硬盤(pán)驅(qū)動(dòng)器”)、一稱(chēng)為“鼠標(biāo)器”的指點(diǎn)設(shè)備以及一可選擇的打印機(jī)。這類(lèi)系統(tǒng)的顯著特點(diǎn)之一是使用了母板或系統(tǒng)主板以便將上述組件以電氣的方式連接在一起。這類(lèi)系統(tǒng)最初設(shè)計(jì)成給單用戶(hù)以獨(dú)立的計(jì)算能力并且具有不貴的價(jià)格,以便個(gè)人或小型公司購(gòu)買(mǎi)。這類(lèi)個(gè)人計(jì)算機(jī)系統(tǒng)的實(shí)例是IBM中PERSONALCOMPUTER AT和IBM的PERSONAL SYSTEM/1(IBM PS/1)。
個(gè)人計(jì)算機(jī)通常用于運(yùn)行軟件以執(zhí)行各種活動(dòng),如字處理、通過(guò)電子數(shù)據(jù)表格進(jìn)行數(shù)據(jù)處理、在數(shù)據(jù)庫(kù)中收集數(shù)據(jù)并建立數(shù)據(jù)之間的聯(lián)系、顯示圖形、用系統(tǒng)設(shè)計(jì)軟件設(shè)計(jì)電子或機(jī)械系統(tǒng)等等。
上述申請(qǐng)書(shū)中的前四個(gè)相關(guān)的申請(qǐng)公開(kāi)了一種具有四種電源管理狀態(tài)的計(jì)算機(jī)系統(tǒng),這四種狀態(tài)是正常操作狀態(tài)、待機(jī)狀態(tài)、掛起狀態(tài)和關(guān)機(jī)狀態(tài)。用一個(gè)開(kāi)關(guān)在關(guān)機(jī)狀態(tài)、正常操作狀態(tài)以及掛起狀態(tài)之間進(jìn)行狀態(tài)改變。
本發(fā)明之計(jì)算機(jī)系統(tǒng)的正常操作狀態(tài)實(shí)際上與一般臺(tái)式計(jì)算機(jī)的正常操作狀態(tài)相同。用戶(hù)可以使用應(yīng)用程序并基本上同其它計(jì)算機(jī)一樣對(duì)待這種計(jì)算機(jī)。一個(gè)不同就是存在有電源管理驅(qū)動(dòng)程序,該程序在后臺(tái)運(yùn)行(在BIOS和操作系統(tǒng)中運(yùn)行)并且對(duì)用戶(hù)是透明的。該電源管理驅(qū)動(dòng)程序在操作系統(tǒng)(OS)中的那部分是由Intel和Microsoft公司所寫(xiě)的高級(jí)電源管理(APM)的新式程序設(shè)計(jì)接口,這種接口存在于大多數(shù)在Intel80×86系列處理器上運(yùn)行的操作系統(tǒng)中。上述電源管理驅(qū)動(dòng)程序在BIOS(APMBIOS)中的那部分與APM OS驅(qū)動(dòng)程序互通。APM OS驅(qū)動(dòng)程序和APM BIOS例程一道控制著計(jì)算機(jī)向上述其它三種狀態(tài)的轉(zhuǎn)換以及來(lái)自這三種狀態(tài)的轉(zhuǎn)換。
第二種狀態(tài)即待機(jī)狀態(tài),它比正常操作狀態(tài)使用更少的電量,但仍使任何應(yīng)用程序象它們?cè)谄渌闆r下運(yùn)行一樣地運(yùn)行。一般地說(shuō),在待機(jī)狀態(tài)下,通過(guò)使各設(shè)備處于相應(yīng)的低功耗狀態(tài)而節(jié)省了電能。例如,在待機(jī)狀態(tài)下通過(guò)使磁盤(pán)驅(qū)動(dòng)器內(nèi)的固定式磁盤(pán)停止旋轉(zhuǎn)以及通過(guò)停止生成視頻信號(hào),可以節(jié)省電能。
第三種狀態(tài)是掛起狀態(tài)。在掛起狀態(tài)下,計(jì)算機(jī)系統(tǒng)消耗極小量的電能。掛起的計(jì)算機(jī)消耗很少的來(lái)自壁裝電源插座的電量。僅有的功耗是用于維持監(jiān)控計(jì)算機(jī)系統(tǒng)內(nèi)部電池的開(kāi)關(guān)的電路的少量功耗(當(dāng)計(jì)算機(jī)系統(tǒng)不接收交流電時(shí))或者是電源在輔助電源線(xiàn)上所產(chǎn)生的少量功耗(當(dāng)計(jì)算機(jī)系統(tǒng)接收交流電時(shí))。
通過(guò)在電源關(guān)閉之前將計(jì)算機(jī)的狀態(tài)保存到固定磁盤(pán)存儲(chǔ)器(硬盤(pán)驅(qū)動(dòng)器)中,可以實(shí)現(xiàn)少量的用電。為了進(jìn)入掛起狀態(tài),計(jì)算機(jī)系統(tǒng)中斷任何正在執(zhí)行的代碼并把對(duì)計(jì)算機(jī)的控制權(quán)交給電源管理驅(qū)動(dòng)程序。該電源管理驅(qū)動(dòng)程序確定計(jì)算機(jī)系統(tǒng)的狀態(tài)并將該狀態(tài)寫(xiě)至固定磁盤(pán)存儲(chǔ)器。CPU寄存器、CPU高速緩沖存儲(chǔ)器、系統(tǒng)內(nèi)存、系統(tǒng)高速緩沖存儲(chǔ)器、視頻寄存器、視頻內(nèi)存以及其它設(shè)備寄存器等的狀態(tài)全都寫(xiě)至固定磁盤(pán)。將系統(tǒng)的整個(gè)狀態(tài)以這樣的方式保存起來(lái)在中斷不對(duì)代碼應(yīng)用程序產(chǎn)生不利影響的情況下將計(jì)算機(jī)系統(tǒng)的狀態(tài)保存起來(lái)。然后,計(jì)算機(jī)將數(shù)據(jù)寫(xiě)入非易失性CMOS存儲(chǔ)器中以指示系統(tǒng)已掛起。最后,計(jì)算機(jī)使電源停止供電。計(jì)算機(jī)的整個(gè)狀態(tài)可靠地保存在固定磁盤(pán)存儲(chǔ)器中,系統(tǒng)功耗當(dāng)前處于“停止”,這時(shí),計(jì)算機(jī)只從電源中接收少量的穩(wěn)壓電力以供應(yīng)監(jiān)控開(kāi)關(guān)的電路。
第四種也是最后一種狀態(tài)是關(guān)機(jī)狀態(tài)。在這種狀態(tài)下,電源停止向計(jì)算機(jī)系統(tǒng)提供穩(wěn)定的電能,計(jì)算機(jī)系統(tǒng)的狀態(tài)也不保存在固定磁盤(pán)內(nèi)。這種關(guān)機(jī)狀態(tài)實(shí)際上等同于按通常的方式關(guān)閉一般的臺(tái)式計(jì)算機(jī)。
從一種狀態(tài)到另一種狀態(tài)的轉(zhuǎn)換是由電源管理驅(qū)動(dòng)程序控制的并且通常是以一個(gè)開(kāi)關(guān)、一個(gè)標(biāo)志以及兩個(gè)計(jì)時(shí)器即不活動(dòng)性待機(jī)計(jì)時(shí)器和不活動(dòng)性?huà)炱鹩?jì)時(shí)器的關(guān)閉事件為基礎(chǔ)的。所述計(jì)算機(jī)系統(tǒng)帶有一個(gè)單一的電源開(kāi)關(guān),此開(kāi)關(guān)用于開(kāi)啟計(jì)算機(jī)系統(tǒng),掛起計(jì)算機(jī)系統(tǒng)的狀態(tài)、恢復(fù)計(jì)算機(jī)系統(tǒng)的狀態(tài)以及關(guān)閉計(jì)算機(jī)系統(tǒng)。
調(diào)制解調(diào)器以及傳真/調(diào)制解調(diào)器正日益成為所謂標(biāo)準(zhǔn)PC系統(tǒng)的一部分。在用戶(hù)用來(lái)接收傳真報(bào)文或允許人們使用調(diào)制解調(diào)器與計(jì)算機(jī)相連的大多數(shù)系統(tǒng)中,使用者必須使計(jì)算機(jī)處于開(kāi)機(jī)狀態(tài)。因此,利用通常的系統(tǒng)用戶(hù)必須放棄任何掛起狀態(tài)的節(jié)電優(yōu)點(diǎn),這是因?yàn)?,除了電源開(kāi)關(guān)以外,再?zèng)]有起動(dòng)計(jì)算機(jī)系的外部方法了。用戶(hù)可以將計(jì)算機(jī)設(shè)置成需要少量電力的“待機(jī)”模式,但仍然會(huì)浪費(fèi)電能,因?yàn)椋仨氁o計(jì)算機(jī)供電,從而它能給內(nèi)部調(diào)制解調(diào)器加電,這樣調(diào)制解調(diào)器才能應(yīng)答電話(huà)。如果用戶(hù)使用外部調(diào)制解調(diào)器,則處于關(guān)機(jī)狀態(tài)的計(jì)算機(jī)無(wú)法檢測(cè)到該調(diào)制解調(diào)器所提供的振鈴指示信號(hào)。
響應(yīng)電話(huà)振鈴而進(jìn)行狀態(tài)轉(zhuǎn)換的一般系統(tǒng)有許多問(wèn)題。這種系統(tǒng)要么(i)使用具有低功耗模式的昂貴且特殊的集成電路,要么(ii)重復(fù)調(diào)制解調(diào)器振鈴電路的大部分,或者(iii)使計(jì)算機(jī)系統(tǒng)的大部分保持在加電狀態(tài),從而消耗比需要電量更多的電量。
更關(guān)鍵的是,通常系統(tǒng)會(huì)響應(yīng)沿電話(huà)線(xiàn)上的多種信號(hào)而引起狀態(tài)轉(zhuǎn)換,這些信號(hào)如線(xiàn)路檢測(cè)信號(hào)或電話(huà)線(xiàn)上的噪聲等并不是真正的振鈴。這些錯(cuò)誤的狀態(tài)轉(zhuǎn)換會(huì)浪費(fèi)電能,并且會(huì)給用戶(hù)添麻煩。
利用本發(fā)明,對(duì)計(jì)算機(jī)作了改進(jìn),因此,該計(jì)算機(jī)可以檢測(cè)到直接來(lái)自未加電的內(nèi)部調(diào)制解調(diào)器的振鈴或者來(lái)自已加電的外部調(diào)制解調(diào)器的持鈴指示信號(hào),同時(shí),計(jì)算機(jī)會(huì)處于極低功耗的狀態(tài)。按照本發(fā)明,當(dāng)把個(gè)人計(jì)算機(jī)(PC)插在電源插座上時(shí),微控制器會(huì)連續(xù)地執(zhí)行代碼。微控制器用一定制電源加電,該定制電源能提供由控制線(xiàn)所開(kāi)關(guān)的輔助5V直流電。
微控制器控制計(jì)算機(jī)系統(tǒng)的其余部分是否從電源中接收穩(wěn)定的電力。微控制器的一個(gè)輸入端與來(lái)自計(jì)算機(jī)標(biāo)準(zhǔn)RS-232串行端口的RING_IN相連。當(dāng)微控制器檢測(cè)到信號(hào)的有效電平時(shí),它就會(huì)使電源開(kāi)始向計(jì)算機(jī)系統(tǒng)提供穩(wěn)定的電力。微控制器的另一個(gè)輸入端與標(biāo)準(zhǔn)的內(nèi)部調(diào)制解調(diào)器的標(biāo)準(zhǔn)調(diào)制解調(diào)器振鈴光隔離器相連,所說(shuō)的調(diào)制解調(diào)器作了改進(jìn),從而能經(jīng)由電纜從光隔離器中提供信號(hào)。
微控制器除了按Tip和Ring兩端的特定電壓來(lái)檢測(cè)電能以外還對(duì)來(lái)自光隔離器的信號(hào)作兩種檢查。首先,微控制器不斷地在線(xiàn)路中檢測(cè)對(duì)應(yīng)于有效振鈴信號(hào)的頻率范圍內(nèi)的信號(hào)。僅是這項(xiàng)檢測(cè)便能過(guò)濾掉一般系統(tǒng)認(rèn)為是振鈴的多種信號(hào)。微控制器在檢測(cè)到指定頻率范圍內(nèi)的振鈴時(shí)會(huì)立即使電源開(kāi)始向計(jì)算機(jī)系統(tǒng)提供穩(wěn)定的電力。
第二,一旦電源向計(jì)算機(jī)系統(tǒng)提供穩(wěn)定的電力并且計(jì)算機(jī)系統(tǒng)引導(dǎo),BIOS就進(jìn)行另一項(xiàng)檢查。響應(yīng)微控制器檢測(cè)到適當(dāng)頻率的振鈴信號(hào),該微控制器立即使電源開(kāi)始向計(jì)算機(jī)系統(tǒng)提供穩(wěn)定的電力。當(dāng)硬驅(qū)起轉(zhuǎn)時(shí),BIOS會(huì)查詢(xún)調(diào)制解調(diào)器是否也已檢測(cè)到了振鈴。如果該調(diào)制解調(diào)器的振鈴檢測(cè)電路也已檢測(cè)到了振鈴,則上述引導(dǎo)過(guò)程會(huì)繼續(xù)。如果調(diào)制解調(diào)器沒(méi)有檢測(cè)到振鈴,則計(jì)算機(jī)系統(tǒng)會(huì)斷電。
這種方法的好處是計(jì)算機(jī)系統(tǒng)可以響應(yīng)真正的振鈴而進(jìn)入通常的操作系統(tǒng),并且,如果使適當(dāng)?shù)能浖?,同一旦恢?fù)了計(jì)算機(jī)系統(tǒng)的狀態(tài),它就可以接收并處理來(lái)自調(diào)制解調(diào)器/串行端口的輸入數(shù)據(jù)。此后,計(jì)算機(jī)系統(tǒng)重新進(jìn)入關(guān)機(jī)狀態(tài)或掛起狀態(tài)。
上述系統(tǒng)在不增加第二條電話(huà)線(xiàn),不增加專(zhuān)用電話(huà)應(yīng)答系統(tǒng)以及不對(duì)計(jì)算機(jī)系統(tǒng)增加顯著成本的情況下,可為家用PC系統(tǒng)提供遠(yuǎn)程存取能力。用戶(hù)可以使計(jì)算機(jī)系統(tǒng)關(guān)機(jī),而一個(gè)或多個(gè)應(yīng)用程序卻處于有效狀態(tài)并隨時(shí)可以執(zhí)行計(jì)算機(jī)系統(tǒng)繼續(xù)時(shí)所請(qǐng)求的任務(wù)。用戶(hù)可以快速連續(xù)撥兩次電話(huà)號(hào)碼并建立主連接。第一次撥號(hào)在不觸發(fā)應(yīng)答機(jī)的情況下喚醒計(jì)算機(jī)系統(tǒng),第二次撥號(hào)仍在不觸發(fā)應(yīng)答機(jī)的情況下使計(jì)算機(jī)系統(tǒng)應(yīng)答并建立主連接對(duì)話(huà)。
所說(shuō)的系統(tǒng)還可以同內(nèi)部及外部調(diào)制解調(diào)器一起工作。另外,RING_IN線(xiàn)也可以用于來(lái)自諸如光測(cè)器或聲音識(shí)別系統(tǒng)之類(lèi)的其它設(shè)備的外部喚醒信號(hào)。為了起動(dòng)計(jì)算機(jī)系統(tǒng),外部設(shè)備只需將該線(xiàn)設(shè)置為有效狀態(tài)。
所說(shuō)的系統(tǒng)具有很低的用電率,這是因?yàn)?,?nèi)部調(diào)制解調(diào)器不必通電,只有電源管理微控制器需要加電。
從對(duì)本發(fā)明的詳細(xì)說(shuō)明中可以更清楚地看出本發(fā)明的上述及其它優(yōu)點(diǎn)。
包括在本說(shuō)明書(shū)中并構(gòu)成本說(shuō)明書(shū)一部分的附圖,連同以上對(duì)本發(fā)明的總體描述,說(shuō)明了本發(fā)明的實(shí)施例,并且,以下給出的詳細(xì)說(shuō)明用于例證本發(fā)明的原理。


圖1是體現(xiàn)本發(fā)明的個(gè)人計(jì)算機(jī)的透視圖;圖2是圖1中個(gè)人計(jì)算機(jī)某些部件的分解透視圖,它包括一機(jī)箱、一罩蓋、一機(jī)電直接存取存儲(chǔ)器以及一主板并說(shuō)明了這些部件之間的特定關(guān)系;圖3A和圖3B顯示了圖1和圖2中個(gè)人計(jì)算機(jī)某些組件的框圖;圖4為本發(fā)明之計(jì)算機(jī)系統(tǒng)的狀態(tài)圖,它顯示四種系統(tǒng)狀態(tài)正常狀態(tài)、待機(jī)狀態(tài)、掛起狀態(tài)和關(guān)機(jī)狀態(tài);圖5是顯示電源有關(guān)部分的框圖;圖6A為本發(fā)明之電源管理電路的概略電路圖,它顯示了與其它圖的各個(gè)接口;圖6B是使上述電源管理電路與內(nèi)部調(diào)制解調(diào)器相連的概略電路圖6C是顯示用于上述電源管理電路的復(fù)位電路中各個(gè)信號(hào)的波形圖;圖6D是電源故障檢修電路第二實(shí)施例的概略電路圖;圖7是由本發(fā)明之電源管理處理器所維持的開(kāi)關(guān)狀態(tài)之一的狀態(tài)圖;圖8是總體上顯示本發(fā)明加電例程的流程圖;圖9A是管理例程的詳細(xì)流程圖,操作系統(tǒng)中的APM設(shè)備驅(qū)動(dòng)器大約每一秒鐘調(diào)用該管理例程;圖9B是顯示APM處理最近請(qǐng)求例程(APM Working OnLast Request Routine)細(xì)節(jié)的流程圖;圖9C是顯示APM拒絕最近請(qǐng)示例程(APM Reject ONLast Request Routine)細(xì)節(jié)的流程圖;圖10是顯示本發(fā)明之掛起例程(Suspend Routine)細(xì)節(jié)的流程圖;圖11是顯示本發(fā)明之引導(dǎo)例程(Boot-up Routine)細(xì)節(jié)的流程圖;圖12是顯示本發(fā)明之繼續(xù)例程(Resume Routine)細(xì)節(jié)的流程圖;圖13是顯示本發(fā)明之保存CPU狀態(tài)例程(Save CPU StateRoutine)細(xì)節(jié)的流程圖;圖14是顯示本發(fā)明之恢復(fù)CPU狀態(tài)例程(Restore CPUState Routine)細(xì)節(jié)的流程圖;圖15是顯示本發(fā)明之保存8959狀態(tài)例程(Save8959StateRoutine)細(xì)節(jié)的流程圖16是顯示本發(fā)明之動(dòng)態(tài)保存文件分配例程(DynamicSave File Allocation)細(xì)節(jié)的流程圖;圖17是顯示本發(fā)明的退出待機(jī)狀態(tài)例程(Exit StandbyRoutine)細(xì)節(jié)的流程圖;圖18是顯示本發(fā)明之進(jìn)入待機(jī)狀態(tài)例程(Enter StandbyRoutine)細(xì)節(jié)的流程圖;以及圖19是顯示本發(fā)明之電源管理處理器例程(PowerManagement Processor Routines)細(xì)節(jié)的流程圖。
在以下參照顯示本發(fā)明之最佳實(shí)施例的附圖詳細(xì)說(shuō)明本發(fā)明時(shí),從以下說(shuō)明的一開(kāi)始就應(yīng)該認(rèn)識(shí)到,本技術(shù)的專(zhuān)家可以改進(jìn)本文所述的發(fā)明,但仍能獲得本發(fā)明的良好結(jié)果。因此,應(yīng)該將以下的說(shuō)明理解為是以本技術(shù)的專(zhuān)家為對(duì)象的廣義的教導(dǎo)性公開(kāi),并且不限制本發(fā)明。本發(fā)明涉及到計(jì)算機(jī)系統(tǒng)的整體設(shè)計(jì),包括但不局限于計(jì)算機(jī)體系結(jié)構(gòu)設(shè)計(jì)、數(shù)字設(shè)計(jì)、BIOS設(shè)計(jì)、保護(hù)模式的80486代碼設(shè)計(jì)、應(yīng)用程序代碼設(shè)計(jì)、操作系統(tǒng)代碼設(shè)計(jì)以及高級(jí)電源管理的新式程序設(shè)計(jì)界面的使用。
參照附圖,顯示了體現(xiàn)本發(fā)明的微機(jī)系統(tǒng)并總體上用標(biāo)號(hào)10表示(圖1)。如上所述,計(jì)算機(jī)10帶有相連的顯示器11、鍵盤(pán)12、鼠標(biāo)器13以及打印機(jī)或繪圖儀14。計(jì)算機(jī)10帶有一罩蓋15,此罩蓋由裝飾性外部部件16(圖2)以及一內(nèi)部保護(hù)部件18構(gòu)成,此部件與機(jī)箱19相連從而確定了一封密有屏蔽的空間以便接收加電的數(shù)據(jù)處理和存儲(chǔ)組件,這些組件用于處理和存儲(chǔ)數(shù)字?jǐn)?shù)據(jù)。這些組件中的至少某一些安裝在多層主板20或母板上,而主板則安裝在機(jī)箱19上并提供了使計(jì)算機(jī)10的組件相互電連接的裝置,所說(shuō)的組件包括上述組件以及其它相關(guān)的部件如軟盤(pán)驅(qū)動(dòng)器,各種形式的直接存取存儲(chǔ)器、附件的適配器卡或適配器板以及類(lèi)似的部件等。正如以后將要詳細(xì)說(shuō)明的那樣,在主板20上設(shè)置了朝向或來(lái)自微機(jī)操作組件的輸入/輸出信號(hào)的通路。
所說(shuō)的計(jì)算機(jī)系統(tǒng)帶有一電源17;一電源按鈕21,下文中稱(chēng)開(kāi)關(guān)21;以及一電源/反饋LED23。與一般系統(tǒng)內(nèi)的通常電源開(kāi)關(guān)不同,電源按鈕21并不將交流電切換至電源17或從該電源17切換,這將在以下予以說(shuō)明。機(jī)箱19帶有標(biāo)號(hào)22所示的底座;標(biāo)號(hào)24所示的前部面板;以及標(biāo)號(hào)25所示的后部面板(圖2)。前部面板24限定了至少一個(gè)開(kāi)放的凹槽(在所示的圖中有四個(gè)凹槽),以便接收諸如磁盤(pán)或光盤(pán)驅(qū)動(dòng)器、后備磁帶機(jī)之類(lèi)的數(shù)據(jù)存儲(chǔ)裝置或類(lèi)似的設(shè)備。在所示的圖中設(shè)置了一對(duì)上部凹槽26、28以及一對(duì)下部凹槽29、30。上部凹槽中的一個(gè)26用于接收第一尺寸的外部設(shè)備(如3.5英寸的驅(qū)動(dòng)器),另一個(gè)28則用接收兩種尺寸(如3.5和5.25英寸)中選定的一種驅(qū)動(dòng)器,下部凹槽用于接收一種尺寸(3.5英寸)的驅(qū)動(dòng)器。圖1中標(biāo)號(hào)27表示一軟盤(pán)驅(qū)動(dòng)器,此驅(qū)動(dòng)器是一可裝卸式直接存取存儲(chǔ)器,這種存儲(chǔ)器可以接收插進(jìn)來(lái)的軟盤(pán)并如眾所周知的那樣用軟盤(pán)接收、存儲(chǔ)和傳送數(shù)據(jù)。標(biāo)號(hào)31表示一硬盤(pán)驅(qū)動(dòng)器,此驅(qū)動(dòng)器是一固定式直接存取存儲(chǔ)器,這種存儲(chǔ)器可以如眾所周知的那樣存儲(chǔ)和傳遞數(shù)據(jù)。
在說(shuō)明上述結(jié)構(gòu)與本發(fā)明的關(guān)系之前,有必要概述一下個(gè)人計(jì)算機(jī)系統(tǒng)10的通常操作。參照?qǐng)D3A和圖3B,顯示了個(gè)人計(jì)算機(jī)系統(tǒng)的框圖,該框圖說(shuō)明了諸如本發(fā)明之系統(tǒng)10之類(lèi)的計(jì)算機(jī)系統(tǒng)的各種組件,包括安裝在主板20上的組件以及主板與I/O槽和個(gè)人計(jì)算機(jī)系統(tǒng)其它硬件的連接件。與主板相連的是系統(tǒng)處理器40,也即CPU40,它包括一微處理器,該微處理器通過(guò)高速CPU局部總線(xiàn)42與內(nèi)存控制部件46相連,而內(nèi)存控制部件則又與易失性隨機(jī)存取存儲(chǔ)器(RAM)53相連。內(nèi)存控制部件46包括內(nèi)存控制器48、地址多路復(fù)用器50以及數(shù)據(jù)緩沖區(qū)52。內(nèi)存控制部件46還與由四個(gè)RAM組件54所表示的隨機(jī)存取存儲(chǔ)器53相連。內(nèi)存控制器48包括邏輯線(xiàn)路,此邏輯線(xiàn)路用于把去往和來(lái)自微處理器40的地址映射到RAM53的特定區(qū)域。所說(shuō)的邏輯線(xiàn)路用于回收先前被BIOS占用的RAM。此外,內(nèi)存控制器48還生成ROM選擇信號(hào)(ROMSEL),此信號(hào)用于啟動(dòng)或中止ROM88。雖然任何適當(dāng)?shù)奈⑻幚砥鞫伎捎米飨到y(tǒng)處理器40,一種合適的微處理器是INTEL公司出售的80486。Intel80486帶有內(nèi)部高速緩沖存儲(chǔ)器,所以是Intel80486的任何CPU40都帶有CPU高速緩沖存儲(chǔ)器41。
雖然在下文中是參照?qǐng)D3A和圖3B的系統(tǒng)框圖來(lái)說(shuō)明本發(fā)明的,但是,在以下說(shuō)明的一開(kāi)始就應(yīng)理解,本發(fā)明的設(shè)備與方法可和主板的其它硬件配置一道使用。例如,系統(tǒng)處理器40可以是Intel80286或80386微處理器。正如本文所使用的那樣,凡涉及到80286、80386或80486一般均指可從Intel公司獲得的微處理器。但是,最近也有其它生產(chǎn)者業(yè)已開(kāi)發(fā)出了能執(zhí)行Intel X86結(jié)構(gòu)的指令集的微處理器,因而所述術(shù)語(yǔ)的用法包括了任何能執(zhí)行該指令集的微處理器。正如本技術(shù)的專(zhuān)家所熟知的那樣,早期的個(gè)人計(jì)算機(jī)一般把那時(shí)流行的Intel8088或8086微處理器用作系統(tǒng)處理器。這種處理器具有一兆字節(jié)內(nèi)存的尋址能力。最近,個(gè)人計(jì)算機(jī)一般都使用高速的Intel80286、80386以及80486微處理器,這些微處理器能以虛模式或?qū)嵞J竭\(yùn)行來(lái)仿真較低速度的8086微處理器,或者以保護(hù)方式運(yùn)行,從而對(duì)某些機(jī)型來(lái)說(shuō)可將尋址范圍從一兆字節(jié)擴(kuò)大至四千兆字節(jié)。從本質(zhì)上說(shuō),80286、80386以及80486處理器的實(shí)模式的特征使得硬件與為8086和8088微處理器所寫(xiě)的軟件相兼容。所述Intel系統(tǒng)的微處理器通常只用涉及到整個(gè)類(lèi)型符后三位數(shù)字的三位數(shù)來(lái)表示,如“486”等。
以下回到圖3A和3B,CPU局部總線(xiàn)42(包括來(lái)顯示的數(shù)據(jù),尋址和控制組成部分)將微處理器40、數(shù)字協(xié)處理器44(如果不在CPU40內(nèi)的話(huà))、視頻控制器56、系統(tǒng)高速緩沖存儲(chǔ)器60以及高速緩沖存儲(chǔ)器控制器62連接起來(lái)。視頻控制器56帶有與之相聯(lián)的監(jiān)視器(或視頻顯示終端)11以及視頻存儲(chǔ)器58。緩沖器64也連在CPU局部總線(xiàn)42上。緩沖器64又與(和CPU局部總線(xiàn)42相比)速度較低的系統(tǒng)總線(xiàn)66相連,系統(tǒng)總線(xiàn)也包括地址、數(shù)據(jù)和控制組成部分并且在緩沖器64與另一緩沖器68之間延伸。系統(tǒng)總線(xiàn)66還與總線(xiàn)控制及定時(shí)部件70和DMA(直接存儲(chǔ)器存取)部件71。相連DMA部件71包括中央仲裁器82以及DMA控制器72。輔助緩沖器74提供了系統(tǒng)總線(xiàn)66與諸如工業(yè)標(biāo)準(zhǔn)結(jié)構(gòu)(ISA)總線(xiàn)之類(lèi)的可選的特性總線(xiàn)76之間的接口??偩€(xiàn)76與多個(gè)用于接收ISA適配器卡(未顯示)的I/O槽78相連。ISA適配器卡以插接的方式與I/O槽78相連并為系統(tǒng)10提供了附加的I/O設(shè)備或存儲(chǔ)器。
仲裁控制總線(xiàn)80將DMA控制器72及中央仲裁器82與I/O槽78、磁盤(pán)適配器84及集成驅(qū)動(dòng)器電子線(xiàn)路(Integrated DriveElectronics-IDE)的固定磁盤(pán)控制器86相連。
雖然顯示出微機(jī)系統(tǒng)10帶有基本的四兆字節(jié)RAM組件53,但應(yīng)該注意,也可以通過(guò)增加可選的高密度存儲(chǔ)器組件54而如圖3A和圖3B所示那樣連上附加存儲(chǔ)器。僅從說(shuō)明的角度出發(fā),參照基本的四兆字節(jié)存儲(chǔ)器組件來(lái)說(shuō)明本發(fā)明。
鎖存緩沖器68連接在系統(tǒng)總線(xiàn)66和主板I/O總線(xiàn)90之間。主板I/O總線(xiàn)90包括地址、數(shù)據(jù)和控制組成部分。沿著主板I/O總線(xiàn)90連接有多個(gè)I/O適配器與其它組件,如磁盤(pán)適配器84,IDE盤(pán)適配器86,中斷控制器92,RS-232適配器、本文稱(chēng)之為NVRAM的非易失性CMOS RAM96,CMOS實(shí)時(shí)時(shí)鐘(RTC)98、并行適配器100、多個(gè)計(jì)時(shí)器102、只讀存儲(chǔ)器(ROM)88、8042104以及電源管理電路106。標(biāo)號(hào)104所示的8042是與鍵盤(pán)12與鼠標(biāo)器13相連的從屬微處理器。電源管理電路106在電路上與電源17,電源開(kāi)關(guān)21、電源/反饋LED23以及內(nèi)部調(diào)制解調(diào)器900和/或外部調(diào)制解調(diào)器902相連。正如本技術(shù)的專(zhuān)家所熟知的那樣,外部調(diào)制解調(diào)器通常與變壓器904相連,而該變壓器又與壁裝電源插座相連。調(diào)制解調(diào)器900、902與通常的電話(huà)口相連。電源管理電路106顯示在圖6A及圖6B中并在與圖6A、圖6B、圖6C以及圖7有關(guān)的內(nèi)容中予以更全面的說(shuō)明。只讀存儲(chǔ)器88包括BIOS,BIOS用于連接I/O設(shè)備與微處理器40的操作系統(tǒng)。存儲(chǔ)在ROM88中的BIOS可拷貝到RAM53以便減少BIOS的執(zhí)行時(shí)間。ROM88還可響應(yīng)內(nèi)存控制器48(通過(guò)ROMSEL信號(hào))。如果用內(nèi)存控制器48啟動(dòng)ROM88,BIOS就會(huì)從ROM中執(zhí)行。如果內(nèi)存控制器48終止了ROM,則ROM不響應(yīng)來(lái)自微處理器40的地址查詢(xún)(即BIOS從RAM中運(yùn)行)。
實(shí)時(shí)時(shí)鐘98用于計(jì)算日期的時(shí)間,NVRAM96用于存儲(chǔ)系統(tǒng)配置數(shù)據(jù)。也就是說(shuō),NVRAM96包含說(shuō)明系統(tǒng)當(dāng)前配置的值。例如,NVRAM96包括說(shuō)明固定盤(pán)或軟盤(pán)容量、顯示器類(lèi)型、內(nèi)存量、時(shí)間、日期等的信息。此外,每當(dāng)運(yùn)行諸如SET配置之類(lèi)的特定配置程序時(shí),上述數(shù)據(jù)都存儲(chǔ)在NVRAM中。上述SET配置程序的目的是把描述系統(tǒng)配置的值存儲(chǔ)到NVRAM內(nèi)。
幾乎所有的上述設(shè)備都包括易失性寄存器。為了避免對(duì)附圖作不必要的分類(lèi),特定設(shè)備的寄存器總是涉及到該設(shè)備。例如,CPU寄存器稱(chēng)為CPU40的寄存器,視頻控制器寄存器稱(chēng)為視頻控制器56的寄存器。
如上所述,所說(shuō)的計(jì)算機(jī)帶有一總體用標(biāo)號(hào)15表示的罩蓋,此罩蓋與機(jī)箱19相配合形成一封密有屏蔽的空間,該空間用于包容微機(jī)的上述組件。罩蓋15最好形成有外部裝飾性罩蓋部件16以及薄金屬板襯里18,所說(shuō)的外部裝飾性罩蓋部件是一成整體的模制組件,由可模制的合成材料構(gòu)成,而薄金屬板襯里則呈符合上述裝飾性罩蓋部件結(jié)構(gòu)的形狀。但是,也可以以其它周知的方式形成前述罩蓋,本發(fā)明的實(shí)用性并不局限于上述類(lèi)型的外罩。操作的狀態(tài)參照?qǐng)D4,顯示了本發(fā)明之計(jì)算機(jī)系統(tǒng)的狀態(tài)圖。本發(fā)明的計(jì)算機(jī)系統(tǒng)10具有四種狀態(tài)正常操作狀態(tài)150、待機(jī)狀態(tài)152、掛起狀態(tài)154以及關(guān)機(jī)狀態(tài)156。圖4所示的狀態(tài)之間的轉(zhuǎn)換用于說(shuō)明最佳實(shí)施例,但不限定最佳實(shí)施例。因此,也可以用其它的事件來(lái)導(dǎo)致?tīng)顟B(tài)轉(zhuǎn)換。
本發(fā)明之計(jì)算機(jī)系統(tǒng)10的正常操作狀態(tài)150實(shí)際上等同于任何通常的臺(tái)式計(jì)算機(jī)的正常操作狀態(tài)。用戶(hù)可以使用應(yīng)用程序并且基本上把上述計(jì)算機(jī)看作是任何其它的計(jì)算機(jī)。一個(gè)不同點(diǎn)是在操作系統(tǒng)中有在后臺(tái)運(yùn)行的電源管理驅(qū)動(dòng)程序(“APM OS驅(qū)動(dòng)程序”)以及多種APM BIOS例程,它們對(duì)用戶(hù)是透明的。APM BIOS例程將在以后說(shuō)明,它們中包括掛起例程、繼續(xù)例程、引導(dǎo)例程、管理例程、保存CPU狀態(tài)例程以及恢復(fù)CPU狀態(tài)例程。所有附圖中都未示出的一個(gè)APM BIOS例程是APM BIOS路由選擇例程。APM BIOS路由選擇例程主要從APM OS驅(qū)動(dòng)程序中接收指令并調(diào)用適當(dāng)?shù)腁PM BIOS例程。例如,在APMOS驅(qū)動(dòng)程序發(fā)出Suspend(掛起)指令時(shí),APM BIOS程序選擇例程就會(huì)調(diào)用掛起例程。作為另外一個(gè)實(shí)例,每當(dāng)APM OS驅(qū)動(dòng)程序發(fā)出Get Event(獲取事件)指令時(shí),APM BIOS路由選擇例程都會(huì)調(diào)用管理例程。上述例程處于BIOS內(nèi)并在投影BIOS時(shí)被投影掉。OS內(nèi)的電源管理驅(qū)動(dòng)程序以及APM BIOS例程控制著計(jì)算機(jī)在四種狀態(tài)之間的轉(zhuǎn)換。雖然上下文可能有所限定,但對(duì)“APM”一詞的引用通常就是指APM OS驅(qū)動(dòng)程序。
第二種狀態(tài)即待機(jī)狀態(tài)152要比正常操作狀態(tài)150使用更少的電能,但能使應(yīng)用程序象在其它情況下運(yùn)行的那樣運(yùn)行。一般地說(shuō),在待機(jī)狀態(tài)152下可通過(guò)代碼將設(shè)備設(shè)置成各自的低功耗方式而節(jié)電。在所述的最佳實(shí)施例中,正如以下將會(huì)詳細(xì)說(shuō)明的那樣待機(jī)狀態(tài)152通過(guò)使固定磁盤(pán)存儲(chǔ)器31內(nèi)的固定磁盤(pán)(未顯示)停止轉(zhuǎn)動(dòng)、通過(guò)停止生成視頻信號(hào)以及通過(guò)將CPU40設(shè)置成低功耗方式,從而節(jié)約了電能。但是,這并不是一種限制,而是可以使用其它方法如減慢或停止CPU時(shí)鐘等來(lái)降低功耗。
在所說(shuō)的最佳實(shí)施例中,以三種獨(dú)立的方式節(jié)約電能。第一,在正常操作狀態(tài)150下,固定磁盤(pán)存儲(chǔ)器31內(nèi)的固定盤(pán)以例如3600轉(zhuǎn)/分(RPM)、4500轉(zhuǎn)/分(RPM)或5400轉(zhuǎn)/分(RPM)的轉(zhuǎn)速不斷旋轉(zhuǎn)。在待機(jī)狀態(tài)152下,給IDE盤(pán)控制器86以指令從而使固定磁盤(pán)存儲(chǔ)器31進(jìn)入低功耗方式(固定磁盤(pán)存儲(chǔ)器31內(nèi)的固定磁盤(pán)停止轉(zhuǎn)動(dòng)),因此節(jié)省了固定磁盤(pán)存儲(chǔ)器31內(nèi)的電機(jī)(未顯示)在使固定磁盤(pán)旋轉(zhuǎn)時(shí)所消耗的電能。
第二,在正常操作狀態(tài)150下,計(jì)算機(jī)系統(tǒng)的視頻控制器56不斷地產(chǎn)生對(duì)應(yīng)于在視頻顯示終端11所看到的圖象的視頻信號(hào)(諸如本技術(shù)中所周知的HSYNC、VSYNC、R、G、B等等)。在待機(jī)狀態(tài)152下,視頻控制器56停止產(chǎn)生視頻信號(hào),從而節(jié)約了通常被視頻控制器56所消耗掉的電能,HSYNC、VSYNC、R、G、B等信號(hào)均近似為0.00VDC。使用VESA(視頻電子線(xiàn)路標(biāo)準(zhǔn)協(xié)會(huì))監(jiān)視器會(huì)進(jìn)一步節(jié)電,這是因?yàn)?,?dāng)HSYNC和VSYNC近似為0.00VDC時(shí),VESA監(jiān)視器會(huì)關(guān)閉自身。
第三,在正常操作狀態(tài)150下,CPU40不斷地執(zhí)行指令,因而消耗了電能。在待機(jī)狀態(tài)152下,BIOS響應(yīng)AMP CPU的空調(diào)用(Idie Call)而發(fā)出HALT(停機(jī))指令。執(zhí)行HALT指令會(huì)明顯地降低CPU的能耗直至發(fā)生下一個(gè)硬件中斷。CPU確實(shí)空閑時(shí)會(huì)在90%以上的時(shí)間內(nèi)停止運(yùn)轉(zhuǎn)。
請(qǐng)注意,某些系統(tǒng)帶有“屏幕保護(hù)程序”(Screen-savers),這種程序能使屏幕11變暗以防止視頻顯示終端前表面熒光物質(zhì)老化。在大多數(shù)這種系統(tǒng)中,視頻控制器56仍產(chǎn)生視頻信號(hào),只是產(chǎn)生對(duì)應(yīng)于黑暗屏幕或動(dòng)態(tài)顯示的視頻信號(hào)。因此,執(zhí)行屏幕保護(hù)程序的計(jì)算機(jī)系統(tǒng)仍消耗電能,這些電能是產(chǎn)生上述視頻信號(hào)所必需的。
第三種狀態(tài)是掛起狀態(tài)154。在掛起狀態(tài)154下,計(jì)算機(jī)系統(tǒng)消耗非常少的電能。在所述的最佳實(shí)施例中,掛起的計(jì)算機(jī)消耗少于100毫瓦的電能。僅有的功耗是由電源17的低效率以及電源管理電路106使用的少量電能所導(dǎo)致的約為5瓦的功耗。
通過(guò)在關(guān)閉電源之前將計(jì)算機(jī)系統(tǒng)的狀態(tài)保存至固定磁盤(pán)存儲(chǔ)器(硬盤(pán)驅(qū)動(dòng)器)31,可以實(shí)現(xiàn)上述少量的用電。為了進(jìn)入掛起狀態(tài)154,CPU40中斷任何的應(yīng)用程序并將CPU的程序執(zhí)行控制權(quán)轉(zhuǎn)交給電源管理驅(qū)動(dòng)程序。電源管理驅(qū)動(dòng)程序確認(rèn)計(jì)算機(jī)系統(tǒng)10的狀態(tài)并將該計(jì)算機(jī)系統(tǒng)的全部狀態(tài)寫(xiě)至固定磁盤(pán)存儲(chǔ)器31。將CPU40的寄存器、CPU高速緩沖存儲(chǔ)器41、系統(tǒng)RAM53、系統(tǒng)高速緩沖存儲(chǔ)器60、視頻控制器56的寄存器、顯示器內(nèi)存56以及其它易失性寄存器的狀態(tài)均寫(xiě)入固定磁盤(pán)驅(qū)動(dòng)器31。以這樣的方式保存系統(tǒng)10的整個(gè)狀態(tài),即可在不明顯損失有效性的情況下恢復(fù)該系統(tǒng)的狀態(tài)。也就是說(shuō),用戶(hù)不必等待系統(tǒng)象通常那樣加載操作系統(tǒng)、加載圖形用戶(hù)界面以及應(yīng)用程序。
然后,所述計(jì)算機(jī)將數(shù)據(jù)寫(xiě)入非易失性CMOS存儲(chǔ)器96以指示系統(tǒng)被掛起。最后CPU40指令微處理器40使電源17停止經(jīng)由±5VDC和±12VDC線(xiàn)向計(jì)算機(jī)系統(tǒng)提供穩(wěn)壓的電力。這時(shí)計(jì)算機(jī)系統(tǒng)10處于降低功耗的狀態(tài),而且,該計(jì)算機(jī)的整個(gè)狀態(tài)被安全地存儲(chǔ)到了固定盤(pán)存儲(chǔ)器31上了。
在本文中以?xún)煞N類(lèi)似但可能混淆的方式使用“狀態(tài)”一詞。設(shè)備可以“處于”特定的狀態(tài)。四種系統(tǒng)狀態(tài)-正常150、待機(jī)152、掛起154以及關(guān)機(jī)156-均涉及到本發(fā)明之計(jì)算機(jī)系統(tǒng)10的整體狀態(tài)。這些“狀態(tài)”以通常的方式描述了計(jì)算機(jī)系統(tǒng)10。例如,在處于正常操作狀態(tài)150時(shí),CPU40仍在執(zhí)行代碼并能改變系統(tǒng)10內(nèi)的多個(gè)寄存器。同樣,在處于待機(jī)狀態(tài)152時(shí),會(huì)產(chǎn)生類(lèi)似的活動(dòng)。因此,當(dāng)計(jì)算機(jī)系統(tǒng)10處于正常操作狀態(tài)150和待機(jī)狀態(tài)152時(shí),系統(tǒng)10的內(nèi)存與寄存器的配置是動(dòng)態(tài)的。
其它設(shè)備也可以“處于”某種狀態(tài)。電源管理電路106最好使用一第二處理器作為電源管理處理器,如圖6A中所示的微控制器U2,以便實(shí)現(xiàn)各種電源管理特征。多種這樣的處理器都是適用的,在所述的特定實(shí)施例中,電源管理處理器是預(yù)先編程了的83C750微控制器。正如與圖6A有關(guān)的內(nèi)容所要說(shuō)明的那樣,微處理器U2的變量和引線(xiàn)可處于好幾種狀態(tài)。
設(shè)備的“狀態(tài)”如“計(jì)算機(jī)系統(tǒng)10的狀態(tài)”或“CPU40的狀態(tài)”與以上內(nèi)容相對(duì)比,設(shè)備的“狀態(tài)”涉及到該設(shè)備在特定計(jì)算機(jī)工作周期內(nèi)的狀況。所有的內(nèi)存存儲(chǔ)單元和寄存器均具有特定的二進(jìn)制值。一個(gè)設(shè)備的“狀態(tài)”是該設(shè)備內(nèi)容的靜態(tài)二進(jìn)制快照。
計(jì)算機(jī)系統(tǒng)10的“狀態(tài)”是指操作性等價(jià)值但不一定是精確的拷貝。例如,狀態(tài)A下的計(jì)算機(jī)系統(tǒng)可能在CPU高速緩沖存儲(chǔ)器41或系統(tǒng)高速緩沖存儲(chǔ)器60內(nèi)有某些存儲(chǔ)內(nèi)容??赡軙?huì)將各高速緩沖存儲(chǔ)器的內(nèi)容“傾瀉”進(jìn)系統(tǒng)RAM53并將計(jì)算機(jī)系統(tǒng)設(shè)置成狀態(tài)B。單純地說(shuō),計(jì)算機(jī)在狀態(tài)A下的狀態(tài)不同于該計(jì)算機(jī)在狀態(tài)B下的狀態(tài),這是因?yàn)椋咚倬彌_存儲(chǔ)器的內(nèi)容與系統(tǒng)RAM的內(nèi)容是不同的。但是,從軟件操作性的觀點(diǎn)來(lái)看,狀態(tài)A和狀態(tài)B是相同的,這是因?yàn)?,除系統(tǒng)速度略有降低(這是由程序不具有從高速緩沖存儲(chǔ)器中執(zhí)行的有利條件所引起的)以外,正在執(zhí)行的程序不受影響。也就是說(shuō),盡管高速緩沖存儲(chǔ)器已被清空的計(jì)算機(jī)在效率方面略有降低直至用有用的代碼重新加載該高速緩沖存儲(chǔ)器的區(qū)域,但狀態(tài)A下的計(jì)算機(jī)與狀態(tài)B下的計(jì)算機(jī)在軟件操作性方面是等價(jià)的。
按兩種類(lèi)似但可能混淆的方式使用“Power”一詞,“Power”大多數(shù)情況下是指電能。但“Power”也偶而指計(jì)算的功率。上下文將清楚地表明特定的用法。
“電路”通常指物理上的電子設(shè)備或多個(gè)相互電連接的設(shè)備,但“電路”一詞也包括物理電子設(shè)備的等效CPU代碼。例如,一方面,可用74LS00或等價(jià)地在可編程設(shè)備中實(shí)現(xiàn)兩個(gè)輸入的與非門(mén)。這兩個(gè)設(shè)備是物理的電子設(shè)備。另一方面,也可以通過(guò)使CPU40從兩個(gè)CPU可讀輸入端口讀出兩個(gè)輸入、利用CPU指令生成與非的結(jié)果并將該結(jié)果經(jīng)由CPU可寫(xiě)輸出端口輸出,從而實(shí)現(xiàn)與非門(mén)。上述CPU接口端口可以是諸如解碼的鎖存器之類(lèi)的簡(jiǎn)單設(shè)備,也可以是等效的可編程設(shè)備,或者是諸如外圍接口適配器(PIA)之類(lèi)的復(fù)雜設(shè)備,這些設(shè)備在本技術(shù)中都是眾所周知的?!半娐贰币辉~有包括了上述與非門(mén)的全部三種實(shí)例的足夠廣泛的含義?!半娐贰痹谀承┣闆r下可能僅指電通路。電通路的類(lèi)型包括印刷電路板上的導(dǎo)線(xiàn)、線(xiàn)路或通道或者是構(gòu)成一個(gè)電連接通路的幾種類(lèi)型電通路的任何組合。
“信號(hào)”涉及到單一的電學(xué)波形或多個(gè)波形。例如,視頻控制器產(chǎn)生一視頻信號(hào)。正如在本技術(shù)中周知的那樣,上述視頻信號(hào)實(shí)際上是多個(gè)電導(dǎo)體上的多個(gè)信號(hào)HSYNC、VSYNC、R、G、B等。
參照?qǐng)D4,第四種也是最后一種狀態(tài)是關(guān)機(jī)狀態(tài)156。關(guān)機(jī)狀態(tài)156實(shí)際上等同于在通常意義上業(yè)已關(guān)閉的通常計(jì)算機(jī)系統(tǒng)。在這種狀態(tài)下,電源17的初級(jí)/穩(wěn)壓部件172會(huì)停止向計(jì)算機(jī)系統(tǒng)10提供穩(wěn)壓后的電能(除經(jīng)由AUX5提供少量的電能以外,這將參照?qǐng)D5予以詳細(xì)的說(shuō)明),但還未將計(jì)算機(jī)系統(tǒng)的狀態(tài)保存至固定磁盤(pán)31。掛起狀態(tài)154和關(guān)機(jī)狀態(tài)156在電源17不再產(chǎn)生穩(wěn)壓電能方面是相似的。它們的不同在于,在關(guān)機(jī)狀態(tài)156下,不象在掛起狀態(tài)154下那樣將計(jì)算機(jī)系統(tǒng)10的狀態(tài)保存至磁盤(pán)驅(qū)動(dòng)器31。而且,在離開(kāi)關(guān)機(jī)狀態(tài)156時(shí),計(jì)算機(jī)10會(huì)象開(kāi)機(jī)那樣進(jìn)行“引導(dǎo)”。也就是說(shuō),必須由用戶(hù)或者自動(dòng)地由諸如AUTOEXEC.BAT文件之類(lèi)的方式啟動(dòng)任何可執(zhí)行的代碼。但是,在離開(kāi)掛起狀態(tài)154時(shí),計(jì)算機(jī)10則會(huì)在它被中斷的位置處恢復(fù)執(zhí)行。
圖4還顯示了在四種狀態(tài)之間引起轉(zhuǎn)換的事件的概況。在參照與圖6至圖8有關(guān)的內(nèi)容中將對(duì)這些事件作進(jìn)一步的說(shuō)明。但是,作概略的說(shuō)明可能是有幫助的。電源開(kāi)關(guān)21、兩個(gè)計(jì)時(shí)器(不活動(dòng)性待機(jī)計(jì)時(shí)器以及不活動(dòng)性?huà)炱鹩?jì)時(shí)器,見(jiàn)圖9及其所附文字)、喚醒計(jì)時(shí)器的分鐘數(shù)以及允許掛起標(biāo)志(見(jiàn)與圖6A和圖7及與其有關(guān)的內(nèi)容)均會(huì)影向計(jì)算機(jī)進(jìn)入何種狀態(tài)。一般地說(shuō),上述兩個(gè)計(jì)時(shí)器可以是硬件或者是在CPU中作為程序執(zhí)行的CPU代碼計(jì)時(shí)器。在所說(shuō)的最佳實(shí)施例中,上述兩個(gè)計(jì)時(shí)器均為從BIOS數(shù)據(jù)段開(kāi)始執(zhí)行的CPU代碼計(jì)時(shí)器。但是,這兩個(gè)計(jì)時(shí)器也可以是硬件計(jì)時(shí)器,這會(huì)是一個(gè)比較好的方案,因?yàn)檫@會(huì)減少所述系統(tǒng)的總開(kāi)銷(xiāo)。與圖9有關(guān)的內(nèi)容將更詳細(xì)地說(shuō)明上述兩個(gè)計(jì)時(shí)器。在計(jì)算機(jī)10處于正常操作狀態(tài)150或待機(jī)狀態(tài)152時(shí),上述兩個(gè)計(jì)時(shí)器都是活動(dòng)的。如下所述,計(jì)時(shí)器與其它例程相聯(lián),從而任何一個(gè)計(jì)時(shí)器的到時(shí)都會(huì)引起轉(zhuǎn)換。可以根據(jù)用戶(hù)的特定要求將一個(gè)或兩個(gè)計(jì)時(shí)器配置成能在特定的時(shí)間之后到時(shí)。在所述的最佳實(shí)施例中,可將不活動(dòng)性待機(jī)計(jì)時(shí)器及不活動(dòng)性?huà)炱鹩?jì)時(shí)器設(shè)置成在10至90分鐘后到時(shí)。也可以使一個(gè)或兩個(gè)計(jì)時(shí)器停止,即將計(jì)時(shí)器設(shè)置成不會(huì)到時(shí)。使計(jì)時(shí)器“停止”實(shí)際上是停止了該計(jì)時(shí)器的增量計(jì)數(shù)活動(dòng)或者是忽略了它們的到時(shí)。在所述的最佳實(shí)施例中,將計(jì)時(shí)器到時(shí)值置為零值會(huì)使得不檢驗(yàn)該計(jì)時(shí)器的到時(shí)。例如,聯(lián)網(wǎng)計(jì)算機(jī)的用戶(hù)可能不讓計(jì)算機(jī)進(jìn)入掛起狀態(tài)154,因?yàn)檫@樣做會(huì)使局域網(wǎng)(LAN)相對(duì)該計(jì)算機(jī)失效。
從理論上說(shuō),計(jì)時(shí)器可遞增計(jì)數(shù)或遞減計(jì)數(shù),而且在啟動(dòng)(或重新啟動(dòng))計(jì)時(shí)器時(shí),可被復(fù)位到預(yù)定的狀態(tài),該計(jì)時(shí)器可以期望計(jì)數(shù)到一種預(yù)定的狀態(tài),或者使用當(dāng)前值以及作為邊界終止觸發(fā)器所計(jì)算出的差值或總和,在所述的最佳實(shí)施例中,在復(fù)位計(jì)時(shí)器時(shí),將來(lái)自實(shí)時(shí)時(shí)鐘98的分鐘數(shù)變量的當(dāng)前值存儲(chǔ)起來(lái)。通過(guò)從所保存的分鐘數(shù)值中減去當(dāng)前的分鐘數(shù)并比較其差值與用戶(hù)所選定的值,可以檢驗(yàn)計(jì)時(shí)器的到時(shí)。
某些系統(tǒng)活動(dòng)會(huì)影響上述兩個(gè)計(jì)時(shí)器。例如,在所述的最佳實(shí)施例中,正如與圖9有關(guān)的內(nèi)容所要詳細(xì)說(shuō)明的那樣,用戶(hù)按下鍵盤(pán)12之按鍵的活動(dòng)、移動(dòng)鼠標(biāo)器13的活動(dòng)、按下鼠標(biāo)器13之按鈕的活動(dòng)或者硬盤(pán)驅(qū)動(dòng)器31的活動(dòng)均會(huì)使各個(gè)計(jì)時(shí)器被重新啟動(dòng);所以,當(dāng)用戶(hù)按下鍵盤(pán)12的按鍵或使用鼠標(biāo)器13時(shí),或者當(dāng)應(yīng)用程序存取硬盤(pán)驅(qū)動(dòng)器31時(shí),兩個(gè)計(jì)時(shí)器均不會(huì)到時(shí)。此外,其它的系統(tǒng)活動(dòng)也會(huì)復(fù)位所說(shuō)的計(jì)時(shí)器。對(duì)活動(dòng)來(lái)說(shuō),也可以監(jiān)控任何硬件的中斷。因此,最好能使打印(IRQ5或IRQ7)或通信(COMM)端口訪問(wèn)(IRQ2或IRQ3)阻止系統(tǒng)進(jìn)入掛起狀態(tài)154。
允許掛起標(biāo)志是微控制器U2內(nèi)的CPU可控且可讀的鎖存器,與圖6A有關(guān)的內(nèi)容將對(duì)該標(biāo)志予以詳細(xì)的說(shuō)明。簡(jiǎn)要地說(shuō),將微控制器U2設(shè)置成一種方式會(huì)導(dǎo)致按下開(kāi)關(guān)21就能將系統(tǒng)10置于關(guān)機(jī)狀態(tài)156,而將微控制器U2設(shè)置成另一種方式則會(huì)導(dǎo)致按下開(kāi)關(guān)21就能將系統(tǒng)10置于掛起狀態(tài)154。在清掉了寫(xiě)至微控制器U2的允許掛起標(biāo)志的情況下,如果計(jì)算機(jī)系統(tǒng)10處于正常操作狀態(tài)150并按下了電源開(kāi)關(guān)21,那么,計(jì)算機(jī)系統(tǒng)10就會(huì)進(jìn)入關(guān)機(jī)狀態(tài)156,如標(biāo)號(hào)158所示。如果計(jì)算機(jī)系統(tǒng)10處于關(guān)閉狀態(tài)156且按下電源開(kāi)關(guān)21,則計(jì)算機(jī)系統(tǒng)10會(huì)進(jìn)入正常操作狀態(tài)150,如標(biāo)號(hào)160所示。此外,以下將作詳細(xì)說(shuō)明的若干“外部事件”也會(huì)使計(jì)算機(jī)系統(tǒng)從關(guān)機(jī)狀態(tài)156轉(zhuǎn)換至正常操作狀態(tài)150。
如果計(jì)算機(jī)系統(tǒng)10處于正常操作狀態(tài)150,有一種事件可以使計(jì)算機(jī)進(jìn)入待機(jī)狀態(tài),即如果不活動(dòng)性待機(jī)計(jì)時(shí)器到時(shí),則計(jì)算機(jī)系統(tǒng)10會(huì)轉(zhuǎn)換至待機(jī)狀態(tài)152,如標(biāo)號(hào)162所示。另外,所說(shuō)的計(jì)算機(jī)系統(tǒng)也可以提供對(duì)話(huà)框、開(kāi)關(guān)或其它輸入設(shè)備之類(lèi)的手段以便用戶(hù)強(qiáng)迫系統(tǒng)立即進(jìn)入待機(jī)狀態(tài)。而在待機(jī)狀態(tài)152下,包括用戶(hù)按下電源開(kāi)關(guān)21在內(nèi)的上述任何用戶(hù)或系統(tǒng)的活動(dòng)都會(huì)使計(jì)算機(jī)10離開(kāi)待機(jī)狀態(tài)152并重新進(jìn)入正常操作狀態(tài)150,如標(biāo)號(hào)164所示。
按下電源開(kāi)關(guān)21會(huì)使系統(tǒng)從待機(jī)狀態(tài)152轉(zhuǎn)換至正常操作狀態(tài)150從而防止用戶(hù)弄錯(cuò)。如上所述,在處于待機(jī)狀態(tài)時(shí),監(jiān)視器11不作顯示,電源/反饋LED23或者是亮的或者是閃爍的,這取決于微控制器內(nèi)的允許掛起標(biāo)志是如何配置的。接近計(jì)算機(jī)系統(tǒng)的用戶(hù)會(huì)注意到監(jiān)視器11沒(méi)有顯示,認(rèn)為系統(tǒng)處于掛起狀態(tài)154或關(guān)機(jī)狀態(tài)156,于是按下電源開(kāi)關(guān)21以試圖使系統(tǒng)進(jìn)入正常操作狀態(tài)150。如果按下電源開(kāi)關(guān)21使系統(tǒng)進(jìn)入掛起狀態(tài)154或關(guān)機(jī)狀態(tài)156,那么,上述用戶(hù)恰好關(guān)閉或掛起了計(jì)算機(jī),這正與用戶(hù)的意圖相反。所以,在處于待機(jī)狀態(tài)152時(shí)按下電源開(kāi)關(guān)21應(yīng)能使計(jì)算機(jī)系統(tǒng)從待機(jī)狀態(tài)轉(zhuǎn)換至正常操作狀態(tài)。CPU40即使是空閑的也會(huì)立即檢測(cè)出是否按下了電源開(kāi)關(guān)。硬件的中斷使CPU40每秒脫離空閑狀態(tài)約20次,此后,在下一個(gè)APM獲得事件(Get Event)的過(guò)程中,查詢(xún)微處理器U2確定是否按下了開(kāi)關(guān)21。
如果計(jì)算機(jī)10處于正常操作狀態(tài)150,有兩個(gè)事件會(huì)使該計(jì)算機(jī)進(jìn)入掛起狀態(tài)154。首先,如果不活動(dòng)性?huà)炱鹩?jì)時(shí)器到時(shí),計(jì)算機(jī)系統(tǒng)10會(huì)轉(zhuǎn)換至掛起狀態(tài)154,如標(biāo)號(hào)166所示。第二,在寫(xiě)至微控制器U2的允許掛起標(biāo)志已被設(shè)定的情況下用戶(hù)可通過(guò)按下電源開(kāi)關(guān)21立即使計(jì)算機(jī)10進(jìn)入掛起狀態(tài)154,如標(biāo)號(hào)166所示。此外,APM驅(qū)動(dòng)程序會(huì)通過(guò)“設(shè)置電源狀態(tài)掛起”命令發(fā)出掛起請(qǐng)求,此請(qǐng)求使得APM BIOS驅(qū)動(dòng)程序調(diào)用掛起例程。在處于掛起狀態(tài)154時(shí)用戶(hù)可通過(guò)按下電源開(kāi)關(guān)21而轉(zhuǎn)換至正常操作狀態(tài)150。如標(biāo)號(hào)168所示。
此外,有若干外部事件可用于使系統(tǒng)10從掛起狀態(tài)154轉(zhuǎn)換至正常操作狀態(tài)150,如標(biāo)號(hào)168所示,或從關(guān)閉狀態(tài)156轉(zhuǎn)換至正常操作狀態(tài)150,如標(biāo)號(hào)160所示。例如,圖6A電路中微控制器U2內(nèi)的電話(huà)振鈴檢測(cè)電路配置成能使系統(tǒng)10在所連接的電話(huà)線(xiàn)鈴向時(shí)離開(kāi)關(guān)機(jī)狀態(tài)156或掛起狀態(tài)154并進(jìn)入正常操作狀態(tài)150。這種特點(diǎn)有助于系統(tǒng)接收電傳數(shù)據(jù)或數(shù)字?jǐn)?shù)據(jù)。計(jì)算機(jī)系統(tǒng)響應(yīng)電話(huà)鈴聲進(jìn)入正常操作狀態(tài),并執(zhí)行諸如接收到達(dá)的傳真發(fā)送、上裝或下裝文件、對(duì)系統(tǒng)進(jìn)行遠(yuǎn)距離存取等預(yù)置的功能,且響應(yīng)不活動(dòng)性?huà)炱鹩?jì)時(shí)器的到時(shí)而再次進(jìn)入掛起方式,同時(shí),該計(jì)算機(jī)系統(tǒng)只在處于正常操作狀態(tài)時(shí)才消耗電能。
同樣,微控制器U2實(shí)現(xiàn)喚醒告警計(jì)數(shù)器的分鐘數(shù),它允許告警型事件使系統(tǒng)10離開(kāi)掛起狀態(tài)154或關(guān)機(jī)狀態(tài)156并進(jìn)入正常操作狀態(tài)150。這種系統(tǒng)對(duì)在特定情況下發(fā)送電傳或數(shù)字?jǐn)?shù)據(jù)以降低電話(huà)使用率來(lái)說(shuō)是有用的,并且對(duì)執(zhí)行諸如用磁帶備份系統(tǒng)備份系統(tǒng)硬盤(pán)驅(qū)動(dòng)器31之類(lèi)的系統(tǒng)維護(hù)來(lái)說(shuō)也是有用的。在后一種情況下,設(shè)置上述喚醒告警的分鐘數(shù)以便在調(diào)度程序使磁帶備份程序執(zhí)行之前將機(jī)器開(kāi)啟一段固定的時(shí)間。另外,APMBIOS調(diào)度程序可用于使磁帶備份程序運(yùn)行。
最后,如果計(jì)算機(jī)系統(tǒng)10處于待機(jī)狀態(tài)152并且不活動(dòng)性?huà)炱鹩?jì)時(shí)器到時(shí),那么,計(jì)算機(jī)系統(tǒng)10就會(huì)轉(zhuǎn)換至掛起狀態(tài)154,如標(biāo)號(hào)170所示。計(jì)算機(jī)系統(tǒng)10不能從掛起狀態(tài)154往回轉(zhuǎn)換至待機(jī)狀態(tài)152,但只能如轉(zhuǎn)換168的文字所說(shuō)明的那樣轉(zhuǎn)換至正常操作狀態(tài)150。
很明顯,計(jì)算機(jī)系統(tǒng)10不能立即改變狀態(tài)。在相對(duì)四種狀態(tài)之一的每種轉(zhuǎn)換中,都需要特定的時(shí)間來(lái)進(jìn)行必要的系統(tǒng)轉(zhuǎn)換。與圖6至圖15有文的文字將詳細(xì)說(shuō)明每種轉(zhuǎn)換的時(shí)間。系統(tǒng)硬件在說(shuō)明CPU40執(zhí)行的代碼細(xì)節(jié)之前,先說(shuō)明實(shí)現(xiàn)上述四種狀態(tài)所需的硬件是有益的。圖5顯示了電源17的框圖。電源17帶有兩個(gè)部件控制部件174和初級(jí)/穩(wěn)壓部件172。電源17帶有若干輸入Line-In(線(xiàn)路輸入),它從通常的壁裝電源插座接收115伏交流電或220伏交流電;以O(shè)N(開(kāi)),它控制著電源17的穩(wěn)壓活動(dòng)。電源17也帶有若干輸出。AC Line-Out(交流電線(xiàn)路輸出);±5DC(±5伏直流電輸出);±12VDC(±12伏直流電輸出);AUX5(輔助輸出);GND(接地)以及POWERGOOD(電源良好)。AC Line-Out是115伏交流電,它一般流至視頻顯示終端11的電力輸入口(未顯示)??刂撇考?74接收ON輸入并產(chǎn)生POWERGOOD輸出。初級(jí)/穩(wěn)壓部件172有選擇地將來(lái)自Line-In輸入的115伏交流電穩(wěn)壓降至±5伏直流電和±12伏直流電。初級(jí)/穩(wěn)壓部件172是否在±5VDC和±12VDC線(xiàn)路處穩(wěn)壓取決于和控制部件174相連接的ON的值。在所述的最佳實(shí)施例中,控制部件174應(yīng)使用諸如適當(dāng)?shù)墓飧綦x器為產(chǎn)生ON信號(hào)的電路提供絕緣。
Line-In輸入和AC Line-Out,±5VDC、±12VDC、GND以及POWERGOOD輸出在本技術(shù)中都是周知的。當(dāng)電源17“關(guān)閉”,即不從Line-In中提供穩(wěn)壓電壓時(shí),POWERGOOD為邏輯0。當(dāng)電源17“接通”時(shí),電源17從115伏交流電Line-In中產(chǎn)生±5伏和±12伏的直流穩(wěn)壓電壓。正如本技術(shù)中所周知的那樣,上述四種穩(wěn)壓電壓以及相關(guān)的GND是“系統(tǒng)電力”。當(dāng)所說(shuō)的穩(wěn)壓電壓達(dá)到可接受的容差范圍內(nèi)的水平時(shí),POWERGOOD信號(hào)就會(huì)改變成邏輯1。每當(dāng)+5或+12伏線(xiàn)路落在容差范圍之外,POWERGOOD信號(hào)都會(huì)變成邏輯0,以便指示這種情況。
AUX5輸出為主板提供輔助的+5伏直流電。當(dāng)把電源17插入供給額定115伏直流電的通常壁裝電源插座內(nèi)時(shí),無(wú)論電源17是處于“接通”還是“斷開(kāi)”初級(jí)/穩(wěn)壓部件172都會(huì)在AUX5處提供穩(wěn)壓了的+5伏直流電。因此,電源17在接收交流電時(shí)總會(huì)經(jīng)由AUX5提供額定±5伏的直流電。AUX5輸出不同于前述+5伏的輸出,因?yàn)槌跫?jí)/穩(wěn)壓部件172只有在電源17“接通”時(shí)才在該+5伏輸處產(chǎn)生穩(wěn)壓的+5伏直流電。AUX5還在以下方面不同于前述的+5伏輸出,即在所述的最佳實(shí)施例中,初級(jí)/穩(wěn)壓部件172經(jīng)由前述+5輸出提供電壓為+5伏多個(gè)安培數(shù)的直流電,而初級(jí)/穩(wěn)壓部件172則經(jīng)由AUX5輸出提供電壓為+5伏不超過(guò)一安培的直流電。
一般的先有電源使用了高安培數(shù)的雙擲開(kāi)關(guān)以使得Line-In輸入與電源的穩(wěn)壓部分接通及斷開(kāi)。本發(fā)明的電源17不使用高安培數(shù)的雙擲開(kāi)關(guān)。相反,開(kāi)關(guān)21控制著產(chǎn)生ON信號(hào)的電路。在所述的最佳實(shí)施例中,開(kāi)關(guān)21是瞬時(shí)單極單擲按鈕開(kāi)關(guān)。但是,本技術(shù)的專(zhuān)家可以使圖6A的電路適應(yīng)使用諸如單極雙擲開(kāi)關(guān)之類(lèi)的其它類(lèi)型開(kāi)關(guān)。AC Line-In總是從壁裝電源插座連接至初級(jí)/穩(wěn)壓部件172。當(dāng)ON是邏輯1(近似地說(shuō),AUX5為額定+5伏直流電)時(shí),初級(jí)/穩(wěn)壓部件172并不將115伏的ACLine-In穩(wěn)壓成經(jīng)由±5或±12輸出的±5或±12伏直流電流。初級(jí)/穩(wěn)壓部件172只在AUX5輸出處提供低安培數(shù)的額定+5伏直流電。另一方面,當(dāng)ON是邏輯0(近似為GNO)時(shí),初級(jí)/穩(wěn)壓部件172將115伏的AC Line-In分別穩(wěn)壓成經(jīng)由四個(gè)±5和±12輸出的±5及±12伏直流電。因此,當(dāng)ON為1時(shí),電源17是“斷開(kāi)”的,當(dāng)ON是0時(shí),電源17是“接通”的。
如果指定的話(huà),就可從通常電源供應(yīng)商那里獲得類(lèi)似上述電源17、帶有AUX5輸出和ON輸入的電源。
參照?qǐng)D6A,它顯示了本發(fā)明之計(jì)算機(jī)系統(tǒng)10的概略電路圖。圖6A中的電路用于形成開(kāi)關(guān)21,電源/反饋LED23、電源17、視頻顯示終端11以及在CPU40中執(zhí)行的代碼之間的連接。
如圖6A所示,上述電路包括四個(gè)集成電路以及電路中各種分立的組件,上述四個(gè)集成電路是U1,第一預(yù)編程的PAL16L8;U2,預(yù)編程的83C750微控制器;U3,本技術(shù)中眾所周知的74LS05;以及U4,第二預(yù)編程的PAL16L8(未顯示)。一般來(lái)說(shuō),電路U1和U4(未顯示)將圖3A和圖3B的主板I/O總線(xiàn)90與微控制器U2連接起來(lái),微控制器與圖6A的其余電路相連,而這些電路則與開(kāi)關(guān)21、電源17、視頻顯示終端11以及可編程時(shí)鐘合成器906相連。時(shí)鐘合成器906可以是本技術(shù)中普通人員所周知的多種這類(lèi)設(shè)備中的一種。其中一種是由Chrontel公司生產(chǎn)的可從多方面廣泛獲得的CH9055A。
圖6A的電路還包括開(kāi)關(guān)21;16MHz晶體檢波器Y1;十八個(gè)電阻R1-R18;八個(gè)電容C1-C8;三個(gè)N型MOSFET(金屬氧化物半導(dǎo)體場(chǎng)效應(yīng)晶體管)Q1-Q3,這些MOSFET在所述的最佳實(shí)施例中是適于起邏輯開(kāi)關(guān)作用的標(biāo)準(zhǔn)低電流NMOSFET;以及六個(gè)IN4148小型信號(hào)二極管CR1-CR6,這些電器件全部如圖6A所示那樣配置且相連。電阻R1-R8為1/4瓦電阻,它們具有圖6A所示的電阻值,誤差為±5%。電容C1是10μF(±10%)的電解電容。電容C2和C3是22PF(±10%)的鉭電容。電容C4-C8是O.1μF(±10%)的陶瓷電容。最后,電容C9是1000PF(±10%)的陶瓷電容。
正如在本技術(shù)中所周知的那樣,晶體檢波器Y1和電容C2及C3產(chǎn)生微控制器U2用來(lái)控制操作定時(shí)的信號(hào)。二極管CR1和CR3以及電阻R14將AUX5的信號(hào)隔離于VBAT信號(hào),同時(shí)允許AUX5信號(hào)補(bǔ)充VBAT信號(hào),這是因?yàn)?,?dāng)電源17產(chǎn)生AUX5信號(hào)時(shí),電池171并未放電。相反,AUX5的信號(hào)經(jīng)由二極管CR1和CR2降壓,從而轉(zhuǎn)為與VBAT相連的設(shè)備提供適當(dāng)?shù)碾妷?。此外,VBAT的線(xiàn)路絕緣于AUX5的線(xiàn)路。
第二PAL U4(未顯示)與地址線(xiàn)SA(1)至SA(15)以及AEN(地址啟動(dòng))線(xiàn)相連。SA(1)至SA(15)以及AEN均是圖3A和圖3B所示的主板I/O總線(xiàn)90的一部分。僅將第二PAL U4編程為一地址解碼器,以便在地址線(xiàn)SA(1)至SA(15)上出現(xiàn)預(yù)定的地址且AEN(地址啟動(dòng))線(xiàn)活動(dòng)時(shí)提供一低電平有效信號(hào)DCD#。在所述的特定實(shí)施例中,對(duì)第二PAL U4進(jìn)行預(yù)先編程以便在地址0ECH和0EDH處對(duì)兩個(gè)接連的8位I/O端口解碼。此外,正如本技術(shù)的專(zhuān)家所周知的那樣,也可以由諸如內(nèi)存控制器或ISA控制器芯片組之類(lèi)的其它電子設(shè)備來(lái)產(chǎn)生DCD#信號(hào)。
對(duì)第一PAL U1編程以提供以下幾個(gè)功能(i)CPU與微控制器U2之間的讀/寫(xiě)接口以便在CPU40與微控制器U2之間傳遞命令和數(shù)據(jù);(ii)對(duì)鼠標(biāo)器中斷INT12和鍵盤(pán)中斷INT1進(jìn)行邏輯或;以及(iii)響應(yīng)來(lái)自CPU40的命令,復(fù)位輸出來(lái)復(fù)位微控制器U2。
第一PAL U1使用了兩個(gè)接連的I/O端口,本文也稱(chēng)之為“電源管理端口”。第一PAL U1具有來(lái)自主板I/O總線(xiàn)90的八個(gè)輸入SD(4)、SD(0)、SA(0)、IOW#、IOR#、RST_DRV、IRQ1以及IRQ12。正如本技術(shù)的專(zhuān)家所周知的那樣,引線(xiàn)7(I6)處的高電平有效信號(hào)RST_DRV輸入可將第一電路U1復(fù)位成已知的初始狀態(tài),而上述RST_DRV輸入則是由內(nèi)存控制器46所產(chǎn)生的。
微控制器U2的復(fù)位線(xiàn)RST751位于引線(xiàn)9處。復(fù)位子電路920用于產(chǎn)生RST751信號(hào),并且包括四個(gè)電阻R4、R16、R17和R18;兩個(gè)電容C1和C8;以及兩個(gè)MOSFET Q2和Q3,這些器件如圖6A所示與第一PAL U1和微控制器U2呈電路通連。復(fù)位子電路920將來(lái)自第一電路U1的復(fù)位輸出信號(hào)RESET轉(zhuǎn)接成微控制器U2的復(fù)位輸入信號(hào)RST751,因此,當(dāng)RESET線(xiàn)處于邏輯1時(shí),會(huì)使得RST751線(xiàn)也會(huì)邏輯1,從而能復(fù)位微處理器U2。
第一PAL U1響應(yīng)CPU40將邏輯1寫(xiě)至控制端口0EDH的第0位而復(fù)位微控制器U2。將邏輯1寫(xiě)至控制端口0EDH的第0位會(huì)導(dǎo)致第一PAL U1將RESET線(xiàn)置成邏輯1,而RESET線(xiàn)又將RST751線(xiàn)置成邏輯1,從而復(fù)位了微控制器U2。CPU40通過(guò)將邏輯0寫(xiě)至控制端口0EDH的第0位而清除復(fù)位請(qǐng)求。
此外,如圖6C所示,在通往電源17的交流電源“降壓”或“消失”時(shí),AUX5的電壓會(huì)下降,此后,AUX5信號(hào)的電壓必然會(huì)上升一定的量,不論何時(shí)出現(xiàn)這種情況,復(fù)位子電路都會(huì)將RST751線(xiàn)置為邏輯1,從而復(fù)位了微控制器U2。83C750的制造者Philips公司建議使用簡(jiǎn)單的RC電路(阻容電路)以防止復(fù)位問(wèn)題;但是,簡(jiǎn)單的RC電路會(huì)使83C750在電源降壓期間鎖住。在圖6A的特定結(jié)構(gòu)中,當(dāng)AUX5電壓在一段大于由R4、R16和C1所決定的時(shí)間常數(shù)的時(shí)間內(nèi)上升一閾值時(shí),就會(huì)使RST751線(xiàn)置成邏輯1一段時(shí)間,這段時(shí)間是由R17和C8所決定的(從而復(fù)位了微控制器U2)。這種情況在通常的降壓或消失之后會(huì)出現(xiàn)。在圖6A所示的實(shí)施例中,所說(shuō)的閾值約為直流電1.5V。
參照?qǐng)D6C,它顯示了AUX5電壓隨著交流電供給電源17而上升那段時(shí)間以及發(fā)生“降壓”那段時(shí)間內(nèi)用于復(fù)位電路920的波形。在t0之前,所述電源未產(chǎn)生AUX5,VBAT約為3.3V,Q3導(dǎo)通而使RST751線(xiàn)接地。在t0時(shí)刻,電源開(kāi)始產(chǎn)生AUX5,AUX5的電壓開(kāi)始以一定的速率上升,所說(shuō)的速率取決于負(fù)荷以及電源內(nèi)影響AUX5的電容。結(jié)點(diǎn)1即C1與R4之間的結(jié)點(diǎn)電容性地連接于AUX5,所以能隨AUX5的上升而上升。
在t1時(shí)刻,結(jié)點(diǎn)1達(dá)到約為1.5V,這足以觸發(fā)Q2,而Q2則使結(jié)點(diǎn)2接地。在t2時(shí)刻,當(dāng)結(jié)點(diǎn)2超過(guò)2.5V時(shí),Q3停止導(dǎo)通,RST751線(xiàn)借助R18突增到AUX5的電平并隨AUX5上升至約為5V。當(dāng)RST751線(xiàn)變成約3V時(shí),就會(huì)復(fù)位微控制器U2。
在t3時(shí)刻,AUX5停止上升,所以,結(jié)點(diǎn)1停止上升并開(kāi)始按C1和R4所確定的速率放電至地電平(第一電路U1的RESET線(xiàn)是低的)。在t4時(shí)刻,當(dāng)結(jié)點(diǎn)1經(jīng)過(guò)約1.5V時(shí),Q2停止導(dǎo)通,結(jié)點(diǎn)2按C8和R17所確定的速率充電。在t5時(shí)刻,當(dāng)結(jié)點(diǎn)2超過(guò)約2.5V時(shí),Q3導(dǎo)通并使RST751接地。因此,完成了電源接通時(shí)的復(fù)位,計(jì)算機(jī)系統(tǒng)通常處于這樣的狀態(tài)AUX5為5V、VBAT為3.3V,結(jié)點(diǎn)1接地且結(jié)點(diǎn)2處于VBAT的狀態(tài)。
在t6時(shí)刻,AUX5線(xiàn)處開(kāi)始降壓且AUX5放電。由于結(jié)點(diǎn)1電容性地連接于AUX5,所以它試圖隨AUX5的變化而變化,但卻不可能產(chǎn)生這種變化,因?yàn)椋谝浑娐稶1內(nèi)的二極管會(huì)阻止結(jié)點(diǎn)1處于大大低于-0.5V的狀態(tài)。在t7時(shí)刻,AUX5處于最低點(diǎn)并開(kāi)始再度上升。而且,結(jié)點(diǎn)1隨AUX5變化并且上升。在t8時(shí)刻,結(jié)點(diǎn)1達(dá)到約1.5V,這足以觸發(fā)Q2,而Q2則使結(jié)點(diǎn)2接地。在t9時(shí)刻,當(dāng)結(jié)點(diǎn)2超過(guò)2.5V時(shí),Q3停止導(dǎo)通,RST751線(xiàn)會(huì)借助R18突增至AUX5的電平并隨AUX5上升至約為5V。當(dāng)RST751線(xiàn)變成約為3V時(shí),就會(huì)復(fù)位微控制器U2。
在t10時(shí)刻,AUX5停止上升,所以,結(jié)點(diǎn)1停止上升并開(kāi)始按C1和R4所確定的速率放電從而接地(第一PAL U1的RESET線(xiàn)是低的)。在t11時(shí)刻,當(dāng)結(jié)點(diǎn)1通過(guò)約為1.5V時(shí),Q2停止導(dǎo)通,結(jié)點(diǎn)2按C8和R17所確定的速率充電。在t12時(shí)刻,當(dāng)結(jié)點(diǎn)2通過(guò)約2.5V時(shí),Q3導(dǎo)通并使RST751線(xiàn)接地。因此,完成了因降壓而引起的復(fù)位周期。請(qǐng)注意,在這種特定的降壓期間,結(jié)點(diǎn)1不會(huì)上升至3V以上,因而,盡管微控制器與RST751的引線(xiàn)相連,結(jié)點(diǎn)1也不可能復(fù)位微處理器。但是,AUX5的電壓會(huì)降至4V以下,這足以使微處理器U2進(jìn)入不確定的狀態(tài)。
用于觸發(fā)一次復(fù)位的閾值由參照值所限定,所以,為了能使閾值電壓上升或下降,就必須使參照值(在本例中是VBAT)上升或下降。復(fù)位電路為微控制器U2提供了提高重置保護(hù)的好處,同時(shí)又非常廉價(jià)并且在不復(fù)位微處理器U2時(shí)基本上不耗電。
參照?qǐng)D6A,微控制器U2通過(guò)第一PAL U1與CPU相接并具有多個(gè)輸入、輸出以及可內(nèi)部控制的功能。
SWITCH(開(kāi)關(guān))信號(hào)在引線(xiàn)8(P0.0)處輸入并反映了按鈕21的當(dāng)前狀態(tài)。按鈕21是常開(kāi)的。當(dāng)按鈕21斷開(kāi)時(shí)SWITCH線(xiàn)通過(guò)電阻R1被置為邏輯0(接地)。當(dāng)按下按鈕21從而引發(fā)閉合事件時(shí),SWITCH線(xiàn)通過(guò)電阻R13被置為邏輯1(AUX5)。電容C6起作用以消除開(kāi)關(guān)閉合事件彈跳,正如本技術(shù)的專(zhuān)家所周知的那樣,在微控制器U2內(nèi)通過(guò)讀取SWITCH預(yù)定的次數(shù)例如50次并確認(rèn)在所有的讀取中SWITCH線(xiàn)都是相同的,從而進(jìn)一步消除了開(kāi)關(guān)21閉合事件的彈跳。
微控制器U2可直接控制對(duì)電源17的穩(wěn)壓。如圖6A所示,On(開(kāi))信號(hào)在引線(xiàn)5(P3.0)處輸出并經(jīng)由電阻R6與SWITCH信號(hào)作線(xiàn)“或”以便控制電源的ON#信號(hào)。當(dāng)ON信號(hào)為邏輯1時(shí),MOSFET Q1導(dǎo)通,從而使ON#線(xiàn)(JP2的引線(xiàn)2)成邏輯0(接地),因而使電源17開(kāi)始通過(guò)±5VDC和±12VDC線(xiàn)向計(jì)算機(jī)系統(tǒng)提供穩(wěn)壓的電力。另一方面,當(dāng)ON線(xiàn)為邏輯0時(shí),MOSFETQ1不導(dǎo)通,所以,ON#線(xiàn)(JP2的引線(xiàn)2)會(huì)被電阻R7置成邏輯1(AUX5),從而使得電源17停止經(jīng)由±5VDC和±12VDC線(xiàn)供給穩(wěn)壓的電力。
微控制器U2響應(yīng)開(kāi)關(guān)21的接通事件以及通過(guò)微控制器U2內(nèi)CPU40可寫(xiě)的可寫(xiě)寄存器位響應(yīng)CPU40從而控制ON線(xiàn)的狀態(tài)。AUX5對(duì)微控制器U2加電,所以,微控制器U2總是處于加電狀態(tài)并能執(zhí)行代碼且控制著計(jì)算機(jī)系統(tǒng)。如果電源17不通過(guò)±5VDC和±12VDC線(xiàn)向計(jì)算機(jī)系統(tǒng)提供穩(wěn)壓的電力并且(i)按下開(kāi)關(guān)21或者(ii)出現(xiàn)了所說(shuō)的外部事件之一,那么,微控制器U2就會(huì)確認(rèn)ON信號(hào),從而使得電源17通過(guò)±5VDC和±12VDC線(xiàn)向計(jì)算機(jī)系統(tǒng)提供穩(wěn)壓的電力。釋放開(kāi)關(guān)21之后,微控制器會(huì)繼續(xù)確認(rèn)ON信號(hào)。
作為一種后備系統(tǒng),電源17也可在用戶(hù)通過(guò)按鈕21的直接控制下接通。如果微控制器U2正如計(jì)算機(jī)系統(tǒng)未響應(yīng)按下電源開(kāi)關(guān)21而起動(dòng)所表現(xiàn)出來(lái)的那樣停止起所希望的作用,那么,一般就可以使用上述選擇。如圖6A所示,開(kāi)關(guān)21還通過(guò)二極管CR2、MOSFET Q1、電阻R7以及連接器JP2控制電源17的ON#線(xiàn)。在一般情況下按鈕21是斷開(kāi)的,SWITCH線(xiàn)通過(guò)R1被置為邏輯0并且MOSFET Q1不導(dǎo)通,所以O(shè)N#線(xiàn)(JP2的引線(xiàn)2)通過(guò)電阻R7被置為邏輯1(AUX5),因而電源17不經(jīng)由±5VDC和±12VDC線(xiàn)提供穩(wěn)壓的電力。當(dāng)用戶(hù)按下并按住按鈕21時(shí),SWITCH線(xiàn)被置為1,MOSFET Q1導(dǎo)通,從而將ON#線(xiàn)(JP2的引線(xiàn)2)置為邏輯0(GND),因此使得電源17開(kāi)始經(jīng)由±5VDC和±12VDC線(xiàn)提供穩(wěn)壓的電力。在繼續(xù)按住按鈕21的情況下,計(jì)算機(jī)系統(tǒng)加電之后,BIOS會(huì)使CPU40檢測(cè)微控制器U2是否還在起作用。如果不起作用,CPU40就會(huì)復(fù)位微控制器U2,而微控制器在被復(fù)位之后會(huì)檢測(cè)到開(kāi)關(guān)21正被按下。因此,在按鈕21仍被按住的情況下,微處理器會(huì)確認(rèn)ON信號(hào),所以用戶(hù)在知道了微控制器目前正在控制電源17的情況下會(huì)最終放開(kāi)開(kāi)關(guān)21。為了使用這種后備的選擇,用戶(hù)必須按下按鈕21數(shù)秒的時(shí)間即在標(biāo)志(logo)出現(xiàn)之后約為兩秒。
微控制器U2只響應(yīng)(i)按下開(kāi)關(guān)21或者(ii)CPU40命令微控制器關(guān)閉系統(tǒng)而關(guān)閉計(jì)算機(jī)系統(tǒng)。對(duì)微控制器來(lái)說(shuō),上述事件都是相同的,這是因?yàn)?,微控制器配置成開(kāi)關(guān)21的接通事件或CPU40都能引發(fā)一次開(kāi)關(guān)按下,硬件上的按鈕按下/釋放基本上看成是與軟件上的按鈕按下/釋放一樣的。如果微控制器U2中的允許掛起標(biāo)志被清除,則微控制器U2在沒(méi)有CPU指令的情況下便關(guān)閉計(jì)算機(jī)系統(tǒng)。在這種情況下,當(dāng)計(jì)算機(jī)系統(tǒng)處于加電狀態(tài)且清除了允許掛起標(biāo)志,那么,微控制器U2就會(huì)響應(yīng)開(kāi)關(guān)21的接通事件而清除ON信號(hào),從而使電源17停止經(jīng)由±5VDC和±12VDC線(xiàn)向計(jì)算機(jī)系統(tǒng)提供穩(wěn)壓的電力。在釋放開(kāi)關(guān)21之后,ON信號(hào)仍保持在被清除的狀態(tài)。
微控制器U2也會(huì)響應(yīng)CPU在系統(tǒng)狀態(tài)已成功地保存到硬盤(pán)驅(qū)動(dòng)器上(掛起)之后必定會(huì)發(fā)出的命令而關(guān)閉計(jì)算機(jī)系統(tǒng)。微控制器U2響應(yīng)上述命令而清除ON信號(hào),從而使電源17停止經(jīng)由±5VDC和±12VDC線(xiàn)向計(jì)算機(jī)系統(tǒng)提供穩(wěn)壓的電力。
微控制器U2在某些外部事件發(fā)生時(shí)也會(huì)檢測(cè)并影響計(jì)算機(jī)系統(tǒng)。EXT_RING(外部振鈴)信號(hào)在引線(xiàn)7(P0.1)處輸入并使微處理器U2檢測(cè)來(lái)自加電后外部調(diào)制解調(diào)器902的振鈴。正如本技術(shù)的專(zhuān)家所周知的那樣,當(dāng)在插塞尖端與振鈴電話(huà)線(xiàn)上檢測(cè)到振鈴信號(hào)時(shí),一般的外部調(diào)制解調(diào)器會(huì)提供振鈴信號(hào),該信號(hào)會(huì)以周知的RS-232C格式觸發(fā)邏輯1。上述信號(hào)經(jīng)由二極管CR6通向微控制器U2并被電阻R10和R11分流且最終經(jīng)由EXT_RING線(xiàn)輸入微控制器U2。微控制器U2每25毫秒對(duì)觸發(fā)的信號(hào)進(jìn)行一次取樣并加以分析,從而,對(duì)兩個(gè)連續(xù)的樣本這一輸入是邏輯1時(shí),便認(rèn)為存在有振鈴。微控制器U2響應(yīng)所滿(mǎn)足的上述條件確認(rèn)ON信號(hào),從而使電源17經(jīng)由±5VDC和±12VDC線(xiàn)向計(jì)算機(jī)系統(tǒng)提供穩(wěn)壓的電力。為了用EXT_RING信號(hào)來(lái)檢測(cè)呼入電話(huà),必須存在有從外部加電的調(diào)制解調(diào)器902。
此外,提供符合RS-232規(guī)范的二進(jìn)制信號(hào)(或充分接近RS-232規(guī)范從而足以確認(rèn)EXT_RING信號(hào))的其它設(shè)備可與EXT_RING線(xiàn)相接并用于喚醒計(jì)算機(jī)系統(tǒng),例如,這些設(shè)備可以是運(yùn)動(dòng)傳感器、防盜警報(bào)器、語(yǔ)音澈活傳感器、光傳感器、紅外線(xiàn)傳感器、“鳴叫”型傳感器等。
如圖6A和圖6B所示,本實(shí)施例還帶有用于檢測(cè)來(lái)自?xún)?nèi)部調(diào)制解調(diào)器900的電話(huà)振鈴信號(hào)的裝置,此裝置帶有一以振鈴檢測(cè)電路為基礎(chǔ)的光隔離器OPTD1。例如Hewlett Packard生產(chǎn)多種合適的光隔離器,這些隔離器可從多方面廣泛地獲得??蓪?nèi)部調(diào)制解調(diào)器900設(shè)計(jì)在系統(tǒng)主板20的電路內(nèi),或者插在擴(kuò)展槽78上。在后一種情況下,必須對(duì)調(diào)制解調(diào)器900加以改進(jìn)以提供一Berg或類(lèi)似的接頭,從而使來(lái)自光隔離器OPTD1的信號(hào)電連接于圖6A電源管理電路的電路。有許多調(diào)制解調(diào)器的生產(chǎn)商改進(jìn)了它們的內(nèi)部調(diào)制解調(diào)器以提供適合于和本發(fā)明電路一道使用接頭。EXT_WAKEUP#(外部喚醒)信號(hào)在微控制器U2的引線(xiàn)4(P0.2)處輸入并用于從內(nèi)部調(diào)制解調(diào)器中輸入來(lái)自振鈴檢測(cè)光隔離器OPT01的信號(hào)。此信號(hào)經(jīng)過(guò)電阻R9和R5二極管CR6以及電容C9,最后經(jīng)由EXT_WAKUP#線(xiàn)輸入微控制器U2。
內(nèi)部調(diào)制解調(diào)器900的閾值及保護(hù)部分905與標(biāo)準(zhǔn)的插塞尖端(Tip)和振鈴電話(huà)線(xiàn)相接,并且(i)提供防止可能損壞調(diào)制解調(diào)器900的閃電和其它電學(xué)事件的保護(hù)以及(ii)如調(diào)制解調(diào)器設(shè)計(jì)技術(shù)的專(zhuān)家所周知的那樣設(shè)置振鈴閾值電壓。
微控制器U2檢測(cè)并分析來(lái)自光隔離器OPTD1的觸發(fā)信號(hào),從而,每當(dāng)該信號(hào)在EXT_WAKEUP上的三個(gè)連續(xù)信號(hào)周期具有15.1Hz至69.1Hz的頻率,就認(rèn)定存在有振鈴。與必須加電才能沿EXT_RING提供振鈴信號(hào)的EXT_RING信號(hào)不同,對(duì)光隔離器OPTD1來(lái)說(shuō),不必為內(nèi)部調(diào)制解調(diào)器900加電就能沿EXT_WAKEUP#線(xiàn)提供適當(dāng)?shù)男盘?hào),該信號(hào)通??捎蒖5升至AUX5。
如果CPU40帶有系統(tǒng)管理中斷(SMI)(CPU40不一定要帶有SMI才能使系統(tǒng)利用本發(fā)明的多種優(yōu)點(diǎn)),那么,微控制器U2就會(huì)通過(guò)CPU的系統(tǒng)管理中斷(SMI)中斷CPU40。SMI_OUT#(系統(tǒng)管理中斷輸出)信號(hào)在微控制器U2的引線(xiàn)3(P3.2)處輸出并使得微控制器U2在不等待操作系統(tǒng)確認(rèn)或允許中斷的情況下立即中斷CPU40。位于微控制器U2內(nèi)CPU40可寫(xiě)的一個(gè)可寫(xiě)寄存器位控制SMI_OUT#線(xiàn)的狀態(tài)。此外,微控制器U2可以確認(rèn)SMI_OUT#信號(hào)從而(i)根據(jù)在ACTIVITY#(活動(dòng))線(xiàn)上所檢測(cè)到的活動(dòng)(ii)或者在微控制器U2使電源17停止向計(jì)算機(jī)系統(tǒng)提供穩(wěn)壓電力之前中斷CPU40。從CPU到微控制器U2的命令可以使上述一個(gè)或兩個(gè)事件有效或失效。
對(duì)于每個(gè)SMI,CPU40內(nèi)的微碼都將CPU的狀態(tài)從內(nèi)存保存至特定的CPU狀態(tài)保存區(qū)域或保存至內(nèi)存。此后,CPU40執(zhí)行SMI中斷處理程序,該程序執(zhí)行以下功能。為了恢復(fù)CPU的狀態(tài),SMI中斷處理程序發(fā)出RSM(繼續(xù))指令,此指令使CPU40從上述特定的保存區(qū)域中恢復(fù)CPU自身的狀態(tài)。
在CPU40使微控制器U2通過(guò)CPU的SMI中斷CPU40之前,CPU40將一指示系統(tǒng)管理中斷(SMI)原因的值寫(xiě)至CMOSNVRAM內(nèi)的變量中。CMOS NVRAM內(nèi)的這個(gè)值缺省為00H,它向CPU40指明正如在微控制器U2使電源17停止提供穩(wěn)壓電力之前所出現(xiàn)的那樣微控制器U2正在異步地中斷CPU40。每次SMI之后,CPU40都將CMOS NVRAM內(nèi)的上述變量置為00H。在假定微控制器U2即將使計(jì)算機(jī)系統(tǒng)掉電的情況下,CPU40會(huì)響應(yīng)上述值去執(zhí)行某些任務(wù)。在CPU40通過(guò)周期性地重新啟動(dòng)微控制器U2內(nèi)的降低功耗延時(shí)計(jì)時(shí)器而在微控制器U2使計(jì)算機(jī)系統(tǒng)降低功耗之前,CPU40可以延時(shí)一段時(shí)間。
在計(jì)算機(jī)系統(tǒng)掉電之前的這段時(shí)間內(nèi)、CPU40可以執(zhí)行多種任務(wù)。例如,由于用戶(hù)可能改變了影響喚醒警鈴的一個(gè)或多個(gè)參數(shù),所以CPU會(huì)重新計(jì)算出距喚醒的新的分鐘數(shù)值并將該分鐘數(shù)值寫(xiě)至微控制器U2。此外,CPU還將以后要寫(xiě)入硬盤(pán)驅(qū)動(dòng)器31的某些信息如計(jì)算機(jī)系統(tǒng)從最近一次通電開(kāi)始運(yùn)行的時(shí)間等寫(xiě)至CMOS NVRAM。
CPU40所寫(xiě)的其它值包括01H,它表明CPU40要轉(zhuǎn)至標(biāo)號(hào)254處的掛起例程;02H,它表明CPU40要轉(zhuǎn)至標(biāo)號(hào)454處的繼續(xù)例程;以及0FFH,它表明CPU40要在E000H段數(shù)據(jù)結(jié)構(gòu)內(nèi)創(chuàng)建前述特定的CPU狀態(tài)保存區(qū)域。
在本實(shí)施例中,微控制器進(jìn)行控制使顯示器11不顯示。DISP_BLANK(顯示器不顯示)信號(hào)在微控制器U2的引線(xiàn)1(P3.4)處輸出并直接控制著顯示器11的不顯示。兩個(gè)非門(mén)U3D和U3E通過(guò)ESYNC#和BLANK#線(xiàn)與DISP_BLANK信號(hào)相連。在ESYNC#和BLANK#處于邏輯1(VCC)的情況下,視頻控制器56會(huì)產(chǎn)生視頻信號(hào)。當(dāng)ESYNC#和BLANK#線(xiàn)處于邏輯0(接地)時(shí),視頻控制器56停止產(chǎn)生視頻信號(hào)。位于微控制器U2內(nèi)CPU40可寫(xiě)的一個(gè)可寫(xiě)寄存器位控制著DISP_BLANK的狀態(tài)。當(dāng)計(jì)算機(jī)系統(tǒng)進(jìn)入待機(jī)狀態(tài)152時(shí),CPU40會(huì)指示微控制器U2使顯示器不顯示。此外,響應(yīng)開(kāi)關(guān)21的接通事件而依次對(duì)DISP_BLANK線(xiàn)置1和清0。與此相似,在本例中為INT1和INT2的任何一種活動(dòng)中斷處的活動(dòng)都會(huì)使微控制器對(duì)DISP_BLANK線(xiàn)清0,從而使得視頻控制器56產(chǎn)生視頻信號(hào)。
此外,微控制器U2控制著時(shí)鐘合成器906所產(chǎn)生的時(shí)鐘信號(hào)的頻率。三個(gè)Berg型跳接器(未顯示)JP0、JP1以及JP2按下述方式控制著時(shí)鐘合成器當(dāng)JP0=0、JP1=1且JP2=0時(shí),時(shí)鐘合成器產(chǎn)生33MHz的時(shí)鐘信號(hào);當(dāng)JP0=1、JP1=1且JP2=0時(shí),時(shí)鐘合成器產(chǎn)生25MHz的時(shí)鐘信號(hào);當(dāng)JP0=0、JP1=1且JP2=0時(shí),時(shí)鐘合成器產(chǎn)生8MHz的時(shí)鐘信號(hào)。對(duì)應(yīng)于JP0、JP1和JP2的三個(gè)時(shí)鐘線(xiàn)CLK0、CLK1以及CLK2也控制著時(shí)鐘合成器906。如圖6A所示,微控制器U2通過(guò)CLK_SLOW#信號(hào)控制著上述時(shí)鐘線(xiàn)CLK0、CLK1和CLK2,而CLK_SLOW#信號(hào)則在微控制器U2的引線(xiàn)2(P3.3)處輸出。如圖所示,帶有開(kāi)放收集器輸出的非門(mén)U3A、U3B和U3C雙重反相CLK_SLOW#信號(hào)。而且,電阻R15和R8都是負(fù)載電阻,它們分別用于將U3A的收集極開(kāi)路的輸出和朝向時(shí)鐘合成器906的CLK0輸入上升至邏輯1。
上述三個(gè)時(shí)鐘信號(hào)CLK0、CLK1和CLK2以及三個(gè)跳接器JP0、JP1和JP2按如下方式控制著時(shí)鐘合成器當(dāng)CLK_SLOW#信號(hào)為邏輯1時(shí),CLK1和CLK2信號(hào)也為邏輯1,時(shí)鐘合成器906跳接器JP1、JP2所控制并產(chǎn)生供計(jì)算機(jī)系統(tǒng)使用的25MHz和33MHz的較高頻時(shí)鐘信號(hào)。另一方面,當(dāng)CLK_SLOW#信號(hào)為邏輯0時(shí),CLK1和CLK2信號(hào)也為邏輯0,時(shí)鐘合成器906會(huì)產(chǎn)生供計(jì)算機(jī)系統(tǒng)使用的8MHz較低頻信號(hào),從而使計(jì)算機(jī)系統(tǒng)有較少的功耗。如圖6A所示,一Berg型跳接器將CLK_SLOW#線(xiàn)與CLK0線(xiàn)分開(kāi)。如果一個(gè)跳接器就位,那么,CLK0線(xiàn)中就會(huì)跟隨CLK_SLOW#信號(hào)。另一方面,如果沒(méi)有跳接器就位,那么,電阻R8就會(huì)在與CLK_SLOW#信號(hào)無(wú)關(guān)的情況下將CLK0置為邏輯1。位于微控制器U2內(nèi)CPU40可寫(xiě)的一個(gè)可寫(xiě)寄存器位控制著CLK_SLOW#線(xiàn)的狀態(tài)。此外,微控制器U2可以響應(yīng)ACTIVITY#線(xiàn)上的活動(dòng)將CLK_SLOW線(xiàn)清零。正如本技術(shù)的專(zhuān)家所知道的那樣,本發(fā)明也可以使用其它的時(shí)鐘合成器,這時(shí)需改變微控制器U2與時(shí)鐘合成器之間的相互連接關(guān)系以便符合所使用的特定合成器的特殊規(guī)格。
另外,微控制器U2還直接控制著電源/反饋。LED23的發(fā)光。LED_CNTRL(LED控制)信號(hào)在引線(xiàn)22(P3.6)處輸出并使得微控制器U2直接控制電源/反饋LED23。電阻R2和R3以及二極管CR4和CR5根據(jù)處于邏輯0的LED_CNTRL線(xiàn)使AUX5電源線(xiàn)或VCC電源線(xiàn)驅(qū)動(dòng)電源/反饋LED23。當(dāng)LED_CNTRL線(xiàn)處于邏輯1時(shí),電源/反饋LED23不亮。正如以下將要詳細(xì)說(shuō)明的那樣,微控制器U2響應(yīng)開(kāi)關(guān)21的接通事件、響應(yīng)喚醒警鈴、響應(yīng)振鈴檢測(cè)輸入的一次或多次振鈴或者響應(yīng)處于待機(jī)方式下的計(jì)算機(jī)系統(tǒng)而控制LED_CNTRL線(xiàn)的狀態(tài)。
微控制器U2可將LED23控制成簡(jiǎn)單的電源LED。這樣,在開(kāi)關(guān)21使計(jì)算機(jī)系統(tǒng)從關(guān)機(jī)狀態(tài)156或掛起狀態(tài)154轉(zhuǎn)變成正常操作狀態(tài)150的接通事件之后,LED23會(huì)發(fā)光。同樣,在開(kāi)關(guān)21使計(jì)算機(jī)系統(tǒng)從正常操作狀態(tài)150轉(zhuǎn)變成掛起狀態(tài)154或關(guān)機(jī)狀態(tài)156的釋放事件之后,微控制器U2會(huì)使LED23熄滅。
此外,微控制器U2可以使LED23按特定的速率例如每秒一次有選擇地閃亮,以指示計(jì)算機(jī)系統(tǒng)正處于待機(jī)狀態(tài)152。再有,微控制器U2還可以使LED23按不同的速率例如每半秒一次有選擇地閃亮,以指示計(jì)算機(jī)系統(tǒng)被振鈴或警鈴所喚醒或者計(jì)算機(jī)系統(tǒng)處于關(guān)機(jī)或掛起狀態(tài)。另外,微控制器U2也可以使LED23以成組閃亮的方式有選擇地閃亮以指示計(jì)算機(jī)系統(tǒng)因諸如振鈴、警鈴之類(lèi)的外部事件而加電以及因不活動(dòng)性?huà)炱鹩?jì)時(shí)器到時(shí)而掉電的次數(shù)。在這種情況下,BIOS具有一種或多種功能以允許OS及應(yīng)用程序修改微控制器U2使LED23閃亮的次數(shù)。例如,如果計(jì)算機(jī)系統(tǒng)被振鈴喚醒并接收到了呼入的傳真?zhèn)鬏?,那么,運(yùn)程通信應(yīng)用程序就會(huì)調(diào)用特定的BIOS功能使閃亮數(shù)加一。此后,BIOS使CPU40將新的閃亮值寫(xiě)至微控制器U2,從而使LED23閃亮所命令的次數(shù)。
POWERGOOD信號(hào)在微控制器U2的引線(xiàn)4(P3.1)處輸入并允許微控制器U2和CPU40使用這一信號(hào)。具體地說(shuō),微控制器使用POWERGOOD信號(hào)使基于反饋的檢錯(cuò)及糾錯(cuò)電路確定電源17是否出現(xiàn)故障并排除掉這種故障。正如本說(shuō)明書(shū)其它部分所說(shuō)明的那樣,如果已確立了ON信號(hào)一段時(shí)間(例如三秒)并且POWERGOOD信號(hào)為邏輯0從而指示電源17未以適當(dāng)?shù)碾娖教峁┓€(wěn)定的電壓,那么,微控制器U2就假定電源17因諸如過(guò)載電流而出現(xiàn)故障。因此,為了能夠排除該故障,微控制器U2會(huì)停止確立ON信號(hào)一段時(shí)間(例如5秒)以便排除上述故障。此后,微控制器U2會(huì)重新確立ON信號(hào)并等待POWERGOOD變成邏輯1,從而表示電源17目前正在向計(jì)算機(jī)系統(tǒng)提供穩(wěn)壓的電力。在不存在上述基于反饋的檢錯(cuò)及糾錯(cuò)的情況下,電源17總是會(huì)繼續(xù)處于出錯(cuò)狀態(tài)并且微控制器U2總是不斷地確立著ON信號(hào)以試圖使電源17開(kāi)始產(chǎn)生穩(wěn)壓的電力。唯一的方案是從上述電源上撥掉交流電以排除所說(shuō)的故障。
圖6D顯示了電源檢錯(cuò)與糾錯(cuò)電路的另一實(shí)施例。該實(shí)施例使用了四個(gè)FET Q10-Q13,電阻R20-R23、電容C20以及74HC132以檢測(cè)電源17何時(shí)出現(xiàn)故障并排除這種故障。當(dāng)ON信號(hào)為HIGH(高),AUX5加電且VCC低于觸發(fā)Q11的閾值時(shí),Q12將ON信號(hào)置為L(zhǎng)OW(低)一段時(shí)間,該時(shí)間是由R22和C20所決定的,從而排除電源中的故障。
ACTIVITY#信號(hào)在微控制器U2的引線(xiàn)19(INT1)處輸入,微控制器U2使用這一信號(hào)以響應(yīng)鍵盤(pán)12和鼠標(biāo)器13上的活動(dòng)。IRQ1是鍵盤(pán)的硬件中斷信號(hào),它在第一PALU1的引線(xiàn)8(I7)處輸入,按下鍵盤(pán)12上的按鍵會(huì)使IRQ1信號(hào)產(chǎn)生脈動(dòng)。IRQ12是鼠標(biāo)器的硬件中斷信號(hào),它在第一PALU1的引線(xiàn)11(I9)處輸入,移動(dòng)鼠標(biāo)13或按下鼠標(biāo)器13上的按鈕會(huì)使IRQ12信號(hào)產(chǎn)生脈動(dòng)。IRQ1和IRQ12在第一電路U1內(nèi)作邏輯“或”并作為ACTIVITY#信號(hào)輸出。使用ACTIVITY#信號(hào)會(huì)使得微控制器U2不會(huì)遺漏鍵盤(pán)12或鼠標(biāo)器13的活動(dòng)。
當(dāng)處于待機(jī)狀態(tài)時(shí),上述任一種中斷的活動(dòng)都會(huì)使微控制器立刻恢復(fù)視頻顯示。在從待機(jī)狀態(tài)152返回至正常操作狀態(tài)154時(shí),按上述方式使用中斷IRQ1和IRQ12會(huì)給用戶(hù)直接的反饋,該反饋是恢復(fù)了的視頻顯示。否則,正如圖9中的文字所述的那樣,用戶(hù)可能在幾秒鐘之后當(dāng)APM檢查用戶(hù)活動(dòng)時(shí),才接收到反饋。
利用SD(0)、SD(1)、SD(2)、SD(3)、IO_STROBE以及PROC_RDY進(jìn)行CPU40與微控制器U2之間的通訊,SD(0)在第一PAL U1的引線(xiàn)18(I/06)處輸入并經(jīng)由RWD0線(xiàn)輸入至微控制器U2,RWD0線(xiàn)則在第一電路U1的引線(xiàn)B(I/01)處輸出并在微控制器U2的引線(xiàn)13(P1.0)處輸入,SD(1)在微控制器U2的引線(xiàn)14(P1.1)處輸入,SD(2)在微控制器U2的引線(xiàn)15(P1.2)處輸入,SD(3)在微控制器U2的引線(xiàn)16(P1.3)處輸入,SD(4)在第一電路U1的引線(xiàn)6(I5)處輸入,IO_STROB#在微控制器U2的引線(xiàn)18(INTO)處輸入,PROC_RDY在微控制器U2的引線(xiàn)20(P1.7)處輸出。將第一PAL U1和微控制器U2配置并編程為以便提供(i)從CPU40沿SD(0)經(jīng)由RWD0、SD(1)、SD(2)以及SD(3)到微控制器U2的四位并行寫(xiě)操作,其中一個(gè)地址基本上是用于復(fù)位微控制器U2的一位寫(xiě)操作,而其它地址則是寫(xiě)入微控制器U2的半個(gè)字節(jié),該半個(gè)字節(jié)只有在數(shù)據(jù)位SD(4)為HIGH時(shí)才是有效的;以及(ii)由CPU40從微控制器U2中沿SD(0)經(jīng)由RWD0所進(jìn)行的串行讀操作(一位),其中一個(gè)地址對(duì)應(yīng)于狀態(tài)位,而其它地址則對(duì)應(yīng)于來(lái)自微控制器U2的數(shù)據(jù)位。
參照?qǐng)D19,它顯示了在微控制器U2內(nèi)運(yùn)行的幾個(gè)例程,這些例程始于1160處。微控制器U2通常執(zhí)行兩個(gè)主例程中的一個(gè)位于任務(wù)1168至1216的通電例程或位于任務(wù)1260至1308處斷電例程。當(dāng)電源17在±5和±12線(xiàn)處提供穩(wěn)壓的電力,或電源17雖不在±5和±12線(xiàn)處提供穩(wěn)壓的電力但計(jì)算機(jī)系統(tǒng)處在通電過(guò)程時(shí),微控制器U2就執(zhí)行通電例程。當(dāng)電源17不在±5和±12線(xiàn)處提供穩(wěn)壓的電力或電源17雖在±5和±12線(xiàn)處提供穩(wěn)壓的電力但計(jì)算機(jī)系統(tǒng)處于斷電過(guò)程時(shí),微控制器U2就執(zhí)行斷電例程。此外,還有三種中斷驅(qū)動(dòng)例程一個(gè)是在1220至1232處的用于和CPU40進(jìn)行通信的例程;一個(gè)是在1236至1244處的用于檢測(cè)鼠標(biāo)器13或鍵盤(pán)12活動(dòng)的例程;一個(gè)是位于1248至1256處的提供25毫秒、半秒、秒以及分鐘分辨率的時(shí)基的例程。
首先,在1164處初始化微控制器U2,在這期間,初始化所有的變量,初始化計(jì)數(shù)器變量,初始化計(jì)時(shí)器中斷并使之生效,同時(shí)初始化控制通信例程及活動(dòng)例程的外部中斷。
通訊例程是一始于1220處的中斷驅(qū)動(dòng)例程,它響應(yīng)被第一PAL U1置為邏輯0的IO_STROBE而執(zhí)行,邏輯0表示CPU40正在開(kāi)始一命令或查詢(xún)。簡(jiǎn)要地說(shuō),此例程在1224處接收來(lái)自CPU40的一個(gè)或多個(gè)半字節(jié)命令或查詢(xún)、在1128處執(zhí)行上述命令或響應(yīng)上述查詢(xún)而返回?cái)?shù)據(jù)、并且在1232處將程序執(zhí)行控制權(quán)交還給被中斷的代碼。
微控制器順序地接收來(lái)自CPU構(gòu)成命令或查詢(xún)的半字節(jié)。在接收一個(gè)半字節(jié)之后,微控制器將PROC_RDY置為L(zhǎng)OW。當(dāng)微控制器準(zhǔn)備好接收下一個(gè)半字節(jié)時(shí),微控制器再將PROC_RDY置為HIGH。CPU40一旦檢測(cè)到在PROC_RDY處有上述從LOW到HIGH的轉(zhuǎn)換就寫(xiě)下一個(gè)命令的半字節(jié)。
微控制器U2在執(zhí)行來(lái)自CPU40的命令或查詢(xún)時(shí)不能接收另外的命令,所以,微控制器U2使PROC_RDY保持為邏輯0,以便(通過(guò)狀態(tài)端口的讀操作)向CPU40表明微控制器還不能接收下一個(gè)命令/查詢(xún)。當(dāng)上述工作完成時(shí),PROC_RDY被置為邏輯1,從而(通過(guò)狀態(tài)端口的讀操作)向CPU40表明微控制器U2隨時(shí)都可以接收下一個(gè)命令/查詢(xún)。
活動(dòng)例程是一始于1236處的中斷驅(qū)動(dòng)例程,它響應(yīng)被第一PAL U1置為邏輯0的ACTIVITY#線(xiàn)而執(zhí)行,邏輯0表示用戶(hù)已經(jīng)使用了鼠標(biāo)器13或鍵盤(pán)12。簡(jiǎn)要地說(shuō),此例程響應(yīng)中斷的接收而在1240處進(jìn)行下列工作(i)設(shè)置一個(gè)位,該位表示已存在有鼠標(biāo)器13或鍵盤(pán)12的活動(dòng);(ii)如果啟動(dòng)時(shí)鐘減慢則恢復(fù)時(shí)鐘速度,(iii)如果屏幕不顯示,則使屏幕顯示;(iV)重新啟動(dòng)故障保險(xiǎn)計(jì)時(shí)器;以及(V)如果有效,則向CPU生成一SMI。此后,該例程在1244處將程序執(zhí)行控制權(quán)交還給被中斷的代碼。然后,如本說(shuō)明書(shū)其它地方所說(shuō)明的那樣,每當(dāng)APM“獲得事件”,管理例程都查詢(xún)上述例程所設(shè)置的位。
計(jì)時(shí)器例程是一始于1248處的中斷驅(qū)動(dòng)例程,它響應(yīng)內(nèi)部計(jì)時(shí)器中斷而執(zhí)行,內(nèi)部計(jì)時(shí)器中斷以一個(gè)16位自由運(yùn)行的計(jì)數(shù)器為基礎(chǔ),該計(jì)數(shù)器配置成每25毫秒產(chǎn)生一次上述內(nèi)部計(jì)時(shí)器中斷以便為微控制器U2提供時(shí)基。計(jì)時(shí)器例程提供下列時(shí)基25毫秒、半秒、秒和分鐘。簡(jiǎn)要地說(shuō),計(jì)時(shí)器例程在1252處接收中斷、確定何時(shí)出現(xiàn)不同的時(shí)間、執(zhí)行適當(dāng)?shù)幕顒?dòng)并在1256處將程序執(zhí)行控制權(quán)交還給被中斷的代碼。
如果電源未提供穩(wěn)壓的電力并且微控制器配置成響應(yīng)振鈴,則計(jì)時(shí)器例程每一瞬間(25毫秒)檢查EXT_RING線(xiàn)的RS-232振鈴,并且,如果有振鈴,就設(shè)置一個(gè)位。
如果處于關(guān)機(jī)狀態(tài)或掛起狀態(tài),計(jì)時(shí)器例程每半秒鐘就會(huì)如本說(shuō)明書(shū)其它地方所說(shuō)明的那樣確定是否應(yīng)觸發(fā)LED23以便進(jìn)行外部振鈴喚醒指示閃亮。
如果處于待機(jī)狀態(tài),計(jì)時(shí)器例程就會(huì)如本說(shuō)明書(shū)其它地方所說(shuō)明的那樣每一秒鐘確定是否應(yīng)觸發(fā)LED23以便進(jìn)行掛起指示閃亮。
而且,如果合適的話(huà),計(jì)時(shí)器例程每一秒鐘都會(huì)減小故障保險(xiǎn)計(jì)時(shí)器、減小APM故障掛起計(jì)時(shí)器以及減小電源故障計(jì)時(shí)器,同時(shí)如果有任何一個(gè)計(jì)時(shí)器到時(shí),計(jì)時(shí)器例程還設(shè)置一對(duì)應(yīng)的位。故障保險(xiǎn)計(jì)時(shí)器是一個(gè)20秒的計(jì)時(shí)器,它在到時(shí)時(shí)可使得微控制器切斷計(jì)算機(jī)系統(tǒng)的電源。管理例程響應(yīng)APM的獲得事件頻繁地重新啟動(dòng)復(fù)位故障保險(xiǎn)計(jì)時(shí)器,所以,只要CPU中運(yùn)行的代碼在正確地執(zhí)行,故障保險(xiǎn)計(jì)時(shí)器就不會(huì)到時(shí)。但是,如果上述代碼真正地停止執(zhí)行,故障保險(xiǎn)計(jì)時(shí)器就會(huì)到時(shí),并且,在假定BIOS和其它例程發(fā)生故障的情況下,微控制器U2會(huì)響應(yīng)按下及釋放電源按鈕21使電源17停止在±5和±12線(xiàn)處提供穩(wěn)壓的電力。
APM故障掛起計(jì)時(shí)器是一個(gè)18秒的計(jì)時(shí)器,在故障保險(xiǎn)計(jì)時(shí)器到時(shí)以使微控制器關(guān)閉計(jì)算機(jī)系統(tǒng)之前,當(dāng)開(kāi)關(guān)21處于關(guān)閉/釋放狀態(tài)(表示用戶(hù)試圖關(guān)閉計(jì)算機(jī)系統(tǒng))時(shí),APM故障掛起計(jì)時(shí)器是有效的,并且,APM故障掛起計(jì)時(shí)器在到時(shí)時(shí)使計(jì)算機(jī)系統(tǒng)設(shè)法掛起。同故障保險(xiǎn)計(jì)時(shí)器一樣,CPU40中執(zhí)行的代碼例如APM Get Events、APM Working On Last Request以及APMReject Last Request等會(huì)頻繁地重新啟動(dòng)(復(fù)位)APM故障掛起計(jì)時(shí)器,所以,只要CPU40中執(zhí)行的代碼在正確地執(zhí)行,APM故障掛起計(jì)時(shí)器就不會(huì)到時(shí)。但是,如果所說(shuō)的代碼真正停止執(zhí)行,APM故障掛起計(jì)時(shí)器就會(huì)到時(shí)。
當(dāng)APM故障掛起計(jì)時(shí)器到時(shí)時(shí),微控制器U2會(huì)設(shè)置一個(gè)位。在每次計(jì)時(shí)器0級(jí)中斷期間檢查該位,正如本技術(shù)的專(zhuān)家所周知的那樣,這種情況約每55毫秒出現(xiàn)一次。此外,計(jì)時(shí)器0級(jí)中斷服務(wù)例程重新啟動(dòng)故障計(jì)時(shí)器。如果計(jì)時(shí)器0級(jí)中斷服務(wù)例程檢測(cè)到APM故障掛起計(jì)時(shí)器業(yè)已到時(shí),它就會(huì)轉(zhuǎn)至掛起例程以試圖掛起計(jì)算機(jī)系統(tǒng),如與圖10有關(guān)的文字所述。
由計(jì)時(shí)器0級(jí)中斷服務(wù)例程所引起的中斷并不是進(jìn)行中斷的最佳方法。APM可察覺(jué)多種應(yīng)用程序和適配器,并且,這些應(yīng)用程序和適配器可響應(yīng)被掛起的計(jì)算機(jī)系統(tǒng)而執(zhí)行多種任務(wù)。計(jì)時(shí)器0級(jí)中斷服務(wù)例程所引起的中斷不能使用APM去向這些APM可察覺(jué)的實(shí)體表明即將進(jìn)行掛起。因此,在這些實(shí)體沒(méi)有正確地準(zhǔn)備好的情況下掛起計(jì)算機(jī)系統(tǒng)。這樣,計(jì)時(shí)器0級(jí)中斷服務(wù)例程所引起的中斷將會(huì)把系統(tǒng)保存起來(lái),所以,內(nèi)存中的數(shù)據(jù)不會(huì)丟失,但是,在保存了所需數(shù)據(jù)之后,用戶(hù)要重新引導(dǎo)機(jī)器以便將計(jì)算機(jī)系統(tǒng)設(shè)置成適當(dāng)?shù)臓顟B(tài)。
APM故障掛起計(jì)時(shí)器特別有助于修補(bǔ)OS內(nèi)APM驅(qū)動(dòng)程序中的“漏洞”。例如,當(dāng)顯示Microsoft Windows3.1模態(tài)對(duì)話(huà)框時(shí),Windows APM驅(qū)動(dòng)程序停止發(fā)送APMget events。因此,如果在用戶(hù)按下電源按鈕21以試圖掛起系統(tǒng)時(shí)有模態(tài)對(duì)話(huà)框顯示,那么,計(jì)算機(jī)系統(tǒng)將不會(huì)掛起。微控制器U2會(huì)注意到電源開(kāi)關(guān)處于關(guān)閉/釋放狀態(tài),但因?yàn)樗械腁PM get event均已停止,所以不會(huì)去調(diào)用管理例程。按下開(kāi)關(guān)直到用戶(hù)清除掉模態(tài)對(duì)話(huà)框才會(huì)起作用。但是,一旦APM故障掛起計(jì)時(shí)器到時(shí)并且計(jì)時(shí)器0級(jí)中斷服務(wù)例程檢測(cè)到這種到時(shí),有可能在不向APM可察覺(jué)實(shí)體表明計(jì)算機(jī)系統(tǒng)正在被掛起的范圍內(nèi)將系統(tǒng)的狀態(tài)保存起來(lái)。
每一分鐘,計(jì)時(shí)器例程都會(huì)減少喚醒警鈴計(jì)時(shí)器和活動(dòng)計(jì)時(shí)器的分鐘數(shù)。當(dāng)喚計(jì)時(shí)器的分鐘數(shù)到時(shí)時(shí),如果有效的話(huà),微控制器就會(huì)使電源17開(kāi)始在±5和±12線(xiàn)處提供穩(wěn)壓的電力。
初始化微控制器U2之后,會(huì)在1168處測(cè)試電源以確定是否斷電。如果是通電的、微控制器17會(huì)在1172處檢驗(yàn)電源是否有故障。電源17有若干種內(nèi)部保護(hù)措施,這些措施會(huì)使電源關(guān)閉或“出現(xiàn)故障”。微控制器U2按下列方式確定電源17是否出現(xiàn)故障如果微控制器正在運(yùn)行(表示AUX5已加電,即正將交流電提供給電源17),并且微控制器U2保持著ON信號(hào)以試圖使電源17在±5和±12線(xiàn)處提供穩(wěn)壓的電力,同時(shí)不確立POWERGOOD線(xiàn)(表示電源17不在±5和±12線(xiàn)處提供穩(wěn)壓的電力),那么,就是電源17出現(xiàn)了故障并且必須復(fù)位該電源。
在任務(wù)1172處,實(shí)際測(cè)試電源17兩次。微控制器U2確立ON信號(hào),然后如內(nèi)部時(shí)基所測(cè)定的那樣等待三秒鐘。如果在ON信號(hào)確立了三秒鐘之后未確立POWERGOOD信號(hào),那么,微控制器U2就會(huì)清除ON信號(hào)并等待另外的五秒鐘。然后,微控制器U2再度確立ON信號(hào)并等待另外的三秒鐘。如果在ON信號(hào)確立了三秒鐘之后仍未確立POWERGOOD信號(hào),則微控制器U2會(huì)清除ON信號(hào)并認(rèn)定電源17出現(xiàn)了故障。
如果電源出現(xiàn)了故障,微控制器U2會(huì)轉(zhuǎn)至斷電例程,如1174處所示。另一方面,如果電源17未出現(xiàn)故障而是關(guān)閉了,則微控制器會(huì)在1175處使該電源開(kāi)始在±5和±12線(xiàn)上提供穩(wěn)壓的電力并且在1176處初始化I/O端口、開(kāi)啟LED23并使外部中斷生效。
圖7顯示了機(jī)器在微控制器U2內(nèi)所維護(hù)的開(kāi)關(guān)狀態(tài)。如該圖所示,所說(shuō)的狀態(tài)響應(yīng)開(kāi)關(guān)21的接通事件或其它事件如復(fù)位計(jì)算機(jī)系統(tǒng)10以及CPU40的寫(xiě)操作等而改變。在電源17未提供AUX5的情況下,微控制器U2不被加電,所以174處的開(kāi)關(guān)狀態(tài)是無(wú)意義的。按下開(kāi)關(guān)21,來(lái)自其它方向的電話(huà)振鈴、警鈴計(jì)時(shí)器時(shí)間數(shù)的到時(shí)以及來(lái)自CPU40的命令都會(huì)導(dǎo)致微控制器使電源17開(kāi)始向計(jì)算機(jī)系統(tǒng)提供電力,如伴隨圖6的文字所述。
如圖7所示,開(kāi)關(guān)21具有四種由微控制器U2監(jiān)控的狀態(tài)(i)接通/按下?tīng)顟B(tài)176(在這種狀態(tài)下,用戶(hù)按著按鈕并試圖開(kāi)機(jī));(ii)接通/釋放狀態(tài)178(在這種狀態(tài)下,用戶(hù)已釋放了按鈕并試圖開(kāi)機(jī)),(iii)斷開(kāi)/按下?tīng)顟B(tài)180(在這種狀態(tài)下,用戶(hù)按著按鈕并試圖關(guān)機(jī));以及(iV)斷開(kāi)/釋放狀態(tài)182(在這種狀態(tài)下,用戶(hù)業(yè)已釋放了按鈕并試圖關(guān)機(jī))。然后,在1180處微控制器U2測(cè)試開(kāi)關(guān)是否處于斷開(kāi)/釋放狀態(tài),從而表明用戶(hù)業(yè)已釋放了按鈕并試圖關(guān)機(jī)。
在處于狀態(tài)174并按下開(kāi)關(guān)21時(shí),微控制器U2進(jìn)入接通/按下開(kāi)關(guān)狀態(tài)176。釋放開(kāi)關(guān)21會(huì)使微控制器U2進(jìn)入接通/釋放開(kāi)關(guān)狀態(tài)178。與此相似,當(dāng)復(fù)位微控制器U2時(shí),微控制器U2會(huì)進(jìn)入接通/釋放狀態(tài)178。再次按下開(kāi)關(guān)21會(huì)使微控制器U2進(jìn)入斷開(kāi)/按下開(kāi)關(guān)狀態(tài)180。再次釋放開(kāi)關(guān)21會(huì)使微控制器U2進(jìn)入斷開(kāi)/釋放開(kāi)關(guān)狀態(tài)182。隨后接通開(kāi)關(guān)21會(huì)使微控制器U2按上述四種狀態(tài)循環(huán),如圖7所示。當(dāng)計(jì)算機(jī)系統(tǒng)10處于正常操作狀態(tài)150時(shí),微控制器U2處于接通/釋放開(kāi)關(guān)狀態(tài)178。處于這種狀態(tài)時(shí)會(huì)執(zhí)行應(yīng)用程序。在這種狀態(tài)下,計(jì)算機(jī)系統(tǒng)10可能會(huì)進(jìn)入和離開(kāi)待機(jī)狀態(tài)152。這種狀態(tài)還對(duì)應(yīng)于用戶(hù)提出的掛起中止請(qǐng)求。斷開(kāi)/釋放開(kāi)關(guān)狀態(tài)是對(duì)應(yīng)于用戶(hù)提出的掛起請(qǐng)求的開(kāi)關(guān)狀態(tài)。也就是說(shuō),從系統(tǒng)處于關(guān)閉狀態(tài)156開(kāi)始,按下并釋放開(kāi)關(guān)21一次會(huì)使計(jì)算機(jī)系統(tǒng)處于正常操作狀態(tài)150。再次按下并釋放開(kāi)關(guān)21可產(chǎn)生掛起請(qǐng)求,該請(qǐng)求由管理例程所讀取,這將在圖9的文字中予以詳細(xì)地說(shuō)明。在計(jì)算機(jī)系統(tǒng)10處于掛起狀態(tài)154之前,第三次按下并釋放開(kāi)關(guān)21會(huì)產(chǎn)生掛起中止請(qǐng)求,該請(qǐng)求由掛起例程所讀取。
參照?qǐng)D19,如果用戶(hù)業(yè)已釋放了按鈕并試圖關(guān)機(jī),那么,微控制器U2就會(huì)轉(zhuǎn)至斷電例程,如1184所示。
另一方面,如果按鈕處于斷開(kāi)/按下?tīng)顟B(tài),這表示用于正按著按鈕并試圖關(guān)機(jī),那么,微控制器就會(huì)在1192處測(cè)試開(kāi)關(guān)是否被BIOS所屏蔽。BIOS在進(jìn)入待機(jī)狀態(tài)的入口處屏蔽開(kāi)關(guān)21以防止按下開(kāi)關(guān)使計(jì)算機(jī)系統(tǒng)從待機(jī)狀態(tài)轉(zhuǎn)換成掛起狀態(tài),從而如本文其它地方所述的那樣防止用戶(hù)搞混。
如果BIOS業(yè)已屏蔽了開(kāi)關(guān)21,那么,微控制器的代碼就會(huì)轉(zhuǎn)回任務(wù)1176并清除屏蔽位以便允許下一次按下開(kāi)關(guān)使得計(jì)算機(jī)系統(tǒng)進(jìn)入關(guān)機(jī)狀態(tài)或掛起狀態(tài)。另一方面,如果未屏蔽開(kāi)關(guān)21或者如果開(kāi)關(guān)21不處于斷開(kāi)/按下?tīng)顟B(tài),微控制器就會(huì)在1196處執(zhí)行心搏例程(heartbeat routine)。
心搏例程用于向CPU40表明微控制器U2正在正確地發(fā)揮著作用。微處理器的CMD_STATE#線(xiàn)的輸出(管腳17,P1.4)通常為邏輯1。每50-60微秒微控制器U2就會(huì)將該線(xiàn)置為邏輯0約達(dá)1.5微秒,然后使之回到邏輯1。由于CPU40所讀取的電源管理狀態(tài)端口是CMD_STATE#和PRO_RDY線(xiàn)的邏輯“與”,所以CPU40能如此頻繁地例如在系統(tǒng)引導(dǎo)時(shí)監(jiān)控這種從HIGH到LOW及返回到HIGH的轉(zhuǎn)換,從而確保了微控制器U2正確地起作用。
然后,微控制器U2在1200處測(cè)試BIOS是否業(yè)已命令斷電。CPU40可以存取并改變微控制器U2內(nèi)的每一個(gè)變量。如果BIOS例如在掛起期間系統(tǒng)的狀態(tài)被寫(xiě)入硬盤(pán)驅(qū)動(dòng)器31之后業(yè)已設(shè)置了表示應(yīng)使計(jì)算機(jī)系統(tǒng)斷電的變量,那么,微控制器U2就會(huì)轉(zhuǎn)至斷電例程,如1204所示。
另一方面,如果BIOS未命令斷電,那么,微控制器就會(huì)在1208處執(zhí)行故障保險(xiǎn)例程。故障保險(xiǎn)計(jì)時(shí)器是一個(gè)20秒的計(jì)時(shí)器,當(dāng)電源17在±5和±12線(xiàn)處提供穩(wěn)壓的電力時(shí),該計(jì)時(shí)器是有效的。故障保險(xiǎn)例程檢查故障保險(xiǎn)計(jì)時(shí)器是否已到時(shí)并且在該計(jì)時(shí)器業(yè)已到時(shí)時(shí)設(shè)置一個(gè)二進(jìn)制位。如果BIOS命令重新啟動(dòng)故障保險(xiǎn)計(jì)時(shí)器,那么,故障保險(xiǎn)例程還會(huì)重新啟動(dòng)故障保險(xiǎn)計(jì)時(shí)器。
然后,在1212處,作為一種安全措施并且為了使微控制器與電源17同步,微控制器會(huì)檢查POWER_GOOD線(xiàn)以便檢測(cè)電源17是否仍在±5和±12線(xiàn)處提供穩(wěn)壓的電力。
如果電源17未在±5和±12線(xiàn)處提供穩(wěn)壓的電力,那么,微控制器U2就會(huì)轉(zhuǎn)至斷電例程,如1216所示。另一方面,如果電源17正在±5和±12線(xiàn)處提供穩(wěn)壓的電力,那么,微控制器的代碼就會(huì)轉(zhuǎn)回1180并繼續(xù)執(zhí)行。
斷電例程始于任務(wù)1260處。首先,微控制器U2在1264處使活動(dòng)中斷無(wú)效以防止顯示器不變空白。
其次,在1268處,微控制器檢查POWER_GOOD線(xiàn)以檢測(cè)電源17是否仍在±5和±12線(xiàn)處提供穩(wěn)壓的電力。如果電源17正在±5和±12線(xiàn)處提供穩(wěn)壓的電力,那么微控制器U2就在1272處測(cè)試是否應(yīng)該使顯示器不顯示與/或并斷開(kāi)LED23。如果是這樣的話(huà),微控制器U2就使視頻控制器56停止產(chǎn)生視頻信號(hào)和/或斷開(kāi)LED23。
此后,如果LED和顯示器均未不顯示,則微控制器測(cè)試(i)BIOS是否業(yè)已通過(guò)設(shè)置一個(gè)二進(jìn)制位命令計(jì)算機(jī)系統(tǒng)應(yīng)回到開(kāi)機(jī),或者(ii)用戶(hù)是否業(yè)已通過(guò)再次按下電源按鈕21命令計(jì)算機(jī)系統(tǒng)應(yīng)回到開(kāi)機(jī)。如果產(chǎn)生上述情況中的任何一種,那么,計(jì)算機(jī)系統(tǒng)都將回到加電并且微控制器U2會(huì)轉(zhuǎn)至通電例程。如1284所示。
然后,微控制器確定在來(lái)自光隔離器OPTO1的EXT_WAKUP#線(xiàn)上是否有振鈴出現(xiàn)。就RS-232線(xiàn)來(lái)說(shuō),這僅僅是檢查EXT_RTNG線(xiàn)是否為HIGH。對(duì)來(lái)自光隔離器OPTOl的信號(hào)來(lái)說(shuō),這包括微控制器U2所作的更多的檢查工作。電阻R5通常將EXT_WAKEUP#線(xiàn)置為HIGH。如果Tip和Ring兩端的電壓高于由閾值和保護(hù)部分905所設(shè)置的電壓閾值例如在電話(huà)振鈴時(shí)的60V,光隔離器OPTO1就會(huì)將EXT_WAKEUP#線(xiàn)置為L(zhǎng)OW。但是,測(cè)試電話(huà)線(xiàn)或電話(huà)線(xiàn)上的噪音都能滿(mǎn)足上述條件。所以?xún)H等待EXT_WAKEUP#線(xiàn)為低可能使得虛假的“振鈴”喚醒計(jì)算機(jī)系統(tǒng)。
因此,微控制器通過(guò)測(cè)定振鈴的頻率來(lái)確定信號(hào)是否是振鈴。標(biāo)準(zhǔn)的振鈴是一在16Hz到58Hz之間的信號(hào)。微控制器U2在EXT_WAKEUP#信號(hào)的四個(gè)上升邊緣之間測(cè)定三個(gè)時(shí)間周期,如果這三個(gè)都對(duì)應(yīng)于15.1Hz和69.1Hz之間的頻率,則微控制器認(rèn)定在EXT_WAKEUP#線(xiàn)上出現(xiàn)了適當(dāng)?shù)恼疋彶⑶以O(shè)置一對(duì)應(yīng)的二進(jìn)制位。
EXT_WAKEUP#線(xiàn)上所檢測(cè)到的LOW信號(hào)會(huì)啟動(dòng)檢查例程。如果對(duì)三次接連的讀取來(lái)說(shuō)EXT_WAKEUP#線(xiàn)都為L(zhǎng)OW,那么,微控制器U2就會(huì)等待EXT_WAKEUP#線(xiàn)在三次接續(xù)讀取的時(shí)間內(nèi)返回到HIGH。緊接著讀取構(gòu)成計(jì)時(shí)器中斷基礎(chǔ)的16位計(jì)數(shù)器并將其值存儲(chǔ)起來(lái),而且,微控制器U2在三次接連讀取的時(shí)間內(nèi)等待EXT_WAKEUP#線(xiàn)轉(zhuǎn)換到LOW。微控制器然后測(cè)試頭兩個(gè)上升邊緣之間的時(shí)間是否在15毫秒與66毫秒之間,這表示信號(hào)在15.1Hz和69.1Hz之間。如果是這樣的話(huà),再次對(duì)上述具有高分辨率的計(jì)數(shù)器進(jìn)行取樣,微控制器在等待下一次LOW至HIGH轉(zhuǎn)換時(shí)計(jì)算兩次計(jì)數(shù)器取樣之間的差值。對(duì)EXT_WAKEUP#線(xiàn)上下兩次的LOW至HIGH轉(zhuǎn)換重復(fù)上述過(guò)程。如果這三個(gè)時(shí)間周期全都在所說(shuō)的范圍內(nèi),那么微控制器U2就認(rèn)定在EXT_WAKEUP#線(xiàn)上出現(xiàn)了適當(dāng)?shù)恼疋彶⒃O(shè)置一對(duì)應(yīng)的二進(jìn)制位。如果在EXT_WAKEUP#線(xiàn)上不存在LOW或者上述三個(gè)時(shí)間周期中的任何一個(gè)超出了所說(shuō)的范圍,微控制器的代碼會(huì)繼續(xù)但不設(shè)置所說(shuō)的二進(jìn)制位。
然后,微控制器在1286處測(cè)試是否存在有振鈴或者喚醒警鈴的分鐘數(shù)業(yè)已到時(shí)。對(duì)RS-232振鈴、光隔離器振鈴或喚醒警鈴的分鐘數(shù)來(lái)說(shuō),還包括微控制器U2測(cè)試是否設(shè)置了相關(guān)的二進(jìn)制位。
如果存在振鈴或喚醒警鈴的分鐘數(shù)到時(shí),那么,計(jì)算機(jī)系統(tǒng)就會(huì)回到被加電,微控制器U2會(huì)轉(zhuǎn)至加電例程,如1287所示。
此后,在1288處,微控制器測(cè)試電源17是否在±5和±12線(xiàn)處提供穩(wěn)壓的電力。如果未供電,則代碼轉(zhuǎn)回至任務(wù)1280并再次開(kāi)始循環(huán)。另一方面,如果電源17在±5和±12線(xiàn)處提供穩(wěn)壓的電力,那么,微控制器U2在1292處執(zhí)行心搏例程并在1296處執(zhí)行故障保險(xiǎn)例程。這兩個(gè)例程已在任務(wù)1196和1208的文字中作了說(shuō)明。
微控制器U2只在下列三種情況下才使得電源17停止在±5和±12線(xiàn)處提供穩(wěn)壓的電力(i)BIOS業(yè)已命令立刻斷電,這是在通信例程中實(shí)現(xiàn)的;(ii)故障保險(xiǎn)計(jì)時(shí)器業(yè)已到時(shí);或者(iii)用戶(hù)按下電源按鈕并且未設(shè)置微控制器U2的允許掛起標(biāo)志,這是微控制器U2在每次讀取SWITCH輸入時(shí)所檢測(cè)的條件。所以,微控制器在1300處檢測(cè)故障保險(xiǎn)計(jì)時(shí)器是否業(yè)已到時(shí)。如果沒(méi)有到時(shí),代碼就轉(zhuǎn)回任務(wù)1280并再次開(kāi)始循環(huán)。
另一方面,如果故障保險(xiǎn)業(yè)已到時(shí),這表示計(jì)算機(jī)系統(tǒng)將要減少功耗,那么,如果有效的話(huà),微控制器U2就會(huì)在1304處向CPU40生成一SMI。這就能使CPU在假定計(jì)算機(jī)系統(tǒng)將要在此后立刻斷電的情況執(zhí)行某些任務(wù)。例如CPU40重新計(jì)算喚醒警鈴值的更新的分鐘數(shù)并將該分鐘數(shù)寫(xiě)至微控制器U2。
如果CPU40不執(zhí)行其它活動(dòng),則在可編程SMI計(jì)時(shí)器到時(shí)之后,微控制器會(huì)使計(jì)算機(jī)系統(tǒng)斷電。CPU40可以通過(guò)將適當(dāng)?shù)闹祵?xiě)至微控制器U2重新啟動(dòng)SMI計(jì)時(shí)器,從而能延長(zhǎng)該時(shí)間間隔。
此后,如果1268處的測(cè)試表明電源未提供合格的電力,則微控制器U2在1308處使計(jì)算機(jī)系統(tǒng)斷電。這包括(i)使電源17停止在±5和±12線(xiàn)處提供穩(wěn)壓的電力;(ii)使通信中斷無(wú)效,這是因?yàn)镃PU40即將掉電;(iii)將輸出端口(除ON端口)置為HIGH以使它們的功耗減至最低(在這種狀態(tài)下,微控制器U2仍可讀取SWITCH,EXT_RING、EXT_WAKEUP等);(iV)設(shè)置斷電變量以使得其余的例程知道已切斷了通向計(jì)算機(jī)系統(tǒng)的電力;以及(V)將開(kāi)關(guān)的狀態(tài)轉(zhuǎn)換成斷開(kāi)/釋放狀態(tài),從而下一次按下按鍵將接通計(jì)算機(jī)系統(tǒng)。
此后,代碼轉(zhuǎn)回至1280并開(kāi)始再次循環(huán),以等待振鈴、等待按下開(kāi)關(guān)、等待BIOS命令該代碼喚醒計(jì)算機(jī)系統(tǒng)或等待喚醒警鈴的分鐘數(shù)到時(shí)。系統(tǒng)軟件業(yè)已說(shuō)明了本發(fā)明之計(jì)算機(jī)系統(tǒng)10的硬件方面,以下說(shuō)明其代碼方面。
參照?qǐng)D8,它顯示了增加功耗例程的概況。當(dāng)CPU轉(zhuǎn)至復(fù)位矢量(Reset Vector)所指示的這一代碼并執(zhí)行該代碼時(shí),上述例程就在200處開(kāi)始執(zhí)行。每當(dāng)CPU加電并且每當(dāng)復(fù)位硬件信號(hào)復(fù)位了CPU或當(dāng)通過(guò)轉(zhuǎn)至上述復(fù)位矢量所指示的代碼而執(zhí)行復(fù)位指令時(shí),上述情況就會(huì)出現(xiàn)。這種復(fù)位過(guò)程在本技術(shù)中是周知的。
首先,增加功耗例程的流程取決于為什么要使計(jì)算機(jī)系統(tǒng)增加功耗。正如圖11所要詳細(xì)說(shuō)明的那樣,計(jì)算機(jī)系統(tǒng)可能因節(jié)電或熄滅而要增加功耗。這樣,使計(jì)算機(jī)系統(tǒng)保存在通電狀態(tài)是不適合的。所以,增加功耗例程首先在940處確定計(jì)算機(jī)系統(tǒng)是否應(yīng)處于通電狀態(tài)。如果計(jì)算機(jī)系統(tǒng)不恰當(dāng)?shù)卦黾庸?,那么,CPU40就在942處命令微控制器U2使電源停止向計(jì)算機(jī)系統(tǒng)提供穩(wěn)壓的電力。
在確定計(jì)算機(jī)系統(tǒng)是否仍處于加電狀態(tài)所進(jìn)行的一種測(cè)試是在計(jì)算機(jī)系統(tǒng)響應(yīng)微控制器認(rèn)為是振鈴而使系統(tǒng)加電的情況下確認(rèn)電話(huà)線(xiàn)正在振鈴。具體地說(shuō),在使計(jì)算機(jī)系統(tǒng)增加功耗之后,如果響應(yīng)振鈴而喚醒計(jì)算機(jī)系統(tǒng),則在計(jì)算機(jī)系統(tǒng)等待硬盤(pán)驅(qū)動(dòng)器31內(nèi)的硬盤(pán)起轉(zhuǎn)時(shí),CPU40會(huì)查詢(xún)已完全加電的調(diào)制解調(diào)器900或920是否也檢查到了振鈴信號(hào)。如果未檢測(cè)到振鈴信號(hào),系統(tǒng)就會(huì)減少功耗。如果調(diào)制解調(diào)器900或902也檢測(cè)到了振鈴信號(hào),則計(jì)算機(jī)系統(tǒng)使引導(dǎo)過(guò)程延續(xù)。
假定計(jì)算機(jī)系統(tǒng)處于加電狀態(tài),則從總體上說(shuō)加電例程的流程取決于計(jì)算機(jī)系統(tǒng)是處于關(guān)機(jī)狀態(tài)156還是處于掛起狀態(tài)154。即在CMOS NVRAM96內(nèi)清除還是設(shè)置了掛起狀態(tài)。如202處所示,計(jì)算機(jī)系統(tǒng)通過(guò)非易失性CMOS存儲(chǔ)器96讀取掛起標(biāo)志來(lái)確定是處于關(guān)機(jī)狀態(tài)156還是處于掛起狀態(tài)154。當(dāng)計(jì)算機(jī)系統(tǒng)離開(kāi)正常操作狀態(tài)150到達(dá)關(guān)機(jī)狀態(tài)156或掛起狀態(tài)154時(shí),每個(gè)例程都或者設(shè)置或者清除NVRAM96中的掛起標(biāo)志。如果在NVRAM96中設(shè)置了掛起標(biāo)志,則計(jì)算機(jī)系統(tǒng)10是處于掛起狀態(tài)154,并且將計(jì)算機(jī)系統(tǒng)10的狀態(tài)存儲(chǔ)到固定存儲(chǔ)器31內(nèi)。另一方面,如果在NVRAM96內(nèi)清除了掛起標(biāo)志,則計(jì)算機(jī)系統(tǒng)10是處于關(guān)機(jī)狀態(tài)156,并且不將計(jì)算機(jī)系統(tǒng)10的狀態(tài)存儲(chǔ)到固定盤(pán)存儲(chǔ)器31內(nèi)。這樣,如果在NVRAM96內(nèi)設(shè)置了掛起狀態(tài),則計(jì)算機(jī)系統(tǒng)就會(huì)執(zhí)行“正常”的引導(dǎo)例程,如任務(wù)204-210所示。如204處所示,第一項(xiàng)任務(wù)是通電自檢(POST),這將在伴隨圖11中的文字中給予詳細(xì)的說(shuō)明,從POST返回之后,CPU40調(diào)用PBOOT例程以加載操作系統(tǒng),如206處所示。
PBOOT例程是一種在IBM計(jì)算機(jī)上運(yùn)行的典型例程,但略有變化,這將下文中予以說(shuō)明,PBOOT確定從哪里(是從硬盤(pán)驅(qū)動(dòng)器31還是從軟盤(pán)驅(qū)動(dòng)器內(nèi)的磁盤(pán)上)引導(dǎo)并加載操作系統(tǒng),而操作系統(tǒng)則按CONFIG.SYS的指令去分析和實(shí)現(xiàn)系統(tǒng)的變化并最終執(zhí)行AUTOEXEC.BAT批處理文件。PBOOT例程在本技術(shù)中是周知的。OS加載APM設(shè)備驅(qū)動(dòng)程序,該驅(qū)動(dòng)程序向BIOS查詢(xún)APM是否認(rèn)識(shí)該BIOS。如果是這樣的話(huà),BIOS APM例程和OS APM例程進(jìn)行信號(hào)交換,此后共同提供本文所述的各種功能。如210處所示,操作系統(tǒng)根據(jù)用戶(hù)的指示不定地執(zhí)行代碼。但是,向APM報(bào)告管理例程的結(jié)果是APM BIOS和APM OS使得管理例程與正在運(yùn)行的程序“并行”地執(zhí)行,如212處所示。也就是說(shuō),計(jì)算機(jī)系統(tǒng)10是時(shí)間多路復(fù)用式的多任務(wù)系統(tǒng),并且可周期性地運(yùn)行APM Get Event,從而能周期性地運(yùn)行管理例程。最終的結(jié)果是,約每秒鐘執(zhí)行管理例程一次。圖9中的文字將詳細(xì)說(shuō)明管理例程。正常的引導(dǎo)例程204-210結(jié)果之后,計(jì)算機(jī)系統(tǒng)10處于正常操作狀態(tài)150,如伴隨圖4的文字所述。
參照任務(wù)202,如果在NVRAM96內(nèi)設(shè)置了掛起標(biāo)志,則將系統(tǒng)狀態(tài)保存至硬盤(pán)驅(qū)動(dòng)器31,并且計(jì)算機(jī)系統(tǒng)10執(zhí)行繼續(xù)引導(dǎo)例程,如214-220所示。首先,計(jì)算機(jī)系統(tǒng)執(zhí)行簡(jiǎn)化的POST,如214處所示。伴隨圖11的文字將詳細(xì)說(shuō)明簡(jiǎn)化的POST。在簡(jiǎn)化的POST之后,計(jì)算機(jī)系統(tǒng)調(diào)用繼續(xù)例程,如216處所示。伴隨圖12的文字將詳細(xì)說(shuō)明繼續(xù)例程。這里只說(shuō)明繼續(xù)例程將計(jì)算機(jī)機(jī)系統(tǒng)10的狀態(tài)恢復(fù)成掛起之前的配置就夠了。與任務(wù)204-210所示的正常引導(dǎo)例程不同,繼續(xù)引導(dǎo)例程不必向APM API報(bào)告存在有管理例程,這是因?yàn)?,APM例程必須運(yùn)行才能使系統(tǒng)掛起,并且,在恢復(fù)系統(tǒng)狀態(tài)時(shí),APM被裝回內(nèi)存。這樣,在繼續(xù)例程完成恢復(fù)計(jì)算機(jī)系統(tǒng)10的狀態(tài)時(shí),APM已處于適當(dāng)?shù)奈恢貌⒁耘c所恢復(fù)的代碼相“并行”地運(yùn)行,如212和210處所示。繼續(xù)引導(dǎo)例程214-220結(jié)束之后,計(jì)算機(jī)系統(tǒng)10處于正常的操作狀態(tài)150,如伴隨圖4的文字所示。因此,執(zhí)行了正常的引導(dǎo)例程204-210或繼續(xù)引導(dǎo)例程214-220之后,計(jì)算機(jī)系統(tǒng)10會(huì)處于正常的操作狀態(tài)150。
圖9是顯示管理例程詳細(xì)內(nèi)容的流程圖,該管理例程在“GetEvent”過(guò)程中約每秒鐘都由APM所調(diào)用。不同的操作系統(tǒng)以不同的頻率Get Event。
管理例程始于圖9中的222處。以下內(nèi)容假定計(jì)算機(jī)系統(tǒng)10始于正常的操作狀態(tài)150。第一項(xiàng)任務(wù)是在224處測(cè)試用戶(hù)是否按下了開(kāi)關(guān)21。正如與圖6A和圖7有關(guān)的內(nèi)容所詳細(xì)說(shuō)明的那樣,通過(guò)CPU40查詢(xún)微控制器而測(cè)試開(kāi)關(guān)21。
如果任務(wù)224處的測(cè)試表明用戶(hù)按下了開(kāi)關(guān)21,則管理例程在950處繼續(xù)確定是否先前向OS中的APM設(shè)備驅(qū)動(dòng)程序發(fā)出了掛起請(qǐng)求。
如果任務(wù)950處的測(cè)試表明還未將掛起請(qǐng)求發(fā)送給APM驅(qū)動(dòng)程序,則管理例程在226處向OS的APM設(shè)備驅(qū)動(dòng)程序發(fā)出“掛起請(qǐng)求”,然后在228處返回至APM驅(qū)動(dòng)程序。APM驅(qū)動(dòng)程序響應(yīng)連接“掛起請(qǐng)求”的APM返回代碼而廣播即將進(jìn)行的掛起,從而APM可識(shí)別的設(shè)備可以執(zhí)行任何必要的系統(tǒng)任務(wù)(如使硬盤(pán)同步等),然后,APM驅(qū)動(dòng)程序發(fā)出“掛起命令”,該命令使得APM BIOS路徑選擇例程調(diào)用掛起例程。與圖10有關(guān)的內(nèi)容將說(shuō)明掛起例程。掛起例程基本上使計(jì)算機(jī)系統(tǒng)10離開(kāi)正常操作狀態(tài)150并進(jìn)入掛起狀態(tài)154,而且可將控制權(quán)在若干條指令(如果計(jì)算機(jī)系統(tǒng)尚未準(zhǔn)備好掛起)或若干分鐘、若干小時(shí)、右干天、若干周或若干年(如果計(jì)算機(jī)被掛起并且被繼續(xù))之后交還給管理例程。無(wú)論是掛起程序在沒(méi)有掛起的情況下返回還是在完成掛起和繼續(xù)之后返回,掛起程序總是會(huì)設(shè)置“正常繼續(xù)”的APM返回代碼。
通常在任務(wù)224處未按下開(kāi)關(guān)21,因而管理例程會(huì)轉(zhuǎn)至任務(wù)952以確定是否設(shè)置了臨界掛起標(biāo)志。同樣,如果先前向OS中的APM驅(qū)動(dòng)程序發(fā)送了掛起請(qǐng)求,則管理例程這時(shí)也會(huì)轉(zhuǎn)至任務(wù)952以確定是否設(shè)置了臨界掛起標(biāo)志。如果設(shè)置了臨界掛起標(biāo)志,則管理例程會(huì)繼續(xù)在954處測(cè)試是否先前向APM驅(qū)動(dòng)程序發(fā)出了臨界掛起請(qǐng)求。
如果未向APM驅(qū)動(dòng)程序發(fā)出臨界掛起請(qǐng)求,則管理例程在956處引發(fā)臨界掛起請(qǐng)求APM返回代碼,然后在958處返回至APM驅(qū)動(dòng)程序。APM驅(qū)動(dòng)程序響應(yīng)臨界掛起請(qǐng)求而在不廣播即將進(jìn)行掛起的情況下立即掛起計(jì)算機(jī)系統(tǒng),所以,APM所認(rèn)識(shí)的設(shè)備不能執(zhí)行各自的預(yù)掛起任務(wù)。
如果在952處未設(shè)置臨界掛起標(biāo)志或者在954處已向OS中的APM驅(qū)動(dòng)程序發(fā)送了臨界掛起請(qǐng)求,則管理例程在957處確定掛起未決是否超過(guò)15秒。如果是這樣的話(huà),管理例程在958處設(shè)置臨界掛起標(biāo)志,從而在下一次APM Get Event過(guò)程中進(jìn)行任務(wù)954處的測(cè)試。
此后或者如果掛起來(lái)決不超過(guò)15秒,管理例程就在959處檢查掛起是否是未決的。如果是這樣的話(huà),CPU40就在960處使微控制器U2重新啟動(dòng)(復(fù)位)故障保險(xiǎn)計(jì)時(shí)器以及APM故障掛起計(jì)時(shí)器。
此后或者如果掛起不是未決的,則管理例程轉(zhuǎn)至任務(wù)230以確定計(jì)算機(jī)系統(tǒng)是否剛被繼續(xù)。如果調(diào)用了掛起例程,那么,不管掛起例程是在沒(méi)有掛起的情況下返回,還是在完成掛起與繼續(xù)之后返回,計(jì)算機(jī)系統(tǒng)認(rèn)為自己剛剛繼續(xù)。在230處測(cè)試這種繼續(xù),并且,如果計(jì)算機(jī)系統(tǒng)剛剛繼續(xù)(或者因DMA或文件活動(dòng)未執(zhí)行掛起),則在232處發(fā)布APM返回代碼“正常繼續(xù)”并在234處返回至APM。據(jù)此,APM OS驅(qū)動(dòng)程序更新系統(tǒng)時(shí)鐘以及在暫停期間可能變?yōu)槭r(shí)效的其它值。
通常,計(jì)算機(jī)系統(tǒng)10不是剛剛繼續(xù)的,因而管理例程轉(zhuǎn)至任務(wù)236以測(cè)試任何用戶(hù)活動(dòng)。在任務(wù)236處測(cè)試三種類(lèi)型的用戶(hù)活動(dòng)硬文件31的活動(dòng)、鍵盤(pán)12的活動(dòng)以及鼠標(biāo)器13的活動(dòng)。每當(dāng)有APM Get Event時(shí),管理程序都作以下工作從硬盤(pán)驅(qū)動(dòng)器31讀取用于硬文件磁頭、柱面和扇區(qū)的值;查詢(xún)微控制器U2是否在鼠標(biāo)器中斷線(xiàn)或鍵盤(pán)中斷線(xiàn)上存在有表示用戶(hù)活動(dòng)的活動(dòng);以及從實(shí)時(shí)時(shí)鐘98中讀取分鐘數(shù)值,該數(shù)值在0分至59分的范圍內(nèi)并在每小時(shí)開(kāi)始時(shí)返回為0分。暫時(shí)將硬盤(pán)驅(qū)動(dòng)器的三個(gè)活動(dòng)變量(磁頭、柱面以及扇區(qū))以及上述分鐘數(shù)值存儲(chǔ)起來(lái)。然后比較這三個(gè)硬盤(pán)驅(qū)動(dòng)器活動(dòng)變量和來(lái)自先前Get Event所保存的硬盤(pán)驅(qū)動(dòng)器活動(dòng)變量。如果當(dāng)前的三個(gè)硬盤(pán)驅(qū)動(dòng)器值與來(lái)自先前Get Event的值相同并且如果在鼠標(biāo)器中斷或鍵盤(pán)中斷方面沒(méi)有活動(dòng),則就是不存在有用戶(hù)的活動(dòng)。如果所述硬盤(pán)驅(qū)動(dòng)器的值是不相同的,或者在鼠標(biāo)器中斷或鍵盤(pán)中斷方面已存在有活動(dòng),那么,就是有了用戶(hù)的活動(dòng),因而將當(dāng)前的硬盤(pán)驅(qū)動(dòng)器活動(dòng)變量保存起來(lái)以便用來(lái)與下次Get Event過(guò)程中所讀取的值作比較。
上述活動(dòng)檢測(cè)方案是在CPU中運(yùn)行一個(gè)例程以確定硬盤(pán)驅(qū)動(dòng)器的活動(dòng),并且只監(jiān)控兩個(gè)硬件中斷的活動(dòng)。另外,也可以按硬件方式專(zhuān)門(mén)監(jiān)控活動(dòng)。例如,可以監(jiān)控所有16條硬件中斷線(xiàn)的活動(dòng)。
如果存在有活動(dòng),則管理例程在238處通過(guò)測(cè)試待機(jī)標(biāo)志來(lái)確定計(jì)算機(jī)系統(tǒng)10是否處于待機(jī)狀態(tài)152。如果設(shè)置了待機(jī)標(biāo)志,這表示計(jì)算機(jī)系統(tǒng)10處于待機(jī)狀態(tài)152,那么,管理例程就在240處退出待機(jī)狀態(tài)152并進(jìn)入正常操作狀態(tài)150。管理例程通過(guò)使在進(jìn)入待機(jī)狀態(tài)152時(shí)減少功耗的設(shè)備增加功耗而退出待機(jī)狀態(tài)152,如圖18所示。簡(jiǎn)要地說(shuō),當(dāng)計(jì)算機(jī)系統(tǒng)退出待機(jī)狀態(tài)152時(shí),管理例程作下列工作恢復(fù)視頻信號(hào);使硬盤(pán)驅(qū)動(dòng)器31內(nèi)的硬盤(pán)起轉(zhuǎn);恢復(fù)系統(tǒng)時(shí)鐘;使APM CPU空調(diào)用無(wú)效,從而使得來(lái)自APM驅(qū)動(dòng)程序的CPU空調(diào)用不再使CPU40停止;以及清除指示計(jì)算機(jī)系統(tǒng)10處于待機(jī)狀態(tài)152的標(biāo)志。
此外,如果存在有活動(dòng),則還將來(lái)自實(shí)時(shí)時(shí)鐘98的分鐘數(shù)值保存起來(lái)以便用來(lái)與后續(xù)的Get Events過(guò)程中所讀取的分鐘數(shù)值作比較。保存當(dāng)前分鐘數(shù)值實(shí)際上是在241處復(fù)位不活動(dòng)性待機(jī)計(jì)時(shí)器和不活動(dòng)性?huà)炱鹩?jì)時(shí)器。在正常使用過(guò)程中,存在有用戶(hù)的活動(dòng),并且,管理例程會(huì)在242處設(shè)置“No Event”(無(wú)事件)APM返回代碼并在243處返回至APM調(diào)用代碼。APM響應(yīng)“NoEvent”返回代碼而不調(diào)用任何例程。
如果任務(wù)236處的測(cè)試表明不存在有用戶(hù)的活動(dòng),則管理例程分別在245和247處測(cè)試不活動(dòng)性待機(jī)計(jì)時(shí)器以及不活動(dòng)性?huà)炱鹩?jì)時(shí)器是否到時(shí)。如果計(jì)算機(jī)系統(tǒng)10處于待機(jī)狀態(tài)152,則不檢查不活動(dòng)待機(jī)計(jì)時(shí)器的到時(shí)情況,相反,,在任務(wù)244處跳過(guò)上述測(cè)試。
通過(guò)從所保存的分鐘數(shù)值中減去當(dāng)前的分鐘數(shù)值以獲得與自從有用戶(hù)活動(dòng)以來(lái)的分鐘數(shù)值相對(duì)應(yīng)的值,從而可以檢查上述兩個(gè)計(jì)時(shí)器的到時(shí)情況。所說(shuō)的值在245處與不活動(dòng)待機(jī)暫停值作比較,并在247處與不活動(dòng)掛起暫停值作比較。上述兩個(gè)暫停值可由用戶(hù)選擇并且能被設(shè)置成使計(jì)算機(jī)系統(tǒng)因兩個(gè)計(jì)時(shí)器中的一個(gè)到時(shí)而不會(huì)進(jìn)入待機(jī)狀態(tài)152,不會(huì)進(jìn)入掛起狀態(tài)154,或者不會(huì)進(jìn)入待機(jī)狀態(tài)152中掛起狀態(tài)154。將上述任一暫停值設(shè)置為零(0)表示相應(yīng)的計(jì)時(shí)器不會(huì)到時(shí)。
如果自從最近的用戶(hù)活動(dòng)以來(lái)的分鐘數(shù)等于或大于不活動(dòng)待機(jī)暫停值,則管理例程會(huì)在246處使計(jì)算機(jī)系統(tǒng)10進(jìn)入待機(jī)狀態(tài)152。如果不活動(dòng)的待機(jī)計(jì)時(shí)器尚未到時(shí),則管理程序在247處測(cè)試不活動(dòng)掛起計(jì)時(shí)器的到時(shí)情況。另一方面,如果不活動(dòng)待機(jī)計(jì)時(shí)器業(yè)已到時(shí),則管理例程通過(guò)使某些組件處于各自的低功率方式而使得計(jì)算機(jī)系統(tǒng)10進(jìn)入待機(jī)狀態(tài)152,如圖18所示。簡(jiǎn)要地說(shuō),在所述的最佳實(shí)施例中,管理例程做下列工作使視頻信號(hào)不顯示;使硬盤(pán)驅(qū)動(dòng)器31中的硬盤(pán)停轉(zhuǎn);減慢系統(tǒng)時(shí)鐘;使APM CPU空調(diào)用有效,因而來(lái)自APM驅(qū)動(dòng)程序的CPU空調(diào)用會(huì)中止CPU40;以及設(shè)置表示計(jì)算機(jī)系統(tǒng)10處于待機(jī)狀態(tài)152的標(biāo)志。在使計(jì)算機(jī)系統(tǒng)10進(jìn)入待機(jī)狀態(tài)152之后,管理例程在247處測(cè)試不活動(dòng)掛起計(jì)時(shí)器的到時(shí)情況。
管理例程在247處測(cè)試不活動(dòng)掛起計(jì)時(shí)器是否業(yè)已到時(shí)。如果自從最近的用戶(hù)活動(dòng)以來(lái)的分鐘數(shù)等于或大于不活動(dòng)掛起的暫停值,則管理例程在248處設(shè)置“掛起請(qǐng)求”APM返回代碼,然后在243處返回至APM。正如以上與任務(wù)226有關(guān)的內(nèi)容所說(shuō)明的那樣,APM響應(yīng)設(shè)置“掛起請(qǐng)求”APM返回代碼而執(zhí)行任何必要的系統(tǒng)任務(wù),然后調(diào)用掛起例程。掛起例程將在與圖10有關(guān)的內(nèi)容中更全面地預(yù)以說(shuō)明,簡(jiǎn)要地說(shuō),掛起例程使計(jì)算機(jī)系統(tǒng)10離開(kāi)正常操作狀態(tài)150并進(jìn)入掛起狀態(tài)154。正如與任務(wù)226有關(guān)的內(nèi)容所說(shuō)明的那樣,掛起例程無(wú)論是否使計(jì)算機(jī)系統(tǒng)10掛起的情況下都能將控制權(quán)交還給管理例程。另一方面,如果不活動(dòng)掛起計(jì)時(shí)器尚未到時(shí),則管理例程在242處設(shè)置APM返回代碼“No Event”并在243處返回APM調(diào)用代碼。
盡管最經(jīng)常的是將APM返回代碼“No Event”返回給APM,但也可以使各種其它事件返回給APM。然而,對(duì)于每個(gè)APM GetEvent來(lái)說(shuō),只能指定一個(gè)APM返回代碼。例如,在進(jìn)入待機(jī)狀態(tài)152之后,將“No Event”返回給APM。在離開(kāi)掛起狀態(tài)154之后,將APM返回代碼“Normal Resume”(正常繼續(xù))返回給APM。為APM而排隊(duì)的特定報(bào)文取決于計(jì)算機(jī)系統(tǒng)的精確特征。管理例程也可以返回APM返回代碼“Normal Resume”或“Suspend Request”。
參照?qǐng)D9B,它顯示了APM處理最近請(qǐng)求例程(APMWorking On Last Request Routine),此例程始于916處。BIOSAPM例程響應(yīng)所發(fā)出的APM處理最近請(qǐng)求(APM Working OnLast Request)而在962處重新啟動(dòng)微控制器U2中的APM故障掛起計(jì)時(shí)器以及故障保險(xiǎn)計(jì)時(shí)器、在963處重新啟動(dòng)15秒的掛起未決計(jì)時(shí)器,以便在OS APM等待計(jì)算機(jī)為掛起作適當(dāng)準(zhǔn)備時(shí)阻止發(fā)出臨界掛起請(qǐng)求并且在964處返回。
參照?qǐng)D9C,它顯示了APM拒絕最近請(qǐng)求例程(APM RejectLast Request Routine),此例程始于965處。BIOS APM響應(yīng)所發(fā)出的APM拒絕最近請(qǐng)求(APM Reject Last Request)而在966處重新啟動(dòng)微控制器U2內(nèi)的APM故障掛起計(jì)時(shí)器以及故障保險(xiǎn)計(jì)時(shí)器、在967處設(shè)置臨界掛起標(biāo)志以便強(qiáng)制立刻掛起并在968處返回。
利用對(duì)掛起例程的認(rèn)識(shí)可以更好地理解增加功耗和繼續(xù)例程。所以,應(yīng)認(rèn)識(shí)到最好按下列次序檢驗(yàn)對(duì)APM BIOS例程的說(shuō)明對(duì)本發(fā)明加電例程的概略說(shuō)明(如以上圖8所述)、對(duì)管理例程的詳細(xì)說(shuō)明(圖9)、對(duì)本發(fā)明掛起例程的詳細(xì)說(shuō)明(圖10)、對(duì)本發(fā)明增加功耗過(guò)程的詳細(xì)說(shuō)明(圖11)、對(duì)本發(fā)明繼續(xù)例程的詳細(xì)說(shuō)明(圖12)、對(duì)保存CPU狀態(tài)例程的詳細(xì)說(shuō)明(圖13)、對(duì)恢復(fù)CPU狀態(tài)例程的詳細(xì)說(shuō)明(圖14)以及對(duì)保存8259狀態(tài)例程的詳細(xì)說(shuō)明(圖15)。
應(yīng)該認(rèn)識(shí)到,雖然因多數(shù)例程是相互作用并且掛起/繼續(xù)過(guò)程就是一種連續(xù)的循環(huán)操作,因而對(duì)本發(fā)明之計(jì)算機(jī)系統(tǒng)10的任何說(shuō)明都略微有些循環(huán),但是,最有幫助的還是在引導(dǎo)例程(圖11)或繼續(xù)例程(圖12)之前說(shuō)明掛起例程(圖10)。參照?qǐng)D10,它顯示了掛起例程的流程圖?;貞浺幌?,在執(zhí)行了正常引導(dǎo)例程204-210或繼續(xù)引導(dǎo)例程214-220之后,計(jì)算機(jī)系統(tǒng)10處于正常操作狀態(tài)150。而且,如以上與圖8有關(guān)的內(nèi)容所說(shuō)明的那樣,無(wú)論是正常引導(dǎo)計(jì)算機(jī)系統(tǒng)204-210還是繼續(xù)引導(dǎo)計(jì)算機(jī)系統(tǒng)214-220,在這兩個(gè)例程中任何一個(gè)例程結(jié)束之后,APM OS驅(qū)動(dòng)程序都會(huì)認(rèn)識(shí)諸如管理例程之類(lèi)的APM BIOS例程,如圖8所示。因此,APM約每一秒鐘都會(huì)輪詢(xún)管理例程。
圖10顯示了掛起例程,該例程始于250處。APM響應(yīng)管理例程向APM返回APM返回代碼“Suspend Request”而調(diào)用掛起例程。此外,當(dāng)計(jì)算機(jī)系統(tǒng)執(zhí)行如與圖17和圖18有關(guān)的內(nèi)容所詳細(xì)說(shuō)明的檢查點(diǎn)(Checkkpoint)時(shí),調(diào)用并部分地執(zhí)行掛起例程。首先,掛起例程的流程在970處取決于CPU40是否是帶有SMI的S部件。如果是這樣話(huà),CPU40在972處使微控制器U2給CPU40生成一SMI。正如本技術(shù)的專(zhuān)家所周知的那樣,CPU40內(nèi)的微碼會(huì)在974處將CPU40的狀態(tài)保存至E000H段的數(shù)據(jù)結(jié)構(gòu)內(nèi)。
另一方面,如果CPU40不是帶有SMI的S部件,則調(diào)用保存CPU狀態(tài)例程,如252處所示。與圖13有關(guān)的內(nèi)容將會(huì)詳細(xì)說(shuō)明保存CPU狀態(tài)例程。這里,只說(shuō)以下內(nèi)容就足夠了在初始調(diào)用掛起例程時(shí),無(wú)論CPU40處于什么模式,都會(huì)按CPU40處于實(shí)模式來(lái)執(zhí)行掛起例程的其余部分,所以能夠在不必?fù)?dān)心產(chǎn)生任何錯(cuò)誤的情況下執(zhí)行上述掛起的其余部分,而所說(shuō)的錯(cuò)誤則是由試圖執(zhí)行容許地址空間之外的指令或試圖執(zhí)行特權(quán)指令而引起的。
保存CPU狀態(tài)例程在253處以獨(dú)特的方式將程序控制權(quán)交還給掛起例程。從保存CPU狀態(tài)例程“返回”至掛起例程指的是復(fù)位CPU,這將在以下與圖13中任務(wù)630和632有關(guān)的內(nèi)容中予以詳細(xì)說(shuō)明。掛起例程的重要細(xì)節(jié)是業(yè)已將CPU寄存器寫(xiě)至了E000H的數(shù)據(jù)結(jié)構(gòu),并且,CPU40當(dāng)前處于實(shí)模式。
在保存CPU狀態(tài)例程返回之后,或者中CPU響應(yīng)SMI而保存了自己的狀態(tài)之后,掛起例程繼續(xù)在254處確認(rèn)是否已按下了開(kāi)關(guān)21。如與圖6及圖7有關(guān)的內(nèi)容所說(shuō)明的那樣測(cè)試開(kāi)關(guān)21的接通情況。如果未按下開(kāi)關(guān),則正在進(jìn)行的掛起是軟件掛起并在CMOS NVRAM96中設(shè)置軟件掛起標(biāo)志。這就確保了軟件掛起不會(huì)與因開(kāi)關(guān)接通而引起硬件掛起相混淆。所有的軟件掛起都會(huì)通過(guò)在微控制器U2內(nèi)設(shè)置一二進(jìn)制位而轉(zhuǎn)化為硬件掛起。將軟件掛起轉(zhuǎn)化為硬件掛起之后,接通開(kāi)關(guān)會(huì)中止該掛起。
下一步的任務(wù)是在E000H段內(nèi)建立一個(gè)堆棧,如262處所示。
建立起堆棧之后,掛起例程在264處檢驗(yàn)DMA控制器72、磁盤(pán)適配器84以及IDE盤(pán)控制器86以了解當(dāng)前是否正在分別進(jìn)行任何的DMA傳送、軟盤(pán)驅(qū)動(dòng)器傳送或硬文件傳送。如果是這樣的話(huà),就不能進(jìn)行掛起,這是因?yàn)?,這三種類(lèi)型所特有的性質(zhì)會(huì)阻止進(jìn)行令人滿(mǎn)意的掛起。例如,如果正在進(jìn)行來(lái)自硬盤(pán)驅(qū)動(dòng)器31的硬文件傳送,則IDE控制器業(yè)已讀取了數(shù)據(jù),但數(shù)據(jù)尚未被傳送至系統(tǒng)內(nèi)存53。CPU無(wú)法充分地存取上述數(shù)據(jù),所以,如果在硬文件讀操作中間掛起計(jì)算機(jī)系統(tǒng),數(shù)據(jù)就會(huì)丟失。因此,如果正在進(jìn)行上述三種傳送中的任何一種,都推遲掛起直至下一次的APM Get Event,那時(shí),會(huì)再一次檢測(cè)DMA和軟盤(pán)控制器的活動(dòng)。
因此,必須將在352、260和262處執(zhí)行的任務(wù)顛倒,從而將控制權(quán)轉(zhuǎn)給APM。首先,BIOS從讀/寫(xiě)變?yōu)橹蛔x,如265處所示。這是通過(guò)關(guān)閉仍包含有投影數(shù)據(jù)的E000H段而實(shí)現(xiàn)的。彈出并恢復(fù)在任務(wù)262處創(chuàng)建的堆棧。最后,在267處將控制權(quán)轉(zhuǎn)回給APM之前,在266處由恢復(fù)CPU狀態(tài)例程恢復(fù)CPU的狀態(tài)。在下一次Get Event期間APM再過(guò)約一秒鐘再次輪詢(xún)掛起例程。到那時(shí),可能完成了阻止掛起的傳送活動(dòng),從而使掛起繼續(xù)。
參照任務(wù)264,如果當(dāng)前沒(méi)有進(jìn)行DMA傳送,軟盤(pán)驅(qū)動(dòng)器傳送或硬文件傳送,則可以進(jìn)行掛起。掛起例程在268處繼續(xù)。使故障保險(xiǎn)計(jì)時(shí)器連續(xù)地遞減計(jì)數(shù),當(dāng)開(kāi)關(guān)21處于斷開(kāi)/釋放狀態(tài)時(shí),故障保險(xiǎn)計(jì)時(shí)器如果到時(shí)則會(huì)使計(jì)算機(jī)系統(tǒng)自身關(guān)閉。所以,第一項(xiàng)任務(wù)就是復(fù)位與圖6A和圖19有關(guān)的內(nèi)容所述的故障保險(xiǎn)計(jì)時(shí)器,如268處所示。
然后,在270處保存8042協(xié)處理器104的狀態(tài)。8042協(xié)處理104的寄存器在本技術(shù)中是周知的。CPU40可以直接讀取上述寄存器并且這些寄存器的值可以直接寫(xiě)入E000H的數(shù)據(jù)結(jié)構(gòu)中。
隨后,在272處保存8259中斷控制器92的狀態(tài)。掛起例程調(diào)用8259保存狀態(tài)例程,在與圖15有關(guān)的內(nèi)容中將詳細(xì)說(shuō)明上述8259保存狀態(tài)例程。這里,只說(shuō)下列內(nèi)容就夠了盡管8259中斷控制器92的某些寄存器是只寫(xiě)的,但8259保存狀態(tài)例程能夠確認(rèn)兩個(gè)8259中斷控制器的無(wú)名寄存器的內(nèi)容。該寄存器的值可以直接寫(xiě)至E000H的數(shù)據(jù)結(jié)構(gòu)中。
在保存了中斷控制器92的狀態(tài)之后,必須將中斷控制器92的配置改變成已知的狀態(tài)以使得掛起例程執(zhí)行各個(gè)中斷驅(qū)動(dòng)的任務(wù)的正常功能。所以,在274處交換BIOS數(shù)據(jù)區(qū)與矢量表(BIOS data Areas & Vector Table)。掛起例程將0000H段中的當(dāng)前狀態(tài)BIOS數(shù)據(jù)區(qū)和矢量表的內(nèi)容拷貝至E000H段中的存儲(chǔ)單元。然后,將已知狀態(tài)BIOS數(shù)據(jù)區(qū)和矢量表的內(nèi)容從E000H段中的數(shù)據(jù)結(jié)構(gòu)拷貝至0000H段內(nèi)的存儲(chǔ)單元。在引導(dǎo)例程的任務(wù)414中將已知狀態(tài)BIOS數(shù)據(jù)區(qū)和矢量表拷貝至E000H段,引導(dǎo)例程如圖11所示并在以下予以說(shuō)明。最后,將當(dāng)前狀態(tài)BIOS數(shù)據(jù)區(qū)和矢量表從0000H段拷貝至E000H段內(nèi)的數(shù)據(jù)結(jié)構(gòu)。當(dāng)274處的例程結(jié)束時(shí),諸如中斷13H(磁盤(pán)讀/寫(xiě)中斷)和中斷10H(視頻存取中斷)之類(lèi)的所有中斷會(huì)象所希望的那樣起作用。
然后,在276處將計(jì)時(shí)器102的狀態(tài)保存起來(lái)。該計(jì)時(shí)器的寄存器在本技術(shù)中是周知的。CPU40可以直接讀取所有的這些寄存器,并且,這些寄存器的值可直接寫(xiě)入E000H的數(shù)據(jù)結(jié)構(gòu)。在276處還將IDE磁盤(pán)控制器86的狀態(tài)保存起來(lái)。IDE磁盤(pán)控制器86的寄存器在本技術(shù)中是周知的。CPU40可以直接讀取所有的這些寄存器,并且,這些寄存器的值可直接寫(xiě)入E000H的數(shù)據(jù)結(jié)構(gòu)。
下一步是為將系統(tǒng)內(nèi)存寫(xiě)至硬盤(pán)驅(qū)動(dòng)器31的掛起文件(Suspend File)而做好準(zhǔn)備。系統(tǒng)內(nèi)存包括系統(tǒng)RAM53(它包括主內(nèi)存和任何擴(kuò)展內(nèi)存)以及視頻內(nèi)存58。這時(shí),部分RAM53可以處于外部高速緩沖存儲(chǔ)器60內(nèi)。在286處傾瀉CPU的高速緩沖存儲(chǔ)器,這將在以下與圖13有關(guān)的內(nèi)容中予以說(shuō)明。然后,在286處傾瀉外部高速緩沖存儲(chǔ)器并使該存儲(chǔ)器提高向硬盤(pán)31的寫(xiě)的速度。
在計(jì)算機(jī)系統(tǒng)10內(nèi)執(zhí)行的代碼可能已將IDE控制器86置入了未知的狀態(tài)。因此,下一步是在292處將IDE控制器86初始化成已知的狀態(tài)。這是通過(guò)把值直接寫(xiě)至IDE控制器86內(nèi)的寄存器而實(shí)現(xiàn)的。
然后,在976處啟動(dòng)中斷驅(qū)動(dòng)的并行線(xiàn)程以讀取任何調(diào)制解調(diào)器的狀態(tài)并使該狀態(tài)保存至E000H的數(shù)據(jù)結(jié)構(gòu)中。該例程做以下工作捕捉對(duì)應(yīng)于COMM端口的中斷,而COMM端口則與特定的調(diào)制解調(diào)器有關(guān);將命令傳遞給上述調(diào)制解調(diào)器以使該調(diào)制解調(diào)器順序地傳回該調(diào)制解調(diào)器之寄存儲(chǔ)的內(nèi)容;接收從上述調(diào)制解調(diào)器所傳送的寄存器內(nèi)容;以及將上述寄存器的值保存至E000H的數(shù)據(jù)結(jié)構(gòu)中。這一例程將一第一命令傳送給調(diào)制解調(diào)器,然后以中斷驅(qū)動(dòng)的方式響應(yīng),以便接收調(diào)制解調(diào)器的應(yīng)答并響應(yīng)每個(gè)COMM端口的中斷將下一個(gè)命令傳遞給調(diào)制解調(diào)器,直至保存了所有調(diào)制解調(diào)器的寄存器。如果不是作為并行線(xiàn)程運(yùn)行的,則這一例程給掛起計(jì)算機(jī)系統(tǒng)所花費(fèi)的時(shí)間增加幾秒鐘(每個(gè)調(diào)制解調(diào)器為3-5秒,這取決于特定的調(diào)制解調(diào)器以及當(dāng)前的波特率)。由于是中斷驅(qū)動(dòng)的并行線(xiàn)程,所以,如果該例程在已將系統(tǒng)狀態(tài)寫(xiě)至硬盤(pán)驅(qū)動(dòng)器31之前結(jié)束運(yùn)行,則該例程不給掛起增加時(shí)間。
在上述中斷驅(qū)動(dòng)并行線(xiàn)程的調(diào)制解調(diào)器保存例程啟動(dòng)之后,必須在294處使掛起文件處在硬盤(pán)驅(qū)動(dòng)器31的固定盤(pán)上。掛起文件的磁頭、扇區(qū)和柱面均存儲(chǔ)在CMOS存儲(chǔ)器96中。一旦確定了掛起文件的位置,就讀取該文件的大小與特征。在所說(shuō)的最佳實(shí)施例中,上述特征是任意長(zhǎng)度的ASCII碼,它表示存在有掛起文件。也可以用其它方法實(shí)現(xiàn)所說(shuō)的特征,例如使用二進(jìn)制串,該串具有能在硬文件系統(tǒng)上被隨機(jī)查找到的非常低的概率。
取讀了掛起文件的文件大小與特征之后,下一步就是在296處確認(rèn)該特征和文件大小是否是正確的。如果所說(shuō)的特征不正確,這表明其它程序已修改了掛起文件,或者如果所說(shuō)的文件大小是不正確的,這表明掛起文件的大小已被修改過(guò),那么,掛起例程就在298處調(diào)用致命掛起錯(cuò)誤例程(Fatal Suspend ErrorRoutine),此例程始于圖13的任務(wù)652處。如果用戶(hù)按下開(kāi)關(guān)17,以退出致命掛起錯(cuò)誤例程,程序控制權(quán)從任務(wù)299轉(zhuǎn)至任務(wù)506。
另一方面,如果所說(shuō)的特征是正確的并且掛起文件足夠大,則掛起例程開(kāi)始將計(jì)算機(jī)系統(tǒng)的狀態(tài)寫(xiě)至內(nèi)存。
在將計(jì)算機(jī)系統(tǒng)10的狀態(tài)寫(xiě)至硬盤(pán)驅(qū)動(dòng)器31之前,CPU40在297處命令微控制器U2重新啟動(dòng)(復(fù)位)故障保險(xiǎn)計(jì)時(shí)器并查詢(xún)微控制器U2以確定是否再次按下了開(kāi)關(guān)21。如果沒(méi)有再次按下開(kāi)關(guān)21,則掛起例程繼續(xù)。另一方面,如果再次按下了開(kāi)關(guān)21,則中止掛起??梢栽趻炱鹄虄?nèi)的若干點(diǎn)處重新啟動(dòng)故障保險(xiǎn)計(jì)時(shí)器并測(cè)試開(kāi)關(guān)21的接通情況。任務(wù)297僅僅是說(shuō)明性的,這項(xiàng)應(yīng)用技術(shù)中普通的電路設(shè)計(jì)者能夠確定重新啟動(dòng)故障保險(xiǎn)計(jì)時(shí)器的次數(shù)及其間容許的時(shí)間。在故障保險(xiǎn)計(jì)時(shí)器到時(shí)以使電源17“關(guān)閉”之前,掛起例程應(yīng)復(fù)位故障保險(xiǎn)計(jì)時(shí)器。同樣,應(yīng)不時(shí)檢查一下開(kāi)關(guān)21。如果再度按下開(kāi)關(guān)21,這表示用戶(hù)希望中止掛起,那么,上述代碼應(yīng)轉(zhuǎn)至繼續(xù)例程中的適當(dāng)點(diǎn)處以便“不進(jìn)行掛起”并從部分掛起中恢復(fù)。
與此類(lèi)似,在350處按下Ctrl-Alt-Del鍵會(huì)中止掛起。按下Ctrl-Alt-Delete鍵(同時(shí)按下Control鍵、Alt鍵和Delete鍵)是復(fù)位以IBM BIOS和Intel80×86系列CPU為基礎(chǔ)的一般計(jì)算機(jī)系統(tǒng)的周知方法。計(jì)算機(jī)系統(tǒng)10用本技術(shù)中周知的BIOS一號(hào)中斷處理程序來(lái)處理Ctrl-Alt-Del。計(jì)算機(jī)系統(tǒng)10在350處帶有略有改變的1號(hào)中斷處理程序,該處理程序在352處清除CMOS存儲(chǔ)器96中的掛起標(biāo)志并在354處復(fù)位時(shí)轉(zhuǎn)至引導(dǎo)例程。
在本發(fā)明的計(jì)算機(jī)系統(tǒng)10中,掛起例程正在運(yùn)行時(shí)按下Ctrl-Alt-Del會(huì)使得計(jì)算機(jī)系統(tǒng)進(jìn)入關(guān)機(jī)狀態(tài)。這是因?yàn)?,在開(kāi)關(guān)21接通之后,按下Ctrl-Alt-Del會(huì)調(diào)用引導(dǎo)例程,而引導(dǎo)例程則會(huì)將微控制器U2初始化成這樣的狀態(tài)故障保險(xiǎn)計(jì)時(shí)器業(yè)已到時(shí)且開(kāi)關(guān)仍處于斷開(kāi)/釋放狀態(tài)。因此,在處于掛起例程時(shí)按下Ctrl-Alt-Del會(huì)使計(jì)算機(jī)系統(tǒng)10進(jìn)入關(guān)機(jī)狀態(tài)。
參照任務(wù)300,再次使掛起文件處在硬盤(pán)驅(qū)動(dòng)器31上,將特征短語(yǔ)在300處寫(xiě)至掛起文件的第一字節(jié)。然后,在302處將E000H段中的整個(gè)64K字節(jié)的數(shù)據(jù)寫(xiě)入掛起文件。E000H的上述64K拷貝實(shí)際上只是一個(gè)位置保留區(qū)并且將會(huì)在掛起例程結(jié)束時(shí)重寫(xiě)這一相同位置。
然后,在303處將視頻控制器56的狀態(tài)保存起來(lái)。視頻控制器56的寄存器在本技術(shù)中是周知的。CPU40可以直接讀取上述所有的寄存器,而且,這些寄存器的值可直接寫(xiě)至E000H中的數(shù)據(jù)結(jié)構(gòu)內(nèi)。
隨后,將系統(tǒng)內(nèi)存寫(xiě)至掛起文件,這是由一雙緩沖區(qū)系統(tǒng)來(lái)實(shí)現(xiàn)的,該雙緩沖區(qū)系統(tǒng)從系統(tǒng)內(nèi)存中讀取數(shù)據(jù)、并壓縮該數(shù)據(jù)且將其寫(xiě)至E000H段,最后將已壓縮的數(shù)據(jù)從E000H段寫(xiě)至掛起文件。在一時(shí)間多路復(fù)用結(jié)構(gòu)中有兩個(gè)例程在工作一個(gè)壓縮數(shù)據(jù)并寫(xiě)至E000H段,另一個(gè)寫(xiě)至掛起文件。前者在前臺(tái)運(yùn)行,后者則是在后臺(tái)運(yùn)行的中斷驅(qū)動(dòng)例程。很明顯,由于只有一個(gè)CPU40,因此在給定的時(shí)間內(nèi)只能執(zhí)行一個(gè)例程,但是,由于后一個(gè)例程是由中斷驅(qū)動(dòng)的,所以該例程在需要時(shí)可中斷前一個(gè)例程的運(yùn)行,使向掛起文件傳遞數(shù)據(jù)的速度最佳。上述兩個(gè)緩沖區(qū)的每一個(gè)都為8K字節(jié)長(zhǎng),這被認(rèn)為是可使向硬盤(pán)驅(qū)動(dòng)器31的傳遞時(shí)間最佳化。
上述過(guò)程始于304,它讀取足夠的數(shù)據(jù)并進(jìn)行壓縮且寫(xiě)至E000H段以填充第一個(gè)8K的緩沖區(qū)。利用持續(xù)長(zhǎng)度編碼法壓縮所說(shuō)的數(shù)據(jù),但是,也可以使用任何適當(dāng)?shù)膲嚎s法。這時(shí),在306處啟動(dòng)總體上在標(biāo)號(hào)307處所示的寫(xiě)自緩沖區(qū)例程(Write fromBuffer Routine)。寫(xiě)自緩沖區(qū)例程307是一種在后臺(tái)運(yùn)行的中斷驅(qū)動(dòng)例程,包括任務(wù)308至任務(wù)310??傮w上在標(biāo)號(hào)311處所示的壓縮例程包括任務(wù)312至任務(wù)318并且是一種前臺(tái)例程。首先,寫(xiě)自緩沖區(qū)例程307在308處將剛被任務(wù)304所填寫(xiě)的緩沖區(qū)寫(xiě)至掛起文件。當(dāng)寫(xiě)自緩沖區(qū)例程307將緩沖區(qū)的內(nèi)容寫(xiě)至掛起文件時(shí),壓縮例程311在312處繼續(xù)從系統(tǒng)內(nèi)存中讀取后面的字節(jié)并壓縮它們且將壓縮后的數(shù)據(jù)寫(xiě)至前述兩個(gè)8K緩沖區(qū)中的另一個(gè)內(nèi)。一旦壓縮例程311用壓縮后的數(shù)據(jù)填滿(mǎn)了上述緩沖區(qū),下一步就在314處確定是否已壓縮了整個(gè)系統(tǒng)內(nèi)存。
IDE控制器86不能很快地將數(shù)據(jù)寫(xiě)至硬盤(pán)驅(qū)動(dòng)器。因此,壓縮例程311總是會(huì)在寫(xiě)自緩沖區(qū)例程307完成將8K緩沖區(qū)寫(xiě)至硬盤(pán)驅(qū)動(dòng)器31之前完成填滿(mǎn)未被寫(xiě)至硬盤(pán)驅(qū)動(dòng)器31的8K緩沖區(qū)。所以,壓縮例程311必須等待寫(xiě)自緩沖區(qū)例程307完成將緩沖區(qū)寫(xiě)至硬盤(pán)驅(qū)動(dòng)器31。如果壓縮例程311尚未完成壓縮所有的系統(tǒng)內(nèi)存并對(duì)它們進(jìn)行寫(xiě)操作,則壓縮例程311在316處等待寫(xiě)自緩沖區(qū)例程307。壓縮例程311和寫(xiě)自緩沖區(qū)例程307通過(guò)一組標(biāo)志而相互通信。寫(xiě)自緩沖區(qū)例程307在完成將當(dāng)前緩沖區(qū)寫(xiě)至掛起文件時(shí)會(huì)隨后轉(zhuǎn)換該緩沖區(qū)的標(biāo)志,以便向壓縮例程311表明它可以用壓縮后的數(shù)據(jù)填寫(xiě)剛被寫(xiě)至掛起文件的緩沖區(qū)。然后,在309處復(fù)位故障保險(xiǎn)計(jì)時(shí)器C2并以與任務(wù)297有關(guān)的內(nèi)容所述的方式檢查開(kāi)關(guān)21的接通事件。
然后寫(xiě)自緩沖區(qū)例程307在310處確定剛寫(xiě)至掛起文件的緩沖區(qū)是否是最后一個(gè)要寫(xiě)的緩沖區(qū)。如果不是,則寫(xiě)自緩沖區(qū)例程將剛由壓縮例程311所填寫(xiě)的緩沖區(qū)寫(xiě)至掛起文件。同時(shí),壓縮例程311通過(guò)檢驗(yàn)緩沖區(qū)標(biāo)志而確定是否為另外壓縮的系統(tǒng)內(nèi)存準(zhǔn)備好了緩沖區(qū)。也就是說(shuō),壓縮例程在316處等待直至寫(xiě)自緩沖區(qū)例程處理完當(dāng)前的緩沖區(qū),這時(shí)在312處繼續(xù)壓縮循環(huán)。請(qǐng)注意,如果支持線(xiàn)性幀緩沖技術(shù),則可壓縮視頻內(nèi)存58,但對(duì)VESA頁(yè)存取來(lái)說(shuō)卻不壓縮視頻內(nèi)存58。相反,視頻控制器56利用VESA調(diào)用讀取VESA頁(yè)存取視頻內(nèi)存并且在不用以上詳細(xì)說(shuō)明的雙緩沖區(qū)系統(tǒng)進(jìn)行壓縮的情況下寫(xiě)VESA頁(yè)存取視頻內(nèi)存。
一旦壓縮例程311完成了壓縮所有系統(tǒng)內(nèi)存,該例程就會(huì)在318處等待寫(xiě)自緩沖區(qū)例程307完成將最后的緩沖區(qū)寫(xiě)至掛起文件。一旦寫(xiě)自緩沖區(qū)例程307結(jié)束,該例程就會(huì)從310轉(zhuǎn)至318并不再存在。這時(shí),沒(méi)有后臺(tái)例程在運(yùn)行并且主程序在320處繼續(xù)。
然后,在任務(wù)320處,將DMA部件71(DMA控制器72和中央仲裁器82)、82077軟盤(pán)控制器84以及RS-232UART(通用異步收發(fā)器)94的狀態(tài)保存起來(lái)。這些設(shè)備均具有在本技術(shù)中周知的寄存器。軟盤(pán)控制器84和UART94內(nèi)的所有寄存器均可由CPU40直接讀取,并且,這些寄存器的值可直接寫(xiě)至E000H內(nèi)的數(shù)據(jù)結(jié)構(gòu)中。DMA部件不帶有可讀寄存器。相反,一般在每次DMA傳送之前都建立起只寫(xiě)寄存器。為此,如果正在進(jìn)行DMA傳送,則掛起例程停止掛起。
隨后,掛起例程在978處測(cè)試與任務(wù)976有關(guān)的內(nèi)容所述的中斷驅(qū)動(dòng)的調(diào)制解調(diào)器狀態(tài)例程是否結(jié)束。如果沒(méi)有結(jié)束,則掛起例程等待上述調(diào)制解調(diào)器狀態(tài)例程結(jié)束。
應(yīng)該認(rèn)識(shí)到,一旦計(jì)算機(jī)系統(tǒng)10進(jìn)入掛起狀態(tài)150,就最好能檢測(cè)到對(duì)掛起文件的任何修改。例如,對(duì)某些人來(lái)說(shuō),可能會(huì)生成一修改過(guò)的掛起文件并將該掛起文件傳送至硬盤(pán)驅(qū)動(dòng)器31且試圖使計(jì)算機(jī)系統(tǒng)10恢復(fù)成與所保存的狀態(tài)不同的狀態(tài)。為此,將一偽隨機(jī)值放至到E000H段的數(shù)據(jù)結(jié)構(gòu)中。如328處所示,在中斷驅(qū)動(dòng)的調(diào)制解調(diào)器狀態(tài)保存例程結(jié)束之后,從高速計(jì)時(shí)器102之一中讀出一16位的時(shí)標(biāo)。然后將該時(shí)標(biāo)寫(xiě)至E000H段的數(shù)據(jù)結(jié)構(gòu)中。
然后,通過(guò)在不考慮進(jìn)位的情況下將E000H中的各個(gè)16位字加在一起而計(jì)算出用于整個(gè)E000H段的16位校驗(yàn)和。該校驗(yàn)和在330處寫(xiě)至E000H段的數(shù)據(jù)段中并在332處寫(xiě)至CMOSNVRAM 96中。此后,在334處將所有的工作變量從CPU 40寫(xiě)至E000H段的數(shù)據(jù)結(jié)構(gòu)中,并且,在336處將整個(gè)E000H段從掛起文件的特征短語(yǔ)之后開(kāi)始(緊接在該特征之后)重新寫(xiě)至掛起文件。然后,在338處設(shè)置CMOS NVRAM96內(nèi)的掛起標(biāo)志,以便通知計(jì)算機(jī)系統(tǒng)10已將該計(jì)算機(jī)系統(tǒng)的狀態(tài)保存到了掛起文件內(nèi)。
隨后,掛起例程在980判定是否已采用了檢查點(diǎn)。如果是這樣的話(huà),計(jì)算機(jī)系統(tǒng)就不應(yīng)降低功耗,反之,計(jì)算機(jī)系統(tǒng)必須繼續(xù)到從剛剛進(jìn)行的部分掛起中恢復(fù)的程度。所以,如果已采用了檢查點(diǎn),掛起例程在982處轉(zhuǎn)至繼續(xù)例程的任務(wù)484處,然后,繼續(xù)例程進(jìn)行部分的繼續(xù)。
如來(lái)采用檢查點(diǎn),則CPU40通過(guò)命令微控制器U2將ON信號(hào)設(shè)置成邏輯0而“關(guān)閉”電源,從而使電源17的初級(jí)/穩(wěn)壓部件172停止沿±5和±12線(xiàn)提供穩(wěn)定的電壓。該電壓要花幾秒鐘的時(shí)間才能遞減至約為0,從而給CPU40以時(shí)間去執(zhí)行多條命令。所以,在342處,CPU40在等待電源17所產(chǎn)生的系統(tǒng)電壓減小時(shí)會(huì)作無(wú)限的循環(huán)(“旋轉(zhuǎn)”)直至CPU40停止起作用。
參照?qǐng)D11,它顯示了引導(dǎo)例程的詳細(xì)內(nèi)容。與圖8有關(guān)的內(nèi)容概述了引導(dǎo)的過(guò)程。當(dāng)CPU40轉(zhuǎn)至復(fù)位矢量(Reset Vector)所指的代碼并執(zhí)行該代碼時(shí),引導(dǎo)例程就在380處開(kāi)始。每當(dāng)CPU40增加功耗并且無(wú)論何時(shí)CPU40因轉(zhuǎn)至上述復(fù)位矢量所指的代碼時(shí),都會(huì)出現(xiàn)上述情況。復(fù)位的過(guò)程在本技術(shù)中是周知的。
第一項(xiàng)任務(wù)是在382處測(cè)試CPU40并初始化內(nèi)存控制器46。CPU是由POST例程來(lái)測(cè)試的。CPU的測(cè)試部分確定CPU40是否是帶有SMI的“S”部件。如果是這樣的話(huà),就設(shè)置一標(biāo)志以指示這一情況。POST例程還初始化內(nèi)存控制器46。
然后,引導(dǎo)例程在986處測(cè)試微控制器U2是否在起作用。為此,CPU順序地讀取電源管理電路106的狀態(tài)端口并等待該端口處從HIGH到LOW以及從LOW回到HIGH的轉(zhuǎn)換。這種轉(zhuǎn)換說(shuō)明微控制器U2的心搏正在起作用,所以,CPU40可以在假定微控制器U2按希望的那樣起作用的情況下繼續(xù)進(jìn)行引導(dǎo)過(guò)程。
如果CPU在預(yù)定的時(shí)間如一秒或兩秒內(nèi)沒(méi)有檢測(cè)到狀態(tài)端口處的轉(zhuǎn)換,則微控制器U2就不具有心搏,CPU40就會(huì)在988處命令第一電路PAL U1復(fù)位微控制器U2,如前所述。然后,CPU40在990處再次等待狀態(tài)端口處從HIGH到LOW的轉(zhuǎn)換。如果CPU在一秒或兩秒的時(shí)間內(nèi)又沒(méi)有檢測(cè)到狀態(tài)端口的轉(zhuǎn)換,則微控制器U2不具有心搏,因而CPU40會(huì)于922處在假定微控制器U2處于不能復(fù)位的狀態(tài)的情況下使本文所述的電源管理特征無(wú)效。
另一方面,如果微控制器U2正在起作用,則CPU40在994處刷新微控制U2內(nèi)喚醒警鈴值的分鐘數(shù)。RTC98的時(shí)基要比微控制器U2的時(shí)基精確得多。所以,為了在不給微控制器U2增加更精確因而是更昂貴的時(shí)基的情況下克服上述局限性,BIOS使上述不太精確的時(shí)基與上述更為精確的時(shí)基相同步并在每次系統(tǒng)引導(dǎo)時(shí)用來(lái)自RTC98的更為精確的值更新微控制器U2內(nèi)喚醒警鈴值的分鐘數(shù)。為了做到這一點(diǎn),CPU40從CMOS存儲(chǔ)器96中讀取警鈴的絕對(duì)日期和時(shí)間并計(jì)算喚醒警鈴值的分鐘數(shù)且將該分鐘數(shù)寫(xiě)至微控制器U2。
此后并且如果微控制器U2不起作用從而使所說(shuō)的電源管理特征無(wú)效,則引導(dǎo)例程在996處確定是否因電源17的加電而引導(dǎo)了計(jì)算機(jī)系統(tǒng)。最佳的是,總是有交流電加載于電源17的初級(jí)/穩(wěn)壓部件172上,并且,ON#輸入控制著對(duì)±5和±12線(xiàn)處的電壓調(diào)節(jié)。這樣電源17可以不斷向使電源管理電路106通電所需的AUX5供電,并且,電源管理電路106在不轉(zhuǎn)換交流電的情況下控制電源17。
但是,正如本技術(shù)的專(zhuān)家所周知的那樣,某些用戶(hù)喜歡用開(kāi)關(guān)式配電板(未顯示)來(lái)對(duì)計(jì)算機(jī)系統(tǒng)加電,從而用一個(gè)單一的開(kāi)關(guān)接通和斷開(kāi)整個(gè)計(jì)算機(jī)系統(tǒng)的交流電。這對(duì)電源管理電路106來(lái)說(shuō)就存在著問(wèn)題,因?yàn)椋⒖刂破鱑2和其它設(shè)備均被配置成要由AUX5電源線(xiàn)不間斷地供電。所以,計(jì)算機(jī)系統(tǒng)必須具有能確定它已因接通了交流電而被加電并且相應(yīng)地活動(dòng)的方法。
但是,AUX5線(xiàn)還會(huì)遇到上述電壓降低和斷電的情況。在出現(xiàn)電壓降低和斷電的情況之后,復(fù)位子電路920會(huì)復(fù)位微控制器U2以防止該微控制器因超出容許電壓而中止。所以,計(jì)算機(jī)系統(tǒng)必須能進(jìn)一步確定在降低電壓之后或加載了交流電之后是否喚醒了微控制器。
因此,CPU在996處向微控制器U2查詢(xún)有關(guān)使電源17接通的事件。微控制器可以返回下列四種應(yīng)答之一(1)微控制器已被復(fù)位,因而使得電源17開(kāi)始在±5和±12線(xiàn)處提供穩(wěn)壓的電力;(2)喚醒警鈴的分鐘數(shù)到時(shí);(3)在來(lái)自光隔離器OPT01的振鈴輸入或RS-232振鈴輸入處產(chǎn)生了振鈴;以及/或者(4)按下了開(kāi)關(guān)21。諸如調(diào)度程序之類(lèi)的應(yīng)用程序可以直接從微控制器U2中讀取計(jì)算機(jī)系統(tǒng)通電的原因,而所說(shuō)的調(diào)度程序則會(huì)響應(yīng)系統(tǒng)增加功耗的原因而運(yùn)行特定的程序。另外,通過(guò)一個(gè)或多個(gè)BIOS調(diào)用也可以成為使計(jì)算機(jī)增加功耗的原因。
除了可被CPU40復(fù)位以外,微控制器U2只能被復(fù)位子電路920所復(fù)位,每當(dāng)AUX5線(xiàn)被加電或者故障,上述電路都會(huì)復(fù)位微控制器。所以,如果微控制器U2被復(fù)位或者微控制器返回了一在997處測(cè)試的無(wú)效喚醒代碼,則CPU40必須要在998處確定電源是否應(yīng)繼續(xù)在±5和12±線(xiàn)處調(diào)節(jié)電壓。為此,在CMOSNVRAM內(nèi)使用了一個(gè)標(biāo)為DEFAULT_ON的標(biāo)志。如果設(shè)置了該標(biāo)志,則電源17應(yīng)在微控制器U2被復(fù)位之后繼續(xù)提供穩(wěn)壓的電力。另一方面,如果未設(shè)置DEFAULT_ON,則電源17應(yīng)在微控制器U2被復(fù)位之后停止提供穩(wěn)壓的電力,所以,CPU40會(huì)在1000處命令微控制器U2使電源17停止在±5和±12線(xiàn)處提供穩(wěn)壓的電力,此后,電壓會(huì)花幾秒鐘的時(shí)間下降至約為零,從而給CPU40以時(shí)間去執(zhí)行多條命令。因此,CPU40在等待電源17所產(chǎn)生的系統(tǒng)電壓下降時(shí)會(huì)在1002處執(zhí)行無(wú)限循環(huán)(“旋轉(zhuǎn)”),直至CPU40在1004處停止起作用。如上所述,微控制器U2最好由AUX5線(xiàn)不間斷地供電并連續(xù)執(zhí)行已編程的例程。
此后,如果微控制器在997處返回一有效的喚醒代碼,或者如果雖微控制器U2被復(fù)位,但計(jì)算機(jī)系統(tǒng)仍在998處保持加電狀態(tài),則CPU40會(huì)在1004處命令微控制器U2在確認(rèn)應(yīng)關(guān)閉電源而使電源17停止在±5和±12線(xiàn)處提供穩(wěn)壓電力之前向CPU40產(chǎn)生一SMI。此外,CPU還在1004處設(shè)置CMOS NVRAM內(nèi)的DEFAULT_ON位,因此,如果斷掉交流電,計(jì)算機(jī)系統(tǒng)會(huì)在重新加載交流電時(shí)自己返回接通狀態(tài)。
然后,引導(dǎo)例程在1006處執(zhí)行本技術(shù)中專(zhuān)家所周知的FirstPlug & Plan Resource Allocation Pass(第一次插入及計(jì)劃資源分配)。
隨后,測(cè)試影子內(nèi)存并將BIOS從ROM88拷貝至RAM53的影子內(nèi)存部分。所執(zhí)行代碼的流程取決于是否在CMOSNVRAM96內(nèi)設(shè)置了掛起標(biāo)志。如果設(shè)置了掛起標(biāo)志,則計(jì)算機(jī)系統(tǒng)10處于掛起狀態(tài)150,因而應(yīng)將計(jì)算機(jī)系統(tǒng)10恢復(fù)至它被掛起時(shí)所處的狀態(tài)。對(duì)E000H和F000H段內(nèi)的系統(tǒng)RAM53進(jìn)行簡(jiǎn)化的測(cè)試。為了減少計(jì)算機(jī)系統(tǒng)繼續(xù)所花費(fèi)的時(shí)間,只檢查上述內(nèi)存的適當(dāng)大小并將該內(nèi)存置零(將0000H寫(xiě)至各個(gè)存儲(chǔ)單元)。
另一方面,如果在CMOS NVRAM96中清除了掛起標(biāo)志,則對(duì)E000H和F000H段中的系統(tǒng)RAM53作標(biāo)準(zhǔn)的深層次的內(nèi)存測(cè)試,包括(1)粘接位(sticky-bit)測(cè)試;(2)雙位內(nèi)存測(cè)試;以及(3)交叉地址線(xiàn)測(cè)試。這些測(cè)試在本技術(shù)中都是周知的。
在測(cè)試了E000H和F000H段之后,可投影BIOS,這包括將ROM BIOS88拷貝至系統(tǒng)RAM53以及將內(nèi)存控制器配置成能夠執(zhí)行來(lái)自RAM的BIOS。投影BIOS可以增加系統(tǒng)的速度,并且能提高系統(tǒng)的效率,這是因?yàn)?,正在運(yùn)行來(lái)自較快的系統(tǒng)RAM53的BIOS(通常存取時(shí)間為80毫微秒)而不是來(lái)自較慢的ROM88的BIOS(通常存取時(shí)間為250毫微秒)。投影BIOS包括將BIOS拷貝程序加載至內(nèi)存低區(qū)的地址處;將BIOS從ROM88拷貝至系統(tǒng)RAM53的E000H段和F000H段;以及使影子RAM生效。
然后,在384處測(cè)試并初始化視頻控制器56同時(shí)測(cè)試視頻內(nèi)存。這些測(cè)試及初始化工作在本技術(shù)中都是周知的。
隨后,引導(dǎo)例程在1008處執(zhí)行本技術(shù)的專(zhuān)家所周知的Second Plug & Plan resource allocation pas(第二次插入及計(jì)劃資源分配)。
所執(zhí)行代碼的流程在386處取決于是否在CMOS NVRAM96內(nèi)設(shè)置了掛起標(biāo)志。如果設(shè)置了掛起標(biāo)志,則象任務(wù)383那樣只檢查其余的系統(tǒng)RAM53的大小,然后將該RAM置零。但是,如果清除了CMOS NVRAM96內(nèi)的掛起標(biāo)志,則在398處用與任務(wù)383有關(guān)的內(nèi)容所說(shuō)明的三步驟深層次內(nèi)存測(cè)試法來(lái)測(cè)試其余的系統(tǒng)RAM53。
測(cè)試內(nèi)存之后,在400處測(cè)試并初始化包括8259、UART、8042以及其它設(shè)備在內(nèi)的輔助設(shè)備。在408處初始化固定盤(pán)控制器。
所執(zhí)行代碼的流程在409處取決于是否在CMOS NVRAM96內(nèi)設(shè)置了掛起標(biāo)志。如果設(shè)置了掛起標(biāo)志,這表示在最近斷電時(shí)已成功地保存了系統(tǒng)的狀態(tài),那樣,引導(dǎo)例程就會(huì)跳過(guò)對(duì)硬盤(pán)驅(qū)動(dòng)器控制器86和硬盤(pán)驅(qū)動(dòng)器31的測(cè)試。另一方面,如果在CMOS NVRAM96內(nèi)清除了掛起標(biāo)志,這表示在最近斷電時(shí)未保存系統(tǒng)的狀態(tài),那么,正如在本技術(shù)中所周知的那樣,引導(dǎo)例程在任務(wù)410處對(duì)固定盤(pán)控制器86以及硬盤(pán)驅(qū)動(dòng)器31作完全的測(cè)試。
然后,在412處測(cè)試并初始化軟盤(pán)驅(qū)動(dòng)器控制器84。
這時(shí),所有的設(shè)備均被初始化并且矢量均指向已知的存儲(chǔ)單元,因此所有的中斷例程都會(huì)象所希望的那樣工作。所以,引導(dǎo)例程會(huì)在414處對(duì)BIOS數(shù)據(jù)區(qū)和矢量表進(jìn)行快照,即將BIOS數(shù)據(jù)區(qū)和矢量表的拷貝寫(xiě)至E000H段的數(shù)據(jù)結(jié)構(gòu)內(nèi)。掛起例程在任務(wù)274處利用BIOS數(shù)據(jù)區(qū)和矢量表的上述拷貝將計(jì)算機(jī)系統(tǒng)10置為已知的狀態(tài),同時(shí),所有的中斷均能象所希望的那樣工作。
然后,在416處如在本技術(shù)中所周知那樣“掃描進(jìn)”并初始化BIOS的任何擴(kuò)展部分。BIOS的擴(kuò)展部分是BIOS代碼的程序塊,該程序塊是由諸如網(wǎng)絡(luò)適配器之類(lèi)的外部適配器增加給計(jì)算機(jī)系統(tǒng)。BIOS的擴(kuò)展部分一般位于ISA總線(xiàn)76的C000H和D000H段內(nèi)并且具有相關(guān)的“特征”以標(biāo)識(shí)該BIOS擴(kuò)展部分自身。如果檢測(cè)到BIOS的擴(kuò)展部分,就檢查其長(zhǎng)度并計(jì)算和檢查校驗(yàn)和。如果上述特征、長(zhǎng)度和校驗(yàn)和都表明存在有有效的BIOS擴(kuò)展部分,則程序控制權(quán)轉(zhuǎn)至位于上述特征后面三個(gè)字節(jié)處的指令,并且,BIOS擴(kuò)展部分可執(zhí)行諸如初始化外圍適配器之類(lèi)的任何所需要的任務(wù)。一旦上述BIOS擴(kuò)展部分結(jié)束執(zhí)行,控制權(quán)會(huì)返回至引導(dǎo)例程,而引導(dǎo)例程則會(huì)搜索其它的BIOS擴(kuò)展部分。與上述BIOS擴(kuò)展部分一樣處理任何其它的BIOS擴(kuò)展部分。如果沒(méi)有檢測(cè)到其它的BIOS擴(kuò)展部分,則引導(dǎo)例程會(huì)轉(zhuǎn)至任務(wù)417。
然后,CPU在1010處讀取系統(tǒng)加電的時(shí)間增量并將該增量加至存儲(chǔ)在硬盤(pán)驅(qū)動(dòng)器31特定分區(qū)內(nèi)的值,同時(shí),將新的加電的總時(shí)間重新寫(xiě)回硬盤(pán)驅(qū)動(dòng)器31的特定分區(qū)內(nèi)。正如在本文其它地方將要說(shuō)明的那樣,微控制器U2在使計(jì)算機(jī)系統(tǒng)降低功耗之前會(huì)通過(guò)確立SMI線(xiàn)而中斷CPU40。因此,CPU會(huì)在假定計(jì)算機(jī)系統(tǒng)即將減少功耗的情況下執(zhí)行某些特定的任務(wù)。最佳的是,這包括將某些信息(如加電時(shí)間計(jì)時(shí)器所測(cè)量到的經(jīng)過(guò)時(shí)間)加電增量等保存至CMOS NVRAM。此后,CPU40允許微控制器U2使計(jì)算機(jī)系統(tǒng)減少功耗。
引導(dǎo)例程在417處搜索硬盤(pán)驅(qū)動(dòng)器31上特別為掛起文件而分配的分區(qū)。如果在分區(qū)表內(nèi)找到帶有PS/1標(biāo)識(shí)符“FE”的分區(qū)或帶有標(biāo)識(shí)符“84”的冬眠分區(qū),并且該分區(qū)足以容納用于所述特定計(jì)算機(jī)系統(tǒng)的掛起文件,那么,就將該分區(qū)用于掛起文件。因此,將掛起文件的特征(Suspend File Signature)寫(xiě)至上述區(qū)域的第一字節(jié)處,并將該區(qū)域的起始磁頭、扇區(qū)以柱面寫(xiě)至CMOSNVRAM96。
然后所執(zhí)行代碼的流程在418處做分支轉(zhuǎn)移,這取決于是否在CMOS NVRAM96中設(shè)置了掛起標(biāo)志。如果清除了掛起標(biāo)志,則引導(dǎo)例程在420處將控制權(quán)轉(zhuǎn)交給PBOOT例程。PBOOT在本技術(shù)中是周知的,它負(fù)責(zé)從軟盤(pán)或硬盤(pán)驅(qū)動(dòng)器31上加載操作系統(tǒng)(OS)以及命令解釋程序。如果在任務(wù)417處未找到用于掛起文件的分區(qū),則OS執(zhí)行與圖16有關(guān)內(nèi)容所說(shuō)明的OS專(zhuān)用驅(qū)動(dòng)程序,該驅(qū)動(dòng)程序檢查是否找到了一個(gè)分區(qū),并且,如果沒(méi)有,則在FAT(文件分配表)中分配一由連續(xù)扇區(qū)構(gòu)成的文件(如果必要的話(huà),對(duì)一區(qū)域去除分段),將所說(shuō)的特征寫(xiě)至掛起文件的第一個(gè)字節(jié)并將掛起文件的起始磁頭、扇區(qū)以柱面寫(xiě)至CMOS NVRAM96。
不管在何時(shí)分配掛起文件,該文件均應(yīng)是連續(xù)的扇區(qū),從而在掛起和繼續(xù)期間能夠分別快速地寫(xiě)至磁盤(pán)以及快速地從磁盤(pán)中讀出。
然后,OS按在CONFIG.SYS文件中所找到的指令配置計(jì)算機(jī)系統(tǒng)。最后,OS運(yùn)行AUTOEXEC.BAT文件,該文件最終將執(zhí)行控制權(quán)返回給操作系統(tǒng)。如果在CMOS NVRAM96中清除了掛起標(biāo)志,這表明最近斷電時(shí)未保存計(jì)算機(jī)系統(tǒng)的狀態(tài),那么,就忽略RESUME.EXE,在與任務(wù)421有關(guān)的內(nèi)容將詳細(xì)說(shuō)明RESUME.EXE。
參照任務(wù)418,如果在CMOS NVRAM96中設(shè)置了掛起標(biāo)志,這表示最近斷電時(shí)保存了計(jì)算機(jī)系統(tǒng)的狀態(tài),那么,所執(zhí)行代碼的流程就會(huì)在419處作分支轉(zhuǎn)移,這取決于是否在CMOSNVRAM96內(nèi)設(shè)置了重新初始化適配器標(biāo)志(ReinitializeAdapters Flag)。如果設(shè)置了重新初始化適配器標(biāo)志,則引導(dǎo)例程在421處將控制權(quán)交給PBOOT例程。同通常的PBOOT例程一樣,本發(fā)明的PBOOT加載OS,OS則根據(jù)在CONFIG.SYS和AUTOEXEC.BAT文件中找到的命令配置計(jì)算機(jī)系統(tǒng),此外,還加載驅(qū)動(dòng)程序并按本技術(shù)中所周知的方式配置計(jì)算機(jī)系統(tǒng)。
CONFIG.SYS和AUTOEXEC.BAT中的命令可以初始化計(jì)算機(jī)系統(tǒng)中的適配器卡。本申請(qǐng)假定存在有三種類(lèi)型的適配器卡I型適配器不需要初始化;II型適配器需要初始化但被BIOS擴(kuò)展部分或被每個(gè)CONFIG.SYS或AUTOEXEC.BAT所加載的驅(qū)動(dòng)程序設(shè)置成周知的工作狀態(tài);III型適配器由計(jì)算機(jī)系統(tǒng)執(zhí)行的代碼所修改??梢?huà)炱鸷突謴?fù)包括I型及II型適配器的計(jì)算機(jī)系統(tǒng),但不能恢復(fù)包括合有多種網(wǎng)絡(luò)適配器的III型適配器的計(jì)算機(jī)系統(tǒng),除非該適配器卡帶有相關(guān)的APM可認(rèn)識(shí)的設(shè)備驅(qū)動(dòng)程序,該驅(qū)動(dòng)程序在諸如系統(tǒng)斷電之類(lèi)的情況發(fā)生之后可重新初始化上述適配器。系統(tǒng)可以?huà)炱饚в蠥PM可認(rèn)識(shí)的設(shè)備驅(qū)動(dòng)程序的III型適配器卡。
在本實(shí)施例中,將文件RESUME.EXE加到AUTOEXEC.BAT文件內(nèi),RESUME.EXT負(fù)責(zé)將程序控制權(quán)從OS傳送給繼續(xù)例程。OS在任務(wù)420忽略RESUME.EXE的存在,但OS在任務(wù)421卻執(zhí)行RESUME.EXE,在OS從CONFIG.SYS和AUTOEXEC.BAT加載的設(shè)備驅(qū)動(dòng)器結(jié)束初始化II型適配器之后,RESUME.EXE將控制權(quán)轉(zhuǎn)給繼續(xù)例程。
參照任務(wù)419,如果在CMOS96中清除了重新初始化適配器標(biāo)志,則OS通過(guò)RESUME.EXE將執(zhí)行控制權(quán)轉(zhuǎn)給繼續(xù)例程。繼續(xù)例程從硬盤(pán)驅(qū)動(dòng)器上的掛起文件中恢復(fù)系統(tǒng)狀態(tài),繼續(xù)例程將在與圖12有關(guān)的內(nèi)容中予以詳細(xì)說(shuō)明。
參照?qǐng)D12,它顯示了從任務(wù)450至任務(wù)530的繼續(xù)例程的詳細(xì)內(nèi)容。首先,在451處測(cè)試CPU,如果CPU帶有SMI,則產(chǎn)生一CPU繼續(xù)SMI,該SMI將CPU置為SMM(系統(tǒng)管理監(jiān)控)模式并轉(zhuǎn)至任務(wù)454處的代碼。如果CPU不帶有SMI,則停止繼續(xù),其中,進(jìn)行復(fù)位,復(fù)位處理程序轉(zhuǎn)至任務(wù)454處的代碼。在配置進(jìn)程中,可能會(huì)將BIOS數(shù)據(jù)區(qū)和矢量表修改成未知的狀態(tài)。所以,基本的BIOS例程可能不象希望的那樣起作用。因此,繼續(xù)例程會(huì)在454處使E000H段成為可讀/寫(xiě)的并且在456處調(diào)用交換BIOS數(shù)據(jù)區(qū)和矢量表例程(Swap BIOS Data Area & VectorTable Routine)。該例程將在任務(wù)414處拷貝至E000H段的已知且適當(dāng)?shù)腂IOS數(shù)據(jù)區(qū)和矢量表與當(dāng)前在0000H段內(nèi)活動(dòng)的經(jīng)過(guò)修改的BIOS數(shù)據(jù)區(qū)和矢量表作交換。當(dāng)上述交換例程結(jié)束時(shí),上述已知的BIOS數(shù)據(jù)區(qū)和矢量表在E000H段內(nèi)是活動(dòng)的,而上述經(jīng)過(guò)修改的BIOS數(shù)據(jù)區(qū)和矢量表則處在0000H段內(nèi),并且,BIOS例程會(huì)象所希望的那樣起作用。
然后,繼續(xù)例程在458處使除了支持鍵盤(pán)和硬盤(pán)驅(qū)動(dòng)器的中斷以外的所有中斷都無(wú)效。此后,繼續(xù)例程在460處確定掛起文件在硬盤(pán)驅(qū)動(dòng)器31上的位置并讀取文件的長(zhǎng)度和特征,該特征如上所述是一用于掛起文件的多字節(jié)標(biāo)識(shí)符。所執(zhí)行代碼的流程隨后在462處作分支轉(zhuǎn)移,這取決于掛起文件是否有正確的長(zhǎng)度和特征。如果掛起文件不具有正確的長(zhǎng)度和特征,則掛起例程在464處清除CMOS內(nèi)的掛起標(biāo)志,程序控制權(quán)在466處轉(zhuǎn)給處于復(fù)位矢量(Reset Vector)所指向位置處的代碼,從而使得計(jì)算機(jī)系統(tǒng)就象從未掛起那樣進(jìn)行引導(dǎo)。另一方面,如果掛起文件具有正確的長(zhǎng)度和特征,則繼續(xù)例程在468處繼續(xù),它通過(guò)將位于掛起文件內(nèi)上述特征之后的64K塊(掛起文件對(duì)應(yīng)于E000H段信息的部分)讀至1000H段內(nèi)而使得計(jì)算機(jī)系統(tǒng)繼續(xù)。
隨后,在470處計(jì)算位于1000H段內(nèi)的上述數(shù)據(jù)塊的校驗(yàn)和,并在472處從CMOS非易失性存儲(chǔ)器96中讀出先前存儲(chǔ)的校驗(yàn)和,引后,所執(zhí)行代碼的流程在474處作分支轉(zhuǎn)移,這取決于任務(wù)470處所計(jì)算出的校驗(yàn)和是否與任務(wù)330處所計(jì)算出的校驗(yàn)和相同。如果任務(wù)470處所計(jì)算出的校驗(yàn)和不同于任務(wù)330處所計(jì)算出的校驗(yàn)和,則掛起文件因某種原因存在有問(wèn)題(例如它可能被改變了等等),因而控制權(quán)轉(zhuǎn)至任務(wù)464處,該任務(wù)如與任務(wù)464和466有關(guān)的內(nèi)容所說(shuō)明的那樣清除掛起標(biāo)志并復(fù)位計(jì)算機(jī)系統(tǒng)。如果任務(wù)470處所計(jì)算出的校驗(yàn)和與任務(wù)330處所計(jì)算出的校驗(yàn)和相同,則假定掛起文件與掛起例程所寫(xiě)的掛起文件是同一個(gè)文件,因而在476處將1000H段內(nèi)的數(shù)據(jù)拷貝至E000H段。
繼續(xù)例程在478處將一特定的信號(hào)屏面寫(xiě)至屏幕,該信號(hào)屏面用于通知用戶(hù)計(jì)算機(jī)系統(tǒng)正在恢復(fù)以及用戶(hù)應(yīng)按下Cltrl-Alt-Del鍵以中止繼續(xù)。同掛起例程一樣,按下Ctrl-Alt-Del鍵會(huì)在526處清除掛起標(biāo)志,并在528處重新引導(dǎo)計(jì)算機(jī)系統(tǒng)。因此,在按下Ctrl-Alt-Del鍵且繼續(xù)例程正在運(yùn)行時(shí)會(huì)重新正常引導(dǎo)計(jì)算機(jī)系統(tǒng)。
然后,在480和482處通過(guò)將來(lái)自E000H數(shù)據(jù)結(jié)構(gòu)的值分別寫(xiě)至82077軟盤(pán)控制器的寄存器以及DMA部件的寄存器中而恢復(fù)82077軟盤(pán)控制器84和DMA部件71。
隨后,在1020處啟動(dòng)中斷驅(qū)動(dòng)的并行線(xiàn)程,該線(xiàn)程用于從E000H的數(shù)據(jù)結(jié)構(gòu)中恢復(fù)任何調(diào)制解調(diào)器的狀態(tài)。同任務(wù)976處的例程一樣,調(diào)制解調(diào)器恢復(fù)例程做以下工作捕獲與涉及該特定調(diào)制解調(diào)器的COMM端口相對(duì)應(yīng)的中斷;讀取來(lái)自E000H數(shù)據(jù)結(jié)構(gòu)的值;將命令與值傳遞給調(diào)制解調(diào)器以使該調(diào)制解調(diào)器恢復(fù)其中的寄存器。上述例程將一第一命令傳遞給調(diào)制解調(diào)器然后以中斷驅(qū)動(dòng)的方式進(jìn)行應(yīng)答,以便接收調(diào)制解調(diào)器的應(yīng)答并響應(yīng)各COMM端口的中斷而將下一個(gè)值傳遞給調(diào)制解調(diào)器,直至恢復(fù)了所有的調(diào)制解調(diào)器的寄存器。同調(diào)制解調(diào)器保存例程一樣,如果上述例程不是作為并行線(xiàn)程執(zhí)行的,則該例程會(huì)在它要使計(jì)算機(jī)系統(tǒng)繼續(xù)所花費(fèi)的時(shí)間上增加幾秒鐘。作為一種中斷驅(qū)動(dòng)的并行線(xiàn)程,如果上述例程在從硬盤(pán)驅(qū)動(dòng)器31中讀出系統(tǒng)狀態(tài)之前全部執(zhí)行了,則該例程不給前述繼續(xù)工作增加時(shí)間。
當(dāng)從任務(wù)486到500處的中斷驅(qū)動(dòng)的并行線(xiàn)程調(diào)制解調(diào)器恢復(fù)例程開(kāi)始之后,利用一雙緩沖區(qū)例程從掛起文件中恢復(fù)系統(tǒng)內(nèi)存,上述雙緩沖區(qū)例程同與掛起例程中任務(wù)304至318有關(guān)的內(nèi)容所說(shuō)明的例程相類(lèi)似。上述雙緩沖區(qū)系統(tǒng)從掛起文件中讀取壓縮數(shù)據(jù),將該壓縮數(shù)據(jù)寫(xiě)至E000H段內(nèi),對(duì)壓縮的數(shù)據(jù)進(jìn)行解壓縮并寫(xiě)至系統(tǒng)內(nèi)存。有兩個(gè)例程以時(shí)間多路復(fù)用的方式進(jìn)行工作一個(gè)從掛起文件中讀取數(shù)據(jù)并將數(shù)據(jù)寫(xiě)至E000H段內(nèi);另一個(gè)對(duì)上述數(shù)據(jù)進(jìn)行解壓縮并將解壓縮后的數(shù)據(jù)寫(xiě)至系統(tǒng)內(nèi)存。后一個(gè)例程在前臺(tái)運(yùn)行,前一個(gè)例程則是在后臺(tái)運(yùn)行的中斷驅(qū)動(dòng)的例程。很明顯,由于只有一個(gè)CPU,所以在給定的時(shí)間內(nèi)只能執(zhí)行一個(gè)例程,但是,由于上述前一個(gè)例程是中斷驅(qū)動(dòng)的,所以它可以根據(jù)需要中斷后一個(gè)例程的執(zhí)行,從而使來(lái)自?huà)炱鹞募臄?shù)據(jù)傳送的速度最佳化。上述兩個(gè)緩沖區(qū)均為8K字節(jié)長(zhǎng),這認(rèn)為能使傳送時(shí)間最佳化。
上述進(jìn)程始于486處,它從掛起文件中讀取數(shù)據(jù)并將足夠的數(shù)據(jù)寫(xiě)至E000H段以填充第一個(gè)8K的緩沖區(qū)。這時(shí),在306處啟動(dòng)讀自緩沖區(qū)例程(Read from Buffer Routine),該例程總體上用標(biāo)號(hào)489表示。讀自緩沖區(qū)例程489是一中斷驅(qū)動(dòng)的例程,它在后臺(tái)運(yùn)行并包括任務(wù)490-492??傮w上用標(biāo)號(hào)493所表示的解壓縮例程(Decompression Routine)包括任務(wù)494-498并且是前臺(tái)例程。首先,讀自緩沖區(qū)例程489在490處開(kāi)始讀取掛起文件的下一個(gè)8K數(shù)據(jù)并將其寫(xiě)入現(xiàn)在為當(dāng)前緩沖區(qū)的另一個(gè)緩沖區(qū)中。當(dāng)讀自緩沖區(qū)例程489從掛起文件中讀取下一個(gè)8K數(shù)據(jù)并將其寫(xiě)入當(dāng)前緩沖區(qū)中時(shí),解壓縮例程493在494處讀取由任務(wù)486所填寫(xiě)緩沖區(qū)、對(duì)壓縮的數(shù)據(jù)進(jìn)行解壓縮并將已解壓縮的數(shù)據(jù)寫(xiě)至系統(tǒng)內(nèi)存。一旦解壓縮例程493對(duì)上述緩沖區(qū)內(nèi)的所有數(shù)據(jù)進(jìn)行了解壓縮,則下一步就是在496處確定是否已對(duì)整個(gè)的系統(tǒng)內(nèi)存進(jìn)行了解壓縮。
IDE控制器86不能很快地從硬盤(pán)驅(qū)動(dòng)器31中讀取數(shù)據(jù)。因此,解壓縮例程493總是在讀自緩沖區(qū)例程489結(jié)束將數(shù)據(jù)從硬盤(pán)驅(qū)動(dòng)器31中讀進(jìn)當(dāng)前緩沖區(qū)之前結(jié)束對(duì)未寫(xiě)至硬盤(pán)驅(qū)動(dòng)器31的8K緩沖區(qū)的解壓縮工作。所以,解壓縮例程493必須等待讀自緩沖區(qū)例程489結(jié)束從硬盤(pán)驅(qū)動(dòng)器31讀出數(shù)據(jù)。如果解壓縮例程493尚未解壓縮和寫(xiě)所有的系統(tǒng)內(nèi)存,則解壓縮例程493在498處等待讀自緩沖區(qū)例程489。解壓縮例程493和讀自緩沖區(qū)例程489通過(guò)一組標(biāo)志而相互通信。當(dāng)讀自緩沖區(qū)例程489結(jié)束將數(shù)據(jù)掛起文件讀進(jìn)當(dāng)前緩沖區(qū)時(shí),該例程489隨后在490處轉(zhuǎn)換上述緩沖區(qū)標(biāo)志,這向解壓縮例程493表明它可以開(kāi)始對(duì)緩沖區(qū)內(nèi)剛從掛起文件讀出的數(shù)據(jù)進(jìn)行解壓縮。然后,讀自緩沖區(qū)例程489在492處確定是否仍要從掛起文件中讀取一8K的塊。如果不是,讀自緩沖區(qū)例程在502處從掛起文件中讀取剩下的數(shù)據(jù)并將該數(shù)據(jù)寫(xiě)至當(dāng)前緩沖區(qū)。然后讀自緩沖區(qū)例程在后臺(tái)停止運(yùn)行,這實(shí)際是在500處等待解壓縮例程完成對(duì)前面的內(nèi)存所進(jìn)行的解壓縮工作。
同時(shí),解壓縮例程493通過(guò)檢驗(yàn)緩沖區(qū)的標(biāo)志而確定緩沖區(qū)是否準(zhǔn)備好被解壓縮至系統(tǒng)內(nèi)存。也就是說(shuō),解壓縮例程在498處等待,直至讀自緩沖區(qū)例程結(jié)束對(duì)當(dāng)前緩沖區(qū)的處理,這時(shí),解壓縮循環(huán)在494處繼續(xù)。
一旦解壓縮例程493結(jié)束了對(duì)所有系統(tǒng)內(nèi)存的解壓縮,則唯一在后臺(tái)運(yùn)行的例程是中斷驅(qū)動(dòng)的調(diào)制解調(diào)器恢復(fù)例程,而主程序則在504處繼續(xù),上述恢復(fù)例程在與任務(wù)1020有關(guān)的內(nèi)容中給予了說(shuō)明。
然后,在504和506處通過(guò)將來(lái)自E000H段數(shù)據(jù)結(jié)構(gòu)的值寫(xiě)至視頻控制器的寄存器以及IDE控制器的寄存器而恢復(fù)視頻控制器56和IDE控制器86。任務(wù)504也是這樣的程序點(diǎn)如果已采用了檢查點(diǎn),則掛起例程就轉(zhuǎn)至該程序點(diǎn)(見(jiàn)任務(wù)1024)。
此后,繼續(xù)例程在1022處測(cè)試與任務(wù)1022有關(guān)的內(nèi)容所述的中斷驅(qū)動(dòng)的調(diào)制解調(diào)器恢復(fù)例程是否結(jié)束。如果不是,則繼續(xù)例程等待上述恢復(fù)例程結(jié)束。
如508處所示,中斷驅(qū)動(dòng)的調(diào)制解調(diào)器狀態(tài)恢復(fù)例程結(jié)束之后,通過(guò)將適當(dāng)?shù)闹祵?xiě)至CPU40和高速緩沖存儲(chǔ)器的控制器62而分別使CPU高速緩沖存儲(chǔ)器41以及系統(tǒng)高速緩沖存儲(chǔ)器60有效。隨后,繼續(xù)例程在510至514處通過(guò)將來(lái)自E000H段數(shù)據(jù)結(jié)構(gòu)的值寫(xiě)至計(jì)時(shí)器控制器102、8042鍵盤(pán)接口微處理器104以及8259中斷控制器92內(nèi)的寄存器中而恢復(fù)這些設(shè)備的狀態(tài)。
然后,通過(guò)在484處將來(lái)自E000H段數(shù)據(jù)結(jié)構(gòu)的值寫(xiě)至UART的寄存器中而恢復(fù)UART94。
此后,繼續(xù)例程在516處調(diào)用交換BIOS數(shù)據(jù)區(qū)和矢量表例程。在調(diào)用上述例程之前,已知的BIOS數(shù)據(jù)區(qū)和矢量表在0000H段內(nèi)是活動(dòng)的,而從掛起文件中所讀出的BIOS數(shù)據(jù)區(qū)和矢量表則在E000H段數(shù)據(jù)結(jié)構(gòu)中是不活動(dòng)的。交換之后,已知的BIOS數(shù)據(jù)區(qū)和矢量表在E000H段內(nèi)是不活動(dòng)的,而由掛起例程所保存的BIOS數(shù)據(jù)區(qū)和矢量表則在0000H段內(nèi)是活動(dòng)的。
最后,繼續(xù)例程在518處轉(zhuǎn)至恢復(fù)CPU例程(Restore CPURoutine),該例程將CPU40恢復(fù)至掛起之前狀態(tài)。在與圖14有關(guān)的內(nèi)容中將詳細(xì)說(shuō)明恢復(fù)CPU例程?;謴?fù)CPU例程最終將執(zhí)行控制權(quán)交還給APM。
最后,CPU40執(zhí)行RETURN指令,從而使計(jì)算機(jī)系統(tǒng)返回至APM。系統(tǒng)當(dāng)前繼續(xù)執(zhí)行代碼,就好像它從未掛起過(guò)。從實(shí)用角度看,計(jì)算機(jī)系統(tǒng)不受掛起/繼續(xù)過(guò)程的影響。
參照?qǐng)D13,它顯示了保存CPU狀態(tài)例程(Save CPU StateRoutine)的流程。掛起例程在600處轉(zhuǎn)至保存CPU狀態(tài)例程。請(qǐng)注意,APM已使上述例程從中開(kāi)始執(zhí)行的E000H和F000H段成為可讀/寫(xiě)的。此外,APM將EFLAGS和八個(gè)通用寄存器保存起來(lái),如602處所示。保存CPU狀態(tài)例程在604處首先等待任一DMA結(jié)束并與鼠標(biāo)器13的數(shù)據(jù)包相同步,以確保上述例程能在鼠標(biāo)器數(shù)據(jù)包傳輸之間執(zhí)行。下列步驟能使DMA結(jié)束并與鼠標(biāo)器數(shù)據(jù)包相同步(1)使中斷生效;(2)用7毫秒等待任一DMA結(jié)束;(3)使中斷無(wú)效;(4)用5毫秒等待鼠標(biāo)器數(shù)據(jù)包的邊界;(5)使中斷生效;(6)再用5毫秒的時(shí)間等待鼠標(biāo)器數(shù)據(jù)包的到達(dá);以及(7)使中斷無(wú)效。這些步驟之后,所說(shuō)的代碼可在鼠標(biāo)器數(shù)據(jù)包之間安全地運(yùn)行。
然后,在606處將地址線(xiàn)(Address Line)20(I/O端口92H)的狀態(tài)壓至堆棧。
隨后所執(zhí)行代碼的流程在1030處做分支轉(zhuǎn)移,這取決于CPU40是否是帶有SMI的“S”部件。如果是這樣的話(huà),CPU40在1032處命令微控制器U2產(chǎn)生一SMI給CPU40。CPU40內(nèi)的微碼響應(yīng)SMI而在1034處將CPU40的狀態(tài)保存至E000H段數(shù)據(jù)結(jié)構(gòu)中的E000FE00H處。此后,CPU40在1036處保存浮點(diǎn)協(xié)處理器的狀態(tài)并在1038處調(diào)用掛起例程(圖10)。正如本文其它地方所說(shuō)明的那樣,掛起例程在1040處返回并在1040處恢復(fù)浮點(diǎn)協(xié)處理器的狀態(tài)。然后,在1042處,一RSM(繼續(xù))指令恢復(fù)CPU狀態(tài)并轉(zhuǎn)至任務(wù)732。
另一方面,如果CPU40不帶有SMI,則必須在608處用圖13代碼的其余部分將CPU的狀態(tài)保存起來(lái)并將算術(shù)協(xié)處理器44的狀態(tài)壓至堆棧。然后,在610處設(shè)置或清除一標(biāo)記以分別指示CPU是在32位模式下運(yùn)行還是在16位模式下運(yùn)行。
隨后,所執(zhí)行代碼的流程在612處作分支轉(zhuǎn)移,這取決于CPU40是否在保護(hù)模式下運(yùn)行。如果CPU40不是在保護(hù)模式運(yùn)行,則CPU40必定在實(shí)模式運(yùn)行并且可以非常直接的方式保存其寄存器。首先,在614處將機(jī)器狀態(tài)字的值以及CR3寫(xiě)至E000H段的數(shù)據(jù)結(jié)構(gòu)中。仍在614處將零寫(xiě)至E000H段數(shù)據(jù)結(jié)構(gòu)中與TR和LDTR相對(duì)應(yīng)的區(qū)域內(nèi),這是因?yàn)?,在?shí)模式下TR和LDTR均為零。
然后,上述代碼并入616處的共用代碼流程,在該流程處,將存儲(chǔ)在GDTR和LDTR內(nèi)的值寫(xiě)至E000H段的數(shù)據(jù)結(jié)構(gòu)中。隨后所執(zhí)行代碼的流程在618處做分支轉(zhuǎn)移,這取決于CPU40是否以虛擬8086模式運(yùn)行。如果CPU40未以虛擬8086模式運(yùn)行,則代碼沿共用路徑繼續(xù)至任務(wù)620,在此處將排錯(cuò)寄存器DR7、DR6、DR3、DR2、DR1以及DR0壓入堆棧。這些寄存器供排錯(cuò)程序及其它例程使用的。在622處將DS、ES、FS和GS壓入堆棧。然后將CS、SS和ESP寫(xiě)至E000H段的數(shù)據(jù)結(jié)構(gòu)中。
這時(shí),已對(duì)所有要寫(xiě)至E000H段數(shù)據(jù)結(jié)構(gòu)的值進(jìn)行了寫(xiě)操作,因此,可在626處將影子RAM的E000H和F000H段改回為只讀的。然后在628處用Write-Back和Invalidate Cache指令傾瀉CPU的高速緩沖存儲(chǔ)器。
隨后,在630處設(shè)置CMOS非易失性存儲(chǔ)器96內(nèi)的一個(gè)獨(dú)特的關(guān)機(jī)標(biāo)記(Shutdown Flag)。最后,保存CPU狀態(tài)例程在632處實(shí)際上“返回”至掛起例程。所說(shuō)的“返回”實(shí)際上是一種復(fù)位,該復(fù)位的后面是代碼中的分支。通過(guò)轉(zhuǎn)至復(fù)位矢量所指示的代碼而復(fù)位CPU40。復(fù)位CPU40強(qiáng)制CPU進(jìn)入實(shí)模式,這種方式下,在不必?fù)?dān)心產(chǎn)生保護(hù)錯(cuò)誤的情況下可以存取所有的設(shè)備與內(nèi)存存儲(chǔ)單元。此后,將CPU的狀態(tài)已保存起來(lái),并且,掛起例程必須將計(jì)算機(jī)系統(tǒng)其余的狀態(tài)保存起來(lái)。
在復(fù)位矢量所指向的代碼內(nèi),程序控制作分支轉(zhuǎn)移,這取決于是否在CMOS96內(nèi)設(shè)置了關(guān)機(jī)標(biāo)記。如果清除了關(guān)機(jī)標(biāo)記,則計(jì)算機(jī)會(huì)象通常那樣引導(dǎo)。另一方面,如果設(shè)置了關(guān)機(jī)標(biāo)記,則代碼轉(zhuǎn)至掛起例程的其余部分,也就是說(shuō),執(zhí)行控制權(quán)轉(zhuǎn)至圖10掛起例程中的任務(wù)253,該任務(wù)完成了掛起計(jì)算機(jī)系統(tǒng)10。因此,保存CPU狀態(tài)例程在623處實(shí)際上“返回”至了掛起例程。
參照任務(wù)612,如果CPU處于保護(hù)模式,則代碼在634處作分支轉(zhuǎn)移,這取決于CPU是否處于虛擬8086模式。如果CPU不處于虛擬8086模式,則代碼在636處再次作分支轉(zhuǎn)移,這取決于當(dāng)前的特權(quán)級(jí)別是否為零。如果當(dāng)前的特權(quán)級(jí)別不為零則是一沒(méi)有適當(dāng)特權(quán)的例程正在執(zhí)行保存CPU狀態(tài)例程,因而要調(diào)用致命掛起錯(cuò)誤例程(Fatal Suspend Error Routine,始于任務(wù)652處)。以下將詳細(xì)說(shuō)明致命掛起錯(cuò)誤例程。如果程序控制從致命掛起錯(cuò)誤例程返回,則CPU必須返回至調(diào)用保存CPU狀態(tài)例程之前的狀態(tài),所以,程序執(zhí)行會(huì)轉(zhuǎn)至圖14中的任務(wù)794,該任務(wù)能部分地恢復(fù)CPU。由于CPU中很少有變化,所以只需要部分地恢復(fù)。
參照任務(wù)636,如果調(diào)用代碼具有適當(dāng)?shù)奶貦?quán)級(jí)別,則保存工作在642處繼續(xù),從而將CR0、CR3、TR以及LDTR的值保存至E000H段的數(shù)據(jù)結(jié)構(gòu)中。然后,代碼的流程進(jìn)入616處的共用代碼流程,在616處,如以上所述那樣將GDTR和IDTR的值保存至E000H的數(shù)據(jù)結(jié)構(gòu)。從此處開(kāi)始,代碼沿以上說(shuō)明過(guò)的流程618至632執(zhí)行,從而“返回”(復(fù)位加上一個(gè)分支轉(zhuǎn)移)至其余的掛起例程代碼。
參照任務(wù)634,如果CPU40處于虛擬8086模式,則在644處繼續(xù)執(zhí)行,在644處,將機(jī)器狀態(tài)字的值(CR0的低16位)保存至E000H的數(shù)據(jù)結(jié)構(gòu)中,并設(shè)置一位于E000H段數(shù)據(jù)結(jié)構(gòu)內(nèi)的標(biāo)志(Flag)以指示CPU處于虛擬8086模式。然后,代碼經(jīng)由轉(zhuǎn)換646和648進(jìn)入616處的共用代碼。在任務(wù)618處,如果CPU處于虛擬8086模式,則控制轉(zhuǎn)至650,在650處,將DS、ES、FS和GS的值保存到E000H段的數(shù)據(jù)結(jié)構(gòu)中。代碼再次并入624處的共用代碼。從此處開(kāi)始,代碼沿以上說(shuō)明過(guò)的流程624至623執(zhí)行,從而“返回”(復(fù)位加上一個(gè)分支轉(zhuǎn)移)至其余的掛起例程代碼。
任務(wù)652至664顯示了致命掛起錯(cuò)誤例程,如果具有不適當(dāng)特權(quán)級(jí)別的代碼試圖保存CPU的狀態(tài),則調(diào)用致命掛起錯(cuò)誤例程。首先,在654處復(fù)位故障保險(xiǎn)計(jì)時(shí)器,然后,在656處揚(yáng)聲器以可聽(tīng)見(jiàn)的頻率蜂鳴數(shù)次,例如以886Hz長(zhǎng)0.25秒蜂鳴三次,蜂鳴間隔為1/6秒。三聲蜂鳴警告用戶(hù)未進(jìn)行所嘗試的掛起。蜂鳴之后,在658處再次復(fù)位故障保險(xiǎn)計(jì)時(shí)器從而在故障保險(xiǎn)計(jì)時(shí)器到時(shí)之前給用戶(hù)固定的15至18秒的時(shí)間以關(guān)閉電源17。
然后,致命掛起錯(cuò)誤例程在660至662處重復(fù)地檢查用戶(hù)是否按下了開(kāi)關(guān)21,這表示用戶(hù)要中止掛起。通過(guò)CPU查詢(xún)微控制器U2是否產(chǎn)生了接通事件,從而能檢查開(kāi)關(guān)的接通情況。如果用戶(hù)按下了按鈕21,則執(zhí)行控制返回至前述的任務(wù)640。如果用戶(hù)未在15至18秒內(nèi)按下按鈕21,則故障保險(xiǎn)計(jì)時(shí)器將會(huì)到時(shí),微控制器會(huì)“關(guān)閉”電源17,因而很明顯,CPU40所執(zhí)行的代碼在系統(tǒng)電壓降至容差范圍之外時(shí)均會(huì)停止。
參照?qǐng)D14,它顯示了恢復(fù)CPU狀態(tài)例程(Restore CPURoutine),該例程始于700處。在其余的硬件及內(nèi)存均已恢復(fù)至它們掛起之前的狀態(tài)以后,繼續(xù)例程會(huì)調(diào)用上述恢復(fù)CPU狀態(tài)例程。首先,如果E000H段還不是可讀/寫(xiě)的,則應(yīng)在702處將該段置成可讀/寫(xiě)的。
然后,所執(zhí)行代碼的流程在704處作分支轉(zhuǎn)移,這取決于CPU40在掛起時(shí)是否是以虛擬8086模式運(yùn)行。如果CPU40在計(jì)算機(jī)系統(tǒng)10掛起時(shí)以虛擬8086模式在運(yùn)行,則代碼進(jìn)入任務(wù)706至728,任務(wù)706至728是恢復(fù)虛擬8086CPU專(zhuān)用的。然后代碼并入從任務(wù)730至748的共用流程。
如果在保存CPU狀態(tài)時(shí)CPU處于虛擬8086模式,則用于將CR、LDTR及TR的值保存至E000H段數(shù)據(jù)結(jié)構(gòu)中的保存CPU狀態(tài)例程無(wú)法存取CR3、LDTR和TR。所以,必須分別在706、708以及710處估計(jì)CR3、LDTR以及TR。一般地說(shuō),通過(guò)遍歷系統(tǒng)RAM31查找CR3、LDTR和TR所指向的結(jié)構(gòu),可估計(jì)出它們的值。例如,查找GDT內(nèi)的LDT條目可以確定出LDTR。
在任務(wù)706處估計(jì)CR3。CR3包括頁(yè)面目錄基址寄存器(PDBR)。該寄存器包含有頁(yè)面目錄的頁(yè)幀地址、頁(yè)面級(jí)高速緩沖存儲(chǔ)器禁止(PCD)位以及頁(yè)面級(jí)寫(xiě)完(PWT)位。認(rèn)識(shí)到頁(yè)面目錄一定始于系統(tǒng)RAM53內(nèi)的4K邊界處,知道了由保存CPU狀態(tài)例程保存到E000H段數(shù)據(jù)結(jié)構(gòu)內(nèi)的IDTR值和GDTR值并且假定BIOS代碼從F000H段開(kāi)始執(zhí)行,就可以估計(jì)出PDBR。上述假定是合理的,這是因?yàn)?,為了速度的緣故已將BIOS代碼投影進(jìn)了影子RAM。如果操作系統(tǒng)將BIOS代碼拷貝至不同的區(qū)域,則對(duì)CR3的估計(jì)就會(huì)失敗。
利用上述知識(shí)和假設(shè),檢測(cè)物理內(nèi)存所有4K頁(yè)面是否有對(duì)應(yīng)于BIOS代碼段的頁(yè)轉(zhuǎn)換表。也就是說(shuō),相對(duì)上述頁(yè)面的03C0H偏移總是包含值000F0×××、000F1×××、000F2×××,……000FE×××。一旦確定了上述頁(yè)面的位置,就在系統(tǒng)RAM53內(nèi)查找一頁(yè)面目錄,該目錄的第一個(gè)條目對(duì)應(yīng)于以上確定的頁(yè)面表的物理地址。上述頁(yè)面目錄的物理地址是PDBR的最佳“猜測(cè)”值。
然后,通過(guò)確保PDBR能正確地轉(zhuǎn)換用于GDTR和IDTR的地址而驗(yàn)證假設(shè)的PDBR。也就是說(shuō),PDBR用于轉(zhuǎn)換GDTR的線(xiàn)性地址,并且GDT的第一個(gè)條目被驗(yàn)證是空的(null)(在任何CPU模式下GDT的頭八個(gè)字節(jié)都是00H)。此后,驗(yàn)證所返回的物理地址是在物理內(nèi)存的范圍內(nèi)。為了能進(jìn)行線(xiàn)性至物理轉(zhuǎn)換,使用模仿CPU轉(zhuǎn)換方法的子例程,如果在物理內(nèi)存中有該物理頁(yè)面存在,則在ESI(段結(jié)束指示符)中返回經(jīng)轉(zhuǎn)換的地址并清除進(jìn)位標(biāo)志CF,如果內(nèi)存中不存在該物理頁(yè)面,則設(shè)置CF。利用這一轉(zhuǎn)換例程從內(nèi)存53中讀取GDT的第一個(gè)字節(jié)。如果GDT的第一個(gè)條目為空(null),則假設(shè)的PDBR就通過(guò)第一次檢驗(yàn),因而會(huì)被再次檢驗(yàn)。然后用該P(yáng)DBR轉(zhuǎn)換IDTR以便利用上述轉(zhuǎn)移例程查找IDT。此后證實(shí)所返回的物理地址是在物理內(nèi)存的范圍內(nèi)。如果IDT的第一個(gè)存儲(chǔ)單元出現(xiàn)在物理內(nèi)存內(nèi),則PDBR通過(guò)第二次檢驗(yàn)。
如果假設(shè)的PDBR正確地轉(zhuǎn)換成了GDTR和IDTR,則假定該值是PDBR,并將該值寫(xiě)至E000H段數(shù)據(jù)結(jié)構(gòu)內(nèi)的CR3區(qū)域。另一方面,如果假設(shè)的CR3沒(méi)有通過(guò)檢驗(yàn),則上述例程會(huì)再次開(kāi)始以在系統(tǒng)內(nèi)搜索另外的BIOS代碼段頁(yè)轉(zhuǎn)換表,該表可能會(huì)得出有效的CR3。
對(duì)正常的主板操作來(lái)說(shuō),總是假定PCD和PWT固定在00H。將它們的值置為0并同PDBR一起寫(xiě)入E000H段數(shù)據(jù)結(jié)構(gòu)內(nèi)的CR3區(qū)。
一旦估算出了CR3,就在708處估算LDTR。由于已知LDT在GDT內(nèi)的某一位置處并且LDT一定會(huì)出現(xiàn)在內(nèi)存中,所以,在估算出CR3的情況下,可以估算出LDTR。為了估算LDTR,在GDT內(nèi)查找標(biāo)記為當(dāng)前的LDT。將在物理內(nèi)存中出現(xiàn)(用與任務(wù)706有關(guān)的內(nèi)容所說(shuō)明的轉(zhuǎn)換例程來(lái)測(cè)試)并被標(biāo)記為當(dāng)前的第一個(gè)LDT假定為L(zhǎng)DTR所指向的表。將該表的起點(diǎn)的物理地址保存至E000H段數(shù)據(jù)結(jié)構(gòu)內(nèi)的LDTR區(qū)。
即使是在OS/2中有多個(gè)LDT可被標(biāo)記為當(dāng)前的并出現(xiàn)在物理內(nèi)存中,上述估算LDTR的方法也是足夠可靠的,因而可以使用。EMM386是普通的虛擬8086模式(Virtual8086Mode)例程,因此似乎會(huì)有問(wèn)題,但是,由于EMM386只有一個(gè)CR3和一個(gè)LDTR,所以很容易估算出EMM386的CR3和LDTR。
一旦估算出了CR3和LDTR,就在710處估算TR。從實(shí)質(zhì)上說(shuō),要在GDT和LDT內(nèi)的各個(gè)任務(wù)選擇器條目中查找設(shè)置了忙位的任務(wù)狀態(tài)選擇器。測(cè)試各條目的類(lèi)型字段以確定該條目是忙的80286任務(wù)狀態(tài)選擇器還是忙的80486任務(wù)狀態(tài)選擇器。假定忙的286TSS(任務(wù)狀態(tài)選擇器)或忙的486TSS中的第一個(gè)條目是TR所指向的地址。將帶有忙的286或忙的486TSS的上述條目的物理地址保存至E000H段數(shù)據(jù)結(jié)構(gòu)內(nèi)的TR區(qū)。如果沒(méi)有條目帶有忙的286或486TSS,則將0保存到E000H段數(shù)據(jù)結(jié)構(gòu)內(nèi)的TR區(qū)。
估算出CR3、LDTR以及TR之后,代碼在任務(wù)712處繼續(xù)。在712處,如果TR指向有效的TSS,則在714處清除TR所指向的TSS內(nèi)的忙位。不管怎樣,代碼在716處繼續(xù),在716處,將對(duì)GDT有效的選擇器加載進(jìn)DS、ES、FS和GS。在718處利用來(lái)自E000H段數(shù)據(jù)結(jié)構(gòu)的值加載CR3和CR0。然后,在720處啟動(dòng)分頁(yè),因此,線(xiàn)性地址等于物理地址的區(qū)域只有E000H和F000H段內(nèi)的區(qū)域。隨后在722處將存儲(chǔ)在E000H段數(shù)據(jù)結(jié)構(gòu)內(nèi)的值加載進(jìn)IDTR、GDTR、LDTR以及TR。
最后,在724和726處通過(guò)將來(lái)自E000H段數(shù)據(jù)結(jié)構(gòu)的對(duì)應(yīng)于GS、FS、DS、ES、SS、ESP、EFLAGS(設(shè)置了VM位之后)以及CS的值壓入虛擬8086中斷堆棧(Virtual 8086 Interrupt Stack)而建立該堆棧。而且,還在726處將對(duì)應(yīng)于任務(wù)730處的代碼的返回地址壓入上述堆棧。其后,執(zhí)行IRETD指令以將CPU40設(shè)置回虛擬8086模式并將執(zhí)行權(quán)轉(zhuǎn)給對(duì)應(yīng)于任務(wù)730的代碼。
任務(wù)730啟動(dòng)圖14中各種線(xiàn)程均使用的共用線(xiàn)程。在任務(wù)730處,從保存在E000H段數(shù)據(jù)結(jié)構(gòu)內(nèi)的值中恢復(fù)協(xié)處理器44。然后地址線(xiàn)20(I/O端口92H)在732處從堆棧中彈出。任務(wù)732也是以SMI為基礎(chǔ)的CPU保存狀態(tài)例程所轉(zhuǎn)至的程序點(diǎn)(見(jiàn)任務(wù)1046)。此后在734處使影子RAM的E000H段再次成為只讀。在736處通過(guò)重新啟動(dòng)故障保險(xiǎn)計(jì)時(shí)器而使ARM與硬件相連接,如與圖6A和圖19有關(guān)的內(nèi)容所述。在738處再次使影子RAM的E000H和F000H段成為只讀的。最后,恢復(fù)CPU狀態(tài)例程在740處設(shè)置一標(biāo)志,此標(biāo)志表示進(jìn)行了正常的繼續(xù)。恢復(fù)CPU狀態(tài)例程并不執(zhí)行任務(wù)742、744和746,這些任務(wù)只用于表示在返回到被掛起事件所中斷的代碼之前的某一時(shí)刻,八個(gè)通用寄存器會(huì)彈出堆棧;使可屏蔽的中斷有效(如果代碼中斷時(shí)它們已被置為有效的話(huà));以及所說(shuō)的標(biāo)志彈出堆棧。最后,恢復(fù)CPU狀態(tài)例程返回至管理例程,管理例程將控制權(quán)交返給APM,APM又更新任何舊的系統(tǒng)值并將控制權(quán)交返給被中斷的代碼。
參照任務(wù)704,如果CPU40在中斷時(shí)不處于虛擬8086模式,則代碼進(jìn)入750至792的流程,在792處,代碼并入任務(wù)730至748的共用線(xiàn)程。在750處,如果E000H數(shù)據(jù)結(jié)構(gòu)中的TR值顯示出TR指向有效的TSS,則在752處清除上述TSS內(nèi)的忙位,然后在754處將來(lái)自E000H段數(shù)據(jù)結(jié)構(gòu)的值裝入GDTR和CR0。
然后在756至764處將一空的(dummy)頁(yè)面目錄表和頁(yè)面轉(zhuǎn)換表裝入E000H段。首先,在756處使影子RAM的E000H段成為可讀/寫(xiě)的。其次,在地址0E000H處創(chuàng)建一新的頁(yè)面目錄表,如758處所示。第三,在760處更改上述新頁(yè)面目錄表內(nèi)的第一個(gè)條目以使之指向0E1000H。第四,在0E1000H處創(chuàng)建一新的頁(yè)面轉(zhuǎn)移表,以使得地址0E000H至0FFFFF是存在的,并使得線(xiàn)性地址等于這一地址范圍內(nèi)的物理地址,如762處所示。最后,將0E000H裝入CR3內(nèi)的頁(yè)面目錄基址寄存器。因此,可以通過(guò)0E0000H內(nèi)的新的空(dummy)頁(yè)面目錄和頁(yè)面轉(zhuǎn)換表來(lái)進(jìn)行地址轉(zhuǎn)換。當(dāng)在任務(wù)754處加載754時(shí),重新激活頁(yè)面調(diào)度(如果可行)。
然后,在766處使影子RAM的E000H和F000H段成為可讀/寫(xiě)的。此后,如果CPU40在掛起時(shí)正在執(zhí)行16位的代碼,則CPU處于16位模式(16-Bit Mode),因而在770處將指向16位代碼路徑的偏移值保存至E000H段的數(shù)據(jù)結(jié)構(gòu)內(nèi)。另一方面,如果CPU40不處于16位模式,則CPU處于32位模式(32-BitMode),因而在772處將指向32位代碼路徑的偏移值保存至E000H段的數(shù)據(jù)結(jié)構(gòu)內(nèi)以代替16位的偏移值。無(wú)論是哪一種情況,上述兩種代碼路徑都是平行的,不同點(diǎn)只在于一個(gè)使用16位操作操作數(shù),另一個(gè)使用32位操作數(shù)。任務(wù)770和772只在上述平行的路徑之一中建立所說(shuō)的偏移值。在以下所述的任務(wù)782處進(jìn)入上述路徑之一(與偏移值相對(duì)應(yīng)的那個(gè)路徑)。
然后,在774處,將來(lái)自E000H段數(shù)據(jù)結(jié)構(gòu)的CR3值裝入EDX,將來(lái)自E000H段數(shù)據(jù)結(jié)構(gòu)的SS值裝入CX,將來(lái)自E000H段數(shù)據(jù)結(jié)構(gòu)的ESP值裝入EBP,將來(lái)自E000H段數(shù)據(jù)結(jié)構(gòu)的TR值裝入ESI的高位部分,將來(lái)自E000H段數(shù)據(jù)結(jié)構(gòu)的LDTR值裝入ESI的低位部分(SI)。這些值被移位進(jìn)下面各自適當(dāng)?shù)拇鎯?chǔ)單元。在776處將來(lái)自E000H段數(shù)據(jù)結(jié)構(gòu)的值裝入GDTR、LDTR和CR0。在778處,將存儲(chǔ)在SI內(nèi)的LDTR值裝入LDTR。然后代碼遠(yuǎn)程轉(zhuǎn)移至在任務(wù)770或772處設(shè)置的偏移值。通過(guò)直接將操作碼放進(jìn)源代碼內(nèi)并利用來(lái)自任務(wù)770或772的偏移值,可以將上述遠(yuǎn)程轉(zhuǎn)移偏碼。然后,代碼轉(zhuǎn)至16位操作碼路徑或32位操作碼路徑,如782處所示。
此后,在784處將存儲(chǔ)在EDX內(nèi)的CR3值裝入CR3、將存儲(chǔ)在CX內(nèi)的SS值裝入SS、將存儲(chǔ)在EBP內(nèi)的ESP值裝入ESP。在786處將GS、FS、ES和DS彈出截棧。在788處,如果被中斷的CPU40正在以受保護(hù)模式執(zhí)行代碼,則在790處將存儲(chǔ)在ESI高位部分內(nèi)的TR值裝入TR。無(wú)論是哪一種情況,代碼都在任務(wù)792處繼續(xù),在任務(wù)792處,排錯(cuò)寄存器DR0、DR1、DR2、DR3、DR6以及DR7均彈出堆棧。
這時(shí),代碼的流程并入任務(wù)730至748的共用代碼流程,此代碼已在以前作了說(shuō)明。在794處,錯(cuò)誤恢復(fù)例程從保存CPU狀態(tài)例程的任務(wù)640進(jìn)入上述共用代碼流程。
參照?qǐng)D15,它顯示了保存8259狀態(tài)例程(Save8259StateRoutine)的流程圖,該例程始于800處。保存8259的狀態(tài)始于在802處保存實(shí)時(shí)時(shí)鐘98所使用的周期性中斷值,以及在804處將所有的其它可讀寄存器保存至E000H段的數(shù)據(jù)結(jié)構(gòu)。正如在本技術(shù)中所周知的那樣,計(jì)算機(jī)系統(tǒng)10的結(jié)構(gòu)需要某些8259只讀寄存器具有固定的值。這些值是周知的,并且不需要確定。難以獲得的8259值是8259的基地址、8259從屬地址以及OS將兩個(gè)8259設(shè)置成能顯示出未決的中斷還是能顯示出進(jìn)行中的中斷。
用圖15中的其余代碼判定上述四個(gè)項(xiàng)目。在僅不屏蔽鍵盤(pán)12和鼠標(biāo)器13的中斷的情況下屏蔽8259,如806處所示。
在808處通過(guò)將1K的底部物理內(nèi)存拷貝至E000H段數(shù)據(jù)結(jié)構(gòu)而將中斷矢量表保存起來(lái)。然后,在810處,通過(guò)加載256個(gè)獨(dú)特的空矢量而將一新的“空”(dummy)中斷矢量表裝進(jìn)上述1K的底部物理內(nèi)存,而所說(shuō)的256個(gè)空矢量則指向256個(gè)空中斷服務(wù)例程,這些例程始于C800H段。如812處所示,在C800H段內(nèi)生成256個(gè)空中斷服務(wù)例程。
然后在814處禁止鍵盤(pán)12和鼠標(biāo)器13中斷。在816處確認(rèn)任何未被確認(rèn)的鍵盤(pán)12和鼠標(biāo)器13的中斷。
此后在818處產(chǎn)生一鍵盤(pán)中斷并在820處測(cè)試該中斷以確定是否將基址8259設(shè)置為未決的或是使用的。隨后將該值寫(xiě)至E000H段的數(shù)據(jù)結(jié)構(gòu)中。代碼在822處等待對(duì)中斷的服務(wù)。通過(guò)調(diào)用上述空服務(wù)例程中的一個(gè)而在824處對(duì)中斷進(jìn)行服務(wù)。調(diào)用上述空服務(wù)例程來(lái)確定8259的基地址并確定該8259是處于未決模式還是處于工作中模式,將所說(shuō)的基地址與模式保存至E000H段的數(shù)據(jù)結(jié)構(gòu)中。
對(duì)從屬的8259來(lái)說(shuō),在任務(wù)826、828、830和832處執(zhí)行類(lèi)似的過(guò)程。
在834處通過(guò)將來(lái)自E000H數(shù)據(jù)結(jié)構(gòu)的值拷回1K的低部物理內(nèi)存而恢復(fù)中斷矢量表。然后在836處再次將E000H段置為只讀的,并且,在838處屏蔽所有的中斷,以便在840處返回調(diào)用程序。
參照?qǐng)D16,它顯示了用于動(dòng)態(tài)分配掛起文件的例程。如與任務(wù)1012有關(guān)的內(nèi)容所說(shuō)明的那樣,分配在FAT內(nèi)的掛起文件應(yīng)是連續(xù)的扇區(qū)以便能在掛起與繼續(xù)過(guò)程中分別快速地寫(xiě)至磁盤(pán)和快速地從磁盤(pán)中讀出。此外,正如本技術(shù)的專(zhuān)家所知道的那樣,掛起文件必須足夠大以便存儲(chǔ)整個(gè)系統(tǒng)狀態(tài)經(jīng)壓縮的內(nèi)容。
為此,上述動(dòng)態(tài)分配掛起文件的例程始于1050。每當(dāng)計(jì)算機(jī)系統(tǒng)在不執(zhí)行繼續(xù)例程的情況下進(jìn)行引導(dǎo)時(shí),OS就執(zhí)行上述例程,并且該例程是在系統(tǒng)中增加內(nèi)存之后執(zhí)行的。首先,圖16所示的分配例程在1052處通過(guò)檢查CMOS NVRAM內(nèi)的標(biāo)記來(lái)測(cè)試是否存在有電源管理電路。如果不存在電源管理硬件106,則程序在1054處退出。如果存在電源管理的硬件106,則該例程在1056處檢查確定是否有未決的繼續(xù),如果有,則程序在1058處退出。
如果繼續(xù)不是未決的,則分配例程在1060處測(cè)試是否有保存文件的分區(qū)(Save File Partition)。如果存在有保存文件的分區(qū),則程序在假定該分區(qū)足以能存儲(chǔ)整個(gè)系統(tǒng)狀態(tài)的情況下而在1062處退出。
如果不存在保存文件的分區(qū),則必須在FAT中為該保存文件(Save File)分配一個(gè)文件。首先,在1064處確定上述文件的長(zhǎng)度。此長(zhǎng)度是通過(guò)把系統(tǒng)RAM53的長(zhǎng)度、視頻存儲(chǔ)器58的長(zhǎng)度、其它任何帶有較大易失性存儲(chǔ)容量的設(shè)備的長(zhǎng)度以及用于存儲(chǔ)諸如CPU40之類(lèi)的各種設(shè)備的寄存器值的64K字節(jié)區(qū)域加在一起而計(jì)算出來(lái)的。
計(jì)算出所需的保存文件長(zhǎng)度之后,分配例程在1066處試著在FAT內(nèi)分配該保存文件。如果在硬盤(pán)驅(qū)動(dòng)器31上沒(méi)有足夠可用的存儲(chǔ)空間,則分配例程就在1070處調(diào)用一個(gè)例程,在可能情況下增加硬盤(pán)驅(qū)動(dòng)器31可用空間長(zhǎng)度。
DOS調(diào)用無(wú)法保證文件中連續(xù)的扇區(qū)。所以,如果硬盤(pán)驅(qū)動(dòng)器31具有足夠的空間去存儲(chǔ)保存文件,則分配例程在1072處確定該空間是否是連續(xù)的。如果保存文件是分段的(不連續(xù)),則分配例程就在1074處調(diào)用一個(gè)例程,在可能情況下消除硬盤(pán)驅(qū)動(dòng)器分段,以便為保存文件提供連續(xù)的文件。
如果保存文件不是分段的,則分配例程在1076處將特征(“PS/1 Power Management”)寫(xiě)至保存文件的第一個(gè)扇區(qū)。然后,分配例程在1078處將上述文件的DOS句柄轉(zhuǎn)換成用于BIOS的物理柱面、磁頭以及扇區(qū)并將這些值寫(xiě)至CMOS NVRAM。最后,分配例程在1080處退出。
在1074處調(diào)用的用于消除硬盤(pán)驅(qū)動(dòng)器31的分段的例程始于任務(wù)1082并繼續(xù)至任務(wù)1094。首先在1084處測(cè)試硬盤(pán)驅(qū)動(dòng)器31以確定是否已用一種本技術(shù)專(zhuān)家所周知的硬盤(pán)驅(qū)動(dòng)器壓縮例程對(duì)它進(jìn)行了壓縮。
如果硬盤(pán)驅(qū)動(dòng)器31未被壓縮,則在1086處用本技術(shù)專(zhuān)家所周知的消除分段實(shí)用程序來(lái)消除整個(gè)硬盤(pán)驅(qū)動(dòng)器31的分段。此后,上述例程在1088處返回以便在1090處重新開(kāi)始分配例程的分配部分。
如果硬盤(pán)驅(qū)動(dòng)器31是壓縮的,則在1092處將其壓縮部分減至最少。此后,在1094處用本技術(shù)專(zhuān)家所周知的消除分段實(shí)用程序來(lái)消除硬盤(pán)驅(qū)動(dòng)器31未被壓縮的部分的分段。然后,所述例程在1088處返回以便在1090處重新開(kāi)始分配例程的分配部分。
在1070處調(diào)用的用于增加硬盤(pán)驅(qū)動(dòng)器31上可用空間的例程始于任務(wù)1100并繼續(xù)至任務(wù)1110。首先,在1102處測(cè)試硬盤(pán)驅(qū)動(dòng)器31以確定是否用一種本技術(shù)專(zhuān)家所周知的硬盤(pán)驅(qū)動(dòng)器壓縮例程對(duì)它進(jìn)行了壓縮。
如果硬盤(pán)驅(qū)動(dòng)器31未被壓縮,則它沒(méi)有可用于保存文件的足夠空間,因而在1104處顯示一報(bào)文以通知用戶(hù)使用掛起或繼續(xù)特征,用戶(hù)必須增加額外的硬盤(pán)驅(qū)動(dòng)器容量或者從硬盤(pán)驅(qū)動(dòng)器31上刪除一些文件。
如果硬盤(pán)驅(qū)動(dòng)器31是壓縮的,則如果可能的話(huà),在1108處增加其未被壓縮部分的長(zhǎng)度。此后,所述例程在1110處返回以便在1090處重新開(kāi)始分配例程的分配部分。
參照?qǐng)D17,它顯示了退出待機(jī)狀態(tài)的例程,該例程始于1120處。從概念上講,計(jì)算機(jī)系統(tǒng)在退出待機(jī)狀態(tài)152時(shí)會(huì)反向改變系統(tǒng)從正常操作狀態(tài)150轉(zhuǎn)換至待機(jī)狀態(tài)152時(shí)所產(chǎn)生的變化。簡(jiǎn)要地說(shuō),計(jì)算機(jī)系統(tǒng)在退出待機(jī)狀態(tài)152時(shí)會(huì)作下列工作恢復(fù)視頻信號(hào);使LED23發(fā)光;使硬盤(pán)驅(qū)動(dòng)器31內(nèi)的硬盤(pán)起轉(zhuǎn);恢復(fù)系統(tǒng)時(shí)鐘;禁止APM CPU空閑調(diào)用,因此,來(lái)自APM驅(qū)動(dòng)器的CPU空閑調(diào)用不再會(huì)使CPU40停機(jī);以及清除指示計(jì)算機(jī)系統(tǒng)10處于待機(jī)狀態(tài)152的標(biāo)記。
首先,所述例程在1122處測(cè)試是否在計(jì)算機(jī)系統(tǒng)進(jìn)入待機(jī)狀態(tài)152時(shí)產(chǎn)生了一檢查點(diǎn)(Cheekpoint)。如果是這樣的話(huà),則在1124處清除檢查點(diǎn)采用位以表明該檢查點(diǎn)不再有效。在本特定的實(shí)施例中,當(dāng)計(jì)算機(jī)系統(tǒng)退出待機(jī)時(shí),該檢查點(diǎn)會(huì)失效。如果計(jì)算機(jī)系統(tǒng)在處于待機(jī)狀態(tài)時(shí)失效,則檢查點(diǎn)數(shù)據(jù)只用于使該系統(tǒng)繼續(xù),這是因?yàn)?,多?shù)系統(tǒng)都使用硬盤(pán)驅(qū)動(dòng)器上的虛擬交換文件,并且,從該檢查點(diǎn)數(shù)據(jù)的繼續(xù)工作會(huì)將機(jī)器置成這樣的狀態(tài),在這種狀態(tài)下,上述交換文件完全不同于作為檢查點(diǎn)數(shù)據(jù)而存儲(chǔ)起來(lái)的系統(tǒng)狀態(tài)所預(yù)期的交換文件。另外,可在下一次磁盤(pán)存取之后使檢查點(diǎn)數(shù)據(jù)失效。此外,在系統(tǒng)從檢查點(diǎn)數(shù)據(jù)繼續(xù)時(shí),可以在磁盤(pán)存取一個(gè)可能使計(jì)算機(jī)系統(tǒng)出現(xiàn)問(wèn)題的文件之后使檢查點(diǎn)失效。再有,如果用戶(hù)理解從檢查點(diǎn)數(shù)據(jù)的繼續(xù)工作可能使硬盤(pán)驅(qū)動(dòng)器31上的部分或全部數(shù)據(jù)丟失,則用戶(hù)可以隨時(shí)使用檢查點(diǎn)數(shù)據(jù)。
此后并且如果未采用檢查點(diǎn),則CPU40在1126處命令微控制器U2作下列工作(i)使視頻控制器56再次開(kāi)始生成視頻信號(hào);(ii)使時(shí)鐘合成器906恢復(fù)較高的系統(tǒng)時(shí)鐘頻率(25MHz或33MHz);以及(iii)使LED33發(fā)光。然后,CPU40在1128處將適當(dāng)?shù)闹祵?xiě)至固定盤(pán)控制器86以使硬盤(pán)驅(qū)動(dòng)器31的硬盤(pán)開(kāi)始旋轉(zhuǎn)。隨后,在1130處禁止APM CPU空調(diào)用,因此CPU不會(huì)停機(jī)。最后,在1132處清除待機(jī)標(biāo)志(Standby Flag),這表示計(jì)算機(jī)系統(tǒng)10處于正常操作狀態(tài)150,并且,所說(shuō)的例程在1140處返回調(diào)用程序。
參照?qǐng)D18,它顯示了進(jìn)入待機(jī)狀態(tài)例程,該例程始于1140。簡(jiǎn)要地說(shuō),計(jì)算機(jī)系統(tǒng)在進(jìn)入待機(jī)狀態(tài)152時(shí)會(huì)做下列工作斷開(kāi)視頻信號(hào);使LED23閃亮;使硬盤(pán)驅(qū)動(dòng)器31內(nèi)的硬盤(pán)停轉(zhuǎn);減慢系統(tǒng)時(shí)鐘;使APM CPU空調(diào)用生效,因此,來(lái)自APM驅(qū)動(dòng)程序的CPU空調(diào)用會(huì)使CPU40停機(jī);以及設(shè)置指示計(jì)算機(jī)系統(tǒng)10處于待機(jī)狀態(tài)152的標(biāo)志。
首先,上述例程在1142處測(cè)試是否采用了一檢查點(diǎn)。如果是,就在1144處執(zhí)行掛起例程的大部分內(nèi)容,以便將計(jì)算機(jī)系統(tǒng)10的狀態(tài)存儲(chǔ)到硬盤(pán)驅(qū)動(dòng)器31。本實(shí)施例中,在計(jì)算機(jī)系統(tǒng)進(jìn)行待機(jī)時(shí)采用檢查點(diǎn)。另外,可按與圖17有關(guān)的內(nèi)容中所討論的注意事項(xiàng)來(lái)周期性地采用檢查點(diǎn)并用該檢查點(diǎn)使計(jì)算機(jī)系統(tǒng)繼續(xù)。然后,在1146處執(zhí)行足夠的繼續(xù)例程以便從1144處產(chǎn)生的局部掛起中退出。此后,在1148處設(shè)置檢查點(diǎn)采用位以表示采用了有效的檢查點(diǎn)。在本實(shí)施例中,僅在處于待機(jī)狀態(tài)152時(shí)系統(tǒng)出現(xiàn)故障的情況下才使用檢查點(diǎn)數(shù)據(jù)。在這種情況下,系統(tǒng)在引導(dǎo)時(shí)會(huì)從所保存的檢查點(diǎn)處繼續(xù)。
理想地,上述檢查點(diǎn)應(yīng)對(duì)計(jì)算機(jī)系統(tǒng)是完全透明的。因此,如果產(chǎn)生硬件中斷以防數(shù)據(jù)丟失,則應(yīng)使檢查點(diǎn)失效。另外,同正常掛起一樣,可以忽略任何硬件中斷。
此后并且如果未采用檢查點(diǎn),則CPU40在1150處命令微控制器做下列工作(i)令視頻控制器56停止生成視頻信號(hào);(ii)使時(shí)鐘合成器906將系統(tǒng)時(shí)鐘從其高頻(25MHz或33MHz)減慢至8MHz;以及(iii)使LED23閃亮。然后,CPU40在1152處將適當(dāng)?shù)闹祵?xiě)至固定盤(pán)控制器86以使硬盤(pán)驅(qū)動(dòng)器31內(nèi)的硬盤(pán)停轉(zhuǎn)。隨后,在1154處使APM CPU空調(diào)用生效,因此,來(lái)自APM驅(qū)動(dòng)程序的CPU空調(diào)用會(huì)使CPU40停機(jī)。最后,在1156處設(shè)置待機(jī)標(biāo)志,這表示計(jì)算機(jī)系統(tǒng)處于待機(jī)狀態(tài)152,并且,所說(shuō)的例程在1158處返回調(diào)用程序。
盡管通過(guò)本發(fā)明的最佳實(shí)施例說(shuō)明了本發(fā)明,并且是較詳細(xì)地說(shuō)明這些實(shí)施例,但是,本申請(qǐng)人并不想以任何方式把后附的權(quán)利要求范圍局限于上述細(xì)節(jié)。本技術(shù)的專(zhuān)家將非常清楚其它的優(yōu)點(diǎn)和改進(jìn)很容易實(shí)現(xiàn)。例如,由電源管理電路106所執(zhí)行的多種任務(wù),如對(duì)一個(gè)或多個(gè)中斷的硬件監(jiān)控等,可內(nèi)裝在系統(tǒng)芯片內(nèi)。所以,從更廣泛的方面來(lái)說(shuō),本發(fā)明并不局限于所顯示和說(shuō)明的特定細(xì)節(jié)、代表性的設(shè)備與方法以及示意性的實(shí)例。因此,在不脫離本申請(qǐng)人之發(fā)明的總體概念的精神和范圍的情況下,可以與以上細(xì)節(jié)不一致。
權(quán)利要求
1.一種計(jì)算機(jī)系統(tǒng),包括(a)能執(zhí)行應(yīng)用程序代碼和BIOS代碼的CPU;(b)一電源管理處理器,它與所述CPU作電路通連;(c)一調(diào)制解調(diào)器,它通過(guò)振鈴信號(hào)線(xiàn)及所述CPU與所述電源管理處理器作電路通連,此調(diào)制解調(diào)器用于和電話(huà)線(xiàn)作電路通連,其特征在于,它可以響應(yīng)出現(xiàn)在所述電話(huà)線(xiàn)上的電話(huà)振鈴信號(hào)而在所述振鈴信號(hào)線(xiàn)上產(chǎn)生一振鈴信號(hào);(d)一電源,它與上述CPU及電源管理處理器作電路通連并包括用于響應(yīng)所述電源管理處理器而有選擇地從外部電源將系統(tǒng)電力提供給所述CPU的電路,其特征在于,它具有第一供電狀態(tài)和第二供電狀態(tài)并帶有將輔助電力提供給所述電源管理處理器的電路;其中,所述第一供電狀態(tài)的特征是所述電源從外部電源將系統(tǒng)電力提供給所述CPU、將輔助電力提供給所述電源管理處理器;所述第二供電狀態(tài)的特征是所述電源不從所述外部電源將系統(tǒng)電力供給所述CPU,但從所述外部電源將輔助電力提供給所述電源管理處理器;其中(1)所述電源管理處理器能響應(yīng)多個(gè)第一預(yù)定條件中的至少一個(gè)而使所述電源從所述第一供電狀態(tài)轉(zhuǎn)換至所述第二供電狀態(tài);(2)所述電源管理處理器能響應(yīng)多個(gè)第二預(yù)定條件中的至少一個(gè)而使所述電源從所述第二供電狀態(tài)轉(zhuǎn)換至所述第一供電狀態(tài);以及(3)所述多個(gè)第二預(yù)定條件中的一個(gè)包括從所述調(diào)制解調(diào)器通向所述電源管理處理器的振鈴信號(hào)。
2.如權(quán)利要求1所述的計(jì)算機(jī)系統(tǒng),其特征在于(a)所說(shuō)的調(diào)制解調(diào)器是一內(nèi)部調(diào)制解調(diào)器;(b)所說(shuō)的第一供電狀態(tài)的特征是所述電源從所述外部電源將系統(tǒng)電力提供給所述CPU與所述調(diào)制解調(diào)器,將輔助電力提供給所述電源管理處理器;以及(c)所說(shuō)的第二供電狀態(tài)的特征是所述電源不從所述外部電源將系統(tǒng)電力提供給所述CPU,但從所述外部電源將輔助電力提供給所述電源管理處理器。
3.如權(quán)利要求1所述的計(jì)算機(jī)系統(tǒng),其特征在于,所述電源管理處理器還分析所述調(diào)制解調(diào)器所產(chǎn)生的振鈴信號(hào)的頻率,并且,所述多個(gè)第二預(yù)定條件中的一個(gè)包括將一頻率在預(yù)定范圍內(nèi)的振鈴信號(hào)從所述調(diào)制解調(diào)器傳輸至所述電源管理處理器。
4.如權(quán)利要求1所述的計(jì)算機(jī)系統(tǒng),其特征在于,所述CPU響應(yīng)所述電源管理處理器使所述電源從所述第二供電狀態(tài)轉(zhuǎn)換成所述第一供電狀態(tài)而查詢(xún)所述調(diào)制解調(diào)器是否檢測(cè)到了振鈴信號(hào),并且,所述CPU響應(yīng)所述調(diào)制解調(diào)器未檢測(cè)到振鈴信號(hào)而使得所述電源管理處理器將所述電源從所述第一供電狀態(tài)轉(zhuǎn)換至所述第二供電狀態(tài)。
5.如權(quán)利要求1所述的計(jì)算機(jī)系統(tǒng),其特征在于(a)所述電源管理處理器還分析所述調(diào)制解調(diào)器所產(chǎn)生的振鈴信號(hào)的頻率,并且,所述多個(gè)第二預(yù)定條件中的一個(gè)包括一頻率在預(yù)定范圍內(nèi)的振鈴信號(hào)從所述調(diào)制解調(diào)器傳輸至所述電源管理處理器;以及(b)所述CPU響應(yīng)所述電源管理處理器使所述電源從所述第二供電狀態(tài)轉(zhuǎn)換成所述第一供電狀態(tài)而查詢(xún)所述調(diào)制解調(diào)器是否檢測(cè)到了振鈴信號(hào),并且,所述CPU響應(yīng)所述調(diào)制解調(diào)器未檢測(cè)到振鈴信號(hào)而使得所述電源管理處理器將所述電源從所述第一供電狀態(tài)轉(zhuǎn)換至所述第二供電狀態(tài)。
全文摘要
一種計(jì)算機(jī)系統(tǒng),包括彼此作電路通連的CPU、電源管理處理器、調(diào)制解調(diào)器以及電源。電源管理處理器控制電源供給CPU的電力的調(diào)節(jié)。電源管理處理器響應(yīng)由它檢測(cè)到的頻率在預(yù)定范圍內(nèi)的振鈴信號(hào)而使電源將穩(wěn)定的電力供給計(jì)算機(jī)系統(tǒng)。此后,CPU通過(guò)查詢(xún)調(diào)制解調(diào)器是否也檢測(cè)到了振鈴來(lái)證實(shí)是否有振鈴信號(hào)存在。如果有,則使計(jì)算機(jī)保持在通電狀態(tài)。如果沒(méi)有,則CPU讓電源管理控制器使電源停止提供穩(wěn)定的電力。
文檔編號(hào)H04M11/00GK1144927SQ95116820
公開(kāi)日1997年3月12日 申請(qǐng)日期1995年8月31日 優(yōu)先權(quán)日1994年9月7日
發(fā)明者D·T·克朗普, S·T·彭科斯特, P·H·本森 申請(qǐng)人:國(guó)際商業(yè)機(jī)器公司
網(wǎng)友詢(xún)問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1