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