新四季網

用於高級電源管理(apm)的自動備份系統的製作方法

2023-04-27 23:23:16

專利名稱:用於高級電源管理(apm)的自動備份系統的製作方法
技術領域:
本發明涉及到下列未決的申請申請第08/097334號,1993年7月23日提出,題為「帶有單一開關掛起/繼續功能的臺式計算機」(委託案第BC9-93-018(21322/00158)號);申請第08/097250號,1993年7月26日提出,題為「具有零電壓系統掛起的臺式計算機系統」(委託案第BC9-93-016(21322/00161)號);申請第08/097246號,1993年7月23日提出,題為「保存和恢復在受保護方式下執行代碼的CPU的狀態的方法」(委託案第BC9-93-017(21322/00162)號);申請第08/097251號,1993年7月26日提出,題為「具有多級電源管理的臺式計算機系統」(委託案第BC9-93-015號(21322/00163)號);申請第08/303102號,1994年9月7日提出,題為「掛起系統中電源故障的自動排除」(委託案第BC9-94-043(21322-00197)號);申請第08/302148號,1994年9月7日提出,題為「掛起文件的自動分配」(委託案第BC9-94-044(21322/00198)號);申請第08/302147號,1994年9月7日提出,題為「用於掛起系統的多功能電源開關和反饋LED」(委託案第BC9-94-108(21322-00202))申請第08/302157號,1994年9月7日提出,題為「用於計算機系統喚醒的低功率振鈴檢測」(委託案第BC9-94-110(21322-002404)號);申請第08/301464號,1994年9月7日提出,題為「斷電時用系統管理中斷執行系統任務」(委託案第BC9-94-112(21322-00206)號);申請第08/302066號,1994年9月7日提出,題為「掉電之後用戶選擇的自動恢復」(委託案第BC9-94-113(21322-00207)號);申請第08/303103號,1994年9月7日提出,題為「用於防止數據丟失的待機檢查點」(委託案第BC9-94-114(21322-00208)號);本發明在總體上涉及計算機系統的結構,具體地說,涉及到一種具有系統掛起/繼續能力的臺式計算機系統,該系統帶有一多功能開關和受BIOS支持的發光二極體(LED),所說的開關能進行狀態轉換,從而使系統更便於使用。
個人計算機系統在本技術中是周知的。一般的個人計算機系統特別是IBM個人計算機系統業已有廣泛的應用,從而為當今社會的許多方面提供了計算機的威力。個人計算機一般界定為臺式微機、落地式微機或可攜式微機,它包括一系統組件,此組件帶有一個單一的中央處理單元(CPU)以及包括所有RAM和BIOSROM在內的相關易失性和非易失性存儲器,一系統監視器、一鍵盤、一個或多個軟盤驅動器、一固定的磁碟存儲器(也稱為「硬碟驅動器」)、一稱為「滑鼠器」的指點設備以及一可選擇的印表機。這類系統的顯著特點之一是使用了母板或系統主板以便將上述組件以電氣的方式連接在一起。這類系統最初設計成給單用戶以獨立的計算能力並且具有不貴的價格,以便個人或小型公司購買。這類個人計算機系統的實例是IBM中PERSONALCOMPUTER AT和IBM的PERSONAL SYSTEM/1(IBM PS/1)。
個人計算機通常用於運行軟體以執行各種活動,如字處理、通過電子數據表格進行數據處理、在資料庫中收集數據並建立數據之間的聯繫、顯示圖形、用系統設計軟體設計電子或機械系統等等。
上述申請書中的前四個相關的申請公開了一種具有四種電源管理狀態的計算機系統,這四種狀態是正常操作狀態、待機狀態、掛起狀態和關機狀態。用一個開關在關機狀態、正常操作狀態以及掛起狀態之間進行狀態改變。
本發明之計算機系統的正常操作狀態實際上與一般臺式計算機的正常操作狀態相同。用戶可以使用應用程式並基本上同其它計算機一樣對待這種計算機。一個不同就是存在有電源管理驅動程序,該程序在後臺運行(在BIOS和作業系統中運行)並且對用戶是透明的。該電源管理驅動程序在作業系統(OS)中的那部分是由Intel和Microsoft公司所寫的高級電源管理(APM)的新式程序設計接口,這種接口存在於大多數在Intel 80×86系列處理器上運行的作業系統中。上述電源管理驅動程序在BIOS(APMBIOS)中的那部分與APM OS驅動程序互通。APM OS驅動程序和APM BIOS例程一道控制著計算機向上述其它三種狀態的轉換以及來自這三種狀態的轉換。
第二種狀態即待機狀態,它比正常操作狀態使用更少的電量,但仍使任何應用程式象它們在其它情況下運行一樣地運行。一般地說,在待機狀態下,通過使各設備處於相應的低功耗狀態而節省了電能。例如,在待機狀態下通過使磁碟驅動器內的固定式磁碟停止旋轉以及通過停止生成視頻信號,可以節省電能。
第三種狀態是掛起狀態。在掛起狀態下,計算機系統消耗極小量的電能。掛起的計算機消耗很少的來自壁裝電源插座的電量。僅有的功耗是用於維持監控計算機系統內部電池的開關的電路的少量功耗(當計算機系統不接收交流電時)或者是電源在輔助電源線上所產生的少量功耗(當計算機系統接收交流電時)。
通過在電源關閉之前將計算機的狀態保存到固定磁碟存儲器(硬碟驅動器)中,可以實現少量的用電。為了進入掛起狀態,計算機系統中斷任何正在執行的代碼並把對計算機的控制權交給電源管理驅動程序。該電源管理驅動程序確定計算機系統的狀態並將該狀態寫至固定磁碟存儲器。CPU寄存器、CPU高速緩衝存儲器、系統內存、系統高速緩衝存儲器、視頻寄存器、視頻內存以及其它設備寄存器等的狀態全都寫至固定磁碟。將系統的整個狀態以這樣的方式保存起來在中斷不對代碼應用程式產生不利影響的情況下將計算機系統的狀態保存起來。然後,計算機將數據寫入非易失性CMOS存儲器中以指示系統已掛起。最後,計算機使電源停止供電。計算機的整個狀態可靠地保存在固定磁碟存儲器中,系統功耗當前處於「停止」,這時,計算機只從電源中接收少量的穩壓電力以供應監控開關的電路。
第四種也是最後一種狀態是關機狀態。在這種狀態下,電源停止向計算機系統提供穩定的電能,計算機系統的狀態也不保存在固定磁碟內。這種關機狀態實際上等同於按通常的方式關閉一般的臺式計算機。
從一種狀態到另一種狀態的轉換是由電源管理驅動程序控制的並且通常是以一個開關、一個標誌以及兩個計時器即不活動性待機計時器和不活動性掛起計時器的關閉事件為基礎的。所述計算機系統帶有一個單一的電源開關,此開關用於開啟計算機系統,掛起計算機系統的狀態、恢復計算機系統的狀態以及關閉計算機系統。
上述系統使用了高級電源管理(APM)以便於狀態轉換以及與該狀態轉換相關的系統維護。APM是一種工業標準的高級程序編制接口,它的開發是為臺式和筆記本式計算機系統內的作業系統和系統BIOS提供一種共同管理電源的手段。APM提供了一種優秀的工具,這種工具因涉及掛起進程中的作業系統而便於使計算機系統掛起和繼續並且能使作業系統在掛起進程開始之前準備好所說的系統。
但是,取決作業系統,依靠APM來掛起系統會有多種缺陷。在Microsoft Windows3.1和MS-DOS中,作業系統的APM驅動程序有時常會完全停止對APM BIOS的請求進行服務。例如,在顯示模態對話框時,Microsoft Windows的APM驅動程序會完全停止對APM BIOS的請求進行服務。因此,在顯示模態對話框時,基於Microsoft Windows APM驅動程序的掛起和繼續系統將不會使計算機系統掛起。這對用戶來說是一個很大的問題,因為,計算機系統不會響應用戶保存系統狀態的請求而掛起。這種結果會把用戶搞糊塗並且使用戶因掛起和繼續系統不可靠而不再信任該系統。
一種解決辦法是靠硬體的系統管理中斷(SMI)來使計算機系統掛起,但這種系統會失去APM所提供的優點。例如,APM驅動程序可以通知所有APM可識別的應用軟體和硬體計算機系統快要被掛起了,從而這些軟體和硬體能作相應的反應。所以,最好具有這樣一種系統,它能使計算機系統依靠APM驅動程序,但在APM驅動程序停止工作時仍然能使計算機系統掛起。
依照本發明,所說的計算機系統配備有一個替代的掛起系統,這種系統能自動地檢測APM驅動器在何時停止起作用並因此而使計算機系統掛起。本發明的自動備份掛起系統不會影響OS APM驅動程序的正常運行,但它在APM驅動程序停止對APM BIOS的請求進行服務時會自動地接入。當APM再度變為活動的時,該備份掛起系統會自動解除。這就會使計算機系統能利用帶有上述備份掛起系統所提供的高可靠性的APM的優點。
在本發明的備份掛起系統中,使用了一種新型的遞減計時器,如果OS APM在一段預定的時間內不對APM BIOS的請求進行服務,則該計時器就會到時。這種計時器是一種按時間單位如秒來遞減的自激式計時器,它可被重新啟動,即可被重新加載回原始值。在最佳實施例中,該新型計時器維護在外部硬體內並由諸如系統BIOS計時器零中斷處理程序或SMI中斷服務例程之類中斷服務例程來服務。另外,也可以由上述中斷服務例程單獨來啟動並服務該計時器。
最佳的是,由系統BIOS計時器零中斷處理程序來服務於上述新型計時器,上述處理程序作了改進以便檢查是否該新型計時器已到時且用戶想要進行掛起(即掛起請求是未決的)。當滿足上述條件時,計算機系統在不通知作業系統未將掛起放置到APMBIOS事件隊列內的情況下掛起。當計算機系統繼續時,將一臨界的繼續事件放置到APM事件隊列內。當運行APM的驅動程序再度開始輪詢服務事件時,它會接收到上述臨界的繼續事件,因此,作業系統可在繼續工作之後清除並更新系統時間等。
最佳的是,在APM系統BIOS中,在來自OS APM驅動程序的每次「get event」調用時,復位所述新型遞減計時器,即將其置成起始值。這就能阻止該遞減計時器在APM正對事件進行服務並正常運行時到時。當作業系統的APM驅動程序停止對事件進行服務(沒有get event調用)時,遞減計時器不會被復位並將到時。當用戶想要掛起時,計算機系統會在遞減計時達到零時自動地加以響應。
最佳的是,遞減計時器設置在一低成本的預先編程的微控制器內,該微控制器還為計算機系統提供其它的特徵。上述微控制器的特徵之一就是通用的遞減計時器,此計時器用於提供所說的自動備份掛起系統。
每當約32個計時器零級中斷,系統BIOS中斷處理程序就會檢查是否遞減計時器業已到時且用戶想要進行掛起。當出現這種情況時,計算機系統被立即掛起。最佳的是,將遞減計時器設置為16秒以供APM內的「死區」(dead zone)如(MS-Windows下的全屏MS-DOS等)使用,在所說的「死區」內,APM的「get event」(取事件)輪詢率為每15秒鐘一次。
本發明克服了作業系統內高級電源管理(APM)驅動程序的缺陷。當OS APM驅動程序不能對BIOS事件進行服務時,遞減計時器立即開始遞減計時。當作業系統的APM驅動程序停止對獲得事件(get event)進行服務時,所說的系統就會自動地接入。同樣,當APM驅動程序又對事件進行服務時,所說的系統會自動地解除。本發明提高了掛起和繼續系統的可靠性。所述備份掛起系統能自動地覆蓋已知的死區。該備份掛起系統是全自動的並且無須用戶幹預。本發明的上述及其它優點將會從對本發明的詳細說明中更明顯地表現出來。
本發明的上述及其它優點會從對本發明的詳細說明中更明顯地表現出來。
包括在本說明書中並構成本說明書一部分的附圖,連同以上對本發明的總體描述,說明了本發明的實施例,並且,以下給出的詳細說明用於例證本發明的原理。


圖1是體現本發明的個人計算機的透視圖;圖2是圖1中個人計算機某些部件的分解透視圖,它包括一機箱、一罩蓋、一機電直接存取存儲器以及一主板並說明了這些部件之間的特定關係;圖3A和圖3B顯示了圖1和圖2中個人計算機某些組件的框圖;圖4為本發明之計算機系統的狀態圖,它顯示四種系統狀態正常狀態、待機狀態、掛起狀態和關機狀態;
圖5是顯示電源有關部分的框圖;圖6A為本發明之電源管理電路的概略電路圖,它顯示了與其它圖的各個接口;圖6B是使上述電源管理電路與內部數據機相連的概略電路圖;圖6C是顯示用於上述電源管理電路的復位電路中各個信號的波形圖;圖6D是電源故障檢修電路第二實施例的概略電路圖;圖7是由本發明之電源管理處理器所維持的開關狀態之一的狀態圖;圖8是總體上顯示本發明加電例程的流程圖;圖9A是管理例程的詳細流程圖,作業系統中的APM設備驅動器大約每一秒鐘調用該管理例程;圖9B是顯示APM處理最近請求例程(APM Working OnLast Request Routine)細節的流程圖;圖9C是顯示APM拒絕最近請示例程(APM Reject ONLast Request Routine)細節的流程圖;圖10是顯示本發明之掛起例程(Suspend Routine)細節的流程圖;圖11是顯示本發明之引導例程(Boot-up Routine)細節的流程圖;圖12是顯示本發明之繼續例程(Resume Routine)細節的流程圖;圖13是顯示本發明之保存CPU狀態例程(Save CPU StateRoutine)細節的流程圖;圖14是顯示本發明之恢復CPU狀態例程(Restore CPUState Routine)細節的流程圖;圖15是顯示本發明之保存8959狀態例程(Save 8959 StateRoutine)細節的流程圖;圖16是顯示本發明之動態保存文件分配例程(DynamicSave File Allocation)細節的流程圖;圖17是顯示本發明的退出待機狀態例程(Exit StandbyRoutine)細節的流程圖;圖18是顯示本發明之進入待機狀態例程(Enter StandbyRoutine)細節的流程圖;以及圖19是顯示本發明之電源管理處理器例程(PowerManagement Processor Routines)細節的流程圖。
在以下參照顯示本發明之最佳實施例的附圖詳細說明本發明時,從以下說明的一開始就應該認識到,本技術的專家可以改進本文所述的發明,但仍能獲得本發明的良好結果。因此,應該將以下的說明理解為是以本技術的專家為對象的廣義的教導性公開,並且不限制本發明。本發明涉及到計算機系統的整體設計,包括但不局限於計算機體系結構設計、數字設計、BIOS設計、保護模式的80486代碼設計、應用程式代碼設計、作業系統代碼設計以及高級電源管理的新式程序設計界面的使用。
參照附圖,顯示了體現本發明的微機系統並總體上用標號10表示(圖1)。如上所述,計算機10帶有相連的顯示器11、鍵盤12、滑鼠器13以及印表機或繪圖儀14。計算機10帶有一罩蓋15,此罩蓋由裝飾性外部部件16(圖2)以及一內部保護部件18構成,此部件與機箱19相連從而確定了一封密有屏蔽的空間以便接收加電的數據處理和存儲組件,這些組件用於處理和存儲數字數據。這些組件中的至少某一些安裝在多層主板20或母板上,而主板則安裝在機箱19上並提供了使計算機10的組件相互電連接的裝置,所說的組件包括上述組件以及其它相關的部件如軟盤驅動器,各種形式的直接存取存儲器、附件的適配器卡或適配器板以及類似的部件等。正如以後將要詳細說明的那樣,在主板20上設置了朝向或來自微機操作組件的輸入/輸出信號的通路。
所說的計算機系統帶有一電源17;一電源按鈕21,下文中稱開關21;以及一電源/反饋LED23。與一般系統內的通常電源開關不同,電源按鈕21並不將交流電切換至電源17或從該電源17切換,這將在以下予以說明。機箱19帶有標號22所示的底座;標號24所示的前部面板;以及標號25所示的後部面板(圖2)。前部面板24限定了至少一個開放的凹槽(在所示的圖中有四個凹槽),以便接收諸如磁碟或光碟驅動器、後備磁帶機之類的數據存儲裝置或類似的設備。在所示的圖中設置了一對上部凹槽26、28以及一對下部凹槽29、30。上部凹槽中的一個26用於接收第一尺寸的外部設備(如3.5英寸的驅動器),另一個28則用接收兩種尺寸(如3.5和5.25英寸)中選定的一種驅動器,下部凹槽用於接收一種尺寸(3.5英寸)的驅動器。圖1中標號27表示一軟盤驅動器,此驅動器是一可裝卸式直接存取存儲器,這種存儲器可以接收插進來的軟盤並如眾所周知的那樣用軟盤接收、存儲和傳送數據。標號31表示一硬碟驅動器,此驅動器是一固定式直接存取存儲器,這種存儲器可以如眾所周知的那樣存儲和傳遞數據。
在說明上述結構與本發明的關係之前,有必要概述一下個人計算機系統10的通常操作。參照圖3A和圖3B,顯示了個人計算機系統的框圖,該框圖說明了諸如本發明之系統10之類的計算機系統的各種組件,包括安裝在主板20上的組件以及主板與I/O槽和個人計算機系統其它硬體的連接件。與主板相連的是系統處理器40,也即CPU40,它包括一微處理器,該微處理器通過高速CPU局部總線42與內存控制部件46相連,而內存控制部件則又與易失性隨機存取存儲器(RAM)53相連。內存控制部件46包括內存控制器48、地址多路復用器50以及數據緩衝區52。內存控制部件46還與由四個RAM組件54所表示的隨機存取存儲器53相連。內存控制器48包括邏輯線路,此邏輯線路用於把去往和來自微處理器40的地址映射到RAM53的特定區域。所說的邏輯線路用於回收先前被BIOS佔用的RAM。此外,內存控制器48還生成ROM選擇信號(ROMSEL),此信號用於啟動或中止ROM88。雖然任何適當的微處理器都可用作系統處理器40,一種合適的微處理器是INTEL公司出售的80486。Intel80486帶有內部高速緩衝存儲器,所以是Intel80486的任何CPU40都帶有CPU高速緩衝存儲器41。
雖然在下文中是參照圖3A和圖3B的系統框圖來說明本發明的,但是,在以下說明的一開始就應理解,本發明的設備與方法可和主板的其它硬體配置一道使用。例如,系統處理器40可以是Intel80286或80386微處理器。正如本文所使用的那樣,凡涉及到80286、80386或80486一般均指可從Intel公司獲得的微處理器。但是,最近也有其它生產者業已開發出了能執行Intel X86結構的指令集的微處理器,因而所述術語的用法包括了任何能執行該指令集的微處理器。正如本技術的專家所熟知的那樣,早期的個人計算機一般把那時流行的Intel8088或8086微處理器用作系統處理器。這種處理器具有一兆字節內存的尋址能力。最近,個人計算機一般都使用高速的Intel 80286、80386以及80486微處理器,這些微處理器能以虛模式或實模式運行來仿真較低速度的8086微處理器,或者以保護方式運行,從而對某些機型來說可將尋址範圍從一兆字節擴大至四千兆字節。從本質上說,80286、80386以及80486處理器的實模式的特徵使得硬體與為8086和8088微處理器所寫的軟體相兼容。所述Intel系統的微處理器通常只用涉及到整個類型符後三位數字的三位數來表示,如「486」等。
以下回到圖3A和3B,CPU局部總線42(包括未顯示的數據,尋址和控制組成部分)將微處理器40、數字協處理器44(如果不在CPU40內的話)、視頻控制器56、系統高速緩衝存儲器60以及高速緩衝存儲器控制器62連接起來。視頻控制器56帶有與之相聯的監視器(或視頻顯示終端)11以及視頻存儲器58。緩衝器64也連在CPU局部總線42上。緩衝器64又與(和CPU局部總線42相比)速度較低的系統總線66相連,系統總線也包括地址、數據和控制組成部分並且在緩衝器64與另一緩衝器68之間延伸。系統總線66還與總線控制及定時部件70和DMA(直接存儲器存取)部件71。相連DMA部件71包括中央仲裁器82以及DMA控制器72。輔助緩衝器74提供了系統總線66與諸如工業標準結構(ISA)總線之類的可選的特性總線76之間的接口。總線76與多個用於接收ISA適配器卡(未顯示)的I/O槽78相連。ISA適配器卡以插接的方式與I/O槽78相連並為系統10提供了附加的I/O設備或存儲器。
仲裁控制總線80將DMA控制器72及中央仲裁器82與I/O槽78、磁碟適配器84及集成驅動器電子線路(Integrated DriveElectronics-IDE)的固定磁碟控制器86相連。
雖然顯示出微機系統10帶有基本的四兆字節RAM組件53,但應該注意,也可以通過增加可選的高密度存儲器組件54而如圖3A和圖3B所示那樣連上附加存儲器。僅從說明的角度出發,參照基本的四兆字節存儲器組件來說明本發明。
鎖存緩衝器68連接在系統總線66和主板I/O總線90之間。主板I/O總線90包括地址、數據和控制組成部分。沿著主板I/O總線90連接有多個I/O適配器與其它組件,如磁碟適配器84,IDE盤適配器86,中斷控制器92,RS-232適配器、本文稱之為NVRAM的非易失性CMOS RAM96,CMOS實時時鐘(RTC)98、並行適配器100、多個計時器102、只讀存儲器(ROM)88、8042 104以及電源管理電路106。標號104所示的8042是與鍵盤12與滑鼠器13相連的從屬微處理器。電源管理電路106在電路上與電源17,電源開關21、電源/反饋LED23以及內部數據機900和/或外部數據機902相連。正如本技術的專家所熟知的那樣,外部數據機通常與變壓器904相連,而該變壓器又與壁裝電源插座相連。數據機900、902與通常的電話口相連。電源管理電路106顯示在圖6A及圖6B中並在與圖6A、圖6B、圖6C以及圖7有關的內容中予以更全面的說明。只讀存儲器88包括BIOS,BIOS用於連接I/O設備與微處理器40的作業系統。存儲在ROM88中的BIOS可拷貝到RAM53以便減少BIOS的執行時間。ROM88還可響應內存控制器48(通過ROMSEL信號)。如果用內存控制器48啟動ROM88,BIOS就會從ROM中執行。如果內存控制器48終止了ROM,則ROM不響應來自微處理器40的地址查詢(即BIOS從RAM中運行)。
實時時鐘98用於計算日期的時間,NVRAM96用於存儲系統配置數據。也就是說,NVRAM96包含說明系統當前配置的值。例如,NVRAM96包括說明固定盤或軟盤容量、顯示器類型、內存量、時間、日期等的信息。此外,每當運行諸如SET配置之類的特定配置程序時,上述數據都存儲在NVRAM中。上述SET配置程序的目的是把描述系統配置的值存儲到NVRAM內。
幾乎所有的上述設備都包括易失性寄存器。為了避免對附圖作不必要的分類,特定設備的寄存器總是涉及到該設備。例如,CPU寄存器稱為CPU40的寄存器,視頻控制器寄存器稱為視頻控制器56的寄存器。
如上所述,所說的計算機帶有一總體用標號15表示的罩蓋,此罩蓋與機箱19相配合形成一封密有屏蔽的空間,該空間用於包容微機的上述組件。罩蓋15最好形成有外部裝飾性罩蓋部件16以及薄金屬板襯裡18,所說的外部裝飾性罩蓋部件是一成整體的模製組件,由可模製的合成材料構成,而薄金屬板襯裡則呈符合上述裝飾性罩蓋部件結構的形狀。但是,也可以以其它周知的方式形成前述罩蓋,本發明的實用性並不局限於上述類型的外罩。操作的狀態參照圖4,顯示了本發明之計算機系統的狀態圖。本發明的計算機系統10具有四種狀態正常操作狀態150、待機狀態152、掛起狀態154以及關機狀態156。圖4所示的狀態之間的轉換用於說明最佳實施例,但不限定最佳實施例。因此,也可以用其它的事件來導致狀態轉換。
本發明之計算機系統10的正常操作狀態150實際上等同於任何通常的臺式計算機的正常操作狀態。用戶可以使用應用程式並且基本上把上述計算機看作是任何其它的計算機。一個不同點是在作業系統中有在後臺運行的電源管理驅動程序(「APM OS驅動程序」)以及多種APM BIOS例程,它們對用戶是透明的。APM BIOS例程將在以後說明,它們中包括掛起例程、繼續例程、引導例程、管理例程、保存CPU狀態例程以及恢復CPU狀態例程。所有附圖中都未示出的一個APM BIOS例程是APM BIOS路由選擇例程。APM BIOS路由選擇例程主要從APM OS驅動程序中接收指令並調用適當的APM BIOS例程。例如,在APMOS驅動程序發出Suspend(掛起)指令時,APM BIOS程序選擇例程就會調用掛起例程。作為另外一個實例,每當APM OS驅動程序發出Get Event(獲取事件)指令時,APM BIOS路由選擇例程都會調用管理例程。上述例程處於BIOS內並在投影BIOS時被投影掉。OS內的電源管理驅動程序以及APM BIOS例程控制著計算機在四種狀態之間的轉換。雖然上下文可能有所限定,但對「APM」一詞的引用通常就是指APM OS驅動程序。
第二種狀態即待機狀態152要比正常操作狀態150使用更少的電能,但能使應用程式象在其它情況下運行的那樣運行。一般地說,在待機狀態152下可通過代碼將設備設置成各自的低功耗方式而節電。在所述的最佳實施例中,正如以下將會詳細說明的那樣待機狀態152通過使固定磁碟存儲器31內的固定磁碟(未顯示)停止轉動、通過停止生成視頻信號以及通過將CPU40設置成低功耗方式,從而節約了電能。但是,這並不是一種限制,而是可以使用其它方法如減慢或停止CPU時鐘等來降低功耗。
在所說的最佳實施例中,以三種獨立的方式節約電能。第一,在正常操作狀態150下,固定磁碟存儲器31內的固定盤以例如3600轉/分(RPM)、4500轉/分(RPM)或5400轉/分(RPM)的轉速不斷旋轉。在待機狀態152下,給IDE盤控制器86以指令從而使固定磁碟存儲器31進入低功耗方式(固定磁碟存儲器31內的固定磁碟停止轉動),因此節省了固定磁碟存儲器31內的電機(未顯示)在使固定磁碟旋轉時所消耗的電能。
第二,在正常操作狀態150下,計算機系統的視頻控制器56不斷地產生對應於在視頻顯示終端11所看到的圖象的視頻信號(諸如本技術中所周知的HSYNC、VSYNC、R、G、B等等)。在待機狀態152下,視頻控制器56停止產生視頻信號,從而節約了通常被視頻控制器56所消耗掉的電能,HSYNC、VSYNC、R、G、B等信號均近似為0.00VDC。使用VESA(視頻電子線路標準協會)監視器會進一步節電,這是因為,當HSYNC和VSYNC近似為0.00VDC時,VESA監視器會關閉自身。
第三,在正常操作狀態150下,CPU40不斷地執行指令,因而消耗了電能。在待機狀態152下,BIOS響應AMP CPU的空調用(Idle Call)而發出HALT(停機)指令。執行HALT指令會明顯地降低CPU的能耗直至發生下一個硬體中斷。CPU確實空閒時會在90%以上的時間內停止運轉。
請注意,某些系統帶有「屏幕保護程序」(Screen-savers),這種程序能使屏幕11變暗以防止視頻顯示終端前表面螢光物質老化。在大多數這種系統中,視頻控制器56仍產生視頻信號,只是產生對應於黑暗屏幕或動態顯示的視頻信號。因此,執行屏幕保護程序的計算機系統仍消耗電能,這些電能是產生上述視頻信號所必需的。
第三種狀態是掛起狀態154。在掛起狀態154下,計算機系統消耗非常少的電能。在所述的最佳實施例中,掛起的計算機消耗少於100毫瓦的電能。僅有的功耗是由電源17的低效率以及電源管理電路106使用的少量電能所導致的約為5瓦的功耗。
通過在關閉電源之前將計算機系統的狀態保存至固定磁碟存儲器(硬碟驅動器)31,可以實現上述少量的用電。為了進入掛起狀態154,CPU40中斷任何的應用程式並將CPU的程序執行控制權轉交給電源管理驅動程序。電源管理驅動程序確認計算機系統10的狀態並將該計算機系統的全部狀態寫至固定磁碟存儲器31。將CPU40的寄存器、CPU高速緩衝存儲器41、系統RAM53、系統高速緩衝存儲器60、視頻控制器56的寄存器、顯示器內存56以及其它易失性寄存器的狀態均寫入固定磁碟驅動器31。以這樣的方式保存系統10的整個狀態,即可在不明顯損失有效性的情況下恢復該系統的狀態。也就是說,用戶不必等待系統象通常那樣加載作業系統、加載圖形用戶界面以及應用程式。
然後,所述計算機將數據寫入非易失性CMOS存儲器96以指示系統被掛起。最後CPU40指令微處理器40使電源17停止經由±5VDC和±12VDC線向計算機系統提供穩壓的電力。這時計算機系統10處於降低功耗的狀態,而且,該計算機的整個狀態被安全地存儲到了固定盤存儲器31上了。
在本文中以兩種類似但可能混淆的方式使用「狀態」一詞。設備可以「處於」特定的狀態。四種系統狀態—正常150、待機152、掛起154以及關機156—均涉及到本發明之計算機系統10的整體狀態。這些「狀態」以通常的方式描述了計算機系統10。例如,在處於正常操作狀態150時,CPU40仍在執行代碼並能改變系統10內的多個寄存器。同樣,在處於待機狀態152時,會產生類似的活動。因此,當計算機系統10處於正常操作狀態150和待機狀態152時,系統10的內存與寄存器的配置是動態的。
其它設備也可以「處於」某種狀態。電源管理電路106最好使用一第二處理器作為電源管理處理器,如圖6A中所示的微控制器U2,以便實現各種電源管理特徵。多種這樣的處理器都是適用的,在所述的特定實施例中,電源管理處理器是預先編程了的83C750微控制器。正如與圖6A有關的內容所要說明的那樣,微處理器U2的變量和引線可處於好幾種狀態。
設備的「狀態」如「計算機系統10的狀態」或「CPU40的狀態」與以上內容相對比,設備的「狀態」涉及到該設備在特定計算機工作周期內的狀況。所有的內存存儲單元和寄存器均具有特定的二進位值。一個設備的「狀態」是該設備內容的靜態二進位快照。
計算機系統10的「狀態」是指操作性等價值但不一定是精確的拷貝。例如,狀態A下的計算機系統可能在CPU高速緩衝存儲器41或系統高速緩衝存儲器60內有某些存儲內容。可能會將各高速緩衝存儲器的內容「傾瀉」進系統RAM53並將計算機系統設置成狀態B。單純地說,計算機在狀態A下的狀態不同於該計算機在狀態B下的狀態,這是因為,高速緩衝存儲器的內容與系統RAM的內容是不同的。但是,從軟體操作性的觀點來看,狀態A和狀態B是相同的,這是因為,除系統速度略有降低(這是由程序不具有從高速緩衝存儲器中執行的有利條件所引起的)以外,正在執行的程序不受影響。也就是說,儘管高速緩衝存儲器已被清空的計算機在效率方面略有降低直至用有用的代碼重新加載該高速緩衝存儲器的區域,但狀態A下的計算機與狀態B下的計算機在軟體操作性方面是等價的。
按兩種類似但可能混淆的方式使用「Power」一詞,「Power」大多數情況下是指電能。但「Power」也偶而指計算的功率。上下文將清楚地表明特定的用法。
「電路」通常指物理上的電子設備或多個相互電連接的設備,但「電路」一詞也包括物理電子設備的等效CPU代碼。例如,一方面,可用74LS00或等價地在可編程設備中實現兩個輸入的與非門。這兩個設備是物理的電子設備。另一方面,也可以通過使CPU40從兩個CPU可讀輸入埠讀出兩個輸入、利用CPU指令生成與非的結果並將該結果經由CPU可寫輸出埠輸出,從而實現與非門。上述CPU接口埠可以是諸如解碼的鎖存器之類的簡單設備,也可以是等效的可編程設備,或者是諸如外圍接口適配器(PIA)之類的複雜設備,這些設備在本技術中都是眾所周知的。「電路」一詞有包括了上述與非門的全部三種實例的足夠廣泛的含義。「電路」在某些情況下可能僅指電通路。電通路的類型包括印刷電路板上的導線、線路或通道或者是構成一個電連接通路的幾種類型電通路的任何組合。
「信號」涉及到單一的電學波形或多個波形。例如,視頻控制器產生一視頻信號。正如在本技術中周知的那樣,上述視頻信號實際上是多個電導體上的多個信號HSYNC、VSYNC、R、G、B等。
參照圖4,第四種也是最後一種狀態是關機狀態156。關機狀態156實際上等同於在通常意義上業已關閉的通常計算機系統。在這種狀態下,電源17的初級/穩壓部件172會停止向計算機系統10提供穩壓後的電能(除經由AUX5提供少量的電能以外,這將參照圖5予以詳細的說明),但還未將計算機系統的狀態保存至固定磁碟31。掛起狀態154和關機狀態156在電源17不再產生穩壓電能方面是相似的。它們的不同在於,在關機狀態156下,不象在掛起狀態154下那樣將計算機系統10的狀態保存至磁碟驅動器31。而且,在離開關機狀態156時,計算機10會象開機那樣進行「引導」。也就是說,必須由用戶或者自動地由諸如AUTOEXEC.BAT文件之類的方式啟動任何可執行的代碼。但是,在離開掛起狀態154時,計算機10則會在它被中斷的位置處恢復執行。
圖4還顯示了在四種狀態之間引起轉換的事件的概況。在參照與圖6至圖8有關的內容中將對這些事件作進一步的說明。但是,作概略的說明可能是有幫助的。電源開關21、兩個計時器(不活動性待機計時器以及不活動性掛起計時器,見圖9及其所附文字)、喚醒計時器的分鐘數以及允許掛起標誌(見與圖6A和圖7及與其有關的內容)均會影響計算機進入何種狀態。一般地說,上述兩個計時器可以是硬體或者是在CPU中作為程序執行的CPU代碼計時器。在所說的最佳實施例中,上述兩個計時器均為從BIOS數據段開始執行的CPU代碼計時器。但是,這兩個計時器也可以是硬體計時器,這會是一個比較好的方案,因為這會減少所述系統的總開銷。與圖9有關的內容將更詳細地說明上述兩個計時器。在計算機10處於正常操作狀態150或待機狀態152時,上述兩個計時器都是活動的。如下所述,計時器與其它例程相聯,從而任何一個計時器的到時都會引起轉換。可以根據用戶的特定要求將一個或兩個計時器配置成能在特定的時間之後到時。在所述的最佳實施例中,可將不活動性待機計時器及不活動性掛起計時器設置成在10至90分鐘後到時。也可以使一個或兩個計時器停止,即將計時器設置成不會到時。使計時器「停止」實際上是停止了該計時器的增量計數活動或者是忽略了它們的到時。在所述的最佳實施例中,將計時器到時值置為零值會使得不檢驗該計時器的到時。例如,聯網計算機的用戶可能不讓計算機進入掛起狀態154,因為這樣做會使區域網(LAN)相對該計算機失效。
從理論上說,計時器可遞增計數或遞減計數,而且在啟動(或重新啟動)計時器時,可被復位到預定的狀態,該計時器可以期望計數到一種預定的狀態,或者使用當前值以及作為邊界終止觸發器所計算出的差值或總和,在所述的最佳實施例中,在復位計時器時,將來自實時時鐘98的分鐘數變量的當前值存儲起來。通過從所保存的分鐘數值中減去當前的分鐘數並比較其差值與用戶所選定的值,可以檢驗計時器的到時。
某些系統活動會影響上述兩個計時器。例如,在所述的最佳實施例中,正如與圖9有關的內容所要詳細說明的那樣,用戶按下鍵盤12之按鍵的活動、移動滑鼠器13的活動、按下滑鼠器13之按鈕的活動或者硬碟驅動器31的活動均會使各個計時器被重新啟動;所以,當用戶按下鍵盤12的按鍵或使用滑鼠器13時,或者當應用程式存取硬碟驅動器31時,兩個計時器均不會到時。此外,其它的系統活動也會復位所說的計時器。對活動來說,也可以監控任何硬體的中斷。因此,最好能使打即(IRQ5或IRQ7)或通信(COMM)埠訪問(IRQ2或IRQ3)阻止系統進入掛起狀態154。
允許掛起標誌是微控制器U2內的CPU可控且可讀的鎖存器,與圖6A有關的內容將對該標誌予以詳細的說明。簡要地說,將微控制器U2設置成一種方式會導致按下開關21就能將系統10置於關機狀態156,而將微控制器U2設置成另一種方式則會導致按下開關21就能將系統10置於掛起狀態154。在清掉了寫至微控制器U2的允許掛起標誌的情況下,如果計算機系統10處於正常操作狀態150並按下了電源開關21,那麼,計算機系統10就會進入關機狀態156,如標號158所示。如果計算機系統10處於關閉狀態156且按下電源開關21,則計算機系統10會進入正常操作狀態150,如標號160所示。此外,以下將作詳細說明的若干「外部事件」也會使計算機系統從關機狀態156轉換至正常操作狀態150。
如果計算機系統10處於正常操作狀態150,有一種事件可以使計算機進入待機狀態,即如果不活動性待機計時器到時,則計算機系統10會轉換至待機狀態152,如標號162所示。另外,所說的計算機系統也可以提供對話框、開關或其它輸入設備之類的手段以便用戶強迫系統立即進入待機狀態。而在待機狀態152下,包括用戶按下電源開關21在內的上述任何用戶或系統的活動都會使計算機10離開待機狀態152並重新進入正常操作狀態150,如標號164所示。
按下電源開關21會使系統從待機狀態152轉換至正常操作狀態150從而防止用戶弄錯。如上所述,在處於待機狀態時,監視器11不作顯示,電源/反饋LED23或者是亮的或者是閃爍的,這取決於微控制器內的允許掛起標誌是如何配置的。接近計算機系統的用戶會注意到監視器11沒有顯示,認為系統處於掛起狀態154或關機狀態156,於是按下電源開關21以試圖使系統進入正常操作狀態150。如果按下電源開關21使系統進入掛起狀態154或關機狀態156,那麼,上述用戶恰好關閉或掛起了計算機,這正與用戶的意圖相反。所以,在處於待機狀態152時按下電源開關21應能使計算機系統從待機狀態轉換至正常操作狀態。CPU40即使是空閒的也會立即檢測出是否按下了電源開關。硬體的中斷使CPU40每秒脫離空閒狀態約20次,此後,在下一個APM獲得事件(Get Event)的過程中,查詢微處理器U2確定是否按下了開關21。
如果計算機10處於正常操作狀態150,有兩個事件會使該計算機進入掛起狀態154。首先,如果不活動性掛起計時器到時,計算機系統10會轉換至掛起狀態154,如標號166所示。第二,在寫至微控制器U2的允許掛起標誌已被設定的情況下用戶可通過按下電源開關21立即使計算機10進入掛起狀態154,如標號166所示。此外,APM驅動程序會通過「設置電源狀態掛起」命令發出掛起請求,此請求使得APM BIOS驅動程序調用掛起例程。在處於掛起狀態154時用戶可通過按下電源開關21而轉換至正常操作狀態150。如標號168所示。
此外,有若干外部事件可用於使系統10從掛起狀態154轉換至正常操作狀態150,如標號168所示,或從關閉狀態156轉換至正常操作狀態150,如標號160所示。例如,圖6A電路中微控制器U2內的電話振鈴檢測電路配置成能使系統10在所連接的電話線鈴響時離開關機狀態156或掛起狀態154並進入正常操作狀態150。這種特點有助於系統接收電傳數據或數字數據。計算機系統響應電話鈴聲進入正常操作狀態,並執行諸如接收到達的傳真發送、上裝或下裝文件、對系統進行遠距離存取等預置的功能,且響應不活動性掛起計時器的到時而再次進入掛起方式,同時,該計算機系統只在處於正常操作狀態時才消耗電能。
同樣,微控制器U2實現喚醒告警計數器的分鐘數,它允許告警型事件使系統10離開掛起狀態154或關機狀態156並進入正常操作狀態150。這種系統對在特定情況下發送電傳或數字數據以降低電話使用率來說是有用的,並且對執行諸如用磁帶備份系統備份系統硬碟驅動器31之類的系統維護來說也是有用的。在後一種情況下,設置上述喚醒告警的分鐘數以便在調度程序使磁帶備份程序執行之前將機器開啟一段固定的時間。另外,APMBIOS調度程序可用於使磁帶備份程序運行。
最後,如果計算機系統10處於待機狀態152並且不活動性掛起計時器到時,那麼,計算機系統10就會轉換至掛起狀態154,如標號170所示。計算機系統10不能從掛起狀態154往迴轉換至待機狀態152,但只能如轉換168的文字所說明的那樣轉換至正常操作狀態150。
很明顯,計算機系統10不能立即改變狀態。在相對四種狀態之一的每種轉換中,都需要特定的時間來進行必要的系統轉換。與圖6至圖15有文的文字將詳細說明每種轉換的時間。系統硬體在說明CPU40執行的代碼細節之前,先說明實現上述四種狀態所需的硬體是有益的。圖5顯示了電源17的框圖。電源17帶有兩個部件控制部件174和初級/穩壓部件172。電源17帶有若干輸入Line-In(線路輸入),它從通常的壁裝電源插座接收115伏交流電或220伏交流電;以ON(開),它控制著電源17的穩壓活動。電源17也帶有若干輸出。AC Line-Out(交流電線路輸出);±5DC(±5伏直流電輸出);±12VDC(±12伏直流電輸出);AUX5(輔助輸出);GND(接地)以及POWERGOOD(電源良好)。AC Line-Out是115伏交流電,它一般流至視頻顯示終端11的電力輸入口(未顯示)。控制部件174接收ON輸入並產生POWERGOOD輸出。初級/穩壓部件172有選擇地將來自Line-In輸入的115伏交流電穩壓降至±5伏直流電和±12伏直流電。初級/穩壓部件172是否在±5VDC和±12VDC線路處穩壓取決於和控制部件174相連接的ON的值。在所述的最佳實施例中,控制部件174應使用諸如適當的光隔離器為產生ON信號的電路提供絕緣。
Line-In輸入和AC Line-Out,±5VDC、±12VDC、GND以及POWERGOOD輸出在本技術中都是周知的。當電源17「關閉」,即不從Line-In中提供穩壓電壓時,POWERGOOD為邏輯0。當電源17「接通」時,電源17從115伏交流電Line-In中產生±5伏和±12伏的直流穩壓電壓。正如本技術中所周知的那樣,上述四種穩壓電壓以及相關的GND是「系統電力」。當所說的穩壓電壓達到可接受的容差範圍內的水平時,POWERGOOD信號就會改變成邏輯1。每當+5或+12伏線路落在容差範圍之外,POWERGOOD信號都會變成邏輯0,以便指示這種情況。
AUX5輸出為主板提供輔助的+5伏直流電。當把電源17插入供給額定115伏直流電的通常壁裝電源插座內時,無論電源17是處於「接通」還是「斷開」初級/穩壓部件172都會在AUX5處提供穩壓了的+5伏直流電。因此,電源17在接收交流電時總會經由AUX5提供額定±5伏的直流電。AUX5輸出不同於前述+5伏的輸出,因為初級/穩壓部件172隻有在電源17「接通」時才在該+5伏輸處產生穩壓的+5伏直流電。AUX5還在以下方面不同於前述的+5伏輸出,即在所述的最佳實施例中,初級/穩壓部件172經由前述+5輸出提供電壓為+5伏多個安培數的直流電,而初級/穩壓部件172則經由AUX5輸出提供電壓為+5伏不超過一安培的直流電。
一般的先有電源使用了高安培數的雙擲開關以使得Line-In輸入與電源的穩壓部分接通及斷開。本發明的電源17不使用高安培數的雙擲開關。相反,開關21控制著產生ON信號的電路。在所述的最佳實施例中,開關21是瞬時單極單擲按鈕開關。但是,本技術的專家可以使圖6A的電路適應使用諸如單極雙擲開關之類的其它類型開關。AC Line-In總是從壁裝電源插座連接至初級/穩壓部件172。當ON是邏輯1(近似地說,AUX5為額定+5伏直流電)時,初級/穩壓部件172並不將115伏的ACLine-In穩壓成經由±5或±12輸出的±5或±12伏直流電流。初級/穩壓部件172隻在AUX5輸出處提供低安培數的額定+5伏直流電。另一方面,當ON是邏輯0(近似為GNO)時,初級/穩壓部件172將115伏的AC Line-In分別穩壓成經由四個±5和±12輸出的±5及±12伏直流電。因此,當ON為1時,電源17是「斷開」的,當ON是0時,電源17是「接通」的。
如果指定的話,就可從通常電源供應商那裡獲得類似上述電源17、帶有AUX5輸出和ON輸入的電源。
參照圖6A,它顯示了本發明之計算機系統10的概略電路圖。圖6A中的電路用於形成開關21,電源/反饋LED23、電源17、視頻顯示終端11以及在CPU40中執行的代碼之間的連接。
如圖6A所示,上述電路包括四個集成電路以及電路中各種分立的組件,上述四個集成電路是U1,第一預編程的PAL16L8;U2,預編程的83C750微控制器;U3,本技術中眾所周知的74LS05;以及U4,第二預編程的PAL16L8(未顯示)。一般來說,電路U1和U4(未顯示)將圖3A和圖3B的主板I/O總線90與微控制器U2連接起來,微控制器與圖6A的其餘電路相連,而這些電路則與開關21、電源17、視頻顯示終端11以及可編程時鐘合成器906相連。時鐘合成器906可以是本技術中普通人員所周知的多種這類設備中的一種。其中一種是由Chrontel公司生產的可從多方面廣泛獲得的CH9055A。
圖6A的電路還包括開關21;16MHz晶體檢波器Y1;十八個電阻R1-R18;八個電容C1-C8;三個N型MOSFET(金屬氧化物半導體場效應電晶體)Q1-Q3,這些MOSFET在所述的最佳實施例中是適於起邏輯開關作用的標準低電流NMOSFET;以及六個IN4148小型信號二極體CR1-CR6,這些電器件全部如圖6A所示那樣配置且相連。電阻R1-R8為1/4瓦電阻,它們具有圖6A所示的電阻值,誤差為±5%。電容C1是10μF(±10%)的電解電容。電容C2和C3是22PF(±10%)的鉭電容。電容C4-C8是0.1μF(±10%)的陶瓷電容。最後,電容C9是1000PF(±10%)的陶瓷電容。
正如在本技術中所周知的那樣,晶體檢波器Y1和電容C2及C3產生微控制器U2用來控制操作定時的信號。二極體CR1和CR3以及電阻R14將AUX5的信號隔離於VBAT信號,同時允許AUX5信號補充VBAT信號,這是因為,當電源17產生AUX5信號時,電池171並未放電。相反,AUX5的信號經由二極體CR1和CR2降壓,從而轉為與VBAT相連的設備提供適當的電壓。此外,VBAT的線路絕緣於AUX5的線路。
第二PAL U4(未顯示)與地址線SA(1)至SA(15)以及AEN(地址啟動)線相連。SA(1)至SA(15)以及AEN均是圖3A和圖3B所示的主板I/O總線90的一部分。僅將第二PAL U4編程為一地址解碼器,以便在地址線SA(1)至SA(15)上出現預定的地址且AEN(地址啟動)線活動時提供一低電平有效信號DCD#。在所述的特定實施例中,對第二PAL U4進行預先編程以便在地址0ECH和0EDH處對兩個接連的8位I/O埠解碼。此外,正如本技術的專家所周知的那樣,也可以由諸如內存控制器或ISA控制器晶片組之類的其它電子設備來產生DCD#信號。
對第一PAL U1編程以提供以下幾個功能(i)CPU與微控制器U2之間的讀/寫接口以便在CPU40與微控制器U2之間傳遞命令和數據;(ii)對滑鼠器中斷INT12和鍵盤中斷INT1進行邏輯或;以及(iii)響應來自CPU40的命令,復位輸出來復位微控制器U2。
第一PAL U1使用了兩個接連的I/O埠,本文也稱之為「電源管理埠」。第一PAL U1具有來自主板I/O總線90的八個輸入SD(4)、SD(0)、SA(0)、IOW#、IOR#、RST_DRV、IRQ1以及IRQ12。正如本技術的專家所周知的那樣,引線7(16)處的高電平有效信號RST_DRV輸入可將第一電路U1復位成已知的初始狀態,而上述RST_DRV輸入則是由內存控制器46所產生的。
微控制器U2的復位線RST751位於引線9處。復位子電路920用於產生RST751信號,並且包括四個電阻R4、R16、R17和R18;兩個電容C1和C8;以及兩個MOSFET Q2和Q3,這些器件如圖6A所示與第一PAL U1和微控制器U2呈電路通連。復位子電路920將來自第一電路U1的復位輸出信號RESET轉接成微控制器U2的復位輸入信號RST751,因此,當RESET線處於邏輯1時,會使得RST751線也會邏輯1,從而能復位微處理器U2。
第一PAL U1響應CPU40將邏輯1寫至控制埠0EDH的第0位而復位微控制器U2。將邏輯1寫至控制埠0EDH的第0位會導致第一PAL U1將RESET線置成邏輯1,而RESET線又將RST751線置成邏輯1,從而復位了微控制器U2。CPU40通過將邏輯0寫至控制埠0EDH的第0位而清除復位請求。
此外,如圖6C所示,在通往電源17的交流電源「降壓」或「消失」時,AUX5的電壓會下降,此後,AUX5信號的電壓必然會上升一定的量,不論何時出現這種情況,復位子電路都會將RST751線置為邏輯1,從而復位了微控制器U2。83C750的製造者Philips公司建議使用簡單的RC電路(阻容電路)以防止復位問題;但是,簡單的RC電路會使83C750在電源降壓期間鎖住。在圖6A的特定結構中,當AUX5電壓在一段大於由R4、R16和C1所決定的時間常數的時間內上升一閾值時,就會使RST751線置成邏輯1一段時間,這段時間是由R17和C8所決定的(從而復位了微控制器U2)。這種情況在通常的降壓或消失之後會出現。在圖6A所示的實施例中,所說的閾值約為直流電1.5V。
參照圖6C,它顯示了AUX5電壓隨著交流電供給電源17而上升那段時間以及發生「降壓」那段時間內用於復位電路920的波形。在t0之前,所述電源未產生AUX5,VBAT約為3.3V,Q3導通而使RST751線接地。在t0時刻,電源開始產生AUX5,AUX5的電壓開始以一定的速率上升,所說的速率取決於負荷以及電源內影響AUX5的電容。結點1即C1與R4之間的結點電容性地連接於AUX5,所以能隨AUX5的上升而上升。
在t1時刻,結點1達到約為1.5V,這足以觸發Q2,而Q2則使結點2接地。在t2時刻,當結點2超過2.5V時,Q3停止導通,RST751線藉助R18突增到AUX5的電平並隨AUX5上升至約為5V。當RST751線變成約3V時,就會復位微控制器U2。
在t3時刻,AUX5停止上升,所以,結點1停止上升並開始按C1和R4所確定的速率放電至地電平(第一電路U1的RESET線是低的)。在t4時刻,當結點1經過約1.5V時,Q2停止導通,結點2按C8和R17所確定的速率充電。在t5時刻,當結點2超過約2.5V時,Q3導通並使RST751接地。因此,完成了電源接通時的復位,計算機系統通常處於這樣的狀態AUX5為5V、VBAT為3.3V,結點1接地且結點2處於VBAT的狀態。
在t6時刻,AUX5線處開始降壓且AUX5放電。由於結點1電容性地連接於AUX5,所以它試圖隨AUX5的變化而變化,但卻不可能產生這種變化,因為,第一電路U1內的二極體會阻止結點1處於大大低於-0.5V的狀態。在t7時刻,AUX5處於最低點並開始再度上升。而且,結點1隨AUX5變化並且上升。在t8時刻,結點1達到約1.5V,這足以觸發Q2,而Q2則使結點2接地。在t9時刻,當結點2超過2.5V時,Q3停止導通,RST751線會藉助R18突增至AUX5的電平並隨AUX5上升至約為5V。當RST751線變成約為3V時,就會復位微控制器U2。
在t10時刻,AUX5停止上升,所以,結點1停止上升並開始按C1和R4所確定的速率放電從而接地(第一PAL U1的RESET線是低的)。在t11時刻,當結點1通過約為1.5V時,Q2停止導通,結點2按C8和R17所確定的速率充電。在t12時刻,當結點2通過約2.5V時,Q3導通並使RST751線接地。因此,完成了因降壓而引起的復位周期。請注意,在這種特定的降壓期間,結點1不會上升至3V以上,因而,儘管微控制器與RST751的引線相連,結點1也不可能復位微處理器。但是,AUX5的電壓會降至4V以下,這足以使微處理器U2進入不確定的狀態。
用於觸發一次復位的閾值由參照值所限定,所以,為了能使閾值電壓上升或下降,就必須使參照值(在本例中是VBAT)上升或下降。復位電路為微控制器U2提供了提高重置保護的好處,同時又非常廉價並且在不復位微處理器U2時基本上不耗電。
參照圖6A,微控制器U2通過第一PAL U1與CPU相接並具有多個輸入、輸出以及可內部控制的功能。
SWITCH(開關)信號在引線8(P0.0)處輸入並反映了按鈕21的當前狀態。按鈕21是常開的。當按鈕21斷開時SWITCH線通過電阻R1被置為邏輯0(接地)。當按下按鈕21從而引發閉合事件時,SWITCH線通過電阻R13被置為邏輯1(AUX5)。電容C6起作用以消除開關閉合事件彈跳,正如本技術的專家所周知的那樣,在微控制器U2內通過讀取SWITCH預定的次數例如50次並確認在所有的讀取中SWITCH線都是相同的,從而進一步消除了開關21閉合事件的彈跳。
微控制器U2可直接控制對電源17的穩壓。如圖6A所示,On(開)信號在引線5(P3.0)處輸出並經由電阻R6與SWITCH信號作線「或」以便控制電源的ON#信號。當ON信號為邏輯1時,MOSFET Q1導通,從而使ON#線(JP2的引線2)成邏輯0(接地),因而使電源17開始通過±5VDC和±12VDC線向計算機系統提供穩壓的電力。另一方面,當ON線為邏輯0時,MOSFETQ1不導通,所以,ON#線(JP2的引線2)會被電阻R7置成邏輯1(AUX5),從而使得電源17停止經由±5VDC和±12VDC線供給穩壓的電力。
微控制器U2響應開關21的接通事件以及通過微控制器U2內CPU40可寫的可寫寄存器位響應CPU40從而控制ON線的狀態。AUX5對微控制器U2加電,所以,微控制器U2總是處於加電狀態並能執行代碼且控制著計算機系統。如果電源17不通過±5VDC和±12VDC線向計算機系統提供穩壓的電力並且(i)按下開關21或者(ii)出現了所說的外部事件之一,那麼,微控制器U2就會確認ON信號,從而使得電源17通過±5VDC和±12VDC線向計算機系統提供穩壓的電力。釋放開關21之後,微控制器會繼續確認ON信號。
作為一種後備系統,電源17也可在用戶通過按鈕21的直接控制下接通。如果微控制器U2正如計算機系統未響應按下電源開關21而起動所表現出來的那樣停止起所希望的作用,那麼,一般就可以使用上述選擇。如圖6A所示,開關21還通過二極體CR2、MOSFET Q1、電阻R7以及連接器JP2控制電源17的ON#線。在一般情況下按鈕21是斷開的,SWITCH線通過R1被置為邏輯0並且MOSFET Q1不導通,所以ON#線(JP2的引線2)通過電阻R7被置為邏輯1(AUX5),因而電源17不經由±5VDC和±12VDC線提供穩壓的電力。當用戶按下並按住按鈕21時,SWITCH線被置為1,MOSFET Q1導通,從而將ON#線(JP2的引線2)置為邏輯0(GND),因此使得電源17開始經由±5VDC和±12VDC線提供穩壓的電力。在繼續按住按鈕21的情況下,計算機系統加電之後,BIOS會使CPU40檢測微控制器U2是否還在起作用。如果不起作用,CPU40就會復位微控制器U2,而微控制器在被復位之後會檢測到開關21正被按下。因此,在按鈕21仍被按住的情況下,微處理器會確認ON信號,所以用戶在知道了微控制器目前正在控制電源17的情況下會最終放開開關21。為了使用這種後備的選擇,用戶必須按下按鈕21數秒的時間即在標誌(logo)出現之後約為兩秒。
微控制器U2隻響應(i)按下開關21或者(ii)CPU40命令微控制器關閉系統而關閉計算機系統。對微控制器來說,上述事件都是相同的,這是因為,微控制器配置成開關21的接通事件或CPU40都能引發一次開關按下,硬體上的按鈕按下/釋放基本上看成是與軟體上的按鈕按下/釋放一樣的。如果微控制器U2中的允許掛起標誌被清除,則微控制器U1在沒有CPU指令的情況下便關閉計算機系統。在這種情況下,當計算機系統處於加電狀態且清除了允許掛起標誌,那麼,微控制器U2就會響應開關21的接通事件而清除ON信號,從而使電源17停止經由±5VDC和±12VDC線向計算機系統提供穩壓的電力。在釋放開關21之後,ON信號仍保持在被清除的狀態。
微控制器U2也會響應CPU在系統狀態已成功地保存到硬碟驅動器上(掛起)之後必定會發出的命令而關閉計算機系統。微控制器U2響應上述命令而清除ON信號,從而使電源17停止經由±5VDC和±12VDC線向計算機系統提供穩壓的電力。
微控制器U2在某些外部事件發生時也會檢測並影響計算機系統。EXT_RING(外部振鈴)信號在引線7(P0.1)處輸入並使微處理器U2檢測來自加電後外部數據機902的振鈴。正如本技術的專家所周知的那樣,當在插塞尖端與振鈴電話線上檢測到振鈴信號時,一般的外部數據機會提供振鈴信號,該信號會以周知的RS-232C格式觸發邏輯1。上述信號經由二極體CR6通向微控制器U2並被電阻R10和R11分流且最終經由EXT_RING線輸入微控制器U2。微控制器U2每25毫秒對觸發的信號進行一次取樣並加以分析,從而,對兩個連續的樣本這一輸入是邏輯1時,便認為存在有振鈴。微控制器U2響應所滿足的上述條件確認ON信號,從而使電源17經由±5VDC和±12VDC線向計算機系統提供穩壓的電力。為了用EXT_RING信號來檢測呼入電話,必須存在有從外部加電的數據機902。
此外,提供符合RS-232規範的二進位信號(或充分接近RS-232規範從而足以確認EXT_RING信號)的其它設備可與EXT_RING線相接並用於喚醒計算機系統,例如,這些設備可以是運動傳感器、防盜警報器、語音激活傳感器、光傳感器、紅外線傳感器、「鳴叫」型傳感器等。
如圖6A和圖6B所示,本實施例還帶有用於檢測來自內部數據機900的電話振鈴信號的裝置,此裝置帶有一以振鈴檢測電路為基礎的光隔離器OPTD1。例如Hewlett Packard生產多種合適的光隔離器,這些隔離器可從多方面廣泛地獲得。可將內部數據機900設計在系統主板20的電路內,或者插在擴展槽78上。在後一種情況下,必須對數據機900加以改進以提供一Berg或類似的接頭,從而使來自光隔離器OPTD1的信號電連接於圖6A電源管理電路的電路。有許多數據機的生產商改進了它們的內部數據機以提供適合於和本發明電路一道使用接頭。EXT_WAKEUP#(外部喚醒)信號在微控制器U2的引線4(P0.2)處輸入並用於從內部數據機中輸入來自振鈴檢測光隔離器OPTO1的信號。此信號經過電阻R9和R5二極體CR6以及電容C9,最後經由EXT_WAKUP#線輸入微控制器U2。
內部數據機900的閾值及保護部分905與標準的插塞尖端(Tip)和振鈴電話線相接,並且(i)提供防止可能損壞數據機900的閃電和其它電學事件的保護以及(ii)如數據機設計技術的專家所周知的那樣設置振鈴閾值電壓。
微控制器U2檢測並分析來自光隔離器OPTD1的觸發信號,從而,每當該信號在EXT_WAKEUP上的三個連續信號周期具有15.1Hz至69.1Hz的頻率,就認定存在有振鈴。與必須加電才能沿EXT_RING提供振鈴信號的EXT_RING信號不同,對光隔離器OPTD1來說,不必為內部數據機900加電就能沿EXT_WAKEUP#線提供適當的信號,該信號通常可由R5升至AUX5。
如果CPU40帶有系統管理中斷(SMI)(CPU40不一定要帶有SMI才能使系統利用本發明的多種優點),那麼,微控制器U2就會通過CPU的系統管理中斷(SMI)中斷CPU40。SMI_OUT#(系統管理中斷輸出)信號在微控制器U2的引線3(P3.2)處輸出並使得微控制器U2在不等待作業系統確認或允許中斷的情況下立即中斷CPU40。位於微控制器U2內CPU40可寫的一個可寫寄存器位控制SMI_OUT#線的狀態。此外,微控制器U2可以確認SMI_OUT#信號從而(i)根據在ACTIVITY#(活動)線上所檢測到的活動(ii)或者在微控制器U2使電源17停止向計算機系統提供穩壓電力之前中斷CPU40。從CPU到微控制器U2的命令可以使上述一個或兩個事件有效或失效。
對於每個SMI,CPU40內的微碼都將CPU的狀態從內存保存至特定的CPU狀態保存區域或保存至內存。此後,CPU40執行SMI中斷處理程序,該程序執行以下功能。為了恢復CPU的狀態,SMI中斷處理程序發出RSM(繼續)指令,此指令使CPU40從上述特定的保存區域中恢復CPU自身的狀態。
在CPU40使微控制器U2通過CPU的SMI中斷CPU40之前,CPU40將一指示系統管理中斷(SMI)原因的值寫至CMOSNVRAM內的變量中。CMOS NVRAM內的這個值預設為00H,它向CPU40指明正如在微控制器U2使電源17停止提供穩壓電力之前所出現的那樣微控制器U2正在異步地中斷CPU40。每次SMI之後,CPU40都將CMOS NVRAM內的上述變量置為00H。在假定微控制器U2即將使計算機系統掉電的情況下,CPU40會響應上述值去執行某些任務。在CPU40通過周期性地重新啟動微控制器U2內的降低功耗延時計時器而在微控制器U2使計算機系統降低功耗之前,CPU40可以延時一段時間。
在計算機系統掉電之前的這段時間內、CPU40可以執行多種任務。例如,由於用戶可能改變了影響喚醒警鈴的一個或多個參數,所以CPU會重新計算出距喚醒的新的分鐘數值並將該分鐘數值寫至微控制器U2。此外,CPU還將以後要寫入硬碟驅動器31的某些信息如計算機系統從最近一次通電開始運行的時間等寫至CMOS NVRAM。
CPU40所寫的其它值包括01H,它表明CPU40要轉至標號254處的掛起例程;02H,它表明CPU40要轉至標號454處的繼續例程;以及0FFH,它表明CPU40要在E000H段數據結構內創建前述特定的CPU狀態保存區域。
在本實施例中,微控制器進行控制使顯示器11不顯示。DISP_BLANK(顯示器不顯示)信號在微控制器U2的引線1(P3.4)處輸出並直接控制著顯示器11的不顯示。兩個非門U3D和U3E通過ESYNC#和BLANK#線與DISP_BLANK信號相連。在ESYNC#和BLANK#處於邏輯1(VCC)的情況下,視頻控制器56會產生視頻信號。當ESYNC#和BLANK#線處於邏輯0(接地)時,視頻控制器56停止產生視頻信號。位於微控制器U2內CPU40可寫的一個可寫寄存器位控制著DISP_BLANK的狀態。當計算機系統進入待機狀態152時,CPU40會指示微控制器U2使顯示器不顯示。此外,響應開關21的接通事件而依次對DISPBLANK線置1和清0。與此相似,在本例中為INT1和INT2的任何一種活動中斷處的活動都會使微控制器對DISP_BLANK線清0,從而使得視頻控制器56產生視頻信號。
此外,微控制器U2控制著時鐘合成器906所產生的時鐘信號的頻率。三個Berg型跳接器(未顯示)JP0、JP1以及JP2按下述方式控制著時鐘合成器當JP0=0、JP1=1且JP2=0時,時鐘合成器產生33MHz的時鐘信號;當JP0=1、JP1=1且JP2=0時,時鐘合成器產生25MHz的時鐘信號;當JP0=0、JP1=1且JP2=0時,時鐘合成器產生8MHz的時鐘信號。對應於JP0、JP1和JP2的三個時鐘線CLK0、CLK1以及CLK2也控制著時鐘合成器906。如圖6A所示,微控制器U2通過CLK_SLOW#信號控制著上述時鐘線CLK0、CLK1和CLK2,而CLK_SLOW#信號則在微控制器U2的引線2(P3.3)處輸出。如圖所示,帶有開放收集器輸出的非門U3A、U3B和U3C雙重反相CLK_SLOW#信號。而且,電阻R15和R8都是負載電阻,它們分別用於將U3A的收集極開路的輸出和朝向時鐘合成器906的CLK0輸入上升至邏輯1。
上述三個時鐘信號CLK0、CLK1和CLK2以及三個跳接器JP0、JP1和JP2按如下方式控制著時鐘合成器當CLK_SLOW#信號為邏輯1時,CLK1和CLK2信號也為邏輯1,時鐘合成器906跳接器JP1、JP2所控制並產生供計算機系統使用的25MHz和33MHz的較高頻時鐘信號。另一方面,當CLK_SLOW#信號為邏輯0時,CLK1和CLK2信號也為邏輯0,時鐘合成器906會產生供計算機系統使用的8MHz較低頻信號,從而使計算機系統有較少的功耗。如圖6A所示,一Berg型跳接器將CLK_SLOW#線與CLK0線分開。如果一個跳接器就位,那麼,CLK0線中就會跟隨CLK_SLOW#信號。另一方面,如果沒有跳接器就位,那麼,電阻R8就會在與CLK_SLOW#信號無關的情況下將CLK0置為邏輯1。位於微控制器U2內CPU40可寫的一個可寫寄存器位控制著CLK_SLOW#線的狀態。此外,微控制器U2可以響應ACTIVITY#線上的活動將CLK_SLOW線清零。正如本技術的專家所知道的那樣,本發明也可以使用其它的時鐘合成器,這時需改變微控制器U2與時鐘合成器之間的相互連接關係以便符合所使用的特定合成器的特殊規格。
另外,微控制器U2還直接控制著電源/反饋。LED23的發光。LED_CNTRL(LED控制)信號在引線22(P3.6)處輸出並使得微控制器U2直接控制電源/反饋LED23。電阻R2和R3以及二極體CR4和CR5根據處於邏輯0的LED_CNTRL線使AUX5電源線或VCC電源線驅動電源/反饋LED23。當LED_CNTRL線處於邏輯1時,電源/反饋LED23不亮。正如以下將要詳細說明的那樣,微控制器U2響應開關21的接通事件、響應喚醒警鈴、響應振鈴檢測輸入的一次或多次振鈴或者響應處於待機方式下的計算機系統而控制LED_CNTRL線的狀態。
微控制器U2可將LED23控制成簡單的電源LED。這樣,在開關21使計算機系統從關機狀態156或掛起狀態154轉變成正常操作狀態150的接通事件之後,LED23會發光。同樣,在開關21使計算機系統從正常操作狀態150轉變成掛起狀態154或關機狀態156的釋放事件之後,微控制器U2會使LED23熄滅。
此外,微控制器U2可以使LED23按特定的速率例如每秒一次有選擇地閃亮,以指示計算機系統正處於待機狀態152。再有,微控制器U2還可以使LED23按不同的速率例如每半秒一次有選擇地閃亮,以指示計算機系統被振鈴或警鈴所喚醒或者計算機系統處於關機或掛起狀態。另外,微控制器U2也可以使LED23以成組閃亮的方式有選擇地閃亮以指示計算機系統因諸如振鈴、警鈴之類的外部事件而加電以及因不活動性掛起計時器到時而掉電的次數。在這種情況下,BIOS具有一種或多種功能以允許OS及應用程式修改微控制器U2使LED23閃亮的次數。例如,如果計算機系統被振鈴喚醒並接收到了呼入的傳真傳輸,那麼,運程通信應用程式就會調用特定的BIOS功能使閃亮數加一。此後,BIOS使CPU40將新的閃亮值寫至微控制器U2,從而使LED23閃亮所命令的次數。
POWERGOOD信號在微控制器U2的引線4(P3.1)處輸入並允許微控制器U2和CPU40使用這一信號。具體地說,微控制器使用POWERGOOD信號使基於反饋的檢錯及糾錯電路確定電源17是否出現故障並排除掉這種故障。正如本說明書其它部分所說明的那樣,如果已確立了ON信號一段時間(例如三秒)並且POWERGOOD信號為邏輯0從而指示電源17未以適當的電平提供穩定的電壓,那麼,微控制器U2就假定電源17因諸如過載電流而出現故障。因此,為了能夠排除該故障,微控制器U2會停止確立ON信號一段時間(例如5秒)以便排除上述故障。此後,微控制器U2會重新確立ON信號並等待POWERGOOD變成邏輯1,從而表示電源17目前正在向計算機系統提供穩壓的電力。在不存在上述基於反饋的檢錯及糾錯的情況下,電源17總是會繼續處於出錯狀態並且微控制器U2總是不斷地確立著ON信號以試圖使電源17開始產生穩壓的電力。唯一的方案是從上述電源上撥掉交流電以排除所說的故障。
圖6D顯示了電源檢錯與糾錯電路的另一實施例。該實施例使用了四個FET Q10-Q13,電阻R20-R23、電容C20以及74HC132以檢測電源17何時出現故障並排除這種故障。當ON信號為HIGH(高),AUX5加電且VCC低於觸發Q11的閾值時,Q12將ON信號置為LOW(低)一段時間,該時間是由R22和C20所決定的,從而排除電源中的故障。
ACTIVITY#信號在微控制器U2的引線19(INT1)處輸入,微控制器U2使用這一信號以響應鍵盤12和滑鼠器13上的活動。IRQ1是鍵盤的硬體中斷信號,它在第一PALU1的引線8(I7)處輸入,按下鍵盤12上的按鍵會使IRQ1信號產生脈動。IRQ12是滑鼠器的硬體中斷信號,它在第一PALU1的引線11(I9)處輸入,移動滑鼠13或按下滑鼠器13上的按鈕會使IRQ12信號產生脈動。IRQ1和IRQ12在第一電路U1內作邏輯「或」並作為ACTIVITY#信號輸出。使用ACTIVITY#信號會使得微控制器U2不會遺漏鍵盤12或滑鼠器13的活動。
當處於待機狀態時,上述任一種中斷的活動都會使微控制器立刻恢復視頻顯示。在從待機狀態152返回至正常操作狀態154時,按上述方式使用中斷IRQ1和IRQ12會給用戶直接的反饋,該反饋是恢復了的視頻顯示。否則,正如圖9中的文字所述的那樣,用戶可能在幾秒鐘之後當APM檢查用戶活動時,才接收到反饋。
利用SD(0)、SD(1)、SD(2)、SD(3)、IO_STROBE以及PROC_RDY進行CPU40與微控制器U2之間的通訊,SD(0)在第一PAL U1的引線18(I/O6)處輸入並經由RWD0線輸入至微控制器U2,RWD0線則在第一電路U1的引線B(I/O1)處輸出並在微控制器U2的引線13(P1.0)處輸入,SD(1)在微控制器U2的引線14(P1.1)處輸入,SD(2)在微控制器U2的引線15(P1.2)處輸入,SD(3)在微控制器U2的引線16(P1.3)處輸入,SD(4)在第一電路U1的引線6(I5)處輸入,IO_STROB#在微控制器U2的引線18(INTO)處輸入,PROC_RDY在微控制器U2的引線20(P1.7)處輸出。將第一PAL U1和微控制器U2配置並編程為以便提供(i)從CPU40沿SD(0)經由RWD0、SD(1)、SD(2)以及SD(3)到微控制器U2的四位並行寫操作,其中一個地址基本上是用於復位微控制器U2的一位寫操作,而其它地址則是寫入微控制器U2的半個字節,該半個字節只有在數據位SD(4)為HIGH時才是有效的;以及(ii)由CPU40從微控制器U2中沿SD(0)經由RWD0所進行的串行讀操作(一位),其中一個地址對應於狀態位,而其它地址則對應於來自微控制器U2的數據位。
參照圖19,它顯示了在微控制器U2內運行的幾個例程,這些例程始於1160處。微控制器U2通常執行兩個主例程中的一個位於任務1168至1216的通電例程或位於任務1260至1308處斷電例程。當電源17在±5和±12線處提供穩壓的電力,或電源17雖不在±5和±12線處提供穩壓的電力但計算機系統處在通電過程時,微控制器U2就執行通電例程。當電源17不在±5和±12線處提供穩壓的電力或電源17雖在±5和±12線處提供穩壓的電力但計算機系統處於斷電過程時,微控制器U2就執行斷電例程。此外,還有三種中斷驅動例程一個是在1220至1232處的用於和CPU40進行通信的例程;一個是在1236至1244處的用於檢測滑鼠器13或鍵盤12活動的例程;一個是位於1248至1256處的提供25毫秒、半秒、秒以及分鐘解析度的時基的例程。
首先,在1164處初始化微控制器U2,在這期間,初始化所有的變量,初始化計數器變量,初始化計時器中斷並使之生效,同時初始化控制通信例程及活動例程的外部中斷。
通訊例程是一始於1220處的中斷驅動例程,它響應被第一PAL U1置為邏輯0的IO_STROBE而執行,邏輯0表示CPU40正在開始一命令或查詢。簡要地說,此例程在1224處接收來自CPU40的一個或多個半字節命令或查詢、在1128處執行上述命令或響應上述查詢而返回數據、並且在1232處將程序執行控制權交還給被中斷的代碼。
微控制器順序地接收來自CPU構成命令或查詢的半字節。在接收一個半字節之後,微控制器將PROC_RDY置為LOW。當微控制器準備好接收下一個半字節時,微控制器再將PROC_RDY置為HIGH。CPU40一旦檢測到在PROC_RDY處有上述從LOW到HIGH的轉換就寫下一個命令的半字節。
微控制器U2在執行來自CPU40的命令或查詢時不能接收另外的命令,所以,微控制器U2使PROC_RDY保持為邏輯0,以便(通過狀態埠的讀操作)向CPU40表明微控制器還不能接收下一個命令/查詢。當上述工作完成時,PROC_RDY被置為邏輯1,從而(通過狀態埠的讀操作)向CPU40表明微控制器U2隨時都可以接收下一個命令/查詢。
活動例程是一始於1236處的中斷驅動例程,它響應被第一PAL U1置為邏輯0的ACTIVITY#線而執行,邏輯0表示用戶已經使用了滑鼠器13或鍵盤12。簡要地說,此例程響應中斷的接收而在1240處進行下列工作(i)設置一個位,該位表示已存在有滑鼠器13或鍵盤12的活動;(ii)如果啟動時鐘減慢則恢復時鐘速度,(iii)如果屏幕不顯示,則使屏幕顯示;(iv)重新啟動故障保險計時器;以及(v)如果有效,則向CPU生成一SMI。此後,該例程在1244處將程序執行控制權交還給被中斷的代碼。然後,如本說明書其它地方所說明的那樣,每當APM「獲得事件」,管理例程都查詢上述例程所設置的位。
計時器例程是一始於1248處的中斷驅動例程,它響應內部計時器中斷而執行,內部計時器中斷以一個16位自由運行的計數器為基礎,該計數器配置成每25毫秒產生一次上述內部計時器中斷以便為微控制器U2提供時基。計時器例程提供下列時基25毫秒、半秒、秒和分鐘。簡要地說,計時器例程在1252處接收中斷、確定何時出現不同的時間、執行適當的活動並在1256處將程序執行控制權交還給被中斷的代碼。
如果電源未提供穩壓的電力並且微控制器配置成響應振鈴,則計時器例程每一瞬間(25毫秒)檢查EXT_RING線的RS-232振鈴,並且,如果有振鈴,就設置一個位。
如果處於關機狀態或掛起狀態,計時器例程每半秒鐘就會如本說明書其它地方所說明的那樣確定是否應觸發LED23以便進行外部振鈴喚醒指示閃亮。
如果處於待機狀態,計時器例程就會如本說明書其它地方所說明的那樣每一秒鐘確定是否應觸發LED23以便進行掛起指示閃亮。
而且,如果合適的話,計時器例程每一秒鐘都會減小故障保險計時器、減小APM故障掛起計時器以及減小電源故障計時器,同時如果有任何一個計時器到時,計時器例程還設置一對應的位。故障保險計時器是一個20秒的計時器,它在到時時可使得微控制器切斷計算機系統的電源。管理例程響應APM的獲得事件頻繁地重新啟動復位故障保險計時器,所以,只要CPU中運行的代碼在正確地執行,故障保險計時器就不會到時。但是,如果上述代碼真正地停止執行,故障保險計時器就會到時,並且,在假定BIOS和其它例程發生故障的情況下,微控制器U2會響應按下及釋放電源按鈕21使電源17停止在±5和±12線處提供穩壓的電力。
APM故障掛起計時器是一個18秒的計時器,在故障保險計時器到時以使微控制器關閉計算機系統之前,當開關21處於關閉/釋放狀態(表示用戶試圖關閉計算機系統)時,APM故障掛起計時器是有效的,並且,APM故障掛起計時器在到時時使計算機系統設法掛起。同故障保險計時器一樣,CPU40中執行的代碼例如APM Get Events、APM Working On Last Request以及APMReject Last Request等會頻繁地重新啟動(復位)APM故障掛起計時器,所以,只要CPU40中執行的代碼在正確地執行,APM故障掛起計時器就不會到時。但是,如果所說的代碼真正停止執行,APM故障掛起計時器就會到時。
當APM故障掛起計時器到時時,微控制器U2會設置一個位。在每次計時器0級中斷期間檢查該位,正如本技術的專家所周知的那樣,這種情況約每55毫秒出現一次。此外,計時器0級中斷服務例程重新啟動故障計時器。如果計時器0級中斷服務例程檢測到APM故障掛起計時器業已到時,它就會轉至掛起例程以試圖掛起計算機系統,如與圖10有關的文字所述。
由計時器0級中斷服務例程所引起的中斷並不是進行中斷的最佳方法。APM可察覺多種應用程式和適配器,並且,這些應用程式和適配器可響應被掛起的計算機系統而執行多種任務。計時器0級中斷服務例程所引起的中斷不能使用APM去向這些APM可察覺的實體表明即將進行掛起。因此,在這些實體沒有正確地準備好的情況下掛起計算機系統。這樣,計時器0級中斷服務例程所引起的中斷將會把系統保存起來,所以,內存中的數據不會丟失,但是,在保存了所需數據之後,用戶要重新引導機器以便將計算機系統設置成適當的狀態。
APM故障掛起計時器特別有助於修補OS內APM驅動程序中的「漏洞」。例如,當顯示Microsoft Windows3.1模態對話框時,Windows APM驅動程序停止發送APMget events。因此,如果在用戶按下電源按鈕21以試圖掛起系統時有模態對話框顯示,那麼,計算機系統將不會掛起。微控制器U2會注意到電源開關處於關閉/釋放狀態,但因為所有的APM get event均已停止,所以不會去調用管理例程。按下開關直到用戶清除掉模態對話框才會起作用。但是,一旦APM故障掛起計時器到時並且計時器0級中斷服務例程檢測到這種到時,有可能在不向APM可察覺實體表明計算機系統正在被掛起的範圍內將系統的狀態保存起來。
每一分鐘,計時器例程都會減少喚醒警鈴計時器和活動計時器的分鐘數。當喚計時器的分鐘數到時時,如果有效的話,微控制器就會使電源17開始在±5和±12線處提供穩壓的電力。
初始化微控制器U2之後,會在1168處測試電源以確定是否斷電。如果是通電的、微控制器17會在1172處檢驗電源是否有故障。電源17有若干種內部保護措施,這些措施會使電源關閉或「出現故障」。微控制器U2按下列方式確定電源17是否出現故障如果微控制器正在運行(表示AUX5已加電,即正將交流電提供給電源17),並且微控制器U2保持著ON信號以試圖使電源17在±5和±12線處提供穩壓的電力,同時不確立POWERGOOD線(表示電源17不在±5和±12線處提供穩壓的電力),那麼,就是電源17出現了故障並且必須復位該電源。
在任務1172處,實際測試電源17兩次。微控制器U2確立ON信號,然後如內部時基所測定的那樣等待三秒鐘。如果在ON信號確立了三秒鐘之後未確立POWERGOOD信號,那麼,微控制器U2就會清除ON信號並等待另外的五秒鐘。然後,微控制器U2再度確立ON信號並等待另外的三秒鐘。如果在ON信號確立了三秒鐘之後仍未確立POWERGOOD信號,則微控制器U2會清除ON信號並認定電源17出現了故障。
如果電源出現了故障,微控制器U2會轉至斷電例程,如1174處所示。另一方面,如果電源17未出現故障而是關閉了,則微控制器會在1175處使該電源開始在±5和±12線上提供穩壓的電力並且在1176處初始化I/O埠、開啟LED23並使外部中斷生效。
圖7顯示了機器在微控制器U2內所維護的開關狀態。如該圖所示,所說的狀態響應開關21的接通事件或其它事件如復位計算機系統10以及CPU40的寫操作等而改變。在電源17未提供AUX5的情況下,微控制器U2不被加電,所以174處的開關狀態是無意義的。按下開關21,來自其它方向的電話振鈴、警鈴計時器時間數的到時以及來自CPU40的命令都會導致微控制器使電源17開始向計算機系統提供電力,如伴隨圖6的文字所述。
如圖7所示,開關21具有四種由微控制器U2監控的狀態(i)接通/按下狀態176(在這種狀態下,用戶按著按鈕並試圖開機);(ii)接通/釋放狀態178(在這種狀態下,用戶已釋放了按鈕並試圖開機),(iii)斷開/按下狀態180(在這種狀態下,用戶按著按鈕並試圖關機);以及(iv)斷開/釋放狀態182(在這種狀態下,用戶業已釋放了按鈕並試圖關機)。然後,在1180處微控制器U2測試開關是否處於斷開/釋放狀態,從而表明用戶業已釋放了按鈕並試圖關機。
在處於狀態174並按下開關21時,微控制器U2進入接通/按下開關狀態176。釋放開關21會使微控制器U2進入接通/釋放開關狀態178。與此相似,當復位微控制器U2時,微控制器U2會進入接通/釋放狀態178。再次按下開關21會使微控制器U2進入斷開/按下開關狀態180。再次釋放開關21會使微控制器U2進入斷開/釋放開關狀態182。隨後接通開關21會使微控制器U2按上述四種狀態循環,如圖7所示。當計算機系統10處於正常操作狀態150時,微控制器U2處於接通/釋放開關狀態178。處於這種狀態時會執行應用程式。在這種狀態下,計算機系統10可能會進入和離開待機狀態152。這種狀態還對應於用戶提出的掛起中止請求。斷開/釋放開關狀態是對應於用戶提出的掛起請求的開關狀態。也就是說,從系統處於關閉狀態156開始,按下並釋放開關21一次會使計算機系統處於正常操作狀態150。再次按下並釋放開關21可產生掛起請求,該請求由管理例程所讀取,這將在圖9的文字中予以詳細地說明。在計算機系統10處於掛起狀態154之前,第三次按下並釋放開關21會產生掛起中止請求,該請求由掛起例程所讀取。
參照圖19,如果用戶業已釋放了按鈕並試圖關機,那麼,微控制器U2就會轉至斷電例程,如1184所示。
另一方面,如果按鈕處於斷開/按下狀態,這表示用於正按著按鈕並試圖關機,那麼,微控制器就會在1192處測試開關是否被BIOS所屏蔽。BIOS在進入待機狀態的入口處屏蔽開關21以防止按下開關使計算機系統從待機狀態轉換成掛起狀態,從而如本文其它地方所述的那樣防止用戶搞混。
如果BIOS業已屏蔽了開關21,那麼,微控制器的代碼就會轉回任務1176並清除屏蔽位以便允許下一次按下開關使得計算機系統進入關機狀態或掛起狀態。另一方面,如果未屏蔽開關21或者如果開關21不處於斷開/按下狀態,微控制器就會在1196處執行心搏例程(heartbeat routine)。
心搏例程用於向CPU40表明微控制器U2正在正確地發揮著作用。微處理器的CMD_STATE#線的輸出(管腳17,P1.4)通常為邏輯1。每50-60微秒微控制器U2就會將該線置為邏輯0約達1.5微秒,然後使之回到邏輯1。由於CPU40所讀取的電源管理狀態埠是CMD_STATE#和PRO_RDY線的邏輯「與」,所以CPU40能如此頻繁地例如在系統引導時監控這種從HIGH到LOW及返回到HIGH的轉換,從而確保了微控制器U2正確地起作用。
然後,微控制器U2在1200處測試BIOS是否業已命令斷電。CPU40可以存取並改變微控制器U2內的每一個變量。如果BIOS例如在掛起期間系統的狀態被寫入硬碟驅動器31之後業已設置了表示應使計算機系統斷電的變量,那麼,微控制器U2就會轉至斷電例程,如1204所示。
另一方面,如果BIOS未命令斷電,那麼,微控制器就會在1208處執行故障保險例程。故障保險計時器是一個20秒的計時器,當電源17在±5和±12線處提供穩壓的電力時,該計時器是有效的。故障保險例程檢查故障保險計時器是否已到時並且在該計時器業已到時時設置一個二進位位。如果BIOS命令重新啟動故障保險計時器,那麼,故障保險例程還會重新啟動故障保險計時器。
然後,在1212處,作為一種安全措施並且為了使微控制器與電源17同步,微控制器會檢查POWER_GOOD線以便檢測電源17是否仍在±5和±12線處提供穩壓的電力。
如果電源17未在±5和±12線處提供穩壓的電力,那麼,微控制器U2就會轉至斷電例程,如1216所示。另一方面,如果電源17正在±5和±12線處提供穩壓的電力,那麼,微控制器的代碼就會轉回1180並繼續執行。
斷電例程始於任務1260處。首先,微控制器U2在1264處使活動中斷無效以防止顯示器不變空白。
其次,在1268處,微控制器檢查POWER_GOOD線以檢測電源17是否仍在±5和±12線處提供穩壓的電力。如果電源17正在±5和±12線處提供穩壓的電力,那麼微控制器U2就在1272處測試是否應該使顯示器不顯示與/或並斷開LED23。如果是這樣的話,微控制器U2就使視頻控制器56停止產生視頻信號和/或斷開LED23。
此後,如果LED和顯示器均未不顯示,則微控制器測試(i)BIOS是否業已通過設置一個二進位位命令計算機系統應回到開機,或者(ii)用戶是否業已通過再次按下電源按鈕21命令計算機系統應回到開機。如果產生上述情況中的任何一種,那麼,計算機系統都將回到加電並且微控制器U2會轉至通電例程。如1284所示。
然後,微控制器確定在來自光隔離器OPTO1的EXT_WAKUP#線上是否有振鈴出現。就RS-232線來說,這僅僅是檢查EXT_RTNG線是否為HIGH。對來自光隔離器OPTO1的信號來說,這包括微控制器U2所作的更多的檢查工作。電阻R5通常將EXT_WAKEUP#線置為HIGH。如果Tip和Ring兩端的電壓高於由閾值和保護部分905所設置的電壓閾值例如在電話振鈴時的60V,光隔離器OPTO1就會將EXT_WAKEUP#線置為LOW。但是,測試電話線或電話線上的噪音都能滿足上述條件。所以僅等待EXT_WAKEUP#線為低可能使得虛假的「振鈴」喚醒計算機系統。
因此,微控制器通過測定振鈴的頻率來確定信號是否是振鈴。標準的振鈴是一在16Hz到58Hz之間的信號。微控制器U2在EXT_WAKEUP#信號的四個上升邊緣之間測定三個時間周期,如果這三個都對應於15.1Hz和69.1Hz之間的頻率,則微控制器認定在EXT_WAKEUP#線上出現了適當的振鈴並且設置一對應的二進位位。
EXT_WAKEUP#線上所檢測到的LOW信號會啟動檢查例程。如果對三次接連的讀取來說EXT_WAKEUP#線都為LOW,那麼,微控制器U2就會等待EXT_WAKEUP#線在三次接續讀取的時間內返回到HIGH。緊接著讀取構成計時器中斷基礎的16位計數器並將其值存儲起來,而且,微控制器U2在三次接連讀取的時間內等待EXT_WAKEUP#線轉換到LOW。微控制器然後測試頭兩個上升邊緣之間的時間是否在15毫秒與66毫秒之間,這表示信號在15.1Hz和69.1Hz之間。如果是這樣的話,再次對上述具有高解析度的計數器進行取樣,微控制器在等待下一次LOW至HIGH轉換時計算兩次計數器取樣之間的差值。對EXT_WAKEUP#線上下兩次的LOW至HIGH轉換重複上述過程。如果這三個時間周期全都在所說的範圍內,那麼微控制器U2就認定在EXT_WAKEUP#線上出現了適當的振鈴並設置一對應的二進位位。如果在EXT_WAKEUP#線上不存在LOW或者上述三個時間周期中的任何一個超出了所說的範圍,微控制器的代碼會繼續但不設置所說的二進位位。
然後,微控制器在1286處測試是否存在有振鈴或者喚醒警鈴的分鐘數業已到時。對RS-232振鈴、光隔離器振鈴或喚醒警鈴的分鐘數來說,還包括微控制器U2測試是否設置了相關的二進位位。
如果存在振鈴或喚醒警鈴的分鐘數到時,那麼,計算機系統就會回到被加電,微控制器U2會轉至加電例程,如1287所示。
此後,在1288處,微控制器測試電源17是否在±5和±12線處提供穩壓的電力。如果未供電,則代碼轉回至任務1280並再次開始循環。另一方面,如果電源17在±5和±12線處提供穩壓的電力,那麼,微控制器U2在1292處執行心搏例程並在1296處執行故障保險例程。這兩個例程已在任務1196和1208的文字中作了說明。
微控制器U2隻在下列三種情況下才使得電源17停止在±5和±12線處提供穩壓的電力(i)BIOS業已命令立刻斷電,這是在通信例程中實現的;(ii)故障保險計時器業已到時;或者(iii)用戶按下電源按鈕並且未設置微控制器U2的允許掛起標誌,這是微控制器U2在每次讀取SWITCH輸入時所檢測的條件。所以,微控制器在1300處檢測故障保險計時器是否業已到時。如果沒有到時,代碼就轉回任務1280並再次開始循環。
另一方面,如果故障保險業已到時,這表示計算機系統將要減少功耗,那麼,如果有效的話,微控制器U2就會在1304處向CPU40生成一SMI。這就能使CPU在假定計算機系統將要在此後立刻斷電的情況執行某些任務。例如CPU40重新計算喚醒警鈴值的更新的分鐘數並將該分鐘數寫至微控制器U2。
如果CPU40不執行其它活動,則在可編程SMI計時器到時之後,微控制器會使計算機系統斷電。CPU40可以通過將適當的值寫至微控制器U2重新啟動SMI計時器,從而能延長該時間間隔。
此後,如果1268處的測試表明電源未提供合格的電力,則微控制器U2在1308處使計算機系統斷電。這包括(i)使電源17停止在±5和±12線處提供穩壓的電力;(ii)使通信中斷無效,這是因為CPU40即將掉電;(iii)將輸出埠(除ON埠)置為HIGH以使它們的功耗減至最低(在這種狀態下,微控制器U2仍可讀取SWITCH,EXT_RING、EXT_WAKEUP等);(iV)設置斷電變量以使得其餘的例程知道已切斷了通向計算機系統的電力;以及(V)將開關的狀態轉換成斷開/釋放狀態,從而下一次按下按鍵將接通計算機系統。
此後,代碼轉回至1280並開始再次循環,以等待振鈴、等待按下開關、等待BIOS命令該代碼喚醒計算機系統或等待喚醒警鈴的分鐘數到時。系統軟體業已說明了本發明之計算機系統10的硬體方面,以下說明其代碼方面。
參照圖8,它顯示了增加功耗例程的概況。當CPU轉至復位矢量(Reset Vector)所指示的這一代碼並執行該代碼時,上述例程就在200處開始執行。每當CPU加電並且每當復位硬體信號復位了CPU或當通過轉至上述復位矢量所指示的代碼而執行復位指令時,上述情況就會出現。這種復位過程在本技術中是周知的。
首先,增加功耗例程的流程取決於為什麼要使計算機系統增加功耗。正如圖11所要詳細說明的那樣,計算機系統可能因節電或熄滅而要增加功耗。這樣,使計算機系統保存在通電狀態是不適合的。所以,增加功耗例程首先在940處確定計算機系統是否應處於通電狀態。如果計算機系統不恰當地增加功耗,那麼,CPU40就在942處命令微控制器U2使電源停止向計算機系統提供穩壓的電力。
在確定計算機系統是否仍處於加電狀態所進行的一種測試是在計算機系統響應微控制器認為是振鈴而使系統加電的情況下確認電話線正在振鈴。具體地說,在使計算機系統增加功耗之後,如果響應振鈴而喚醒計算機系統,則在計算機系統等待硬碟驅動器31內的硬碟起轉時,CPU40會查詢已完全加電的數據機900或920是否也檢查到了振鈴信號。如果未檢測到振鈴信號,系統就會減少功耗。如果數據機900或902也檢測到了振鈴信號,則計算機系統使引導過程延續。
假定計算機系統處於加電狀態,則從總體上說加電例程的流程取決於計算機系統是處於關機狀態156還是處於掛起狀態154。即在CMOS NVRAM96內清除還是設置了掛起狀態。如202處所示,計算機系統通過非易失性CMOS存儲器96讀取掛起標誌來確定是處於關機狀態156還是處於掛起狀態154。當計算機系統離開正常操作狀態150到達關機狀態156或掛起狀態154時,每個例程都或者設置或者清除NVRAM96中的掛起標誌。如果在NVRAM96中設置了掛起標誌,則計算機系統10是處於掛起狀態154,並且將計算機系統10的狀態存儲到固定存儲器31內。另一方面,如果在NVRAM96內清除了掛起標誌,則計算機系統10是處於關機狀態156,並且不將計算機系統10的狀態存儲到固定盤存儲器31內。這樣,如果在NVRAM96內設置了掛起狀態,則計算機系統就會執行「正常」的引導例程,如任務204-210所示。如204處所示,第一項任務是通電自檢(POST),這將在伴隨圖11中的文字中給予詳細的說明,從POST返回之後,CPU40調用PBOOT例程以加載作業系統,如206處所示。
PBOOT例程是一種在IBM計算機上運行的典型例程,但略有變化,這將下文中予以說明,PBOOT確定從哪裡(是從硬碟驅動器31還是從軟盤驅動器內的磁碟上)引導並加載作業系統,而作業系統則按CONFIG.SYS的指令去分析和實現系統的變化並最終執行AUTOEXEC.BAT批處理文件。PBOOT例程在本技術中是周知的。OS加載APM設備驅動程序,該驅動程序向BIOS查詢APM是否認識該BIOS。如果是這樣的話,BIOS APM例程和OS APM例程進行信號交換,此後共同提供本文所述的各種功能。如210處所示,作業系統根據用戶的指示不定地執行代碼。但是,向APM報告管理例程的結果是APM BIOS和APM OS使得管理例程與正在運行的程序「並行」地執行,如212處所示。也就是說,計算機系統10是時間多路復用式的多任務系統,並且可周期性地運行APM Get Event,從而能周期性地運行管理例程。最終的結果是,約每秒鐘執行管理例程一次。圖9中的文字將詳細說明管理例程。正常的引導例程204-210結果之後,計算機系統10處於正常操作狀態150,如伴隨圖4的文字所述。
參照任務202,如果在NVRAM96內設置了掛起標誌,則將系統狀態保存至硬碟驅動器31,並且計算機系統10執行繼續引導例程,如214-220所示。首先,計算機系統執行簡化的POST,如214處所示。伴隨圖11的文字將詳細說明簡化的POST。在簡化的POST之後,計算機系統調用繼續例程,如216處所示。伴隨圖12的文字將詳細說明繼續例程。這裡只說明繼續例程將計算機機系統10的狀態恢復成掛起之前的配置就夠了。與任務204-210所示的正常引導例程不同,繼續引導例程不必向APM API報告存在有管理例程,這是因為,APM例程必須運行才能使系統掛起,並且,在恢復系統狀態時,APM被裝回內存。這樣,在繼續例程完成恢復計算機系統10的狀態時,APM已處於適當的位置並以與所恢復的代碼相「並行」地運行,如212和210處所示。繼續引導例程214-220結束之後,計算機系統10處於正常的操作狀態150,如伴隨圖4的文字所示。因此,執行了正常的引導例程204-210或繼續引導例程214-220之後,計算機系統10會處於正常的操作狀態150。
圖9是顯示管理例程詳細內容的流程圖,該管理例程在「GetEvent」過程中約每秒鐘都由APM所調用。不同的作業系統以不同的頻率Get Event。
管理例程始於圖9中的222處。以下內容假定計算機系統10始於正常的操作狀態150。第一項任務是在224處測試用戶是否按下了開關21。正如與圖6A和圖7有關的內容所詳細說明的那樣,通過CPU40查詢微控制器而測試開關21。
如果任務224處的測試表明用戶按下了開關21,則管理例程在950處繼續確定是否先前向OS中的APM設備驅動程序發出了掛起請求。
如果任務950處的測試表明還未將掛起請求發送給APM驅動程序,則管理例程在226處向OS的APM設備驅動程序發出「掛起請求」,然後在228處返回至APM驅動程序。APM驅動程序響應連接「掛起請求」的APM返回代碼而廣播即將進行的掛起,從而APM可識別的設備可以執行任何必要的系統任務(如使硬碟同步等),然後,APM驅動程序發出「掛起命令」,該命令使得APM BIOS路徑選擇例程調用掛起例程。與圖10有關的內容將說明掛起例程。掛起例程基本上使計算機系統10離開正常操作狀態150並進入掛起狀態154,而且可將控制權在若干條指令(如果計算機系統尚未準備好掛起)或若干分鐘、若干小時、若干天、若干周或若干年(如果計算機被掛起並且被繼續)之後交還給管理例程。無論是掛起程序在沒有掛起的情況下返回還是在完成掛起和繼續之後返回,掛起程序總是會設置「正常繼續」的APM返回代碼。
通常在任務224處未按下開關21,因而管理例程會轉至任務952以確定是否設置了臨界掛起標誌。同樣,如果先前向OS中的APM驅動程序發送了掛起請求,則管理例程這時也會轉至任務952以確定是否設置了臨界掛起標誌。如果設置了臨界掛起標誌,則管理例程會繼續在954處測試是否先前向APM驅動程序發出了臨界掛起請求。
如果未向APM驅動程序發出臨界掛起請求,則管理例程在956處引發臨界掛起請求APM返回代碼,然後在958處返回至APM驅動程序。APM驅動程序響應臨界掛起請求而在不廣播即將進行掛起的情況下立即掛起計算機系統,所以,APM所認識的設備不能執行各自的預掛起任務。
如果在952處未設置臨界掛起標誌或者在954處已向OS中的APM驅動程序發送了臨界掛起請求,則管理例程在957處確定掛起未決是否超過15秒。如果是這樣的話,管理例程在958處設置臨界掛起標誌,從而在下一次APM Get Event過程中進行任務954處的測試。
此後或者如果掛起未決不超過15秒,管理例程就在959處檢查掛起是否是未決的。如果是這樣的話,CPU40就在960處使微控制器U2重新啟動(復位)故障保險計時器以及APM故障掛起計時器。
此後或者如果掛起不是未決的,則管理例程轉至任務230以確定計算機系統是否剛被繼續。如果調用了掛起例程,那麼,不管掛起例程是在沒有掛起的情況下返回,還是在完成掛起與繼續之後返回,計算機系統認為自己剛剛繼續。在230處測試這種繼續,並且,如果計算機系統剛剛繼續(或者因DMA或文件活動未執行掛起),則在232處發布APM返回代碼「正常繼續」並在234處返回至APM。據此,APM OS驅動程序更新系統時鐘以及在暫停期間可能變為失去時效的其它值。
通常,計算機系統10不是剛剛繼續的,因而管理例程轉至任務236以測試任何用戶活動。在任務236處測試三種類型的用戶活動硬文件31的活動、鍵盤12的活動以及滑鼠器13的活動。每當有APM Get Event時,管理程序都作以下工作從硬碟驅動器31讀取用於硬文件磁頭、柱面和扇區的值;查詢微控制器U2是否在滑鼠器中斷線或鍵盤中斷線上存在有表示用戶活動的活動;以及從實時時鐘98中讀取分鐘數值,該數值在0分至59分的範圍內並在每小時開始時返回為0分。暫時將硬碟驅動器的三個活動變量(磁頭、柱面以及扇區)以及上述分鐘數值存儲起來。然後比較這三個硬碟驅動器活動變量和來自先前Get Event所保存的硬碟驅動器活動變量。如果當前的三個硬碟驅動器值與來自先前Get Event的值相同並且如果在滑鼠器中斷或鍵盤中斷方面沒有活動,則就是不存在有用戶的活動。如果所述硬碟驅動器的值是不相同的,或者在滑鼠器中斷或鍵盤中斷方面已存在有活動,那麼,就是有了用戶的活動,因而將當前的硬碟驅動器活動變量保存起來以便用來與下次Get Event過程中所讀取的值作比較。
上述活動檢測方案是在CPU中運行一個例程以確定硬碟驅動器的活動,並且只監控兩個硬體中斷的活動。另外,也可以按硬體方式專門監控活動。例如,可以監控所有16條硬體中斷線的活動。
如果存在有活動,則管理例程在238處通過測試待機標誌來確定計算機系統10是否處於待機狀態152。如果設置了待機標誌,這表示計算機系統10處於待機狀態152,那麼,管理例程就在240處退出待機狀態152並進入正常操作狀態150。管理例程通過使在進入待機狀態152時減少功耗的設備增加功耗而退出待機狀態152,如圖18所示。簡要地說,當計算機系統退出待機狀態152時,管理例程作下列工作恢復視頻信號;使硬碟驅動器31內的硬碟起轉;恢復系統時鐘;使APM CPU空調用無效,從而使得來自APM驅動程序的CPU空調用不再使CPU40停止;以及清除指示計算機系統10處於待機狀態152的標誌。
此外,如果存在有活動,則還將來自實時時鐘98的分鐘數值保存起來以便用來與後續的Get Events過程中所讀取的分鐘數值作比較。保存當前分鐘數值實際上是在241處復位不活動性待機計時器和不活動性掛起計時器。在正常使用過程中,存在有用戶的活動,並且,管理例程會在242處設置「No Event」(無事件)APM返回代碼並在243處返回至APM調用代碼。APM響應「NoEvent」返回代碼而不調用任何例程。
如果任務236處的測試表明不存在有用戶的活動,則管理例程分別在245和247處測試不活動性待機計時器以及不活動性掛起計時器是否到時。如果計算機系統10處於待機狀態152,則不檢查不活動待機計時器的到時情況,相反,在任務244處跳過上述測試。
通過從所保存的分鐘數值中減去當前的分鐘數值以獲得與自從有用戶活動以來的分鐘數值相對應的值,從而可以檢查上述兩個計時器的到時情況。所說的值在245處與不活動待機暫停值作比較,並在247處與不活動掛起暫停值作比較。上述兩個暫停值可由用戶選擇並且能被設置成使計算機系統因兩個計時器中的一個到時而不會進入待機狀態152,不會進入掛起狀態154,或者不會進入待機狀態152中掛起狀態154。將上述任一暫停值設置為零(0)表示相應的計時器不會到時。
如果自從最近的用戶活動以來的分鐘數等於或大於不活動待機暫停值,則管理例程會在246處使計算機系統10進入待機狀態152。如果不活動的待機計時器尚未到時,則管理程序在247處測試不活動掛起計時器的到時情況。另一方面,如果不活動待機計時器業已到時,則管理例程通過使某些組件處於各自的低功率方式而使得計算機系統10進入待機狀態152,如圖18所示。簡要地說,在所述的最佳實施例中,管理例程做下列工作使視頻信號不顯示;使硬碟驅動器31中的硬碟停轉;減慢系統時鐘;使APM CPU空調用有效,因而來自APM驅動程序的CPU空調用會中止CPU40;以及設置表示計算機系統10處於待機狀態152的標誌。在使計算機系統10進入待機狀態152之後,管理例程在247處測試不活動掛起計時器的到時情況。
管理例程在247處測試不活動掛起計時器是否業已到時。如果自從最近的用戶活動以來的分鐘數等於或大於不活動掛起的暫停值,則管理例程在248處設置「掛起請求」APM返回代碼,然後在243處返回至APM。正如以上與任務226有關的內容所說明的那樣,APM響應設置「掛起請求」APM返回代碼而執行任何必要的系統任務,然後調用掛起例程。掛起例程將在與圖10有關的內容中更全面地預以說明,簡要地說,掛起例程使計算機系統10離開正常操作狀態150並進入掛起狀態154。正如與任務226有關的內容所說明的那樣,掛起例程無論是否使計算機系統10掛起的情況下都能將控制權交還給管理例程。另一方面,如果不活動掛起計時器尚未到時,則管理例程在242處設置APM返回代碼「No Event」並在243處返回APM調用代碼。
儘管最經常的是將APM返回代碼「No Event」返回給APM,但也可以使各種其它事件返回給APM。然而,對於每個APM GetEvent來說,只能指定一個APM返回代碼。例如,在進入待機狀態152之後,將「No Event」返回給APM。在離開掛起狀態154之後,將APM返回代碼「Normal Resume」(正常繼續)返回給APM。為APM而排隊的特定報文取決於計算機系統的精確特徵。管理例程也可以返回APM返回代碼「Normal Resume」或「Suspend Request」。
參照圖9B,它顯示了APM處理最近請求例程(APMWorking On Last Request Routine),此例程始於916處。BIOSAPM例程響應所發出的APM處理最近請求(APM Working OnLast Request)而在962處重新啟動微控制器U2中的APM故障掛起計時器以及故障保險計時器、在963處重新啟動15秒的掛起未決計時器,以便在OS APM等待計算機為掛起作適當準備時阻止發出臨界掛起請求並且在964處返回。
參照圖9C,它顯示了APM拒絕最近請求例程(APM RejectLast Request Routine),此例程始於965處。BIOS APM響應所發出的APM拒絕最近請求(APM Reject Last Request)而在966處重新啟動微控制器U2內的APM故障掛起計時器以及故障保險計時器、在967處設置臨界掛起標誌以便強制立刻掛起並在968處返回。
利用對掛起例程的認識可以更好地理解增加功耗和繼續例程。所以,應認識到最好按下列次序檢驗對APM BIOS例程的說明對本發明加電例程的概略說明(如以上圖8所述)、對管理例程的詳細說明(圖9)、對本發明掛起例程的詳細說明(圖10)、對本發明增加功耗過程的詳細說明(圖11)、對本發明繼續例程的詳細說明(圖12)、對保存CPU狀態例程的詳細說明(圖13)、對恢復CPU狀態例程的詳細說明(圖14)以及對保存8259狀態例程的詳細說明(圖15)。
應該認識到,雖然因多數例程是相互作用並且掛起/繼續過程就是一種連續的循環操作,因而對本發明之計算機系統10的任何說明都略微有些循環,但是,最有幫助的還是在引導例程(圖11)或繼續例程(圖12)之前說明掛起例程(圖10)。參照圖10,它顯示了掛起例程的流程圖。回憶一下,在執行了正常引導例程204-210或繼續引導例程214-220之後,計算機系統10處於正常操作狀態150。而且,如以上與圖8有關的內容所說明的那樣,無論是正常引導計算機系統204-210還是繼續引導計算機系統214-220,在這兩個例程中任何一個例程結束之後,APM OS驅動程序都會認識諸如管理例程之類的APM BIOS例程,如圖8所示。因此,APM約每一秒鐘都會輪詢管理例程。
圖10顯示了掛起例程,該例程始於250處。APM響應管理例程向APM返回APM返回代碼「Suspend Request」而調用掛起例程。此外,當計算機系統執行如與圖17和圖18有關的內容所詳細說明的檢查點(Checkkpoint)時,調用並部分地執行掛起例程。首先,掛起例程的流程在970處取決於CPU40是否是帶有SMI的S部件。如果是這樣話,CPU40在972處使微控制器U2給CPU40生成一SMI。正如本技術的專家所周知的那樣,CPU40內的微碼會在974處將CPU40的狀態保存至E000H段的數據結構內。
另一方面,如果CPU40不是帶有SMI的S部件,則調用保存CPU狀態例程,如252處所示。與圖13有關的內容將會詳細說明保存CPU狀態例程。這裡,只說以下內容就足夠了在初始調用掛起例程時,無論CPU40處於什麼模式,都會按CPU40處於實模式來執行掛起例程的其餘部分,所以能夠在不必擔心產生任何錯誤的情況下執行上述掛起的其餘部分,而所說的錯誤則是由試圖執行容許地址空間之外的指令或試圖執行特權指令而引起的。
保存CPU狀態例程在253處以獨特的方式將程序控制權交還給掛起例程。從保存CPU狀態例程「返回」至掛起例程指的是復位CPU,這將在以下與圖13中任務630和632有關的內容中予以詳細說明。掛起例程的重要細節是業已將CPU寄存器寫至了E000H的數據結構,並且,CPU40當前處於實模式。
在保存CPU狀態例程返回之後,或者中CPU響應SMI而保存了自己的狀態之後,掛起例程繼續在254處確認是否已按下了開關21。如與圖6及圖7有關的內容所說明的那樣測試開關21的接通情況。如果未按下開關,則正在進行的掛起是軟體掛起並在CMOS NVRAM96中設置軟體掛起標誌。這就確保了軟體掛起不會與因開關接通而引起硬體掛起相混淆。所有的軟體掛起都會通過在微控制器U2內設置一二進位位而轉化為硬體掛起。將軟體掛起轉化為硬體掛起之後,接通開關會中止該掛起。
下一步的任務是在E000H段內建立一個堆棧,如262處所示。
建立起堆棧之後,掛起例程在264處檢驗DMA控制器72、磁碟適配器84以及IDE盤控制器86以了解當前是否正在分別進行任何的DMA傳送、軟盤驅動器傳送或硬文件傳送。如果是這樣的話,就不能進行掛起,這是因為,這三種類型所特有的性質會阻止進行令人滿意的掛起。例如,如果正在進行來自硬碟驅動器31的硬文件傳送,則IDE控制器業已讀取了數據,但數據尚未被傳送至系統內存53。CPU無法充分地存取上述數據,所以,如果在硬文件讀操作中間掛起計算機系統,數據就會丟失。因此,如果正在進行上述三種傳送中的任何一種,都推遲掛起直至下一次的APM Get Event,那時,會再一次檢測DMA和軟盤控制器的活動。
因此,必須將在352、260和262處執行的任務顛倒,從而將控制權轉給APM。首先,BIOS從讀/寫變為只讀,如265處所示。這是通過關閉仍包含有投影數據的E000H段而實現的。彈出並恢復在任務262處創建的堆棧。最後,在267處將控制權轉回給APM之前,在266處由恢復CPU狀態例程恢復CPU的狀態。在下一次Get Event期間APM再過約一秒鐘再次輪詢掛起例程。到那時,可能完成了阻止掛起的傳送活動,從而使掛起繼續。
參照任務264,如果當前沒有進行DMA傳送,軟盤驅動器傳送或硬文件傳送,則可以進行掛起。掛起例程在268處繼續。使故障保險計時器連續地遞減計數,當開關21處於斷開/釋放狀態時,故障保險計時器如果到時則會使計算機系統自身關閉。所以,第一項任務就是復位與圖6A和圖19有關的內容所述的故障保險計時器,如268處所示。
然後,在270處保存8042協處理器104的狀態。8042協處理104的寄存器在本技術中是周知的。CPU40可以直接讀取上述寄存器並且這些寄存器的值可以直接寫入E000H的數據結構中。
隨後,在272處保存8259中斷控制器92的狀態。掛起例程調用8259保存狀態例程,在與圖15有關的內容中將詳細說明上述8259保存狀態例程。這裡,只說下列內容就夠了儘管8259中斷控制器92的某些寄存器是只寫的,但8259保存狀態例程能夠確認兩個8259中斷控制器的無名寄存器的內容。該寄存器的值可以直接寫至E000H的數據結構中。
在保存了中斷控制器92的狀態之後,必須將中斷控制器92的配置改變成已知的狀態以使得掛起例程執行各個中斷驅動的任務的正常功能。所以,在274處交換BIOS數據區與矢量表(BIOS data AreasVector Table)。掛起例程將0000H段中的當前狀態BIOS數據區和矢量表的內容拷貝至E000H段中的存儲單元。然後,將已知狀態BIOS數據區和矢量表的內容從E000H段中的數據結構拷貝至0000H段內的存儲單元。在引導例程的任務414中將已知狀態BIOS數據區和矢量表拷貝至E000H段,引導例程如圖11所示並在以下予以說明。最後,將當前狀態BIOS數據區和矢量表從0000H段拷貝至E000H段內的數據結構。當274處的例程結束時,諸如中斷13H(磁碟讀/寫中斷)和中斷10H(視頻存取中斷)之類的所有中斷會象所希望的那樣起作用。
然後,在276處將計時器102的狀態保存起來。該計時器的寄存器在本技術中是周知的。CPU40可以直接讀取所有的這些寄存器,並且,這些寄存器的值可直接寫入E000H的數據結構。在276處還將IDE磁碟控制器86的狀態保存起來。IDE磁碟控制器86的寄存器在本技術中是周知的。CPU40可以直接讀取所有的這些寄存器,並且,這些寄存器的值可直接寫入E000H的數據結構。
下一步是為將系統內存寫至硬碟驅動器31的掛起文件(Suspend File)而做好準備。系統內存包括系統RAM53(它包括主內存和任何擴展內存)以及視頻內存58。這時,部分RAM53可以處於外部高速緩衝存儲器60內。在286處傾瀉CPU的高速緩衝存儲器,這將在以下與圖13有關的內容中予以說明。然後,在286處傾瀉外部高速緩衝存儲器並使該存儲器提高向硬碟31的寫的速度。
在計算機系統10內執行的代碼可能已將IDE控制器86置入了未知的狀態。因此,下一步是在292處將IDE控制器86初始化成已知的狀態。這是通過把值直接寫至IDE控制器86內的寄存器而實現的。
然後,在976處啟動中斷驅動的並行線程以讀取任何數據機的狀態並使該狀態保存至E000H的數據結構中。該例程做以下工作捕捉對應於COMM埠的中斷,而COMM埠則與特定的數據機有關;將命令傳遞給上述數據機以使該數據機順序地傳回該數據機之寄存儲的內容;接收從上述數據機所傳送的寄存器內容;以及將上述寄存器的值保存至E000H的數據結構中。這一例程將一第一命令傳送給數據機,然後以中斷驅動的方式響應,以便接收數據機的應答並響應每個COMM埠的中斷將下一個命令傳遞給數據機,直至保存了所有數據機的寄存器。如果不是作為並行線程運行的,則這一例程給掛起計算機系統所花費的時間增加幾秒鐘(每個數據機為3-5秒,這取決於特定的數據機以及當前的波特率)。由於是中斷驅動的並行線程,所以,如果該例程在已將系統狀態寫至硬碟驅動器31之前結束運行,則該例程不給掛起增加時間。
在上述中斷驅動並行線程的數據機保存例程啟動之後,必須在294處使掛起文件處在硬碟驅動器31的固定盤上。掛起文件的磁頭、扇區和柱面均存儲在CMOS存儲器96中。一旦確定了掛起文件的位置,就讀取該文件的大小與特徵。在所說的最佳實施例中,上述特徵是任意長度的ASCII碼,它表示存在有掛起文件。也可以用其它方法實現所說的特徵,例如使用二進位串,該串具有能在硬文件系統上被隨機查找到的非常低的概率。
取讀了掛起文件的文件大小與特徵之後,下一步就是在296處確認該特徵和文件大小是否是正確的。如果所說的特徵不正確,這表明其它程序已修改了掛起文件,或者如果所說的文件大小是不正確的,這表明掛起文件的大小已被修改過,那麼,掛起例程就在298處調用致命掛起錯誤例程(Fatal Suspend ErrorRoutine),此例程始於圖13的任務652處。如果用戶按下開關17,以退出致命掛起錯誤例程,程序控制權從任務299轉至任務506。
另一方面,如果所說的特徵是正確的並且掛起文件足夠大,則掛起例程開始將計算機系統的狀態寫至內存。
在將計算機系統10的狀態寫至硬碟驅動器31之前,CPU40在297處命令微控制器U2重新啟動(復位)故障保險計時器並查詢微控制器U2以確定是否再次按下了開關21。如果沒有再次按下開關21,則掛起例程繼續。另一方面,如果再次按下了開關21,則中止掛起。可以在掛起例程內的若干點處重新啟動故障保險計時器並測試開關21的接通情況。任務297僅僅是說明性的,這項應用技術中普通的電路設計者能夠確定重新啟動故障保險計時器的次數及其間容許的時間。在故障保險計時器到時以使電源17「關閉」之前,掛起例程應復位故障保險計時器。同樣,應不時檢查一下開關21。如果再度按下開關21,這表示用戶希望中止掛起,那麼,上述代碼應轉至繼續例程中的適當點處以便「不進行掛起」並從部分掛起中恢復。
與此類似,在350處按下Ctrl-Alt-Del鍵會中止掛起。按下Ctrl-Alt-Delete鍵(同時按下Control鍵、Alt鍵和Delete鍵)是復位以IBM BIOS和Intel 80X86系列CPU為基礎的一般計算機系統的周知方法。計算機系統10用本技術中周知的BIOS一號中斷處理程序來處理Ctrl-Alt-Del。計算機系統10在350處帶有略有改變的1號中斷處理程序,該處理程序在352處清除CMOS存儲器96中的掛起標誌並在354處復位時轉至引導例程。
在本發明的計算機系統10中,掛起例程正在運行時按下Ctrl-Alt-Del會使得計算機系統進入關機狀態。這是因為,在開關21接通之後,按下Ctrl-Alt-Del會調用引導例程,而引導例程則會將微控制器U2初始化成這樣的狀態故障保險計時器業已到時且開關仍處於斷開/釋放狀態。因此,在處於掛起例程時按下Ctrl-Alt-Del會使計算機系統10進入關機狀態。
參照任務300,再次使掛起文件處在硬碟驅動器31上,將特徵短語在300處寫至掛起文件的第一字節。然後,在302處將E000H段中的整個64K字節的數據寫入掛起文件。E000H的上述64K拷貝實際上只是一個位置保留區並且將會在掛起例程結束時重寫這一相同位置。
然後,在303處將視頻控制器56的狀態保存起來。視頻控制器56的寄存器在本技術中是周知的。CPU40可以直接讀取上述所有的寄存器,而且,這些寄存器的值可直接寫至E000H中的數據結構內。
隨後,將系統內存寫至掛起文件,這是由一雙緩衝區系統來實現的,該雙緩衝區系統從系統內存中讀取數據、並壓縮該數據且將其寫至E000H段,最後將已壓縮的數據從E000H段寫至掛起文件。在一時間多路復用結構中有兩個例程在工作一個壓縮數據並寫至E000H段,另一個寫至掛起文件。前者在前臺運行,後者則是在後臺運行的中斷驅動例程。很明顯,由於只有一個CPU40,因此在給定的時間內只能執行一個例程,但是,由於後一個例程是由中斷驅動的,所以該例程在需要時可中斷前一個例程的運行,使向掛起文件傳遞數據的速度最佳。上述兩個緩衝區的每一個都為8K字節長,這被認為是可使向硬碟驅動器31的傳遞時間最佳化。
上述過程始於304,它讀取足夠的數據並進行壓縮且寫至E000H段以填充第一個8K的緩衝區。利用持續長度編碼法壓縮所說的數據,但是,也可以使用任何適當的壓縮法。這時,在306處啟動總體上在標號307處所示的寫自緩衝區例程(Write fromBuffer Routine)。寫自緩衝區例程307是一種在後臺運行的中斷驅動例程,包括任務308至任務310。總體上在標號311處所示的壓縮例程包括任務312至任務318並且是一種前臺例程。首先,寫自緩衝區例程307在308處將剛被任務304所填寫的緩衝區寫至掛起文件。當寫自緩衝區例程307將緩衝區的內容寫至掛起文件時,壓縮例程311在312處繼續從系統內存中讀取後面的字節並壓縮它們且將壓縮後的數據寫至前述兩個8K緩衝區中的另一個內。一旦壓縮例程311用壓縮後的數據填滿了上述緩衝區,下一步就在314處確定是否已壓縮了整個系統內存。
IDE控制器86不能很快地將數據寫至硬碟驅動器。因此,壓縮例程311總是會在寫自緩衝區例程307完成將8K緩衝區寫至硬碟驅動器31之前完成填滿未被寫至硬碟驅動器31的8K緩衝區。所以,壓縮例程311必須等待寫自緩衝區例程307完成將緩衝區寫至硬碟驅動器31。如果壓縮例程311尚未完成壓縮所有的系統內存並對它們進行寫操作,則壓縮例程311在316處等待寫自緩衝區例程307。壓縮例程311和寫自緩衝區例程307通過一組標誌而相互通信。寫自緩衝區例程307在完成將當前緩衝區寫至掛起文件時會隨後轉換該緩衝區的標誌,以便向壓縮例程311表明它可以用壓縮後的數據填寫剛被寫至掛起文件的緩衝區。然後,在309處復位故障保險計時器C2並以與任務297有關的內容所述的方式檢查開關21的接通事件。
然後寫自緩衝區例程307在310處確定剛寫至掛起文件的緩衝區是否是最後一個要寫的緩衝區。如果不是,則寫自緩衝區例程將剛由壓縮例程311所填寫的緩衝區寫至掛起文件。同時,壓縮例程311通過檢驗緩衝區標誌而確定是否為另外壓縮的系統內存準備好了緩衝區。也就是說,壓縮例程在316處等待直至寫自緩衝區例程處理完當前的緩衝區,這時在312處繼續壓縮循環。請注意,如果支持線性幀緩衝技術,則可壓縮視頻內存58,但對VESA頁存取來說卻不壓縮視頻內存58。相反,視頻控制器56利用VESA調用讀取VESA頁存取視頻內存並且在不用以上詳細說明的雙緩衝區系統進行壓縮的情況下寫VESA頁存取視頻內存。
一旦壓縮例程311完成了壓縮所有系統內存,該例程就會在318處等待寫自緩衝區例程307完成將最後的緩衝區寫至掛起文件。一旦寫自緩衝區例程307結束,該例程就會從310轉至318並不再存在。這時,沒有後臺例程在運行並且主程序在320處繼續。
然後,在任務320處,將DMA部件71(DMA控制器72和中央仲裁器82)、82077軟盤控制器84以及RS-232 UART(通用異步收發器)94的狀態保存起來。這些設備均具有在本技術中周知的寄存器。軟盤控制器84和UART94內的所有寄存器均可由CPU40直接讀取,並且,這些寄存器的值可直接寫至E000H內的數據結構中。DMA部件不帶有可讀寄存器。相反,一般在每次DMA傳送之前都建立起只寫寄存器。為此,如果正在進行DMA傳送,則掛起例程停止掛起。
隨後,掛起例程在978處測試與任務976有關的內容所述的中斷驅動的數據機狀態例程是否結束。如果沒有結束,則掛起例程等待上述數據機狀態例程結束。
應該認識到,一旦計算機系統10進入掛起狀態150,就最好能檢測到對掛起文件的任何修改。例如,對某些人來說,可能會生成一修改過的掛起文件並將該掛起文件傳送至硬碟驅動器31且試圖使計算機系統10恢復成與所保存的狀態不同的狀態。為此,將一偽隨機值放至到E000H段的數據結構中。如328處所示,在中斷驅動的數據機狀態保存例程結束之後,從高速計時器102之一中讀出一16位的時標。然後將該時標寫至E000H段的數據結構中。
然後,通過在不考慮進位的情況下將E000H中的各個16位字加在一起而計算出用於整個E000H段的16位校驗和。該校驗和在330處寫至E000H段的數據段中並在332處寫至CMOSNVRAM96中。此後,在334處將所有的工作變量從CPU40寫至E000H段的數據結構中,並且,在336處將整個E000H段從掛起文件的特徵短語之後開始(緊接在該特徵之後)重新寫至掛起文件。然後,在338處設置CMOS NVRAM96內的掛起標誌,以便通知計算機系統10已將該計算機系統的狀態保存到了掛起文件內。
隨後,掛起例程在980判定是否已採用了檢查點。如果是這樣的話,計算機系統就不應降低功耗,反之,計算機系統必須繼續到從剛剛進行的部分掛起中恢復的程度。所以,如果已採用了檢查點,掛起例程在982處轉至繼續例程的任務484處,然後,繼續例程進行部分的繼續。
如未採用檢查點,則CPU40通過命令微控制器U2將ON信號設置成邏輯0而「關閉」電源,從而使電源17的初級/穩壓部件172停止沿±5和±12線提供穩定的電壓。該電壓要花幾秒鐘的時間才能遞減至約為0,從而給CPU40以時間去執行多條命令。所以,在342處,CPU40在等待電源17所產生的系統電壓減小時會作無限的循環(「旋轉」)直至CPU40停止起作用。
參照圖11,它顯示了引導例程的詳細內容。與圖8有關的內容概述了引導的過程。當CPU40轉至復位矢量(Reset Vector)所指的代碼並執行該代碼時,引導例程就在380處開始。每當CPU40增加功耗並且無論何時CPU40因轉至上述復位矢量所指的代碼時,都會出現上述情況。復位的過程在本技術中是周知的。
第一項任務是在382處測試CPU40並初始化內存控制器46。CPU是由POST例程來測試的。CPU的測試部分確定CPU40是否是帶有SMI的「S」部件。如果是這樣的話,就設置一標誌以指示這一情況。POST例程還初始化內存控制器46。
然後,引導例程在986處測試微控制器U2是否在起作用。為此,CPU順序地讀取電源管理電路106的狀態埠並等待該埠處從HIGH到LOW以及從LOW回到HIGH的轉換。這種轉換說明微控制器U2的心搏正在起作用,所以,CPU40可以在假定微控制器U2按希望的那樣起作用的情況下繼續進行引導過程。
如果CPU在預定的時間如一秒或兩秒內沒有檢測到狀態埠處的轉換,則微控制器U2就不具有心搏,CPU40就會在988處命令第一電路PAL U1復位微控制器U2,如前所述。然後,CPU40在990處再次等待狀態埠處從HIGH到LOW的轉換。如果CPU在一秒或兩秒的時間內又沒有檢測到狀態埠的轉換,則微控制器U2不具有心搏,因而CPU40會於922處在假定微控制器U2處於不能復位的狀態的情況下使本文所述的電源管理特徵無效。
另一方面,如果微控制器U2正在起作用,則CPU40在994處刷新微控制U2內喚醒警鈴值的分鐘數。RTC98的時基要比微控制器U2的時基精確得多。所以,為了在不給微控制器U2增加更精確因而是更昂貴的時基的情況下克服上述局限性,BIOS使上述不太精確的時基與上述更為精確的時基相同步並在每次系統引導時用來自RTC98的更為精確的值更新微控制器U2內喚醒警鈴值的分鐘數。為了做到這一點,CPU40從CMOS存儲器96中讀取警鈴的絕對日期和時間並計算喚醒警鈴值的分鐘數且將該分鐘數寫至微控制器U2。
此後並且如果微控制器U2不起作用從而使所說的電源管理特徵無效,則引導例程在996處確定是否因電源17的加電而引導了計算機系統。最佳的是,總是有交流電加載於電源17的初級/穩壓部件172上,並且,ON#輸入控制著對±5和±12線處的電壓調節。這樣電源17可以不斷向使電源管理電路106通電所需的AUX5供電,並且,電源管理電路106在不轉換交流電的情況下控制電源17。
但是,正如本技術的專家所周知的那樣,某些用戶喜歡用開關式配電板(未顯示)來對計算機系統加電,從而用一個單一的開關接通和斷開整個計算機系統的交流電。這對電源管理電路106來說就存在著問題,因為,微控制器U2和其它設備均被配置成要由AUX5電源線不間斷地供電。所以,計算機系統必須具有能確定它已因接通了交流電而被加電並且相應地活動的方法。
但是,AUX5線還會遇到上述電壓降低和斷電的情況。在出現電壓降低和斷電的情況之後,復位子電路920會復位微控制器U2以防止該微控制器因超出容許電壓而中止。所以,計算機系統必須能進一步確定在降低電壓之後或加載了交流電之後是否喚醒了微控制器。
因此,CPU在996處向微控制器U2查詢有關使電源17接通的事件。微控制器可以返回下列四種應答之一(1)微控制器已被復位,因而使得電源17開始在±5和±12線處提供穩壓的電力;(2)喚醒警鈴的分鐘數到時;(3)在來自光隔離器OPTO1的振鈴輸入或RS-232振鈴輸入處產生了振鈴;以及/或者(4)按下了開關21。諸如調度程序之類的應用程式可以直接從微控制器U2中讀取計算機系統通電的原因,而所說的調度程序則會響應系統增加功耗的原因而運行特定的程序。另外,通過一個或多個BIOS調用也可以成為使計算機增加功耗的原因。
除了可被CPU40復位以外,微控制器U2隻能被復位子電路920所復位,每當AUX5線被加電或者故障,上述電路都會復位微控制器。所以,如果微控制器U2被復位或者微控制器返回了一在997處測試的無效喚醒代碼,則CPU40必須要在998處確定電源是否應繼續在±5和12±線處調節電壓。為此,在CMOSNVRAM內使用了一個標為DEFAULT_ON的標誌。如果設置了該標誌,則電源17應在微控制器U2被復位之後繼續提供穩壓的電力。另一方面,如果未設置DEFAULT_ON,則電源17應在微控制器U2被復位之後停止提供穩壓的電力,所以,CPU40會在1000處命令微控制器U2使電源17停止在±5和±12線處提供穩壓的電力,此後,電壓會花幾秒鐘的時間下降至約為零,從而給CPU40以時間去執行多條命令。因此,CPU40在等待電源17所產生的系統電壓下降時會在1002處執行無限循環(「旋轉」),直至CPU40在1004處停止起作用。如上所述,微控制器U2最好由AUX5線不間斷地供電並連續執行已編程的例程。
此後,如果微控制器在997處返回一有效的喚醒代碼,或者如果雖微控制器U2被復位,但計算機系統仍在998處保持加電狀態,則CPU40會在1004處命令微控制器U2在確認應關閉電源而使電源17停止在±5和±12線處提供穩壓電力之前向CPU40產生一SMI。此外,CPU還在1004處設置CMOS NVRAM內的DEFAULT_ON位,因此,如果斷掉交流電,計算機系統會在重新加載交流電時自己返回接通狀態。
然後,引導例程在1006處執行本技術中專家所周知的FirstPlugPlan Resource Allocation Pass(第一次插入及計劃資源分配)。
隨後,測試影子內存並將BIOS從ROM88拷貝至RAM53的影子內存部分。所執行代碼的流程取決於是否在CMOSNVRAM96內設置了掛起標誌。如果設置了掛起標誌,則計算機系統10處於掛起狀態150,因而應將計算機系統10恢復至它被掛起時所處的狀態。對E000H和F000H段內的系統RAM53進行簡化的測試。為了減少計算機系統繼續所花費的時間,只檢查上述內存的適當大小並將該內存置零(將0000H寫至各個存儲單元)。
另一方面,如果在CMOS NVRAM96中清除了掛起標誌,則對E000H和F000H段中的系統RAM53作標準的深層次的內存測試,包括(1)粘接位(sticky-bit)測試;(2)雙位內存測試;以及(3)交叉地址線測試。這些測試在本技術中都是周知的。
在測試了E000H和F000H段之後,可投影BIOS,這包括將ROM BIOS88拷貝至系統RAM53以及將內存控制器配置成能夠執行來自RAM的BIOS。投影BIOS可以增加系統的速度,並且能提高系統的效率,這是因為,正在運行來自較快的系統RAM53的BIOS(通常存取時間為80毫微秒)而不是來自較慢的ROM88的BIOS(通常存取時間為250毫微秒)。投影BIOS包括將BIOS拷貝程序加載至內存低區的地址處;將BIOS從ROM88拷貝至系統RAM53的E000H段和F000H段;以及使影子RAM生效。
然後,在384處測試並初始化視頻控制器56同時測試視頻內存。這些測試及初始化工作在本技術中都是周知的。
隨後,引導例程在1008處執行本技術的專家所周知的Second PlugPlan resource allocation pas(第二次插入及計劃資源分配)。
所執行代碼的流程在386處取決於是否在CMOS NVRAM96內設置了掛起標誌。如果設置了掛起標誌,則象任務383那樣只檢查其餘的系統RAM53的大小,然後將該RAM置零。但是,如果清除了CMOS NVRAM96內的掛起標誌,則在398處用與任務383有關的內容所說明的三步驟深層次內存測試法來測試其餘的系統RAM53。
測試內存之後,在400處測試並初始化包括8259、UART、8042以及其它設備在內的輔助設備。在408處初始化固定盤控制器。
所執行代碼的流程在409處取決於是否在CMOS NVRAM96內設置了掛起標誌。如果設置了掛起標誌,這表示在最近斷電時已成功地保存了系統的狀態,那樣,引導例程就會跳過對硬碟驅動器控制器86和硬碟驅動器31的測試。另一方面,如果在CMOS NVRAM96內清除了掛起標誌,這表示在最近斷電時未保存系統的狀態,那麼,正如在本技術中所周知的那樣,引導例程在任務410處對固定盤控制器86以及硬碟驅動器31作完全的測試。
然後,在412處測試並初始化軟盤驅動器控制器84。
這時,所有的設備均被初始化並且矢量均指向已知的存儲單元,因此所有的中斷例程都會象所希望的那樣工作。所以,引導例程會在414處對BIOS數據區和矢量表進行快照,即將BIOS數據區和矢量表的拷貝寫至E000H段的數據結構內。掛起例程在任務274處利用BIOS數據區和矢量表的上述拷貝將計算機系統10置為已知的狀態,同時,所有的中斷均能象所希望的那樣工作。
然後,在416處如在本技術中所周知那樣「掃描進」並初始化BIOS的任何擴展部分。BIOS的擴展部分是BIOS代碼的程序塊,該程序塊是由諸如網絡適配器之類的外部適配器增加給計算機系統。BIOS的擴展部分一般位於ISA總線76的C000H和D000H段內並且具有相關的「特徵」以標識該BIOS擴展部分自身。如果檢測到BIOS的擴展部分,就檢查其長度並計算和檢查校驗和。如果上述特徵、長度和校驗和都表明存在有有效的BIOS擴展部分,則程序控制權轉至位於上述特徵後面三個字節處的指令,並且,BIOS擴展部分可執行諸如初始化外圍適配器之類的任何所需要的任務。一旦上述BIOS擴展部分結束執行,控制權會返回至引導例程,而引導例程則會搜索其它的BIOS擴展部分。與上述BIOS擴展部分一樣處理任何其它的BIOS擴展部分。如果沒有檢測到其它的BIOS擴展部分,則引導例程會轉至任務417。
然後,CPU在1010處讀取系統加電的時間增量並將該增量加至存儲在硬碟驅動器31特定分區內的值,同時,將新的加電的總時間重新寫回硬碟驅動器31的特定分區內。正如在本文其它地方將要說明的那樣,微控制器U2在使計算機系統降低功耗之前會通過確立SMI線而中斷CPU40。因此,CPU會在假定計算機系統即將減少功耗的情況下執行某些特定的任務。最佳的是,這包括將某些信息(如加電時間計時器所測量到的經過時間)加電增量等保存至CMOS NVRAM。此後,CPU40允許微控制器U2使計算機系統減少功耗。
引導例程在417處搜索硬碟驅動器31上特別為掛起文件而分配的分區。如果在分區表內找到帶有PS/1標識符「FE」的分區或帶有標識符「84」的冬眠分區,並且該分區足以容納用於所述特定計算機系統的掛起文件,那麼,就將該分區用於掛起文件。因此,將掛起文件的特徵(Suspend File Signature)寫至上述區域的第一字節處,並將該區域的起始磁頭、扇區以柱面寫至CMOSNVRAM96。
然後所執行代碼的流程在418處做分支轉移,這取決於是否在CMOS NVRAM96中設置了掛起標誌。如果清除了掛起標誌,則引導例程在420處將控制權轉交給PBOOT例程。PBOOT在本技術中是周知的,它負責從軟盤或硬碟驅動器31上加載作業系統(OS)以及命令解釋程序。如果在任務417處未找到用於掛起文件的分區,則OS執行與圖16有關內容所說明的OS專用驅動程序,該驅動程序檢查是否找到了一個分區,並且,如果沒有,則在FAT(文件分配表)中分配一由連續扇區構成的文件(如果必要的話,對一區域去除分段),將所說的特徵寫至掛起文件的第一個字節並將掛起文件的起始磁頭、扇區以柱面寫至CMOS NVRAM96。
不管在何時分配掛起文件,該文件均應是連續的扇區,從而在掛起和繼續期間能夠分別快速地寫至磁碟以及快速地從磁碟中讀出。
然後,OS按在CONFIG.SYS文件中所找到的指令配置計算機系統。最後,OS運行AUTOEXEC.BAT文件,該文件最終將執行控制權返回給作業系統。如果在CMOS NVRAM96中清除了掛起標誌,這表明最近斷電時未保存計算機系統的狀態,那麼,就忽略RESUME.EXE,在與任務421有關的內容將詳細說明RESUME.EXE。
參照任務418,如果在CMOS NVRAM96中設置了掛起標誌,這表示最近斷電時保存了計算機系統的狀態,那麼,所執行代碼的流程就會在419處作分支轉移,這取決於是否在CMOSNVRAM96內設置了重新初始化適配器標誌(ReinitializeAdapters Flag)。如果設置了重新初始化適配器標誌,則引導例程在421處將控制權交給PBOOT例程。同通常的PBOOT例程一樣,本發明的PBOOT加載OS,OS則根據在CONFIG.SYS和AUTOEXEC.BAT文件中找到的命令配置計算機系統,此外,還加載驅動程序並按本技術中所周知的方式配置計算機系統。
CONFIG.SYS和AUTOEXEC.BAT中的命令可以初始化計算機系統中的適配器卡。本申請假定存在有三種類型的適配器卡I型適配器不需要初始化;II型適配器需要初始化但被BIOS擴展部分或被每個CONFIG.SYS或AUTOEXEC.BAT所加載的驅動程序設置成周知的工作狀態;III型適配器由計算機系統執行的代碼所修改。可以掛起和恢復包括I型及II型適配器的計算機系統,但不能恢復包括含有多種網絡適配器的III型適配器的計算機系統,除非該適配器卡帶有相關的APM可認識的設備驅動程序,該驅動程序在諸如系統斷電之類的情況發生之後可重新初始化上述適配器。系統可以掛起帶有APM可認識的設備驅動程序的III型適配器卡。
在本實施例中,將文件RESUME.EXE加到AUTOEXEC.BAT文件內,RESUME.EXT負責將程序控制權從OS傳送給繼續例程。OS在任務420忽略RESUME.EXE的存在,但OS在任務421卻執行RESUME.EXE,在OS從CONFIG.SYS和AUTOEXEC.BAT加載的設備驅動器結束初始化II型適配器之後,RESUME.EXE將控制權轉給繼續例程。
參照任務419,如果在CMOS96中清除了重新初始化適配器標誌,則OS通過RESUME.EXE將執行控制權轉給繼續例程。繼續例程從硬碟驅動器上的掛起文件中恢復系統狀態,繼續例程將在與圖12有關的內容中予以詳細說明。
參照圖12,它顯示了從任務450至任務530的繼續例程的詳細內容。首先,在451處測試CPU,如果CPU帶有SMI,則產生一CPU繼續SMI,該SMI將CPU置為SMM(系統管理監控)模式並轉至任務454處的代碼。如果CPU不帶有SMI,則停止繼續,其中,進行復位,復位處理程序轉至任務454處的代碼。在配置進程中,可能會將BIOS數據區和矢量表修改成未知的狀態。所以,基本的BIOS例程可能不象希望的那樣起作用。因此,繼續例程會在454處使E000H段成為可讀/寫的並且在456處調用交換BIOS數據區和矢量表例程(Swap BIOS Data AreaVectorTable Routine)。該例程將在任務414處拷貝至E000H段的已知且適當的BIOS數據區和矢量表與當前在0000H段內活動的經過修改的BIOS數據區和矢量表作交換。當上述交換例程結束時,上述已知的BIOS數據區和矢量表在E000H段內是活動的,而上述經過修改的BIOS數據區和矢量表則處在0000H段內,並且,BIOS例程會象所希望的那樣起作用。
然後,繼續例程在458處使除了支持鍵盤和硬碟驅動器的中斷以外的所有中斷都無效。此後,繼續例程在460處確定掛起文件在硬碟驅動器31上的位置並讀取文件的長度和特徵,該特徵如上所述是一用於掛起文件的多字節標識符。所執行代碼的流程隨後在462處作分支轉移,這取決於掛起文件是否有正確的長度和特徵。如果掛起文件不具有正確的長度和特徵,則掛起例程在464處清除CMOS內的掛起標誌,程序控制權在466處轉給處於復位矢量(Reset Vector)所指向位置處的代碼,從而使得計算機系統就象從未掛起那樣進行引導。另一方面,如果掛起文件具有正確的長度和特徵,則繼續例程在468處繼續,它通過將位於掛起文件內上述特徵之後的64K塊(掛起文件對應於E000H段信息的部分)讀至1000H段內而使得計算機系統繼續。
隨後,在470處計算位於1000H段內的上述數據塊的校驗和,並在472處從CMOS非易失性存儲器96中讀出先前存儲的校驗和,引後,所執行代碼的流程在474處作分支轉移,這取決於任務470處所計算出的校驗和是否與任務330處所計算出的校驗和相同。如果任務470處所計算出的校驗和不同於任務330處所計算出的校驗和,則掛起文件因某種原因存在有問題(例如它可能被改變了等等),因而控制權轉至任務464處,該任務如與任務464和466有關的內容所說明的那樣清除掛起標誌並復位計算機系統。如果任務470處所計算出的校驗和與任務330處所計算出的校驗和相同,則假定掛起文件與掛起例程所寫的掛起文件是同一個文件,因而在476處將1000H段內的數據拷貝至E000H段。
繼續例程在478處將一特定的信號屏面寫至屏幕,該信號屏面用於通知用戶計算機系統正在恢復以及用戶應按下Cltrl-Alt-Del鍵以中止繼續。同掛起例程一樣,按下Ctrl-Alt-Del鍵會在526處清除掛起標誌,並在528處重新引導計算機系統。因此,在按下Ctrl-Alt-Del鍵且繼續例程正在運行時會重新正常引導計算機系統。
然後,在480和482處通過將來自E000H數據結構的值分別寫至82077軟盤控制器的寄存器以及DMA部件的寄存器中而恢復82077軟盤控制器84和DMA部件71。
隨後,在1020處啟動中斷驅動的並行線程,該線程用於從E000H的數據結構中恢復任何數據機的狀態。同任務976處的例程一樣,數據機恢復例程做以下工作捕獲與涉及該特定數據機的COMM埠相對應的中斷;讀取來自E000H數據結構的值;將命令與值傳遞給數據機以使該數據機恢復其中的寄存器。上述例程將一第一命令傳遞給數據機然後以中斷驅動的方式進行應答,以便接收數據機的應答並響應各COMM埠的中斷而將下一個值傳遞給數據機,直至恢復了所有的數據機的寄存器。同數據機保存例程一樣,如果上述例程不是作為並行線程執行的,則該例程會在它要使計算機系統繼續所花費的時間上增加幾秒鐘。作為一種中斷驅動的並行線程,如果上述例程在從硬碟驅動器31中讀出系統狀態之前全部執行了,則該例程不給前述繼續工作增加時間。
當從任務486到500處的中斷驅動的並行線程數據機恢復例程開始之後,利用一雙緩衝區例程從掛起文件中恢復系統內存,上述雙緩衝區例程同與掛起例程中任務304至318有關的內容所說明的例程相類似。上述雙緩衝區系統從掛起文件中讀取壓縮數據,將該壓縮數據寫至E000H段內,對壓縮的數據進行解壓縮並寫至系統內存。有兩個例程以時間多路復用的方式進行工作一個從掛起文件中讀取數據並將數據寫至E000H段內;另一個對上述數據進行解壓縮並將解壓縮後的數據寫至系統內存。後一個例程在前臺運行,前一個例程則是在後臺運行的中斷驅動的例程。很明顯,由於只有一個CPU,所以在給定的時間內只能執行一個例程,但是,由於上述前一個例程是中斷驅動的,所以它可以根據需要中斷後一個例程的執行,從而使來自掛起文件的數據傳送的速度最佳化。上述兩個緩衝區均為8K字節長,這認為能使傳送時間最佳化。
上述進程始於486處,它從掛起文件中讀取數據並將足夠的數據寫至E000H段以填充第一個8K的緩衝區。這時,在306處啟動讀自緩衝區例程(Read from Buffer Routine),該例程總體上用標號489表示。讀自緩衝區例程489是一中斷驅動的例程,它在後臺運行並包括任務490-492。總體上用標號493所表示的解壓縮例程(Decompression Routine)包括任務494-498並且是前臺例程。首先,讀自緩衝區例程489在490處開始讀取掛起文件的下一個8K數據並將其寫入現在為當前緩衝區的另一個緩衝區中。當讀自緩衝區例程489從掛起文件中讀取下一個8K數據並將其寫入當前緩衝區中時,解壓縮例程493在494處讀取由任務486所填寫緩衝區、對壓縮的數據進行解壓縮並將已解壓縮的數據寫至系統內存。一旦解壓縮例程493對上述緩衝區內的所有數據進行了解壓縮,則下一步就是在496處確定是否已對整個的系統內存進行了解壓縮。
IDE控制器86不能很快地從硬碟驅動器31中讀取數據。因此,解壓縮例程493總是在讀自緩衝區例程489結束將數據從硬碟驅動器31中讀進當前緩衝區之前結束對未寫至硬碟驅動器31的8K緩衝區的解壓縮工作。所以,解壓縮例程493必須等待讀自緩衝區例程489結束從硬碟驅動器31讀出數據。如果解壓縮例程493尚未解壓縮和寫所有的系統內存,則解壓縮例程493在498處等待讀自緩衝區例程489。解壓縮例程493和讀自緩衝區例程489通過一組標誌而相互通信。當讀自緩衝區例程489結束將數據掛起文件讀進當前緩衝區時,該例程489隨後在490處轉換上述緩衝區標誌,這向解壓縮例程493表明它可以開始對緩衝區內剛從掛起文件讀出的數據進行解壓縮。然後,讀自緩衝區例程489在492處確定是否仍要從掛起文件中讀取一8K的塊。如果不是,讀自緩衝區例程在502處從掛起文件中讀取剩下的數據並將該數據寫至當前緩衝區。然後讀自緩衝區例程在後臺停止運行,這實際是在500處等待解壓縮例程完成對前面的內存所進行的解壓縮工作。
同時,解壓縮例程493通過檢驗緩衝區的標誌而確定緩衝區是否準備好被解壓縮至系統內存。也就是說,解壓縮例程在498處等待,直至讀自緩衝區例程結束對當前緩衝區的處理,這時,解壓縮循環在494處繼續。
一旦解壓縮例程493結束了對所有系統內存的解壓縮,則唯一在後臺運行的例程是中斷驅動的數據機恢復例程,而主程序則在504處繼續,上述恢復例程在與任務1020有關的內容中給予了說明。
然後,在504和506處通過將來自E000H段數據結構的值寫至視頻控制器的寄存器以及IDE控制器的寄存器而恢復視頻控制器56和IDE控制器86。任務504也是這樣的程序點如果已採用了檢查點,則掛起例程就轉至該程序點(見任務1024)。
此後,繼續例程在1022處測試與任務1022有關的內容所述的中斷驅動的數據機恢復例程是否結束。如果不是,則繼續例程等待上述恢復例程結束。
如508處所示,中斷驅動的數據機狀態恢復例程結束之後,通過將適當的值寫至CPU40和高速緩衝存儲器的控制器62而分別使CPU高速緩衝存儲器41以及系統高速緩衝存儲器60有效。隨後,繼續例程在510至514處通過將來自E000H段數據結構的值寫至計時器控制器102、8042鍵盤接口微處理器104以及8259中斷控制器92內的寄存器中而恢復這些設備的狀態。
然後,通過在484處將來自E000H段數據結構的值寫至UART的寄存器中而恢復UART94。
此後,繼續例程在516處調用交換BIOS數據區和矢量表例程。在調用上述例程之前,已知的BIOS數據區和矢量表在0000H段內是活動的,而從掛起文件中所讀出的BIOS數據區和矢量表則在E000H段數據結構中是不活動的。交換之後,已知的BIOS數據區和矢量表在E000H段內是不活動的,而由掛起例程所保存的BIOS數據區和矢量表則在0000H段內是活動的。
最後,繼續例程在518處轉至恢復CPU例程(Restore CPURoutine),該例程將CPU40恢復至掛起之前狀態。在與圖14有關的內容中將詳細說明恢復CPU例程。恢復CPU例程最終將執行控制權交還給APM。
最後,CPU40執行RETURN指令,從而使計算機系統返回至APM。系統當前繼續執行代碼,就好像它從未掛起過。從實用角度看,計算機系統不受掛起/繼續過程的影響。
參照圖13,它顯示了保存CPU狀態例程(Save CPU StateRoutine)的流程。掛起例程在600處轉至保存CPU狀態例程。請注意,APM已使上述例程從中開始執行的E000H和F000H段成為可讀/寫的。此外,APM將EFLAGS和八個通用寄存器保存起來,如602處所示。保存CPU狀態例程在604處首先等待任一DMA結束並與滑鼠器13的數據包相同步,以確保上述例程能在滑鼠器數據包傳輸之間執行。下列步驟能使DMA結束並與滑鼠器數據包相同步(1)使中斷生效;(2)用7毫秒等待任一DMA結束;(3)使中斷無效;(4)用5毫秒等待滑鼠器數據包的邊界;(5)使中斷生效;(6)再用5毫秒的時間等待滑鼠器數據包的到達;以及(7)使中斷無效。這些步驟之後,所說的代碼可在滑鼠器數據包之間安全地運行。
然後,在606處將地址線(Address Line)20(I/O埠92H)的狀態壓至堆棧。
隨後所執行代碼的流程在1030處做分支轉移,這取決於CPU40是否是帶有SMI的「S」部件。如果是這樣的話,CPU40在1032處命令微控制器U2產生一SMI給CPU40。CPU40內的微碼響應SMI而在1034處將CPU40的狀態保存至E000H段數據結構中的E000FE00H處。此後,CPU40在1036處保存浮點協處理器的狀態並在1038處調用掛起例程(圖10)。正如本文其它地方所說明的那樣,掛起例程在1040處返回並在1040處恢復浮點協處理器的狀態。然後,在1042處,一RSM(繼續)指令恢復CPU狀態並轉至任務732。
另一方面,如果CPU40不帶有SMI,則必須在608處用圖13代碼的其餘部分將CPU的狀態保存起來並將算術協處理器44的狀態壓至堆棧。然後,在610處設置或清除一標記以分別指示CPU是在32位模式下運行還是在16位模式下運行。
隨後,所執行代碼的流程在612處作分支轉移,這取決於CPU40是否在保護模式下運行。如果CPU40不是在保護模式運行,則CPU40必定在實模式運行並且可以非常直接的方式保存其寄存器。首先,在614處將機器狀態字的值以及CR3寫至E000H段的數據結構中。仍在614處將零寫至E000H段數據結構中與TR和LDTR相對應的區域內,這是因為,在實模式下TR和LDTR均為零。
然後,上述代碼併入616處的共用代碼流程,在該流程處,將存儲在GDTR和LDTR內的值寫至E000H段的數據結構中。隨後所執行代碼的流程在618處做分支轉移,這取決於CPU40是否以虛擬8086模式運行。如果CPU40未以虛擬8086模式運行,則代碼沿共用路徑繼續至任務620,在此處將排錯寄存器DR7、DR6、DR3、DR2、DR1以及DR0壓入堆棧。這些寄存器供排錯程序及其它例程使用的。在622處將DS、ES、FS和GS壓入堆棧。然後將CS、SS和ESP寫至E000H段的數據結構中。
這時,已對所有要寫至E000H段數據結構的值進行了寫操作,因此,可在626處將影子RAM的E000H和F000H段改回為只讀的。然後在628處用Write-Back和Invalidate Cache指令傾瀉CPU的高速緩衝存儲器。
隨後,在630處設置CMOS非易失性存儲器96內的一個獨特的關機標記(Shutdown Flag)。最後,保存CPU狀態例程在632處實際上「返回」至掛起例程。所說的「返回」實際上是一種復位,該復位的後面是代碼中的分支。通過轉至復位矢量所指示的代碼而復位CPU40。復位CPU40強制CPU進入實模式,這種方式下,在不必擔心產生保護錯誤的情況下可以存取所有的設備與內存存儲單元。此後,將CPU的狀態已保存起來,並且,掛起例程必須將計算機系統其餘的狀態保存起來。
在復位矢量所指向的代碼內,程序控制作分支轉移,這取決於是否在CMOS96內設置了關機標記。如果清除了關機標記,則計算機會象通常那樣引導。另一方面,如果設置了關機標記,則代碼轉至掛起例程的其餘部分,也就是說,執行控制權轉至圖10掛起例程中的任務253,該任務完成了掛起計算機系統10。因此,保存CPU狀態例程在623處實際上「返回」至了掛起例程。
參照任務612,如果CPU處於保護模式,則代碼在634處作分支轉移,這取決於CPU是否處於虛擬8086模式。如果CPU不處於虛擬8086模式,則代碼在636處再次作分支轉移,這取決於當前的特權級別是否為零。如果當前的特權級別不為零則是一沒有適當特權的例程正在執行保存CPU狀態例程,因而要調用致命掛起錯誤例程(Fatal Suspend Error Routine,始於任務652處)。以下將詳細說明致命掛起錯誤例程。如果程序控制從致命掛起錯誤例程返回,則CPU必須返回至調用保存CPU狀態例程之前的狀態,所以,程序執行會轉至圖14中的任務794,該任務能部分地恢復CPU。由於CPU中很少有變化,所以只需要部分地恢復。
參照任務636,如果調用代碼具有適當的特權級別,則保存工作在642處繼續,從而將CR0、CR3、TR以及LDTR的值保存至E000H段的數據結構中。然後,代碼的流程進入616處的共用代碼流程,在616處,如以上所述那樣將GDTR和IDTR的值保存至E000H的數據結構。從此處開始,代碼沿以上說明過的流程618至632執行,從而「返回」(復位加上一個分支轉移)至其餘的掛起例程代碼。
參照任務634,如果CPU40處於虛擬8086模式,則在644處繼續執行,在644處,將機器狀態字的值(CR0的低16位)保存至E000H的數據結構中,並設置一位於E000H段數據結構內的標誌(Flag)以指示CPU處於虛擬8086模式。然後,代碼經由轉換646和648進入616處的共用代碼。在任務618處,如果CPU處於虛擬8086模式,則控制轉至650,在650處,將DS、ES、FS和GS的值保存到E000H段的數據結構中。代碼再次併入624處的共用代碼。從此處開始,代碼沿以上說明過的流程624至623執行,從而「返回」(復位加上一個分支轉移)至其餘的掛起例程代碼。
任務652至664顯示了致命掛起錯誤例程,如果具有不適當特權級別的代碼試圖保存CPU的狀態,則調用致命掛起錯誤例程。首先,在654處復位故障保險計時器,然後,在656處揚聲器以可聽見的頻率蜂鳴數次,例如以886Hz長0.25秒蜂鳴三次,蜂鳴間隔為1/6秒。三聲蜂鳴警告用戶未進行所嘗試的掛起。蜂鳴之後,在658處再次復位故障保險計時器從而在故障保險計時器到時之前給用戶固定的15至18秒的時間以關閉電源17。
然後,致命掛起錯誤例程在660至662處重複地檢查用戶是否按下了開關21,這表示用戶要中止掛起。通過CPU查詢微控制器U2是否產生了接通事件,從而能檢查開關的接通情況。如果用戶按下了按鈕21,則執行控制返回至前述的任務640。如果用戶未在15至18秒內按下按鈕21,則故障保險計時器將會到時,微控制器會「關閉」電源17,因而很明顯,CPU40所執行的代碼在系統電壓降至容差範圍之外時均會停止。
參照圖14,它顯示了恢復CPU狀態例程(Restore CPURoutine),該例程始於700處。在其餘的硬體及內存均已恢復至它們掛起之前的狀態以後,繼續例程會調用上述恢復CPU狀態例程。首先,如果E000H段還不是可讀/寫的,則應在702處將該段置成可讀/寫的。
然後,所執行代碼的流程在704處作分支轉移,這取決於CPU40在掛起時是否是以虛擬8086模式運行。如果CPU40在計算機系統10掛起時以虛擬8086模式在運行,則代碼進入任務706至728,任務706至728是恢復虛擬8086CPU專用的。然後代碼併入從任務730至748的共用流程。
如果在保存CPU狀態時CPU處於虛擬8086模式,則用於將CR3、LDTR及TR的值保存至E000H段數據結構中的保存CPU狀態例程無法存取CR3、LDTR和TR。所以,必須分別在706、708以及710處估計CR3、LDTR以及TR。一般地說,通過遍歷系統RAM31查找CR3、LDTR和TR所指向的結構,可估計出它們的值。例如,查找GDT內的LDT條目可以確定出LDTR。
在任務706處估計CR3。CR3包括頁面目錄基址寄存器(PDBR)。該寄存器包含有頁面目錄的頁幀地址、頁面級高速緩衝存儲器禁止(PCD)位以及頁面級寫完(PWT)位。認識到頁面目錄一定始於系統RAM53內的4K邊界處,知道了由保存CPU狀態例程保存到E000H段數據結構內的IDTR值和GDTR值並且假定BIOS代碼從F000H段開始執行,就可以估計出PDBR。上述假定是合理的,這是因為,為了速度的緣故已將BIOS代碼投影進了影子RAM。如果作業系統將BIOS代碼拷貝至不同的區域,則對CR3的估計就會失敗。
利用上述知識和假設,檢測物理內存所有4K頁面是否有對應於BIOS代碼段的頁轉換表。也就是說,相對上述頁面的03C0H偏移總是包含值000F0×××、000F1×××、000F2×××,……000FE×××。一旦確定了上述頁面的位置,就在系統RAM53內查找一頁面目錄,該目錄的第一個條目對應於以上確定的頁面表的物理地址。上述頁面目錄的物理地址是PDBR的最佳「猜測」值。
然後,通過確保PDBR能正確地轉換用於GDTR和IDTR的地址而驗證假設的PDBR。也就是說,PDBR用於轉換GDTR的線性地址,並且GDT的第一個條目被驗證是空的(null)(在任何CPU模式下GDT的頭八個字節都是00H)。此後,驗證所返回的物理地址是在物理內存的範圍內。為了能進行線性至物理轉換,使用模仿CPU轉換方法的子例程,如果在物理內存中有該物理頁面存在,則在ESI(段結束指示符)中返回經轉換的地址並清除進位標誌CF,如果內存中不存在該物理頁面,則設置CF。利用這一轉換例程從內存53中讀取GDT的第一個字節。如果GDT的第一個條目為空(null),則假設的PDBR就通過第一次檢驗,因而會被再次檢驗。然後用該PDBR轉換IDTR以便利用上述轉移例程查找IDT。此後證實所返回的物理地址是在物理內存的範圍內。如果IDT的第一個存儲單元出現在物理內存內,則PDBR通過第二次檢驗。
如果假設的PDBR正確地轉換成了GDTR和IDTR,則假定該值是PDBR,並將該值寫至E000H段數據結構內的CR3區域。另一方面,如果假設的CR3沒有通過檢驗,則上述例程會再次開始以在系統內搜索另外的BIOS代碼段頁轉換表,該表可能會得出有效的CR3。
對正常的主板操作來說,總是假定PCD和PWT固定在00H。將它們的值置為0並同PDBR一起寫入E000H段數據結構內的CR3區。
一旦估算出了CR3,就在708處估算LDTR。由於已知LDT在GDT內的某一位置處並且LDT一定會出現在內存中,所以,在估算出CR3的情況下,可以估算出LDTR。為了估算LDTR,在GDT內查找標記為當前的LDT。將在物理內存中出現(用與任務706有關的內容所說明的轉換例程來測試)並被標記為當前的第一個LDT假定為LDTR所指向的表。將該表的起點的物理地址保存至E000H段數據結構內的LDTR區。
即使是在OS/2中有多個LDT可被標記為當前的並出現在物理內存中,上述估算LDTR的方法也是足夠可靠的,因而可以使用。EMM386是普通的虛擬8086模式(Virtual 8086 Mode)例程,因此似乎會有問題,但是,由於EMM386隻有一個CR3和一個LDTR,所以很容易估算出EMM386的CR3和LDTR。
一旦估算出了CR3和LDTR,就在710處估算TR。從實質上說,要在GDT和LDT內的各個任務選擇器條目中查找設置了忙位的任務狀態選擇器。測試各條目的類型欄位以確定該條目是忙的80286任務狀態選擇器還是忙的80486任務狀態選擇器。假定忙的286 TSS(任務狀態選擇器)或忙的486 TSS中的第一個條目是TR所指向的地址。將帶有忙的286或忙的486TSS的上述條目的物理地址保存至E000H段數據結構內的TR區。如果沒有條目帶有忙的286或486 TSS,則將0保存到E000H段數據結構內的TR區。
估算出CR3、LDTR以及TR之後,代碼在任務712處繼續。在712處,如果TR指向有效的TSS,則在714處清除TR所指向的TSS內的忙位。不管怎樣,代碼在716處繼續,在716處,將對GDT有效的選擇器加載進DS、ES、FS和GS。在718處利用來自E000H段數據結構的值加載CR3和CR0。然後,在720處啟動分頁,因此,線性地址等於物理地址的區域只有E000H和F000H段內的區域。隨後在722處將存儲在E000H段數據結構內的值加載進IDTR、GDTR、LDTR以及TR。
最後,在724和726處通過將來自E000H段數據結構的對應於GS、FS、DS、ES、SS、ESP、EFLAGS(設置了VM位之後)以及CS的值壓入虛擬8086中斷堆棧(Virtual 8086 Interrupt Stack)而建立該堆棧。而且,還在726處將對應於任務730處的代碼的返回地址壓入上述堆棧。其後,執行IRETD指令以將CPU40設置回虛擬8086模式並將執行權轉給對應於任務730的代碼。
任務730啟動圖14中各種線程均使用的共用線程。在任務730處,從保存在E000H段數據結構內的值中恢復協處理器44。然後地址線20(I/O埠92H)在732處從堆棧中彈出。任務732也是以SMI為基礎的CPU保存狀態例程所轉至的程序點(見任務1046)。此後在734處使影子RAM的E000H段再次成為只讀。在736處通過重新啟動故障保險計時器而使ARM與硬體相連接,如與圖6A和圖19有關的內容所述。在738處再次使影子RAM的E000H和F000H段成為只讀的。最後,恢復CPU狀態例程在740處設置一標誌,此標誌表示進行了正常的繼續。恢復CPU狀態例程並不執行任務742、744和746,這些任務只用於表示在返回到被掛起事件所中斷的代碼之前的某一時刻,八個通用寄存器會彈出堆棧;使可屏蔽的中斷有效(如果代碼中斷時它們已被置為有效的話);以及所說的標誌彈出堆棧。最後,恢復CPU狀態例程返回至管理例程,管理例程將控制權交返給APM,APM又更新任何舊的系統值並將控制權交返給被中斷的代碼。
參照任務704,如果CPU40在中斷時不處於虛擬8086模式,則代碼進入750至792的流程,在792處,代碼併入任務730至748的共用線程。在750處,如果E000H數據結構中的TR值顯示出TR指向有效的TSS,則在752處清除上述TSS內的忙位,然後在754處將來自E000H段數據結構的值裝入GDTR和CR0。
然後在756至764處將一空的(dummy)頁面目錄表和頁面轉換表裝入E000H段。首先,在756處使影子RAM的E000H段成為可讀/寫的。其次,在地址0E000H處創建一新的頁面目錄表,如758處所示。第三,在760處更改上述新頁面目錄表內的第一個條目以使之指向0E1000H。第四,在0E1000H處創建一新的頁面轉移表,以使得地址0E000H至0FFFFF是存在的,並使得線性地址等於這一地址範圍內的物理地址,如762處所示。最後,將0E000H裝入CR3內的頁面目錄基址寄存器。因此,可以通過0E0000H內的新的空(dummy)頁面目錄和頁面轉換表來進行地址轉換。當在任務754處加載754時,重新激活頁面調度(如果可行)。
然後,在766處使影子RAM的E000H和F000H段成為可讀/寫的。此後,如果CPU40在掛起時正在執行16位的代碼,則CPU處於16位模式(16-Bit Mode),因而在770處將指向16位代碼路徑的偏移值保存至E000H段的數據結構內。另一方面,如果CPU40不處於16位模式,則CPU處於32位模式(32-BitMode),因而在772處將指向32位代碼路徑的偏移值保存至E000H段的數據結構內以代替16位的偏移值。無論是哪一種情況,上述兩種代碼路徑都是平行的,不同點只在於一個使用16位操作操作數,另一個使用32位操作數。任務770和772隻在上述平行的路徑之一中建立所說的偏移值。在以下所述的任務782處進入上述路徑之一(與偏移值相對應的那個路徑)。
然後,在774處,將來自E000H段數據結構的CR3值裝入EDX,將來自E000H段數據結構的SS值裝入CX,將來自E000H段數據結構的ESP值裝入EBP,將來自E000H段數據結構的TR值裝入ESI的高位部分,將來自E000H段數據結構的LDTR值裝入ESI的低位部分(SI)。這些值被移位進下面各自適當的存儲單元。在776處將來自E000H段數據結構的值裝入GDTR、LDTR和CR0。在778處,將存儲在SI內的LDTR值裝入LDTR。然後代碼遠程轉移至在任務770或772處設置的偏移值。通過直接將操作碼放進原始碼內並利用來自任務770或772的偏移值,可以將上述遠程轉移偏碼。然後,代碼轉至16位操作碼路徑或32位操作碼路徑,如782處所示。
此後,在784處將存儲在EDX內的CR3值裝入CR3、將存儲在CX內的SS值裝入SS、將存儲在EBP內的ESP值裝入ESP。在786處將GS、FS、ES和DS彈出截棧。在788處,如果被中斷的CPU40正在以受保護模式執行代碼,則在790處將存儲在ESI高位部分內的TR值裝入TR。無論是哪一種情況,代碼都在任務792處繼續,在任務792處,排錯寄存器DR0、DR1、DR2、DR3、DR6以及DR7均彈出堆棧。
這時,代碼的流程併入任務730至748的共用代碼流程,此代碼已在以前作了說明。在794處,錯誤恢復例程從保存CPU狀態例程的任務640進入上述共用代碼流程。
參照圖15,它顯示了保存8259狀態例程(Save 8259 StateRoutine)的流程圖,該例程始於800處。保存8259的狀態始於在802處保存實時時鐘98所使用的周期性中斷值,以及在804處將所有的其它可讀寄存器保存至E000H段的數據結構。正如在本技術中所周知的那樣,計算機系統10的結構需要某些8259隻讀寄存器具有固定的值。這些值是周知的,並且不需要確定。難以獲得的8259值是8259的基地址、8259從屬地址以及OS將兩個8259設置成能顯示出未決的中斷還是能顯示出進行中的中斷。
用圖15中的其餘代碼判定上述四個項目。在僅不屏蔽鍵盤12和滑鼠器13的中斷的情況下屏蔽8259,如806處所示。
在808處通過將1K的底部物理內存拷貝至E000H段數據結構而將中斷矢量表保存起來。然後,在810處,通過加載256個獨特的空矢量而將一新的「空」(dummy)中斷矢量表裝進上述1K的底部物理內存,而所說的256個空矢量則指向256個空中斷服務例程,這些例程始於C800H段。如812處所示,在C800H段內生成256個空中斷服務例程。
然後在814處禁止鍵盤12和滑鼠器13中斷。在816處確認任何未被確認的鍵盤12和滑鼠器13的中斷。
此後在818處產生一鍵盤中斷並在820處測試該中斷以確定是否將基址8259設置為未決的或是使用的。隨後將該值寫至E000H段的數據結構中。代碼在822處等待對中斷的服務。通過調用上述空服務例程中的一個而在824處對中斷進行服務。調用上述空服務例程來確定8259的基地址並確定該8259是處於未決模式還是處於工作中模式,將所說的基地址與模式保存至E000H段的數據結構中。
對從屬的8259來說,在任務826、828、830和832處執行類似的過程。
在834處通過將來自E000H數據結構的值拷回1K的低部物理內存而恢復中斷矢量表。然後在836處再次將E000H段置為只讀的,並且,在838處屏蔽所有的中斷,以便在840處返回調用程序。
參照圖16,它顯示了用於動態分配掛起文件的例程。如與任務1012有關的內容所說明的那樣,分配在FAT內的掛起文件應是連續的扇區以便能在掛起與繼續過程中分別快速地寫至磁碟和快速地從磁碟中讀出。此外,正如本技術的專家所知道的那樣,掛起文件必須足夠大以便存儲整個系統狀態經壓縮的內容。
為此,上述動態分配掛起文件的例程始於1050。每當計算機系統在不執行繼續例程的情況下進行引導時,OS就執行上述例程,並且該例程是在系統中增加內存之後執行的。首先,圖16所示的分配例程在1052處通過檢查CMOS NVRAM內的標記來測試是否存在有電源管理電路。如果不存在電源管理硬體106,則程序在1054處退出。如果存在電源管理的硬體106,則該例程在1056處檢查確定是否有未決的繼續,如果有,則程序在1058處退出。
如果繼續不是未決的,則分配例程在1060處測試是否有保存文件的分區(Save File Partition)。如果存在有保存文件的分區,則程序在假定該分區足以能存儲整個系統狀態的情況下而在1062處退出。
如果不存在保存文件的分區,則必須在FAT中為該保存文件(Save File)分配一個文件。首先,在1064處確定上述文件的長度。此長度是通過把系統RAM53的長度、視頻存儲器58的長度、其它任何帶有較大易失性存儲容量的設備的長度以及用於存儲諸如CPU40之類的各種設備的寄存器值的64K字節區域加在一起而計算出來的。
計算出所需的保存文件長度之後,分配例程在1066處試著在FAT內分配該保存文件。如果在硬碟驅動器31上沒有足夠可用的存儲空間,則分配例程就在1070處調用一個例程,在可能情況下增加硬碟驅動器31可用空間長度。
DOS調用無法保證文件中連續的扇區。所以,如果硬碟驅動器31具有足夠的空間去存儲保存文件,則分配例程在1072處確定該空間是否是連續的。如果保存文件是分段的(不連續),則分配例程就在1074處調用一個例程,在可能情況下消除硬碟驅動器分段,以便為保存文件提供連續的文件。
如果保存文件不是分段的,則分配例程在1076處將特徵(「PS/1 Power Management」)寫至保存文件的第一個扇區。然後,分配例程在1078處將上述文件的DOS句柄轉換成用於BIOS的物理柱面、磁頭以及扇區並將這些值寫至CMOS NVRAM。最後,分配例程在1080處退出。
在1074處調用的用於消除硬碟驅動器31的分段的例程始於任務1082並繼續至任務1094。首先在1084處測試硬碟驅動器31以確定是否已用一種本技術專家所周知的硬碟驅動器壓縮例程對它進行了壓縮。
如果硬碟驅動器31未被壓縮,則在1086處用本技術專家所周知的消除分段實用程序來消除整個硬碟驅動器31的分段。此後,上述例程在1088處返回以便在1090處重新開始分配例程的分配部分。
如果硬碟驅動器31是壓縮的,則在1092處將其壓縮部分減至最少。此後,在1094處用本技術專家所周知的消除分段實用程序來消除硬碟驅動器31未被壓縮的部分的分段。然後,所述例程在1088處返回以便在1090處重新開始分配例程的分配部分。
在1070處調用的用於增加硬碟驅動器31上可用空間的例程始於任務1100並繼續至任務1110。首先,在1102處測試硬碟驅動器31以確定是否用一種本技術專家所周知的硬碟驅動器壓縮例程對它進行了壓縮。
如果硬碟驅動器31未被壓縮,則它沒有可用於保存文件的足夠空間,因而在1104處顯示一報文以通知用戶使用掛起或繼續特徵,用戶必須增加額外的硬碟驅動器容量或者從硬碟驅動器31上刪除一些文件。
如果硬碟驅動器31是壓縮的,則如果可能的話,在1108處增加其未被壓縮部分的長度。此後,所述例程在1110處返回以便在1090處重新開始分配例程的分配部分。
參照圖17,它顯示了退出待機狀態的例程,該例程始於1120處。從概念上講,計算機系統在退出待機狀態152時會反向改變系統從正常操作狀態150轉換至待機狀態152時所產生的變化。簡要地說,計算機系統在退出待機狀態152時會作下列工作恢復視頻信號;使LED23發光;使硬碟驅動器31內的硬碟起轉;恢復系統時鐘;禁止APM CPU空閒調用,因此,來自APM驅動器的CPU空閒調用不再會使CPU40停機;以及清除指示計算機系統10處於待機狀態152的標記。
首先,所述例程在1122處測試是否在計算機系統進入待機狀態152時產生了一檢查點(Cheekpoint)。如果是這樣的話,則在1124處清除檢查點採用位以表明該檢查點不再有效。在本特定的實施例中,當計算機系統退出待機時,該檢查點會失效。如果計算機系統在處於待機狀態時失效,則檢查點數據只用於使該系統繼續,這是因為,多數系統都使用硬碟驅動器上的虛擬交換文件,並且,從該檢查點數據的繼續工作會將機器置成這樣的狀態,在這種狀態下,上述交換文件完全不同於作為檢查點數據而存儲起來的系統狀態所預期的交換文件。另外,可在下一次磁碟存取之後使檢查點數據失效。此外,在系統從檢查點數據繼續時,可以在磁碟存取一個可能使計算機系統出現問題的文件之後使檢查點失效。再有,如果用戶理解從檢查點數據的繼續工作可能使硬碟驅動器31上的部分或全部數據丟失,則用戶可以隨時使用檢查點數據。
此後並且如果未採用檢查點,則CPU40在1126處命令微控制器U2作下列工作(i)使視頻控制器56再次開始生成視頻信號;(ii)使時鐘合成器906恢復較高的系統時鐘頻率(25MHz或33MHz);以及(iii)使LED33發光。然後,CPU40在1128處將適當的值寫至固定盤控制器86以使硬碟驅動器31的硬碟開始旋轉。隨後,在1130處禁止APM CPU空調用,因此CPU不會停機。最後,在1132處清除待機標誌(Standby Flag),這表示計算機系統10處於正常操作狀態150,並且,所說的例程在1140處返回調用程序。
參照圖18,它顯示了進入待機狀態例程,該例程始於1140。簡要地說,計算機系統在進入待機狀態152時會做下列工作斷開視頻信號;使LED23閃亮;使硬碟驅動器31內的硬碟停轉;減慢系統時鐘;使APM CPU空調用生效,因此,來自APM驅動程序的CPU空調用會使CPU40停機;以及設置指示計算機系統10處於待機狀態152的標誌。
首先,上述例程在1142處測試是否採用了一檢查點。如果是,就在1144處執行掛起例程的大部分內容,以便將計算機系統10的狀態存儲到硬碟驅動器31。本實施例中,在計算機系統進行待機時採用檢查點。另外,可按與圖17有關的內容中所討論的注意事項來周期性地採用檢查點並用該檢查點使計算機系統繼續。然後,在1146處執行足夠的繼續例程以便從1144處產生的局部掛起中退出。此後,在1148處設置檢查點採用位以表示採用了有效的檢查點。在本實施例中,僅在處於待機狀態152時系統出現故障的情況下才使用檢查點數據。在這種情況下,系統在引導時會從所保存的檢查點處繼續。
理想地,上述檢查點應對計算機系統是完全透明的。因此,如果產生硬體中斷以防數據丟失,則應使檢查點失效。另外,同正常掛起一樣,可以忽略任何硬體中斷。
此後並且如果未採用檢查點,則CPU40在1150處命令微控制器做下列工作(i)令視頻控制器56停止生成視頻信號;(ii)使時鐘合成器906將系統時鐘從其高頻(25MHz或33MHz)減慢至8MHz;以及(iii)使LED23閃亮。然後,CPU40在1152處將適當的值寫至固定盤控制器86以使硬碟驅動器31內的硬碟停轉。隨後,在1154處使APM CPU空調用生效,因此,來自APM驅動程序的CPU空調用會使CPU40停機。最後,在1156處設置待機標誌,這表示計算機系統處於待機狀態152,並且,所說的例程在1158處返回調用程序。
儘管通過本發明的最佳實施例說明了本發明,並且是較詳細地說明這些實施例,但是,本申請人並不想以任何方式把後附的權利要求範圍局限於上述細節。本技術的專家將非常清楚其它的優點和改進很容易實現。例如,由電源管理電路106所執行的多種任務,如對一個或多個中斷的硬體監控等,可內裝在系統晶片內。所以,從更廣泛的方面來說,本發明並不局限於所顯示和說明的特定細節、代表性的設備與方法以及示意性的實例。因此,在不脫離本申請人之發明的總體概念的精神和範圍的情況下,可以與以上細節不一致。
權利要求
1.一種計算機系統,它包括(a)可執行作業系統代碼的一個CPU,其特徵在於控制著電源管理狀態的轉換、應用程式代碼以及實現電源管理狀態轉換的BIOS代碼;(b)電源管理電路,它與CPU作電路通連並用於響應一組預定的掛起事件中的一個而有選擇地在正常操作狀態與掛起狀態之間改變計算機系統的狀態;(c)一備份掛起計時器,它與CPU作電路通連並以獨立於作業系統中用於控制電源管理狀態轉換的那部分代碼的方式執行;(d)一電源,它與上述CPU及電源管理電路作電路通連並包括用於響應電源管理電路而有選擇地將系統電力從外部電源提供給計算機系統的電路,此電源的特徵是它具有第一供電狀態和第二供電狀態並帶有將輔助電力提供給所述電源管理電路的電路;其中,所述第一供電狀態的特徵是所述電源從所述外部電源將系統電力提供給所述計算機系統、將輔助電力提供給所述電源管理電路;以及所述第二供電狀態的特徵是所述電源不從所述外部電源將系統電力提供給所述計算機系統,但從所述外部電源將輔助電力提供給所述電源管理電路;(e)一非易失性存儲器,它與所述CPU作電路通連;(f)易失性系統內存,它與所述CPU作電路通連並用於存儲內存數據;以及(g)易失性系統寄存器,它與所述CPU作電路通連並用於存儲寄存器數據;其中(1)所述正常操作狀態的特徵是所述電源處於所述第一供電狀態,並且,所述計算機系統可以響應用戶命令、所述作業系統或所述BIOS而執行應用程式;(2)所述掛起狀態的特徵是寄存器數據和內存數據均存儲在所述非易失性存儲器內,並且,所述電源處於所述第二供電狀態;(3)所述正常操作狀態與所述掛起狀態之間的所述轉換包括所述CPU響應所述預定的掛起事件在所述系統內存、系統寄存器與所述非易失性存儲器之間拷貝內存數據和寄存器數據;(4)所述正常操作狀態與所述掛起狀態之間的所述轉換還包括,所述控制部件響應所述預定的掛起事件而使所述電源分別在所述第一供電狀態與所述第二供電狀態之間轉換;以及(5)所述預定事件中的至少一個包括所述備份掛起計時器的到時。
2.如權利要求1所述的計算機系統,其特徵在於,它還包括一不活動掛起計時器。此計時器設置成在預定時間間隔之後到時,並且,所述預定掛定事件中的另一個包括不活動掛起計時器的到時。
3.如權利要求1所述的計算機系統,其特徵在於,包括一與電源管理處理器作電路通連的瞬時按鈕開關,所述開關響應其被按下而產生連通事件,並且,所述預定掛起事件中的另一個包括所述開關的接通事件。
4.如權利要求1所述的計算機系統,其特徵在於,所述電源管理處理器提供了所述備份掛起計時器。
5.如權利要求1所述的計算機系統,其特徵在於,它還包括一瞬時按鈕開關,它與所述電源管理處理器作電路通連並響應按下所述開關而產生接通事件,並且,所述預定掛起事件中的另外一個包括所述備份掛起計時器的到時與所述開關的接通事件。
6.如權利要求1所述的計算機系統,其特徵在於,所述電源管理處理器包括一預編程的微控制器。
7.如權利要求1所述的計算機系統,其特徵在於,可響應執行中的作業系統的電源管理部分而重新啟動或復位所述備份掛起計時器。
8.如權利要求4所述的計算機系統,其特徵在於,所述電源管理處理器包括一預編程的微控制器。
9.如權利要求1所述的計算機系統,其特徵在於,所述非易失性存儲器包括一固定盤存儲器。
全文摘要
一種掛起/繼續計算機系統,它帶有相互作電路通連的CPU、非易失性存儲器、易失性寄存器和內存數據、電源管理處理器、備份掛起計時器以及電源。電源管理處理器調節電源供給CPU的電力。一具有電源管理控制權的作業系統控制著上述掛起/繼續系統。備份掛起計時器以獨立於作業系統電源管理部分的方式運行。如果作業系統的電源管理部分停止起作用並且系統應被掛起,則備份掛起計時器會使系統掛起。
文檔編號G06F11/00GK1140272SQ95116819
公開日1997年1月15日 申請日期1995年8月31日 優先權日1994年9月7日
發明者D·T·克朗普, S·T·彭科斯特 申請人:國際商業機器公司

同类文章

一種新型多功能組合攝影箱的製作方法

一種新型多功能組合攝影箱的製作方法【專利摘要】本實用新型公開了一種新型多功能組合攝影箱,包括敞開式箱體和前攝影蓋,在箱體頂部設有移動式光源盒,在箱體底部設有LED脫影板,LED脫影板放置在底板上;移動式光源盒包括上蓋,上蓋內設有光源,上蓋部設有磨沙透光片,磨沙透光片將光源封閉在上蓋內;所述LED脫影

壓縮模式圖樣重疊檢測方法與裝置與流程

本發明涉及通信領域,特別涉及一種壓縮模式圖樣重疊檢測方法與裝置。背景技術:在寬帶碼分多址(WCDMA,WidebandCodeDivisionMultipleAccess)系統頻分復用(FDD,FrequencyDivisionDuplex)模式下,為了進行異頻硬切換、FDD到時分復用(TDD,Ti

個性化檯曆的製作方法

專利名稱::個性化檯曆的製作方法技術領域::本實用新型涉及一種檯曆,尤其涉及一種既顯示月曆、又能插入照片的個性化檯曆,屬於生活文化藝術用品領域。背景技術::公知的立式檯曆每頁皆由月曆和畫面兩部分構成,這兩部分都是事先印刷好,固定而不能更換的。畫面或為風景,或為模特、明星。功能單一局限性較大。特別是畫

一種實現縮放的視頻解碼方法

專利名稱:一種實現縮放的視頻解碼方法技術領域:本發明涉及視頻信號處理領域,特別是一種實現縮放的視頻解碼方法。背景技術: Mpeg標準是由運動圖像專家組(Moving Picture Expert Group,MPEG)開發的用於視頻和音頻壓縮的一系列演進的標準。按照Mpeg標準,視頻圖像壓縮編碼後包

基於加熱模壓的纖維增強PBT複合材料成型工藝的製作方法

本發明涉及一種基於加熱模壓的纖維增強pbt複合材料成型工藝。背景技術:熱塑性複合材料與傳統熱固性複合材料相比其具有較好的韌性和抗衝擊性能,此外其還具有可回收利用等優點。熱塑性塑料在液態時流動能力差,使得其與纖維結合浸潤困難。環狀對苯二甲酸丁二醇酯(cbt)是一種環狀預聚物,該材料力學性能差不適合做纖

一種pe滾塑儲槽的製作方法

專利名稱:一種pe滾塑儲槽的製作方法技術領域:一種PE滾塑儲槽一、 技術領域 本實用新型涉及一種PE滾塑儲槽,主要用於化工、染料、醫藥、農藥、冶金、稀土、機械、電子、電力、環保、紡織、釀造、釀造、食品、給水、排水等行業儲存液體使用。二、 背景技術 目前,化工液體耐腐蝕貯運設備,普遍使用傳統的玻璃鋼容

釘的製作方法

專利名稱:釘的製作方法技術領域:本實用新型涉及一種釘,尤其涉及一種可提供方便拔除的鐵(鋼)釘。背景技術:考慮到廢木材回收後再加工利用作業的方便性與安全性,根據環保規定,廢木材的回收是必須將釘於廢木材上的鐵(鋼)釘拔除。如圖1、圖2所示,目前用以釘入木材的鐵(鋼)釘10主要是在一釘體11的一端形成一尖

直流氧噴裝置的製作方法

專利名稱:直流氧噴裝置的製作方法技術領域:本實用新型涉及ー種醫療器械,具體地說是ー種直流氧噴裝置。背景技術:臨床上的放療過程極易造成患者的局部皮膚損傷和炎症,被稱為「放射性皮炎」。目前對於放射性皮炎的主要治療措施是塗抹藥膏,而放射性皮炎患者多伴有局部疼痛,對於止痛,多是通過ロ服或靜脈注射進行止痛治療

新型熱網閥門操作手輪的製作方法

專利名稱:新型熱網閥門操作手輪的製作方法技術領域:新型熱網閥門操作手輪技術領域:本實用新型涉及一種新型熱網閥門操作手輪,屬於機械領域。背景技術::閥門作為流體控制裝置應用廣泛,手輪傳動的閥門使用比例佔90%以上。國家標準中提及手輪所起作用為傳動功能,不作為閥門的運輸、起吊裝置,不承受軸向力。現有閥門

用來自動讀取管狀容器所載識別碼的裝置的製作方法

專利名稱:用來自動讀取管狀容器所載識別碼的裝置的製作方法背景技術:1-本發明所屬領域本發明涉及一種用來自動讀取管狀容器所載識別碼的裝置,其中的管狀容器被放在循環於配送鏈上的文檔匣或託架裝置中。本發明特別適用於,然而並非僅僅專用於,對引入自動分析系統的血液樣本試管之類的自動識別。本發明還涉及專為實現讀