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