專利名稱:具有多級功率管理的臺式計(jì)算機(jī)系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明一般地涉及到計(jì)算機(jī)系統(tǒng)體系結(jié)構(gòu),具體地涉及到一種臺式計(jì)算機(jī)系統(tǒng),這種臺式計(jì)算機(jī)系統(tǒng)除了具有常規(guī)的運(yùn)行狀態(tài)和斷電狀態(tài)外,還具有利用標(biāo)準(zhǔn)部件低成本實(shí)現(xiàn)的兩種準(zhǔn)備狀態(tài);一種實(shí)際上不需要功率的暫停狀態(tài)和一種只需要很少功率的備用狀態(tài)。
在技術(shù)中個人計(jì)算機(jī)是眾所周知的。一般的個人計(jì)算機(jī),特別是IBM的個人計(jì)算機(jī),獲得了廣泛的利用,為當(dāng)今現(xiàn)代社會的許多部門提供計(jì)算機(jī)能力。個人計(jì)算機(jī)一般定義為臺式、落地式,或便攜式微機(jī),其系統(tǒng)具有單個中央處理機(jī)(CPU)和關(guān)聯(lián)的易失的和不易失的存儲器,包括全部的RAM和BIOS ROM、還具有系統(tǒng)監(jiān)視器、鍵盤、一個或多個軟盤驅(qū)動器、固定磁盤驅(qū)動器(也稱為“硬盤”)、所謂的“鼠標(biāo)器”指點(diǎn)器和可選的打印機(jī)。這些系統(tǒng)的一個明顯特點(diǎn)是使用母板或系統(tǒng)平面來把各個部件在電氣上連接到一起。這些系統(tǒng)主要設(shè)計(jì)為向單用戶提供獨(dú)立的計(jì)算能力,并允許個人或小公司以低的價(jià)格購置。這種個人計(jì)算機(jī)系統(tǒng)的例子是IBM PC-AT和IBM PS/1。
個人計(jì)算機(jī)系統(tǒng)通常用來運(yùn)行軟件以完成各種活動,如字處理、通過電子表格的數(shù)據(jù)操作、數(shù)據(jù)庫里數(shù)據(jù)的收集和確定關(guān)系、圖形顯示和利用系統(tǒng)設(shè)計(jì)軟件完成電或機(jī)械系統(tǒng)的設(shè)計(jì)等等。
IBM的PS/1和PS/2是臺式計(jì)算機(jī),設(shè)計(jì)成可用于單一地點(diǎn)。例如,今天的社會里許多個人在他們的桌子上或房間里擁有臺式計(jì)算機(jī),專用于各種計(jì)算機(jī)輔助任務(wù)。臺式計(jì)算機(jī)通常設(shè)置在一個地方,在不移動計(jì)算機(jī)的情況下由一個或多個用戶使用。
臺式計(jì)算機(jī)系統(tǒng)可分為連網(wǎng)的和不連網(wǎng)的計(jì)算機(jī)系統(tǒng)。連網(wǎng)的計(jì)算機(jī)系統(tǒng)是一個更大的計(jì)算機(jī)系統(tǒng)里的一部分,通過局域網(wǎng)(LAN)或廣域網(wǎng)(WAN)和其它的計(jì)算機(jī)或服務(wù)器連接起來。通過專門的接口和協(xié)議,這些網(wǎng)絡(luò)允許計(jì)算機(jī)以一種有效的方式共享數(shù)據(jù)和程序。用于商業(yè)上的臺式計(jì)算機(jī)系統(tǒng)一般是連網(wǎng)的計(jì)算機(jī)系統(tǒng)。另一方面,不連網(wǎng)的計(jì)算機(jī)不和任何其它計(jì)算機(jī)連接。從一臺計(jì)算機(jī)傳送數(shù)據(jù)到另一臺計(jì)算機(jī)時,在一個地方把數(shù)據(jù)經(jīng)計(jì)算機(jī)寫入到軟盤上再在另一個地方把數(shù)據(jù)經(jīng)計(jì)算機(jī)讀出來。用在家庭中的臺式計(jì)算機(jī)一般是不連網(wǎng)的計(jì)算機(jī)。
和設(shè)計(jì)為保持在單一地點(diǎn)的臺式計(jì)算機(jī)不同,便攜式計(jì)算機(jī)還稱為“膝上計(jì)算機(jī)”或“筆記本計(jì)算機(jī)”,這決定于它們的尺寸如IBM的PS/2 L40 Think Pad,設(shè)計(jì)成可由用戶攜帶、可用于任何地點(diǎn)。例如,一個推銷員可在推銷員的桌子上利用筆記本計(jì)算機(jī)產(chǎn)生一份計(jì)劃推銷報(bào)告。如果該推銷員從他的辦公桌上被喚去參加會議,推銷員可暫停當(dāng)前的任務(wù),拿起筆記本計(jì)算機(jī),帶著它去參加會議。到開會時,推銷員可拿出計(jì)算機(jī),繼續(xù)執(zhí)行軟件,在會議期間進(jìn)行記錄或提取信息。作為另一個例子,學(xué)生上課前可在家用筆記本計(jì)算機(jī)上寫學(xué)期論文,上課時學(xué)生可把它帶去記筆記。
便攜式計(jì)算機(jī)一般是不連網(wǎng)的計(jì)算機(jī),盡管在辦公室使用它時有些用戶會把他的便攜式計(jì)算機(jī)連接到辦公室的LAN上。
便攜式計(jì)算機(jī)在一些方面不同于臺式計(jì)算機(jī)。便攜式計(jì)算機(jī)通常由可充電電池供電。用戶利用墻上插座的電力對電池充電,使用計(jì)算機(jī)直到電池需要再充電為止,然后對電池再充電。當(dāng)電池在充電時,便攜式計(jì)算機(jī)不能搬動,計(jì)算機(jī)的搬動受到電源電纜長度的限制。這樣,在電池充分充完電前,正在對電池充電的計(jì)算機(jī)實(shí)際上失去了可攜帶性。和閃光燈或其它用電池供電的設(shè)備一樣,便攜式計(jì)算機(jī)消耗的功率越多,在電池需要重新充電前用戶可使用便攜式計(jì)算機(jī)的時間越短。于是,當(dāng)購買便攜式計(jì)算機(jī)時功率消耗是用戶考慮的一個因素,并且并不意外地,也是便攜式計(jì)算機(jī)工業(yè)的一個主要問題。所以,計(jì)算機(jī)工業(yè)花費(fèi)了大量的時間和金錢來設(shè)計(jì)使用越來越少的電功率的筆記本式計(jì)算機(jī)。
盡管如此,這是一種折衷;低功耗計(jì)算機(jī)采用較貴的低功率部件,這些低功率部件不能像更快速的高功率部件那樣快地執(zhí)行計(jì)算機(jī)命令。而且,除了采用更貴的部件外,便攜式系統(tǒng)一般采用很復(fù)雜的設(shè)計(jì),這更提高了便攜式計(jì)算機(jī)系統(tǒng)的成本。
作為比較,臺式計(jì)算機(jī)一般利用墻上插座的電力供電;臺式計(jì)算機(jī)不帶有會消耗殆盡的電池(除用于實(shí)時時鐘的非常小的電池之外,這種小電池?zé)o須再充電即可持續(xù)使用數(shù)年)。因此,臺式計(jì)算機(jī)可以使用更快速、高功率和較便宜的部件。簡言之,便攜式計(jì)算機(jī)使用較少的電功率,但其計(jì)算能力不如利用較大電功率的臺式計(jì)算機(jī)那么強(qiáng)大。
在當(dāng)今的能量意識社會里,存在著另一種聽任臺式計(jì)算機(jī)整天供電的簡單方法。一種替代法是從便攜式計(jì)算機(jī)里發(fā)現(xiàn)的技術(shù)。如果便攜式計(jì)算機(jī)在一定的時間間隔內(nèi)空閑不用,一般為幾分鐘,計(jì)算機(jī)將自動地停止固定磁盤存儲器里固定磁盤的旋轉(zhuǎn)和停止對計(jì)算機(jī)顯示器的供電。這兩種方法都可節(jié)省能源。
便攜式計(jì)算機(jī)還具有其它更復(fù)雜地節(jié)省電池能源的方法。如果系統(tǒng)在給定的時間周期內(nèi)空閑不用,某些便攜式計(jì)算機(jī)的設(shè)計(jì)開始關(guān)閉部件,并在再次通電恢復(fù)計(jì)算時不丟失數(shù)據(jù)。為了防止存儲丟失,這種便攜式計(jì)算機(jī)具有一種特殊的電池電路,它可對存儲器供電而不對CPU和其它的電路供電。這種特殊的電池電路增加印刷電路板的成本和復(fù)雜性,還增加系統(tǒng)部件的數(shù)量。另一種實(shí)現(xiàn)暫停/恢復(fù)功能的方法是采用稱之為“SL”家族的特殊CPU家族中的一種CPU。SL類CPU是按不同方式設(shè)計(jì)的,并具有專門的命令以允許設(shè)計(jì)者方便地實(shí)現(xiàn)電池功率節(jié)約功能。但是,SL家族更加昂貴,而且SL家族的處理機(jī)在計(jì)算能力上一般不如標(biāo)準(zhǔn)處理機(jī)那么強(qiáng)大。此外,便攜式計(jì)算機(jī)通常具有昂貴的“陰影”寄存器來節(jié)省在典型計(jì)算機(jī)系統(tǒng)里遇到的多個只寫寄存器。這些特殊的性能增加了印刷電路板設(shè)計(jì)的復(fù)雜性和成本,并且增加了計(jì)算機(jī)系統(tǒng)的部件數(shù)量。況且,普遍認(rèn)為不可能省掉非SL的80386或80486。
由于便攜式計(jì)算機(jī)和臺式計(jì)算機(jī)之間的許多差異,用戶料想膝上和筆記本計(jì)算機(jī)的價(jià)格要高于臺式計(jì)算機(jī)。用戶期待臺式計(jì)算機(jī)有強(qiáng)大的計(jì)算能力,而且非常便宜。因此,如果采用便攜式計(jì)算機(jī)所使用的昂貴和復(fù)雜技術(shù)而實(shí)現(xiàn)暫停/恢復(fù)方案,臺式計(jì)算機(jī)將會太貴,以致于不能在臺式計(jì)算機(jī)市場上銷售。因此要在臺式計(jì)算機(jī)里實(shí)現(xiàn)能源節(jié)約,一般都利用現(xiàn)成的部件,或者采用至少和臺式系統(tǒng)中所用的標(biāo)準(zhǔn)部件具有同樣功效的較新部件。
另外,連網(wǎng)的和不連網(wǎng)的臺式系統(tǒng)具有不同的要求。有些LAN協(xié)議要求計(jì)算機(jī)系統(tǒng)里的LAN硬件保持供電,否則的話網(wǎng)絡(luò)會失效。不連網(wǎng)的臺式系統(tǒng)明顯地不具備LAN硬件,因此對于不連網(wǎng)的系統(tǒng)LAN失效不成為問題。
因此希望提供一種具有類似于或優(yōu)越于便攜式系統(tǒng)的功率管理特性的臺式計(jì)算機(jī)系統(tǒng)。
同時還希望提供具有功率管理能力,又不必采用便攜式計(jì)算機(jī)系統(tǒng)中類似特性的較復(fù)雜設(shè)計(jì)和較昂貴部件的臺式系統(tǒng)。
同時也希望保留非SL類80386或80486的狀態(tài),并且不必采用便攜式計(jì)算機(jī)系統(tǒng)中類似特性的較復(fù)雜設(shè)計(jì)和較昂貴部件。
EPA(美國環(huán)境保護(hù)署)已經(jīng)頒布有效利用能源計(jì)算機(jī)方針。EPA對要求被看作是“綠色”即有效利用能源的計(jì)算機(jī)系統(tǒng)制定了EPA“能源之星”條件。一臺計(jì)算機(jī)可以標(biāo)以“EPA能源之星”標(biāo)簽,如果它具有功耗少于30瓦的工作模式,或者監(jiān)視器功耗少于30瓦,或者計(jì)算機(jī)和監(jiān)視器的功耗各少于30瓦。EPA和各廠家的“諒解備忘錄”陳述了這個功率要求。通常臺式計(jì)算機(jī)不是按這些能力設(shè)計(jì)的。
因此希望提供能滿足“綠色”標(biāo)準(zhǔn)的臺式計(jì)算機(jī)。
同時還希望考慮能源節(jié)約形式的計(jì)算機(jī)系統(tǒng)是連網(wǎng)的還是不連網(wǎng)的。
當(dāng)計(jì)算機(jī)接通電源時,它們通常通過“引導(dǎo)”過程。當(dāng)計(jì)算機(jī)引導(dǎo)時,它首先執(zhí)行通電自檢(POST),其包括運(yùn)行不同的測試來保證計(jì)算機(jī)功能正常。在執(zhí)行POST之后,計(jì)算機(jī)通常裝入操作系統(tǒng)(OS),比如IBM的PC-DOS。在裝入OS后,許多計(jì)算機(jī)裝入圖形用戶接口(GUI),比如微軟公司的Windows。然后,用戶必須打開應(yīng)用軟件而且裝入工作文件。這個整個過程需要相當(dāng)?shù)臅r間-在一些情況下達(dá)數(shù)分鐘。
盡管用戶等待計(jì)算機(jī)系統(tǒng)進(jìn)行引導(dǎo)、裝入OS、裝入GUI和裝入應(yīng)用軟件的幾分鐘仿佛不象許多時間,但是這段時間是非生產(chǎn)性的和使人煩惱的;而且這段時間使得通過關(guān)閉計(jì)算機(jī)來節(jié)省能源成為非常不方便,實(shí)際上阻止用戶節(jié)約能源,也即,這種使用代價(jià)使得人工功率管理方案成為不現(xiàn)實(shí)。
因此希望提供一種具有功率管理能力又不帶來明顯的使用代價(jià)的臺式計(jì)算機(jī)系統(tǒng)。也就是希望提供一種計(jì)算機(jī)系統(tǒng),它具有能源節(jié)省方式,并且以后能在可接受的時間內(nèi)得到恢復(fù),這個可接受的時間在任何情況下都短于再啟動計(jì)算機(jī)系統(tǒng)所需的時間。
偶而,當(dāng)一個應(yīng)用程序正在計(jì)算機(jī)上執(zhí)行時,用戶可能放任不管臺式計(jì)算機(jī)。例如,當(dāng)用戶正在同時使用字處理程序和棋盤式分析表程序編寫銷售報(bào)告時,電話響了或用戶召離辦公桌,計(jì)算機(jī)將會繼續(xù)執(zhí)行應(yīng)用軟件。任何有效的功率管理方法應(yīng)該能夠節(jié)約能源,并且同時防止用戶丟失數(shù)據(jù)。例如,在執(zhí)行應(yīng)用程序的中間,如果計(jì)算機(jī)自己掉電,將會丟失數(shù)據(jù)。而且,目前的應(yīng)用軟件不能自動地保留它們的數(shù)據(jù)以便在中斷處恢復(fù)運(yùn)行。
因此希望提供一種可以使正在執(zhí)行應(yīng)用程序的系統(tǒng)進(jìn)入功率節(jié)省方式的計(jì)算機(jī)系統(tǒng)。并且進(jìn)而希望這種功率節(jié)省方式對應(yīng)用軟件是透明的。
有時臺式計(jì)算機(jī)的用戶可能知道是否這臺系統(tǒng)在一段時間內(nèi)不再需要。希望允許用戶能夠手動地使得計(jì)算機(jī)進(jìn)行功率節(jié)省方式以節(jié)省計(jì)算機(jī)可能使用的能源,同時等待足夠長的空閑時間再做出決定,保證進(jìn)入能源節(jié)省方式。
因此,希望允許用戶可手動地使得臺式計(jì)算機(jī)進(jìn)入功率節(jié)省方式,無須首先從應(yīng)用程序退出,并且能夠恢復(fù)使用應(yīng)用程序,仿佛計(jì)算機(jī)未曾關(guān)掉過。
典型的便攜式計(jì)算機(jī)具有控制通向計(jì)算機(jī)電源的開關(guān),還具有實(shí)現(xiàn)暫停/恢復(fù)功能的開關(guān)。這可能引起用戶的困惑并增加便攜式的成本和復(fù)雜性。因此,希望提供一種具有上述功率節(jié)省能力又不采用多個按鈕的臺式計(jì)算機(jī)系統(tǒng)。
按照本發(fā)明的計(jì)算機(jī)系統(tǒng)設(shè)計(jì)為具有四種狀態(tài)常規(guī)的運(yùn)行狀態(tài)、備用狀態(tài)、暫停狀態(tài)和斷電狀態(tài)。
本發(fā)明的計(jì)算機(jī)系統(tǒng)的常規(guī)運(yùn)行狀態(tài)實(shí)際上等同于任何普通臺式計(jì)算機(jī)的常規(guī)運(yùn)行狀態(tài)。用戶可使用應(yīng)用程序并且基本上象對待其它計(jì)算機(jī)那樣對待本計(jì)算機(jī)。一個差別是存在一個功率管理驅(qū)動程序,它在后臺運(yùn)行(在BIOS和操作系統(tǒng)上),對用戶是透明的。操作系統(tǒng)(OS)上的功率管理驅(qū)動程序部分是由Intel和Microsoft寫上的先進(jìn)功率管理(APM)預(yù)編程接口,它現(xiàn)在被寫在大部分操作系統(tǒng)上以運(yùn)行在Intel的80×86處理機(jī)族上。在BIOS上的功率管理驅(qū)動程序部分(APM BIOS)和本發(fā)明是相同的,并和APM OS驅(qū)動程序通信。APM OS驅(qū)動程序和APM BIOS例行程序一起控制計(jì)算機(jī)轉(zhuǎn)換入和轉(zhuǎn)換出其它三個狀態(tài)。
第二個狀態(tài),備用狀態(tài)使用少于常規(guī)運(yùn)行狀態(tài)的功率,并許可任何應(yīng)用程序進(jìn)行執(zhí)行,如它們在其它情況下也要執(zhí)行一樣。一般,備用狀態(tài)的能源節(jié)省是通過把設(shè)備置于它們各自的低功率狀態(tài)來達(dá)到的。例如,在備用狀態(tài)下通過停止硬驅(qū)動器里固定磁盤的旋轉(zhuǎn)和通過停止生成視頻信號節(jié)約能源。首先,在常規(guī)操作狀態(tài)下,固定磁盤存儲設(shè)備里的固定磁盤通常按每分鐘3600轉(zhuǎn)(RPM)不斷地旋轉(zhuǎn)。在備用狀態(tài)下,固定磁盤控制器使得固定磁盤存儲設(shè)備里的固定磁盤停止旋轉(zhuǎn),這樣可節(jié)省當(dāng)固定磁盤旋轉(zhuǎn)時固定磁盤存儲設(shè)備里的馬達(dá)通常所消耗的電能。
第二,在常規(guī)的運(yùn)行狀態(tài)下,計(jì)算機(jī)系統(tǒng)的視頻控制器不斷地生成相應(yīng)于可在視頻顯示終端上看到的圖象的視頻信號。在備用狀態(tài)下視頻控制器停止生成視頻信號,其中HSYNC(水平同步)、VSYNC(垂直同步)、R、G和B驅(qū)動約為直流0.00伏,因此節(jié)約通常由視頻控制器消耗的能源。注意某些系統(tǒng)具有“屏幕節(jié)約器”,它使得屏幕變暗來防止視頻顯示終端前表面的熒光物質(zhì)燒毀。在大多數(shù)這種系統(tǒng)中,視頻控制器仍舊產(chǎn)生視頻信號,它僅產(chǎn)生對應(yīng)于暗色屏幕的視頻信號。這樣,運(yùn)行屏幕節(jié)約器的計(jì)算機(jī)系統(tǒng)仍然消耗產(chǎn)生視頻信號所需的功率,因此,不處于能源節(jié)約狀態(tài)。
上面的例子僅僅是說明性的,并不意味著是限定的。換句話說,其它的設(shè)備可以設(shè)置到它們的低功率狀態(tài)。例如,VESA類型監(jiān)視器當(dāng)HSYNC和VSYNC接近于直流0.00伏時自己會失掉。在備用狀態(tài)下HSYNC和VSYNC接近直流0.00伏。這樣,VESA類型監(jiān)視器會和本發(fā)明的系統(tǒng)一起進(jìn)入備用狀態(tài)。當(dāng)系統(tǒng)退出備出狀態(tài),進(jìn)入常規(guī)運(yùn)行狀態(tài)時,VESA類型監(jiān)視器將進(jìn)入它的相應(yīng)常規(guī)功率狀態(tài)。作為另一個例子,CPU時鐘可在備用期間放慢或者停止。當(dāng)備用狀態(tài)退出時,CPU時鐘可以回到全速。
所有的臺式系統(tǒng)都能從備用狀態(tài)得到好處;但是,備用狀態(tài)對于需要保持供電的系統(tǒng),如大多數(shù)網(wǎng)絡(luò)計(jì)算機(jī)系統(tǒng),在節(jié)約能源上是最理想的。由于系統(tǒng)平面保持供電,LAN硬件不會因?yàn)檫@些事實(shí),即固定磁盤不再旋轉(zhuǎn)或視頻控制器不再產(chǎn)生視頻信號,而受到影響。同樣,執(zhí)行在計(jì)算機(jī)系統(tǒng)上的應(yīng)用軟件是不注意固定磁盤和視頻控制器的狀態(tài)的。如果一個應(yīng)用程序改變要顯示的圖象,應(yīng)用程序?qū)⒃谝曨l存儲器里做這個改變。一旦視頻控制器開始生成視頻信號,新的圖象將會顯示。另外,如果備用狀態(tài)下在計(jì)算機(jī)上執(zhí)行的應(yīng)用程序試圖訪問固定磁盤存儲設(shè)備,計(jì)算機(jī)系統(tǒng)將重新啟動固定磁盤的旋轉(zhuǎn)并且訪問固定磁盤存儲器裝置。整個進(jìn)程對于應(yīng)用程序和操作系統(tǒng)是透明的。
第三個狀態(tài)是暫停狀態(tài)。在暫停狀態(tài)下,計(jì)算機(jī)系統(tǒng)消耗非常少的功率。暫停的計(jì)算機(jī)消耗來自墻上電源插座上非常少的電能。唯一消耗的能量是來自計(jì)算機(jī)系統(tǒng)內(nèi)部電池上用來維持開關(guān)電路的微弱電能(當(dāng)系統(tǒng)沒有插在墻上電源插座里時)或者是來自電源的微弱電能(當(dāng)系統(tǒng)插上時)。
這種小功率使用是通過在把電源“關(guān)掉”前把計(jì)算機(jī)系統(tǒng)的狀態(tài)存入固定磁盤存儲設(shè)備實(shí)現(xiàn)的。為進(jìn)入暫停狀態(tài),計(jì)算機(jī)系統(tǒng)中斷任何執(zhí)行中的CPU代碼,并把對計(jì)算機(jī)的控制轉(zhuǎn)移給功率管理驅(qū)動程序。功率管理驅(qū)動程序查明計(jì)算機(jī)系統(tǒng)的狀態(tài),把計(jì)算機(jī)系統(tǒng)的狀態(tài)寫入固定磁盤存儲設(shè)備。CPU寄存器、CPU高速緩存、系統(tǒng)存儲器、系統(tǒng)高速緩存、視頻寄存器、視頻存儲器和其它設(shè)備寄存器的所有狀態(tài)都被寫進(jìn)固定磁盤。系統(tǒng)的整個狀態(tài)是按這種方式保留的,即它可在不使應(yīng)用程序受到中斷的影響下得到復(fù)原。計(jì)算機(jī)然后把數(shù)據(jù)寫進(jìn)非易失CMOS存儲器里表明系統(tǒng)被暫停。最后,計(jì)算機(jī)使得電源停止產(chǎn)生功率。計(jì)算機(jī)的整個狀態(tài)安全地保留在固定磁盤存儲設(shè)備里,系統(tǒng)電源現(xiàn)在被“關(guān)掉”,計(jì)算機(jī)現(xiàn)在僅從電源接收對開關(guān)電路供電的微弱穩(wěn)定功率。
暫停狀態(tài)對計(jì)算機(jī)系統(tǒng)是理想的,它可把所有的系統(tǒng)電源去掉,不會產(chǎn)生有害的后果??蓮臄嚯姞顟B(tài)恢復(fù)的不連網(wǎng)的和連網(wǎng)的計(jì)算機(jī)通常將是處于暫停狀態(tài)的。
第四個和最后的狀態(tài)是斷電狀態(tài)。在這個狀態(tài)下,電源停止向計(jì)算機(jī)系統(tǒng)提供穩(wěn)壓功率,但是計(jì)算機(jī)系統(tǒng)的狀態(tài)不被保留在固定磁盤里。斷電狀態(tài)實(shí)際上和以通常方式關(guān)掉的一般臺式計(jì)算機(jī)是完全一樣的。
從一個狀態(tài)到另一個狀態(tài)的切換是由功率管理驅(qū)動程序處理的,切換基本上取決于一個開關(guān)的閉合結(jié)果、一個信號器和兩個定時器不活動備用定時器和不活動暫停定時器。兩個定時器都計(jì)算何時沒有用戶活動,如鍵盤上鍵被按下、鼠標(biāo)器移動、鼠標(biāo)器按鈕被按下或硬盤驅(qū)動器活動。如上面概述的,當(dāng)不活動備用定時器期滿,系統(tǒng)進(jìn)入備用狀態(tài)。如上面概述的,當(dāng)不活動暫停定時器期滿,系統(tǒng)進(jìn)入暫停狀態(tài)。
通常,對不活動暫停定時器設(shè)置的時間周期會長于不活動備用定時器的時間周期。這樣,計(jì)算機(jī)一般首先從常規(guī)運(yùn)行狀態(tài)改變到備用狀態(tài)。然后,再經(jīng)過另一個不活動周期,計(jì)算機(jī)系統(tǒng)將進(jìn)入暫停狀態(tài)。不容許暫停狀態(tài)的連網(wǎng)系統(tǒng)的用戶可以選擇性地設(shè)置不活動暫停定時器使它永遠(yuǎn)不會期滿。
任何用戶活動重新設(shè)置兩個不活動定時器,這就防止在用戶運(yùn)用系統(tǒng)的同時計(jì)算機(jī)進(jìn)入備用狀態(tài)或暫停狀態(tài)中的一個。
如果系統(tǒng)處于備用狀態(tài),當(dāng)用戶移動鼠標(biāo)器或接觸鍵盤上的鍵,或者在CPU上執(zhí)行的代碼訪問硬驅(qū)動器,系統(tǒng)脫離備用狀態(tài)并改變到常規(guī)運(yùn)行狀態(tài)。這樣做時,視頻控制器開始重新產(chǎn)生視頻信號,固定磁盤開始重新旋轉(zhuǎn)。但是,如果系統(tǒng)處于暫停狀態(tài),而用戶移動鼠標(biāo)器或接觸鍵盤的鍵,系統(tǒng)將不會自動地變化到常規(guī)運(yùn)行狀態(tài)。
系統(tǒng)具有單個功率按鈕。這個按鈕可以用來接通計(jì)算機(jī)系統(tǒng)、暫停系統(tǒng)的狀態(tài)、復(fù)原系統(tǒng)的狀態(tài)和關(guān)掉系統(tǒng)電源。如果計(jì)算機(jī)處于常規(guī)運(yùn)行狀態(tài)或備用狀態(tài),當(dāng)用戶按下按鈕時,取決于標(biāo)志的值,計(jì)算機(jī)將變化到暫停狀態(tài)或者變化到斷電狀態(tài)。如果標(biāo)志指示當(dāng)按鈕按下時系統(tǒng)應(yīng)該暫停,系統(tǒng)將開始暫停工作,并且最終進(jìn)入暫停狀態(tài)。如果標(biāo)志指示當(dāng)按鈕按下時系統(tǒng)只應(yīng)該關(guān)閉,計(jì)算機(jī)僅僅會進(jìn)入斷電狀態(tài)。標(biāo)志可由用戶控制。在常規(guī)運(yùn)行狀態(tài)下,當(dāng)按鈕按下時,只有用戶可以確定系統(tǒng)應(yīng)該暫停還是斷電。同時,當(dāng)在操作系統(tǒng)上沒有功率管理驅(qū)動程序時,這個開關(guān)將如一個簡單的電源通/斷開關(guān)那樣運(yùn)行。
如果計(jì)算機(jī)系統(tǒng)處于斷電狀態(tài),當(dāng)按下功率開關(guān)時,系統(tǒng)將按常規(guī)方式啟動。如果計(jì)算機(jī)系統(tǒng)處于暫停狀態(tài)而功率開關(guān)被按下,然后操作員給出一個選擇或者按常規(guī)做法啟動系統(tǒng),或者把系統(tǒng)復(fù)原到它被暫停前的原來狀態(tài)。很明顯,如果用戶在使用應(yīng)用程序時暫停系統(tǒng),用戶將可能希望復(fù)原計(jì)算機(jī)系統(tǒng)的狀態(tài)。當(dāng)然,如果出于某些原因用戶希望重新啟動計(jì)算機(jī)并丟失暫停的系統(tǒng)狀態(tài),這種選擇是允許的。
當(dāng)從暫停狀態(tài)變化到常規(guī)運(yùn)行狀態(tài)時,系統(tǒng)應(yīng)該這樣復(fù)原計(jì)算機(jī)系統(tǒng)的狀態(tài),使得應(yīng)用程序不受到中斷的影響。CPU寄存器、CPU高速緩沖、系統(tǒng)存儲器、系統(tǒng)高速緩沖、視頻寄存器和視頻存儲器的狀態(tài)都應(yīng)該從固定磁盤中讀出。系統(tǒng)的全部狀態(tài)應(yīng)該被復(fù)原以允許應(yīng)用可在被中斷處繼續(xù)進(jìn)行。
暫停/恢復(fù)的使用比起通過關(guān)閉系統(tǒng)電源以節(jié)約能源并再接通系統(tǒng)可以大大節(jié)約時間。
而且備用電平和暫停電平兩者都滿足EPA的對“綠色”計(jì)算機(jī)的能源之星條件。
本發(fā)明的這些和其它優(yōu)點(diǎn)通過對本發(fā)明的詳細(xì)說明會變得更加清楚。
在本說明書附帶的并作為本發(fā)明書組成部分的附圖里本發(fā)明的實(shí)施例得到解釋,實(shí)施例和上面給出的對本發(fā)明的概述及下面給出的詳細(xì)說明一起用來舉例說明本發(fā)明的原理。
圖1是體現(xiàn)本發(fā)明的個人計(jì)算機(jī)的透視圖;
圖2是圖1個人計(jì)算機(jī)某些元件的分解透視圖,包括機(jī)箱、罩、機(jī)電直接存取存儲設(shè)備和平面板,并表示這些元件間的某些關(guān)系;
圖3是圖1和圖2中個人計(jì)算機(jī)某些元件的方塊圖;
圖4是本發(fā)明的計(jì)算機(jī)系統(tǒng)的狀態(tài)圖,顯示四種系統(tǒng)狀態(tài)正常、備用、暫停和斷電;
圖5是一個方塊圖,表示電源的有關(guān)部分;
圖6是為實(shí)現(xiàn)本發(fā)明的單開關(guān)暫停/恢復(fù)功能的所需硬件的電原理圖,并表示與其它圖的不同接口;
圖7是圖6中所示可編程陣列邏輯(PAL)設(shè)備U2的一個狀態(tài)機(jī)的狀態(tài)圖;
圖8是一個流程圖,一般地表示本發(fā)明的加電程序;
圖9是一個流程圖,詳細(xì)說明由APM大約每秒調(diào)用一次的監(jiān)督程序;
圖10是一個流程圖,說明本發(fā)明的暫停程序的細(xì)節(jié);
圖11是一個流程圖,說明本發(fā)明的引導(dǎo)程序的細(xì)節(jié);
圖12是一個流程圖,說明本發(fā)明的恢復(fù)程序的細(xì)節(jié);
圖13是一個流程圖,說明本發(fā)明的保留CPU狀態(tài)程序的細(xì)節(jié);
圖14是一個流程圖,說明本發(fā)明的復(fù)原CPU狀態(tài)程序的細(xì)節(jié);以及圖15是一個流程圖,說明本發(fā)明的保留8959狀態(tài)程序的細(xì)節(jié)。
當(dāng)在下文中通過參照表示本發(fā)明最佳實(shí)施例的附圖,本發(fā)明將得到更全面的描述時,在下述說明的開端處就應(yīng)該理解到,只要仍可達(dá)到本發(fā)明的有利結(jié)果,熟悉有關(guān)技術(shù)的人可以修改這里所描述的發(fā)明。相應(yīng)地,下述的說明認(rèn)為是對熟悉有關(guān)技術(shù)的人是一種概括性的、教學(xué)性的公開,而不是對本發(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ìn)功率管理預(yù)先編程接口應(yīng)用等方面。本應(yīng)用是寫給非常熟悉計(jì)算機(jī)系統(tǒng)設(shè)計(jì)的各個方面的人的。
現(xiàn)在更具體地參考附圖,在那里顯示包括本發(fā)明的微機(jī)系統(tǒng),其籠統(tǒng)地用10指示(圖1)。如上文中提到過的,計(jì)算機(jī)10可以包括相關(guān)的監(jiān)視器11、鍵盤12、鼠標(biāo)器13和打印機(jī)或繪圖機(jī)14。計(jì)算機(jī)10有一個罩15,罩由裝璜外表面構(gòu)件16(圖2)和內(nèi)屏蔽構(gòu)件18組成,內(nèi)屏蔽構(gòu)件18和機(jī)箱19確定一個封閉的和屏蔽的體積,用來安裝用于處理和存儲數(shù)字?jǐn)?shù)據(jù)的以電為動力的數(shù)據(jù)處理和存儲部件。至少某些這些部件安裝在一塊多層平面20或母板上,其安裝在機(jī)箱19上并提供一種裝置把計(jì)算機(jī)的部件在電氣上連接起來,這些部件包括上面確定的部件還包括其它有關(guān)的部件如軟盤驅(qū)動器、不同形式的直接存取存儲設(shè)備、輔助卡或板和類似物。如下文中更充分地指出那樣,在平面上采取措施以提供來往于微機(jī)操作部件的輸入/輸出信號的通道。
計(jì)算機(jī)系統(tǒng)具有電源17和電源按鈕21,即下文中的開關(guān)21。和普通系統(tǒng)里的常用電源開關(guān)不同,電源按鈕不切換進(jìn)出于電源17的非穩(wěn)壓線功率,這將在下面得到解釋。機(jī)箱具有在22處標(biāo)明的底座、在24處標(biāo)明的前面板和在25處標(biāo)明的后面板(圖2)。前面板至少劃定一個開槽(在圖示的形狀里,有四個開槽),用以安裝數(shù)據(jù)存儲設(shè)備,諸如用于磁盤或光盤的磁盤驅(qū)動器、磁帶后備機(jī)或類似物。在圖示的形狀里,準(zhǔn)備了一對上槽26、28和一對下槽29、30。一個上槽26適用于安裝首要尺寸(如所知的3.5英寸驅(qū)動器)的外圍設(shè)備驅(qū)動器,另一個上槽28適用于安裝從兩種尺寸(如3.5或5.25英寸)中選出的一種尺寸的驅(qū)動器,兩個下槽適用于容納一種尺寸(3.5英寸)的驅(qū)動器。在圖1的27處標(biāo)明的軟盤機(jī)是一種可移動媒體直接存取存儲設(shè)備,如眾所周知,它可容納插到其中的軟盤片并利用軟盤片接收、存貯和發(fā)送數(shù)據(jù)。硬盤機(jī)標(biāo)明在31處,它是固定媒體直接存取存儲設(shè)備,如眾所周知,可以存儲和發(fā)送數(shù)據(jù)。
在涉及到本發(fā)明的上述結(jié)構(gòu)之前,可能值得一般性概括地回顧個人計(jì)算機(jī)系統(tǒng)的操作。參照圖3,它表示一個個人計(jì)算機(jī)系統(tǒng)的方塊圖,說明比如按照本發(fā)明的系統(tǒng)10的計(jì)算機(jī)系統(tǒng)的各種部件,包括安裝在平面20上的部件、該平面和I/O槽的連接和個人計(jì)算機(jī)系統(tǒng)的其它硬件。和平面相連的是由微處理機(jī)構(gòu)成的系統(tǒng)處理機(jī)40,即CPU40,它通過高速CPU本地總線42和存儲器控制器46連接,其進(jìn)而連接到易失隨機(jī)存取存儲器(RAM)53。存儲器控制器46由存儲控制器48、地址多路轉(zhuǎn)換器50和數(shù)據(jù)緩沖器52組成。存儲器控制器46進(jìn)而和由4個RAM模塊54代表的隨機(jī)存取存儲器53連接。存儲器控制器48包括把來往于微處理機(jī)40的地址變換到RAM53的特定區(qū)域的邏輯。這個邏輯被用來回收以前由BIOS占用的RAM。由存儲器控制器48產(chǎn)生的還有ROM選擇信號(ROMSEL),它被用來允許或禁止ROM88。盡管任何合適的微處理機(jī)都可用作系統(tǒng)處理機(jī)40,一種適當(dāng)?shù)奈⑻幚頇C(jī)是INTEL出售的80486。Intel80486具有一個內(nèi)部高速緩存,這樣,任何是Intel 80486的CPU40將具有CPU高速緩存41。
盡管下文中本發(fā)明是特別參照圖3的系統(tǒng)方塊圖說明的,在下面說明的開端應(yīng)該理解到,這點(diǎn)是可預(yù)料的,即按照本發(fā)明的裝置和方法可以用于其它平面插件的硬件配置。例如,系統(tǒng)處理機(jī)40可以是Intel 80286或80386微處理機(jī)。如在本文中所采用的,提及80286、80386或80486,一般意味著從Intel得到的微處理機(jī)。但是,近來其它廠家已研制出能夠執(zhí)行Intel X86體系結(jié)構(gòu)指令集的微處理機(jī),所提到的這些術(shù)語的使用意味著包括能夠執(zhí)行該指令集的任何微處理機(jī)。如適當(dāng)領(lǐng)域中熟悉技術(shù)的人所知曉的那樣,早期的個人計(jì)算機(jī)在當(dāng)時一般使用流行的Intel 8088或8086微處理機(jī)作為系統(tǒng)處理機(jī)。這些處理機(jī)具有1兆字節(jié)存儲地址的能力。近年來,個人計(jì)算機(jī)通常采用高速的Intel 80286、80386和80486微處理機(jī),它們可運(yùn)行在虛擬方式和實(shí)址方式下來仿真較慢速的8086微處理機(jī),或者運(yùn)行在保護(hù)方式下,這種保護(hù)方式把某些型號的尋址范圍從1兆字節(jié)擴(kuò)充到4吉(GB)字節(jié)。本質(zhì)上,80286、80386和80486處理機(jī)的實(shí)址方式特性提供對寫入到8086和8088微處理機(jī)的軟件的硬件兼容性。在Intel家族里所敘述的處理機(jī)經(jīng)常由三位數(shù)字辯別,即只用全類型標(biāo)號的后三位數(shù)字來注明,如“486”。
現(xiàn)回到圖3,CPU本地總線42(包括數(shù)據(jù)、地址和控制部件)保證微處理機(jī)40,數(shù)字協(xié)處理器44、視頻控制器56、系統(tǒng)高速緩沖存儲器60和高速緩存控制器62的連接。視頻控制器56具有和它聯(lián)結(jié)的監(jiān)視器(或視頻顯示終端)57和視頻存儲器58。和CPU本地總線連接的還有緩沖器64。緩沖器64本身和速度較慢(和CPU本地總線42相比)的系統(tǒng)總線66連接,系統(tǒng)總線也包括地址、數(shù)據(jù)和控制部件。系統(tǒng)總線66在緩沖器64和一個更遠(yuǎn)的緩沖器68之間延伸。系統(tǒng)總線66進(jìn)一步和總線控制及定時裝置70和DMA單元71連接。DMA單元71由中央仲裁器82和DMA控制器72組成。輔助緩沖器74提供系統(tǒng)總線66和一個任選功能總線如工業(yè)標(biāo)準(zhǔn)體系結(jié)構(gòu)(ISA)總線76之間的接口。多個I/O槽78和總線76連接,以容納ISA適配器卡(圖中未示)。ISA適配器卡可插入地和I/O槽78連接,并可為系統(tǒng)10提供附加的I/O設(shè)備和存儲器。
仲裁控制總線80把DMA控制器72和中央仲裁器82與I/O槽78、軟盤適配器84和綜合驅(qū)動電子(IDE)固定磁盤控制器86連接起來。
盡管微計(jì)算機(jī)系統(tǒng)10表明帶有基本的4兆字節(jié)RAM模塊53,但可以理解,即如圖3所示通過增加任選的更高密度存儲模塊54可以互連更多的存儲器。僅出于說明的緣故,本發(fā)明是參照基本的四兆字節(jié)存儲模塊描述的。
在系統(tǒng)總線66和平面I/O總線90之間連接著鎖存緩沖器68。平面I/O總線分別包括地址、數(shù)據(jù)和控制部件。沿平面I/O總線90連接不同的I/O適配器和其它部件,如軟盤適配器84、IDE磁盤適配器86、中斷控制器92、RS-232適配器94、非易失性CMOS RAM96,在本文中也稱為NVRAM、CMOS實(shí)時時鐘98、并行適配器100、多個定時器102、只讀存儲器(ROM)88、8042 104和功率管理電路106。在104處表示的8042是從屬處理機(jī),它和鍵盤12和鼠標(biāo)器13接口。功率管理電路106示于圖6中,并在和圖6及圖7相應(yīng)的文字段落中得到更詳細(xì)的說明。只讀存儲器88包括BIOS,它用作為I/O設(shè)備和微處理機(jī)40操作系統(tǒng)之間的接口。存儲在ROM88里的BIOS可復(fù)制到RAM53里以減少BIOS的執(zhí)行時間。ROM88還進(jìn)而對存儲器控制器48作出響應(yīng)(通過ROMSEL信號)。如果存儲器控制器48允許ROM88工作,BIOS的執(zhí)行出自ROM。如果存儲器控制器48禁止ROM88工作,則ROM不對來自微處理機(jī)40的地址請求作出響應(yīng)(即BIOS的執(zhí)行出自RAM)。
實(shí)時時鐘98用于計(jì)算時刻,而NVRAM96用來存儲系統(tǒng)配置數(shù)據(jù)。也就是說,NVRAM96將含有描述系統(tǒng)現(xiàn)在配置狀況的值。例如,NVRAM96含有說明固定磁盤或軟盤片的容量、顯示器的類型、存儲器的總量、時間、日期等信息。特別重要的是,NVRAM將含有一種數(shù)據(jù)(可以是一位),它被存儲器控制器48用來確定BIOS是來自ROM還是來自RAM,并確定是否收回指定給BIOS RAM使用的RAM。而且,只要特定的配置程序,如SET配置程序,在執(zhí)行時,這些數(shù)據(jù)都存儲到NVRAM里。SET配置程序的目的是把說明系統(tǒng)配置的值存入NVRAM。
幾乎所有上述設(shè)備都含有易失寄存器。為避免附圖不必要的混亂,特定設(shè)備的寄存器將用該設(shè)備來參照。例如,CPU寄存器參照為CPU40寄存器,而視頻控制器寄存器將參照為視頻控制器56寄存器。
如上文中所提及的那樣,計(jì)算機(jī)具有一般標(biāo)明在15處的罩,罩和機(jī)箱19一起確定一個封閉的和屏蔽的體積,用來容納上面確定的微機(jī)部件。罩最好由一個用可塑合成材料制成的整體模塑外表面裝璜罩構(gòu)件16和一個與裝璜罩構(gòu)件外形相配合的金屬薄層內(nèi)襯18所組成。當(dāng)然,罩可用其它周知的方式制成,而本發(fā)明的實(shí)現(xiàn)并不限制于所述的類型。
運(yùn)行狀態(tài)現(xiàn)參照圖4,其中表示本發(fā)明計(jì)算機(jī)系統(tǒng)的狀態(tài)圖。本發(fā)明的計(jì)算機(jī)系統(tǒng)10具有四個狀態(tài)常規(guī)運(yùn)行狀態(tài)150、備用狀態(tài)152、暫停狀態(tài)154和斷電狀態(tài)156。圖4中所示各狀態(tài)間的轉(zhuǎn)換意味著對最佳實(shí)施例是描述性的而不是限制性的。因此,可替代地使用其它可導(dǎo)致狀態(tài)轉(zhuǎn)換的附加事件。
本發(fā)明的計(jì)算機(jī)系統(tǒng)10的常規(guī)運(yùn)行狀態(tài)150實(shí)際上和任何普通的臺式計(jì)算機(jī)的常規(guī)運(yùn)行狀態(tài)完全相同。用戶可以使用應(yīng)用程序,基本上像對待其它計(jì)算機(jī)那樣來對待本計(jì)算機(jī)。一種對用戶透明的差異是存在操作系統(tǒng)上的功率管理驅(qū)動程序(“APM OS驅(qū)動程序”),其在后臺上運(yùn)行,以及存在不同的APM BIOS程序。APM BIOS程序?qū)⒃诤竺娴奈恼轮杏懻?,它們包括暫停程序、恢?fù)程序、導(dǎo)引程序、監(jiān)督程序、保留CPU狀態(tài)程序和復(fù)原CPU狀態(tài)程序。在所有的圖中都沒有顯示的一個APM BIOS程序是APM BIOS路由程序。APM BIOS路由程序本質(zhì)上接收APM OS驅(qū)動程序的命令并調(diào)用適當(dāng)?shù)腁PM BIOS程序。例如,當(dāng)APM OS驅(qū)動程序發(fā)出暫停命令時,APM BIOS路由程序調(diào)用暫停程序。作為另一個例子,只要APM OS驅(qū)動程序發(fā)出取得事件命令,APM BIOS路由程序調(diào)用監(jiān)督程序。這些程序位于BIOS上,當(dāng)BIOS被遮蔽時它們也被遮蔽。在OS上的功率管理驅(qū)動程序和APM BIOS程序控制計(jì)算機(jī)在這四個狀態(tài)間的轉(zhuǎn)換。字“APM”本身一般含意為APM OS驅(qū)動程序,盡管其內(nèi)容可另外確定。
第二個狀態(tài),備用狀態(tài)152,使用比常規(guī)運(yùn)行狀態(tài)150少的電功率,并且仍然許可任何應(yīng)用程序處于在其它情況下它會執(zhí)行的執(zhí)行狀態(tài)下。通常在備用狀態(tài)152下通過用代碼把設(shè)備置于各自的低功率方式來節(jié)省功率。在最佳實(shí)施例中,在備用狀態(tài)152下電能的節(jié)約是通過停止固定磁盤存儲設(shè)備31的固定磁盤(圖中未示)的旋轉(zhuǎn)和停止產(chǎn)生視頻信號來達(dá)到的,在下面將對此作出更全面的解釋。但是,這些是不受限制的,還可采取其它節(jié)約能源的方法,如減慢或停止CPU時鐘。
在最佳實(shí)施例中,電能是按兩種分開的方式節(jié)省的。首先,在常規(guī)運(yùn)行狀態(tài)150下,固定磁盤存儲設(shè)備31里的固定磁盤通常按3600轉(zhuǎn)/分(PRM)的恒速旋轉(zhuǎn)。在備用狀態(tài)152下,IDE磁盤控制器86發(fā)出命令,使得固定磁盤存儲設(shè)備31進(jìn)入低功率方式(固定磁盤存儲設(shè)備31內(nèi)的固定磁盤停止旋轉(zhuǎn)),這樣節(jié)約固定磁盤存儲設(shè)備31內(nèi)的馬達(dá)(圖中未示)帶動固定磁盤時所消耗的能量。
其次,在常規(guī)運(yùn)行狀態(tài)150下,計(jì)算機(jī)系統(tǒng)的視頻控制器56不停地產(chǎn)生視頻信號(如技術(shù)上熟知的HSYNC、VSYNC、R、G、B等),這些信號和在視頻顯示終端57上所看到的圖象相對應(yīng)。在備用狀態(tài)152下,視頻控制器56停止產(chǎn)生視頻信號,這樣節(jié)約由視頻控制器56通常所消耗的電能。HSYNC、VSYNC、R、G和B信號都被驅(qū)動到約為直流0.00伏。使用VESA(視頻電子標(biāo)準(zhǔn)協(xié)會)類型監(jiān)視器允許進(jìn)一步節(jié)約能源,因?yàn)楫?dāng)HSYNC和VSYNC大約為0.00伏時VESA類型監(jiān)視器自己會關(guān)閉。
注意某些系統(tǒng)具有“屏幕節(jié)省器”,它使得屏幕57變暗以防止視頻顯示終端前表面熒光物質(zhì)的燒毀。在大多數(shù)這種系統(tǒng)中,視頻控制器56仍舊產(chǎn)生視頻信號;它只產(chǎn)生對應(yīng)于暗色屏幕或動態(tài)顯示的視頻信號。這樣,運(yùn)行屏幕節(jié)省器的計(jì)算機(jī)系統(tǒng)仍舊消耗產(chǎn)生視頻信號所需的電能。
第三種狀態(tài)是暫停狀態(tài)154。在暫停狀態(tài)154下,計(jì)算機(jī)系統(tǒng)消耗非常小量的電能。在最佳實(shí)施例中暫停狀態(tài)計(jì)算機(jī)消耗來自墻上插座小于5瓦的電能。僅需消耗的功率來自電源17的AUX5輸出或者來自計(jì)算機(jī)系統(tǒng)內(nèi)部的電池171,它是用來監(jiān)視開關(guān)21的微弱功率,對此將在下面伴隨圖5的文字段落中得到更完整的說明。
把計(jì)算機(jī)系統(tǒng)的狀態(tài)在電源關(guān)閉以前保留到固定磁盤存儲設(shè)備(硬驅(qū)動機(jī))31里,就可以只使用少量電能。為進(jìn)入暫停狀態(tài)154,CPU中斷任何應(yīng)用程序并把CPU的程序執(zhí)行控制轉(zhuǎn)交給功率管理驅(qū)動程序。功率管理驅(qū)動程序確定計(jì)算機(jī)系統(tǒng)10的狀態(tài),并把計(jì)算機(jī)系統(tǒng)的整個狀態(tài)寫入固定磁盤存儲設(shè)備31。CPU40寄存器、CPU高速緩存41、系統(tǒng)RAM53、系統(tǒng)高速緩存器60、視頻控制器56寄存器、視頻存儲器58和其它易失寄存器的所有狀態(tài)都被寫入固定磁盤機(jī)31。系統(tǒng)10的整個狀態(tài)是按這種方式保留的,即不需付出明顯的使用代價(jià)即可得到復(fù)原。也就是說,用戶不需要如在常規(guī)下等待系統(tǒng)裝入操作系統(tǒng)和裝入圖形用戶接口。
然后計(jì)算機(jī)把數(shù)據(jù)寫進(jìn)非易失的CMOS存儲器96指明系統(tǒng)處于暫停狀態(tài)。最后,CPU使得電源17停止提供穩(wěn)壓電源?,F(xiàn)在計(jì)算機(jī)系統(tǒng)10在把系統(tǒng)的整個狀態(tài)安全地保留在固定磁盤存儲設(shè)備31里情況下功率被降低。
在整個本文件中詞“狀態(tài)”用于兩種類似的,但可能會混淆的情況。設(shè)備可以“處于”一種特定的狀態(tài)。而四種系統(tǒng)狀態(tài)-常規(guī)150、備用152、暫停154和斷電156-指的是本發(fā)明的計(jì)算機(jī)系統(tǒng)10的概括性的狀態(tài)。這些“狀態(tài)”一般性地描述計(jì)算機(jī)系統(tǒng)10。例如,在常規(guī)運(yùn)行狀態(tài)150的情況下,CPU仍然執(zhí)行代碼并不斷改變系統(tǒng)10里的許多寄存器。同樣、類似的活動出現(xiàn)在備用狀態(tài)152下。即,當(dāng)系統(tǒng)10處于常規(guī)運(yùn)行狀態(tài)150和暫停狀152下時,計(jì)算機(jī)系統(tǒng)10的存儲器和寄存器的配置是動態(tài)的。
其它的設(shè)備也可以“處于”一定的狀態(tài)??删幊踢壿嬯嚵蠻2可處于幾種狀態(tài)中,這將在和圖7相對應(yīng)的文字段落中得到說明。
將上述的和一個設(shè)備“的狀態(tài)”加以對比,例如,“計(jì)算機(jī)系統(tǒng)10的狀態(tài)”或“CPU40的狀態(tài)”。一個設(shè)備“的狀態(tài)”指的是在某特定計(jì)算機(jī)周期時該設(shè)備的情況。所有存儲器單元和寄存器都將具有特定的二進(jìn)制值。一個設(shè)備“的狀態(tài)”是對該設(shè)備內(nèi)容的靜態(tài)二進(jìn)制寫照。
計(jì)算機(jī)系統(tǒng)10“的狀態(tài)”指的是操作上的等效而不必是準(zhǔn)確的復(fù)制。例如,在狀態(tài)A下的計(jì)算機(jī)系統(tǒng)可能在CPU高速緩存41或系統(tǒng)高速緩存60中的一個中具有一定的存儲。有可能把各個高速緩存的內(nèi)容“沖瀉”回系統(tǒng)RAM53,并把計(jì)算機(jī)系統(tǒng)推進(jìn)狀態(tài)B。純粹地講,在狀態(tài)A下的計(jì)算機(jī)系統(tǒng)的狀態(tài)不同于在狀態(tài)B下的計(jì)算機(jī)系統(tǒng)的狀態(tài),因?yàn)楦咚倬彺婧拖到y(tǒng)RAM的內(nèi)容是不同的。但是,從軟件操作的觀點(diǎn)出發(fā),狀態(tài)A和狀態(tài)B是相同的,因?yàn)?,除了在系統(tǒng)速度的輕微下降(由于程序不具有在高速緩存上執(zhí)行所能得到的優(yōu)點(diǎn)而造成)外,該正在執(zhí)行的程序是不受到影響的。這樣,在狀態(tài)A下的計(jì)算機(jī)和狀態(tài)B下的計(jì)算機(jī)在軟件操作上是等效的,即使在高速緩存區(qū)域重新裝入有用的代碼之前那個高速緩存被沖瀉掉的計(jì)算機(jī)將在性能上遭受輕微的下降。
單詞“Power(功率)”也用于兩種類似的,但可能混淆的方法?!癙ower(功率)”在大多數(shù)下指的是電功率。但是,偶而“Power(功率)”還指計(jì)算能力。上下文應(yīng)該使得預(yù)定的應(yīng)用是清楚的。
“電路”一般指的是一個物理電子設(shè)備或者多個在電上互連的設(shè)備。但是,術(shù)語“電路”還意味著包含等效于物理電子設(shè)備的CPU代碼。例如,一方面,可以通過74LS00,或等效地,在可編程設(shè)備里實(shí)現(xiàn)二輸入的NAND(“與非”)門。這兩種設(shè)備都是物理電子設(shè)備。另一方面,還可以通過使CPU40從兩個CPU可讀輸入端口讀得兩個輸入,利用CPU命令產(chǎn)生NAND結(jié)果并且通過CPU可寫輸出端口輸出結(jié)果來實(shí)現(xiàn)NAND門。這些可和CPU接口的端口可以是簡單的,如譯碼鎖存,或者是等效的可編程設(shè)備,或者是復(fù)雜的,如技術(shù)中周知的PIA(外圍接口適配器)?!半娐贰币馕吨ㄋ腥N實(shí)現(xiàn)NAND門的例子。在某些情況下,“電路”可能僅僅指的是電氣通路。電氣通路的種類包括導(dǎo)線、追蹤器或通過印刷電路板,或者各種電氣通路種類的組合以形成單個電氣上連通的通路。
“信號”可以指的是一個單個的電氣波形或者多個波形。例如,視頻控制器產(chǎn)生視頻信號。視頻信號實(shí)際上是多個電氣導(dǎo)體上的多個信號如技術(shù)上周知的HSYNC、VSYNC、R、G、B等信號。
現(xiàn)回到圖4,第四個和最后的狀態(tài)是斷電狀態(tài)156。斷電狀態(tài)156實(shí)際上等同于在普通意義下被斷電的任何一般的計(jì)算機(jī)系統(tǒng)。在這個狀態(tài)下,電源17的初級/穩(wěn)壓單元172停止向計(jì)算機(jī)系統(tǒng)10提供穩(wěn)壓電源(除了通過AUX5的微弱穩(wěn)壓電源之外,這將在對應(yīng)圖5的文字段落中得到更完整的說明),但是計(jì)算機(jī)系統(tǒng)10的狀態(tài)不保留在固定磁盤31里。暫停狀態(tài)154和斷電狀態(tài)156在下列意義上是相同的即電源17不再產(chǎn)生穩(wěn)壓功率。它們的不同點(diǎn)在于,在斷電狀態(tài)156下計(jì)算機(jī)系統(tǒng)10的狀態(tài)不保留在硬磁盤機(jī)31里,而在暫停狀態(tài)下計(jì)算機(jī)的狀態(tài)是保留的。而且,當(dāng)脫離斷電狀態(tài)156時,計(jì)算機(jī)10“引導(dǎo)”就好象它被接通。也就是說,任何執(zhí)行代碼的啟動必須通過用戶或者自動地通過如AUTOEXEC.BAT文件的方法。但是,當(dāng)脫離暫停狀態(tài)154時、計(jì)算機(jī)10在已中斷時所處在的位置處恢復(fù)執(zhí)行。
圖4還對使四個狀態(tài)轉(zhuǎn)換的事件進(jìn)行一般性的概述。這些事件將在對應(yīng)圖6到圖8的文字段落中得到進(jìn)一步的說明;但是,一個粗略的說明可能是有用的。電源按鈕21,兩個定時器(不活動備用定時器和不活動暫停定時器,參見圖9及相應(yīng)的文字段落)和一個進(jìn)入暫停標(biāo)志(見圖6和圖7和相應(yīng)的文字段落)一起影響計(jì)算機(jī)應(yīng)進(jìn)入的狀態(tài)。一般地說,這兩個定時器可以是硬件或者是作為程序在CPU上執(zhí)行的CPU代碼定時器。在最佳實(shí)施例中,它們兩個都是CPU代碼定時器,從BIOS數(shù)據(jù)段上執(zhí)行。但是,這兩個定時器可設(shè)想成硬件定時器,這可以是一種更好的解決辦法,因?yàn)樗蓽p少系統(tǒng)的開銷。在和圖9對應(yīng)的文字段落里定時器得到更完全的說明。當(dāng)計(jì)算機(jī)系統(tǒng)處于常規(guī)運(yùn)行狀態(tài)150或備用狀態(tài)152中的一種狀態(tài)下時,兩個定時器都是活動的。定時器和其它程序通信,這樣兩個定時器中的一個的期滿引起如下面概述的轉(zhuǎn)換。各個或兩個定時器可以設(shè)置為在一定的時間周期后達(dá)到期滿,這個時間周期取決于用戶的特定需要。在最佳實(shí)施例中,不活動備用定時器和不活動暫停定時器可被設(shè)置為在15到90分鐘之后期滿。各個或兩個定時器可被停住,也就是設(shè)置為永不期滿?!巴W 倍〞r器可以采取實(shí)際上停止定時器遞增計(jì)數(shù)動作的方式,或者只要采取忽略它們到期的方式。在最佳實(shí)施例中,把定時器的期滿值設(shè)為零值使得定時器的期滿不會受到檢測。例如,連網(wǎng)計(jì)算機(jī)的用戶可能不希望計(jì)算機(jī)進(jìn)入暫停狀態(tài)154,因?yàn)檫@樣做可以導(dǎo)致LAN對這個計(jì)算機(jī)失效。
在理論上,定時器可遞增計(jì)數(shù)或遞減計(jì)數(shù),可復(fù)位到固定的預(yù)先確定的狀態(tài),并且當(dāng)定時器起動(或再起動)時,或者現(xiàn)在值可被使用時,以及可把一個差值或和值計(jì)算為終點(diǎn)期滿觸發(fā)沖量時,可以期待定時器對另一個固定的預(yù)先確定的狀態(tài)計(jì)數(shù)。在本最佳實(shí)施例中,當(dāng)定時器復(fù)位時,來自實(shí)時時鐘98的分鐘變量的現(xiàn)有值被存儲起來。通過從保留的分鐘值減去現(xiàn)在分鐘值并和用戶所選擇的差值相比較,來檢查定時器是否期滿。
兩個定時器都受到某些系統(tǒng)活動的影響。例如,在最佳實(shí)施例中,以鍵盤12的鍵被按下、鼠標(biāo)器13被移動、鼠標(biāo)器13的按鈕被按下為形式的用戶活動,或者硬磁盤機(jī)的活動會使各個定時器重新啟動,這些會在和圖9有關(guān)的文字段落中得到更充分的說明;這樣,當(dāng)用戶按鍵盤12的鍵或使用鼠標(biāo)器13時,兩個定時器都不會期滿。另外其它的系統(tǒng)事件可用來復(fù)位定時器。任何硬件中斷可能替代地被監(jiān)視為活動。這樣,可能最好在打印時阻止系統(tǒng)進(jìn)入暫停狀態(tài)154。
進(jìn)入暫停標(biāo)志是可編程邏輯陣列U2里的CPU可操縱的和可讀的鎖存器,U2將在和圖7相應(yīng)的文字段落里得到更充分的說明。簡言之,如把可編程邏輯陣列U2置為一種方式時會導(dǎo)致按下開關(guān)21時系統(tǒng)10進(jìn)入斷電狀態(tài)156,如果可編程邏輯陣列U2置為另一種方式,按下開關(guān)21時系統(tǒng)10進(jìn)入暫停狀態(tài)154。如果計(jì)算機(jī)系統(tǒng)10處于常規(guī)運(yùn)行狀態(tài)150,而寫入到可編程邏輯陣列U2的進(jìn)入暫停標(biāo)志為002,當(dāng)按下功率按鈕21時,則計(jì)算機(jī)系統(tǒng)10進(jìn)入斷電狀態(tài)156,如在158處所示。如果計(jì)算機(jī)系統(tǒng)為斷電狀態(tài)156而功率按鈕21被按下,然后計(jì)算機(jī)系統(tǒng)進(jìn)入常規(guī)運(yùn)行狀態(tài)。
如果計(jì)算機(jī)系統(tǒng)10處于常規(guī)運(yùn)行狀態(tài)150,一種事件可以使得計(jì)算機(jī)進(jìn)入備用狀態(tài)152如果不活動備用定時器期滿,計(jì)算機(jī)系統(tǒng)10將改變到備用狀態(tài)152,如在162處所示。當(dāng)處于備用狀態(tài)152時,任何上面描述類型的系統(tǒng)活動將使得計(jì)算機(jī)10脫離備用狀態(tài)152,回到常規(guī)運(yùn)行系統(tǒng)150,如在164處所示。
如果計(jì)算機(jī)10處于常規(guī)運(yùn)行狀態(tài)150,兩種事件可以使它進(jìn)入暫停狀態(tài)154。首先,如果不活動暫停定時器期滿,計(jì)算機(jī)系統(tǒng)10將改變到暫停狀態(tài)154,如在166處所示。其次,當(dāng)寫入到可編程邏輯陣列U2的進(jìn)入暫停標(biāo)志為012時,通過按功率按扭21,用戶可以使得計(jì)算機(jī)10立即進(jìn)入暫停狀態(tài)154,同樣如在166處所示。當(dāng)處于暫停狀態(tài)154下時,通過按下功率按鈕21,用戶把它改變到常規(guī)運(yùn)行狀態(tài)150,如在168處所示。
此處,在168處,可以代替地使用若干外部事件把系統(tǒng)10從暫停狀態(tài)154改變到常規(guī)運(yùn)行狀態(tài)150。如,電話鈴聲檢測電路可以附加到圖6的電路上,并且設(shè)置為附屬電話線呼叫時可使系統(tǒng)10脫離暫停狀態(tài)154和進(jìn)入常規(guī)運(yùn)行狀態(tài)。這種修改對于接收遠(yuǎn)程傳真數(shù)據(jù)或數(shù)字?jǐn)?shù)據(jù)的系統(tǒng)可能是有用的。這種系統(tǒng)只在接收輸入信息時才消耗功率。類似地,實(shí)時時鐘和圖6間的接口可以代替地允許報(bào)警型事件使得系統(tǒng)10脫離暫停狀態(tài)154并進(jìn)入常規(guī)運(yùn)行運(yùn)行150。這種系統(tǒng)可能在下述情況是有益的,即在每天的一定時間發(fā)送運(yùn)程傳真式數(shù)字?jǐn)?shù)據(jù)來得到較低電話費(fèi)用的優(yōu)點(diǎn)。
最后,如果計(jì)算機(jī)系統(tǒng)10處于備用狀態(tài)152并且不活動暫停定時器期滿,則計(jì)算機(jī)10改變到暫停狀態(tài)154,如在170處所示。計(jì)算機(jī)系統(tǒng)不能夠從暫停狀態(tài)154回到備用狀態(tài)152,而只能轉(zhuǎn)換到常規(guī)運(yùn)行狀態(tài)150,如在對應(yīng)于轉(zhuǎn)換168的文字段落里所敘述的那樣。
很明顯,計(jì)算機(jī)系統(tǒng)10不能夠瞬時地改變狀態(tài)。每次從四種狀態(tài)的一種狀態(tài)下轉(zhuǎn)換出來時,將需要一定時間間隔以完成必要的系統(tǒng)改變。各個轉(zhuǎn)換時間的細(xì)節(jié)將在和圖6至圖15相對應(yīng)的文字段落里給予說明。
系統(tǒng)硬件在討論CPU40上代碼執(zhí)行的細(xì)節(jié)之前,首先討論實(shí)現(xiàn)四個狀態(tài)所需的硬件可能是有益的。圖5中表示電源17的方塊圖。電源17具有兩個單元控制器174和初級/穩(wěn)壓單元172。電源17有幾個輸入Line-In,其從普通的墻上插座接收115伏交流電;ON,其控制電源17的穩(wěn)壓操作。電源17有幾個輸出AC Line-Out,±12VDC,AUX5,GND和POWERGOOD。AC Line-Out是不穩(wěn)壓的115VCA,它一般輸送給視頻顯示終端57的電源輸入(圖中未示)??刂破?74接收ON輸入并產(chǎn)生POWERGOOD輸出。初級/穩(wěn)壓單元172分別把來自Line-In輸入的115VAC調(diào)節(jié)為±5VDC,±12VDC。初級/穩(wěn)壓單元是否調(diào)節(jié)電能取決于控制器174接口的ON值。在最佳實(shí)施例中,控制器174應(yīng)該提供對產(chǎn)生ON信號的電路隔離,例如,一個適當(dāng)?shù)墓飧綦x器。
在技術(shù)上已熟知Line-In輸入和AC Line-out,±5VDC、±12VDC、GND和POWERGOOD輸出。當(dāng)電源17“關(guān)掉”時,即不再從Line-In提供穩(wěn)壓電壓,POWERGOOD信號為邏輯ZERO。當(dāng)電源17“接通”時,電源17從115VAC Line-In產(chǎn)生±5VDC和±12VDC穩(wěn)壓電壓。這四個穩(wěn)壓電壓和它們相應(yīng)的GND(接地)是“系統(tǒng)功率”,這在技術(shù)上是普遍熟知的。當(dāng)穩(wěn)壓電壓保持在可接受的容差范圍內(nèi)時,POWERGOOD信號改變?yōu)檫壿婳NE。
AUX5輸出對平面提供備用+5VDC。當(dāng)電源17插入到普通的提供額定115VAC的墻上插座時,不論電源“接通”或“關(guān)掉”,初級/穩(wěn)壓單元172在AUX5處提供額定的+5VDC。這樣,只要插上電,電源17總是在AUX5處提供額定的+5VDC。AUX5輸出和+5輸出的不同在于,只有當(dāng)電源17處于“接通”時,初級/穩(wěn)壓單元才通過+5輸出端產(chǎn)生穩(wěn)壓的+5VDC。AUX5輸出和+5輸出的另一個不同點(diǎn)在于,在最佳實(shí)施例中,初級/穩(wěn)壓單元172通過該+5輸出端提供幾安培電流的+5VDC,而同時初級/穩(wěn)壓單元172通過AUX5輸出端提供少于一安培電源的+5VDC。
普通的現(xiàn)有電源使用高電流雙臂開關(guān),以對Line-In輸入和電源的穩(wěn)定部分進(jìn)行連接和切斷。本發(fā)明的電源17不使用高電流雙臂開關(guān)。反而,開關(guān)21控制著產(chǎn)生ON信號的電路。在最佳實(shí)施例中,開關(guān)21是一個瞬時單極、單臂按鈕或開關(guān);但是熟悉技術(shù)的人可以修改圖6的電路以利用其它類型的開關(guān)如單極、雙臂開關(guān)。AC Line-In永遠(yuǎn)和從墻上插座相連的初級/穩(wěn)壓單元172連接。當(dāng)ON處于邏輯ONE時(AUX5近似地為額定+5VDC),初級/穩(wěn)壓單元172并不通過±5或者±12輸出端把15VAC Line-In調(diào)節(jié)到±5VDC或±12VDC。初級/穩(wěn)壓單元只提供AUX5輸出端的低電流額定+5VDC。另一方面,當(dāng)ON為邏輯ZERO時(近似于GND),初級/穩(wěn)壓單元172通過四個±5和±12輸出端分別把115VAC Line-In調(diào)節(jié)到±5VDC和±12VDC。這樣,當(dāng)ON為ONE時,電源17是“關(guān)掉”的,而當(dāng)ON為ZERO時,電源17是“接通”的。
如果加以規(guī)定,具有AUX5輸出和ON輸入的電源,就象上面所描述的電源17那樣,可以從許多一般電源供應(yīng)商處得到。
現(xiàn)參照圖6,它表示本發(fā)明的計(jì)算機(jī)系統(tǒng)10的電子電路的示意圖。圖6中的電路負(fù)責(zé)在開關(guān)21、電源17、視頻顯示終端和CPU40上執(zhí)行的代碼之間的接口。
該電路由三塊集成電路組成U1,第一預(yù)編程PAL16L8;U2,第二預(yù)編程PAL16L8;和U3,在技術(shù)上周知的74HC132。一般來講,PAL(可編程陣列邏輯)U1和U2在圖3的平面I/O總線90和圖6的其它電路之間接口。該電路還包括開關(guān)21、十個電阻器R1-R10、五個電容器C1-C5、四個N型MOSFET(金屬氧半導(dǎo)體場效應(yīng)晶體管)Q1-Q4,它們是標(biāo)準(zhǔn)低電流金屬氧半導(dǎo)體場效應(yīng)晶體管,在本最佳實(shí)施例中適合作邏輯開關(guān)和一個雙二極管組CR1,它是一個標(biāo)準(zhǔn)低電流二極管組,在圖6中顯示了全部的配置和連接。電阻器R1-R10是 1/4 瓦電阻器,它們的阻值顯示在圖6中,范圍為±5%。電容器C1-C2是電解質(zhì)電容器,電容值如圖6所示,范圍為±10%。電容器C3-C5是0.1μF(±10%)的陶瓷電容器。
第一PAL U1與地址線SA(1)至SA(15)和AEN(地址允許)線連接。SA(1)至SA(15)和AEN是圖3所示的平面I/O總線90中的一部分。第一PAL U1被編程為只是一個地址譯碼器,當(dāng)預(yù)先確定的地址出現(xiàn)在地址線SA(1)至SA(15)上并且AEN(地址允許)線有效時,產(chǎn)生一個低電平有效信號PM_PORT_DCD#。
第二PAL U2被編程為可提供一個可讀的字節(jié)和在上面提到的I/O端口的較低三位中提供三個可寫位,I/O端口還被稱為“功率管理端口”。第二PALU2具有來自平面I/O總線90的八個輸入SD(0)、SD(1)、SD(2)、SA(0)、IOW#、RESETDRV和IRQ(1)。通過由存儲器控制器46產(chǎn)生的,在技術(shù)上周知的、高電平有效信號RESETDRV輸入,第二PAL U2復(fù)位到已知的初始條件。在和圖7相應(yīng)的文字段落里和表Ⅰ和表Ⅱ中,第二PAL U2得到更充分的描述。
第三個設(shè)備具有二個部分,這里標(biāo)識為U3A和U3B,它們組成SR鎖存器,也被稱為NAND鎖存器,它在技術(shù)上是周知的。SR鎖存器把U3的引腳1和5作為輸入(引腳1為SET輸入而引腳5為RESET輸入)和把U3A的引腳3作為輸出。當(dāng)兩個輸入都是邏輯ONE時,該輸出保持它的鎖存輸出值。如果SET置為邏輯ZERO,輸出變成邏輯ONE。如果SET輸入值返回到邏輯ONE,輸出鎖存在邏輯ONE上。如果RESET輸入置為邏輯ZERO,輸出變?yōu)檫壿媄ERO。如果RESET輸入值回到邏輯ONE,輸出鎖存在邏輯ZERO上。
如果POWERGOOR信號為邏輯ONE,其表明穩(wěn)壓電壓處于適當(dāng)?shù)姆秶瑒t第三個設(shè)備的第三部分,在這里標(biāo)識為U3C,充當(dāng)為第二PAL U2引腳12輸出的反相器。如果POWERGOOD信號為邏輯ZERO,共表示VCC或者在接地電位附近搖擺或者從+5VDC向上或向下陡變,則第三個設(shè)備的第三部分引腳8的輸出保持為邏輯ONE,防止來自第二PAL U2管腳2的任何噪聲影響由第三個設(shè)備的第一和第二部分U3A和U3B建立的SR鎖存器。
開關(guān)21在JP1處和圖6的電路連接。電阻器/電容器子電路R2和C1將開關(guān)21的閉合事件加以消跳。第三個設(shè)備的第四部分U3D在引腳12通過R6被拉向VBAT(大約為+4.3VDC,而AUX5的額定值為+5VDC)時被設(shè)置為反相器,它倒置被消跳的開關(guān)閉合。限流電阻器R10防止從第三個設(shè)備的第四部分U3D的引腳11通過任何電流,當(dāng)該設(shè)備加電或斷電時,該電流可能從第二PAL U2的引腳8流入。
SR鎖存器應(yīng)該永不斷電。但是,如果出現(xiàn)這種情況,R7和C3設(shè)計(jì)為把SR鎖存器置為通電狀態(tài),這樣當(dāng)SR鎖存器重新供電時電源17將處于“斷電”狀態(tài)。
電阻器R1、R3、R4、R5、R6、R8和R9是上拉電阻器,把它們各自的線路拉到VCC、VBAT或AUX5中的一種。晶體管Q1、Q2、Q3和Q4是反相器。R4和C2組成RC對,使C2電位達(dá)到VCC前對C2充電。當(dāng)?shù)诙AL U2的引腳19輸出為邏輯ONE時,晶體管Q5使電容器C2放電。當(dāng)貯存在C2里電壓大約低于+2.7VDC時,Q1不導(dǎo)電而R3把第二PAL U2的引腳11的輸入拉到VCC,使它為邏輯ONE。如果C2充電到約為+2.7VDC或更高,則Q1導(dǎo)電,把引腳11的輸入拉到GND,使它為邏輯ZERO。
當(dāng)?shù)诙AL U2的引腳18的輸出為邏輯ZERO時,R8和R9分別把BLNK#和ESYNC線路拉到VCC。由于ESYNC和BLNK#線路處于VCC,視頻控制器56產(chǎn)生視頻信號。當(dāng)?shù)诙AL U2的引腳18的輸出為邏輯ONE時,晶體管Q2和Q3通電,分別把BLNK#和ESYNC拉向GND,使得視頻控制器56停止產(chǎn)生視頻信號。
圖6所示的電子電路具有三個電源VCC、AUX5和VBAT。VCC和AUX5是由電源17供電的、額定為+5.0VDC。如技術(shù)上周知的那樣,VCC和它的相關(guān)GND返回線路穿過平面20上的主功率連接器(圖中未示)。AUX5在JP2的引腳1處和該電路連接。AUX5的回線進(jìn)入并在JP2的引腳3處和GND線路連接。VBAT是電池171的功率輸出,額定為3.5VDC。電池171是一個鋰電池,它在技術(shù)上是周知的。
PAL U1和U2在和VCC相連的引腳20處具有它們的VCC輸入。另外,幾個電阻器R3、R4、R8和R9也和VCC連接。如在技術(shù)上周知的那樣,當(dāng)電源“接通”并插在普通的提供額定115VAC的墻上的插座時,電源17只提供穩(wěn)壓+5VDC。這樣,當(dāng)電源處于“關(guān)掉”或沒有插上電兩者中的一種情況時,PAL U1的U2以及R3、R4、R8和R9不接收+5VDC。
另一方面,只要電源17插進(jìn)提供額定115VAC的普通墻上插座時,不論“接通”或“斷電”,電源17都在AUX5處提供穩(wěn)壓+5VDC。這樣,只要電源17被插上,那些和AUX5連接的設(shè)備接受+5VDC。
另外,U3和電阻器R1、R2和R6永遠(yuǎn)接受電能,因?yàn)镃R1的二極管以這種方式和VBAT的AUX5接口,即和VBAT連接的設(shè)備永遠(yuǎn)接受功率。當(dāng)插進(jìn)普通的墻上插座時,電源17在AUX5處提供+5VDC而和VBAT連接的設(shè)備(U3和電阻器R1、R2及R6)接受約+4.3VDC(AUX5的+5VDC減去AUX5和VBAT之間CR1內(nèi)二極管的二極管壓降)。在不插進(jìn)時,電源17停止對AUX5線路提供調(diào)節(jié)功率,U3和電阻器R1、R2及R6從VBAT接受功率。典型的74HC132需要+2.0VDC的最低DC電壓。這樣,只要VBAT保持足夠的可提供+2.0VDC的電荷,U3會得到有效供電。
圖6的電路可以具有一些代替的修改,而仍包括在本發(fā)明的范圍之內(nèi)。例如,實(shí)時時鐘98可在電氣上和圖6電路連接,并配置為對ON#信號二極管式的“或”操作,這樣在一天的特定時間,計(jì)算機(jī)系統(tǒng)10從暫停狀態(tài)154改變到常規(guī)運(yùn)行狀態(tài)150。類似地,電話鈴聲檢測電路可替代地附加在圖6的電路上并配置為對ON#信號二極管式“或”操作,這樣相連的電話線路的呼叫可使系統(tǒng)10脫離暫停狀態(tài)154并進(jìn)入常規(guī)運(yùn)行狀態(tài)150。
回到參照圖6,第二PAL U2具有兩個狀態(tài)機(jī)。在圖7中顯示第二PAL U2的一個狀態(tài)機(jī)的狀態(tài)圖。表Ⅰ和表Ⅱ說明另一個狀態(tài)機(jī)及第二PAL U2的某些其它情況。
圖7表示第二PAL U2的一個狀態(tài)機(jī)。TE1和TE0一起許可四種狀態(tài)開關(guān)狀態(tài)002176、開關(guān)狀態(tài)012178、開關(guān)狀態(tài)112180和開關(guān)狀態(tài)102182。
TE1和TE0不是對第二PAL U2直接可寫的,相反,相應(yīng)于開關(guān)21的閉合事件以及諸如復(fù)位計(jì)算機(jī)系統(tǒng)的其它事件,狀態(tài)會發(fā)生變化。在系統(tǒng)功率不由電源17提供的情況下,第二PAL U2不被供電,因此,它的狀態(tài)是無意義的,處于174。按下開關(guān)21和其它事件(如電話鈴聲檢測器使電源17提供系統(tǒng)功率)引起電源17開始提供系統(tǒng)功率,如在對應(yīng)于圖6的文字段落里所描述的那樣。當(dāng)開關(guān)21被按下或者RESETDRV信號有效時,第二PAL U2進(jìn)入開關(guān)狀態(tài)002176。在釋放開關(guān)21或開關(guān)21不被按下的情況下RESETDRV變?yōu)闊o效時,將使第二PAL U2進(jìn)入開關(guān)狀態(tài)012178。再次按下開關(guān)21時,將使第二PAL U2進(jìn)入開關(guān)狀態(tài)112180。再次釋放開關(guān)21時,將使第二PAL U2進(jìn)入開關(guān)狀態(tài)102182。開關(guān)21的連續(xù)閉合使得第二PAL U2循環(huán)通過這四個狀態(tài),如圖7中所示。當(dāng)計(jì)算機(jī)系統(tǒng)處于常規(guī)運(yùn)行狀態(tài)150時,第二PAL U2處于開關(guān)狀態(tài)012178。
狀態(tài)012178是對應(yīng)于TE1、TE0狀態(tài)機(jī)常規(guī)通電狀態(tài)的開關(guān)狀態(tài)。在這個狀態(tài)下,應(yīng)用程序?qū)?zhí)行。在這個狀態(tài)下,系統(tǒng)10可以進(jìn)入或脫離備用狀態(tài)152。開關(guān)狀態(tài)012178還對應(yīng)于用戶生成的暫停異常結(jié)束請求。開關(guān)狀態(tài)102是對應(yīng)于用戶暫停請求的開關(guān)狀態(tài)。也就是說,從系統(tǒng)處于斷電狀態(tài)156開始,按下開關(guān)一次把計(jì)算機(jī)系統(tǒng)置于常規(guī)運(yùn)行狀態(tài)150。再次按下開關(guān)產(chǎn)生暫停請求(在功率管理端口處為0FFH),它將由監(jiān)督程序讀出,監(jiān)督程序在和圖9對應(yīng)文字段落里得到更充分的說明。在系統(tǒng)處于暫停狀態(tài)154之前,第三次按下開關(guān)21產(chǎn)生暫停異常結(jié)束請求(在功率管理端口處為0FFH),它將由監(jiān)督程序讀出。
表Ⅰ增加對圖7四個狀態(tài)的一些注解。在處于開關(guān)狀態(tài)002176、012178和112180情況下,功率管理端口響應(yīng)讀(操作)輸出OFFH。
表ⅠTE1 TE0 注解0 0 清除顯示器消隱位功率管理端口的讀出=0FFH0 1 顯示器消隱位由SD(2)控制功率管理端口的讀出=0FFH1 1 顯示器消隱位由SD(2)控制功率管理端口的讀出=0FFH1 0 置位顯示器消隱位功率管理端口的讀出=0FEH另一方面,當(dāng)處于開關(guān)狀態(tài)182時,功率管理端口響應(yīng)一次讀操作,輸出0FEH。按下并釋放開關(guān)21時,第二PAL U2脫離開關(guān)狀態(tài)012并進(jìn)入開關(guān)狀態(tài)102182,其標(biāo)志硬件暫停請求。監(jiān)督程序通過讀功率管理端口察覺硬件暫停請求。對讀所作響應(yīng)0FEH表示一次硬件暫停請求。
TE1、TE0狀態(tài)機(jī)還影響視頻消隱電路。在處于開關(guān)狀態(tài)002176情況下,顯示器消隱位被清除,使得視頻控制器產(chǎn)生視頻信號。在處于開關(guān)102182情況下,顯示器消隱位被置位,使得視頻控制器56停止產(chǎn)生視頻信號。當(dāng)處于開關(guān)狀態(tài)012178和112180情況下,顯示器消隱位由對SD2的寫所控制,這將在下面解釋。
表Ⅱ 表示第二PAL U2的另一個狀態(tài)機(jī)并且表示對SD2的寫如何影響視頻信號。
表ⅡS2 S1 S0 注解
X 0 0 當(dāng)處于開關(guān)狀態(tài)102時,立即"關(guān)掉"電源X 0 1 當(dāng)處于開關(guān)狀態(tài)102時,啟動故障保險(xiǎn)定時器(C2充電)X 1 0 立即"關(guān)掉"電源X 1 1 復(fù)位故障保險(xiǎn)定時器(C2放電)0 X X 接通視頻信號1 X X 關(guān)掉視頻信號PAL里的U2電路在功率管理端口提供三個位SD(0)、SD(1)、SD(2)。這三個位在表Ⅱ中標(biāo)記為S0、S1和S2。通過控制第二PAL U2的DISPAY_OFF輸出的引腳18,SD(2)位會關(guān)掉視頻信號,它使得引腳18DISPLAY_OFF輸出明確為邏輯ONE,使得晶體管Q2和Q3導(dǎo)電,把BLNK#和ESYNC拉至GND,而使視頻控制器56停止產(chǎn)生視頻信號。類似地,把ZERO寫進(jìn)功率管理端口的SD(2)使得引腳18DISPLAY_OFF輸出明確為邏輯ZERO,造成晶體管Q2和Q3停止導(dǎo)電,允許電阻器R8和R9把BLNK#和ESYNC拉至VCC,這樣許可視頻控制器56產(chǎn)生視頻信號。
IRQ(1)輸入也控制視頻消隱。IRQ(1)是鍵盤硬件中斷;按下鍵盤12的一個鍵使IRQ(1)產(chǎn)生脈沖。當(dāng)視頻信號切掉時IRQ(1)上的脈沖立即把視頻信號接通回來,它使引腳18DISPLAY_OFF輸出明確為邏輯ZERO,使晶體管Q2和Q3停止導(dǎo)電,允許電阻器R8和R9把BLNK#和ESYNC拉至VCC,這樣許可視頻控制器56產(chǎn)生視頻信號。當(dāng)從備用狀態(tài)152返回到常規(guī)運(yùn)行狀態(tài)154時,以這種方式使用IRQ(1)賦于用戶恢復(fù)視頻顯示器的迅速反饋。如果沒有它,直到若干秒后在APM檢驗(yàn)用戶活動之前用戶可能無法接收反饋,這在和圖9對應(yīng)的文字段落中予以說明。
SD(1)和SD(0)協(xié)力工作以提供四種操作狀態(tài)002、012、102和112。第二PAL U2通過RESETDRV輸入002狀態(tài)初始化。另外,在四個狀態(tài)的任一狀態(tài)下,把XXXXXX002寫進(jìn)功率管理端口可把第二PAL U2置入002狀態(tài)。在002狀態(tài)下,開關(guān)21的作用就象普通電源的功率開關(guān)一樣,這已在對應(yīng)于圖5的文字段落中得到描述。當(dāng)處于002狀態(tài)下時,按下開關(guān)21,會使第二PAL U2引腳12的輸出明確為邏輯ONE,使SR鎖存器的輸出引腳3鎖存為邏輯ZERO狀態(tài),允許通過R6把ON拉至HIGH,使得電源17的初級/穩(wěn)壓單元172停止沿±5和±12線路穩(wěn)壓電壓,而把電源17“關(guān)掉”。在這個狀態(tài)下,APM是不連接的,如在下面對系統(tǒng)軟件的討論中所說明的那樣。在002狀態(tài)情況下,讀功率管理端口使得電路回送OFEH。在最佳實(shí)施例中,這個字節(jié)被讀和被檢驗(yàn)以保證該硬件是存在的。
在四個狀態(tài)的任一狀態(tài)下,對功率管理端口寫入XXXXXX012使得第二PAL U2進(jìn)入012狀態(tài),012狀態(tài)是常規(guī)APM狀態(tài)。在進(jìn)入012狀態(tài)之后和在開關(guān)21被按下之前,立即讀功率管理端口會使電路回送OFFH。在012狀態(tài)下按下和釋放開并會導(dǎo)致兩個事件(1)讀功率管理端口而發(fā)生的回送值在OFEH和OFFH之間跳動;(2)引腳8處明確的值跳動,使得視頻控制器56隨著每次按下按鈕跳動地接通和關(guān)閉視頻信號。另外,在第一次按下開關(guān)21時,通過使得引腳18TRIGGER輸出明確為邏輯ZERO、使Q5停止導(dǎo)電、允許電容器C2開始充電,來啟動故障保險(xiǎn)定時器。當(dāng)存貯在C2里的電壓約低至+2.7VDC時,Q1不導(dǎo)電而R3把第二PAL U2的引腳11輸入值拉于VCC,使它成為邏輯ONE。如果C2充電到約為+2.7VDC或者更高,則Q1導(dǎo)電,把引腳11輸入值拉至GND,使它成為邏輯ZERO。每當(dāng)引腳11DELAY-IN#為邏輯ZERO,則第二PAL U2總是通過下列操作把電源17“關(guān)掉”使第二PAL U2的引腳12輸出明確為邏輯ONE、使SR鎖存器的輸出引腳3鎖存到邏輯ZERO狀態(tài)、經(jīng)R6允許把ON拉至HIGH、使電源17的初級/穩(wěn)壓單元172停止沿±5和±12線路提供穩(wěn)壓電壓,反復(fù)的開關(guān)閉合使得故障保險(xiǎn)定時器跳動式地接通或關(guān)閉。
這樣,在處于012狀態(tài)下,在開關(guān)按下之前,一次讀回送的值是OFFH并且視頻信號被生成;第一次把開關(guān)21按下時,一次讀操作所回送的值改變?yōu)镺FEH,而且停止產(chǎn)生視頻信號,使得視頻顯示終端57消隱。第二次按下開關(guān)時,讀操作所回送的值變回OFFH,并且視頻控制器56開始重新產(chǎn)生視頻信號。這種跳動式的性質(zhì)使得重復(fù)按下開關(guān)21表現(xiàn)如下奇數(shù)次按下開關(guān)結(jié)果是OFEH值和消隱的視頻信號而偶數(shù)次按下開關(guān)結(jié)果為OFFH值和生成的視頻信號。
在四個狀態(tài)的任一狀態(tài)下,對功率管理端口寫入XXXXXX102時,第二PAL U2進(jìn)入102狀態(tài)。進(jìn)入102狀態(tài)后,通過下列操作把電源17立即“關(guān)掉”使第二RAL U2的引腳12輸出明確為邏輯ONE、使SR鎖存器的輸出引腳3鎖存為邏輯ZERO狀態(tài)、經(jīng)R6允許ON被拉至HIGH、使電源17的初級/穩(wěn)壓單元172停止沿±5和±12線路提供穩(wěn)壓電墳。這個狀態(tài)使得系統(tǒng)10能控制電源17。
在四個狀態(tài)的任一狀態(tài)下,對功率管理端口寫入XXXXXX112使得第二PAL U2進(jìn)入112狀態(tài)。如果使引腳19TRIGGER#輸出明確為邏輯ONE、使Q5導(dǎo)電、把電容器C2對GND放電,則進(jìn)入112狀態(tài)能使故障保險(xiǎn)定時器復(fù)位。脫離這個狀態(tài)并進(jìn)入012狀態(tài)時,通過下列操作能重新啟動故障保險(xiǎn)定時器使引腳19TRIGGER#輸出斷言邏輯ZERO、防止晶體管Q5導(dǎo)電、允許電容器C2重新充電。
對圖6電路功能的下述討論的假設(shè)條件是電源17插進(jìn)到普通的墻上插座,并且在AUX5處產(chǎn)生+5VDC,因此,許多設(shè)備,特別是U3,得到有效供電。
相信,如果首先確定何時電源17是“關(guān)掉”的,對圖6電路的討論更容易得到理解。為把電源17“關(guān)掉”,JP2引腳2處的信號ON必須為邏輯ONE。因此,Q4必須不導(dǎo)電,故此U3的引腳3必須是邏輯ZERO。也就是說,U3A和U3B的SR鎖存器用邏輯ZERO輸出鎖存。POWERGOOD為邏輯ZERO并且第二PAL U2不供電,因此,U3C的引腳8輸出為邏輯ONE,這樣,SR鎖存器的RESET輸入為ONE。同樣,SR鎖存器SET輸入即U3A的引腳1經(jīng)R1拉至邏輯ONE。在這個狀態(tài)下,SR鎖存器用邏輯ZERO輸出加以鎖存。
當(dāng)開關(guān)21被按下時,該閉合被R2和C1消跳,而且SR鎖存器SET輸入即U3的引腳1被拉至GND(邏輯ZERO)。這把SR鎖存器輸出即U3A的引腳3改變到邏輯ONE,使得Q4導(dǎo)電,它把ON拉至GND,使得電源17開始對±5和±12線路提供穩(wěn)壓功率。釋放開關(guān)允許SR鎖存器SET輸入、U3A的引腳1改變到邏輯ONE,使得SR鎖存器在U3A引腳3輸出處鎖存邏輯ONE,這樣把電源鎖定在“接通”狀態(tài)里。
在POWERGOOD信號變?yōu)檫壿婳NE后,所有的電壓處于容差范圍內(nèi)。當(dāng)POWERGOOD為邏輯ZERO時,第二PAL U2初始化,使得(1)引腳12OFF輸出明確為邏輯ZERO,它使SR鎖存器脫離它當(dāng)前的鎖存狀態(tài),(2)引腳18DISPLAY_OFF輸出明確為邏輯ZERO,它允許視頻控制器產(chǎn)生視頻信號,和(3)引腳10TRIGGER#輸出明確為邏輯ONE,使得Q5把C2放電到GND,這樣經(jīng)R3保持引腳11DELAY_IN#拉至邏輯ONE。
如上面提及那樣,圖7的第二PAL U2電路在功率管理端口提供三個位-SD(0)、SD(1)、SD(2)。SD(2)控制第二PAL U2的引腳18DISPLAY_OFF輸出。對功率管理端口的SD(2)寫入ONE時,視頻控制器56停止產(chǎn)生視頻信號。同樣,對功率管理端口的SD(2)寫入ZERO將允許視頻控制器56產(chǎn)生視頻信號。
上面還提到,SD(1)和SD(0)協(xié)力工作以提供四個操作狀態(tài)002、012、102和112。RESETDRV輸入值將第二PAL U2初始化為002狀態(tài)。在這個狀態(tài)下,按下開關(guān)21只使電源17被“關(guān)掉”。在執(zhí)行代碼的某一點(diǎn)上,如果用戶要求這樣做,軟件可對功率管理端口寫入XXXXXX012,使得第二PAL U2進(jìn)入012狀態(tài)。012狀態(tài)是常規(guī)APM狀態(tài)。在每次APM進(jìn)行“取得事件”操作期間,監(jiān)督程序檢驗(yàn)以查看是否不活動備用定時器期滿或者不活動暫停定時器期滿。如果不活動備用定時器期滿,則監(jiān)督程序?qū)裍XXXX1XX2寫到I/O端口,它將消隱視頻信號。如果計(jì)算機(jī)一旦脫離備用狀態(tài)并且重新進(jìn)入常規(guī)運(yùn)行狀態(tài),則監(jiān)督程序?qū)裍XXXX0XX2寫到I/O端口,它將使視頻控制器56產(chǎn)生視頻信號。如果不活動暫停定時器期滿,則監(jiān)督控制調(diào)用暫停程序,這將在和圖10對應(yīng)的文字段落里得到更充分的說明。
另外,在每次APM“取得事件”的操作期間,監(jiān)督程序讀功率管理端口。如果OFFH被回送,則開關(guān)21末被按下過。另一方面,如果OFEH被回送,則開關(guān)21被按下過并且計(jì)算機(jī)系統(tǒng)啟動暫停程序,其在和圖10對應(yīng)的文字段落會得到更充分的說明。如果開關(guān)21曾被按下過,或者不活動暫停定時器期滿,則故障保險(xiǎn)定時器已被啟動而且C2進(jìn)行充電;因此,為防止故障保險(xiǎn)定時器把電源17關(guān)掉,暫停程序?qū)裍XXXXX112寫到I/O端口以對該定時器復(fù)位,并且立即把XXXXXX012寫到I/O端口以恢復(fù)到012方式。當(dāng)系統(tǒng)暫停時,暫停程序?qū)裍XXXXX112寫到I/O端口以便立即把電源17“關(guān)掉”。
系統(tǒng)軟件在對本發(fā)明計(jì)算機(jī)系統(tǒng)10的硬件方面完成說明之后,代碼方面仍然有待說明。
現(xiàn)參照圖8,圖中表示對加電程序的一般性概述。程序開始于200,此時CPU轉(zhuǎn)移并執(zhí)行由復(fù)位向量指向的代碼。這種情況出現(xiàn)于每一次CPU被加電和當(dāng)CPU被一個復(fù)位硬件信號復(fù)位或者當(dāng)CPU通過執(zhí)行RESET指令而復(fù)位,該RESET指令是通過向由復(fù)位向量指向的代碼轉(zhuǎn)移而執(zhí)行的。這種復(fù)位過程在技術(shù)上是周知的。
一般而言,加電程序的流程取決于系統(tǒng)是否處于斷電狀態(tài)156或暫停狀態(tài)154。也就是說,在CMOS NVRAM96里暫停標(biāo)志是否相應(yīng)地清除的還是置位的。如在202處所示,通過從非易失的CMOS存儲器96里讀出暫停標(biāo)志,系統(tǒng)10判別它是否處于斷電狀態(tài)156或者處于暫停狀態(tài)154。當(dāng)系統(tǒng)脫離常規(guī)運(yùn)行狀態(tài)150進(jìn)入斷電狀態(tài)156或暫停狀態(tài)154中的一種時,各個程序或者SET(置位)或者CLEAR(清除)NVRAM里的暫停標(biāo)志。如果在NVRAM96里暫停標(biāo)志設(shè)置,則計(jì)算機(jī)系統(tǒng)10處于暫停狀態(tài)154并且計(jì)算機(jī)系統(tǒng)10的狀態(tài)已存在固定磁盤存儲設(shè)備31里。另一方面,如果NVRAM96里的暫停標(biāo)志清除,則計(jì)算機(jī)系統(tǒng)10處于斷電狀態(tài)156而計(jì)算機(jī)系統(tǒng)10的狀態(tài)不存儲在固定磁盤存儲設(shè)備31里。這樣,如果暫停標(biāo)志在NVRAM96中設(shè)置,則計(jì)算機(jī)執(zhí)行“常規(guī)”引導(dǎo)程序,如所示的任務(wù)204-210。第一個任務(wù)是加電自檢(POST),如在204處所示,它將在和圖11對應(yīng)的文字段落里給予更充分的說明;在從POST返回后,CPU40調(diào)用PBOOT程序以裝入操作系統(tǒng),如206處所示。
PBOOT程序是一個運(yùn)行在IBM PS/2計(jì)算機(jī)上的標(biāo)準(zhǔn)程序,但有細(xì)微的不同,這將在下面解釋。PBOOT判別從那兒引導(dǎo)(從硬磁盤機(jī)31或從軟盤機(jī)里的磁盤中的一種),裝入操作系統(tǒng),在CON-FIG.SYS文件的指示下分析和完成系統(tǒng)更改,而在把控制交回到操作系統(tǒng)之前最后執(zhí)行AUTOEXEC.BAT批處理文件。在技術(shù)上PBOOT程序是周知的。但是,只有本發(fā)明計(jì)算機(jī)系統(tǒng)10才獨(dú)有的是,該引導(dǎo)程序和裝入在操作系統(tǒng)里的先進(jìn)功率管理(APM)預(yù)編程接口(API)通信。APM API是由Intel和Microsoft研制的,而且許多操作系統(tǒng)現(xiàn)都實(shí)現(xiàn)APM API如IBM的OS/2,IBM的PC-DOS,Microsoft的MS-DOS和Microsoft的Windows.APM BIOS引導(dǎo)程序通知APM OS存在監(jiān)督程序。在用戶的指示下,操作系統(tǒng)無限期地執(zhí)地指令,如210處所示。但是,將監(jiān)督程序的情況通知API的結(jié)果是,APM BIOS和APM OS使監(jiān)督程序的執(zhí)行“并行于”程序的執(zhí)行,如212處所示。也就是說,系統(tǒng)10是一個分時多任務(wù)系統(tǒng),并且APM取得事件操作(Get Event)以及跟著的監(jiān)督程序周期性地執(zhí)行。最終結(jié)果是監(jiān)督程序大約每秒執(zhí)行一次。監(jiān)視程序?qū)⒃诤蛨D9對應(yīng)的文字段落中得到充分地解釋。在常規(guī)引導(dǎo)程序204-210結(jié)束之后,計(jì)算機(jī)系統(tǒng)10處于常規(guī)運(yùn)行狀態(tài)150,如在和圖4對應(yīng)的文字段落里所討論的那樣。
再參看任務(wù)202,如果NVRAM96里的暫停標(biāo)志設(shè)置,則系統(tǒng)狀態(tài)已保留在硬磁盤機(jī)31里面系統(tǒng)進(jìn)行恢復(fù)引導(dǎo)程序,其在任務(wù)214-220中表示。首先,系統(tǒng)執(zhí)行簡化的POST,如在214處所示。簡化的POST將在和圖11對應(yīng)的文字段落中得到說明。在簡化的POST之后,系統(tǒng)調(diào)用恢復(fù)程序,如在216處所示。在和圖12對應(yīng)的文字段落里將詳細(xì)介紹恢復(fù)程序。只要恢復(fù)程序把計(jì)算機(jī)系統(tǒng)的狀態(tài)復(fù)原到系統(tǒng)10在被暫停起來之前的配置就夠了。和標(biāo)示在任務(wù)204和210處的常規(guī)引導(dǎo)程序不同,恢復(fù)引導(dǎo)程序不需要通知APM API監(jiān)督程序是否存在,因?yàn)锳PM程序必定已經(jīng)運(yùn)行過才能暫停系統(tǒng),而當(dāng)系統(tǒng)狀態(tài)被復(fù)原時,APM被裝回到存儲器里。這樣,當(dāng)恢復(fù)程序完成復(fù)原系統(tǒng)10的狀態(tài)時,APM已在適當(dāng)位置,并且和被復(fù)原的代碼“并行地”運(yùn)行,如在212和220處所示。在恢復(fù)引導(dǎo)程序214-220結(jié)束后,計(jì)算機(jī)系統(tǒng)10處于常規(guī)運(yùn)行狀態(tài)150,如在和圖4對應(yīng)的文字段落里所討論的那樣。這樣,在常規(guī)引導(dǎo)程序204-210或恢復(fù)引導(dǎo)程序214-220被執(zhí)行之后,計(jì)算機(jī)系統(tǒng)10處于常規(guī)運(yùn)行狀態(tài)150。
圖9是一個流程圖,表示監(jiān)督程序的細(xì)節(jié),該程序大約每一秒在“Get Event(取得事件)”操作期間被APM調(diào)用。不同的操作系統(tǒng)以不同的頻率執(zhí)行取得事件操作。
監(jiān)督程序在圖9的222處啟動。下面的文字段落里假定計(jì)算機(jī)系統(tǒng)10啟動時處于常規(guī)運(yùn)行狀態(tài)150。在224處,第一個任務(wù)是檢驗(yàn)用戶是否按過開關(guān)21。通過讀功率管理端口來檢驗(yàn)開關(guān)21,如已在和圖6和圖7對應(yīng)的文字段落里所敘述的那樣。在第二PAL U2處于開關(guān)狀態(tài)012情況下進(jìn)行讀操作時,如果開關(guān)21未被按下則功率管理端口回送FFH,如果開關(guān)21被按下則回送FEH。
如果在任務(wù)224處的檢驗(yàn)表示用戶按過開關(guān)21,則監(jiān)督程序在226處設(shè)置“暫停請求”APM回送代碼,然后在228處返回到APM。對設(shè)置“暫停請求”APM回送代碼作出響應(yīng),APM執(zhí)行任何必要的系統(tǒng)任務(wù)(如使硬磁盤同步),然后發(fā)出“暫停命令”,它使APM BIOS路由程序調(diào)用暫停程序。暫停程序在和圖10對應(yīng)的文字段落里描述。暫停程序本質(zhì)上使系統(tǒng)脫離常規(guī)運(yùn)行狀態(tài)150和進(jìn)入暫停狀態(tài)154,并且可能在幾條指令后(如果系統(tǒng)沒有準(zhǔn)備好進(jìn)入暫停)或者幾分鐘,幾小時,幾天,幾周或幾年后把控制交回給監(jiān)督程序。暫停程序總是設(shè)置“常規(guī)暫?!盇PM回送代碼,不管暫停程序是從未暫停情況返回還是從完整的暫停及恢復(fù)操作后返回都是如此。
更經(jīng)常的情況是,開關(guān)21未被按下,則監(jiān)督程序移動到任務(wù)230來檢驗(yàn)查看是否系統(tǒng)剛剛恢復(fù)。如果暫停程序被調(diào)用,則系統(tǒng)認(rèn)為它剛剛得到恢復(fù),不管暫停程序是從未暫停過情況下返回還是從完整的暫停和恢復(fù)操作后返回都是如此?;謴?fù)在230處檢驗(yàn),如果系統(tǒng)剛被恢復(fù)(或者由于文件活動的直接存儲存取未執(zhí)行暫停操作),在232處設(shè)置“常規(guī)恢復(fù)”APM回送代碼,并在234處返回APM。對此作出響應(yīng)、APM OS驅(qū)動程序更新系統(tǒng)時鐘和其它值,它們在間歇期間可能變?yōu)檫^時。
更經(jīng)常的情況是,系統(tǒng)10不是剛被恢復(fù),則監(jiān)督程序移動到任務(wù)236,來檢驗(yàn)任何用戶活動。在任務(wù)236處檢驗(yàn)三種類型的用戶活動硬盤機(jī)31活動,鍵盤12活動和鼠標(biāo)器13活動。每次APM“取得事件”操作時,監(jiān)督程序讀硬盤機(jī)的磁頭值、柱面值和扇面值,讀鼠標(biāo)器13發(fā)送的最后字節(jié)的字節(jié)值(它是垂直位置),讀鍵盤端口的字節(jié)值(它是最后按下的鍵),并從實(shí)時時鐘讀分鐘值,分鐘值范圍從0發(fā)到59分并在每小時的開端繞回0分。這五個活動變量(磁頭、柱面、扇面、鼠標(biāo)器字節(jié)、鍵盤字節(jié))和分鐘值被臨時地存儲起來。然后這五個活動變量和上一次取得事件保留下來的五個活動變量進(jìn)行比較。如果這五個當(dāng)前值和上一次取得事件的五個值相同,則不存在用戶活動。如果值不相同,則存在用戶活動,并且當(dāng)前活動值被保存起來,用于和下次取得事件期間讀出值的比較。
上述活動檢測方式是在CPU上執(zhí)行程序。代替地,活動可在硬件方式下得到監(jiān)視。例如,16條硬件中斷線路可用來監(jiān)視活動。
如果已有活動,在238處監(jiān)督程序接著通過檢驗(yàn)備用標(biāo)志判別計(jì)算機(jī)系統(tǒng)10是否處于備用狀態(tài)152。如果備用標(biāo)志設(shè)置,指示系統(tǒng)10處于備用狀態(tài)152,則在240處,監(jiān)督程序退出備用狀態(tài)152并且進(jìn)入常規(guī)運(yùn)行狀態(tài)150。監(jiān)督程序通過對一些設(shè)備增加供電的方式退出備用狀態(tài),這些設(shè)備在進(jìn)入備用狀態(tài)152時曾降低供電。在最佳實(shí)施例中這包括(1)把01H寫入功率管理端口,它使視頻控制器56開始產(chǎn)生視頻信號,并同時使第二PAL U2處于012狀態(tài);(2)把一個適當(dāng)?shù)闹祵戇M(jìn)固定磁盤控制器86以使硬磁盤機(jī)31內(nèi)的硬盤開始旋轉(zhuǎn);(3)清除備用標(biāo)示,以指明系統(tǒng)10處于常規(guī)運(yùn)行狀態(tài)150。
另外,如果有過活動,則來自實(shí)時時鐘98的分鐘值也被保留,以供和接著發(fā)生的取得事件的分鐘值進(jìn)行比較。在241處,保留當(dāng)前分鐘值的操作有效地復(fù)位不活動備用定時器和不活動暫停定時器。在常規(guī)使用期間,將會有用戶活動,在242處監(jiān)督程序設(shè)置“無事件”APM回送代碼,并返回243處的APM調(diào)用代碼。APM不調(diào)用任何程序以對“無事件”回送代碼作出響應(yīng)。
如果任務(wù)236的檢驗(yàn)表明未有過用戶活動,則監(jiān)督程序接著分別在245處和247處檢驗(yàn)是否不活動備用定時器和不活動暫停定時器期滿。如果系統(tǒng)10處于備用狀態(tài)152,則不活動備用定時器不對期滿進(jìn)行檢驗(yàn);相反地,檢驗(yàn)在任務(wù)244處跳躍。
通過從存儲分鐘值中減去當(dāng)前分鐘值,可以得到相應(yīng)的自從用戶活動之后的分鐘數(shù)值,來實(shí)現(xiàn)對期滿的檢驗(yàn)。這個值在245處和不活動備用超時值比較,在247處和不活動暫停超時值比較。這兩個超時值可供用戶選擇,并且可以這樣設(shè)置,即系統(tǒng)永遠(yuǎn)不會進(jìn)入備用用152,或永遠(yuǎn)不會進(jìn)入暫停狀態(tài)154,或永遠(yuǎn)不會因?yàn)閮蓚€定時器中的一個的期滿而進(jìn)入備用狀態(tài)152或暫停狀態(tài)154中的一種狀態(tài)。把兩個超時值中的一個置為0表示該定時器永遠(yuǎn)不會期滿。
如果自從最后用戶活動以來的分鐘數(shù)等于或大于不活動備用定時器的超時值,則監(jiān)督程序在246處使系統(tǒng)10進(jìn)入備用狀態(tài)152。如果不活動備用定時器沒有期滿,在247處監(jiān)督程序接著檢驗(yàn)不活動暫停定時器的期滿。另一方面,如果不活動備用定時器期滿,則監(jiān)督程序通過把某些部件設(shè)置到它們各自的低功率方式使得系統(tǒng)10進(jìn)入備用狀態(tài)152。在最佳實(shí)施例中,這包括(1)把05H寫進(jìn)功率管理端口,這使得在讓第二PAL U2處于011狀態(tài)的同時視頻控制器56停止產(chǎn)生視頻信號,(2)對固定磁盤控制器86寫進(jìn)一個適當(dāng)值,使得硬磁盤機(jī)進(jìn)入低功率方式(硬磁盤機(jī)里的硬盤停止旋轉(zhuǎn)),和(3)設(shè)置備用標(biāo)志,表明系統(tǒng)10處于備用狀態(tài)152。簡言之,在最佳實(shí)施例中,監(jiān)督程序消隱視頻信號,停止硬磁盤機(jī)31里硬盤的旋轉(zhuǎn),并設(shè)置標(biāo)志以表明系統(tǒng)10處于備用狀態(tài)152。在使系統(tǒng)10進(jìn)入備用狀態(tài)152后,在247處,監(jiān)督程序檢驗(yàn)不活動暫停定時器是否期滿。
在247處,監(jiān)督程序檢驗(yàn)不活動暫停定時器是否期滿。如果自從最后用戶活動以來的分鐘數(shù)等于或大于不活動暫停超時值,則監(jiān)督程序在248處設(shè)置“暫停請求”APM回送代碼,并且返回243處的APM。如在上面和任務(wù)226對應(yīng)的文字段落里所描述的那樣,對設(shè)置“暫停請求”APM回送代碼的響應(yīng),APM執(zhí)行任何必要的系統(tǒng)任務(wù)然后調(diào)用暫停程序。暫停程序?qū)⒃诤蛨D10對應(yīng)的文字段落里充分地討論,簡言之,它使系統(tǒng)10脫離常規(guī)運(yùn)行狀態(tài)150并進(jìn)入暫停狀態(tài)154。如在和任務(wù)226對應(yīng)的文字段落里所討論的那樣,暫停程序可以在對或不對系統(tǒng)10實(shí)行暫停操作的情況下把控制返回給監(jiān)督程序。另一方面,如果不活動暫停定時器不期滿,則監(jiān)督程序在242處設(shè)置“無事件”APM回送代碼并返回到243處的APM調(diào)用代碼。
盡管最經(jīng)?!盁o事件”APM回送代碼將返回到APM,不同的其它事件可以返回到APM。但是,對于每次APM取得事件只能規(guī)定一種APM回送代碼。例如,在進(jìn)入備用狀態(tài)152之后,“無事件”被回送給APM,在脫離暫停狀態(tài)154之后,“常規(guī)暫停”APM回送代碼被回送給APM。排隊(duì)給APM的特定信息取決于計(jì)算機(jī)系統(tǒng)的準(zhǔn)確狀態(tài)。監(jiān)督程序也回送“常規(guī)恢復(fù)”APM回送代碼或“暫停請求”APM回送代碼。
在對暫停程序的了解后可以最好地理解加電和恢復(fù)程序。因此,相信按下述次序可得到對APM BIOS程序的最好說明對本發(fā)明加電程序的一般性概述(上面的圖8中)、監(jiān)督程序的細(xì)節(jié)(圖9)、本發(fā)明暫停程序的細(xì)節(jié)(圖10)、本發(fā)明的加電進(jìn)程(圖11)、本發(fā)明的恢復(fù)程序的細(xì)節(jié)(圖12)、保留CPU狀態(tài)程序的細(xì)節(jié)(圖13)、復(fù)原CPU狀態(tài)程序的細(xì)節(jié)(圖14)和保留8259狀態(tài)程序的細(xì)節(jié)(圖15)。
相信,因?yàn)榇蠖鄶?shù)程序相互作用并且暫停/恢復(fù)進(jìn)程是一個連續(xù)的循環(huán),盡管本發(fā)明計(jì)算機(jī)系統(tǒng)10的討論在某種程度上是循環(huán)的,但是在引導(dǎo)程序(圖11)或恢復(fù)程序(圖12)之前對暫停程序(圖10)的討論是很有益的?,F(xiàn)參照圖10,它表示暫停程序的流程圖。請回想在常規(guī)引導(dǎo)程序204-210或者恢復(fù)引導(dǎo)程序214-220中的一個被執(zhí)行之后,計(jì)算機(jī)系統(tǒng)10處于常規(guī)運(yùn)行狀態(tài)150。而且,如在上面和圖8對應(yīng)的段落里所提到的那樣,不論計(jì)算機(jī)系統(tǒng)是常規(guī)引導(dǎo)的(204-210)還是恢復(fù)引導(dǎo)的(214-220),在各個程序結(jié)束之后,APM OS驅(qū)動程序知道APM BIOS程序,如圖8所示的監(jiān)督程序。作為結(jié)果,大約每一秒鐘APM輪詢監(jiān)督程序。
暫停程序示在圖10中并從250處開始。通過APM對監(jiān)督程序回送給APM“暫停請求”APM回送代碼作出響應(yīng),暫停程序被調(diào)用。首先,保留CPU狀態(tài)程序被調(diào)用,如252處所示。保留CPU狀態(tài)程序?qū)⒃诤蛨D13對應(yīng)的文字段落里細(xì)化?,F(xiàn)在只要這一點(diǎn)就夠了,即,不論當(dāng)暫停程序最初被調(diào)用時CPU40處于何種方式,暫停程序的剩余部分將隨CPU40按實(shí)址方式執(zhí)行,因此,它可以得到執(zhí)行并且無須擔(dān)心會因?yàn)樵噲D在允許的地址空間之外執(zhí)行指令或因?yàn)樵噲D執(zhí)行一條特權(quán)指令而產(chǎn)生任何錯誤。
保留CPU狀態(tài)程序在253處,以唯一的方式,把程序控制返回給暫停程序。從保留CPU狀態(tài)程序到暫停程序的返回涉及到對CPU的復(fù)位,在和下面圖13任務(wù)630和632相對應(yīng)的文字段落將對此詳細(xì)解釋。關(guān)于暫停程序的重要細(xì)節(jié)在于,CPU寄存器被寫進(jìn)段地址為E000H的數(shù)據(jù)結(jié)構(gòu)而且CPU40現(xiàn)在處于實(shí)址方式。
暫停程序接著在254處確定是否開關(guān)21曾被按過。按和圖6和圖7對應(yīng)的文字段落中所描述的那樣檢驗(yàn)開關(guān)21是否閉合。簡言之,如果開關(guān)21曾被按過,則在讀功率管理端口時它將回送FEH。如果沒有,在被讀時它將回送FFH。如果開關(guān)未被按過,則正在進(jìn)行的暫停是軟件暫停并在CMOS NVRAM96里設(shè)置軟件暫停標(biāo)志。這保證軟件暫停不會同由開關(guān)閉合而引起的硬件暫停相混淆。如果暫停是軟件暫停,下一次開關(guān)閉合使得該暫停變成硬件暫停。在把軟件暫停轉(zhuǎn)變?yōu)橛布和V蟮南乱淮伍_關(guān)閉合將把該暫停異常結(jié)束掉。
接著,如260處所示,BIOS ROM88不被遮蔽。通過首先關(guān)閉ISA訪問段C000H和D000H BIOS ROM不被遮蔽。接著,BIOS向量從指向段C000H和D000H改變到指回ROM88。下一個任務(wù)是在段C000H里建立一個棧,如262處所示。
在棧建立之后,在264處暫停程序判別DMA控制器72,軟盤適配器84和IDE磁盤控制器86以查看是否有任何DMA傳送、軟盤機(jī)傳送或硬盤機(jī)傳送當(dāng)前各自地在進(jìn)行中。如果是,暫停不能夠完成,因?yàn)檫@三種類型傳送的特有特征阻止執(zhí)行良好的暫停。例如,如果從硬磁盤機(jī)31上的硬文件傳送正在進(jìn)行,數(shù)據(jù)已經(jīng)被IDE控制器讀過,但是尚未傳送給系統(tǒng)存儲器53。這些數(shù)據(jù)不能充分地由CPU訪問,因此,如果在硬文件讀(操作)的中間系統(tǒng)被暫停,數(shù)據(jù)會被丟掉。這樣,如果這三種類型傳送的任一種在進(jìn)行之中,暫停被擱置至到下一次APM取得事件,那時再次檢驗(yàn)DMA和軟盤控制器的活動狀況。
接著,在252、260和262執(zhí)行過的任務(wù)必須被倒回來,這樣控制才能傳回給APM。首先,BIOS從讀/寫改變到只讀,如265處所示。它是通過關(guān)閉仍然含有遮蔽信號的段C000H和D000H來完成的。然后,對兩個段的ISA訪問被接通回來。在任務(wù)262處建立的棧被彈出和復(fù)原。最后,在266處通過復(fù)原CPU狀態(tài)程序CPU的狀態(tài)被復(fù)原,這發(fā)生在把控制于267處傳回給APM之前。大約下一秒鐘在下一個取得事件期間暫停程序會再次被APM輪詢。這一次,阻止暫停進(jìn)程的傳送操作可能結(jié)束,允許暫停延續(xù)。
現(xiàn)回到任務(wù)264,如果當(dāng)前不進(jìn)行DMA傳送、軟盤機(jī)傳送或硬文件傳送,則暫??杀粓?zhí)行。暫停程序在268處繼續(xù)。請回想當(dāng)功率按鈕被按下時故障保險(xiǎn)定時器被允許工作。因此,第一個任務(wù)是如圖6對應(yīng)文字段落所述的對故障保險(xiǎn)定時器復(fù)位,如268處所示。通過把0X112寫到功率管理端口故障保險(xiǎn)定時器被復(fù)位,如曾在圖6和圖7對應(yīng)的文字段落中充分說明的那樣。這使得第二PAL U2的引腳9(圖6中)放掉經(jīng)R4充給C2的任何電荷,這樣防止C2約為2.7VDC的集累電壓使Q1導(dǎo)電。請回想如果Q1導(dǎo)電,會把第二PAL U2的引腳11拉至邏輯ZERO,第二PAL U2內(nèi)的電路將使第二PAL U2的引腳12輸出邏輯ONE,使電源17停止向計(jì)算機(jī)系統(tǒng)10提供穩(wěn)壓功率,如已在和圖6和圖7對應(yīng)的文字段落里更充分地說明那樣。這樣,C2必須至少約每10秒通過暫停程序放電以防止電源在暫停中間被斷掉。
下一步,在270處,8042協(xié)同處理器104的狀態(tài)被保留。8042協(xié)同處理器104寄存器在技術(shù)上是周知的。寄存器是可由CPU40直接讀的,它們的值被直接寫進(jìn)D000H里的數(shù)據(jù)結(jié)構(gòu)里。
接著,在272處,8259中斷控制器92的狀態(tài)被保留。暫停程序調(diào)用8259保留狀態(tài)程序,它將在和圖15對應(yīng)的文字段落里細(xì)化?,F(xiàn)在只要說這一點(diǎn)就夠了,即8259保留狀態(tài)程序查明兩個8259中斷控制器92的未知寄存器的內(nèi)容,即使其中某些寄存器是只寫的。寄存器值被直接寫到D000H的數(shù)據(jù)結(jié)構(gòu)里。
在中斷控制器92的狀態(tài)被保留之后,中斷控制器92的配置必須被改變到一個已知的狀態(tài),以許可由暫停程序執(zhí)行的不同的中斷驅(qū)動任務(wù)發(fā)揮適當(dāng)功能。因此,在274處,BIOS數(shù)據(jù)區(qū)和向量表被交換。暫停程序把在段0000H里的現(xiàn)行狀態(tài)BIOS數(shù)據(jù)區(qū)和向量表的內(nèi)容復(fù)制到段D000H里的一個單元。接著,已知狀態(tài)BIOS數(shù)據(jù)區(qū)和向量表的內(nèi)容從段D000H的數(shù)據(jù)結(jié)構(gòu)復(fù)制到D000H里的單元。在圖11所示的引導(dǎo)程序的任務(wù)414里已知狀態(tài)BIOS數(shù)據(jù)區(qū)和向量表被復(fù)制到段D000H,引導(dǎo)程序?qū)⒃谙旅嬗懻?。最后現(xiàn)行狀態(tài)BIOS數(shù)據(jù)區(qū)和向量表從段DOOOH復(fù)制到段DOOOOH里的數(shù)據(jù)結(jié)構(gòu)。當(dāng)該程序在274處結(jié)束時,所有的中斷,如中斷13H(磁盤讀/寫)和中斷10H(視頻訪問)將如預(yù)想的那樣發(fā)揮功能。
接著,在276處定時器102的狀態(tài)被保留。定時器的寄存器在技術(shù)上是周知的。所有這些寄存器可由CPU40直接讀,它們的值被直接寫進(jìn)D000H里的數(shù)據(jù)結(jié)構(gòu)。在276處IDE磁盤控制器86的狀態(tài)也被保留。IDE磁盤控制器86寄存器在技術(shù)上是周知的。所有這些寄存器可直接由CPU40讀,它們的值被直接寫進(jìn)D000H里的數(shù)據(jù)結(jié)構(gòu)。
下一個步驟是準(zhǔn)備系統(tǒng)存儲器,使它可被寫到硬磁盤機(jī)31上的暫停文件。系統(tǒng)存儲器包括系統(tǒng)RAM53(它既包括主存儲器又包括任何擴(kuò)充存儲器)和視頻存儲器58。在這個時候,部分RAM53可能在外部高速緩存60里。CPU高速緩存在任務(wù)628里被沖洗,這將在下面和圖13對應(yīng)的文字段落里討論。這樣,必須在RAM53可寫到硬磁盤機(jī)31前沖洗外部高速緩存。這樣,系統(tǒng)高速緩存60在286處被沖洗。在沖洗完成之后,RAM53是完整的,沒有存儲數(shù)據(jù)保留在CPU高速緩存41或者系統(tǒng)高速緩存60中。
在系統(tǒng)10上執(zhí)行的代碼可能已把IDE控制器86置為未知狀態(tài)。接著,在292處,下個步驟把IDE控制器86初始化到已知狀態(tài)。這是通過把值直接寫進(jìn)IDE控制器86里的寄存器中來實(shí)現(xiàn)的。
接著,在294處,暫停文件必須被定位到硬磁盤機(jī)31里的固定磁盤上。暫停文件的磁頭、扇面和柱面存儲在CMOS存儲器96里。一旦暫停文件被定位,文件長度和特性表被讀出。在最佳實(shí)施例中,特性表是一個任意長度的ASCII代碼,它指明暫停文件的存在。特性表的其它代替實(shí)現(xiàn)是可能的,如使用具有在硬文件系統(tǒng)里被隨機(jī)發(fā)現(xiàn)的非常低概率的二進(jìn)制字符串。
在讀出暫停文件的文件長度和特性表之后,在296處的下個步驟是保證該文件長度和特性表是正確的。如果特性表不正確,表示另一個程序可能修改過暫停文件,而如果文件長度不正確,表示暫停文件的長度被修改過,在其中任一種情況下則在298處暫停程序調(diào)用致命暫停錯誤程序,其啟動圖13的652任務(wù)。如果用戶按下開關(guān)17,以退出致命暫停錯誤程序,程序控制從任務(wù)299轉(zhuǎn)移到任務(wù)506。
另一方面,如果致命是正確的并且暫停文件足夠長,則暫停程序可能著手把計(jì)算機(jī)系統(tǒng)的狀態(tài)寫進(jìn)存儲器。
在把計(jì)算機(jī)系統(tǒng)10的狀態(tài)寫到硬磁盤機(jī)31之前,在297處,故障保險(xiǎn)定時器C2被復(fù)位并且開關(guān)被檢驗(yàn)以探測開關(guān)21是否又被按下。如在和圖6和圖7對應(yīng)的文字段落里所說明過的那樣,如果對功率管理端口的讀回送FEH,則開關(guān)21未被重新按過,暫停應(yīng)該繼續(xù)。另一方面,如果對功率管理端口的讀回送FFH,則開關(guān)21被重新按過,暫停應(yīng)該異常結(jié)束。在暫停程序的好幾處C2放電、開關(guān)21被檢驗(yàn)。任務(wù)297只是示意性的;在應(yīng)用技術(shù)中具有一般技能的電路設(shè)計(jì)者能夠確定C2放電的次數(shù)和放電間的時間間隔。暫停程序應(yīng)該保證C2是放電的,因此,在C2把電源17“關(guān)掉”之前進(jìn)行故障保險(xiǎn)定時器復(fù)位。同樣,開關(guān)21應(yīng)該不時地受到檢驗(yàn)。如果開關(guān)21被重新按過,這表明用戶希望異常結(jié)束暫停,則代碼應(yīng)該轉(zhuǎn)移到恢復(fù)程序的適當(dāng)點(diǎn),以繼續(xù)已被暫停程序所暫停的操作。
類似,在350處,控制-更換-刪除異常結(jié)束暫停。按下控制-更換-刪除(同時按下控制鍵、更換鍵和刪除鍵)是對基于IBM BIOS和Intel80×86 CPU家族的典型計(jì)算機(jī)系統(tǒng)進(jìn)行復(fù)位的一種廣為知曉的方法。計(jì)算機(jī)系統(tǒng)10和BIOS中斷1處理程序一起處理控制-更換-刪除,這在技術(shù)上是周知的。在350處,計(jì)算機(jī)系統(tǒng)10稍微修改了中斷1處理程序,在352處它清除CMOS存儲器96里的暫停標(biāo)志,在354處轉(zhuǎn)移到復(fù)位的引導(dǎo)程序。
在本發(fā)明的計(jì)算機(jī)系統(tǒng)10里,當(dāng)暫停程序執(zhí)行時按下控制-更換-刪除使得計(jì)算機(jī)系統(tǒng)進(jìn)入斷電狀態(tài)156。出現(xiàn)這種情況是因?yàn)?,在開關(guān)21閉合后第二PAL U2處于開關(guān)狀態(tài)102,按下控制-更換-刪除時調(diào)用引導(dǎo)程序,而引導(dǎo)程序?qū)β使芾矶丝趯懭?0H來把第二PAL U2置到已知的狀態(tài)。但是,當(dāng)?shù)诙AL U2位于開關(guān)狀態(tài)102時,如把00H寫進(jìn)第二PAL U2,將使第二PAL U2導(dǎo)致電源17停止提供系統(tǒng)功率,如已在圖6和圖7對應(yīng)的文字段落里所說明的那樣。這樣,在處于暫停程序時按下控制-更換-刪除將使計(jì)算機(jī)系統(tǒng)10進(jìn)入斷電狀態(tài)156。
現(xiàn)參照任務(wù)300,在300處暫停文件重新放置在硬磁盤機(jī)31上;特性表短語寫在暫停文件的第一個字節(jié)。接著,在302處,段D000H上的全部64K字節(jié)數(shù)據(jù)被寫進(jìn)暫停文件。這個64K D000H的復(fù)制品實(shí)際上只是位置支持物,在暫停程序的末尾它要被寫回到同樣的單元里。
接著,系統(tǒng)存儲器被寫進(jìn)暫停文件。這是通過一個雙緩沖器系統(tǒng)實(shí)現(xiàn)的從系統(tǒng)存儲器讀出數(shù)據(jù),把它壓縮并寫入段C000H,最后把壓縮后數(shù)據(jù)從段C000H寫入暫停文件。兩種程序以一種分時的安排進(jìn)行工作一個將數(shù)據(jù)壓縮并寫入到段C000H,另一個寫入到暫停文件。前者運(yùn)行在前臺,后者是由中斷驅(qū)動的程序,它運(yùn)行在后臺。很明顯,因?yàn)橹挥幸粋€CPU40,在給定時間只能執(zhí)行一個程序;但是,因?yàn)楹笠粋€程序是中斷驅(qū)動的,它可以按需要將前一個程序的執(zhí)行中斷,以優(yōu)化向暫停文件傳送數(shù)據(jù)的速度。兩個緩沖器中,每個為8K字節(jié)長,這被認(rèn)為是對硬磁盤機(jī)31的傳送時間的優(yōu)化。
這個進(jìn)程開始于304處,讀出、壓縮、并向段C000H寫入足夠的數(shù)據(jù),以填充第一個8K緩沖器。利用運(yùn)行長度編碼法對數(shù)據(jù)進(jìn)行壓縮;當(dāng)然,任何適用的壓縮方法都可以采用。那時,在306處,啟動在307處概括標(biāo)明的從緩沖器寫程序。從緩沖器寫程序307是一個中斷驅(qū)動程序,它運(yùn)行在后臺并包括任務(wù)308-310。概括標(biāo)明在311處的壓縮程序包括任務(wù)312-318,并是一個前臺程序。首先,從緩沖器寫程序307,在308處,把剛由任務(wù)304填充的緩沖器寫入到暫停文件,在從緩沖器寫程序307把緩沖器的內(nèi)容寫進(jìn)暫停文件的同時,壓縮程序311,在312處,繼續(xù)從系統(tǒng)存儲器讀出下一批字節(jié),壓縮它們并把壓縮后的數(shù)據(jù)寫進(jìn)兩個8K緩沖器中的另一個緩沖器里。在314處,一旦壓縮程序311用壓縮數(shù)據(jù)填充緩沖器后,下個步驟為判別是否整個系統(tǒng)存儲器已被壓縮。
IDL控制器不能非常快地把數(shù)據(jù)寫進(jìn)硬磁盤機(jī)31。作為結(jié)果,壓縮程序311總是在從緩沖器寫程序307完成把緩沖器寫入硬磁盤機(jī)之前把未被寫入到硬磁盤機(jī)31的數(shù)據(jù)都填充到8K緩沖器。這樣,壓縮程序311必須等待,使從緩沖器寫程序307完成把緩沖器寫入硬磁盤機(jī)31。如果壓縮程序311還沒有結(jié)束對全部系統(tǒng)存儲器壓縮和寫,則在316處,壓縮程序311等待從緩沖器寫程序307。壓縮程序311和從緩沖器寫程序307通過一組標(biāo)志通信。當(dāng)從緩沖器寫程序307完成把當(dāng)前的緩沖器寫入到暫停文件時,程序307接著切換緩沖器標(biāo)志,對壓縮程序311指出它可以開始用已壓縮數(shù)據(jù)填充已寫入到暫停文件的緩沖器。接著,在309處,故障保險(xiǎn)定時器C2被復(fù)位并對開關(guān)21檢驗(yàn)閉合事件,如已在任務(wù)297對應(yīng)的文字段落里說明的方式。
在310處,從緩沖器寫程序307接著判定剛向暫停文件寫入的緩沖器是否是要寫的最后一個緩沖器。如果不是,從緩沖器寫程序向暫停文件寫入剛被壓縮程序311填充的緩沖器。在其間,通過檢查緩沖器標(biāo)志,壓縮程序311確定一個緩沖器已準(zhǔn)備好可用于更多的已壓縮系統(tǒng)存儲器。也就是說,壓縮程序在316處等待直到從緩沖器寫程序完成當(dāng)前的緩沖器,在這個時間,壓縮循環(huán)在312處繼續(xù)。請注意,視頻存儲器58是不壓縮的。相反,視頻存儲器58利用VESA調(diào)用通過視頻控制器56讀,并利用上面詳細(xì)解釋的雙緩沖區(qū)系統(tǒng)不經(jīng)壓縮地寫。
一旦壓縮程序311完成壓縮所有的系統(tǒng)存儲器,它在318處等待從緩沖器程序307從最后的緩沖器對暫停文件的寫。一旦從緩沖器寫程序307結(jié)束,它從310處轉(zhuǎn)移到318并且不再存在。在這時,沒有后臺程序在執(zhí)行而且主程序在320處繼續(xù)。
接著,在320處,視頻控制器56的狀態(tài)被保留。視頻控制器56寄存器在技術(shù)上是周知的。所有這些寄存器是直接可由CPU40讀的,它們的值直接寫入D000H里的數(shù)據(jù)結(jié)構(gòu)。同時在任務(wù)320里,DMA單元71(DMA控制器72和中央仲裁器82)、8277軟盤控制器84和RS-232UART(通用異步收發(fā)器)14的狀態(tài)被保留。這些設(shè)備具有在技術(shù)上周知的寄存器。軟盤控制器84和UART的所有寄存器是直接可由CPU40讀的,它們的值被直接寫進(jìn)D000H里的數(shù)據(jù)結(jié)構(gòu)。DMA單元不具有可讀寄存器。相反,在每次DMA傳送前只寫寄存器常規(guī)地被設(shè)置。由于這個原因,如果DMA傳送在進(jìn)行之中,則暫停程序停止暫停操作。
希望一旦計(jì)算機(jī)系統(tǒng)10進(jìn)入暫停狀態(tài)150,能夠檢測對暫停文件的竄改行為。例如,有可能某人生成一個修改過的暫停文件,把這個暫停文件移入硬磁盤機(jī)31,并試圖把計(jì)算機(jī)系統(tǒng)10恢復(fù)到與它被保留時的不同狀態(tài)。為此,一個偽隨機(jī)值被置入到段D000H的數(shù)據(jù)結(jié)構(gòu)里。如在328處所示,從高速定時器102中的一個讀出16位時間標(biāo)記。該時間標(biāo)記然后被寫進(jìn)段D000H數(shù)據(jù)結(jié)構(gòu)。
接著,在不考慮進(jìn)位位的情況下通過把各個16位字加起來的辦法計(jì)算整個D000H段的16位檢驗(yàn)和。在330處,該檢驗(yàn)和被寫到段D000H數(shù)據(jù)結(jié)構(gòu),在332,它被寫到CMOS NVRAM96。在這之后,在334處所有的工作變量從CPU40寫入到段D000H數(shù)據(jù)結(jié)構(gòu),而在336處,整個段D000H重寫到暫停文件上,從暫停文件的特性表短語之后開始(直接在特性表之后)。接著,在338,暫停標(biāo)志設(shè)置進(jìn)CMOS NVRAM96,來通過系統(tǒng)10計(jì)算機(jī)系統(tǒng)的狀態(tài)已被保留到暫停文件。
最后,CPU40通過把X102狀態(tài)寫到功率管理端口,使第二PAL U2進(jìn)入102狀態(tài)、把電源“關(guān)掉”。進(jìn)入第二PAL U2102狀態(tài)時,通過以下措施立即將電源17“關(guān)掉”使第二PAL U2引腳12輸出明確為邏輯ONE,使SR鎖存器的輸出引腳3鎖存到邏輯ZERO狀態(tài),允許ON經(jīng)R6拉至HIGH,使電源17的初級/穩(wěn)壓單元172停止沿±5和±12線路提供穩(wěn)壓電壓。電壓降到大約為零需要幾秒鐘,這給CPU一段時間去執(zhí)行許多命令。因此,當(dāng)CPU等待由電源17產(chǎn)生的系統(tǒng)能源電壓衰落,直至CPU停止工作之前,在342處,CPU40執(zhí)行無限循環(huán)。
現(xiàn)參照圖11,其表示引導(dǎo)程序的細(xì)節(jié)。引導(dǎo)進(jìn)程已在和圖8對應(yīng)的文字段落中簡要地概括過。引導(dǎo)程序開始于380處,在那里CPU40轉(zhuǎn)移到并執(zhí)行由復(fù)位向量指向的代碼。每當(dāng)CPU40被加電和無論何時CPU40通過轉(zhuǎn)移到由復(fù)位向量指向的代碼而被復(fù)位時這都要發(fā)生。這種復(fù)位進(jìn)程在技術(shù)上是周知的。
在382處,第一項(xiàng)任務(wù)是檢驗(yàn)CPU40并將存儲器控制器46初始化。CPU由POST程序加以檢驗(yàn)。存儲器控制器46由POST程序初始化。
接著,陰影存儲器被檢驗(yàn)而且BIOS從ROM88復(fù)制到RAM53的陰影存儲器部分。被執(zhí)行代碼的流程取決于暫停標(biāo)志在CMOS NVRAM96里是否設(shè)置。如果暫停標(biāo)志設(shè)置,則計(jì)算機(jī)系統(tǒng)10處于暫停狀態(tài)150,并且計(jì)算機(jī)系統(tǒng)10應(yīng)該復(fù)原到當(dāng)它被暫停時的狀態(tài)。段E000H和F000H里的系統(tǒng)RAM被簡略地檢驗(yàn)。為減少恢復(fù)計(jì)算機(jī)所需時間,只對適當(dāng)長度的存儲器進(jìn)行檢查并清零(000H被寫到各個單元)。
另一方面,如果CMOS NVRAM96里的暫停標(biāo)志清除,則段E000H和F000H里的RAM53被給予標(biāo)準(zhǔn)的和徹底的檢驗(yàn),包括(1)粘性位(sticky-bit)檢驗(yàn),(2)雙位存儲檢驗(yàn)和(3)交叉地址線檢驗(yàn)。這些檢驗(yàn)在技術(shù)上是周知的。
在段E000H和F000H被檢驗(yàn)之后,BIOS可被遮蔽,這包括把ROM BIOS88的內(nèi)容復(fù)制到系統(tǒng)RAM53和把存儲器控制器配置為可執(zhí)行來自RAM的BIOS。進(jìn)行BIOS的遮蔽是為了增加系統(tǒng)的速度;因?yàn)锽IOS運(yùn)行在較快的系統(tǒng)RAM53(典型的存取時間為80毫微秒)上而不是在較慢的ROM88(典型的存取時間250毫微秒)上系統(tǒng)性能得到提高。對BIOS的遮蔽包括把BIOS復(fù)制器裝入到較低速存儲器里的一個地址上,把BIOS從ROM88復(fù)制到系統(tǒng)RAM53的段E000H和F000H上,和允許陰影RAM。
接著,都在384處,視頻控制器56被檢驗(yàn)和初始化并且視頻存儲器58被檢驗(yàn)。這些檢驗(yàn)和初始化在技術(shù)上是周知的。
在386處,被執(zhí)行代碼的流程取決于CMOS NVRAM96里的暫停標(biāo)志是否設(shè)置。如果暫停標(biāo)志設(shè)置,則和任務(wù)383一樣,剩余的系統(tǒng)RAM只被僅僅檢驗(yàn)長度然后清零。但是,如果CMOS NVRAM53里的暫停標(biāo)志清除,則在任務(wù)398處采用在任務(wù)383對應(yīng)文字段落里已描述的三步徹底的存儲器檢驗(yàn)來檢驗(yàn)剩余的系統(tǒng)RAM53。
在存儲器被檢驗(yàn)之后,在400處,輔助設(shè)備-包括8259,UART,8042和任何其它設(shè)備-被檢驗(yàn)和初始化。在任務(wù)408,固定磁盤控制器被初始化。
在409處,被執(zhí)行代碼的流程取決于CMOS NVRAM96里的暫停標(biāo)志是否設(shè)置。如果暫停標(biāo)志設(shè)置,表明電源上次被關(guān)掉時系統(tǒng)狀態(tài)已成功地保留,則引導(dǎo)程序跳過對硬磁盤機(jī)控制器86和硬磁盤機(jī)31的檢驗(yàn)。另一方面,如果CMOS NVRAM96里的暫停標(biāo)志清除,表明上次電源被關(guān)掉時系統(tǒng)的狀態(tài)沒有保留,則在任務(wù)410,引導(dǎo)程序?qū)潭ù疟P控制器86和硬磁盤31進(jìn)行全面的校驗(yàn),如技術(shù)上周知的那樣。
接著,在412處軟盤控制器84被檢驗(yàn)和初始化。
此時,所有的設(shè)備都已初始化而且向量指向已知的地址,所有中斷程序?qū)⑷缙诖菢庸ぷ鳌_@樣,在414處,引導(dǎo)程序快讀BIOS數(shù)據(jù)區(qū)和向量表,它把BIOS數(shù)據(jù)區(qū)和向量表的復(fù)制器寫入段D000H里的數(shù)據(jù)結(jié)構(gòu)。在任務(wù)274該BIOS數(shù)據(jù)區(qū)和向量表被暫停程序用來把計(jì)算機(jī)系統(tǒng)10置為已知狀態(tài),使所有中斷可按預(yù)想地工作。
接著,在416處按技術(shù)上周知的那樣,任何BIOS擴(kuò)充被“掃描進(jìn)”和初始化。BIOS擴(kuò)展是通過外圍設(shè)備適配器,如網(wǎng)絡(luò)適配器,增加到系統(tǒng)上的BIOS代碼塊。典型的BIOS擴(kuò)充位于ISA總線76上的段C000H和D000H里而且具有相應(yīng)的“特性表”以標(biāo)明作為BIOS擴(kuò)充。如果BIOS擴(kuò)充被檢測出,它的長度被檢查而且檢驗(yàn)和被計(jì)算和被檢查。如果特性表、長度和檢驗(yàn)和都表明存在有效BIOS擴(kuò)充,程序控制傳給位于特性表三字節(jié)之后位置上的指令,并且BIOS擴(kuò)充可以執(zhí)行任何所需任務(wù)如對外圍設(shè)備適配器的初始化。一旦該擴(kuò)充結(jié)束執(zhí)行,控制傳送回引導(dǎo)程序,它搜索更多的BIOS擴(kuò)充。任何更多的BIOS擴(kuò)充象上面的BIOS擴(kuò)充一樣地得到處理。如果沒有檢測出更多的BIOS擴(kuò)充,則引導(dǎo)程序轉(zhuǎn)移到任務(wù)417、在417處導(dǎo)引程序?qū)ふ矣泊疟P機(jī)31上的一個分區(qū),它看來象是專門分配給暫停文件的分區(qū)。如果在分區(qū)表上發(fā)現(xiàn)一個帶有PS/1標(biāo)識符(“FE”)的分區(qū)并且這個分區(qū)是足夠大可以容納該特定系統(tǒng)的暫停文件,則這個分區(qū)被確定為用于暫停文件。結(jié)果,暫停文件被分配在文件分配表(FAT)里,如技術(shù)上周知的那樣,暫停文件特性表被寫到文件的第一個字節(jié),而且文件的起始磁頭、扇面和柱面被寫進(jìn)CMOS NVRAM96里。
然后被執(zhí)行的代碼在418處分支,這取決于CMOS NVRAM96里的暫停標(biāo)志是否為設(shè)置。如果暫停標(biāo)志被清除,則在420處引導(dǎo)程序把控制傳送給PBOOT程序。PBOOT在技術(shù)上是周知的并且負(fù)責(zé)裝入操作系統(tǒng)(OS)和來自軟盤機(jī)或硬磁盤機(jī)31的命令解釋程序。對本發(fā)明的常規(guī)引導(dǎo)程序作了輕微地修改,使得當(dāng)OS被裝入時,如果在任務(wù)417未發(fā)現(xiàn)用于暫停文件的分區(qū),則OS執(zhí)行一個OS專用驅(qū)動程序,它在FAT里分配一個相連區(qū)段(如果需要連接一個區(qū)域)文件,對暫停文件的第一個字節(jié)寫進(jìn)特性表,并把暫停文件的開始磁頭、扇面和柱面寫入CMOS NVRAM96。
不論何時暫停文件被分配,F(xiàn)AT里的區(qū)域應(yīng)該是相連的區(qū)段,以允許分別在暫停和恢復(fù)期間可對磁盤快速寫和從磁盤快速讀。
PBOOT接著根據(jù)在CONFIG.SYS文件里找到的指令配置系統(tǒng)。最后,PBOOT把執(zhí)行控制傳送給AUTOEXEC.BAT文件,該文件最終把執(zhí)行控制傳送給操作系統(tǒng)。如果在CMOS NVRAM96里暫停標(biāo)志是清降的,表明當(dāng)上次功率被關(guān)掉時系統(tǒng)狀態(tài)未被保留,則在與任務(wù)421對應(yīng)的文字段落里被更充分解釋的RESUME.EXE被忽略。
回到頂部任務(wù)418,如果CMOS NVRAM96里的暫停標(biāo)志為設(shè)置,指明上次電源被關(guān)掉時系統(tǒng)的狀態(tài)被保留,則在419處,被執(zhí)行的代碼的流程分支,這取決于CMOS NVRAM96里的再初始化適配器標(biāo)志是否為設(shè)置。如果再初始化適配器標(biāo)志被設(shè)置,則在421處引導(dǎo)程序把控制傳送給PBOOT程序。和一般的PBOOT程序一樣,本發(fā)明的PBOOT按照在CONFIG.SYS文件和AUTOEXEC.BAT文件里找到的命令配置系統(tǒng),它們特別裝入驅(qū)動程序和按技術(shù)上周知的方法配置系統(tǒng)。
CONFIG.SYS和AUTOEXEC.BAT里命令可用于初始化系統(tǒng)里的適配器插件板。這種應(yīng)用假設(shè)存在三種類型的適配器插件板類型Ⅰ適配器不需要初始化;類型Ⅱ適配器需要初始化,但是由BIOS擴(kuò)充或由經(jīng)CONFIG.SYS或者AUTOEXEC.BAT裝入的驅(qū)動程序設(shè)置到已知的工作狀態(tài);而類型Ⅲ適配器被在系統(tǒng)上執(zhí)行的代碼修改。包括類型Ⅰ和類型Ⅱ適配器的系統(tǒng)可被暫停和復(fù)原;但是包括類型Ⅲ適配器的系統(tǒng),包括許多連網(wǎng)適配器,可能不能夠復(fù)原,除非這些插件板具有從誤差中恢復(fù)的程序。系統(tǒng)可以暫??蓮恼`差中恢復(fù)的類型Ⅲ插件板。
在最佳實(shí)施例中文件RESUME.EXE被加到AUTOEXEC.BAT文件上,文件RESUME.EXE負(fù)責(zé)把程序控制從PBOOT傳送給恢復(fù)程序。任務(wù)420里的PBOOT忽視RESUME.EXE的存在;但是任務(wù)421的PBOOT執(zhí)行RESUME.EXE,它在類型Ⅱ適配器通過設(shè)備驅(qū)動程序完成初始化之后把控制傳送給恢復(fù)程序,這些設(shè)備驅(qū)動程序是通過PBOOT從CONFIG.SYS和AUTOEXEC.BAT裝入的。
再參照任務(wù)419,如果CMOS96里的再初始化適配器標(biāo)志是清除的,引導(dǎo)程序在422處把執(zhí)行控制直接傳送給恢復(fù)程序,不處理CONFIG.SYS或AUTOEXEC.BAT?;謴?fù)程序從硬磁盤機(jī)上的暫停文件恢復(fù)狀態(tài),這將在和圖12對應(yīng)的文字段落里詳細(xì)說明。
現(xiàn)參照圖12,其中表示恢復(fù)程序,任務(wù)450到530,的細(xì)節(jié)。在配置過程期間,BIOS數(shù)據(jù)區(qū)和向量表可能被修改到未知的狀態(tài);這樣BIOS程序可能或者不可能按所期望的那樣作用。因此,在454處,恢復(fù)程序把段D000H允許為讀/寫,并在456處調(diào)用交換BIOS數(shù)據(jù)區(qū)和向量表程序。該程序把在任務(wù)414里被復(fù)制到段D000H的已知的好BIOS數(shù)據(jù)區(qū)和向量表與在段0000H里當(dāng)前有效的、被修改過的BIOS數(shù)據(jù)區(qū)和向量表交換。當(dāng)該程序結(jié)束時,已知BIOS數(shù)據(jù)區(qū)和向量表有效存在段D000H里,而修改過的BIOS數(shù)據(jù)區(qū)和向量表在段D000H,并且BIOS程序可按期望地作用。
接著,在458處,恢復(fù)程序禁止所有的除了支持鍵盤和硬磁盤機(jī)之外的中斷。然后,在460處,恢復(fù)程序定位硬磁盤機(jī)上的暫停文件,并讀文件長度和特性表,特性表,如上面說明的那樣,是暫停文件的多字節(jié)標(biāo)識符。在462處,被執(zhí)行代碼的流程分支,這取決于暫停程序是否具有正確的長度和特性表。如果暫停文件不具有正確長度和特性表,則在464處恢復(fù)程序把CMOS存儲器96里的暫停標(biāo)志置為CLEAR,并在466處把程序控制傳送給由復(fù)位向量指向的位置上的代碼,因此使得系統(tǒng)按照好象系統(tǒng)從未暫停過那樣引導(dǎo)。另一方面,如果暫停文件具有正確長度和特性表,則在468處恢復(fù)程序通過把暫停文件上位于特性表之后的64K數(shù)據(jù)塊(暫停文件的這部分對應(yīng)于段D000H信息)讀到段C000H繼續(xù)系統(tǒng)恢復(fù)的操作。
接著,在470處,C000H里塊的檢驗(yàn)和被計(jì)算,在472處從CMOS非易失存儲器96上讀出預(yù)先存儲的檢驗(yàn)和,在474處被執(zhí)行代碼的流程分支,這取決于任務(wù)470計(jì)算的檢驗(yàn)和是否等于任務(wù)330計(jì)算的檢驗(yàn)和。如果任務(wù)470計(jì)算的檢驗(yàn)和和任務(wù)330計(jì)算機(jī)的檢驗(yàn)和不同,則暫停文件出現(xiàn)疵漏(例如,它可能被竄改)而控制傳送給任務(wù)464,該任務(wù)把暫停標(biāo)志置為清除并復(fù)位系統(tǒng),如已在和任務(wù)464和466對應(yīng)的文字段落里說明過的那樣。如果任務(wù)470計(jì)算的檢驗(yàn)和等于任務(wù)330的檢驗(yàn)和,則暫停文件被假設(shè)為與由暫停程序?qū)懭氲哪莻€暫停文件相同,在476處段C000H里的數(shù)據(jù)復(fù)制到段D000H里。請注意,當(dāng)C000H數(shù)據(jù)被復(fù)制到時,修改過的BIOS數(shù)據(jù)區(qū)和向量表被重寫,因此是不可恢復(fù)的。
現(xiàn)在,恢復(fù)程序在478處對屏幕寫出一個專門的信號屏幕來通知用戶系統(tǒng)已被恢復(fù),并且用戶應(yīng)該按下控制-更換-刪除以異常結(jié)未恢復(fù)。正如暫停程序一樣,在562處按下控制-更換-刪除會清除暫停標(biāo)志,并在528處使得系統(tǒng)再引導(dǎo)。但是,在再引導(dǎo)過程中,第二PAL U2處于開關(guān)狀態(tài)012,因此,把X00H寫給功率管理端口不會導(dǎo)致電源17停止提供系統(tǒng)功率。這樣,當(dāng)控制-更換-刪除被按下時,系統(tǒng)常規(guī)地再引導(dǎo)而且恢復(fù)程序在執(zhí)行著。
接著在480處、482處和484處,通過把來自段D000H數(shù)據(jù)結(jié)構(gòu)的值寫到對應(yīng)的寄存器時,8277軟盤控制器84、DMA單元71和UART94分別得到恢復(fù)。
然后,從任務(wù)486到500,利用類似暫停程序里任務(wù)304到308對應(yīng)的文字段落里所說明的雙緩沖器程序,從暫停文件恢復(fù)系統(tǒng)存儲器。該雙緩沖器系統(tǒng)從暫停文件讀出被壓縮的數(shù)據(jù),寫到段C000H,擴(kuò)展它并寫進(jìn)系統(tǒng)存儲器。兩個程序工作在分時方式下一個從暫停文件讀出數(shù)據(jù)并把它寫入段C000H,而另一個擴(kuò)展數(shù)據(jù)并把擴(kuò)展過的數(shù)據(jù)寫進(jìn)系統(tǒng)存儲器。后者運(yùn)行在前后,而前者是中斷驅(qū)動的程序,運(yùn)行在后臺。很明顯,因?yàn)橹挥幸粋€CPU40,在一給定時刻只有一個程序可以運(yùn)行;但是,因?yàn)榍耙粋€程序是中斷驅(qū)動的,它可以根據(jù)來自暫停文件的數(shù)據(jù)的傳送速度的優(yōu)化要求,來中斷后一個程序的執(zhí)行。兩個緩沖器的每一個都是8K字節(jié)長,這被相信為可優(yōu)化傳送時間。
這個進(jìn)程開始于486處,即讀暫停文件并對段C000H寫入足夠的數(shù)據(jù)以填充第一個8K緩沖器。此時,在306處開始從緩沖器讀程序,該程序一般表示在489處。從緩沖器讀程序489是一個中斷驅(qū)動程序,它運(yùn)行在后臺,并由任務(wù)490-492組成。一般標(biāo)明在493處的擴(kuò)展程序由任務(wù)494-498組成而且是前臺程序。首先,在490處,從緩沖器讀程序開始讀暫停文件的下一個8K并把它寫進(jìn)另一個緩沖器即現(xiàn)在的當(dāng)前緩沖器里。在從緩沖器讀程序從暫停文件讀下一個8K并把它寫進(jìn)當(dāng)前緩沖器的同時,在494處,擴(kuò)展程序讀由任務(wù)486填充的緩沖器,擴(kuò)展被壓縮數(shù)據(jù),并把擴(kuò)展后的數(shù)據(jù)寫進(jìn)系統(tǒng)存儲器。一旦擴(kuò)展程序493擴(kuò)展該緩沖器里的所有數(shù)據(jù),在496處,下一個步驟是判別是否全部系統(tǒng)存儲器已經(jīng)被擴(kuò)展。
IDE控制器86不能從硬磁盤機(jī)31里非??斓刈x數(shù)據(jù)。作為后果,擴(kuò)展程序493決是在從緩沖器讀程序489完成把數(shù)據(jù)從硬磁盤機(jī)31讀進(jìn)當(dāng)前緩沖器之前,完成對尚未寫入到硬磁盤機(jī)31的8K緩沖器的擴(kuò)展處理。因此,擴(kuò)展程序493必須等待從緩沖器讀程序489完成從硬磁盤機(jī)31讀數(shù)據(jù)。如果擴(kuò)展程序493尚沒有完成全部擴(kuò)展處理和把數(shù)據(jù)全部寫進(jìn)系統(tǒng)存儲器,則在498處擴(kuò)展程序493等待從緩沖器讀程序489。擴(kuò)展程序493和從緩沖器讀程序通過一組標(biāo)志通信。當(dāng)從緩沖器讀程序489結(jié)束從暫停文件向當(dāng)前緩沖器寫數(shù)據(jù)的時候,在490處,該程序489接著切換緩沖器標(biāo)志,指示擴(kuò)展程序493可以開始對剛從暫停文件讀到緩沖器的數(shù)據(jù)進(jìn)行擴(kuò)展。在492處,從緩沖器讀程序接著判別是否還有8K數(shù)據(jù)塊仍然要從暫停文件中讀出。如果不,在502處從緩沖器讀程序從暫停文件讀出剩余數(shù)據(jù)并寫到當(dāng)前緩沖器里。然后從緩沖器讀程序停止在后臺運(yùn)行,實(shí)際上在500處等待擴(kuò)展程序完成對最后存儲器的擴(kuò)展。
在其間,通過確定該沖器標(biāo)志,擴(kuò)展程序493確定一個緩沖器已準(zhǔn)備好以對系統(tǒng)存儲器進(jìn)行擴(kuò)展。也就是說,擴(kuò)展程序在498處等待直到從緩沖器讀程序完成當(dāng)對前緩沖處的操作,在這個時候在494處繼續(xù)擴(kuò)展循環(huán)。
一旦擴(kuò)展程序完成擴(kuò)展所有的系統(tǒng)存儲器,沒有后臺程序在進(jìn)行中,在504處主程序繼續(xù)。
接著,在504處和506處,通過把來自D000H數(shù)據(jù)結(jié)構(gòu)的值寫到視頻控制器56和IDE控制器86各自的寄存器里,這兩個設(shè)備被恢復(fù)。接著,在508處,通過分別地把適當(dāng)值寫入CPU40和高速緩存控制器62,CPU高速緩存41和系統(tǒng)高速緩存被允許工作。接著,在510處到514處,通過把來自段D000H數(shù)據(jù)結(jié)構(gòu)的值寫到定時器控制器102、8042鍵盤接口微處理機(jī)104和8259中斷控制器92各自的寄存器里,恢復(fù)程序恢復(fù)這些設(shè)備的狀態(tài)。
接著,在516處,恢復(fù)程序調(diào)用交換BIOS數(shù)據(jù)區(qū)和向量表程序。在該程序被調(diào)用之前,段0000H里的已知BIOS數(shù)據(jù)區(qū)和向量表是有效的,而從暫停文件上讀出在段D000H數(shù)據(jù)結(jié)構(gòu)里的BIOS數(shù)據(jù)區(qū)和向量表是無效的。在交換之后,已知的BIOS數(shù)據(jù)區(qū)和向量表在段D000H里是無效的,而由暫停程序保留的BIOS數(shù)據(jù)區(qū)和向量表在段0000H里是有效的。
終于,在518處,恢復(fù)程序轉(zhuǎn)移到復(fù)原CPU程序,它把CPU復(fù)原到暫停之前的狀態(tài)。復(fù)原CPU程序?qū)⒃诤蛨D14對應(yīng)的文字段落里更充分地說明。復(fù)原CPU程序最終把執(zhí)行控制傳送回給APM。
最后,CPU40執(zhí)行RETURN指令,使得系統(tǒng)返回到APM。系統(tǒng)現(xiàn)在繼續(xù)執(zhí)行指令仿佛系統(tǒng)從未暫停過。出于全部實(shí)用目的,系統(tǒng)不受暫停/恢復(fù)進(jìn)程的影響。
現(xiàn)參照圖13,它表示保留CPU狀態(tài)程序流程圖。在600處暫停程序轉(zhuǎn)移到保留CPU狀態(tài)程序。請注意APM允許段E000H和F000H,程序可按讀/寫對它們執(zhí)行。另外,如在602所標(biāo)明的,EFLAGS和八個通用寄存器被APM保留。保留CD0狀態(tài)程序首先在604處等待任何DMA(操作)的結(jié)束,并和鼠標(biāo)器數(shù)據(jù)包同步,以保證該程序在鼠標(biāo)器包傳輸之間執(zhí)行。下述步驟允許結(jié)束DMA和與鼠標(biāo)器包同步(1)允許中斷,(2)等待7毫秒使任何DMA結(jié)束,(3)禁止中斷,(4)為鼠標(biāo)器包邊界等待5毫秒,(5)允許中斷,(6)為鼠標(biāo)器包的到達(dá)等待長于五毫秒和(7)禁止中斷。在這些步驟之后,代碼可安全地執(zhí)行于鼠標(biāo)器包之間。
接著,在606處,地址線20(I/O端口92H)的狀態(tài)被推進(jìn)棧,在608處算術(shù)協(xié)同處理器44的狀態(tài)被推進(jìn)棧。然后在610處,標(biāo)志被設(shè)置或被清除以分別表明CPU是在32位還是在16位方式下執(zhí)行。
在612處,被執(zhí)行代碼的流程分支,這取決于CPU40是否執(zhí)行在保護(hù)方式下。如果CPU40不是執(zhí)行在保護(hù)方式下,則它必然執(zhí)行在實(shí)址方式下,因而寄存器可以以非常直接的方式保留。首先,在614處,計(jì)算機(jī)狀態(tài)字和CR3里的值被寫進(jìn)段E000H數(shù)據(jù)結(jié)構(gòu)。同時在614處,零被寫進(jìn)到段E000H數(shù)據(jù)結(jié)構(gòu)里對應(yīng)于TR和LDTR的區(qū)域里,因?yàn)樵趯?shí)址方式下TR和LDTR為零。
代碼在616處和共同的代碼路徑會合,在那里存儲在GDTR和LDTR里的值被寫入段E000H數(shù)據(jù)結(jié)構(gòu)。接著在618處被執(zhí)行代碼的流程分支,這取決于CPU40是否執(zhí)行在虛擬8086方式下。如果CPU40不是執(zhí)行在虛擬8086方式下。則代碼繼續(xù)沿共同路徑進(jìn)入任務(wù)620,在那里查錯寄存器DR7、DR6、DR3、DR2、DR1和DR0被推進(jìn)棧。這些寄存器由查錯程序和其它程序使用。接著在622,DS、ES、FS和GS被推進(jìn)棧。接著CS、SS和ESP的值被寫進(jìn)段E000H數(shù)據(jù)結(jié)構(gòu)。
在這時,所有的要寫入段E000H的值已都被寫入,這樣在626處陰影RAM段E000H和F000H可以被變回只讀方式。接著,在628處,CPU高速緩沖41經(jīng)寫回和無效高速緩存指令被沖洗。
最后,在630處,唯一的關(guān)機(jī)標(biāo)志在CMOS非易失存儲器96里置為設(shè)置。最后在632處,保留CPU狀態(tài)程序?qū)嶋H上“返回”至?xí)和3绦?。該“返回”?shí)際上是繼之以代碼分支的RESET(復(fù)位)。CPU40通過轉(zhuǎn)移至復(fù)位向量指向的代碼來復(fù)位。把CPU40復(fù)位迫使CPU進(jìn)入實(shí)址方式,在這種方式下所有的設(shè)備和存儲器單元都可被訪問而無須擔(dān)心產(chǎn)生保護(hù)故障。在這以后,CPU的狀態(tài)已被保留,暫停程序應(yīng)該保留系統(tǒng)其它部分的狀態(tài)。
在由復(fù)位向量指向的代碼之內(nèi),程序控制分支,取決于CMOS96里的關(guān)機(jī)標(biāo)志是否為設(shè)置。如果關(guān)機(jī)標(biāo)志為清除,則系統(tǒng)如常規(guī)那樣進(jìn)行引導(dǎo)。另一方面,如果關(guān)機(jī)標(biāo)志為設(shè)置,則代碼轉(zhuǎn)移到暫停程序的剩余部分,也就是說,執(zhí)行控制轉(zhuǎn)移到暫停程序圖10里的任務(wù)253,暫停程序完成暫停系統(tǒng)10。這樣,保留CPU狀態(tài)程序有效地在632處“返回”暫停程序。
回過來參照任務(wù)612,如果CPU處于保護(hù)方式,則在任務(wù)634代碼分支,這取決于CPU是否處于虛擬8086方式。如果CPU不處于虛擬8086方式,則在任務(wù)636處代碼再次分支,取決于當(dāng)前特權(quán)級是否為零。如果當(dāng)前特權(quán)是除零之外的任何值,則一個不具有適當(dāng)特權(quán)的程序來執(zhí)行保留CPU狀態(tài)程序并且調(diào)用致命暫停錯誤程序(開始于任務(wù)652)。致命暫停錯誤程序?qū)⒃谙旅嬗懻?。如果程序控制從致命暫停錯誤程序返回,則CPU必須回到保留CPU狀態(tài)程序被調(diào)用前的條件,這樣執(zhí)行轉(zhuǎn)移到圖14的任務(wù)794,它執(zhí)行CPU的部分復(fù)原。因?yàn)榉浅I俚腃PU被修改過,只需要部分復(fù)原。
回過來參照任務(wù)636,如果調(diào)用的代碼具有合適的特權(quán)級,則在642處繼續(xù)保留操作,CP0,CR3,TR和LDTR的值被保留到段E000H數(shù)據(jù)結(jié)構(gòu)。然后該代碼路徑在616處和共同代碼路徑會合,在那里,如已說明過的,GDTR和IDTR的值被保留到E000H數(shù)據(jù)結(jié)構(gòu)里。從這里,代碼經(jīng)過上面說明過的從618到632的路徑,結(jié)果是“返回”(RESET加上轉(zhuǎn)移)到剩余的暫停程序代碼。
回過來參照任務(wù)634,如果CPU40處于虛擬8086方式,則在644處繼續(xù)執(zhí)行,在那里計(jì)算機(jī)狀態(tài)字(CR0的低16位)的值被保留在E000H數(shù)據(jù)結(jié)構(gòu)里,并且段E000H里的一個標(biāo)志被設(shè)置,以指明CPU處于虛擬8086方式。然后該代碼通過646和648的傳送在616處和共同的代碼會合。在任務(wù)618,如果CPU處于虛擬8086方式,則控制轉(zhuǎn)移到650,在那里DS、ES、FS和GS里的值被保留到段E000H數(shù)據(jù)結(jié)構(gòu)里。該代碼在624處再次會合共同的代碼。從這里,代碼經(jīng)過前面已說明過的從624到632的路徑,結(jié)果“返回”到剩余暫停程序代碼(RESET加上轉(zhuǎn)移)。
在任務(wù)652到664可以找到致命暫停錯誤程序,如果具有不正確特權(quán)級的代碼試圖保留CPU的狀態(tài),該程序在638處被調(diào)用。首先,在654,通過把07H再把05H寫進(jìn)功率管理端口,故障保險(xiǎn)定時器被設(shè)置,如在和圖7對應(yīng)的文字段落里已說明過的那樣。然后在任務(wù)656,揚(yáng)聲機(jī)以886赫0.25秒的長度蜂鳴三次,蜂鳴的間隔為1/6秒。三次蜂鳴提醒用戶試圖的暫停未能產(chǎn)生。在蜂鳴之后,在658處故障保險(xiǎn)定時器再次被重置,以在故障保險(xiǎn)定時器期滿把電源17關(guān)閉之前給用戶15到20秒的期待時間。
接著,在任務(wù)660和662,致命暫停錯誤程序反復(fù)地檢驗(yàn),查看是否開關(guān)21被用戶按下,其表明用戶希望異常結(jié)束暫停。對開關(guān)閉合的檢驗(yàn)是通過在對功率管理端口進(jìn)行讀后等待出現(xiàn)FFH來實(shí)現(xiàn)的,如在和圖7對應(yīng)的文字段落里已說明過的那樣。如果用戶按下按鈕21,則執(zhí)行控制返回到上面的任務(wù)640。如果在15到18秒中用戶未按下按鈕21,則故障保險(xiǎn)定時器將期滿,電源17將被“關(guān)掉”,而且,很明顯,對代碼的所有執(zhí)行將停止。
現(xiàn)參照圖14,其中表示開始于700處的復(fù)原CPU程序的流程圖。這個程序被恢復(fù)程序在其它的硬件和存儲器復(fù)原到它們暫停之前的狀態(tài)后調(diào)用。首先,如果段E000H和F000H尚未處于讀/寫,在702處它們應(yīng)成為讀/寫。
接著在704處,被執(zhí)行代碼的流程分支,取決于在暫停的時候CPU40是否執(zhí)行在虛擬8086方式下。如果當(dāng)系統(tǒng)10被暫停的時候CPU40執(zhí)行在虛擬8086方式下,則代碼從任務(wù)706進(jìn)行到任務(wù)728,它們等同于虛擬8086CPU復(fù)原。然后代碼和從任務(wù)730到738的共同的路徑會合。
如果當(dāng)狀態(tài)被保留時CPU處于虛擬8086方式,則CR3、LDTR和TR不能被保留CPU狀態(tài)程序訪問,因而也就無法把它們的值保留在E000H數(shù)據(jù)結(jié)構(gòu)里。因此,CR3、LDTR和TR必須分別在706處、708處和710處被估算。一般而言,它們的估算是通過對RAM53等找由CR3、LDTR和TR指向的結(jié)構(gòu)來進(jìn)行的。例如,找出在GDT(圖示顯示終端)里的LDT(邏輯設(shè)備表)入口,即允許確定LDTR。
CR3在任務(wù)706估算。CR3保持頁面目錄基址寄存器,該寄存器保持頁面目錄的頁框地址、頁面級高速緩存禁止(PCD)位和頁面級寫通過(PWT)位。知道頁面目錄必須開始于系統(tǒng)RAM53的4K邊界上,知道由保留CPU狀態(tài)程序保留在段E000H數(shù)據(jù)結(jié)構(gòu)里的IDTR和GDTR的值并假設(shè)BIOS代碼從地址空間0E000-0F0000上執(zhí)行,可以完成對PDBR的估算。上述假設(shè)是合理的,因?yàn)锽IOS代碼出于速度的原因已經(jīng)遮蔽到陰影RAM中。如果操作系統(tǒng)把BIOS代碼復(fù)制到不同的區(qū)域,則對CR3的估算將失敗。
借助上面的知識和假設(shè),為鑒定對應(yīng)于BIOS代碼段的頁面轉(zhuǎn)換表的存在,對物理存儲器的每4K頁面進(jìn)行檢驗(yàn)。也就是說,在頁面中0380的偏移將包含值000E0XXX、000E1XXX、000E2XXX、…000FFXXX。一旦頁面被定位,對系統(tǒng)RAM53尋找一個頁面目錄,該頁面目錄的第一個入口對應(yīng)于上面定位的頁面表的物理位置。該頁面目錄的物理地址是對PDBR值的好的“猜測”。
然后通過確保假設(shè)PDBR正確地為GDTR和IDTR轉(zhuǎn)換地址,該假設(shè)PDBR得到證實(shí)。也就是說,該P(yáng)DBR被用來轉(zhuǎn)換GDTR的線性地址并且GDT的第一個入口被校驗(yàn)并確認(rèn)為空(在任何CPU方式下GDT的前八個字節(jié)總是為00H)。然后該回送的物理地址被檢驗(yàn)并確認(rèn)為在物理存儲器的邊界之內(nèi)。為實(shí)現(xiàn)線性地址到物理地址的轉(zhuǎn)換,使用了一個模仿CPU轉(zhuǎn)換方法的子程序;被轉(zhuǎn)換地址在ESI里回送,并且如果物理頁面出現(xiàn)在物理存儲器之中進(jìn)位標(biāo)志CF被清除,而如果物理頁面不出現(xiàn)在存儲器里CF置為設(shè)置。利用這個轉(zhuǎn)換程序,從存儲器53里讀GDT的第一個字節(jié)。如果GDT的第一個入口為空,則該假設(shè)PDBR通過它的第一次檢驗(yàn),因而,被再次檢驗(yàn)。然后利用該轉(zhuǎn)換程序,該P(yáng)DBR被用來轉(zhuǎn)換IDTR以尋找TDT。然后被回送的物理地址被檢驗(yàn)為在物理存儲器的邊界之內(nèi)。如果IDT的第一個位置出現(xiàn)在物理存儲器里,則PDBR通過它的第二次檢驗(yàn)。
如果假設(shè)的PDBR正確地轉(zhuǎn)換到GDTR和IDTR,則該值被假設(shè)為PDBR并被寫到段E000H數(shù)據(jù)結(jié)構(gòu)里的CR3區(qū)。如果,另一方面,該假設(shè)的CR3失敗于二個檢驗(yàn)中的一個,則程序重新開始,對系統(tǒng)存儲器尋找另一個BIOS代碼段頁面轉(zhuǎn)換表,它也許導(dǎo)致有效的CR3。
對常規(guī)的平面操作PCD和PWT總是假設(shè)為固定在00H處。這些值設(shè)定為零并和PDBR一起寫入段E000H數(shù)據(jù)結(jié)構(gòu)的CR3區(qū)里。
一旦CR3被估計(jì),在708處LDTR被估計(jì)。知道LDT在GDT里的某個地方和知道LDT必須出現(xiàn)在存儲器里,在CR3被估計(jì)出的條件下LDTR可被估計(jì)。為估計(jì)LDTR,對GDT尋找明顯出現(xiàn)的LDT。出現(xiàn)在物理存儲器里(利用任務(wù)706對應(yīng)的文字段落里所說明過的轉(zhuǎn)換程序來檢驗(yàn))和明顯出現(xiàn)的第一個LDT被假設(shè)為由LDTR指向的表。該表的起始物理地址被保留在段E000H數(shù)據(jù)結(jié)構(gòu)里的LDTR區(qū)里。
上面估計(jì)LDTR的方法被認(rèn)為在應(yīng)用上足夠可靠,即使在OS/2情況下多于一個的LDT可能明顯出現(xiàn)并可出現(xiàn)在物理存儲器里,也是如此。EMM386是一個普通的虛擬8086方式程序,因而看上去可能引起問題;但是,EMM386的CR3和LDTR是容易估計(jì)的,因?yàn)镋MM386只具有一個CR3和一個LDTR。
一旦CR3和LDTR被估計(jì),在710處估計(jì)TR。本質(zhì)上,在GDT和LDT里的各個任務(wù)選擇程序入口中尋找?guī)в忻ξ唤M的一個任務(wù)狀態(tài)選擇程序。對各個入口的類型字段進(jìn)行檢驗(yàn),查看它是否是忙80286任務(wù)狀態(tài)選擇程序或者是忙80486任務(wù)狀態(tài)選擇程序。帶有忙286TSS或者帶有忙486TSS的第一個入口被假定為TR指向的位置。帶有忙286或486TSS的入口的物理位置被保留在段E000H數(shù)據(jù)結(jié)構(gòu)里的TR區(qū)中。如果沒有具有忙286或486TSS的入口,則把零存到段E000H數(shù)據(jù)結(jié)構(gòu)里的TR區(qū)中。
在估計(jì)CR3、LDTR和TR之后,代碼在712處繼續(xù)。在712處,如果TR指向有效的TSS,則在714處由TR指向的TSS里的忙位被清除。不管怎樣,代碼在716處繼續(xù),在那里對DS、ES、FS和GS裝上對GDT有效的選擇程序。然后在718對CR3和CR0裝上來自段E000H數(shù)據(jù)結(jié)構(gòu)的值。接著,在720,允許分頁,這樣線性地址和物理地址相同的唯一區(qū)域是段E000H和F000H里的區(qū)域。然后,在722處,對IDTR、GDTR、LDTR和TR裝入存儲在段E000H數(shù)據(jù)結(jié)構(gòu)里的值。
最后,在724和726處,通過把對應(yīng)于GS、FS、DS、ES、SS、ESP、EFLAGS(在設(shè)置VM位后)和CS來自段E000H數(shù)據(jù)結(jié)構(gòu)的值推進(jìn)棧,建立虛擬8086中斷棧。同樣,在726處對應(yīng)于任務(wù)730處的代碼的返回地址被推進(jìn)棧。最終,IRETD指令被執(zhí)行以把CPU40置回虛擬8086方式并把執(zhí)行傳送給任務(wù)730所對應(yīng)的代碼。
任務(wù)730開始共同的調(diào)度,它被圖14里的各個不同的調(diào)度所使用。在任務(wù)730,協(xié)同處理器44從保留在段E000H數(shù)據(jù)結(jié)構(gòu)里值復(fù)原。接著在732處,地址線20(I/O端口92H)的狀態(tài)從棧彈出。然后在734處,陰影RAM段C000H重新被置為只讀。在736處,通過把01H寫到功率管理端口APM和硬件連接,如在和圖7對應(yīng)的文字段落里已說明的那樣。然后在738處,陰影RAM段E000H和F000H重新被置為只讀。最后,在740,復(fù)原CPU狀態(tài)程序設(shè)定標(biāo)志指明發(fā)生常規(guī)的復(fù)原。任務(wù)742、744和746不被復(fù)原CPU狀態(tài)程序執(zhí)行,而只是用來顯示在返回到被暫停事件中斷的代碼之前的某時刻,八個通用寄存器被彈出棧,可屏蔽中斷被允許(假定當(dāng)以前代碼被中斷時它們曾被允許的),而且標(biāo)志彈出棧。最后,復(fù)原CPU狀態(tài)程序返回到監(jiān)督程序,監(jiān)督程序把控制返送給APM,APM更新任何過時的系統(tǒng)值并把控制返回給中斷發(fā)生時的代碼。
現(xiàn)再回到參照任務(wù)704,如果CPU過去被中斷時不處于虛擬8086方式,則代碼經(jīng)過從750到792的路徑,在792處代碼和從730到748的共同調(diào)度相會合。在750,如果在段E000H數(shù)據(jù)結(jié)構(gòu)里的TR值指明TR指向有效的TSS,則在752處該TSS的忙位被清除。不論發(fā)生什么情況,接著在754處,對GDTR和CR0裝入來自段E000H數(shù)據(jù)結(jié)構(gòu)的值。
然后,在任務(wù)756到764,偽頁面目錄表和偽頁面轉(zhuǎn)換表被裝入段C000H。首先,在756處,陰影RAM段C000H被設(shè)為讀/寫。第二,在758處,一個新的頁面目錄表在位置0C000H上建立。第三,在760處,該新頁面目錄表里的第一個入口被修改為指向0C1000H。第四,在762處,在0C1000H處建立一個新的頁面轉(zhuǎn)換表,使得地址0E0000到0FFFFF是存在的并且在這個地址范圍內(nèi)線性地址等于物理地址。最后CR3里頁面目錄基址寄存器被裝入0C0000H,這樣完成在0C0000H里的新偽頁面目錄和頁面轉(zhuǎn)換表的地址轉(zhuǎn)換。當(dāng)在任務(wù)754里CR0被裝入時分頁是重新激活的(如果可應(yīng)用的話)。
接著,在766處,陰影RAM段E000H和F000H被設(shè)為讀/寫。然后,如果CPU40當(dāng)它以前被暫停時在執(zhí)行16位代碼,則在770處,它曾處于16位方式并且指向16位代碼路徑的偏移被保留到段E000H數(shù)據(jù)結(jié)構(gòu)中。另一方面,如果CPU40過去不處在16位方式,則它曾是32位方式,在772處指向32位代碼路徑的偏移被保留到段E000H數(shù)據(jù)結(jié)構(gòu)時,以代替16位偏移。無論發(fā)生什么情況,這些代碼路徑是并列的,唯一的不同點(diǎn)在于一個使用16位操作數(shù)而另一個使用32位操作數(shù)。任務(wù)770和772只把偏移設(shè)置進(jìn)并列路徑中的一條。在下面的任務(wù)782處進(jìn)入這些路徑中的一條(對應(yīng)于該偏移的一條)。
接著,在774,來自段E000H數(shù)據(jù)結(jié)構(gòu)的CR3值被裝入EDX,來自段E000H數(shù)據(jù)結(jié)構(gòu)的SS值被裝入CX,來自段E000H數(shù)據(jù)結(jié)構(gòu)的TR值被裝入ESI的上半部而且來處段E000H數(shù)據(jù)結(jié)構(gòu)的LDTR值被裝入ESI(SI)的下半部。在下面這些值被移到它們的適當(dāng)單元中。然后,在776處,GDTR、LDTR和CR0被裝入來自段E000H數(shù)據(jù)結(jié)構(gòu)的它們的值。在778處,把存儲在SI里的LDTR值裝入LDTR。然后代碼遠(yuǎn)轉(zhuǎn)移到置在任務(wù)770或772里的偏移上。通過直接把操作碼放到源代碼中和采用來自770或772中的一個偏移,該遠(yuǎn)轉(zhuǎn)移被編碼。在782,代碼然后沿16位操作碼路徑或32位操作碼路徑中的一條繼續(xù)執(zhí)行。
接著在784處,把存儲在EDX里的CR3值裝入CR3,把存儲在CX里的SS值裝入SS,把存儲在EBP里的ESP值裝入ESP。在786處,則把GS、FS、ES和DS從棧內(nèi)彈出。在788處,如果被中斷的CPU40過去是保護(hù)方式下的執(zhí)行代碼,則在790處把存儲在ESI上半部里的TR值裝入TR。不論是那種情況,代碼在任務(wù)792處繼續(xù),在792處查錯寄存器DR0、DR1、R2、DR3、DR6和DR7從棧中彈出。
這里,代碼路徑和從任務(wù)730到748的共同的路徑會合,該共同路徑前面已作過說明。在794處,誤差恢復(fù)程序也從保留CPU狀態(tài)程序的任務(wù)640加入到共同的路徑。
現(xiàn)在參照圖15,其中表示開始于800處的保留8259狀態(tài)程序的流程圖。在802處,保留8259的狀態(tài)的操作從保留被實(shí)時時鐘使用的周期中斷值開始,在804處把所有其它可讀寄存器保留到段E000H數(shù)據(jù)結(jié)構(gòu)。計(jì)算機(jī)系統(tǒng)10的體系結(jié)構(gòu)要求某些8259只讀寄存器具有固定值,如技術(shù)上周知的那樣。這些值是知道的并不需要被確定。難于得到的8259值是8259基地址、8259從地址以及這兩個8259是否設(shè)置為是待決的還是被OS用于中斷的。
利用圖15的剩余代碼這四個上述的項(xiàng)目被確定。在806處8259被屏蔽,只留下鍵盤12和鼠標(biāo)器13中斷不被屏蔽。
接著,在808處,通過把物理存儲器的底層1K復(fù)制到段C000H數(shù)據(jù)結(jié)構(gòu),保留中斷向量表。然后,在810處,一個新的“偽”中斷向量表被裝入物理存儲器的底層1K中,這是通過裝入256個相同的偽向量來實(shí)現(xiàn)的,這256個偽向量指向開始于段C800H的256個偽中斷服務(wù)程序。在812處,這256個偽中斷服務(wù)程序在段C800H里被生成。
然后在814處,鍵盤12和鼠標(biāo)器13中斷被禁止。在816處,任何未確認(rèn)的鍵盤12和鼠標(biāo)器13中斷被確認(rèn)。
在818處,然后產(chǎn)生一個鍵盤中斷,而且在820處,該中斷被檢驗(yàn),以查看基8259是否設(shè)置為是待決的或是服務(wù)中的。該值則被寫進(jìn)段E000H數(shù)據(jù)結(jié)構(gòu)。在822處,代碼等待該中斷得到服務(wù)。在824處,通過調(diào)用一個偽處理程序,該中斷得到服務(wù)。調(diào)用偽服務(wù)程序來確定8259基地址和確定8259過去是否處于待決或使用方式,基地址和方式被保留在段E000H數(shù)據(jù)結(jié)構(gòu)里。
對從屬8259在任務(wù)826、828、830和832中執(zhí)行類型的過程。
在834處,通過把來自C000H數(shù)據(jù)結(jié)構(gòu)的值復(fù)制回到物理存儲器的底層1K,中斷向量表被復(fù)原。然后,在836處段C000H重新成為只讀,在838處所有中斷被屏蔽,在840處準(zhǔn)備返回到調(diào)用程序。
盡管本發(fā)明通過其實(shí)施例的描述得到說明,并且盡管該實(shí)施例得到相當(dāng)詳細(xì)的說明,但是把所附權(quán)利要求書的范圍約束在和以任何方式限制在這些細(xì)節(jié)上決不是申請人的意圖。對于熟悉技術(shù)的人附加的優(yōu)點(diǎn)及修改是顯而易見的。例如,如上面曾描述的,電話鈴聲檢測電路在相連的電話線路呼叫時可把計(jì)算機(jī)系統(tǒng)10從暫停狀態(tài)154改變到常規(guī)運(yùn)行狀態(tài)150。因此,本發(fā)明在它的更廣闊的方面不受到特定細(xì)節(jié),示意設(shè)備和方法以及所展示和所描述的示例的限制。因此,在不違反申請人的總發(fā)明概念的實(shí)質(zhì)或范圍的前提下可對這些細(xì)節(jié)作出更改。
權(quán)利要求
1.一種能夠運(yùn)行于三種中任一選定功率管理狀態(tài)下的計(jì)算機(jī)系統(tǒng),即所述計(jì)算機(jī)系統(tǒng)可常規(guī)執(zhí)行代碼的常規(guī)運(yùn)行狀態(tài)、備用狀態(tài)和暫停狀態(tài),該系統(tǒng)的特征在于包括一個用來響就多個預(yù)定事件中的至少一個事件的控制單元,它用于在各個所述狀態(tài)和至少另一個所述狀態(tài)間改變所述計(jì)算機(jī)系統(tǒng)。
2.權(quán)利要求1的計(jì)算機(jī)系統(tǒng),其特征在于具有運(yùn)行在第四個管理狀態(tài),即斷電狀態(tài),下的能力,并且其特征在于所述控制單元對多個預(yù)定事件中的至少一個事件作出響應(yīng),并在各個所述狀態(tài)和至少另一個所述狀態(tài)之間改變所述計(jì)算機(jī)系統(tǒng)。
3.一種能夠運(yùn)行于三種中任一選定功率管理狀態(tài)下的計(jì)算機(jī)系統(tǒng),即所述計(jì)算機(jī)系統(tǒng)可常規(guī)執(zhí)行代碼的常規(guī)運(yùn)行狀態(tài)、備用狀態(tài)和暫停狀態(tài),系統(tǒng)包括一個可執(zhí)行代碼的CPU;一個和所述CPU電路上通信的控制單元,該控制單元用來響應(yīng)多個預(yù)定事件中的至少一個事件,并在各個所述狀態(tài)和至少另一個所述狀態(tài)間改變所述計(jì)算機(jī)系統(tǒng);一個和所述CPU和所述控制單元電路通信的外圍設(shè)備,它可運(yùn)行于高電能使用狀態(tài)和低電級使用狀態(tài)中所選定的一個狀態(tài)下,所述外圍設(shè)備對所述控制單元在所述高和低電能使用狀態(tài)間變化作出響應(yīng);并一個和所述CPU、所述控制單元和所述外圍設(shè)備電路上通信的電源,其包括功率選擇電路以選擇性地向所述計(jì)算機(jī)機(jī)系統(tǒng)提供來自外部電源的系統(tǒng)功率,所述電源能運(yùn)行于第一供電狀態(tài)和第二供電狀態(tài)中所選定的一個狀態(tài)下,所述電源響應(yīng)于所述控制單元在所述第一和第二供電狀態(tài)間的變化;所述常規(guī)運(yùn)行狀態(tài),其特征在于所述電源處于所述第一供電狀態(tài)和所述外圍設(shè)備處于所述高電能使用狀態(tài);所述備用狀態(tài),共特征在于所述電源處于所述第一供電狀態(tài)和所述外圍設(shè)備處于所述低電能使用狀態(tài);所述暫停狀態(tài),其特征在于所述電源處于所述第二供電狀態(tài)并且在所述CPU上執(zhí)行的代碼被可逆地中斷,使得在所述電源改變到所述第一供電狀態(tài)之后所述CPU上的代碼執(zhí)行能夠得到恢復(fù)。
4.權(quán)利要求3的計(jì)算機(jī)系統(tǒng),其中所述第一供電狀態(tài)特征在于所述電源選擇電路從所述外部電源向所述CPU、所述控制單元和所述外圍設(shè)備提供系統(tǒng)功率;并且其中所述第二供電狀態(tài)的特征在于從所述外部電源到所述CPU的系統(tǒng)電源被中斷。
5.權(quán)利要求3的計(jì)算機(jī)系統(tǒng),其特征在于所述電源包括提供輔助功率的次級電路;并且其中所述第一供電狀態(tài)的特征在于所述功率選擇電路從所述外部電源向所述CPU、所述控制單元和所述外圍設(shè)備提供系統(tǒng)功率;并且進(jìn)而其中所述第二供電狀態(tài)的特征在于當(dāng)所述次級電路繼續(xù)從所述外部電源向所述控制單元提供輔助功率的時候,從所述外部電源向所述CPU提供的系統(tǒng)功率被中斷。
6.權(quán)利要求3的計(jì)算機(jī)系統(tǒng),其特征在于具有運(yùn)行于第四種功率管理狀態(tài),即斷電狀態(tài)下的能力,并且其中所述斷電狀態(tài)的特征在于所述電源處于所述第二供電狀態(tài)而且在所述CPU上執(zhí)行的代碼被不可逆地中斷。
7.一種能夠運(yùn)行于三種任一選定功率管理狀態(tài)下的計(jì)算機(jī)系統(tǒng),即所述計(jì)算機(jī)系統(tǒng)可常規(guī)執(zhí)行代碼的常規(guī)運(yùn)行狀態(tài),代碼可繼續(xù)由所述計(jì)算機(jī)系統(tǒng)執(zhí)行而所述計(jì)算機(jī)系統(tǒng)消耗少于常規(guī)運(yùn)行狀態(tài)電能的備用狀態(tài)和由所述計(jì)算機(jī)系統(tǒng)執(zhí)行的代碼被中斷并且所述計(jì)算機(jī)系統(tǒng)消耗少于所述備用狀態(tài)電能的暫停狀態(tài),該系統(tǒng)的特征在于包括一個可執(zhí)行代碼的CPU;一個和所述CPU電路上通信的控制單元,該控制單元響應(yīng)于多個預(yù)定事件中的至少一個事件,并用來在各個所述狀態(tài)和至少另一個所述狀態(tài)間改變所述計(jì)算機(jī)系統(tǒng);一個和所述CPU和所述控制單元電路上通信的非易失存儲器,用來接收、存儲和發(fā)送數(shù)據(jù);在電路上和所述CPU、所述控制單元和所述非易失存儲器通信的用來存儲存儲器數(shù)據(jù)的易失存儲器;和在電路上和所述CPU、所述控制單元、所述非易失存儲器和所述易失存儲器通信的用來存儲寄存器數(shù)據(jù)的易失寄存器;所述控制單元是可操作的以響應(yīng)多個預(yù)選事件中的至少一個事件,來把存儲數(shù)據(jù)從所述易失存儲器傳送到所述非易失存儲器以及送回,來把寄存器數(shù)據(jù)從所述易失寄存器傳送到所述非易失存儲器以及送回,并且能夠在所述計(jì)算機(jī)系統(tǒng)進(jìn)入所述暫停狀態(tài)時把存儲器數(shù)據(jù)和寄存器數(shù)據(jù)存儲到所述非易失存儲器內(nèi),而當(dāng)所述計(jì)算機(jī)系統(tǒng)進(jìn)入常規(guī)運(yùn)行狀態(tài)時把存儲器數(shù)據(jù)和寄存器數(shù)據(jù)從非易失存儲器發(fā)送給所述易失存儲器和所述寄存器存儲器。
8.權(quán)利要求7的計(jì)算機(jī)系統(tǒng),其特征在于具有運(yùn)行在第四種功率管理狀態(tài),即斷電狀態(tài),下的能力,而且進(jìn)而其中所述斷電狀態(tài)的特征在于存儲器數(shù)據(jù)和寄存器數(shù)據(jù)不存儲在所述非易失存儲器里,并且所述計(jì)算機(jī)系統(tǒng)在所述斷電狀態(tài)下要比所述暫停狀態(tài)下消耗更少的電能。
9.在一種能夠運(yùn)行于三種中任一選定功率管理狀態(tài)下的計(jì)算機(jī)系統(tǒng)中,即所述計(jì)算機(jī)系統(tǒng)可常規(guī)執(zhí)行代碼的常規(guī)運(yùn)行狀態(tài),代碼可繼續(xù)由所述計(jì)算機(jī)系統(tǒng)執(zhí)行而所述計(jì)算機(jī)系統(tǒng)消耗少于常規(guī)運(yùn)行狀態(tài)電能的備用狀態(tài)和由所述計(jì)算機(jī)系統(tǒng)執(zhí)行的代碼被中斷并且所述計(jì)算機(jī)系統(tǒng)消耗少于所述備用狀態(tài)電能的暫停狀態(tài),該計(jì)算機(jī)系統(tǒng)具有中央處理單元,易失存儲器,發(fā)送系統(tǒng)功率的電源,具有在機(jī)殼內(nèi)旋轉(zhuǎn)的固定媒體的固定磁盤存儲設(shè)備,產(chǎn)生視頻信號的視頻顯示控制器,顯示對應(yīng)于視頻信號的光學(xué)圖象的視頻顯示終端,不活動暫停定時器,不活動備用定時器以及能夠產(chǎn)一第一功率管理命令和第二功率管理命令的功率管理控制器,一種管理所述計(jì)算機(jī)系統(tǒng)所使用功率的方法,其特征在于包括下述步驟起動備用定時器以在第一預(yù)選時間期限后期滿;和起動暫停定時器以在第二預(yù)選時間期限后期滿;則在第一和第二時間期限中的一個期滿之前在常規(guī)運(yùn)行狀態(tài)下操作計(jì)算機(jī)系統(tǒng);通過重新啟動備用定時器和暫停定時器來對在系統(tǒng)處于常規(guī)運(yùn)行狀態(tài)下所出現(xiàn)的用戶活動作出響應(yīng);使計(jì)算機(jī)系統(tǒng)脫離常規(guī)運(yùn)行狀態(tài)并使計(jì)算機(jī)系統(tǒng)進(jìn)入備用狀態(tài),對在常規(guī)操作期間的第一時間期限的期滿作出響應(yīng);使計(jì)算機(jī)系統(tǒng)進(jìn)入暫停狀態(tài),對第二時間期限的期滿作出響應(yīng);使計(jì)算機(jī)系統(tǒng)進(jìn)入常規(guī)運(yùn)行狀態(tài),對計(jì)算機(jī)系統(tǒng)處于備用狀態(tài)時所出現(xiàn)的用戶活動作出響應(yīng);重新啟動備用定時器和把計(jì)算機(jī)系統(tǒng)的狀態(tài)從備用狀態(tài)改變到常規(guī)運(yùn)行狀態(tài),對計(jì)算機(jī)系統(tǒng)處于備用狀態(tài)時所出現(xiàn)的用戶活動作出響應(yīng);把計(jì)算機(jī)系統(tǒng)的狀態(tài)從常規(guī)運(yùn)行狀態(tài)和備用狀態(tài)中的一種改變到暫停狀態(tài),對計(jì)算機(jī)系統(tǒng)處于常規(guī)運(yùn)行狀態(tài)和備用狀態(tài)中的一種狀態(tài)時所出現(xiàn)的第一功率管理命令作出響應(yīng),和把計(jì)算機(jī)系統(tǒng)改變到常規(guī)運(yùn)行系統(tǒng),對當(dāng)計(jì)算機(jī)系統(tǒng)處于暫停狀態(tài)時所出現(xiàn)的第二功率管理命令作出響應(yīng)。
10.權(quán)利要求9的方法,其特征在于其中計(jì)算機(jī)系統(tǒng)具有一個瞬時按鈕開關(guān)以和功率管理控制器通信,以及其特征進(jìn)而在于包括通過開關(guān)的閉合事件來產(chǎn)生第一和第二功率管理命令的步驟。
11.權(quán)利要求9的方法,其特征在于計(jì)算機(jī)系統(tǒng)具有在第一開關(guān)位置和第二開關(guān)位置之間可移動的搬鈕開關(guān)以和功率管理控制器通信,以及其特征在于包括通過把所述開關(guān)置于相對應(yīng)的第一和第二開關(guān)位置中的一個來產(chǎn)生第一和第二功率管理命令的步驟。
12.權(quán)利要求9的方法,其特征在于,所述通過使計(jì)算機(jī)系統(tǒng)離開常規(guī)運(yùn)行狀態(tài)和把計(jì)算機(jī)系統(tǒng)置為備用狀態(tài)以對計(jì)算機(jī)系統(tǒng)處于常規(guī)運(yùn)行狀態(tài)期間第一時間期限滿作出響應(yīng)的步驟包括以下步驟由視頻顯示控制器停止產(chǎn)生視頻信號;和由固定磁盤存儲設(shè)備停止固定媒體的旋轉(zhuǎn)。
13.權(quán)利要求9的方法,其特征在于所述通過把計(jì)算機(jī)系統(tǒng)置為暫停狀態(tài)以對第二時間期限期滿作出響應(yīng)的步驟包括以下步驟確定計(jì)算機(jī)系統(tǒng)的系統(tǒng)狀態(tài);然后把系統(tǒng)狀態(tài)保留到固定磁盤存儲設(shè)備;接著停止從電源輸出系統(tǒng)功率。
14.權(quán)利要求13的方法,其特征在于所述通過把計(jì)算機(jī)系統(tǒng)改變到常規(guī)運(yùn)行狀態(tài)以對出現(xiàn)第二功率管理命令作出響應(yīng)的步驟包括以下步驟恢復(fù)從電源輸出系統(tǒng)功率;接著進(jìn)行簡化的加電自檢;接著從所述固定磁盤存儲設(shè)備讀出被保留的系統(tǒng)狀態(tài);然后復(fù)原所述計(jì)算機(jī)系統(tǒng)的系統(tǒng)狀態(tài)。
15.在一個具有一個中央處理單元(CPU),一個在電路上和CPU通信的存儲器和一個在電路上和CPU通信的中斷控制器的計(jì)算機(jī)系統(tǒng)里,中斷控制器的特征在于中斷控制器能夠和CPU協(xié)調(diào)處理多個中斷事件,中斷控制器具有位于存儲器里的第一組中斷向量,并與此有關(guān),中斷控制器具有位于存儲器里的第一組中斷服務(wù)程序,并與此有關(guān),中斷控制器具有對應(yīng)于第一組中斷服務(wù)程序的一個和多個基地址,一種確定中斷控制器的一個或多個基地址狀態(tài)的方法,其特征在于包括以下步驟把第二組中斷向量寫入存儲器;把第二組中斷服務(wù)程序?qū)懭氪鎯ζ?,各個中斷服務(wù)程序?qū)?yīng)第二組中斷向量中的一個或多個中斷向量;接著產(chǎn)生一個中斷事件,以由對應(yīng)于第二組中斷向量中的一個或多個中斷向量的一個中斷服務(wù)程序進(jìn)行服務(wù);與中斷控制器協(xié)調(diào)在CPU里處理該中斷事件;接著用對應(yīng)于第二組中斷向量中一個或多個中斷向量的一個中斷服務(wù)程序?qū)υ撝袛喾?wù);然后在所述為中斷服務(wù)的步驟之后從存儲器的狀態(tài)里確定中斷控制器的一個或多個基地址的狀態(tài)。
16.權(quán)利要求15的方法,其特征在于中斷控制器為一個8259。
17.權(quán)利要求15的方法,其特征在于其中斷控制器是一個由一個或多個在電路通信上等效于8259的電路所組成的芯片組。
18.權(quán)利要求15的方法,其特征包括下列步驟在兩個所述步驟,即把第二組中斷向量寫入存儲器和把第二組中斷服務(wù)程序?qū)懭氪鎯ζ髦?,把第一組中斷向量和第一組中斷服務(wù)程序從它們在存儲器里的各自單元里復(fù)制到存儲器的不同單元里。
19.一種包括BIOS,能夠運(yùn)行操作系統(tǒng)和應(yīng)用程序的計(jì)算機(jī)系統(tǒng),其特征在于包括CPU;一種包含可從外部電源向所述計(jì)算機(jī)系統(tǒng)選擇地提供系統(tǒng)功率的電路的電源,其特征在于具有第一供電狀態(tài)和第二供電狀態(tài);從電路上和所述CPU通信的非易失存儲器;從電路上和所述CPU通信和用于存儲存儲器數(shù)據(jù)的易失系統(tǒng)存儲器;從電路上和所述CPU通信和用于存儲寄存器數(shù)據(jù)的易失系統(tǒng)寄存器;和從電路上和所述CPU通信和用于對預(yù)定暫停事件作出響應(yīng)以在常規(guī)運(yùn)行狀態(tài)和暫停狀態(tài)之間選擇性地改變所述計(jì)算機(jī)系統(tǒng)狀態(tài)的控制單元;其中所述常規(guī)運(yùn)行狀態(tài)的特征在于所述電源處于所述第一供電狀態(tài)和所述計(jì)算機(jī)系統(tǒng)能夠?qū)τ脩裘?、所述操作系統(tǒng)或所述BIOS響應(yīng)以執(zhí)行所述應(yīng)用程序;其中所述暫停狀態(tài)的特征在于寄存器數(shù)據(jù)和存儲器數(shù)據(jù)被存入所述非易失存儲設(shè)備而且所述電源處于所述第二供電狀態(tài);其中在所述常規(guī)運(yùn)行狀態(tài)和所述暫停狀態(tài)之間的所述改變通過以下操作實(shí)現(xiàn);所述控制單元對所述預(yù)定事件響應(yīng),把存儲器數(shù)據(jù)和寄存器數(shù)據(jù)在所述系統(tǒng)存儲器和所述系統(tǒng)寄存器和所述非易失存儲設(shè)備之間進(jìn)行復(fù)制(不清楚在何處之間轉(zhuǎn)送);其中所述電源響應(yīng)所述控制單元在所述供電狀態(tài)之間變化;和其中在所述常規(guī)運(yùn)行狀態(tài)和所述暫停狀態(tài)間的所述變化進(jìn)一步包括所述控制單元對所述預(yù)定暫定事件響應(yīng)使得所述電源分別地在所述第一供電狀態(tài)和所述第二供電狀態(tài)之間變化。
20.權(quán)利要求19的計(jì)算機(jī)系統(tǒng)其中所述第一供電狀態(tài)的特征在于所述電源從所述外部電源向所述計(jì)算機(jī)系統(tǒng)提供系統(tǒng)功率;和其中所述第二供電狀態(tài)的特征在于所述電源不從所述外部電源向所述計(jì)算機(jī)系統(tǒng)提供系統(tǒng)功率。
21.權(quán)利要求19的計(jì)算機(jī)系統(tǒng);其中所述電源進(jìn)而包括對所述計(jì)算機(jī)系統(tǒng)提供輔助功率的電路;其中所述第一供電狀態(tài)的特征在于所述電源從所述外部電源對所述計(jì)算機(jī)系統(tǒng)提供系統(tǒng)功率和輔助功率;和其中所述第二供電狀態(tài)的特征在于所述電源不從所述外部電源向所述計(jì)算機(jī)系統(tǒng)提供系統(tǒng)功率,而所述電源從所述外部電源向所述計(jì)算機(jī)系統(tǒng)提供輔助功率。
22.權(quán)利要求19、20或21的計(jì)算機(jī)系統(tǒng),其特征在于所述非易失存儲設(shè)備是一個固定磁盤存儲設(shè)備。
23.權(quán)利要求19、20或21的計(jì)算機(jī)系統(tǒng),其特征在于所述非易失儲設(shè)備是一個電池供電的只讀存儲器。
24.權(quán)利要求19的計(jì)算機(jī)系統(tǒng),其特征在于包括一個設(shè)置為預(yù)定的時間期限之后達(dá)到期滿的不活動暫停定時器;和其特征在于所述預(yù)定暫停事件包括所述不活動暫停定時器的期滿。
25.權(quán)利要求19的計(jì)算機(jī)系統(tǒng)其特征在于包括一個瞬時按鈕開關(guān),它從電路上和所述CPU通信,并對所述開關(guān)被按下作出響應(yīng),產(chǎn)生一個閉合事件;和其特征在于所述預(yù)定暫停事件包括所述開關(guān)的閉合事件。
26.權(quán)利要求19的計(jì)算機(jī)系統(tǒng)其特征在于包括一個從電路上和所述CPU通信的瞬時按鈕開關(guān),其產(chǎn)生一個響應(yīng)所述開關(guān)被按下的閉合事件;和其特征在于包括一個可操縱的標(biāo)志,其由第一標(biāo)志狀態(tài)和第二標(biāo)志狀態(tài)組成而且其狀態(tài)是可由在所述CPU上執(zhí)行的代碼操縱的;和其特征在于一個或更多個所述預(yù)定暫停狀態(tài)包括當(dāng)所述標(biāo)志處于所述第一標(biāo)志狀態(tài)時的所述開關(guān)的閉合事件。
27.在一個計(jì)算機(jī)系統(tǒng)中,其具有用于存儲存儲器數(shù)據(jù)的系統(tǒng)存儲器;非易失存儲設(shè)備;CPU可在保護(hù)方式下執(zhí)行代碼,如果一條代碼指令試圖訪問系統(tǒng)存儲器的不適當(dāng)區(qū)域時或如果一條指令試圖執(zhí)行一條特權(quán)指令時,保護(hù)方式使CPU產(chǎn)生保護(hù)故障,CPU在非錯誤方式下執(zhí)行,這種方式允許對系統(tǒng)存儲器的預(yù)定區(qū)域進(jìn)行寫和允許不產(chǎn)生保護(hù)故障的情況下執(zhí)行特權(quán)指令,CPU在系統(tǒng)存儲器里建立棧并具有存儲寄存器值的易失性寄存器;在ROM里的BIOS;陰影RAM,其中BIOS被復(fù)制到陰影RAM里并從陰影RAM執(zhí)行;能夠?qū)υ贑PU上代碼執(zhí)行進(jìn)行中斷和能夠響應(yīng)暫停事件調(diào)用暫停程序的操作系統(tǒng);和對一個或多個預(yù)定條件和出響應(yīng)而產(chǎn)生暫停事件的控制程序;其中暫停程序是可由操作系統(tǒng)選擇性地調(diào)用的,其特征在于它的能力把寄存器值從CPU傳送到?;蜿幱癛AM中的一個并不產(chǎn)生保護(hù)故障;把CPU置為非錯誤方式;和把寄存器值從棧或陰影RAM中的一個中傳送到非易失存儲設(shè)備;一種在保護(hù)方式下保存CPU執(zhí)行代碼狀態(tài)的方法,其特征在于包括以下步驟對暫停事件響應(yīng)時利用操作系統(tǒng)中斷在CPU上的代碼執(zhí)行;啟動暫停程序;暫時把寄存器存儲到陰影RAM里或棧上;把CPU置為非錯誤方式,非錯誤方式的特征在于把寄存器值從陰影RAM或棧中的一個復(fù)制到非易失存儲設(shè)備上不會在CPU里產(chǎn)生保護(hù)故障;和把寄存器值從?;蛘哧幱癛AM中傳送到非易失存儲設(shè)備。
28.在一個計(jì)算機(jī)系統(tǒng)里,其具有用于存儲存儲器數(shù)據(jù)的系統(tǒng)存儲器;非易失存儲設(shè)備;CPU可在保護(hù)方式下執(zhí)行代碼,如果一條代碼指令試圖訪問系統(tǒng)存儲器的不適當(dāng)區(qū)域或如果一條指令試圖執(zhí)行一條特權(quán)指令,保護(hù)方式使CPU產(chǎn)生保護(hù)故障,CPU可執(zhí)行在非錯誤方式下,這種方式允許對系統(tǒng)存儲器的預(yù)定區(qū)域進(jìn)行寫和允許在不產(chǎn)生保護(hù)故障的情況下執(zhí)行特權(quán)指令,CPU在系統(tǒng)存儲器里建立棧并且有用于存儲寄存器值的易失寄存器;在ROM里的BIOS;陰影RAM,其中BIOS被復(fù)制到陰影RAM里并從陰影RAM執(zhí)行;能夠恢復(fù)CPU上的代碼執(zhí)行和能夠響應(yīng)恢復(fù)事件調(diào)用恢復(fù)程序的操作系統(tǒng);和對一個或更多預(yù)定條件響應(yīng)而產(chǎn)生恢復(fù)事件的控制程序;其中恢復(fù)程序是可由操作系統(tǒng)選擇性地調(diào)用的,其特征在于它的能力把CPU置于非錯誤方式;把寄存器值從CPU和從非易失存儲設(shè)備傳送到?;蜿幱癛AM;把CPU置為錯誤方式;把寄存器值從?;蛘哧幱癛AM中傳送到CPU置為錯誤方式;把寄存器值從?;蛘哧幱癛AM中傳送到CPU并不產(chǎn)生保護(hù)故障;一種從非易失存儲設(shè)備復(fù)原CPU狀態(tài)的方法,其特征在于包括以下步驟對恢復(fù)事件響應(yīng)啟動恢復(fù)程序;把CPU置為非錯誤方式,非錯誤方式的特征在于把寄存器值從非易失存儲設(shè)備復(fù)制到陰影RAM或者棧中的一個將不會在CPU里產(chǎn)生保護(hù)故障;然后把CPU的寄存器值從非易失存儲設(shè)備傳送到棧或陰影RAM中的一個;把一組頁面表裝入陰影RAM,其特征在于在CPU頁面操作啟動后可訪問陰影RAM里的BIOS;把CPU置為錯誤方式;把寄存器值從?;蜿幱癛AM傳送到CPU;然后利用操作系統(tǒng)在CPU上恢復(fù)被中斷代碼的執(zhí)行。
29.權(quán)利要求27或28的方法,其特征在于陰影RAM運(yùn)行在系統(tǒng)存儲器中線性地址等于物理地址的部分內(nèi)。
30.權(quán)利要求27或28的方法,其特征在于所述把CPU置為非錯誤方式的步驟包括復(fù)位CPU的步驟。
31.權(quán)利要求27或28的方法,其特征在于操作系統(tǒng)遵守先進(jìn)功率管理規(guī)范。
32.權(quán)利要求27或28的方法,其特征在于非易失存儲設(shè)備是固定磁盤存儲設(shè)備。
33.權(quán)利要求27或28的方法,共特征在于CPU是386或者486微處理機(jī)家族中的成員。
34.一種能夠運(yùn)行于三種中任一選定功率管理狀態(tài)下的計(jì)算機(jī)系統(tǒng),即所述計(jì)算機(jī)系統(tǒng)可常規(guī)執(zhí)行代碼的常規(guī)運(yùn)行狀態(tài)、關(guān)閉狀態(tài)和暫停狀態(tài),系統(tǒng)包括一個開關(guān);一個可執(zhí)行代碼的CPU;從電路上和所述CPU和所述開關(guān)通信的一個控制單元,它響應(yīng)多個預(yù)定事件中的至少一個事件,用來在各個所述狀態(tài)和至少另一個所述狀態(tài)間改變所述計(jì)算機(jī)系統(tǒng);一個從電路上和所述CPU和所述控制單元通信的標(biāo)志,其能夠?qū)υ贑PU執(zhí)行的代碼作出響應(yīng)并實(shí)現(xiàn)多個預(yù)定標(biāo)志狀態(tài)中的一個狀態(tài);一個從電路上和所述CPU和所述控制單元通信的電源,其包括功率選擇電路以選擇性地向所述計(jì)算機(jī)系統(tǒng)提供來自外部電源的系統(tǒng)功率,所述電源能運(yùn)行于第一供電狀態(tài)和第二供電狀態(tài)之中選定的一個狀態(tài)之下,所述電源響應(yīng)所述控制單元在所述第一和第二供電狀態(tài)間變化;所述常規(guī)運(yùn)行狀態(tài)的特征在于所述電源處于第一供電狀態(tài)并且代碼常規(guī)地執(zhí)行在所述CPU上;所述暫停狀態(tài)的特征在于所述電源處于所述第二供電狀態(tài)并且在所述CPU上執(zhí)行的代碼被可逆地中斷,使得在所述電源改變到所述第一供電狀態(tài)之后所述CPU上的代碼執(zhí)行能夠得到恢復(fù);所述斷電狀態(tài)的特征在于所述電源處于所述第二供電狀態(tài)和在所述CPU上執(zhí)行的代碼不可逆地被中斷。
35.權(quán)利要求34的計(jì)算機(jī)系統(tǒng),其特征在于其中所述開關(guān)是一個瞬時按鈕開關(guān);如果所述標(biāo)志處于所述標(biāo)志狀態(tài)的第一個狀態(tài),則所述控制單元響應(yīng)所述開關(guān)的閉合事件,使所述計(jì)算機(jī)系統(tǒng)在所述常規(guī)運(yùn)行狀態(tài)和所述斷電狀態(tài)之間變化;而如果所述標(biāo)志處于所述標(biāo)志狀態(tài)的第二個狀態(tài),則所述控制單元響應(yīng)所述開關(guān)的閉合事件,使所述計(jì)算機(jī)系統(tǒng)在所述常規(guī)運(yùn)行狀態(tài)和所述暫停狀態(tài)之間變化。
36.權(quán)利要求34的計(jì)算機(jī)系統(tǒng),其特征在于所述開關(guān)是一個可在第一開關(guān)位置和第二開關(guān)位置之間移動的搬鈕開關(guān);如果所述標(biāo)志處于所述標(biāo)志狀態(tài)的第一個狀態(tài)則所述控制單元響應(yīng)所述開關(guān)進(jìn)入所述第一開關(guān)位置,把所述計(jì)算機(jī)系統(tǒng)從所述常規(guī)運(yùn)行狀態(tài)改變到所述斷電狀態(tài);如果所述標(biāo)志處于所述標(biāo)志的第一個狀態(tài),則所述控制單元響應(yīng)所述開關(guān)進(jìn)入所述第二開關(guān)位置,把所述計(jì)算機(jī)系統(tǒng)從所述斷電狀態(tài)改變到所述常規(guī)運(yùn)行狀態(tài);如果所述標(biāo)志處于所述標(biāo)志狀態(tài)的第二狀態(tài),則所述控制單元響應(yīng)所述開關(guān)進(jìn)入所述第一開關(guān)位置,把所述計(jì)算機(jī)系統(tǒng)從所述常規(guī)運(yùn)行狀態(tài)改變到所述暫停狀態(tài);而如果所述標(biāo)志處于所述標(biāo)志狀態(tài)的第二狀態(tài),則所述控制單元響應(yīng)所述開關(guān)進(jìn)入所述第二開關(guān)位置,把所述計(jì)算機(jī)系統(tǒng)從所述暫停狀態(tài)改變到所述常規(guī)運(yùn)行狀態(tài)。
全文摘要
一種具有四種功率管理狀態(tài)的計(jì)算機(jī)系統(tǒng)常規(guī)運(yùn)行狀態(tài)、備用狀態(tài)、暫停狀態(tài)和斷電狀態(tài)。備用狀態(tài)的特征在于諸如視頻控制器和硬磁盤機(jī)的設(shè)備被置為對操作系統(tǒng)透明的低功率方式而且應(yīng)用程序仍在計(jì)算機(jī)系統(tǒng)上執(zhí)行。暫停狀態(tài)的特征在于執(zhí)行代碼被中斷而計(jì)算機(jī)系統(tǒng)的狀態(tài)被保留到硬磁盤機(jī)的一個文件中,該方法可在計(jì)算機(jī)狀態(tài)被保留到硬磁盤機(jī)上后去掉系統(tǒng)功率。
文檔編號G06F11/14GK1102717SQ9410582
公開日1995年5月17日 申請日期1994年5月25日 優(yōu)先權(quán)日1993年7月26日
發(fā)明者詹姆斯·L·庫姆斯, 德萬尼·T·克倫普, 史蒂文·T·潘科斯特 申請人:國際商業(yè)機(jī)器公司