(57)【特許請求の範囲】
【請求項１】
ａ）プロセッサ・ユニットと、
ｂ）前記プロセッサ・ユニットと回路接続され、揮発メモリ・データを記憶する揮発メモリと、
ｃ）前記プロセッサ・ユニットと回路接続され、揮発レジスタ・データを記憶する揮発レジスタと、
ｄ）前記プロセッサ・ユニットと回路接続され、少なくとも１つのシステム状態を延期ファイルとして記憶する不揮発記憶装置と、
ｅ）少なくとも第１の状態及び第２の状態を有し、前記延期ファイルが読み出し専用であるか否かを判断するために前記延期ファイルにセットされるＳＯＲＭビットと、
ｆ）前記プロセッサ・ユニット及び前記不揮発記憶装置に回路接続される制御ユニットと、
ｇ）前記プロセッサ・ユニットに回路接続され、前記制御ユニットに応答して、前記プロセッサ・ユニットにシステム電力を選択的に供給する電源装置と、
を含むコンピュータ・システムであって、
１）前記制御ユニットが第１のパワー管理コマンドに応答して、前記延期ファイルを前記不揮発記憶装置から前記プロセッサ・ユニット、前記揮発メモリ、及び前記揮発レジスタに転送させ、
２）前記ＳＯＲＭビットが前記２つの状態の特定の一方にセットされているとき、前記制御ユニットが第２のパワー管理コマンドに応答して、前記揮発メモリ・データ及び前記揮発レジスタ・データを前記不揮発記憶装置上に記憶することなく、前記電源装置がシステム電力を前記プロセッサ・ユニットに供給するのを停止させる、
コンピュータ・システム。
【請求項２】
コンピュータ・システムで実行されるコードを制御する方法であって、
ａ）第１のパワー管理コマンドに応答して、複数の記憶コンピュータ状態から選択された第１の記憶コンピュータ状態を示す第１の延期ファイルを不揮発記憶装置から前記コンピュータ・システムにロードするステップと、
ｂ）前記第１の延期ファイルに前記第１の延期ファイルが読み出し専用であることを示すＳＯＲＭビットをセットするステップと、
ｃ）前記第１の延期ファイルから取得したコードを実行し、前記第１の記憶コンピュータ状態が変更された状態を示す変更第１コンピュータ状態を生成するステップと、
ｄ）前記ＳＯＲＭビットがセットされている場合、第２のパワー管理コマンドに応答して前記変更第１コンピュータ状態を廃棄するステップと、
を含む、方法。
【請求項３】
前記ロードするステップが、
ａ）前記第１記憶コンピュータ状態のレジスタ部分を揮発レジスタにロードするステップと、
ｂ）前記第１記憶コンピュータ状態のメモリ部分を揮発メモリにロードするステップと、
を含む、請求項２記載の方法。
【請求項４】
ａ）第１のパワー管理コマンドに応答して、複数の記憶コンピュータ状態から選択された第２の記憶コンピュータ状態を示す第２の延期ファイルを前記不揮発記憶装置から前記コンピュータ・システムにロードするステップと、
ｂ）前記第２の延期ファイルに前記第２の延期ファイルが読み出し専用であることを示すＳＯＲＭビットをセットするステップと、
ｃ）前記第２の延期ファイルから取得したコードを実行し、前記第２の記憶コンピュータ状態が変更された状態を示す変更第２コンピュータ状態を生成するステップと、
ｄ）前記ＳＯＲＭビットがセットされている場合、第２のパワー管理コマンドに応答して前記変更第２コンピュータ状態を廃棄するステップと、
を含む、請求項２記載の方法。
【請求項５】
ａ）第１のパワー管理コマンドに応答して、複数の記憶コンピュータ状態から選択された第１の記憶コンピュータ状態を示す第１の延期ファイルを不揮発記憶装置からコンピュータ・システムにロードする手段と、
ｂ）前記第１の延期ファイルに前記第１の延期ファイルが読み出し専用であることを示すＳＯＲＭビットをセットする手段と、
ｃ）前記第１の延期ファイルから取得したコードを実行し、前記第１の記憶コンピュータ状態が変更された状態を示す変更第１コンピュータ状態を生成する手段と、
ｄ）前記ＳＯＲＭビットがセットされている場合、第２のパワー管理コマンドに応答して前記変更第１コンピュータ状態を廃棄する手段と、
を含む、コンピュータ・システム。
【請求項６】
前記ロード手段が、
ａ）前記第１記憶コンピュータ状態のレジスタ部分を揮発レジスタにロードする手段と、
ｂ）前記第１記憶コンピュータ状態のメモリ部分を揮発メモリにロードする手段と、
を含む、請求項５記載のコンピュータ・システム。
【請求項７】
ａ）第１のパワー管理コマンドに応答して、複数の記憶コンピュータ状態から選択された第２の記憶コンピュータ状態を示す第２の延期ファイルを前記不揮発記憶装置から前記コンピュータ・システムにロードする手段と、
ｂ）前記第２の延期ファイルに前記第２の延期ファイルが読み出し専用であることを示すＳＯＲＭビットをセットする手段と、
ｃ）前記第２の延期ファイルから取得したコードを実行し、前記第２の記憶コンピュータ状態が変更された状態を示す変更第２コンピュータ状態を生成する手段と、
ｄ）前記ＳＯＲＭビットがセットされている場合、第２のパワー管理コマンドに応答して前記変更第２コンピュータ状態を廃棄する手段と、
を含む、請求項５記載のコンピュータ・システム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は一般にコンピュータ・システム・アーキテクチャに関し、特に、システム延期（サスペンド）／再開（レジューム）機能及びＳＯＲＭ（suspend once resume many）セッションを有するデスクトップ・コンピュータ・システムに関する。
【０００２】
【従来の技術】
パーソナル・コンピュータ・システムは既知である。パーソナル・コンピュータ・システムは一般に、そして特にＩＢＭパーソナル・コンピュータは、今日の近代社会の多くの分野において、コンピュータ能力を提供するために広範に使用されている。パーソナル・コンピュータは通常、デスクトップ、据置型（floor standing）、またはポータブル・マイクロプロセッサとして定義され、単一の中央処理ユニット（ＣＰＵ）及びそれに関連付けられる揮発及び不揮発メモリ（全てのＲＡＭ及びＢＩＯＳ  ＲＯＭなど）、システム・モニタ、キーボード、１つ以上のフレキシブル・ディスケット・ドライブ、固定ディスク記憶ドライブ（"ハード・ドライブ"としても知られる）、いわゆる"マウス"・ポインティング・デバイス、及びオプションのプリンタを有する。これらのシステムの１つの差別的特長は、これらのコンポーネントを電気的に相互に接続するマザーボードまたはシステム・プレーナの使用である。これらのシステムは主に、独立のコンピュータ能力を単一のユーザに提供するように設計され、個人用または小ビジネス用に購入されるように安価な価格に設定される。こうしたパーソナル・コンピュータ・システムの例に、ＩＢＭのPERSONAL COMPUTER AT及びＩＢＭのPERSONAL SYSTEM/1（ＩＢＭ  ＰＳ／１）がある。
【０００３】
パーソナル・コンピュータ・システムは通常、文書処理、スプレッドシートによるデータ処理、データベース内のデータの収集及び関連付け、グラフィックスの表示、システム設計ソフトウェアを用いた電気または機械システムの設計など、様々な活動を達成するソフトウェアを実行するために使用される。
【０００４】
１３の関連出願は、正常動作状態、待機状態、延期状態、及びオフ状態の４つの能力管理状態を有するコンピュータ・システムを開示する。オフ状態、正常動作状態、及び延期状態の間で変化するために、１つのスイッチが使用される。
【０００５】
本発明のコンピュータ・システムの正常（ノーマル）動作状態は、任意のデスクトップ・コンピュータの正常動作状態と事実上同一である。ユーザはアプリケーションを使用し、基本的にコンピュータを任意の他のコンピュータと同様に取り扱う。１つの違いは、パワー管理ドライバの存在であり、これは（ＢＩＯＳ及びオペレーティング・システム内で）バックグラウンドで実行され、ユーザには透過的である。オペレーティング・システム（ＯＳ）内のパワー管理ドライバ部分は、インテル社及びマイクロソフト社により作成されたアドバンスド・パワー・マネジメント（ＡＰＭ）拡張型プログラミング・インタフェースであり、今日インテル８０Ｘ８６ファミリのプロセッサ上で動作するように作成されたほとんどのオペレーティング・システム内に存在する。ＢＩＯＳ内のパワー管理ドライバ部分（ＡＰＭ  ＢＩＯＳ）が、ＡＰＭ  ＯＳドライバと通信する。ＡＰＭ  ＯＳドライバ及びＡＰＭ  ＢＩＯＳルーチンは一緒に、コンピュータの他の３つの状態への遷移を制御する。
【０００６】
第２の状態、すなわち待機（スタンバイ）状態は、正常動作状態よりも少ない電力を消費するが、あらゆるアプリケーションを実行状態に維持する。一般に、待機状態では、装置をそれらのそれぞれの低電力モードに設定することにより、電力が節減される。例えば、消費電力は待機状態において、ハード・ドライブ内の固定ディスクの回転を停止することにより、及びビデオ信号の生成を停止することにより節減される。
【０００７】
第３の状態は延期（サスペンド）状態である。延期状態では、コンピュータ・システムは極めて少量の電力を消費する。延期状態のコンピュータは、壁上のアウトレットから僅かな電力を消費するだけである。消費される電力は、コンピュータ・システム内のバッテリからの切り替えをモニタする回路を維持するための少量の電力（システムがＡＣ電力を供給されていないとき）、または電源装置により補助電源ラインにおいて生成される少量の電力（システムがＡＣ電力を供給されているとき）だけである。
【０００８】
この少量の電力の使用は、電源装置が"オフ"される以前に、コンピュータ・システムの状態を固定ディスク記憶装置（ハード・ドライブ）に保管することにより達成される。延期状態に入るために、コンピュータ・システムは実行コードを中断し、コンピュータの制御をパワー管理ドライバに渡す。パワー管理ドライバはコンピュータ・システムの状態を確認し、コンピュータ・システムの状態を固定ディスク記憶装置に書込む。ＣＰＵレジスタ、ＣＰＵキャッシュ、システム・メモリ、システム・キャッシュ、ビデオ・レジスタ、ビデオ・メモリ、及び他の装置のレジスタの状態が、全て固定ディスクに書込まれる。システム全体の状態がこのように保管され、中断によりコード・アプリケーションが悪影響を受けること無く復元され得る。コンピュータは次に、システムが延期されたことを示すデータを不揮発ＣＭＯＳメモリに書込む。最後に、コンピュータは電源装置に電力の生成を停止させる。コンピュータ全体の状態が固定ディスク記憶装置に安全に保管され、システム電力が"オフ"され、コンピュータは、切り替えをモニタする回路に供給するだけの少量の調整電力を電源装置から受け取る。
【０００９】
第４の最後の状態はオフ状態である。この状態では、電源装置がコンピュータ・システムへの調整電圧の供給を停止するが、コンピュータ・システムの状態は固定ディスクへは保管されない。オフ状態は事実上、普通にオフされた通常のデスクトップ・コンピュータと同一である。
【００１０】
状態間の切り替えはパワー管理ドライバにより処理され、通常、単一のスイッチの閉止事象、フラグ、及び不活動待機タイマと不活動延期タイマの２つのタイマにもとづく。システムは単一のパワー・ボタンを有する。このボタンはコンピュータ・システムをオンするため、システムの状態を延期するため、システムの状態を復元するため、そしてシステムをオフするために使用される。
【００１１】
通常の延期／再開システムには欠点が存在する。ユーザは通常、同一セッションを繰り返し延期し再開するか、新たなセッションをブートするかを任意に選択することができる。常に同一のセッションを延期し再開する場合には、システムは複数のプログラムの実行により乱雑となり得る。新たなセッションの開始はしばしの時間を費やし、ユーザに、システムがブートし、自己診断を実行し、オペレーティング・システムをロードし、新たなセッションのロードや、更にグラフィック・ユーザ・インタフェースのロードに関連付けられるあらゆるプログラム（前者にはコンピュータ・ウィルス検出などが含まれる）を実行するのを待機するように要求する。新たなセッションをブートするプロセスは、文字通り数分を費やし得る。従って、ユーザは乱雑なシステム状態への迅速な再開を実行するか、簡素な新たなセッションへの非常にゆっくりとしたブートを選ぶかの選択を強いられる。
【００１２】
【発明が解決しようとする課題】
本発明の目的は、１度のサスペンドに対して複数のレジュームが可能なＳＯＲＭセッションを提供することである。
【００１３】
本発明の別の目的は、新たなセッションのブート及びロードを要求すること無しに、コンピュータ・システムの固定の所定状態がハード・ドライブから迅速にロードされるコンピュータ・セッションを提供することである。
【００１４】
本発明の更に別の目的は、新たなセッションのブート及びロードを要求すること無しに、簡素なコンピュータ・セッションをハード・ドライブから迅速にロード可能にすることである。
【００１５】
本発明の更に別の目的は、第１のオペレーティング・システムと第２のオペレーティング・システムとの間に、プログラムに影響する"フック（hook）"が維持されるように要求すること無しに、第１のオペレーティング・システムが第２のオペレーティング・システムからプログラムをオペレートすることを可能にすることである。
【００１６】
本発明のこれらの及び他の利点が、本発明の後述の詳細な説明から明らかとなろう。
【００１７】
【課題を解決するための手段】
本発明によれば、ＳＯＲＭセッションの能力を有するコンピュータ・システムが提供される。ＳＯＲＭセッションは、コンピュータ・システムの状態がハード・ドライブに保管され、正確なシステム状態がハード・ドライブから再開され得ると言う点で、通常の延期／再開セッションと類似である。１つの違いは、ユーザがそのセッションを終了したときにはシステム状態が保管されないことである。別の違いは延期ファイルが常に同一に維持されることである。従ってＳＯＲＭシステム状態が常に固定の所定状態である。従って、延期可能なセッション同様、システムが再開されるときにシステム状態が延期ファイルからロードされる。しかしながらこれらのセッションと異なり、ＳＯＲＭセッションの後には、システムへの電源が単に排除され、依然実行中のあらゆるアプリケーション及びデータが失われる。
【００１８】
本発明のＳＯＲＭセッションは、別のオペレーティング・システム用に設計されたコードをオペレートするように要求されるオペレーティング・システムに、柔軟性を追加する。通常、第１のオペレーティング・システムが第２のオペレーティング・システムを呼び出し、"フック"を第２のオペレーティング・システムに挿入する。これらのフックは、第２のオペレーティング・システム下で動作するプログラムに影響する。本発明のＳＯＲＭセッションを使用することにより、第１のオペレーティング・システムが延期され（第１のオペレーティング・システムが全体的にメモリからフラッシュされることを可能にする）、第２のオペレーティング・システムを含むＳＯＲＭセッションが再開され、第２のオペレーティング・システムが実行され、ＳＯＲＭセッションが廃棄されて、第１のオペレーティング・システムが再開される。プログラムの動作に影響し得るフックは必要とされない。
【００１９】
【発明の実施の形態】
本発明は、その好適な態様を示す添付の図面を参照して以降で詳述されるが、説明の最初に当たり、当業者には、本発明の有益な結果を達成する一方で、本明細書で述べられる本発明を変更し得ることが理解されよう。従って、後述の説明は、当業者に対する広範な教示の開示として理解されるべきであり、本発明を制限するものではない。本発明は、コンピュータ・アーキテクチャ設計、デジタル設計、ＢＩＯＳ設計、プロテクト・モード８０４８６コード設計、アプリケーション・コード設計、オペレーティング・システム・コード設計、及びアドバンスド・パワー・マネジメント拡張プログラミング・インタフェース利用などの、コンピュータ・システムの完全な設計を取り扱う。本願は、コンピュータ・システム設計の全ての面に通じた当業者のために作成されたものである。
【００２０】
添付の図面を特に参照すると、本発明を実現するマイクロプロセッサが、参照番号１０として一般に示される（図１）。上述のように、コンピュータ１０はそれに関連付けられる表示モニタ１１、キーボード１２、マウス１３、及びプリンタまたはプロッタ１４を有し得る。コンピュータ１０は、装飾外部部材１６（図２）及び内部遮蔽部材１８により形成されるカバー１５を有し、これらはシャシ１９と共に、デジタル・データを処理及び記憶するために電力供給されるデータ処理及び記憶コンポーネントを受け取る包囲遮蔽容積を定義する。少なくとも特定のこれらのコンポーネントが、多層プレーナ２０またはマザーボード上に実装される。多層プレーナ２０はシャシ１９上に実装され、コンピュータ１０のコンポーネントを電気的に相互接続する手段を提供する。こうしたコンポーネントには、上述のコンポーネント、及びフロッピー・ディスク・ドライブ、様々な形態の直接アクセス記憶装置、アクセサリ・アダプタ・カードまたはボードなどの、他の関連要素が含まれる。以降で詳述されるように、マイクロコンピュータの動作コンポーネント間で入出力信号を転送するための機構が、プレーナ２０内に提供される。
【００２１】
コンピュータ・システムは電源装置１７、電源ボタン２１（以下スイッチとしても参照）、及びパワー／フィードバックＬＥＤ２３を有する。通常のシステムの電源スイッチと異なり、電源ボタン２１は後述のように、電源１７へのＡＣライン電力をスイッチしない。シャシ１９はベース２２、正面パネル２４、及び背面パネル２５（図２）を有する。正面パネル２４は、磁気または光ディスク用のディスク・ドライブ、テープ・バックアップ・ドライブなどのデータ記憶装置を受け取る、少なくとも１つのオープン・ベイ（４つのベイが示される）を規定する。図示の形態では、１対の上ベイ２６、２８及び１対の下ベイ２９、３０が提供される。一方の上ベイ２６は、第１のサイズの周辺ドライブ（例えば３．５インチ・ドライブなど）を受け取るように適応化され、他方２８は２つのサイズ（例えば３．５インチ及び５．２５インチ）の選択された方のドライブを受け取るように適応化される。下ベイは、１サイズだけ（３．５インチ）の装置を受け取るように適応化される。１つのフロッピー・ディスク・ドライブが図１に２７で示され、これは挿入ディスケットを受け取り、そのディスケットを用いて、データを受信、記憶及び配布できる既知の取り外し可能媒体直接アクセス記憶装置である。１つのハード・ディスク・ドライブが３１で示され、これはデータを記憶及び配布できる既知の固定媒体直接アクセス記憶装置である。
【００２２】
前記構造を本発明に関連付ける前に、パーソナル・コンピュータ・システム１０の一般的な動作概要について述べることにしよう。図３及び図４を参照すると、本発明によるシステム１０などの、コンピュータ・システムの様々なコンポーネントを表すパーソナル・コンピュータ・システムのブロック図が示される。具体的には、プレーナ２０上に実装されるコンポーネント、及びプレーナとＩ／Ｏスロット及びパーソナル・コンピュータ・システムの他のハードウェアとの接続が示される。プレーナには、マイクロプロセッサにより構成されるシステム・プロセッサ４０（またはＣＰＵ４０）が接続され、これは高速ＣＰＵローカル・バス４２によりメモリ制御ユニット４６に接続され、メモリ制御ユニット４６は更に揮発ランダム・アクセス・メモリ（ＲＡＭ）５３に接続される。メモリ制御ユニット４６は、メモリ制御装置４８、アドレス・マルチプレクサ５０、及びデータ・バッファ５２から構成される。メモリ制御ユニット４６は更に、４つのＲＡＭモジュール５４として表されるランダム・アクセス・メモリ５３に接続される。メモリ制御装置４８は、マイクロプロセッサ４０への、及びそこからのアドレスを特定のＲＡＭ５３領域にマッピングする論理を含む。この論理は、ＢＩＯＳにより以前に占有されたＲＡＭを再利用するために使用される。更にＲＯＭ選択信号（ＲＯＭＳＥＬ）がメモリ制御装置４８により生成され、ＲＯＭ８８をイネーブルまたはディセーブルにするために使用される。任意の適切なマイクロプロセッサがシステム・プロセッサ４０として使用され得るが、１つの好適なマイクロプロセッサは、インテル社により販売される８０４８６である。インテル８０４８６は内部キャッシュを有し、従ってインテル８０４８６に相当する任意のＣＰＵ４０がＣＰＵキャッシュ４１を有する。
【００２３】
本発明は以降では、図３及び図４のシステム・ブロック図を特に参照して述べられるが、説明の最初に当たり、本発明による装置及び方法が、プレーナ・ボードの他のハードウェア構成とも使用され得ることが理解されよう。例えば、システム・プロセッサ４０がインテル８０２８６または８０３８６マイクロプロセッサであってもよい。本明細書において使用されるように、８０２８６、８０３８６または８０４８６は、一般にインテル社から入手されるマイクロプロセッサを参照するために使用される。しかしながら、最近、他のメーカもインテルＸ８６アーキテクチャの命令セットを実行可能なマイクロプロセッサを開発してきており、前記用語の使用は、そうした命令セットを実行可能な任意のマイクロプロセッサを包含するものである。当業者には既知のように、初期のパーソナル・コンピュータは通常、当時流行のインテル８０８８または８０８６マイクロプロセッサをシステム・プロセッサとして使用した。これらのプロセッサは、１メガバイトのメモリをアドレス指定する能力を有する。最近では、パーソナル・コンピュータは通常、より高速なインテル８０２８６、８０３８６、及び８０４８６マイクロプロセッサを使用する。これらのプロセッサは、低速の８０８６マイクロプロセッサをエミュレートするための仮想またはリアル・モード、或いは、特定モデルでは、アドレス指定範囲を１メガバイトから４ギガバイトに拡張するプロテクト・モードで動作し得る。基本的に、８０２８６、８０３８６及び８０４８６プロセッサのリアル・モード機構は、８０８６及び８０８８マイクロプロセッサ用に作成されたソフトウェアとのハードウェア互換性を提供する。上述のインテル・ファミリのプロセッサは、しばしば、例えば"４８６"のように、完全な型名指定子の最後の３桁だけの参照により識別される。
【００２４】
図３及び図４を再度参照すると、ＣＰＵローカル・バス４２（図示されないデータ、アドレス、及び制御要素を含む）は、マイクロプロセッサ４０、演算コプロセッサ４４（ＣＰＵ４０に含まれない場合）、ビデオ制御装置５６、システム・キャッシュ・メモリ６０、及びキャッシュ制御装置６２を提供する。ビデオ制御装置５６は、モニタ（またはビデオ表示端末）１１及びビデオ・メモリ５８に関連付けられる。更にＣＰＵローカル・バス４２には、バッファ６４が接続される。バッファ６４はそれ自身、（ＣＰＵローカル・バス４２に比較して）低速のシステム・バス６６に接続され、同様にアドレス、データ及び制御要素を含む。システム・バス６６は、バッファ６４と別のバッファ６８との間で拡張される。システム・バス６６は更に、バス制御、タイミング・ユニット７０及びＤＭＡユニット７１に接続される。ＤＭＡユニット７１は、中央アービタ８２とＤＭＡ制御装置７２とから構成される。追加のバッファ７４は、システム・バス６６とＩＳＡ（Industry Standard Architecture）バス７６などのオプション機構バスとの間のインタフェースを提供する。バス７６には、ＩＳＡアダプタ・カード（図示せず）を受け取るための複数のＩ／Ｏスロット７８が接続される。ＩＳＡアダプタ・カードはＩ／Ｏスロット７８にプラグ式に接続され、システム１０のための追加のＩ／Ｏ装置またはメモリを提供したりする。
【００２５】
アービトレーション制御バス８０は、ＤＭＡ制御装置７２を中央アービタ８２に、また中央アービタ８２をＩ／Ｏスロット７８、ディスケット・アダプタ８４、及び統合ドライブ・エレクトロニクス（ＩＤＥ）固定ディスク制御装置８６に接続する。
【００２６】
マイクロコンピュータ・システム１０は基本４メガバイトＲＡＭモジュール５３を有するように示されるが、図３及び図４に示されるように、任意選択の高密度メモリ・モジュール５４の追加により追加のメモリが相互接続されてもよい。説明の都合上の理由から、本発明は基本４メガバイト・メモリ・モジュールに関して述べられる。
【００２７】
ラッチ・バッファ６８は、システム・バス６６とプレーナＩ／Ｏバス９０との間に接続される。プレーナＩ／Ｏバス９０は、アドレス、データ、及び制御要素をそれぞれ含む。プレーナＩ／Ｏバス９０に沿って、様々なＩ／Ｏアダプタ及び他のコンポーネントが接続され、それらには、ディスケット・アダプタ８４、ＩＤＥディスク・アダプタ８６、割込み制御装置９２、ＲＳ２３２アダプタ９４、不揮発ＣＭＯＳ  ＲＡＭ９６（ＮＶＲＡＭとしても参照される）、ＣＭＯＳリアル・タイム・クロック（ＲＴＣ）９８、パラレル・アダプタ１００、複数のタイマ１０２、読出し専用メモリ（ＲＯＭ）８８、８０４２  １０４、及びパワー管理回路１０６が含まれる。１０４として示される８０４２は、キーボード１２及びマウス１３とインタフェースするスレーブ・マイクロプロセッサである。パワー管理回路１０６は、電源装置１７、電源スイッチ２１、パワー／フィードバックＬＥＤ２３、及び内部モデム９００及び（または）外部モデム９０２と回路的に通信する。外部モデムは通常、当業者には既知のように、壁上のアウトレットに接続される変圧器９０４に接続される。モデム９００、９０２は通常の電話アウトレットに接続される。パワー管理回路１０６は図７乃至図９及び図１０に示され、図７乃至図９、図１０、図１１及び図１３に関連して詳細に述べられる。読出し専用メモリ８８は、Ｉ／Ｏ装置とマイクロプロセッサ４０のオペレーティング・システムとの間でインタフェースするために使用されるＢＩＯＳを含む。ＲＯＭ８８に記憶されるＢＩＯＳは、ＢＩＯＳの実行時間を低減するために、ＲＡＭ５３にコピーされ得る。ＲＯＭ８８は更に（ＲＯＭＳＥＬ信号を介して）メモリ制御装置４８に応答する。ＲＯＭ８８がメモリ制御装置４８によりイネーブルされると、ＢＩＯＳがＲＯＭから実行される。ＲＯＭ８８がメモリ制御装置４８によりディセーブルにされると、ＲＯＭはマイクロプロセッサ４０からのアドレス照会に応答しない（すなわちＢＩＯＳがＲＡＭから実行される）。
【００２８】
リアル・タイム・クロック９８は時刻計算のために使用され、ＮＶＲＡＭ９６はシステム構成データを記憶するために使用される。すなわち、ＮＶＲＡＭ９６はシステムの現在の構成を示す値を含む。例えば、ＮＶＲＡＭ９６は固定ディスクまたはディスケットの容量、表示タイプ、メモリ容量、時刻、日付などを示す情報を含む。更に、これらのデータは、例えば構成設定などの特殊な構成プログラムが実行されるとき、ＮＶＲＡＭに記憶される。構成設定プログラムの目的は、システムの構成を特長付ける値をＮＶＲＡＭに記憶することである。
【００２９】
ほとんど全ての前記装置が揮発レジスタを含む。図面の不必要な乱雑を避けるために、特定の装置のレジスタはその装置を参照して代替することにする。例えば、ＣＰＵレジスタはＣＰＵ４０レジスタとして参照され、ビデオ制御装置レジスタは、ビデオ制御装置５６レジスタとして参照される。
【００３０】
上述のように、コンピュータは一般に参照番号１５で示されるカバーを有し、カバー１５はシャシ１９と共に、マイクロプロセッサの前記識別コンポーネントを収容する包囲遮蔽容積を形成する。カバー１５は好適には、成形可能な合成材料から成る単一の成形要素である外部装飾カバー部材１６と、装飾カバー部材の構成に従うように形成される金属の薄いシート・ライナ１８とから形成される。しかしながら、カバーは他の既知の方法によっても形成されることができ、本発明の有用性は、上述のタイプのエンクロージャに制限されるものではない。
【００３１】
動作状態：
図５を参照すると、本発明のコンピュータ・システムの状態図が示される。本発明のコンピュータ・システム１０は、正常動作状態１５０、待機状態１５２、延期状態１５４、及びオフ状態１５６の４つの状態を有する。図５に示される状態間の遷移は好適な態様を表すが、これに制限されるものではない。結果的に、追加の事象が状態遷移を生じるために使用されてもよい。
【００３２】
本発明のコンピュータ・システム１０の正常動作状態１５０は、通常のデスクトップ・コンピュータの正常動作状態と同一である。ユーザはアプリケーションを使用したり、基本的にコンピュータを任意の他のコンピュータと同様に取り扱い得る。ユーザには透過的であるが、１つの違いは、オペレーティング・システム内のパワー管理ドライバ（ＡＰＭ  ＯＳドライバ）（これはバックグラウンドで実行される）及び様々なＡＰＭ  ＢＩＯＳルーチンの存在である。ＡＰＭ  ＢＩＯＳルーチンは以降で述べられるように、延期ルーチン、再開ルーチン、ブートアップ・ルーチン、スーパバイザ・ルーチン、ＣＰＵ状態保管ルーチン、及びＣＰＵ状態復元ルーチンを含む。どの図面にも示されていないＡＰＭ  ＢＩＯＳルーチンは、ＡＰＭ  ＢＩＯＳ経路指定ルーチンである。ＡＰＭ  ＢＩＯＳ経路指定ルーチンは、本質的にＡＰＭ  ＯＳドライバからコマンドを受諾し、適切なＡＰＭ  ＢＩＯＳルーチンを呼び出す。例えば、ＡＰＭ  ＯＳドライバが延期コマンドを発行するとき、ＡＰＭ  ＢＩＯＳ経路指定ルーチンが延期ルーチンを呼び出す。別の例では、ＡＰＭ  ＯＳドライバが事象獲得コマンドを発行する度に、ＡＰＭ  ＢＩＯＳ経路指定ルーチンがスーパバイザ・ルーチンを呼び出す。これらのルーチンはＢＩＯＳ内に配置され、ＢＩＯＳがシャドーイング（shadowing）されるときに、シャドーイングされる。ＯＳ内のパワー管理ドライバ及びＡＰＭ  ＢＩＯＳルーチンは、４つの状態間のコンピュータの遷移を制御する。用語"ＡＰＭ"の参照は一般にＡＰＭ  ＯＳドライバの参照を意味するが、状況によっては別の呼び方をし得る。
【００３３】
第２の状態、すなわち待機状態１５２は、正常状態１５０よりも少ない電力を使用するが、アプリケーションを実行状態に維持する。一般に、待機状態１５２では、装置をそれぞれの低電力モードに設定するコードにより、電力が節減される。好適な態様では、待機状態１５２において、以降で詳述されるように、固定ディスク記憶装置３１内の固定ディスク（図示せず）の回転を停止することにより、及びビデオ信号の生成を停止することにより、及びＣＰＵ４０を低電力モードに設定することにより、電力が節減される。しかしながらこれに限るものではなく、消費電力を低減するためにＣＰＵクロックを遅くするまたは停止するなど、他の方法も使用され得る。
【００３４】
好適な態様では電力が３つの別々の方法で節減される。第１に、正常動作状態１５０では、固定ディスク記憶装置３１内の固定ディスクが、例えば１分当たり３６００、４５００または５４００回転（ＲＰＭ）で一定に回転する。待機状態１５２では、ＩＤＥディスク制御装置８６が、固定ディスク記憶装置３１を低電力モードに入力させる（固定ディスク記憶装置３１内の固定ディスクが回転を停止する）コマンドを提供され、それにより、固定ディスク記憶装置３１内のモータ（図示せず）が固定ディスクを回転させる間の通常消費する電力を節減する。
【００３５】
第２に、正常動作状態１５０では、コンピュータ・システムのビデオ制御装置５６は、絶えず、ビデオ表示端末１１上に表示されるイメージに対応するビデオ信号（既知のＨＳＹＮＣ、ＶＳＹＮＣ、Ｒ、Ｇ、Ｂなど）を生成する。待機状態１５２では、ビデオ制御装置５６はビデオ信号の生成を停止し、それにより通常、ビデオ制御装置５６により消費される電力を節減する。ＨＳＹＮＣ、ＶＳＹＮＣ、Ｒ、Ｇ、Ｂは、全て約０．００ＶＤＣに駆動される。ＶＥＳＡ（Video Electronics Standards Association）準拠のモニタの使用が更に電力節減を可能にする。なぜなら、ＶＥＳＡ準拠のモニタは、ＨＳＹＮＣ及びＶＳＹＮＣが約０．００ＶＤＣのとき、それら自身をオフにするからである。
【００３６】
第３に、正常動作状態１５０ではＣＰＵ４０が絶えずコマンドを実行し、それにより電力を消費する。待機状態１５２では、ＢＩＯＳがＡＰＭ  ＣＰＵアイドル呼び出しに応答して停止命令を発行する。停止命令の実行は、次のハードウェア割込みが発生するまでＣＰＵ消費電力を多大に低減する。真にアイドル状態の時には、ＣＰＵは９０％以上の時間を停止状態に維持し得る。
【００３７】
システムによっては、ビデオ表示端末の正面のリンのバーン・イン（焼付き）を回避するように、画面１１を暗転する"スクリーン・セーバ"を有する。ほとんどのこうしたシステムでは、ビデオ表示装置５６は依然ビデオ信号を生成しており、暗転画面または動的画面に対応するビデオ信号を単に生成している。従って、スクリーン・セーバを実行するコンピュータ・システムは、ビデオ信号を生成するために必要な電力を依然消費する。
【００３８】
第３の状態は延期状態１５４である。延期状態１５４では、コンピュータ・システムは極めて少量の電力を消費する。好適な態様では、延期状態のコンピュータは１００ミリワット以下の電力を消費する。消費される電力は、電源装置１７の非効率性により消費される約５ワットと、パワー管理回路１０６により使用される少量の電力だけである。
【００３９】
電力のこの少量の使用は、電源装置１７を"オフ"する以前に、コンピュータ・システムの状態を固定ディスク記憶装置（ハード・ドライブ）３１に保管することにより達成される。延期状態１５４に入力するために、ＣＰＵ４０はあらゆるアプリケーションを中断し、ＣＰＵのプログラム実行制御をパワー管理ドライバに渡す。パワー管理ドライバはコンピュータ・システム１０の状態を確認し、コンピュータ・システムの状態全体を、固定ディスク記憶装置３１に書込む。ＣＰＵ４０レジスタ、ＣＰＵキャッシュ４１、システムＲＡＭ５３、システム・キャッシュ６０、ビデオ制御装置５６レジスタ、ビデオ・メモリ５６、及び残りの揮発レジスタの状態が、全て固定ディスク・ドライブ３１に書込まれる。コンピュータ・システム１０の状態全体がこのように保管され、重大な有用性の欠点無しに復元され得る。すなわちユーザは、システムが通常通りにオペレーティング・システムをロードし、グラフィック・ユーザ・インタフェース及びアプリケーション・プログラムをロードするのを待機する必要がない。
【００４０】
コンピュータは次に、システムが延期されたことを示すデータを不揮発ＣＭＯＳメモリ９６に書込む。最後に、ＣＰＵ４０がマイクロコントローラＵ２（図７乃至図９参照）に指令し、電源装置１７が±５ＶＤＣ及び±１２ＶＤＣラインを通じてシステムに調整電圧を供給することを停止させる。コンピュータ・システム１０はこの時パワーダウンされ、コンピュータの状態全体が固定ディスク記憶装置３１に安全に保管される。
【００４１】
用語"状態"は、本明細書を通じて２つの類似の混乱し得る態様で使用される。装置は特定の状態にあり得る。４つのシステム状態、すなわち正常状態１５０、待機状態１５２、延期状態１５４、及びオフ状態１５６は、本発明のコンピュータ・システム１０の一般状態を指す。これらの"状態"は、コンピュータ・システム１０を一般的な方法で説明する。例えば、正常動作状態１５０では、ＣＰＵ４０はコードを実行しており、システム１０内の複数のレジスタを変更している。同様に、類似の活動が待機状態１５２の間にも発生する。従って、コンピュータ・システム１０のメモリ及びレジスタ構成は、システム１０が正常動作状態１５０及び待機状態１５２の間には動的である。
【００４２】
他の装置も特定の状態にあり得る。パワー管理回路１０６は好適には、様々なパワー管理機構を実現するために、図７乃至図９に示されるマイクロコントローラＵ２などの、第２のプロセッサをパワー管理プロセッサとして使用する。多くのこうしたプロセッサが適しているが、この特定の態様では、パワー管理プロセッサは、事前にプログラム済みの８３Ｃ７５０マイクロコントローラである。マイクロコントローラＵ２の変数及びピンは、添付の図７乃至図９に関連して説明されるように複数の状態を取り得る。
【００４３】
例えば、上述の"状態"をある装置の"状態"、例えば"コンピュータ・システム１０の状態"または"ＣＰＵ４０の状態"と対比してみよう。装置の"状態"は、特定のコンピュータ・サイクルにおけるその装置の状態を指す。全てのメモリ位置及びレジスタが、特定の２進値を有する。装置の"状態"は、その装置の内容の静的２進スナップショットである。
【００４４】
コンピュータ・システム１０の"状態"は動作的に等価なことを指し、必ずしも正確なコピーを指すものではない。例えば、状態Ａのコンピュータ・システムは、ＣＰＵキャッシュ４１またはシステム・キャッシュ６０内に、特定のメモリを有し得る。いずれかのキャッシュの内容をシステムＲＡＭ５３に"フラッシュ・バック（flush back）"し、コンピュータ・システムを状態Ｂに移行することが可能である。純粋に述べれば、状態Ａのコンピュータ・システムの状態は、状態Ｂのコンピュータ・システムの状態とは異なる。なぜなら、キャッシュ及びシステムＲＡＭの内容が異なるからである。しかしながらソフトウェアの動作的観点から見ると、状態Ａは状態Ｂと同じである。なぜなら、システム速度の若干の低下（プログラムがキャッシュから実行される優位性を有さないことに起因する）を除けば、実行プログラムは影響を受けないからである。すなわち、状態Ａのコンピュータ及び状態Ｂのコンピュータは、たとえコンピュータがそのキャッシュをフラッシュされ、キャッシュ領域が有用なコードにより再ロードされるまで、若干の性能低下に遭遇するとしても、ソフトウェア上は動作的に等価である。
【００４５】
本明細書で述べられるように、本発明は、コンピュータ・システムに代替ロードされる多重記憶コンピュータ状態を意図する。本明細書で使用される用語"記憶（stored）コンピュータ状態"及び"システム状態"は、実行可能ファイルに記憶される単に実行可能なコード、または実行可能ファイルへのオーバレイと区別されるべきである。これらの用語はまた、仮想メモリ機構に記憶されるコードのページまたはコードの他のチャンク（chunk）とも区別されるべきである。用語"記憶コンピュータ状態"及び"システム状態"は、実行中のコンピュータ・システム内の揮発メモリ及び揮発レジスタから、不揮発メモリなどの別のロケーションへの値の記憶を意図する。しかしながら、例えば圧縮によりシステム状態またはコンピュータ状態を可逆的に変更することによっても、"記憶コンピュータ状態"または"システム状態"になる。"記憶コンピュータ状態"及び"システム状態"を生成する例が、図１９乃至図２５の延期ルーチンに示される。
【００４６】
用語"パワー"もまた２つの混乱し得る態様で使用される。"パワー"は最も頻繁には電力を指す。しかしながら、"パワー"は、時に計算能力を指すこともある。文脈から意図される使用が明らかとなろう。
【００４７】
"回路"は一般に、電気的に相互接続される物理的電子装置または複数の装置を指す。しかしながら、用語"回路"は、物理的電子装置のＣＰＵコードに等価なものを包含するようにも意図される。例えば、一方では、２入力ＮＡＮＤゲートが７４ＬＳ００により、またはプログラマブル装置によっても等価に実現され得る。これら２つの装置は物理的電子装置である。他方、ＮＡＮＤゲートは、ＣＰＵ４０が２つのＣＰＵ読出し可能な入力ポートから２つの入力を読出し、ＣＰＵコマンドを用いてＮＡＮＤ結果を生成し、結果をＣＰＵ書込み可能な出力ポートに出力することによっても、実現され得る。これらのＣＰＵインタフェース可能なポートは、復号ラッチまたはそれに等価なプログラマブル装置のように単純であったり、既知のＰＩＡのように複雑であったりする。用語"回路"は、ＮＡＮＤゲートの場合のこれら３つの全ての例を含むように、十分に広く解釈されるべきである。特定の場合では、"回路"は単に電気経路を指し得る。電気経路のタイプには、ワイヤ、トレースまたはプリント回路基板を介するもの、或いは単一の電気接続経路を形成するこれらの電気経路の任意の組み合わせが含まれる。
【００４８】
"信号"は、単一の電気波形または複数の波形を指し得る。例えば、ビデオ制御装置はビデオ信号を生成する。ビデオ信号は、実際には複数の電気導体上の複数の信号、すなわち既知のＨＳＹＮＣ、ＶＳＹＮＣ、Ｒ、Ｇ、Ｂなどである。
【００４９】
"回路接続（circuit communication）"は本明細書では、装置間の電気的関係を示すために使用される。２つの装置は、それらが同一回路内にあり、一方からの信号が他方により受信される場合、その信号がある他の装置により変更されるか否かに関わらず、回路接続されると称する。例えば、変圧器または光絶縁器により分離される２つの装置は、一方からの信号が他方に達する場合、たとえその信号が中間装置により変更されようと、回路接続されると称する。別の例として、アナログ積分器回路により分離される２つの装置は、一方が他方から積分信号を受信する場合、回路接続されると称する。更に別の例として、デジタル・バッファにより分離される２つの装置は、回路接続されると称する。最後の例として、互いに直接接続されないが、両者が第３の装置、例えばＣＰＵとインタフェース可能な２つの装置は、回路接続されると称する。
【００５０】
図５を再度参照すると、第４の最後の状態はオフ状態１５６である。オフ状態１５６は事実上、通常の意味でオフされた任意の通常のコンピュータ・システムと同一である。この状態では、電源装置１７の１次／調整ユニット１７２（図６参照）が、調整電圧をコンピュータ・システム１０に供給するのを停止する（但し、図６に関連して詳述されるように、ＡＵＸ５を介する少量の調整電圧を除く）。しかしながら、コンピュータ・システム１０の状態は、固定ディスク３１に保管されない。延期状態１５４及びオフ状態１５６は、電源装置１７がもはや調整電圧を生成しない点で類似する。しかしながら、オフ状態１５６では、延期状態１５４の場合のようにコンピュータ・システム１０の状態がハード・ドライブ３１に保管されることがない点で、これらの状態は異なる。更に、オフ状態１５６を去るときには、コンピュータ１０はあたかもオンされていたかのように"ブート"する。すなわち、任意の実行コードがユーザにより、または自動的にAUTOEXEC.BATファイルなどの手段により、開始されなければならない。しかしながら、延期状態１５４を去るときには、コンピュータ１０はそれが中断されたときの状況から実行を再開する。
【００５１】
図５はまた、４つの状態間の遷移を引き起こす事象の一般的な概要を示す。これらの事象は図７乃至図１４に関連して詳述されるが、概要を述べることが理解を助けるであろう。電源ボタン２１、少なくとも２つのタイマ（不活動待機タイマ及び不活動延期タイマ。図１５乃至図１８及び関連説明を参照）、タイマを呼び起こす時間（分）、及び延期許可フラグ（図７乃至図９及び図１３、並びに関連説明を参照）の全てが、コンピュータがどの状態に入力するかに影響する。一般に、前記少なくとも２つのタイマはハードウェア・タイマ、またはＣＰＵ上でプログラムとして実行されるＣＰＵコード・タイマである。好適な態様では、これらのタイマは両方ともＣＰＵコード・タイマであり、ＢＩＯＳデータ・セグメントから実行される。しかしながら、２つのタイマはハードウェア・タイマとしても考えられ、この方がシステムのオーバヘッドを低減するという点で、より優れた解決方法である。これらのタイマについては、図１５乃至図１８に関連して詳述される。両タイマは、コンピュータ１０が正常動作状態１５０または待機状態１５２の時、アクティブである。タイマは他のルーチンと対話し、いずれかのタイマの満了が、後述のように状態間の遷移を引き起こす。いずれか一方のまたは両方のタイマは、ユーザの特定のニーズに依存して、特定の時間期間の後に満了するように構成される。好適な態様では、不活動待機タイマ及び不活動延期タイマが、１０分乃至９０分後に満了するようにセットされる。本明細書で述べられるように、不活動延期タイマはまた、システムが無人操作（unattended fashion）でブートされ、ある時間（例えば２分乃至５分）不活動が継続する場合に、システムが自身をより短い時間延期させる第２のレベルを有する。すなわち、不活動延期タイマは、システムがユーザにより付き添われる場合には、長い時間の後に満了し、システムがユーザにより付き添われない場合には、短い時間の後に満了するように構成され得る。システムは、入来電話呼び出しに関連付けられる接続電話回線の着呼により、または内部警報により、無人操作により起こされ得る。これらの両方の場合、及び可能な他の場合では、システムはユーザにより付き添われる場合よりも、短い時間延期されるべきである。別の態様では、２つの不活動延期タイマが存在し、一方がより短い満了時間を有する。この場合、一方のタイマがイネーブルにされ、他方はディセーブルされる。
【００５２】
任意のタイマが停止され得る。すなわち決して満了しないように構成され得る。タイマの"停止"は、実際にタイマの増分カウント動作を停止するか、単にそれらの満了を無視する形態を取る。好適な態様では、タイマ満了値として０をセットすることにより、タイマの満了をテストしないようにする。例えば、ネットワーク接続されるコンピュータのユーザは、コンピュータを延期状態１５４に入力させたくない。なぜなら、そうすることは、そのコンピュータに関連して、ＬＡＮを故障させ得るからである。
【００５３】
理論的には、タイマはカウント・アップまたはカウント・ダウンし、固定の所定状態にリセットされ、タイマが開始（再始動）されるとき、別の固定の所定状態に対してカウントするように期待されるか、或いは現在値が使用されて、差または合計がエンドポイント満了トリガとして計算される。好適な態様では、タイマがリセットされるとき、時間（分）変数の現在値がリアル・タイム・クロック９８から記憶される。タイマは、現時刻値（分）を保管時刻値（分）から減算し、差をユーザにより選択された値と比較することにより、その満了をチェックされる。
【００５４】
両方のタイマは特定のシステム活動により影響される。例えば、好適な態様では、キーボード１２のキーの押下、マウス１３の移動、マウス１３ボタンの押下などの形態のユーザ活動、またはハード・ドライブ３１の活動が、図１５乃至図１８に関連して詳述されるように、タイマを再始動させる。従って、ユーザがキーボード１２のキーを押下するかまたはマウス１３を使用している間、或いはアプリケーションがハード・ドライブ３１をアクセスしている間、いずれのタイマも満了しない。更に、他のシステム事象もタイマをリセットするために使用され得る。代わりに、任意のハードウェア割込みが、活動に対応してモニタされてもよい。従って、印刷（ＩＲＱ５またはＩＲＱ７）またはＣＯＭＭポート・アクセス（ＩＲＱ２またはＩＲＱ３）により、システムが延期状態１５４に入力するのを阻止することが望ましかろう。
【００５５】
延期許可フラグは、マイクロコントローラＵ２内のＣＰＵ操作可能かつ読出し可能なラッチであり、図７乃至図９に関連して以降で詳述される。端的に言えば、マイクロコントローラＵ２をあるモードに設定すると、スイッチ２１の押下によりシステム１０がオフ状態１５６に入力し、マイクロコントローラＵ２を別のモードに設定すると、スイッチ２１の押下によりシステム１０が延期モード１５４に入力する。コンピュータ・システム１０が正常動作状態１５０であり、マイクロコントローラＵ２に書込まれる延期許可フラグがクリアされている間に電源ボタン２１が押下されると、コンピュータ・システム１０は１５８で示されるようにオフ状態１５６に入力する。コンピュータ・システム１０がオフ状態１５６のときに電源ボタン２１が押下されると、コンピュータ・システムは１６０で示されるように、正常動作状態１５０に入力する。更に、後述される複数の"外部事象"によっても、システムはオフ状態１５６から正常動作状態１５０に遷移し得る。
【００５６】
コンピュータ・システム１０が正常動作状態１５０の場合、ある事象がコンピュータ・システムを待機状態１５２に入力させ得る。不活動待機タイマが満了すると、コンピュータ・システム１０は１６２に示されるように待機状態に変化する。別の態様では、コンピュータ・システム１０はダイアログ・ボックス、スイッチまたは他の入力装置など、ユーザにシステムを即時待機状態に入力させる手段を提供する。待機状態１５２では、ユーザが電源ボタン２１を押下するなどの、上述の類の任意のシステム活動またはユーザ活動が、コンピュータ１０を待機状態１５２から退去させ、１６４に示されるように正常動作状態１５０に再入力させる。
【００５７】
電源ボタン２１の押下により、システムは待機状態１５２から正常動作状態１５０に変化し、ユーザの混乱を回避する。上述のように、待機状態の間、モニタ１１はブランクにされ、パワー／フィードバックＬＥＤ２３が、マイクロコントローラＵ２内のフラグがどのように構成されるかに依存して、点灯または点滅する。システムに接近するユーザは、モニタ１１がブランクであることに気付き、システムが延期状態１５４またはオフ状態１５６であると考え、システムを正常動作状態１５０に入力させようとして電源ボタン２１を押下し得る。電源ボタン２１の押下がシステムを延期状態１５４またはオフ状態１５６に入力させる場合、前記のユーザはコンピュータをオフしたか延期したことになり、意図したことと正反対の結果を得る。従って待機状態１５２のとき、電源ボタン２１の押下は、システムを待機状態から正常動作状態に変化させる。たとえアイドル状態であっても、ＣＰＵ４０はすぐにスイッチが押下されたかどうかをテストする。ハードウェア割込みは、１秒当たり約２０回、ＣＰＵ４０をアイドル状態から退去させ、その後、次のＡＰＭ事象獲得の間に、マイクロコントローラＵ２は、スイッチ２１が押下されたかどうかを判断するように問われる。
【００５８】
コンピュータ１０が正常動作状態１５０の場合、２つの事象がそれを延期状態１５４に入力させ得る。第１に、不活動延期タイマが満了すると、１６６で示されるようにコンピュータ・システム１０が延期状態１５４に変化する。第２に、マイクロコントローラＵ２に書込まれる延期許可フラグがセットされている間に、ユーザが電源ボタン２１を押下することにより、同様に１６６で示されるように、即時コンピュータ１０を延期状態１５４に入力させることができる。更に別の態様では、ＡＰＭドライバが"パワー状態を延期に設定する"ためのコマンドを介して、延期要求を発行することができる。このコマンドは、ＡＰＭ  ＢＩＯＳドライバに延期ルーチンを呼び出させる。延期状態１５４の間、ユーザは電源ボタン２１を押下することにより、１６８に示されるように正常動作状態１５０に変化させることができる。
【００５９】
更に、複数の外部事象が、システム１０を延期状態１５４から正常動作状態１５０に（１６８）、またはオフ状態１５６から正常動作状態１５０に（１６０）変化するために使用され得る。例えば、図７乃至図９の回路内のマイクロコントローラＵ２内の電話着呼検出回路が、接続電話回線が着呼するときシステム１０をオフ状態１５６または延期状態１５４から退去させ、正常動作状態１５０に入力させるように構成される。こうした機構は、テレファックス・データまたはデジタル・データを受信するシステムにとって有用である。システムは電話着呼に応答して正常動作状態１５０に入力し、入来ファクシミリ伝送の受諾、ファイルのアップロードまたはダウンロード、システムへの遠隔アクセスの許可などのプリセット機能を実行し、不活動延期タイマの満了に応答して再度延期モードに入力する。そしてシステムが正常動作状態の間にのみ、電力を消費する。
【００６０】
同様に、マイクロコントローラＵ２は警報カウンタを呼び起こす時間（分）を実現し、これはアラーム・タイプの事象により、システム１０が延期状態１５４またはオフ状態１５６から退去し、正常動作状態１５０に入力することを可能にする。こうしたシステムは、安価な電話利用料金を利用するように、テレファックスまたはデジタル・データを特定の時刻に送信するために、またシステム・ハード・ドライブ３１をテープ・バックアップ・システムによりバックアップするなど、システム保守機能を実行するために有用である。後者の場合では、スケジューラがテープ・バックアップ・プログラムを実行させる以前の固定時間の間、警報呼び起し時間がマシンをオンするようにセットされる。別の態様では、テープ・バックアップ・プログラムを実行するために、ＡＰＭ  ＢＩＯＳスケジューラが使用される。
【００６１】
最後に、コンピュータ・システム１０が待機状態１５２で、不活動延期タイマが満了すると、コンピュータ１０は１７０で示されるように延期状態に変化する。コンピュータ・システム１０は逆に延期状態１５４から待機状態１５２へは変化することができず、唯一正常動作状態１５０へは、後述の遷移１６８に関連して述べられるように遷移し得る。
【００６２】
明らかなように、コンピュータ・システム１０は即座には状態を変化することができない。４つのある状態からの各遷移において、必要なシステム変化を達成するために特定の時間が要求される。各遷移時間の詳細は、図７乃至図４５に関連して述べられる。
【００６３】
システム・ハードウェア：
ＣＰＵ４０上で実行されるコードの詳細について述べる前に、最初に４つの状態を達成するために要求されるハードウェアについて述べることが役立つであろう。電源装置１７のブロック図が、図６に示される。電源装置１７は、制御ユニット１７４及び１次／調整ユニット１７２の２つのユニットを有する。電源装置１７は複数の入力を有し、それらには、通常の壁上のアウトレットから１１５ＶＡＣまたは２２０ＶＡＣを受け取るＡＣライン入力（ACLine-In）、及び電源装置１７の調整活動を制御するＯＮ＃が含まれる。電源装置１７は複数の出力、すなわちＡＣライン出力（ACLine-Out）、±５ＶＤＣ、±１２ＶＤＣ、ＡＵＸ５、ＧＮＤ、及び電源良好（POWERGOOD）を有する。AC Line-Outは１１５ＶＡＣであり、通常、ビデオ表示端末１１の電源入力（図示せず）に接続される。制御ユニット１７４はＯＮ＃入力を受諾し、POWERGOOD出力を生成する。１次／調整ユニット１７２は、Line-In入力からの１１５ＶＡＣを、選択的に±５ＶＤＣ、±１２ＶＤＣに降圧調整する。１次／調整ユニット１７２が電源を±５ＶＤＣ及び±１２ＶＤＣラインに調整するかどうかは、制御ユニット１７４によりインタフェースされるＯＮ＃の値に依存する。好適な実施例では、制御ユニット１７４は、例えば適切な光絶縁器を用い、ＯＮ＃信号生成回路のための絶縁を提供すべきである。
【００６４】
AC Line-In入力及びAC Line-Out出力、±５ＶＤＣ、±１２ＶＤＣ、ＧＮＤ、及びPOWERGOOD出力は、既知である。電源装置１７が"オフ"のとき、すなわちLine-Inから調整電圧を生成しないとき、POWERGOOD信号は論理０である。電源装置１７が"オン"のとき、電源装置１７は１１５ＶＡＣ Line-Inから±５ＶＤＣ及び±１２ＶＤＣ調整電圧を生成する。これらの４つの調整電圧及びそれらに関連付けられるＧＮＤは、既知のように"システム電源"である。調整電圧が受諾可能な許容差内のレベルを獲得すると、POWERGOOD信号が論理１に変化する。±５ＶＤＣまたは±１２ＶＤＣラインのいずれかが許容差から外れると、POWERGOOD信号が論理０となり、それによりその状態を示す。
【００６５】
ＡＵＸ５出力は補助の＋５ＶＤＣをプレーナに提供する。電源装置１７が、公称１１５ＶＡＣを供給する通常の壁上のアウトレットにプラグ挿入されると、電源装置１７が"オン"か"オフ"かに関わらず、１次／調整ユニット１７２が調整済み＋５ＶＤＣをＡＵＸ５に提供する。従って、ＡＣ電力を受け取る間、電源装置１７は常に公称＋５ＶＤＣをＡＵＸ５に提供する。ＡＵＸ５出力は、１次／調整ユニット１７２が、電源装置１７が"オン"の間にのみ＋５出力を通じて調整済み＋５ＶＤＣを生成するという点で、＋５出力とは異なる。更にＡＵＸ５出力と＋５出力との違いは、好適な実施例では、１次／調整ユニット１７２が＋５出力を通じて、＋５ＶＤＣの数アンペアの電流を供給するのに対して、１次／調整ユニット１７２はＡＵＸ５出力を通じては＋５ＶＤＣの１アンペア以下の電流しか供給しない。
【００６６】
通常の従来の電源装置は、Line-In入力を電源装置の調整セクションに接続する、またはそこから切り離すために、高アンペア双投スイッチ（double-throw switch）を使用する。本発明の電源装置１７は高アンペア双投スイッチを使用しない。むしろ、スイッチ２１はＯＮ＃信号を生成する回路を制御する。好適な実施例では、スイッチ２１はモーメンタリ単極単投プッシュボタン・スイッチである。しかしながら、当業者は、単極双投スイッチなどの他のタイプのスイッチを利用するように、図７乃至図９の回路を適応化することができよう。AC Line-Inは常に壁上のアウトレットから１次／調整ユニット１７２に接続される。ＯＮ＃信号が論理１（ほぼＡＵＸ５と等しく、公称＋５ＶＤＣ）のとき、１次／調整ユニット１７２は１１５ＶＡＣ Line-Inを、±５または±１２出力を通じて、±５ＶＤＣまたは±１２ＶＤＣに調整しない。１次／調整ユニット１７２は単に、低アンペア数の公称＋５ＶＤＣをＡＵＸ５出力に提供する。一方、ＯＮ＃が論理０（ほぼＧＮＤ）のとき、１次／調整ユニット１７２は１１５ＶＡＣ Line-Inを、４つの±５及び±１２出力を通じて、それぞれ±５ＶＤＣ及び±１２ＶＤＣに調整する。従って、ＯＮ＃が１のとき電源装置１７は"オフ"であり、ＯＮ＃が０のとき電源装置１７は"オン"である。
【００６７】
上述の電源装置１７のような、ＡＵＸ５出力及びＯＮ＃入力を有する電源装置が指定される場合、これらは通常の電源装置の製造メーカから獲得され得る。
【００６８】
図７乃至図９を参照すると、本発明のコンピュータ・システム１０の電子回路が示される。図７乃至図９の回路は、スイッチ２１と、パワー／フィードバックＬＥＤ２３と、電源装置１７と、ビデオ表示端末１１と、ＣＰＵ４０上で実行されるコードとの間のインタフェースを司る。
【００６９】
コンピュータの回路は４つの集積回路、すなわちＵ１（第１の事前プログラム済みＰＡＬ１６Ｌ８）、Ｕ２（事前プログラム済み８３Ｃ７５０マイクロコントローラ）、Ｕ３（既知の７４ＬＳ０５）、及びＵ４（第２の事前プログラム済みＰＡＬ１６Ｌ８（図示せず））と、図７乃至図９に示されるように回路接続される様々な個別コンポーネントを含む。一般に、ＰＡＬ  Ｕ１及びＵ４（図示せず）は、図３及び図４のプレーナＩ／Ｏバス９０とマイクロコントローラＵ２との間をインタフェースし、マイクロコントローラＵ２は、図７乃至図９の残りの回路とインタフェースする。また、前記残りの回路は、スイッチ２１、電源装置１７、ビデオ表示端末１１、及びプログラマブル・クロック・シンセサイザ９０６とインタフェースする。クロック・シンセサイザ９０６は、当業者には既知の多くのこうした装置の１つであってよい。こうした部品の１つに、Chrontelにより製造され、多数の販売元から入手できるＣＨ９０５５Ａがある。
【００７０】
図７乃至図９の回路は更に、スイッチ２１、１６ＭＨｚ水晶Ｙ１、１８個の抵抗器Ｒ１乃至Ｒ１８、８個のコンデンサＣ１乃至Ｃ８、３個のＮ型ＭＯＳＦＥＴＱ１乃至Ｑ３（これらは好適な実施例では、論理スイッチとして機能するのに好適な標準の低電流ＮＭＯＳ  ＦＥＴである）、及び６個の１Ｎ４１４８小信号ダイオードＣＲ１乃至ＣＲ６を含み、これら全てが図７乃至図９に示されるように構成され、接続される。抵抗器Ｒ１乃至Ｒ１８は、１／４ワット、±５％の抵抗器であり、図７乃至図９に示される値を取る。コンデンサＣ１は１０μＦ（±１０％）の電解コンデンサである。コンデンサＣ２及びＣ３は、２２μＦ（±１０％）のタンタル・コンデンサである。コンデンサＣ４乃至Ｃ８は、０．１μＦ（±１０％）のセラミック・コンデンサである。最後に、コンデンサＣ９は１０００ｐＦ（±１０％）のセラミック・コンデンサである。
【００７１】
水晶Ｙ１とコンデンサＣ２及びＣ３は、既知のように、マイクロコントローラＵ２がそのオペレーションのタイミングを制御するために使用する信号を生成する。ダイオードＣＲ１、ＣＲ３及び抵抗器Ｒ１４は、ＡＵＸ５信号をＶＢＡＴ信号から分離し、同時に、電源装置１７がＡＵＸ５信号を生成する間、バッテリ１７１が流出しないという点で、ＡＵＸ５信号がＶＢＡＴ信号を補足することを可能にする。むしろ、ＡＵＸ５信号は、ＶＢＡＴに接続される装置に適切な電圧を供給するように、ダイオードＣＲ１及びＣＲ３を通じてステップ・ダウンされる。別の態様では、ＶＢＡＴラインがＡＵＸ５ラインから分離される。
【００７２】
第２のＰＡＬ  Ｕ４（図示せず）は、アドレス・ラインＳＡ（１）乃至ＳＡ（１５）及びＡＥＮ（アドレス・イネーブル）ラインに接続される。ＳＡ（１）乃至ＳＡ（１５）及びＡＥＮは、図３及び図４に示されるプレーナＩ／Ｏバス９０の一部である。第２のＰＡＬ  Ｕ４は、単にアドレス復号器としてプログラムされ、所定のアドレスがアドレス・ラインＳＡ（１）乃至ＳＡ（１５）上に提供され、かつＡＥＮラインがアクティブのとき、アクティブ・ロウ信号ＤＣＤ＃を提供する。この特定の態様では、第２のＰＡＬ  Ｕ４は、アドレス０ＥＣＨ及び０ＥＤＨの２つの連続８ビットＩ／Ｏポートを復号化するように、事前にプログラムされる。別の態様では、ＤＣＤ＃信号が、メモリ制御装置またはＩＳＡ制御装置チップセットなどの、既知の別の電子装置により生成される。
【００７３】
第１のＰＡＬ  Ｕ１は、複数の機能を提供するようにプログラムされる。それらの機能には、（ｉ）ＣＰＵとマイクロコントローラＵ２間での、コマンド及びデータの転送を可能にする、これら両者間の読出し／書込みインタフェース、（ｉｉ）マウス割込みＩＮＴ１２とキーボード割込みＩＮＴ１との論理和、及び（ｉｉｉ）ＣＰＵ４０からのコマンドに応答して、マイクロコントローラＵ２をリセットするリセット出力が含まれる。
【００７４】
第１のＰＡＬ  Ｕ１は、本明細書では"パワー管理ポート"としても参照される２つの連続Ｉ／Ｏポートを利用する。第１のＰＡＬ  Ｕ１は、プレーナＩ／Ｏバス９０からの８個の入力、ＳＤ（４）、ＳＤ（０）、ＳＡ（０）、ＩＯＷ＃、ＩＯＲ＃、RST_DRV、ＩＲＱ１、及びＩＲＱ１２を有する。第１のＰＡＬ  Ｕ１は、当業者には既知のように、メモリ制御装置４６により生成され、ピン７（Ｉ６）に入力されるアクティブ・ハイ信号RST_DRVにより、既知の初期状態にリセットされる。
【００７５】
マイクロコントローラＵ２のリセット・ラインRST751は、ピン９に割当てられる。リセット・サブ回路９２０は、RST751信号を生成する役割をし、４個の抵抗器Ｒ４、Ｒ１６、Ｒ１７及びＲ１８、２個のコンデンサＣ１及びＣ８、並びに２個のＭＯＳＦＥＴ  Ｑ２及びＱ３を含み、第１のＰＡＬ  Ｕ１及びマイクロコントローラＵ２と、図７乃至図９に示されるように回路接続される。リセット・サブ回路９２０は、第１のＰＡＬ  Ｕ１からのリセット出力信号RESETを、マイクロコントローラＵ２のリセット入力信号RST751に、次のようにインタフェースする。すなわち、RESETラインが論理１の時、RST751ラインは論理１に引き上げられ、マイクロコントローラＵ２をリセットする。
【００７６】
第１のＰＡＬ  Ｕ１は、ＣＰＵ４０が制御ポート０ＥＤＨのビット０に論理１を書込むのに応答して、マイクロコントローラＵ２をリセットする。制御ポート０ＥＤＨのビット０への論理１の書込みにより、第１のＰＡＬ  Ｕ１がRESETラインを論理１に引き上げ、このことがRST751ラインを論理１に引き上げ、その結果、マイクロコントローラＵ２がリセットされる。ＣＰＵ４０は、制御ポート０ＥＤＨのビット０に論理０を書込むことにより、リセット要求をクリアする。
【００７７】
更に、リセット・サブ回路は、ＡＵＸ５信号の電圧が所与の量だけ上昇するとき、常にRST751ラインを論理１に引き上げ、それによりマイクロコントローラＵ２をリセットする。こうした状況は、図１１に示されるように、電源装置１７へのＡＣ源の"ブラウンアウト"（電圧低下）または"ブラックアウト"（停電）の間に、ＡＵＸ５電圧が低下した後に発生し得る。８３Ｃ７５０のメーカであるフィリップス社は、リセット問題を回避するために、単純なＲＣ回路の使用を提案している。しかしながら、単純なＲＣ回路は、電源装置のブラウンアウトの間に、８３Ｃ７５０をラッチアップさせ得る。図７乃至図９の特定の構成では、ＡＵＸ５電圧が、Ｒ４、Ｒ１６及びＣ１により決定される時定数よりも長い時間間隔、しきい値量だけ上昇するとき、RST751ラインがＲ１７及びＣ８により決定される時間間隔、論理１に引き上げられる（それによりマイクロコントローラＵ２をリセットする）。こうした状況は、通常のブラウンアウトまたはブラックアウトの後に発生し得る。図７乃至図９に示される態様では、しきい値は約１．５ＶＤＣである。
【００７８】
図１１を参照すると、ＡＣ電力が電源装置１７に供給されてＡＵＸ５が上昇する間の、及び"ブラウンアウト"が発生する間の、リセット回路９２０の波形が示される。ｔ０以前には、電源装置１７はＡＵＸ５を生成しておらず、ＶＢＡＴは約３．３Ｖであり、Ｑ３は導通してRST751ラインをグラウンドに引き下げる。ｔ０において、電源装置１７がＡＵＸ５を生成し始め、ＡＵＸ５に影響する電源内の負荷及びコンデンサにもとづく速度で、電圧が上昇し始める。ノード１はＣ１とＲ４との間のノードであり、容量的にＡＵＸ５に接続され、従ってＡＵＸ５が上昇すると上昇する。
【００７９】
ｔ１において、ノード１は約１．５Ｖに達し、これはＱ２をトリガするのに十分な電圧であり、Ｑ２がノード２をグラウンドに引き下げる。ｔ２において、ノード２が２．５Ｖに達すると、Ｑ３が導通を停止し、RST751ラインがＲ１８を介してＡＵＸ５のレベルに跳ね上がり、ＡＵＸ５と共に約５Ｖに上昇する。RST751ラインが約３Ｖになると、マイクロコントローラＵ２がリセットされる。
【００８０】
ｔ３において、ＡＵＸ５が上昇を停止し、従ってノード１が上昇を停止し、Ｃ１及びＲ４により決定される速度でグラウンドへ放電を開始する（第１のＰＡＬＵ１のRESETラインはロウ）。ｔ４において、ノード１が約１．５Ｖを通過するとき、Ｑ２が導通を停止し、ノード２がＣ８及びＲ１７により決定される速度で充電する。ｔ５において、ノード２が約２．５Ｖを通過するとき、Ｑ３が導通し、RST751ラインをグラウンドに引き下げる。従って、パワーオン時のリセットが完了し、ＡＵＸ５が５Ｖ、ＶＢＡＴが３．３Ｖ、ノード１がグラウンド、そしてノード２がＶＢＡＴとなり、システムは通常の状態となる。
【００８１】
ｔ６において、ＡＵＸ５ラインにおいてブラウンアウトが開始すると、ＡＵＸ５が放電する。ノード１は容量的にＡＵＸ５に接続されているので、ＡＵＸ５に追従しようとするが、そうすることができない。なぜなら、第１のＰＡＬ  Ｕ１内のダイオードが、ノード１が−０．５Ｖ以下に下がることを阻止するからである。ｔ７において、ＡＵＸ５がその最下点に達し、再度上昇を開始する。再び、ノード１がＡＵＸ５に追従して上昇する。ｔ８において、ノード１が約１．５Ｖに達すると、これはＱ２をトリガするのに十分であり、Ｑ２がノード２をグラウンドに引き下げる。ｔ９において、ノード２が２．５Ｖを通過するとき、Ｑ３が導通を停止し、RST751ラインがＲ１８を介してＡＵＸ５のレベルに跳ね上がり、ＡＵＸ５と共に約５Ｖに上昇する。RST751ラインが約３ＶになるときマイクロコントローラＵ２がリセットされる。
【００８２】
ｔ１０において、ＡＵＸ５が上昇を停止し、従ってノード１が上昇を停止し、Ｃ１及びＲ４により決定される速度でグラウンドへ放電を開始する（第１のＰＡＬ  Ｕ１のRESETラインはロウ）。ｔ１１において、ノード１が約１．５Ｖを通過するとき、Ｑ２が導通を停止し、ノード２がＣ８及びＲ１７により決定される速度で充電する。ｔ１２において、ノード２が約２．５Ｖを通過するとき、Ｑ３が導通し、RST751ラインをグラウンドに引き下げる。従って、ブラウンアウトに起因するリセット・サイクルが完了する。ここでこの特定のブラウンアウトの間、ノード１は３Ｖ以上には上昇せず、従ってマイクロコントローラがRST751ピンに接続されていれば、そのマイクロコントローラをリセットしなかったことに気付かれよう。しかしながら、ＡＵＸ５の電圧は４Ｖ以下に下がり、これはマイクロコントローラＵ２を不定状態に入力させるのに十分である。
【００８３】
リセットをトリガするしきい値は基準値に関連付けられ、従ってしきい値電圧を上昇または低下させるためには、基準の値（この場合ＶＢＡＴ）がそれぞれ上昇または低下されなければならない。リセット回路はマイクロコントローラＵ２のリセット保護を強化する利点を提供するが、非常に安価であり、マイクロコントローラＵ２をリセットしないときには、事実上、電力を消費しない。
【００８４】
図７乃至図９を再度参照すると、マイクロコントローラＵ２は第１のＰＡＬ  Ｕ１を介してＣＰＵ４０とインタフェースされ、多数の入力、出力及び内部的に制御可能な機能を有する。
【００８５】
SWITCH信号はピン８（Ｐ０．０）に入力され、プッシュボタン２１の現状態を反映する。プッシュボタン２１は通常、開状態である。プッシュボタン２１が開状態の間、SWITCHラインは抵抗器Ｒ１を通じて論理０（グラウンド）に引き下げられる。プッシュボタン２１が押下されるとき閉鎖事象が発生し、SWITCHラインが抵抗器１３を介して論理１（ＡＵＸ５）にプルアップされる。コンデンサＣ６はスイッチ閉鎖事象をデバウンシング（debouncing）する作用をする。スイッチ２１の閉鎖事象のそれ以上のデバウンシングは、当業者には既知のように、マイクロコントローラＵ２内で、SWITCHを所定回数（例えば５０回）読込み、SWITCHラインがこれら全てに対して同一であることを確認することにより、実行される。
【００８６】
電源装置１７の調整（reguration）は、マイクロコントローラＵ２により直接、制御され得る。図７乃至図９に示されるように、ＯＮ信号がピン５（Ｐ３．０）に出力され、抵抗器Ｒ６を介してSWITCH信号とワイヤードＯＲされ、電源装置１７のＯＮ＃信号を制御する。ＯＮ信号が論理１のとき、ＭＯＳＦＥＴ  Ｑ１が導通し、それによりＯＮ＃ライン（ＪＰ２のピン２）を論理０（ＧＮＤ）に引き下げ、電源装置１７が±５ＶＤＣ及び±１２ＶＤＣラインを通じてシステムに調整電圧を提供する。一方、ＯＮラインが論理０のとき、ＭＯＳＦＥＴ  Ｑ１は導通せず、従ってＯＮ＃ライン（ＪＰ２のピン２）は抵抗器Ｒ７により論理１（ＡＵＸ５）に引き上げられ、それにより電源装置１７は、±５ＶＤＣ及び±１２ＶＤＣラインを通じて調整電圧を供給することを停止する。
【００８７】
ＯＮラインの状態は、マイクロコントローラＵ２がスイッチ２１の閉鎖事象に応答して、及びＣＰＵ４０により書込み可能なマイクロコントローラＵ２内のレジスタ・ビットに応答して制御する。マイクロコントローラＵ２はＡＵＸ５により電力供給され、従って、マイクロコントローラＵ２は常に電力供給され、コードを実行し、システムを制御する。電源装置１７が±５ＶＤＣ及び±１２ＶＤＣラインを通じて、システムに調整電圧を提供していないときに、（ｉ）スイッチ２１が押下されるか、（ｉｉ）外部事象の１つが発生すると、マイクロコントローラＵ２はＯＮ信号をアサートし、それにより電源装置１７が±５ＶＤＣ及び±１２ＶＤＣラインを通じてシステムに調整電圧を提供する。マイクロコントローラはスイッチ２１が解除された後にもＯＮ信号をアサートし続ける。
【００８８】
電源装置１７はバックアップ・システムとしても、ユーザの直接制御の下でプッシュボタン２１を介してオンされ得る。このオプションは通常、マイクロコントローラＵ２が期待通りに機能を停止する場合にのみ使用され、電源ボタン２１の押下に応答して、システムがパワーアップしないことにより証明される。図７乃至図９に示されるように、スイッチ２１はまた、ダイオードＣＲ２、ＭＯＳＦＥＴ  Ｑ１、抵抗器Ｒ７及びコネクタＪＰ２を介して、電源装置１７のＯＮ＃ラインを制御する。通常プッシュボタン２１は開状態であり、SWITCHラインはＲ１を介して論理０に引き下げられており、ＭＯＳＦＥＴ  Ｑ１は導通していない。従って、ＯＮ＃ライン（ＪＰ２のピン２）は抵抗器Ｒ７により論理１（ＡＵＸ５）に引き上げられ、電源装置１７は±５ＶＤＣ及び±１２ＶＤＣラインに調整電圧を供給していない。プッシュボタン２１が押下され、ユーザにより保持されると、SWITCHラインが論理１に引き上げられ、ＭＯＳＦＥＴ  Ｑ１が導通し、それによりＯＮ＃ライン（ＪＰ２のピン２）を論理０（ＧＮＤ）に引き下げ、電源装置１７が±５ＶＤＣ及び±１２ＶＤＣラインに調整電圧を供給し始める。システムが電力供給された後に依然ボタン２１が保持されていると、ＢＩＯＳがＣＰＵ４０に、マイクロコントローラＵ２が依然機能しているか否かをテストさせる。機能していない場合、ＣＰＵ４０はマイクロコントローラＵ２をリセットし、Ｕ２はリセット後、スイッチ２１が押下されていることを検出する。結果的に、ボタン２１が依然保持されているとマイクロコントローラＵ２はＯＮ信号をアサートし、ユーザはマイクロコントローラＵ２が電源装置１７を制御していることを知り、最終的にスイッチ２１を解除することができる。このバックアップ・オプションを使用するために、ユーザはボタン２１を数秒のオーダの所定期間（ロゴが現れた後の約２秒）押下しなければならない。
【００８９】
マイクロコントローラＵ２は、（ｉ）スイッチ２１が押下されるか、（ｉｉ）ＣＰＵ４０がマイクロコントコーラにシステムをオフするように指令することに応答してのみ、システムをオフする。マイクロコントローラＵ２にとってこれらの事象は同一である。なぜなら、マイクロコントローラＵ２は、スイッチの押下がスイッチ２１の閉鎖事象またはＣＰＵ４０のいずれかにより生成され得るように構成されるからである。ハードウェア・ボタンの押下／解除は事実上、ソフトウェア・ボタンの押下／解除と同じに処理される。マイクロコントローラＵ２は、マイクロコントローラＵ２内の延期許可フラグがクリアされていれば、ＣＰＵによるコマンド無しにシステムをオフする。この場合、スイッチ２１の閉鎖事象に応答して、システムが電力供給され、延期許可フラグがクリアされるとき、マイクロコントローラＵ２はＯＮ信号をクリアし、それにより電源装置１７は±５ＶＤＣ及び±１２ＶＤＣラインへの調整電圧の供給を停止する。ＯＮ信号は、スイッチ２１が解除された後もクリア状態を維持する。
【００９０】
マイクロコントローラＵ２は、ＣＰＵによるコマンドに応答してもシステムをオフし、こうしたコマンドは、システム状態が（延期の）ハード・ディスク・ドライブに成功裡に保管された後に発行される。こうしたコマンドに応答して、マイクロコントローラＵ２はＯＮ信号をクリアし、それにより電源装置１７は±５ＶＤＣ及び±１２ＶＤＣラインを通じて、システムに調整電圧を供給することを停止する。
【００９１】
マイクロコントローラＵ２はまた、特定の外部事象が発生するとき、それを検出し、システムに作用することができる。EXT_RING信号がピン７（Ｐ０．１）に入力され、マイクロコントローラＵ２は電力供給された外部モデム９０２から着呼を検出することができる。当業者には既知のように、通常の外部モデムは、着呼信号がティップ及びリング電話回線間で検出されるとき、論理１にトグルする着呼信号を既知のＲＳ−２３２Ｃ形式で供給する。この信号はダイオードＣＲ６を介してマイクロコントローラＵ２にインタフェースされ、抵抗器Ｒ１０及びＲ１１により分圧され、最終的にEXT_RINGラインを介してマイクロコントローラＵ２に入力される。トグル信号はマイクロコントローラＵ２により２５ミリ秒ごとにサンプリングされ分析される。そして、この入力が２連続サンプリングの間論理１の時には、常に着呼が存在するものと見なされる。この条件が適合すると、マイクロコントローラＵ２はＯＮ信号をアサートし、それにより電源装置１７は±５ＶＤＣ及び±１２ＶＤＣラインを通じてシステムに調整電圧を供給する。EXT_RING信号を用いて入来電話着呼を検出するために、外部的に電力供給されるモデム９０２が提供されなければならない。
【００９２】
別の態様では、ＲＳ−２３２仕様に準拠する２進信号を提供する（またはEXT_RING信号をアサートするのに似た）別の装置が、EXT_RINGラインとインタフェースされ、例えば動きセンサ、盗難警報器センサ、音声活動化センサ、光センサ、赤外光センサ、"クラッパ（clapper）"タイプ・センサなどの、システムを起こすために使用される。
【００９３】
図７乃至図９及び図１０に示されるように、本態様は、光絶縁器ＯＰＴＯ１ベースの着呼検出回路を有する内部モデムから電話着呼信号を検出する機構を有する。多くの好適な光絶縁器が、例えばヒューレット・パッカード社などにより製造されており、多数の販売元から入手することができる。内部モデム９００はシステム・プレーナ２０の回路内に組み込まれるように設計されるか、拡張スロット７８の１つに配置される。後者の場合には、モデム９００は、光絶縁器ＯＰＴＯ１からの信号が、図７乃至図９のパワー管理回路の回路に電気的に接続されるように、ベルグ（Berg）または類似のコネクタを装備しなければならない。モデムの多くのメーカが、本発明の回路と共に使用するのに好適なコネクタを装備するように、それらの内部モデムを変更している。EXT_WAKEUP#信号はマイクロコントローラＵ２のピン６（Ｐ０．２）に入力され、内部モデム９００内の着呼検出光絶縁器ＯＰＴＯ１から信号を入力するために使用される。この信号は抵抗器Ｒ９及びＲ５、ダイオードＣＲ６及びコンデンサＣ９を介してインタフェースされ、最終的にはEXT_WAKEUP#ラインを介してマイクロコントローラＵ２に入力される。
【００９４】
内部モデム９００のしきい値及び保護部分９０５は、標準のティップ及びリング電話回線に接続され、（ｉ）モデム９００を損傷し得る落雷及び他の電気事象からの保護を提供し、（ｉｉ）モデム設計に携わる当業者には既知のように、着呼しきい値電圧を設定する。
【００９５】
光絶縁器ＯＰＴＯ１からのトグル信号は、マイクロコントローラＵ２により検出及び分析され、マイクロコントローラＵ２は、EXT_WAKEUP#上の３連続信号周期の信号が１５．１Ｈｚ乃至６９．１Ｈｚの周波数を有するとき、常に着呼が存在するものと見なす。EXT_RINGに沿って着呼信号を提供するように電力供給されなければならないEXT_RING信号回路と異なり、内部モデム９００は、光絶縁器ＯＰＴＯ１がEXT_WAKEUP#ラインに沿って適切な信号を供給するために、電力供給される必要はない。EXT_WAKEUP#ラインは通常、抵抗器Ｒ５によりＡＵＸ５にプルアップされる。
【００９６】
マイクロコントローラＵ２は、ＣＰＵ４０がシステム管理割込み（ＳＭＩ）を有する場合、ＣＰＵ４０のＳＭＩを介してＣＰＵ４０に割込みを発生する（ＣＰＵ４０は本発明の多数の利点を利用するように、システムのためにＳＭＩを有する必要はない）。SMI_OUT#信号はマイクロコントローラＵ２のピン３（Ｐ３．２）に出力され、オペレーティング・システムが割込みを有効にするか許可するのを待機すること無く、マイクロコントローラＵ２が直ちにＣＰＵ４０に割込みを発生できるようにする。SMI_OUT#ライン状態は、マイクロコントローラＵ２内に配置され、ＣＰＵ４０により書込まれる書込み可能なレジスタ・ビットにより制御される。更に、マイクロコントローラＵ２は、（ｉ）ACTIVITY#ライン上で検出される活動に応答して、または（ｉｉ）マイクロコントローラＵ２が電源装置１７にシステムへの調整電圧の供給を停止させる以前に、SMI_OUT#信号をアサートすることができ、それによりＣＰＵ４０に割込みを発生する。これらの事象のいずれかまたは両方は、ＣＰＵからマイクロコントローラＵ２へのコマンドにより、イネーブルまたはディセーブルされる。
【００９７】
各ＳＭＩにおいて、ＣＰＵ４０内のマイクロコードが、ＣＰＵの状態をメモリから特殊なＣＰＵ状態保管領域に保管する。従って、ＣＰＵ４０はＳＭＩ割込みハンドラを実行し、これが下記の機能を実行する。ＣＰＵの状態を復元するために、ＳＭＩ割込みハンドラはＲＳＭ（再開）命令を発行し、これがＣＰＵ４０に特殊保管領域からそれ自身の状態を復元させる。
【００９８】
ＣＰＵ４０がマイクロコントローラＵ２にＳＭＩを介して割込みを発生させる以前に、ＣＰＵ４０はＳＭＩの理由を示す値をＣＭＯＳ  ＮＶＲＡＭ内の変数に書込む。ＣＭＯＳ  ＮＶＲＡＭ内のこの値は００Ｈにデフォルト指定され、これはＣＰＵ４０に対して、マイクロコントローラＵ２がＣＰＵ４０に非同期に割込んでいることを示す。この状態は、マイクロコントローラＵ２が電源装置１７に調整電圧の供給を停止させる以前に発生する。各ＳＭＩの後、ＣＰＵ４０はＣＭＯＳ  ＮＶＲＡＭ内のその変数を００Ｈにセットする。この値に応答して、ＣＰＵ４０は、システムがマイクロコントローラＵ２によりパワー・ダウンされようとしている想定にもとづき、特定のタスクを実行する。ＣＰＵ４０は、マイクロコントローラＵ２がシステムをパワー・ダウンするまでの時間を延長することができる。マイクロコントローラＵ２は、自身内のパワー・ダウン延長タイマを周期的に再始動させることにより、パワー・ダウンを実行する。
【００９９】
システムがパワー・ダウンするまでの間、ＣＰＵ４０は多数のタスクを実行できる。例えば、ユーザが警報の呼び起しに作用する１つまたは複数のパラメータを変更しているかもしれないので、ＣＰＵは新たな呼び出し時間（分）の値を再計算し、マイクロコントローラＵ２に書込む。更に、ＣＰＵはＣＭＯＳ  ＮＶＲＡＭ９６に、コンピュータ・システムがその最後のパワーオン以来動作した時間などの特定の情報を書込み、これらは後にハード・ドライブ３１に書込まれる。これについては図６０に関連して述べられる。
【０１００】
ＣＰＵ４０により書込まれる他の値には、０１Ｈ（ＣＰＵ４０が延期ルーチン２５０にジャンプすることを示す）、０２Ｈ（ＣＰＵ４０が再開ルーチン４５０にジャンプすることを示す）、及び０ＦＦＨ（ＣＰＵ４０がセグメントＥ０００Ｈデータ構造内の特殊ＣＰＵ状態保管領域をセット・アップすることを示す）が含まれる。
【０１０１】
本態様では、マイクロコントローラＵ２は表示装置１１をブランキングする制御を与えられる。DISP_BLANK信号がマイクロコントローラＵ２のピン１（Ｐ３．４）を介して出力され、表示装置１１のブランキングを直接制御する。２個のインバータＵ３Ｄ及びＵ３Ｅが、DISP_BLANK信号をESYNC#及びBLANK#ラインにインタフェースする。ESYNC#及びBLANK#ラインが論理１（ＶＣＣ）の場合、ビデオ制御装置５６がビデオ信号を生成する。ESYNC#及びBLANK#ラインが論理０（ＧＮＤ）の場合、ビデオ制御装置５６がビデオ信号の生成を停止する。DISP_BLANKラインの状態は、マイクロコントローラＵ２内に配置され、ＣＰＵ４０により書込まれる書込み可能なレジスタ・ビットにより制御される。ＣＰＵ４０は、システムが待機状態１５２に入力するとき、表示装置をブランキングするようにマイクロコントローラＵ２に命令する。更に、スイッチ２１の閉鎖事象に応答して、DISP_BLANKラインが順次セットされ、次にクリアされる。同様に、任意の活動割込みにおける活動（この場合にはＩＮＴ１またはＩＮＴ１２）が、マイクロコントローラＵ２にDISP_BLANKラインをクリアさせ、それによりビデオ制御装置５６がビデオ信号を生成することを可能にする。
【０１０２】
更に、マイクロコントローラＵ２は、クロック・シンセサイザ９０６により生成されるクロック信号の周波数を制御する。３本のベルグ・タイプのジャンパ線（図示せず）ＪＰ０、ＪＰ１及びＪＰ２が、クロック・シンセサイザ９０６を次のように制御する。ＪＰ０＝０、ＪＰ１＝１及びＪＰ２＝０のとき、クロック・シンセサイザは３３ＭＨｚのクロック信号を生成し、ＪＰ０＝１、ＪＰ１＝１及びＪＰ２＝０のとき、クロック・シンセサイザは２５ＭＨｚのクロック信号を生成し、ＪＰ０＝０、ＪＰ１＝１及びＪＰ２＝１のとき、クロック・シンセサイザは８ＭＨｚのクロック信号を生成する。クロック・シンセサイザ９０６は更に、３本のクロック・ラインＣＬＫ０、ＣＬＫ１及びＣＬＫ２により制御され、これらはＪＰ０、ＪＰ１及びＪＰ２に対応する。図７乃至図９に示されるように、これらのクロック・ラインＣＬＫ０、ＣＬＫ１及びＣＬＫ２は、マイクロコントローラＵ２のピン２（Ｐ３．３）に出力されるCLK_SLOW#信号を介してマイクロコントローラＵ２により制御される。図示のように、CLK_SLOW#信号は、オープン・コレクタ出力を有するインバータＵ３Ａ、Ｕ３Ｂ及びＵ３Ｃにより、２重に反転される。また、抵抗器Ｒ１５及びＲ８は、それぞれＵ３Ａのオープン・コレクタ出力及びクロック・シンセサイザ９０６へのＣＬＫ０入力を論理１に引き上げるために使用される、プルアップ抵抗器である。
【０１０３】
３つのクロック信号ＣＬＫ０、ＣＬＫ１及びＣＬＫ２と、３本のジャンパ線ＪＰ０、ＪＰ１及びＪＰ２は、クロック・シンセサイザを次のように制御する。すなわち、CLK_SLOW#信号が論理１の時、ＣＬＫ１及びＣＬＫ２信号も論理１となり、結果的に、クロック・シンセサイザ９０６はジャンパ線ＪＰ１、ＪＰ２により制御され、システムにより使用される２５ＭＨｚ及び３３ＭＨｚの速いクロック信号を生成する。一方、CLK_SLOW#信号が論理０の時、ＣＬＫ１及びＣＬＫ２信号も論理０となり、結果的に、クロック・シンセサイザ９０６はシステムにより使用される遅い８ＭＨｚのクロック信号を生成し、システムが低電力を消費するようにする。図７乃至図９に示されるように、ベルグ・タイプのジャンパ線は、CLK_SLOW#ラインをＣＬＫ０ラインから分離する。ジャンパ線が設置されると、ＣＬＫ０ラインはCLK_SLOW#信号に従う。一方、ジャンパ線が設置されない場合には、ＣＬＫ０ラインはCLK_SLOW#信号の状態には関係無しに、抵抗器Ｒ８により論理１にプルアップされた状態となる。CLK_SLOW#ラインの状態は、マイクロコントローラＵ２内に配置され、ＣＰＵ４０により書込まれる書込み可能なレジスタ・ビットにより制御される。更に、CLK_SLOW#ラインは、ACTIVITY#ラインの活動に応答してマイクロコントローラＵ２によりクリアされ得る。当業者には明らかなように、他のクロック・シンセサイザも本発明において使用され得る。マイクロコントローラＵ２とクロック・シンセサイザ９０６間の相互接続は、使用される特定のシンセサイザの特定の仕様に適合するように、変更され得る。
【０１０４】
更に、マイクロコントローラＵ２は、パワー／フィードバックＬＥＤ２３の照明を直接制御する。LED_CTRL信号がピン２２（Ｐ３．６）に出力され、マイクロコントローラＵ２によるパワー／フィードバックＬＥＤ２３の直接制御を可能にする。抵抗器Ｒ２及びＲ３、並びにダイオードＣＲ４及びＣＲ５は、LED_CTRLラインが論理０であることに応答して、パワー／フィードバックＬＥＤ２３が、ＡＵＸ５電源ラインまたはＶＣＣ電源ラインのいずれかにより駆動されるようにする。LED_CTRLラインが論理１の時には、パワー／フィードバックＬＥＤ２３は照明されない。以降で詳述されるように、LED_CTRLラインは、スイッチ２１の閉鎖事象、警報の呼び起し、いずれかの着呼検出入力の１回以上の着呼、または待機モードに置かれるシステムに応答して、マイクロコントローラＵ２により制御される。
【０１０５】
マイクロコントローラＵ２はＬＥＤ２３を、単純なパワーＬＥＤとして制御することができる。ＬＥＤ２３はスイッチ２１の閉鎖事象後に照明され、この事象はシステムをオフ状態１５６または延期状態１５４から、正常動作状態１５０に変化させる。同様に、マイクロコントローラＵ２はスイッチ２１の解除事象後にＬＥＤ２３を消灯する。この事象は、システムを正常動作状態１５０から延期状態１５４またはオフ状態１５６に変化させる。
【０１０６】
更に、ＬＥＤ２３はマイクロコントローラＵ２により特定の周期、例えば毎秒ごとに選択的に点滅され、システムが待機状態１５２であることを示す。更に、ＬＥＤ２３はマイクロコントローラＵ２により異なる周期、例えば０．５秒ごとに点滅され、システムが着呼または警報により呼び起こされ、システムがオフ状態または延期状態のいずれかであることを示す。別の態様では、延期状態の間、ＬＥＤ２３がマイクロコントローラＵ２により、点滅グループに選択的に点滅され、システムが着呼や警報などの外部事象によりパワー・アップされ、不活動延期タイマの満了により逆にパワー・ダウンされた回数を示す。この場合、ＢＩＯＳに１つ以上の機能が提供され、ＯＳまたはアプリケーション・プログラムが、マイクロコントローラＵ２がＬＥＤ２３の点滅回数を変更することを可能にする。例えば、システムが着呼により呼び起こされ、入来ファクシミリ伝送が受信されると、テレコミュニケーション・アプリケーション・プログラムが、点滅回数に１を加算する特定のＢＩＯＳ機能を呼び出す。その後、ＢＩＯＳがＣＰＵ４０に新たな点滅値をマイクロコントローラＵ２に書込ませ、マイクロコントローラＵ２がＬＥＤ２３を指定回数点滅させる。
【０１０７】
POWERGOOD信号はマイクロコントローラＵ２のピン４（Ｐ３．１）に入力され、この信号がマイクロコントローラＵ２及びＣＰＵ４０により使用されるようにする。特に、マイクロコントローラＵ２はPOWERGOOD信号により、電源装置１７が故障したかどうかを判断し、故障状態を取り除くフィードバック式故障検出及び修正回路を実現する。別途述べられるように、ＯＮ信号がある期間（例えば３秒）アサートされ、POWERGOOD信号が論理０、すなわち電源装置１７が適正レベルの調整電圧を供給していないことを示す場合、マイクロコントローラＵ２は、電源装置１７が例えば過電流状態から故障したものと想定する。結果的に、故障状態を可能であれば取り除くために、マイクロコントローラＵ２はＯＮ信号のアサートをある期間（例えば５秒）停止し、故障を取り除く。その後、マイクロコントローラＵ２はＯＮ信号を再度アサートし、POWERGOOD信号が論理１になる、すなわち電源装置１７がシステムに調整電圧を供給していることを示すのを待機する。このフィードバック式故障検出及び修正が存在しないと、電源装置１７は故障し続け、マイクロコントローラＵ２はＯＮ信号をアサートし続け、電源装置１７に調整電圧を生成させようとする。この場合、故障を取り除く唯一の解決方法は、電源装置１７からＡＣ電力を取り除くことである。
【０１０８】
電源装置１７の故障検出及び修正回路の別の態様が、図１２に示される。この態様は、電源装置１７が故障したことを検出し、故障を取り除くために、４個のＦＥＴ  Ｑ１０乃至Ｑ１３、抵抗器Ｒ２０乃至Ｒ２３、コンデンサＣ２０、及び７４ＨＣ１３２を使用する。Ｑ１２は、ＯＮ信号がハイで、ＡＵＸ５が電力供給されており、ＶＣＣがＱ１１をトリガするしきい値よりも低いとき、Ｒ２２及びＣ２０により決定される期間、ＯＮ信号をロウに引き下げ、それにより電源装置１７の故障状態を取り除く。
【０１０９】
ACTIVITY#信号はマイクロコントローラＵ２のピン１９（ＩＮＴ１）に入力され、マイクロコントローラＵ２はこの信号により、キーボード１２及びマウス１３の活動に応答する。ＩＲＱ１はキーボード・ハードウェア割込み信号であり、第１のＰＡＬ  Ｕ１のピン８（Ｉ７）に入力される。キーボード１２上のキーを押下すると、ＩＲＱ１信号がパルスとして生成される。ＩＲＱ１２はマウス・ハードウェア割込み信号であり、第１のＰＡＬ  Ｕ１のピン１１（Ｉ９）に入力される。マウス１３を移動するかマウス１３上のボタンを押下すると、ＩＲＱ１２信号がパルスとして生成される。ＩＲＱ１及びＩＲＱ１２信号は第１のＰＡＬ  Ｕ１内で論理和され、ACTIVITY#信号として出力される。ACTIVITY#信号の使用は、マイクロコントローラＵ２が決してキーボード１２またはマウス１３の活動を見逃さないようにする。
【０１１０】
待機状態の間、いずれかの割込み活動により、マイクロコントローラＵ２は即時ビデオ表示を復元する。このように割込みＩＲＱ１及びＩＲＱ１２を使用することにより、待機状態１５２から正常動作状態１５４への復帰時に、ユーザにビデオ表示の復元形態で、即時フィードバックを提供する。これら無しでは、図１５乃至図１８に関連して述べられるように、ＡＰＭがユーザ活動をチェックしてから数秒後まで、ユーザはフィードバックを受け取れないことになり得る。
【０１１１】
ＣＰＵ４０とマイクロコントローラＵ２間の通信は、ＳＤ（０）（第１のＰＡＬ  Ｕ１のピン１８（Ｉ／Ｏ６）に入力され、第１のＰＡＬ  Ｕ１のピン１３（Ｉ／Ｏ１）からＲＷＤ０ラインを介して出力され、マイクロコントローラＵ２のピン１３（Ｐ１．０）に入力される）と、ＳＤ（１）（マイクロコントローラＵ２のピン１４（Ｐ１．１）に入力される）と、ＳＤ（２）（マイクロコントローラＵ２のピン１５（Ｐ１．２）に入力される）と、ＳＤ（３）（マイクロコントローラＵ２のピン１６（Ｐ１．３）に入力される）と、ＳＤ（４）（第１のＰＡＬ  Ｕ１のピン６（Ｉ５）に入力される）と、IO_STROBE#（マイクロコントローラＵ２のピン１８（ＩＮＴ０）に入力される）と、PROC_RDY（マイクロコントローラＵ２のピン２０（Ｐ１．７）に出力される）とにより達成される。第１のＰＡＬ  Ｕ１及びマイクロコントローラＵ２は、次のように構成され、プログラムされる。（ｉ）ＳＤ（０）（ＲＷＤ０を介する）、ＳＤ（１）、ＳＤ（２）及びＳＤ（３）に沿って、ＣＰＵ４０からマイクロコントローラＵ２に４ビット並列に書込み、１アドレスが本来マイクロコントローラＵ２をリセットするための１ビット書込みに対応し、他はデータ・ビットＳＤ（４）がハイの時にのみ有効な、マイクロコントローラＵ２へのニブル書込みに対応し、（ｉｉ）ＳＤ（０）（ＲＷＤ０を介する）に沿って、ＣＰＵ４０がマイクロコントローラＵ２からシリアルに（１ビットで）読出し、１アドレスがステータス・ビットに対応し、他はマイクロコントローラＵ２からのデータ・ビットに対応する。
【０１１２】
図５２乃至図５５を参照すると、マイクロコントローラＵ２上で実行される複数のルーチンが、タスク１１６０で開始するように示される。マイクロコントローラＵ２は通常、２つのメイン・ルーチン、すなわちパワーオン・ルーチン（タスク１１６８乃至１２１６）及びパワーオフ・ルーチン（タスク１２６０乃至１３０８）の一方を実行している。パワーオン・ルーチンは、電源装置１７が±５ＶＤＣ及び±１２ＶＤＣラインに調整電圧を供給している時、または電源装置１７が±５ＶＤＣ及び±１２ＶＤＣラインに調整電圧を供給していないが、システムがパワーオンの途中の時に、マイクロコントローラＵ２により実行される。パワーオフ・ルーチンは、電源装置１７が±５ＶＤＣ及び±１２ＶＤＣラインに調整電圧を供給していない時、または電源装置１７が±５ＶＤＣ及び±１２ＶＤＣラインに調整電圧を供給しているが、システムがパワーオフの途中の時に、マイクロコントローラＵ２により実行される。更に、次の３つの割込み駆動型ルーチンが存在する。第１はＣＰＵ４０と通信するルーチン（タスク１２２０乃至１２３２）、第２はマウス１３またはキーボード１２の活動を検出するルーチン（タスク１２３６乃至１２４４）、及び第３は２５ミリ秒、１／２秒、１秒、及び１分の分解能の時間基準を提供するルーチン（タスク１２４８乃至１２５６）である。
【０１１３】
最初に、マイクロコントローラＵ２がタスク１１６４で初期化され、その間に全ての変数が初期化され、カウンタ変数が初期化され、タイマ割込みが初期化及び許可され、通信ルーチン及び活動ルーチンを制御する外部割込みが初期化される。
【０１１４】
通信ルーチンは、タスク１２２０で開始する割込み駆動型ルーチンであり、IO_STROBEラインが第１のＰＡＬ  Ｕ１により論理０に引き下げられ、それによりＣＰＵ４０がコマンドまたは問い合わせを開始することが示されるとき、実行される。要するに、このルーチンはタスク１２２４で、ＣＰＵ４０から１つのまたは複数のニブル・コマンドまたは問い合わせを受信し、タスク１２２８でコマンドを実行するか、または問い合わせに応答してデータを返却し、タスク１２３２でプログラムの実行制御を割込みコードに返す。
【０１１５】
マイクロコントローラＵ２は順次にコマンドまたは問い合わせを形成するニブルをＣＰＵから受信する。ニブルを受信後、マイクロコントローラＵ２はPROC_RDYをロウに下げる。次のニブルの受信準備が整うと、PROC_RDYを再度ハイにする。PROC_RDYのこのロウとハイの遷移を見ることにより、ＣＰＵ４０は次のコマンド・ニブルを書込むことができる。
【０１１６】
マイクロコントローラＵ２はＣＰＵ４０からのコマンドまたはニブルを実行する間、別のコマンドを受信することができない。従って、マイクロコントローラＵ２はPROC_RDYラインを論理０にアサートし、ＣＰＵ４０に（ステータス・ポートの読出しを介して）、自身が次のコマンドまたは問い合わせをまだ受諾できないことを示す。実行が終了すると、PROC_RDYラインは論理１にアサートされ、ＣＰＵ４０に（ステータス・ポートの読出しを介して）、マイクロコントローラＵ２が次のコマンドまたは問い合わせを受諾する準備が完了したことを示す。
【０１１７】
活動ルーチンはタスク１２３６で開始する割込み駆動型ルーチンであり、ACTIVITY#ラインが第１のＰＡＬ  Ｕ１により論理０に引き下げられ、ユーザがマウス１３またはキーボード１２のいずれかを使用したことが示されると実行される。要するに、割込みの受信に応答して、このルーチンはタスク１２４０で、（ｉ）マウス１３またはキーボード１２活動のいずれかが生じたことを示すビットをセットし、（ｉｉ）クロック低下が許可されていれば、クロック速度を復元し、（ｉｉｉ）ブランキングが許可されていれば、画面１１をブランキング解除し、（ｉｖ）フェールセーフ・タイマを再開し、（ｖ）ＳＭＩが許可されていればＣＰＵにＳＭＩを生成する。その後、ルーチンはタスク１２４４で、プログラムの実行制御を割込みコードに戻す。このルーチンによりセットされるビットは、別途述べられるように、ＡＰＭ"事象獲得（get event）"の度に、スーパバイザ・ルーチンにより照会される。
【０１１８】
タイマ・ルーチンはタスク１２４８で開始する割込み駆動型ルーチンであり、内部タイマ割込みに応答して実行される。内部タイマ割込みは、マイクロコントローラＵ２の時間基準を提供するように、２５ミリ秒ごとに割込みを生成するように構成される１６ビット・フリーラン・カウンタにもとづく。タイマ・ルーチンは次の時間基準、すなわち２５ミリ秒、１／２秒、１秒、及び１分を提供する。要するに、このルーチンは割込みを受信し、様々な時間が発生したことを判断し、タスク１２５２で適切な活動を実行し、タスク１２５６でプログラム実行制御を割込みコードに戻す。
【０１１９】
電源装置１７が調整電圧を供給しておらず、マイクロコントローラが着呼に応答するように構成されていれば、タイマ・ルーチンは刻時（毎２５ミリ秒）の度に、EXT_RINGライン上のＲＳ−２３２着呼をチェックし、もしそれが発生していればビットをセットする。
【０１２０】
別途述べられるように、オフ状態または延期状態の間の毎１／２秒ごとに、タイマ・ルーチンは、外部着呼表示器の点滅シーケンスを呼び起こすために、ＬＥＤ２３をトグルさせるべきかどうかを判断する。
【０１２１】
別途述べられるように、待機状態の間の毎秒ごとに、タイマ・ルーチンは、延期表示器の点滅シーケンスを実行するために、ＬＥＤ２３をトグルさせるべきかどうかを判断する。
【０１２２】
更に毎秒ごとに、タイマ・ルーチンは適時フェールセーフ・タイマを減分し、ＡＰＭ故障延期タイマを減分し、電源故障タイマを減分し、いずれかのタイマが満了すると対応するビットをセットする。フェールセーフ・タイマは２０秒タイマであり、満了すると、マイクロコントローラにシステム電力をオフさせる。フェールセーフ・タイマはＡＰＭ事象獲得に応答して、スーパバイザ・ルーチンにより頻繁に再始動（リセット）される。従って、ＣＰＵ４０上で実行されるコードが適正に実行されている限り、フェールセーフ・タイマは満了しない。しかしながら、コードが適正に実行されなくなると、フェールセーフ・タイマは満了し、電源ボタン２１の押下及び解除に応答して、マイクロコントローラＵ２はＢＩＯＳ及び他のルーチンが故障したとの想定にもとづき、電源装置１７が±５ＶＤＣ及び±１２ＶＤＣラインに調整電圧を供給するのを停止させる。
【０１２３】
ＡＰＭ故障延期タイマは１８秒タイマであり、スイッチ２１がオフ／解除状態（ユーザがシステムをオフしようとしていることを示す）の時にイネーブルされ、満了するとシステムに延期を試行させ、望ましくはフェールセーフ・タイマの満了以前に、マイクロコントローラＵ２にシステムをオフさせる。フェールセーフ・タイマ同様、ＡＰＭ故障延期タイマは、ＣＰＵ４０上で実行されるコード、例えばＡＰＭ事象獲得、ＡＰＭ最終要求処理、及びＡＰＭ最終要求拒否などにより頻繁に再始動（リセット）される。従って、ＣＰＵ４０上で実行されるコードが適正に実行されている限り、ＡＰＭ故障延期タイマは満了しない。しかしながら、コードが適正に実行されないと、ＡＰＭ故障延期タイマは満了する。
【０１２４】
ＡＰＭ故障延期タイマが満了すると、マイクロコントローラＵ２はビットをセットする。このビットは、当業者には既知のように、約５５ミリ秒ごとに発生する各タイマ・レベル０割込みの間にチェックされる。更に、タイマ・レベル０割込みサービス・ルーチンは、フェールセーフ・タイマを再始動する。タイマ・レベル０割込みサービス・ルーチンは、ＡＰＭ故障延期タイマが満了したことを検出して、延期ルーチンにジャンプし、図１０乃至図２５に関連して述べられるように、システムを延期しようとする。
【０１２５】
タイマ・レベル０割込みサービス・ルーチンにより再始動される延期は、好適な延期方法ではない。多くのアプリケーション・プログラム及びアダプタはＡＰＭ対応（APM aware）であり、システムの延期に応答してタスクを実行する。タイマ・レベル０割込みサービス・ルーチンにより開始される延期は、これらのＡＰＭ対応エンティティに延期が差し迫っていることを知らせるために、ＡＰＭを使用することができない。結果的に、これらのエンティティが正当に準備されること無く、システムは延期される。システム自身は、タイマ・レベル０割込みサービス・ルーチンにより開始される延期により保管され、従ってメモリ内のデータは失われない。しかしながら、所望のデータを保管後、ユーザはシステムをその適正な状態にするために、マシンをリブート（reboot）する必要があるかもしれない。
【０１２６】
ＡＰＭ故障延期タイマは、ＯＳ内のＡＰＭドライバ内の"ホール（hole）"をパッチするのに特に役立つ。例えば、マイクロソフト・ウィンドウズ３．１モードの対話ボックスが表示されるとき、ウィンドウズＡＰＭドライバは、ＡＰＭ事象獲得の発行を停止する。結果的に、ユーザがシステムを延期しようとして電源ボタン２１を押下するときに、対話ボックスが表示されていれば、システムは延期されない。マイクロコントローラＵ２は、スイッチがオフ／解除状態であることに気付くが、ＡＰＭ事象獲得が停止されているために、スーパバイザ・ルーチンが呼ばれない。スイッチの押下は、対話ボックスがユーザによりクリアされるまで機能しない。しかしながら、ＡＰＭ故障延期タイマが満了し、その満了がタイマ・レベル０割込みサービス・ルーチンにより検出されると、システムはＡＰＭ対応エンティティにシステムが延期されることを知らせること無く、可能な範囲で保管される。
【０１２７】
毎分ごとに、タイマ・ルーチンは警報タイマ及び活動タイマを呼び起こす時間（分）を減分する。タイマを呼び起こす時間が満了し、割込みが許可されていると、マイクロコントローラＵ２は電源装置１７に、±５ＶＤＣ及び±１２ＶＤＣラインへの調整電圧の供給を開始させる。
【０１２８】
マイクロコントローラＵ２が初期化された後、電源装置１７がタスク１１６８でテストされ、電源がオフかどうかが判断される。電源が依然オンの場合、マイクロコントローラ１７はタスク１１７２で、電源装置１７が故障かどうかをチェックする。電源装置１７はシャット・ダウンまたは"故障"のための幾つかの内部保護を有する。マイクロコントローラＵ２は、次のように電源装置１７が故障したかどうかを判断する。すなわち、マイクロコントローラＵ２が動作しており（ＡＵＸ５が電力供給されている、すなわちＡＣ電力が電源装置１７に供給されていることを示す）、かつ電源装置１７に±５ＶＤＣ及び±１２ＶＤＣラインに調整電圧を供給させるように、マイクロコントローラＵ２がＯＮ信号をアサートしており、かつPOWERGOODラインがアサートされていない場合（電源装置１７が±５ＶＤＣ及び±１２ＶＤＣラインに調整電圧を供給していないことを示す）、電源装置１７が故障しており、リセットされなければならないと判断する。
【０１２９】
タスク１１７２で、電源装置１７は実際に２度テストされる。マイクロコントローラＵ２はＯＮ信号をアサートし、次に３秒待機する。これは内部時間基準により測定される。ＯＮ信号が３秒間アサートされた後にPOWERGOOD信号がアサートされない場合、マイクロコントローラＵ２はＯＮ信号をクリアし、別の５秒待機する。次にＯＮ信号を再度アサートし、更に３秒待機する。ＯＮ信号が３秒間アサートされた後に、POWERGOOD信号がアサートされないと、マイクロコントローラＵ２はＯＮ信号をクリアし、電源装置１７が故障したものと見なす。
【０１３０】
電源装置１７が故障した場合、マイクロコントローラＵ２はタスク１１７４でパワーオフ・ルーチンにジャンプする。一方、電源装置１７が故障していなかオフの場合、マイクロコントローラはタスク１１７５で、電源装置１７に±５ＶＤＣ及び±１２ＶＤＣラインに調整電圧の供給を開始させ、タスク１１７６でＩ／Ｏポートを初期化し、ＬＥＤ２３をオンし、外部割込みを許可する。
【０１３１】
図１３は、マイクロコントローラＵ２内で維持されるスイッチ状態マシンを示す。図示のように、状態はスイッチ２１の閉鎖事象、並びにコンピュータ・システム１０のリセット及びＣＰＵ４０による書込みなどの他の事象に応答して、変化する。電源装置１７によりＡＵＸ５が供給されていない場合、マイクロコントローラＵ２は電力供給されておらず、従って、スイッチ状態は意味を持たない（１７４）。スイッチ２１の押下、いずれかの発信元からの電話着呼、警報タイマの満了、及びＣＰＵ４０からのコマンドにより、マイクロコントローラＵ２は図７乃至図１２に関連して述べられるように電源装置１７にシステムへの電力の供給を開始させる。
【０１３２】
図１３に示されるように、スイッチ２１はマイクロコントローラＵ２によりモニタされる４つの状態を有する。それらは、（ｉ）オン／押下状態１７６（ユーザがボタンを保持してマシンをオンしようとしている）、（ｉｉ）オン／解除状態１７８（ユーザがボタンを解除し、マシンをオンしようとしている）、（ｉｉｉ）オフ／押下状態１８０（ユーザがボタンを保持してマシンをオフしようとしている）、及び（ｉｖ）オフ／解除状態１８２（ユーザがボタンを解除し、マシンをオフしようとしている）である。次にタスク１１８０で、マイクロコントローラＵ２は、スイッチがオフ／解除状態１８２、すなわちユーザがボタンを解除し、マシンをオフしようとしているかどうかをテストする。
【０１３３】
オフ／解除状態１８２のときにスイッチ２１が押下されると、マイクロコントローラＵ２はオン／押下スイッチ状態１７６に入力する。スイッチ２１を解除すると、マイクロコントローラＵ２はオン／解除スイッチ状態１７８に入力する。同様に、マイクロコントローラＵ２がリセットされるとき、マイクロコントローラＵ２は状態１７４を脱出し、オン／解除状態１７８に入力する。スイッチ２１を再度押下すると、マイクロコントローラＵ２はオフ／押下スイッチ状態１８０に入力する。スイッチ２１を再度解除すると、マイクロコントローラＵ２はオフ／解除スイッチ状態１８２に入力する。スイッチ２１を続いて閉じると、マイクロコントローラＵ２は図１３に示されるように４つの状態を循環する。コンピュータ・システム１０が正常動作状態１５０の時、マイクロコントローラＵ２はオン／解除スイッチ状態１７８である。アプリケーション・プログラムはこの状態の間、実行される。システム１０はこの状態において待機状態１５２に入力及び退去し得る。この状態はユーザ生成される延期打切り要求にも対応する。オフ／解除スイッチ状態は、ユーザによる延期要求に対応するスイッチ状態である。すなわち、コンピュータ・システム１０はオフ状態１５６から開始し、スイッチ２１を１度押下し解除すると、システムは正常動作状態１５０に入力する。再度スイッチ２１を押下し解除すると、図１５乃至図１８に関連して詳述されるように、延期要求が生成され、これがスーパバイザ・ルーチンにより読込まれる。システム１０が延期状態１５４になる以前に３度目にスイッチ２１を押下し解除すると、延期打切り要求が生成され、これが延期ルーチンにより読込まれる。
【０１３４】
図５２乃至図５５に戻り、ユーザがボタンを解除し、マシンをオフしようとすると、マイクロコントローラＵ２はタスク１１８４でパワーオフ・ルーチンにジャンプする。
【０１３５】
一方、ボタンがオフ／押下状態１８０、すなわちユーザがボタンを保持して、マシンをオフしようとしている場合、マイクロコントローラＵ２はタスク１１９２で、スイッチがＢＩＯＳによりマスクされたかどうかをテストする。ＢＩＯＳは待機状態への入力時にスイッチ２１を１度マスクし、上述したように、スイッチの押下によりシステムが待機状態から延期状態に遷移することを阻止し、それによりユーザの混乱を回避する。
【０１３６】
スイッチ２１がＢＩＯＳによりマスクされると、マイクロコントローラＵ２コードはタスク１１７６にジャンプして戻り、マスク・ビットをクリアし、次のスイッチ押下によりシステムがオフ状態または延期状態に入力することを可能にする。一方、スイッチ２１がマスクされていないか、スイッチ２１がオフ／押下状態でない場合には、マイクロコントローラＵ２はタスク１１９６でハートビート・ルーチンを実行する。
【０１３７】
ハートビート・ルーチンは、ＣＰＵ４０にマイクロコントローラＵ２が適正に機能していることを知らせるために使用される。マイクロコントローラＵ２のCMD_STATE#ライン出力（ピン１７（Ｐ１．４））は通常、論理１である。５０マイクロ秒乃至６０マイクロ秒ごとに、マイクロコントローラＵ２はこのラインを約１．５マイクロ秒の間、論理０に引き下げ、次にそれを論理１に戻す。ＣＰＵ４０により読込まれるパワー管理ステータス・ポートは、CMD_STATE#ラインとPROC_RDYラインとの論理積であるので、ハイからロウへ、そして再度ハイへのこの遷移は、マイクロコントローラＵ２が適正に機能していることを保証するために、ＣＰＵ４０により頻繁に、例えばシステム・ブートの度にモニタされる。
【０１３８】
次に、マイクロコントローラＵ２はタスク１２００で、ＢＩＯＳがパワーオフを指令したかどうかをテストする。ＣＰＵ４０は事実上、マイクロコントローラＵ２内のあらゆる変数をアクセスし、変更することができる。例えば延期の間に、システムの状態がハード・ドライブ３１に書込まれた後などのように、ＢＩＯＳがシステムがパワーオフされるべきことを示す変数をセットしている場合、マイクロコントローラＵ２はタスク１２０４でパワーオフ・ルーチンにジャンプする。
【０１３９】
一方、ＢＩＯＳがパワーオフを指令していない場合には、マイクロコントローラＵ２はタスク１２０８でフェールセーフ・ルーチンを実行する。フェールセーフ・タイマは、電源装置１７が±５ＶＤＣ及び±１２ＶＤＣラインに調整電圧を供給しているときにイネーブルにされる２０秒タイマである。このルーチンは、フェールセーフ・タイマが満了したかどうかをチェックし、満了していればビットをセットする。このルーチンはまた、ＢＩＯＳにより指令されれば、フェールセーフ・タイマを再始動する。
【０１４０】
次にタスク１２１２で、安全処置として、またマイクロコントローラＵ２を電源装置１７に同期させるために、マイクロコントローラＵ２はPOWERGOODラインをチェックし、電源装置１７が依然調整電圧を±５ＶＤＣ及び±１２ＶＤＣラインに供給しているかどうかを検出する。
【０１４１】
電源装置１７が±５ＶＤＣ及び±１２ＶＤＣラインに調整電圧を供給していなければ、マイクロコントローラＵ２はタスク１２１６でパワーオン・ルーチンにジャンプする。一方、電源装置１７が±５ＶＤＣ及び±１２ＶＤＣラインに調整電圧を供給している場合には、マイクロコントローラ・コードはタスク１１８０にジャンプして戻り、実行を継続する。
【０１４２】
パワーオフ・ルーチンはタスク１２６０で開始する。最初に、マイクロコントローラＵ２はタスク１２６４で活動割込みを禁止し、表示装置がブランキング解除されることを阻止する。
【０１４３】
次にタスク１２６８で、マイクロコントローラＵ２はPOWERGOODラインをチェックし、電源装置１７が依然±５ＶＤＣ及び±１２ＶＤＣラインに調整電圧を供給しているかどうかを検出する。電源装置１７が依然±５ＶＤＣ及び±１２ＶＤＣラインに調整電圧を供給している場合、マイクロコントローラＵ２はタスク１２７２で、表示装置がブランキングされ、ＬＥＤ２３がオフされるべきかどうかをテストする。肯定の場合、マイクロコントローラＵ２はビデオ制御装置５６にビデオ信号の生成を停止させ、ＬＥＤ２３をオフする。
【０１４４】
その後、またはＬＥＤ及び表示装置がブランキングされるべきでない場合には、マイクロコントローラＵ２は次に、（ｉ）ＢＩＯＳがビットをセットすることによりシステムが再度オンされるように指令したか、または（ｉｉ）ユーザが電源ボタン２１を再度押下することにより、システムが再度オンされるように指令したかをテストする。これらのいずれかが発生すると、システムは再度パワーアップされ、マイクロコントローラＵ２はタスク１２８４でパワーオン・ルーチンにジャンプする。
【０１４５】
次に、マイクロコントローラＵ２は、光絶縁器ＯＰＴＯ１からのEXT_WAKEUP#ラインに着呼が発生したかどうかを判断する。ＲＳ−２３２ラインでは、これは単にEXT_RINGラインがハイかどうかをチェックするだけである。光絶縁器ＯＰＴＯ１からの信号の場合、これはマイクロコントローラＵ２によるチェックを更に含む。EXT_WAKEUP#ラインは通常、抵抗器Ｒ５によりハイにプルアップされる。光絶縁器ＯＰＴＯ１は、電話が着呼して、ティップとリング間の電圧が、しきい値及び保護部分９０５によりセットされる電圧しきい値（例えば６０Ｖ）よりも高いとき、このラインをロウに引き下げる。しかしながら、この状態は、電話回線がテストされるとき、または回線上のノイズによっても生じ得る。従って、単にEXT_WAKEUP#ラインがロウになるのを待機することは、誤った"着呼"がシステムを呼び起こすことを可能にし得る。
【０１４６】
結果的に、マイクロコントローラＵ２は着呼の周波数を測定することにより、信号が着呼であるかどうかを判断する。規格内の着呼は、１６Ｈｚ乃至５８Ｈｚの信号である。マイクロコントローラＵ２は、EXT_WAKEUP#信号の４つの立上りエッジ間の３周期を測定し、３つの全ての周期が１５．１Ｈｚ乃至６９．１Ｈｚの周波数に対応すれば、適正な着呼がそのラインに発生したものと見なし、対応するビットをセットする。
【０１４７】
チェック・ルーチンは、EXT_WAKEUP#ラインにロウが検出されると開始される。このラインの３回の連続読出しが全てロウの場合、マイクロコントローラＵ２は、このラインが３回の連続読出しの間にハイに戻るのを待機する。その直後、タイマ割込みの基礎を成す１６ビット・カウンタが読出され、値が記憶され、マイクロコントローラＵ２は、このラインが３回の連続読出しの間にロウに遷移するのを待機する。マイクロコントローラＵ２は次に、最初の２つの立上りエッジの間の時間が、１５ミリ秒乃至６６ミリ秒、すなわち信号が１５．１Ｈｚ乃至６９．１Ｈｚであるか否かをテストする。肯定の場合、高分解能カウンタが再度サンプリングされ、マイクロコントローラＵ２は、次のロウからハイへの遷移を待機するときに、２つのカウンタ・サンプル間の差を計算する。この過程は、EXT_WAKEUP#ライン上の次の２度のロウからハイへの遷移に対して繰り返される。３周期全てが範囲内であると、マイクロコントローラＵ２は適正な着呼がそのラインに発生したと見なし、対応するビットをセットする。EXT_WAKEUP#ラインにロウが発生しない、または任意の周期がその範囲外である場合、マイクロコントローラ・コードはビットをセットすること無く継続する。
【０１４８】
次にマイクロコントローラＵ２はタスク１２８６で、着呼が発生したか、または警報呼び起し時間が満了したかをテストする。ＲＳ−２３２着呼、光絶縁器着呼または警報呼び起し時間に対して、マイクロコントローラＵ２は関連ビットがセットされているかどうかをテストする。
【０１４９】
着呼または警報呼び起し時間の満了が発生すると、システムは再度パワーオンされ、マイクロコントローラＵ２はタスク１２８７でパワーオン・ルーチンにジャンプする。
【０１５０】
その後タスク１２８８で、マイクロコントローラＵ２は、電源装置１７が±５ＶＤＣ及び±１２ＶＤＣラインに調整電力を供給しているかどうかをテストする。供給していない場合、コードはタスク１２８０にジャンプして戻り、ループを再度開始する。一方、電源装置１７が±５ＶＤＣ及び±１２ＶＤＣラインに調整電圧を供給している場合には、マイクロコントローラＵ２はタスク１２９２でハートビート・ルーチンを、タスク１２９６でフェールセーフ・ルーチンを実行する。これら２つのルーチンについては、タスク１１９６及び１２０８にそれぞれ関連して上述された。
【０１５１】
マイクロコントローラＵ２は、次の３つの状況の下で電源装置１７に±５ＶＤＣ及び±１２ＶＤＣラインへの調整電力の供給を停止させる。すなわち、（ｉ）ＢＩＯＳが即時のパワーオフを指令した場合（これは通信ルーチンで実行される）、（ｉｉ）フェールセーフ・タイマが満了した場合、または（ｉｉｉ）ユーザが電源ボタンを押下し、マイクロコントローラＵ２内の延期許可フラグがセットされていない場合であり、マイクロコントローラＵ２はこれらの条件を、スイッチ入力が読込まれる度にテストする。従って、マイクロコントローラＵ２はタスク１３００で、フェールセーフ・タイマが満了したかどうかをテストする。満了していないと、コードはタスク１２８０へジャンプして戻り、ループを再度開始する。
【０１５２】
一方、フェールセーフ・タイマが満了した場合は、システムがパワー・ダウンされることを示し、マイクロコントローラＵ２はタスク１３０４でＳＭＩをＣＰＵ４０に生成する（但し許可されている場合）。このことは、システムが直後にパワーオフされようとしている想定にもとづき、ＣＰＵが特定のタスクを実行することを可能にする。例えば、ＣＰＵ４０は警報呼び起し時間の更新値を再計算し、それをマイクロコントローラＵ２に書込む。
【０１５３】
ＣＰＵ４０によりもはやアクションが実行されなければ、マイクロコントローラＵ２はプログラマブルＳＭＩタイマの満了後にシステムをパワーオフする。ＣＰＵ４０は適切な値をマイクロコントローラＵ２に書込み、ＳＭＩタイマを再始動させることにより、この時間を延長することができる。
【０１５４】
その後、またはタスク１２６８のテストの結果が、電源装置１７が良好な電圧を供給していないことを示すと、マイクロコントローラＵ２はタスク１３０８でシステムをパワーダウンする。これには、（ｉ）電源装置１７に±５ＶＤＣ及び±１２ＶＤＣラインへの調整電圧の供給を停止させ、（ｉｉ）ＣＰＵ４０が電力供給を断たれようとしているので、通信割込みを禁止し、（ｉｉｉ）出力ポート（ＯＮを除く）をハイにセットし、それらの消費電力を最小化し（このモードでは、SWITCH、EXT_RING、EXT_WAKEUPなどがマイクロコントローラＵ２により読込まれ得る）、（ｉｖ）残りのルーチンがシステムへの電力供給がオフされることを認識するように、パワーオフ変数をセットし、（ｖ）次のスイッチ押下によりシステムが再度オンされるように、スイッチ状態をオフ／解除に変更することが含まれる。
【０１５５】
その後、コードはタスク１２８０にジャンプして戻り、ループを再度開始し、着呼、スイッチ押下、システムを呼び起こすＢＩＯＳ指令、または警報呼び起し時間の満了を待機する。
【０１５６】
システム・ソフトウェア：
本発明のコンピュータ・システム１０のハードウェア態様について述べたので、次にコード態様について説明することにする。
【０１５７】
図１４を参照すると、パワーアップ・ルーチンの一般的な概要が示される。このルーチンは、ＣＰＵがリセット・ベクトルにより指し示されるコードにジャンプし、それを実行するとき、タスク２００で開始する。これはＣＰＵがパワーアップされるとき、及びＣＰＵがリセット・ハードウェア信号により、またはリセット・ベクトルにより指し示されるコードにジャンプしリセット命令が実行されることにより、ＣＰＵがリセットされるときに発生する。こうしたリセット・プロシジャは既知である。
【０１５８】
最初に、パワーアップ・ルーチンのフローは、マシンがパワーアップされた理由に依存する。図２６乃至図２９に関連して詳述されるように、システム１０はブラウンアウトまたはブラックアウトによりパワーアップされ得る。こうした場合にシステムをオンに維持することは適正でない。従って、パワーアップ・ルーチンは最初にタスク９４０で、システムがオン状態を維持されるべきかどうかを判断する。システムが不当にパワーアップされた場合、ＣＰＵ４０はタスク９４２でマイクロコントローラＵ２に指令して、電源装置１７に±５ＶＤＣ及び±１２ＶＤＣラインにおける調整電圧の供給を停止させる。
【０１５９】
システムが電力供給し続けられるべきか否かを判断するために実行される１つのテストは、マイクロコントローラが着呼と判断したことに応答してシステムがパワーアップされた場合に、電話回線が着呼しているかどうかを確認することである。特に、パワーアップ後に、システムが着呼に応答して呼び起こされた場合は、システムがハード・ドライブ３１内のハード・ディスクがスピン・アップするのを待機する間に、ＣＰＵ４０はモデム９００または９０２（既に完全に電力供給されている）に、同様に着呼信号を検出したかどうかを問い合わせる。検出していない場合、システムはパワーダウンされる。モデム９００または９０２も同様に着呼信号を検出していれば、システムはブート・プロセスを継続する。
【０１６０】
一般に、システムが電力供給を維持されると仮定すると、パワーアップ・ルーチンのフローは、システムがオフ状態１５６かそれとも延期状態１５４か、すなわち、ＣＭＯＳ  ＮＶＲＡＭ９６内の延期フラグが、それぞれクリアされているかセットされているかに依存する。タスク２０２に示されるように、システム１０は、不揮発ＣＭＯＳメモリ９６から延期フラグを読出すことにより、自身がオフ状態１５６か延期状態１５４かを判断する。システムが正常動作状態１５０からオフ状態１５６または延期状態１５４に遷移するとき、各ルーチンはＮＶＲＡＭ９６内の延期フラグをセットまたはクリアする。延期フラグがＮＶＲＡＭ９６内でセットされている場合、コンピュータ・システム１０は延期状態であり、コンピュータ・システム１０の状態は固定ディスク記憶装置３１に記憶されている。他方、延期フラグがＮＶＲＡＭ９６内でクリアされているときには、コンピュータ・システム１０はオフ状態１５６であり、コンピュータ・システム１０の状態は固定ディスク記憶装置３１に記憶されていない。従って、延期フラグがＮＶＲＡＭ９６内でセットされていれば、コンピュータはタスク２０４乃至２１０で示されるように、"正常"ブート・ルーチンを実行する。第１のタスク２０４はパワーオン自己診断（ＰＯＳＴ）であり、これについては図２６乃至図２９に関連して詳述される。ＰＯＳＴから復帰後、ＣＰＵ４０はタスク２０６に示されるように、ＰＢＯＯＴルーチンを呼び出し、オペレーティング・システムをロードする。
【０１６１】
ＰＢＯＯＴルーチンは、ＩＢＭコンピュータ上で実行される典型的なルーチンであり、僅かな変形を有する。これについては後述される。ＰＢＯＯＴはブート先（ハード・ドライブ３１またはフロッピー・ドライブ２７内のディスク）を判断し、オペレーティング・システム（ＯＳ）をロードする。オペレーティング・システムは、CONFIG.SYSファイルにより命令されるシステム変更を分析して実行し、最終的にAUTOEXEC.BATバッチ・ファイルを実行する。ＰＢＯＯＴルーチンは既知である。ＯＳはＡＰＭデバイス・ドライバをロードし、ＡＰＭデバイス・ドライバはＢＩＯＳに、ＢＩＯＳがＡＰＭ対応かどうかを問い合わす。ＡＰＭ対応の場合、ＢＩＯＳ  ＡＰＭルーチン及びＯＳ  ＡＰＭルーチンがハンドシェークを実行し、その後協動して、本明細書で述べられる様々な機能を提供する。オペレーティング・システムはタスク２１０で示されるように、ユーザにより命令されてコードを漠然と実行する。しかしながら、ＡＰＩにスーパバイザ・ルーチンの存在を知らせた結果、ＡＰＭ  ＢＩＯＳ及びＡＰＭ  ＯＳは、タスク２１２に示されるように、スーパバイザ・ルーチンをプログラムの実行と"並列"に実行させる。すなわち、システム１０は時分割多重マルチタスキング・システムであり、ＡＰＭ事象獲得、従って結果的にスーパバイザ・ルーチンが周期的に実行される。最終的に、スーパバイザ・ルーチンがほぼ毎秒ごとに実行される。スーパバイザ・ルーチンについては、図１５乃至図１８に関連して詳述される。正規のブート・ルーチン２０４乃至２１０が終了後、コンピュータ・システム１０は正常動作状態１５０となる。正常動作状態１５０に関しては、図５に関連して述べた通りである。
【０１６２】
再度タスク２０２を参照し、延期フラグがＮＶＲＡＭ９６内でセットされている場合、システム状態はハード・ドライブ３１に保管されており、システム１０はタスク２１４乃至２２０で示されるように、ブート再開ルーチンを実行する。最初に、システムはタスク２１４で短縮ＰＯＳＴを実行する。短縮ＰＯＳＴについては図２６乃至図２９に関連して詳述される。短縮ＰＯＳＴの後、システムはタスク１５００で、自身を再開させるための延期ファイルを選択する。本明細書で開示されるように、本発明のシステムは好適には複数の延期ファイルを有する。結果的に、システムは、自身をどの延期ファイルから再開させるかを決定しなければならない。延期ファイルはユーザにより、図５９にその１つの例が示される多重延期／再開マネージャを介して選択され得る。更に、オペレーティング・システムは本明細書で述べられるように、どの延期ファイルからシステムが再開すべきかを決定できる。
【０１６３】
システムを再開させる延期ファイルが選択されると、システムはタスク２１６で再開ルーチンを呼び出す。再開ルーチンについては、図３０乃至図３４に関連して詳述される。ここでは再開ルーチンが、コンピュータ・システム１０の状態を、システムが延期される以前の構成に復元することだけを述べておく。タスク２０４乃至２１０で示される正規のブート・ルーチンと異なり、ブート再開ルーチンはＡＰＭ  ＡＰＩにスーパバイザ・ルーチンの存在を知らせる必要がない。なぜなら、ＡＰＭルーチンはシステムを延期するために実行されていなければならず、システム状態が復元されるときにＡＰＭはメモリにロードされ戻すからである。従って、タスク２１２及び２２０に示されるように、再開ルーチンがシステム１０の状態の復元を終了するときＡＰＭは既に存在し、復元コードと"並列"に実行されている。ブート再開ルーチン２１４乃至２２０が終了すると、コンピュータ・システム１０は、図５に関連して上述した正常動作状態１５０となる。従って、正規ブート・ルーチン（タスク２０４乃至２１０）またはブート再開ルーチン（タスク２１４乃至２２０）が実行された後、コンピュータ・システム１０は正常動作状態１５０となる。
【０１６４】
図１５乃至図１８はスーパバイザ・ルーチンの詳細を示すフローチャートである。スーパバイザ・ルーチンは、ＡＰＭにより、"事象獲得"の間にほぼ毎秒ごとに呼び出される。異なるオペレーティング・システムは、異なる周波数で事象獲得を実行し得る。
【０１６５】
スーパバイザ・ルーチンは、図１５乃至図１８のタスク２２２で開始する。以下の説明では、コンピュータ・システム１０が正常動作状態１５０から開始するものと仮定する。最初のタスク２２４では、ユーザがスイッチ２１を押下したかどうかをテストする。スイッチ２１は、図７乃至図９及び図１３に関連して詳述されたように、ＣＰＵ４０がマイクロコントローラＵ２に問い合わすことによりテストされる。
【０１６６】
タスク２２４のテストが、ユーザがスイッチ２１を押下したことを示すと、スーパバイザ・ルーチンは次にタスク９５０で、延期要求が以前にＯＳ内のＡＰＭデバイス・ドライバに発行されたかどうかを判断する。
【０１６７】
タスク９５０のテストが、延期要求がまだＡＰＭドライバに送信されていないことを示すと、スーパバイザ・ルーチンはタスク２２６で、ＯＳ  ＡＰＭデバイス・ドライバに"延期要求"を発行し、次にタスク２２８でＡＰＭドライバに戻る。"延期要求"セットＡＰＭ復帰コードに応答して、ＡＰＭドライバは、ＡＰＭ対応装置があらゆる必要なシステム・タスク（ハード・ディスクの同期など）を実行できるように延期が差し迫っていることを同報し、次に"延期コマンド"を発行する。この延期コマンドにより、ＡＰＭ  ＢＩＯＳ経路指定ルーチンは延期ルーチンを呼び出す。延期ルーチンについては、図１９乃至図２５に関連して詳述される。延期ルーチンは本来、システム１０を正常動作状態１５０から退去させ、延期状態１５４に入力させ、幾つかの命令の後（システムが延期の準備が整っていない場合）、または数分、数時間、数日、数週間若しくは数年の後（システムが延期され、再開される場合）、制御をスーパバイザ・ルーチンに返却し得る。延期ルーチンは、延期しないで復帰するか、または完全な延期及び再開の後に復帰するかに関わらず、常に"正規再開"ＡＰＭ復帰コードをセットする。
【０１６８】
タスク２２４では、スイッチは大抵押下されておらず、従ってスーパバイザ・ルーチンはタスク９５２に移行し、クリティカル延期フラグがセットされているかどうかを判断する。同様に、延期要求がＯＳ内のＡＰＭドライバに以前に送信されている場合、スーパバイザ・ルーチンはタスク９５２に移行し、クリティカル延期フラグがセットされているかどうかを判断する。クリティカル延期フラグがセットされている場合、スーパバイザ・ルーチンは次にタスク９５４で、クリティカル延期要求が以前にＡＰＭドライバに発行されたかどうかをテストする。
【０１６９】
クリティカル延期要求がＡＰＭドライバに発行されていないと、スーパバイザ・ルーチンはタスク９５６で、クリティカル延期要求ＡＰＭ復帰コードを発行し、次にタスク９５８でＡＰＭドライバに復帰する。クリティカル延期要求に応答して、ＡＰＭドライバは延期が差し迫っていることを同報すること無しに、システムを即時延期する。従って、ＡＰＭ対応装置はそれらのそれぞれの事前延期タスクを実行することができない。
【０１７０】
タスク９５２でクリティカル延期フラグがセットされていないか、タスク９５４でクリティカル延期要求が既にＯＳ内のＡＰＭドライバに発行されていると、スーパバイザ・ルーチンは次にタスク９５７で、延期が１５秒以上保留されたかどうかを判断する。肯定の場合、スーパバイザ・ルーチンはタスク９５８でクリティカル延期フラグをセットし、それによりタスク９５４のテストが次のＡＰＭ事象獲得の間にテストされる。
【０１７１】
その後、または延期が１５秒以上保留されなかった場合、スーパバイザはタスク９５９で、延期が保留中であるかどうかをチェックする。保留中の場合、タスク９６０でＣＰＵ４０がマイクロコントローラＵ２に、フェールセーフ・タイマ及びＡＰＭ故障延期タイマを再始動（リセット）させる。
【０１７２】
その後、または延期が保留中でない場合、スーパバイザ・ルーチンは次にタスク２３０に移行し、システムが再開されたばかりかどうかをチェックする。延期ルーチンが呼ばれる場合、システムは延期ルーチンが延期無しに復帰するか、完全な延期及び再開の後に復帰するかに関わらず、自身が丁度再開されたものと見なす。再開がタスク２３０でテストされ、システムが丁度再開されていると（または延期がＤＭＡ若しくはファイル活動により実行されていないと）、"正規再開"ＡＰＭ復帰コードがタスク２３２で発行され、タスク２３４でＡＰＭに返却される。それに応答して、ＡＰＭ  ＯＳドライバはシステム・クロック及びその間に無効となった他の値を更新する。
【０１７３】
大抵の場合、システム１０は再開されたばかりでなく、従ってスーパバイザ・ルーチンはタスク２３６に移行し、任意のユーザ活動をテストする。３つのタイプのユーザ活動、すなわちハードファイル３１活動、キーボード１２活動、及びマウス１３活動が、タスク２３６でテストされる。ＡＰＭ事象獲得の度に、スーパバイザ・ルーチンはハードファイルのヘッド、シリンダ、及びセクタの値をハード・ドライブ３１から読出し、マイクロコントローラＵ２に、マウス割込みラインまたはキーボード割込みラインのいずれかに、ユーザ活動を示す任意の活動が生じたかどうかを問い合わせ、リアル・タイム・クロック９８から時間（分）値を読出す。この値は０分乃至５９分に及び、各時間の開始に再度０分に循環する。３つのハード・ドライブ活動変数（ヘッド、シリンダ及びセクタ）並びに分値が一時的に記憶される。３つのハード・ドライブ活動変数は次に、以前の事象獲得から保管されたハード・ドライブ活動変数と比較される。３つの現ハード・ドライブ値が以前の事象獲得からの値と同一であり、かつマウス割込みまたはキーボード割込みラインのいずれにも活動が生じなかった場合、ユーザ活動は存在しなかったことを示す。ハード・ドライブ値が異なるか、マウス割込みまたはキーボード割込みライン上に活動が生じた場合には、ユーザ活動が存在したことを示し、現ディスク・ドライブ活動変数値が、次の事象獲得の間に読出される値と比較されるように保管される。
【０１７４】
前記活動検出機構では、ハード・ドライブ活動を決定するルーチンがＣＰＵ上で実行され、活動に対応して２つのハードウェア割込みだけがモニタされる。代わりに、活動ががハードウェアにより排他的にモニタされてもよい。例えば、１６本の全てのハードウェア割込みラインが、活動に対応してモニタされ得る。
【０１７５】
ハードファイル、キーボードまたはマウス活動が生じた場合、スーパバイザ・ルーチンは次にタスク１５０２で、活動がユーザによるものか、または着呼または警報により呼び起こされる場合のように、システムが無人操作モードで使用されているかを判断する。ユーザ活動が生じた場合、タスク１５０４で不活動延期タイマがより長い時間間隔にセットされる（または長いタイマが活動化され、短いタイマが非活動化される）。タスク１５０４のステップは、システムが無人操作モードで呼び起こされた後に、ユーザがシステムの使用を開始する場合に、タイマ長を修正するために必要とされる。図２６乃至図２９に関連して説明されるように、システムが無人操作モードで呼び起こされる場合、短い不活動延期タイマ間隔が使用され、システムがユーザ活動により呼び起こされた場合、長い不活動延期タイマ間隔が使用される。ステップ１５０４は、システムが無人操作モードで呼び起こされた後に、ユーザがシステムの使用を開始する場合にのみ、必要とされる。別の態様では、システムが常に短い間隔の不活動延期タイマにより呼び起こされ、ステップ１５０４が、ユーザ活動が生じたときにタイマを約１秒に修正するために使用される。
【０１７６】
不活動延期タイマの時間間隔を修正後、またはユーザ活動（キーボードまたはマウス活動など）が生じなかった場合、スーパバイザ・ルーチンは次にタスク２３８で、待機フラグをテストすることにより、コンピュータ・システム１０が待機状態１５２かどうかを判断する。待機フラグがセットされていると、システム１０が待機状態１５２であることを示し、スーパバイザ・ルーチンは待機状態１５２を抜け出し、タスク２４０で正常動作状態１５０に入力する。スーパバイザ・ルーチンは、待機状態１５２への入力時にパワーダウンされた装置（図５１参照）を再度パワーアップすることにより、待機状態１５２を抜け出す。要するに、システムが待機状態１５２を抜け出すときに、スーパバイザ・ルーチンはビデオ信号を復元し、ハード・ドライブ３１内のハード・ディスクを回転させ、システム・クロックを復元し、ＡＰＭドライバからのＣＰＵアイドル呼び出しがもはやＣＰＵ４０を停止することのないように、ＡＰＭ  ＣＰＵアイドル呼び出しを禁止し、システム１０が待機状態１５２であることを示すフラグをクリアする。
【０１７７】
更に、活動が生じた場合、リアル・タイム・クロック９８からの分値が、続く事象獲得の間に読出される分値との比較のために保管される。現在の分値の保管は、タスク２４１で不活動待機タイマ及び適切な不活動延期タイマを効果的にリセットする。通常の使用状態では、ユーザ活動が発生し、スーパバイザ・ルーチンがタスク２４２で、"無事象"ＡＰＭ復帰コードをセットし、タスク２４３でＡＰＭ呼び出しコードに復帰する。ＡＰＭは"無事象"ＡＰＭ復帰コードに応答して、更にルーチンを呼び出すことはない。
【０１７８】
タスク２３６のテストがユーザ活動が発生しなかったことを示すと、スーパバイザ・ルーチンは次に、不活動待機タイマ及び不活動延期タイマが満了したかどうかを、それぞれ２４５及び２４７でテストする。システム１０が待機状態１５２の場合には、不活動待機タイマの満了はチェックされず、テストはタスク２４４でスキップされる。
【０１７９】
２つのタイマの満了は、保管された分値から現分値を差し引き、ユーザ活動の発生以来の経過時間に対応する値を獲得することにより、チェックされる。この値はタスク２４５で不活動待機タイムアウト値と比較され、タスク２４７で不活動延期タイムアウト値と比較される。２つのタイムアウト値はユーザにより選択可能であり、システムが決して待機状態１５２に入力しないように、若しくは延期状態１５４に入力しないように、または一方のタイマの満了により、待機状態１５２か延期状態１５４のいずれか一方に入力しないように、セットされ得る。いずれかのタイムアウト値を０にセットすると、そのタイマは決して満了しない。
【０１８０】
最後のユーザ活動以来の経過時間が、不活動待機タイムアウト値以上の場合、スーパバイザ・ルーチンはタスク２４６で、システム１０を待機状態１５２に入力させる。不活動待機タイマが満了していないと、スーパバイザ・ルーチンは次にタスク２４７で、不活動延期タイマの満了をチェックする。一方、不活動待機タイマが満了すると、スーパバイザ・ルーチンは、特定のコンポーネントをそれらのそれぞれの低電力モードに設定することにより（図５１参照）、システム１０を待機状態１５２に入力させる。要するに、好適な態様では、スーパバイザ・ルーチンはビデオ信号をブランキングし、ハード・ドライブ３１内のハード・ディスクの回転を停止し、システム・クロックを遅くし、ＡＰＭドライバからのＣＰＵアイドル呼び出しがＣＰＵ４０を停止するように、ＡＰＭ  ＣＰＵアイドル呼び出しを許可し、システム１０が待機状態１５２であることを示すフラグをセットする。システム１０を待機状態１５２に入力させた後、スーパバイザ・ルーチンはタスク２４７で、不活動延期タイマの満了をテストする。
【０１８１】
スーパバイザ・ルーチンはタスク２４７で、不活動延期タイマが満了したかどうかをテストする。最後のユーザ活動以来の経過時間が不活動延期タイムアウト値以上であれば、スーパバイザ・ルーチンはタスク２４８で"延期要求"ＡＰＭ復帰コードをセットし、次にタスク２４３でＡＰＭに復帰する。タスク２２６に関連して上述したように、"延期要求"ＡＰＭ復帰コードのセットに応答して、ＡＰＭは必要なシステム・タスクを実行し、次に延期ルーチンを呼び出す。延期ルーチンについては、図１０乃至図２５に関連して詳述されるが、要するに、システム１０を正常動作状態１５０から退去させ、延期状態１５４に入力させる。タスク２２６に関連して上述したように、延期ルーチンはシステム１０を延期させて、または延期させることなく、制御をスーパバイザ・ルーチンに戻す。一方、不活動延期タイマが満了していない場合には、スーパバイザ・ルーチンはタスク２４２で"無事象"ＡＰＭ復帰コードをセットし、タスク２４３でＡＰＭ呼び出しコードに復帰する。
【０１８２】
大抵は"無事象"ＡＰＭ復帰コードがＡＰＭに返却されるが、様々な他の事象がＡＰＭに返却され得る。しかしながら、各ＡＰＭ事象獲得に対応して、１つのＡＰＭ復帰コードだけが指定され得る。例えば、待機状態１５２に入力した後には、"無事象"がＡＰＭに返却される。延期状態１５４を去った後には、"正規再開"ＡＰＭ復帰コードがＡＰＭに返却される。ＡＰＭにとってキュー待機される特定のメッセージは、コンピュータ・システムの正に性質に依存する。スーパバイザ・ルーチンはまた、"正規再開"ＡＰＭ復帰コードまたは"延期要求"ＡＰＭ復帰コードも返却する。
【０１８３】
図１７を参照するとＡＰＭ最終要求処理ルーチンが示され、タスク９６１で開始する。ＡＰＭ最終要求処理の発行に応答して、ＢＩＯＳ  ＡＰＭルーチンはタスク９６２で、マイクロコントローラＵ２内のフェールセーフ・タイマ及びＡＰＭ故障延期タイマを再始動し、タスク９６３で１５秒延期保留タイマを再始動し、ＯＳ  ＡＰＭがシステムが適切に延期に備えるのを待機している間に、クリティカル延期要求が発行されるのを阻止し、タスク９６４で復帰する。
【０１８４】
図１８を参照するとＡＰＭ最終要求拒否ルーチンが示され、タスク９６５で開始する。ＡＰＭ最終要求拒否の発行に応答して、ＢＩＯＳ  ＡＰＭルーチンがタスク９６６で、マイクロコントローラＵ２内のフェールセーフ・タイマ及びＡＰＭ故障延期タイマを再始動し、タスク９６７でクリティカル延期フラグをセットして即時延期を強要し、タスク９６８で復帰する。
【０１８５】
パワーアップ及び再開ルーチンは、延期ルーチンを知ることにより最もよく理解される。従って、ＡＰＭ  ＢＩＯＳルーチンに関し、最初に本発明のパワーアップ・ルーチンの一般概要（図１４の前記関連説明参照）、スーパバイザ・ルーチンの詳細（図１５乃至図１８）、本発明の延期ルーチンの詳細（図１９乃至図２５）、本発明のパワーアップ・プロセスの詳細（図２６乃至図２９）、本発明の再開ルーチンの詳細（図３０乃至図３４）、ＣＰＵ状態保管ルーチンの詳細（図３５乃至図３８）、ＣＰＵ状態復元ルーチンの詳細（図３９乃至図４２）、及び８２５９状態保管ルーチンの詳細（図４３乃至図４５）の順序で説明する。
【０１８６】
本発明のコンピュータ・システム１０の説明は、ほとんどのルーチンが他のルーチンと相互作用し、延期／再開プロセスが継続サイクルであるので、幾分循環的であるが、ブート・ルーチン（図２６乃至図２９）または再開ルーチン（図３０乃至図３４）より先に、延期ルーチン（図１９乃至図２５）について述べることが最も適切であろう。図１９乃至図２５を参照すると、延期ルーチンのフローチャートが示される。正規ブート・ルーチン２０４乃至２１０またはブート再開ルーチン２１４乃至２２０の実行後、コンピュータ・システム１０が正常動作状態１５０となることを思い起こされたい。更に、図１４に関連して上述したように、コンピュータ・システムが正規にブートされたか（２０４乃至２１０）、ブートを再開されたか（２１４乃至２２０）に関わらず、いずれかのルーチンが終了すると、ＡＰＭ  ＯＳドライバは、図１４に示されるスーパバイザ・ルーチンなどの、ＡＰＭ  ＢＩＯＳルーチンを意識する。結果的に、ＡＰＭはスーパバイザ・ルーチンをほぼ毎秒ごとにポーリングする。
【０１８７】
延期ルーチンは図１９乃至図２５に示され、タスク２５０で開始する。延期ルーチンは、スーパバイザ・ルーチンがＡＰＭに"延期要求"ＡＰＭ復帰コードを返却することに応答して、ＡＰＭにより呼び出される。更に、延期ルーチンは、システムがチェックポイントを実行するときに（図５０及び図５１に関連して述べられる）、呼び出され、部分的に実行される。最初に、延期ルーチンのフローは、タスク９７０で、ＣＰＵ４０がＳＭＩを有する"Ｓ"パーツか否かに依存する。Ｓパーツの場合、ＣＰＵ４０はタスク９７２で、マイクロコントローラＵ２にＳＭＩをＣＰＵ４０に対して生成させる。当業者には既知のように、ＳＭＩに応答して、ＣＰＵ４０内のマイクロコードはタスク９７４で、ＣＰＵ４０の状態をセグメントＥ０００Ｈデータ構造に保管する。
【０１８８】
一方、ＣＰＵ４０がＳＭＩを有する"Ｓ"パーツでない場合には、ＣＰＵ状態保管ルーチンがタスク２５２で呼び出される。ＣＰＵ状態保管ルーチンについては、図３５乃至図３８に関連して詳述される。ここでは延期ルーチンが最初に呼び出されるときに、ＣＰＵ４０がどのモードであろうと、残りの延期ルーチンはＣＰＵ４０によりリアル・モードで実行され、従って、許可アドレス空間以外の命令を実行しようとすることにより、或いは特権命令を実行しようとすることにより生じるエラーの心配無しに、実行され得ることだけを述べておく。
【０１８９】
ＣＰＵ状態保管ルーチンは、タスク２５３で、プログラム制御を延期ルーチンに固有の方法で返却する。ＣＰＵ状態保管ルーチンから延期ルーチンへの"復帰"は、ＣＰＵのリセットを含み、図３５乃至図３８のタスク６３０乃至６３２に関連して以降で詳述される。延期ルーチンに関する重要な詳細は、ＣＰＵレジスタがセグメントＥ０００Ｈデータ構造に書込まれ、ＣＰＵ４０がリアル・モードであることである。
【０１９０】
ＣＰＵ状態保管ルーチンが復帰するか、またはＳＭＩに応答してＣＰＵがその固有の状態を保管した後、延期ルーチンは次にタスク２５４で、スイッチ２１が押下されたかどうかを確認する。スイッチ２１の閉鎖が、図７乃至図１２及び図１３に関連して上述したようにテストされる。スイッチが押下されていない場合、目下の延期はソフトウェア延期であり、ソフトウェア延期フラグがＣＭＯＳ  ＮＶＲＡＭ９６内でセットされる。このことはソフトウェア延期が、スイッチ閉鎖により開始されるハードウェア延期と混同されないように保証する。全てのソフトウェア延期は、マイクロコントローラＵ２内のビットをセットすることにより、ハードウェア延期に変換される。ソフトウェア延期からハードウェア延期への変換後の次のスイッチ閉鎖により、延期は打ち切られる。
【０１９１】
次のタスク２６２は、セグメントＥ０００Ｈ内にスタックをセット・アップする。
【０１９２】
スタックがセット・アップされると、延期ルーチンはタスク２６４で、現在、ＤＭＡ転送、フロッピー・ドライブ転送、またはハードファイル転送のいずれかが実行中か否かを確認するために、それぞれＤＭＡ制御装置７２、ディスケット・アダプタ８４、及びＩＤＥディスク制御装置８６を調査する。実行中であれば延期は実行され得ない。なぜなら、これら３つのタイプの転送に特有の特性が、十分な延期の実行を阻止するからである。例えば、ハード・ドライブ３１からのハードファイル転送が実行中の場合、データは既にＩＤＥ制御装置により読出されているが、システム・メモリ５３へはまだ転送されていない。このデータはＣＰＵにより適切にアクセスされ得ず、従ってシステムがハードファイル読出しの途中で延期された場合、データは喪失され得る。このように、これら３タイプの任意の転送が実行中の場合、延期は次のＡＰＭ事象獲得まで延期され、その時、ＤＭＡ及びディスケット制御装置の活動が再度テストされる。
【０１９３】
結果的に、フローチャートの２５２、２６０及び２６２で実行されるタスクは、制御をＡＰＭに戻すように、反対に実行されなければならない。最初にタスク２６５で、ＢＩＯＳが読出し／書込みから読出し専用に変更される。これはまだシャドーイング・データを含むセグメントＥ０００Ｈをクローズすることにより達成される。タスク２６２で生成されたスタックは、ポップされ復元される。最後にタスク２６６でＣＰＵ状態がＣＰＵ状態復元ルーチンにより復元され、その後タスク２６７で制御がＡＰＭに戻される。延期ルーチンは次の事象獲得の間に、ＡＰＭにより別途約１秒再度ポーリングされる。その時までに、延期プロセスを阻止した転送が恐らく完了し、延期の継続を可能にする。
【０１９４】
タスク２６４を参照すると、ＤＭＡ転送、フロッピー・ドライブ転送、またはハードファイル転送が目下実行されていない場合、延期は実行され得る。延期ルーチンはタスク２６８へと続く。ここでフェールセーフ・タイマが継続的にカウント・ダウンしており、スイッチ２１がオフ／解除状態の間のその満了時に、システムをオフすることを思い起こされたい。従って、最初のタスク２６８では、図７乃至図９、及び図５２乃至図５５に関連して述べたように、フェールセーフ・タイマをリセットする。
【０１９５】
次にタスク２７０で、８０４２コプロセッサ１０４の状態が保管される。８０４２コプロセッサ１０４のレジスタは既知である。レジスタはＣＰＵ４０により直接読出し可能であり、それらの値は直接セグメントＥ０００Ｈデータ構造に書込まれる。
【０１９６】
次にタスク２７２で、８２５９割込み制御装置９２の状態が保管される。延期ルーチンは８２５９状態保管ルーチンを呼び出す。このルーチンは、図４３乃至図４５に関連して詳述される。ここでは８２５９状態保管ルーチンが、２つの８２５９割込み制御装置９２の不明のレジスタの内容を、たとえそれらの幾つかが書込み専用だとしても、確認することだけを述べておく。レジスタ値はセグメントＥ０００Ｈデータ構造に直接書込まれる。
【０１９７】
割込み制御装置９２の状態が保管された後、延期ルーチンにより実行される様々な割込み駆動型タスクが適切に機能するように、割込み制御装置９２の構成が既知の状態に変更されなければならない。従って、ＢＩＯＳデータ領域及びベクトル・テーブルが、タスク２７４でスワップされる。延期ルーチンは、現状態ＢＩＯＳデータ領域及びセグメント００００Ｈのベクトル・テーブルの内容を、セグメントＥ０００Ｈにコピーする。次に、既知状態ＢＩＯＳデータ領域及びベクトル・テーブルの内容が、セグメントＥ０００Ｈデータ構造からセグメント００００Ｈにコピーされる。既知状態ＢＩＯＳデータ領域及びベクトル・テーブルは、図２６乃至図２９に示されるブートアップ・ルーチン（後述）のタスク４１４で、セグメントＥ０００Ｈにコピーされる。最後に、現状態ＢＩＯＳデータ領域及びベクトル・テーブルが、セグメント００００ＨからセグメントＥ０００Ｈデータ構造にコピーされる。ルーチンがタスク２７４を終了すると、割込み１３Ｈ（ディスク読出し／書込み）及び割込み１０Ｈ（ビデオ・アクセス）などの全ての割込みが、期待通りに機能するようになる。
【０１９８】
次に、タイマ１０２の状態がタスク２７６で保管される。タイマのレジスタは既知である。全てのレジスタはＣＰＵ４０により直接読出し可能であり、それらの値はセグメントＥ０００Ｈデータ構造に直接書込まれる。ＩＤＥディスク制御装置８６の状態も、タスク２７６で保管される。ＩＤＥディスク制御装置８６のレジスタは既知である。全てのレジスタがＣＰＵ４０により直接読出し可能で、それらの値がセグメントＥ０００Ｈデータ構造に直接書込まれる。
【０１９９】
次のステップでは、ハード・ドライブ３１上の延期ファイルに書込まれるシステム・メモリを準備する。システム・メモリはシステムＲＡＭ５３（主メモリ及び拡張メモリの両方を含む）及びビデオ・メモリ５８を含む。この時点で、ＲＡＭ５３の一部が外部キャッシュ６０内に存在し得る。ＣＰＵキャッシュは、図３５乃至図３８に関連して後述されるタスク６２８でフラッシュされる。次に、外部キャッシュがタスク２８６でフラッシュされ、ハード・ドライブ３１への書込み速度の高速化を可能にする。
【０２００】
システム１０上で実行されるコードは、ＩＤＥ制御装置８６を不明の状態にしているかも知れない。結果的に、次のステップ２９２では、ＩＤＥ制御装置８６を既知の状態に初期化する。これは値をＩＤＥ制御装置８６内のレジスタに直接書込むことにより達成される。
【０２０１】
次にタスク９７６で、あらゆるモデムの状態を読出し、セグメントＥ０００Ｈデータ構造に保管する割込み駆動型並列スレッドが開始される。ルーチンは、特定のモデムに関連付けられるＣＯＭＭ（通信）ポートに対応する割込みを捕獲し、モデムが順次そのレジスタ内容を返送するように、モデムにコマンドを送信し、モデムからレジスタ内容を受信し、レジスタ値をセグメントＥ０００Ｈデータ構造に保管する。このルーチンは第１のコマンドをモデムに送信し、次に割込み駆動式に応答して、モデムの応答を受信し、各ＣＯＭＭポート割込みに応答して次のコマンドをモデムに送信する。このプロシジャが、モデムの全てのレジスタが保管されるまで繰り返される。並列スレッドとして実行されない場合、このルーチンはシステムを延期するのに要する時間に、数秒（特定のモデム及び現ボーレートに依存して、１モデムにつき３秒乃至５秒）を追加し得る。それに対して、割込み駆動型並列スレッドの場合、システム状態がハード・ドライブ３１に書込まれる以前にルーチンが実行を完了すれば、延期にほとんどまたは全く時間を追加しない。
【０２０２】
割込み駆動型並列スレッド・モデム保管ルーチンの開始後、タスク１５１０で、適切な延期ファイルがハード・ドライブ３１内の固定ディスク上で突き止められなければならない。上述したように、システムは好適には複数の延期ファイルを有する。システムを復元するための延期ファイルのヘッド、セクタ、及びシリンダが、ＣＭＯＳメモリ９６に記憶される。延期ファイルが突き止められると、ファイル・サイズ及びシグニチャが読出される。好適な態様では、シグニチャは、延期ファイルの存在を示す任意の長さのＡＳＣＩＩコードである。別の態様のシグニチャも可能であり、例えばハードファイル・システム上でランダムに見い出される確率が非常に低い２進ストリングなどが使用され得る。
【０２０３】
次にタスク１５１２で、システムは現セッションが延期されるべきか否かを判断する。適切な延期ファイルに対応するＳＯＲＭビットがセットされている場合、その特定の延期ファイルは読出し専用と見なされ、システムは延期され、そのファイルには戻されない。もちろん、ユーザは現セッションを形成するために、上述したように延期／再開マネージャを用いて延期セッションを選択できるが、システム状態は異なる延期ファイルに保管される。ＳＯＲＭビットがセットされていると、次にタスク１５１３で、プログラムの実行がタスク１５１９にジャンプし、そこでシステムはシステムをオフする以前にある時間、例えば５秒間待機する。この期間に、ユーザは多重延期／再開マネージャを呼び出すことができる。これは上述のように、ユーザが様々な機能を実行することを可能にする。
【０２０４】
システムが延期されるものと判断し、適切な延期ファイルのファイル・サイズ及びシグニチャを読出した後、次のステップ２９６では、シグニチャ及びファイル・サイズが正しいことを保証する。シグニチャが不正であるか（この場合、別のプログラムが延期ファイルを変更したことを示す）、ファイル・サイズが正しくない場合（延期ファイル・サイズが変更されたことを示す）、延期ルーチンがタスク２９８で致命的延期エラー・ルーチンを呼び出す。この致命的延期エラー・ルーチンは、図３８のタスク６５２で開始する。致命的延期エラー・ルーチンから脱出するために、ユーザがスイッチ１７を押下すると、プログラム制御はタスク２９９からタスク５０６にジャンプする。
【０２０５】
一方、シグニチャが正しく、延期ファイルが十分に大きいと、延期ルーチンはコンピュータ・システム１０の状態をメモリに書込むように処理を続ける。
【０２０６】
コンピュータ・システム１０の状態をハード・ドライブ３１に書込む以前に、ＣＰＵ４０はタスク２９７で、マイクロコントローラＵ２にフェールセーフ・タイマを再始動させ、マイクロコントローラＵ２に、スイッチ２１が再度押下されたかどうかを判断するように問い合わす。スイッチ２１が再度押下されなかった場合、延期は継続すべきである。一方、スイッチ２１が再度押下された場合には、延期は打ち切られる。延期ルーチンの複数のポイントで、フェールセーフ・タイマが再始動され、スイッチ２１の閉鎖がテストされる。タスク２９７は単なる１つの例に過ぎず、当業者はフェールセーフ・タイマの再始動間の時間値及び許容可能時間を決定できよう。延期ルーチンは、フェールセーフ・タイマが満了し、マイクロコントローラＵ２が電源装置１７を"オフ"する以前に、フェールセーフ・タイマをリセットすべきである。同様に、スイッチ２１は頻繁にチェックされるべきである。スイッチ２１が再度押下された場合、これはユーザが延期の打切りを希望していることを示し、コードは再開ルーチン内の適切なポイントにジャンプして、"延期解除（un-suspend）"し、部分的延期から回復すべきである。
【０２０７】
同様に、Ctrl-Alt-Delがタスク３５０で延期を打ち切る。Ctrl-Alt-Del（Controlキー、Altキー、及びDeleteキーを同時に押下する）は、ＩＢＭ  ＢＩＯＳ及びインテル８０Ｘ８６ファミリＣＰＵにもとづく典型的なコンピュータ・システムをリセットする既知の方法である。コンピュータ・システム１０は、既知のように、ＢＩＯＳ割込み１ハンドラによりCtrl-Alt-Delを処理する。コンピュータ・システム１０は僅かに変更された割込み１ハンドラを有し（タスク３５０）、これがタスク３５２でＣＭＯＳメモリ９６内の延期フラグをクリアし、タスク３５４でリセット時ブートアップ・ルーチンにジャンプする。
【０２０８】
本発明のコンピュータ・システム１０では、延期ルーチンの実行中にCtrl-Alt-Delを押下すると、コンピュータ・システムはオフ状態１５６に入力する。なぜなら、スイッチ２１の閉鎖の後にCtrl-Alt-Delを押下すると、ブートアップ・ルーチンが呼び出され、ブートアップ・ルーチンがマイクロコントローラＵ２を次の状態、すなわちフェールセーフ・タイマが満了しており、スイッチがまだオフ／解除状態である状態に初期化するからである。従って、延期ルーチンの間にCtrl-Alt-Delを押下すると、コンピュータ・システム１０はオフ状態１５６に入力する。
【０２０９】
タスク３００を参照すると、延期ファイルが再度ハード・ドライブ３１上で突き止められる。すなわち、シグニチャ語句がタスク３００で延期ファイルの最初のバイトに書込まれる。次にタスク３０２で、セグメントＥ０００Ｈの全６４キロバイト（ＫＢ）のデータが延期ファイルに書込まれる。セグメントＥ０００Ｈのこの６４ＫＢのコピーは、実際には単にプレース・ホルダ（place holder）であり、延期ルーチンの終りのこの同一位置に再度書込まれる。
【０２１０】
次に、ビデオ制御装置５６の状態がタスク３０３で保管される。ビデオ制御装置５６のレジスタは既知であり、全てのレジスタがＣＰＵ４０により直接読出し可能であり、それらの値がセグメントＥ０００Ｈデータ構造に直接書込まれる。
【０２１１】
次に、システム・メモリが延期ファイルに書込まれる。これはツイン・バッファ・システムを用いて達成され、データをシステム・メモリから読出し、それを圧縮してセグメントＥ０００Ｈに書込み、最終的に圧縮データをセグメントＥ０００Ｈから延期ファイルに書込む。２つのルーチンが時分割多重式に実行され、一方はデータを圧縮し、セグメントＥ０００Ｈに書込み、他方は延期ファイルに書込む。前者はフォアグラウンドで実行され、後者はバックグラウンドで実行される割込み駆動型ルーチンである。明らかなように、１つのＣＰＵ４０だけしか存在しないので、所与の時刻に１つのルーチンだけが実行され得る。しかしながら、後者のルーチンは割込み駆動型なので、延期ファイルへのデータの転送速度を最適化するために、前者のルーチンの実行を中断することができる。２つの各バッファは８Ｋバイト長であり、ハード・ドライブ３１への転送時間を最適化するものと考えられる。
【０２１２】
このプロセスはタスク３０４で開始し、第１の８Ｋバイト・バッファを満たすのに十分なデータを読出し、圧縮し、セグメントＥ０００Ｈに書込む。データはランレングス符号化法を用いて圧縮されるが、任意の適切な圧縮方法が使用され得る。この時、一般的に３０７で示されるバッファからの書込みルーチンが、タスク３０６で開始される。バッファからの書込みルーチン３０７は割込み駆動型ルーチンであり、バックグラウンドで実行され、タスク３０８乃至３１０を含む。圧縮ルーチンは一般に３１１で示され、タスク３１２乃至３１８を含むフォアグラウンド・ルーチンである。最初にタスク３０８で、バッファからの書込みルーチン３０７が、タスク３０４で充填されたバッファを延期ファイルに書込む。バッファからの書込みルーチン３０７がバッファ内容を延期ファイルに書込む間、圧縮ルーチン３１１はタスク３１２で、次のバイトをシステム・メモリから読出し続け、それらを圧縮し、圧縮データを他方の８Ｋバイト・バッファに書込む。圧縮ルーチン３１１がバッファを圧縮データにより充填すると、次にタスク３１４で、システム・メモリ全体が既に圧縮されたかどうかが判断される。
【０２１３】
ＩＤＥ制御装置８６は、データをハード・ドライブ３１に超高速に書込むことができない。結果として、圧縮ルーチン３１１は常に、バッファからの書込みルーチン３０７がハード・ドライブ３１へのバッファの書込みを終了する以前に、ハード・ドライブ３１に書込まれていない方の８Ｋバイト・バッファの充填を終了する。従って、圧縮ルーチン３１１は、バッファからの書込みルーチン３０７が、ハード・ドライブ３１へのバッファの書込みを終了するのを待機しなければならない。圧縮ルーチン３１１が全てのシステム・メモリの圧縮及び書込みを終了していないと、圧縮ルーチン３１１はタスク３１６で、バッファからの書込みルーチン３０７を待機する。圧縮ルーチン３１１及びバッファからの書込みルーチン３０７は、フラグのセットを介して通信する。バッファからの書込みルーチン３０７が延期ファイルへのカレント・バッファの書込みを終了すると、ルーチン３０７は次にタスク３０８でバッファ・フラグを切り替え、それにより圧縮ルーチン３１１に、延期ファイルに書込まれたばかりのバッファに、圧縮データの充填を開始してよいことを知らせる。次にタスク３０９で、タスク２９７に関連して上述したように、フェールセーフ・タイマＣ２がリセットされ、スイッチ２１の閉鎖事象がチェックされる。
【０２１４】
バッファからの書込みルーチン３０７は次にタスク３１０で、延期ファイルに書込まれたばかりのバッファが、書込まれるべき最後のバッファかどうかを判断する。そうでない場合、バッファからの書込みルーチンは、圧縮ルーチン３１１により充填されたばかりのバッファを延期ファイルに書込む。しばらくして、圧縮ルーチン３１１はバッファ・フラグを調査することにより、バッファが圧縮システム・メモリとして準備完了したことを知る。すなわち、圧縮ルーチンはタスク３１６で、バッファからの書込みルーチン３０７がカレント・バッファに関し終了するまで待機し、その時点で、圧縮ループがタスク３１２から継続する。ここでリニア・フレーム・バッファリングがサポートされる場合、ビデオ・メモリ５８が圧縮されるが、ＶＥＳＡページ・アクセスでは圧縮されない。むしろ、ＶＥＳＡページ・アクセス・ビデオ・メモリは、ＶＥＳＡ呼び出しによりビデオ制御装置５６を通じて読出され、上述のツイン・バッファ・システムにより圧縮無しに書込まれる。
【０２１５】
圧縮ルーチン３１１が全てのシステム・メモリの圧縮を終了すると、圧縮ルーチン３１１はタスク３１８で、バッファからの書込みルーチン３０７が最後のバッファを延期ファイルへ書込み終えるのを待機する。バッファからの書込みルーチン３０７が終了すると、圧縮ルーチンはタスク３１０からタスク３１８に分岐し、脱出しない。この時点では、バックグラウンド・ルーチンは実行されておらず、メイン・プログラムはタスク３２０へと継続する。
【０２１６】
次にタスク３２０で、ＤＭＡユニット７１（ＤＭＡ制御装置７１及び中央アービタ８２）、８２７７ディスケット制御装置８４、及びＲＳ−２３２  ＵＡＲＴ９４の状態が保管される。これらの装置は既知のレジスタを有する。ディスケット制御装置８４及びＵＡＲＴ９４内の全てのレジスタが、ＣＰＵ４０により直接読出し可能であり、それらの値がセグメントＥ０００Ｈデータ構造に直接書込まれる。ＤＭＡユニットは読出し可能なレジスタを有さず、各ＤＭＡ転送以前に、通常、書込み専用レジスタがセット・アップされる。この理由から、延期ルーチンはＤＭＡ転送が実行中の場合、延期を停止する。
【０２１７】
次にタスク９７８で、延期ルーチンは、タスク９７６に関連して上述した割込み駆動型モデム状態ルーチンが終了したか否かをテストする。終了していない場合には、このルーチンが終了するのを待機する。
【０２１８】
コンピュータ・システム１０が延期状態１５０に入力すると、延期ファイルを不正に変更するものを検出することが望ましかろう。例えば、誰かが変更延期ファイルを生成し、その延期ファイルをハード・ドライブ３１に転送し、コンピュータ・システム１０を保管された状態と異なる状態に復元させようとするかも知れない。このために、擬似ランダム値がセグメントＥ０００Ｈデータ構造に配置される。タスク３２８で示されるように、割込み駆動型モデム状態保管ルーチンの終了後、１６ビット・タイムスタンプが高速タイマ１０２の１つから読出される。このタイムスタンプは、次にセグメントＥ０００Ｈデータ構造に書込まれる。
【０２１９】
次に、Ｅ０００Ｈセグメント全体の１６ビット・チェックサムが、Ｅ０００Ｈ内の各１６ビット・ワードをキャリー・ビットを考慮すること無く加算することにより、計算される。このチェックサムは、タスク３３０でセグメントＥ０００Ｈデータ構造に書込まれ、タスク３３２でＣＭＯＳ  ＮＶＲＡＭ９６に書込まれる。その後タスク３３４で、全ての作業変数がＣＰＵ４０からセグメントＥ０００Ｈデータ構造に書込まれ、次にタスク３３６で、セグメントＥ０００Ｈ全体が延期ファイルに、その延期ファイルのシグニチャ語句の後（シグニチャの直後）から、再度書込まれる。次にタスク３３８で、延期フラグがＣＭＯＳ  ＮＶＲＡＭ９６内にセットされ、コンピュータ・システム１０に、コンピュータ・システムの状態が延期ファイルに保管されたことを示す。
【０２２０】
次にタスク９８０で、延期ルーチンはチェックポイントが生成されるかどうかを判断する。生成される場合、システムはパワーダウンされるべきではなく、むしろシステムは、実行されたばかりの部分的延期から回復するために必要な程度、再開されなければならない。従って、チェックポイントが生成されている場合には、タスク９８２で、延期ルーチンは再開ルーチンのタスク４８４にジャンプし、ここで部分的再開が実行される。
【０２２１】
チェックポイントが生成されていない場合には、システムはタスク１５１４で、即時延期／再開コンテキスト変更が選択されたかどうかを判断する。こうした変更はユーザにより、"アプレット（applet）"として知られるＯＳ／２アプリケーションまたはウィンドウズ・アプリケーションを介して選択され得る。こうしたアプレットは、異なる延期システム間の迅速な変更を可能にし得る。
【０２２２】
更に、こうした即時延期／再開コンテキスト変更は、オペレーティング・システム自身により引き起こされ得る。例えば、ＯＳ／２またはウィンドウズなどの特定のオペレーティング・システムは、ＰＣ−ＤＯＳまたはＭＳ−ＤＯＳなどの異なるオペレーティング・システム上で実行される特定のプログラムを実行できないかもしれない。他のオペレーティング・システムにより実行され得る問題を有し得るプログラムのクラスに、ＤＯＳベースのゲームがある。こうしたゲームは通常、大量のシステム資源を使用するので、他のオペレーティング・システムにより残された"フック（hook）"が、ゲームが適切に機能することを妨害する。こうした状況では、あるオペレーティング・システムが、（ｉ）その現セッションをある延期ファイルに延期し、（ｉｉ）システム状態を異なるオペレーティング・システムから再開させ、それによりオペレーティング・システムの"クリーン"なコピーが、ゲームなどの特定のプログラムを実行することを可能にし、（ｉｉｉ）新たに再開されたセッションを延期または廃棄し、（ｉｖ）システムを、前記（ｉ）でシステム状態が保管された延期ファイルから再開させることができる。前記摘要の要点は、システムが適切に遷移するように、適正な延期ファイルがＣＭＯＳメモリ内で指し示されることである。ＣＭＯＳメモリの追加のセクションは、一種の"スタック"として機能するように使用され得る。すなわち、あるセッションが完了したときに（そのセッションが延期または廃棄されることにより示される）、システムがＣＭＯＳ内で示される他の延期ファイルから再開できるように、適切なフラグを有する２つ以上の延期ファイルが、ＣＭＯＳメモリ内に記憶され得る。
【０２２３】
タスク１５１４で、即時延期／再開コンテキスト変更が選択されたと判断されると、タスク１５１６で適切なコードがセットされ、システムを所望の延期ファイルから再開させる。こうしたコードは、上述のように、ＣＭＯＳメモリ内の適切な延期ファイルを指示するステップと、任意のスワップ・ファイルの位置を指示するステップとを含み得る。
【０２２４】
上述したように、本システムはシステムが再開するための複数の延期ファイルを有し得る。このことは、ハード・ドライブ上のファイルを管理する特定の措置が取られない限り、２つのタイプの幾つかの問題を生じ得る。これらのタイプは、（ｉ）スワップ・ファイル問題、及び（ｉｉ）データ・ファイル問題である。
【０２２５】
ほとんどの高性能オペレーティング・システムは、揮発システムＲＡＭにより提供されるよりも大きなメモリを要求する。結果的に、これらのオペレーティング・システムは、現在ＣＰＵにより実行されていないプログラムの一部分及びデータを記憶するために、"スワップ・ファイル"として知られるハード・ドライブ上の特殊ファイルを使用する。プログラム及びデータがＣＰＵの実行のために要求されると、ＲＡＭ内のデータがスワップ・ファイル内のデータとスワップされる。従って状況によっては、コンピュータ・システムの"状態"も、これらのスワップ・ファイルなどの、ハード・ドライブ上の複数のファイルを含むものと思われる。こうした状況では、システム状態のスワップ・ファイル部分をハード・ドライブに記憶する必要はない。なぜなら、それらは既にハード・ドライブ上に記憶されているからである。しかしながら、スワップ・ファイルの破壊を阻止する措置が取られなければならない。
【０２２６】
一方、１つの延期ファイルだけを有するシステムでは、特定のシステム状態がハード・ドライブ上で見い出される事実が関係しない。揮発メモリ及びレジスタ内のシステム状態の一部分は、システムが延期されるときに延期ファイルに保管される。システムが再開されるときには、スワップ・ファイル内のデータは、システムが延期したときにあった場所に存在する。同様に、多重延期ファイルの全てを、異なるスワップ・ファイルを使用する異なるオペレーティング・システムと一緒に使用することは、問題でない。どの異なるオペレーティング・システムも、他のオペレーティング・システムの任意のスワップ・ファイルをアクセスまたは破壊することはない。
【０２２７】
他方、同一のオペレーティング・システムを有し、複数の延期ファイルを有するシステムでは、第１のコンピュータ状態に関連付けられるスワップ・ファイルの内容が、第２のコンピュータ状態に関連付けられるスワップ・ファイルの内容と完全に異なり得る。両バージョンのオペレーティング・システムが同一のスワップ・ファイルを参照し得るので、一方の状態が他のシステムのスワップ・ファイルを破壊するか、他のスワップ・ファイルにより全くディセーブルされ得る。第１のコンピュータ状態を第２のコンピュータ状態からのスワップ・ファイルと一緒に使用することは、悲惨な結果を招き得る。
【０２２８】
従って、特定の延期ファイルに記憶された状態に関連付けられる特定のスワップ・ファイルの位置またはＤＯＳハンドルが、不揮発記憶装置のどこかに保管されなければならない。例えば、特定の延期ファイルに記憶された状態に関連付けられるスワップ・ファイルの位置またはハンドルが、延期ファイル自身の一部として記憶され得る。または、ＣＭＯＳ不揮発メモリが十分に存在する場合には、特定の延期ファイルに関連付けられるスワップ・ファイル位置のテーブルが使用され得る。重要な点は、システム状態が特定の延期ファイルから再開されるときに、オペレーティング・システムが関連スワップ・ファイルの位置を知らされることである。これは例えば、スワップ・ファイルの位置またはハンドルを、それらを表すことが知れているメモリ（またはファイル）内の特定の位置に書込むことにより、達成され得る。これはまた、システム状態が再開されるときに、特殊ＡＰＩ機能によっても達成され得る。
【０２２９】
前記第２の可能な問題はデータ・ファイル問題である。当業者には既知のように、複数のアプリケーションが、書戻されるファイルを同時にアクセスできることが望ましい。DOS SHARE.EXEプログラムは、同時にオープンされているまたは使用されているファイルをモニタし、他がそのファイルを使用するのを警告または阻止するプログラムの例である。本システムでは、多くのファイルがオープンされており、延期のアプリケーションがメモリ内にデータ・ファイルを有する状況において、システム状態が保管され得る。システムを再開するための複数の延期ファイルを有するシステムでは、ファイルが複数セッションにおいてオープンされることが考えられる。しかしながら、あるセッションからのモニタ・プログラム（例えばSHARE.EXE）は、ファイルが異なるセッションでオープンまたは使用されていることを認識しない。従って、ファイルの使用を許可する措置が講じられない限り、データが上書きされる問題が発生する。
【０２３０】
従って、複数の延期ファイルを有するシステムでは、ファイル使用のモニタ（監視）が任意の１セッションを超越しなければならない。こうした大域ファイル使用のモニタは、ハード・ドライブまたはＣＭＯＳ不揮発メモリに書込まれる（但しこれらの資源が豊富な場合）オープン・ファイルのリストであったりする。単にオープン・ファイルのリストに加え、ファイルが使用されているセッションなどの情報が含まれてもよく、それによりユーザが延期セッション間の即時コンテキスト・スイッチを実行し、所望のファイルを解放できるようにする。大域モニタと各セッション間のインタフェースは、各セッションに、使用中ファイル・リストを用いる同一の大域使用モニタを実行させる形式を取り得る。別の方法は、大域ファイル使用モニタを、他のオペレーティング・システムのファイル使用モニタ（例えばSHARE.EXE）と互換にし、システムが再開された後に、オープン・ファイル・リストを各セッションのその特定のファイル使用モニタに転送することである。これは例えば、使用中ファイル・リストを、それらを表すことが知れているメモリ（またはファイル）内の特定の位置に書込むことにより達成され得る。これはまた、システム状態が再開されるときに、特殊ＡＰＩ機能によっても達成され得る。好適には、システムは各ファイルに対応するビットまたはフラグを使用し、これらのビットまたはフラグがファイル・システムにおいて一般に使用され、特定のファイルが"オープン"または使用されていることを示す。フラグはファイルが使用可能なことを示すために１にセットされ、ファイルが現セッションまたは異なるセッションでオープンまたは使用されていることを示すために、異なる値にセットされる。
【０２３１】
タスク１５１６で適切なコードがセットされると、プログラム実行は再開ルーチンに移行し、システムは新たに指示された延期ファイルから、即時再開することができる。
【０２３２】
タスク１５１４で即時延期／再開コンテキスト変更が選択されなかったと判断されるか、或いはタスク１５１９で、システムをオフする以前に、ユーザが多重延期／再開マネージャを呼び出すように、システムがある期間（例えば５秒）休止した後、システムはタスク１５２０で、多重延期／再開マネージャが呼び出されたかどうかを判断する。多重延期／再開マネージャは、ユーザが任意の時刻に、しばしば"ホット・キー"として参照される特定のキーの組み合わせを同時に押下することにより呼び出される。呼び出された場合には、タスク１５２２で多重延期／再開マネージャ画面が表示される。
【０２３３】
多重延期／再開マネージャ画面の１つの例が図５９に１７００で示され、システムを再開するための別の延期ファイルを選択するためにユーザにより使用される。画面１７００は２つのウィンドウ１７０２及び１７０４を有し、それぞれ延期可能セッション及び１回使用（ＳＯＲＭ）セッションを表示する。画面１７００は更に、ボタン１７０６、１７０８及び１７１０などの複数のユーザ・インタフェース装置を有し、これらはそれぞれシステムを再開させるために、新たなセッションを生成するために、そして脱出する（それ以上タスクを実行することなくマシンをオフする）ために使用される。こうしたユーザ・インタフェース装置は当業者には既知である。ユーザがシステムを再開するために新たなファイルを選択しない場合、システムは最後に選択された延期ファイルに延期され、そこから再開する。
【０２３４】
セッション間の追加の保護を提供するために、システムが選択延期ファイルから再開される以前に、ユーザはパスワードをタイプ入力するように任意的に催促され得る。各延期ファイルは任意的にこうした関連パスワードを有し得り、これらはファイル自身の一部として、または他の不揮発メモリ内に配置される。こうしたパスワード機構は、あるユーザが別のユーザのシステム構成またはデータに影響を与えることを阻止する。
【０２３５】
図１９乃至図２５を再度参照すると、コード実行は次にタスク１５２４で、ユーザが"新規生成（create new）"ボタン１７０８を選択したかどうかに依存して分岐する。選択した場合、コードはタスク１５２６で、図５６のタスク１６００にジャンプする。図５６を参照すると、新たなセッションを生成するためのコードが示され、これはタスク１６００で開始する。最初にタスク１６０２で、新規セッションへのリブート画面が表示される。この画面の１つの例が、図５７に１７２０で示される。この画面は、ボタン１７２２、１７２４及び１７２６などの複数のユーザ対話装置を有し、これらはそれぞれ、新たな延期不能（１回使用で、ハードファイルへは保管されない）セッションを生成し、新たな延期可能セッションを生成し、新たなＳＯＲＭ（１回使用で、ハードファイルへ保管される）セッションを生成する。画面はまた、新たなセッションの基本を形成する延期システムを示すユーザ対話装置１７２８を有する。ユーザは、例えば"クリーンＯＳ／２セッション"延期ファイルから、新たなＳＯＲＭシステムの生成を望むかもしれない。基本セッションの選択を容易にするために、ボタン１７３０などのユーザ対話装置は、セッションに対応して使用可能な延期ファイルのリストをプル・ダウン表示する。こうしたユーザ対話装置は当業者には既知である。ユーザが新たに使用する延期ファイルを選択しない場合、システム状態は現在選択されている延期ファイルに延期され、そこから再開される。
【０２３６】
図５６を再度参照すると、次にタスク１６０４で、新たなセッションの生成に備え、ＣＭＯＳメモリ内の延期フラグがクリアされる。その後タスク１６０６で、ユーザがＳＯＲＭセッションでない新たな延期不能セッションの生成を選択すると、タスク１６０８で延期許可フラグがクリアされ、それにより延期のシステムがディセーブルされ、システムにクリーン・セッションをブートさせる。その後タスク１６１０で、プログラム実行がタスク４２０にジャンプし、クリーン・システムのブートを終了する。
【０２３７】
代わりにタスク１６１２で、ユーザが延期可能セッションを生成するように選択すると、タスク１６１４で延期許可フラグ及び延期ファイル生成フラグがセットされる。これらのフラグは、延期可能セッションを生成するために必要なステップの実行を終了するために、システムにより使用される。その後タスク１６１０で、プログラム実行がタスク４２０にジャンプし、延期可能システムのブートを終了する。
【０２３８】
最後に、タスク１６１６で、ユーザがＳＯＲＭセッションを生成するように選択すると、タスク１６１８で延期許可フラグ、延期ファイル生成フラグ、及びＳＯＲＭフラグがセットされる。これらのフラグは、ＳＯＲＭセッションを生成するために必要なステップの実行を終了するために、システムにより使用される。その後タスク１６１０で、プログラム実行がタスク４２０にジャンプし、ＳＯＲＭシステムのブートを終了する。
【０２３９】
図１９乃至図２５を再度参照すると、ユーザが"新規生成"ボタン１７０８を選択しないと、コード実行はタスク１５２８で、ユーザがシステムを再開するための新たな延期ファイルを選択したかどうかに依存して分岐する。ユーザはこの選択を、ウィンドウ１７０２及び１７０４内に示される有効セッションの１つを選択し、"再開"ボタン１７０６を選択することにより実行する。タスク１５２８で、ユーザが新たな延期ファイルを選択したと判断されると、タスク１５３０で、再開ルーチンによりシステムをその特定の延期ファイルから再開させる適切なコードがセットされる。こうしたコードは、ＣＭＯＳメモリ内の延期ファイルを指示するステップと、ＣＭＯＳメモリ内の任意のスワップ・ファイルの位置を指示するステップとを含み得る。コードがセットされた後、タスク１５３２で、コード実行が再開ルーチンに分岐し、システムを選択延期ファイルから再開する。
【０２４０】
タスク１５２０で、多重延期／再開マネージャが呼び出されないか、ユーザが"脱出（EXIT）"ボタン１７１０を選択すると、ＣＰＵ４０はタスク３４０で、マイクロコントローラＵ２にＯＮ＃信号を論理０に引き下げるように指令することにより電源装置１７を"オフ"し、それにより電源装置１７の１次／調整ユニット１７２が、±５ＶＤＣ及び±１２ＶＤＣラインへの調整電圧の供給を停止する。電圧は約０Ｖにランプ・ダウンするのに数秒を要し、ＣＰＵ４０に多数のコマンドを実行する時間を提供する。従って、ＣＰＵ４０はタスク３４２で無限ループ（"スピン"）を実行しながら、タスク３４４で、電源装置１７により生成されるシステム電圧が、ＣＰＵ４０の機能を停止するレベルまで低下するのを待機する。
【０２４１】
図２６乃至図２９を参照すると、ブートアップ・ルーチンの詳細が示される。ブート・プロセスは一般に図１４に関連して、その概要が述べられた。ブートアップ・ルーチンは、ＣＰＵ４０がリセット・ベクトルにより指し示されるコードにジャンプし、それを実行するとき、タスク３８０で開始される。これはＣＰＵ４０がパワーアップするとき、またＣＰＵ４０がリセット・ベクトルにより指し示されるコードにジャンプすることによりリセットされるときに、発生する。こうしたリセット・プロシジャは既知である。
【０２４２】
最初のタスク３８２は、ＣＰＵ４０をテストし、メモリ制御装置４６を初期化する。ＣＰＵ４０はＰＯＳＴルーチンによりテストされる。ＣＰＵテストの一部は、ＣＰＵ４０がＳＭＩを有する"Ｓ"パーツが否かを判断する。Ｓパーツであれば、この事実を示すフラグがセットされる。メモリ制御装置４６はＰＯＳＴルーチンにより初期化される。
【０２４３】
次にタスク９８６で、ブートアップ・ルーチンは、マイクロコントローラＵ２が機能しているかどうかをテストする。これを実行するために、ＣＰＵ４０はパワー管理回路１０６のステータス・ポートを順次読込み、そのポートにおけるハイからロウへ、そして逆にロウからハイへの遷移を待機する。こうした遷移はマイクロコントローラＵ２のハートビートが機能していることを示す。従って、ＣＰＵ４０は、マイクロコントローラＵ２が期待通りに機能していると言う想定にもとづき、ブート・プロセスを継続することができる。
【０２４４】
ＣＰＵ４０が所定時間（例えば１秒乃至２秒）以内にステータス・ポートにおける遷移を検出しない場合、マイクロコントローラＵ２はハートビートを有さず、ＣＰＵ４０はタスク９８８で、上述のように第１のＰＡＬ  Ｕ１にマイクロコントローラＵ２をリセットするように指令する。ＣＰＵ４０はタスク９９０で、再度ステータス・ポートにおけるハイからロウへの遷移を待機する。ＣＰＵ４０が再度１秒乃至２秒以内に、ステータス・ポートにおける遷移を検出しないと、マイクロコントローラＵ２はハートビートを有さず、ＣＰＵ４０はタスク９９２で、上述のようにマイクロコントローラＵ２がリセットされ得ない状態であるとの想定にもとづき、パワー管理機構をディセーブルする。
【０２４５】
一方、マイクロコントローラＵ２が機能している場合には、ＣＰＵ４０はタスク９９４で、マイクロコントローラＵ２内の警報呼び起し時間値（分）をリフレッシュする。ＲＴＣ９８の時間基準は、マイクロコントローラＵ２の時間基準よりもはるかに正確である。従って、より正確な従って高価な時間基準をマイクロコントローラＵ２に追加すること無く、この制限を克服するために、ＢＩＯＳが精度の低い時間基準をより正確な時間基準に同期させる。そして、システムがブートする度に、マイクロコントローラＵ２内の警報呼び起し時間値を、ＲＴＣ９８から導出されるより正確な値により更新する。これを達成するために、ＣＰＵ４０はＣＭＯＳメモリ９６から絶対警報日付及び時刻を読出し、警報呼び起し時間値を計算し、それをマイクロコントローラＵ２に書込む。
【０２４６】
その後、及びマイクロコントローラＵ２が機能しておらず、パワー管理機構がディセーブルされた場合、ブート・ルーチンはタスク９９６で、電源装置１７への電力供給によりシステムがブートされたかどうかを判断する。好適には、電源装置１７は常にＡＣ電力をその１次／調整ユニット１７２に印加されており、±５ＶＤＣ及び±１２ＶＤＣラインにおける電圧調整が、ＯＮ＃入力により制御される。このように、電源装置１７は絶えず、パワー管理回路１０６に電力供給するために必要なＡＵＸ５を提供し、パワー管理回路１０６にＡＣ電力自体をスイッチさせること無く制御され得る。
【０２４７】
しかしながら、当業者には既知のように、ユーザによっては、彼らのコンピュータ・システムにスイッチ式パワー・ストリップ（図示せず）を用いて電力供給することを好んだりする。すなわち、単一のスイッチにより、システム全体へのＡＣ電力の印加をオフ及びオンする。このことはパワー管理回路１０６に問題を課すことになる。なぜなら、マイクロコントローラＵ２及び他の装置が、ＡＵＸ５電源ラインにより絶えず電力供給されるように構成されるからである。従ってシステムは、システム自身がＡＣ電力の印加により電力供給されたことを判断し、それに従い振る舞うための方法を有さねばならない。
【０２４８】
しかしながら上述のように、ＡＵＸ５ラインもブラックアウト及びブラウンアウトの影響を受ける。ブラックアウトまたはブラウンアウトの後、リセット・サブ回路９２０がマイクロコントローラＵ２をリセットし、それが許容外電圧によりハングすることを防止する。従って、システムは更に、マイクロコントローラＵ２がブラウンアウト後またはＡＣ電力の印加後に起こされたかを判断できなければならない。
【０２４９】
結果的に、タスク９９６で、ＣＰＵ４０はマイクロコントローラＵ２に、電源装置１７をオンさせた事象に関して問い合わせる。マイクロコントローラＵ２は次の４つの応答のいずれかを返却し得る。それらは、（１）自身がリセットされ、従って、電源装置１７に±５ＶＤＣ及び±１２ＶＤＣラインへの調整電力の供給を開始させた、（２）警報呼び起し時間（分）が満了した、（３）ＲＳ−２３２着呼入力または光絶縁器ＯＰＴＯ１からの着呼入力に着呼が発生した、及び（４）スイッチ２１が押下された、である。システムがパワーオンされる理由は、スケジューラなどのアプリケーション・プログラムにより、マイクロコントローラＵ２から直接読出され得る。スケジューラは、システムがパワーアップされた特定の理由に応答して特定のプログラムを実行する。別の態様では、システムをパワーアップする理由が、１回または複数回のＢＩＯＳ呼び出しを介して入手され得る。
【０２５０】
ＣＰＵ４０によりリセットされる以外、マイクロコントローラＵ２はリセット・サブ回路９２０によりリセットされるだけである。リセット・サブ回路９２０は、ＡＵＸ５ラインが印加されるかグリッチするとき、常にマイクロコントローラＵ２をリセットする。従って、マイクロコントローラＵ２がリセットされるか、マイクロコントローラＵ２が無効起床コード（wakeup code）を返却する場合、このことがタスク９９７でテストされ、ＣＰＵ４０はタスク９９８で、電源装置１７が±５ＶＤＣ及び±１２ＶＤＣラインにおける電圧の調整を継続すべきかどうかを判断しなければならない。このために、DEFAULT_ONと呼ばれるＣＭＯＳＮＶＲＡＭ内のフラグが使用される。このフラグがセットされると、電源装置１７はマイクロコントローラＵ２がリセットされた後に、調整電圧の供給を継続すべきである。一方、DEFAULT_ONがセットされない場合には、電源装置１７はマイクロコントローラＵ２がリセットされた後に、調整電圧の供給を停止すべきである。従って、ＣＰＵ４０はタスク１０００でマイクロコントローラＵ２に指令して、電源装置１７に±５ＶＤＣ及び±１２ＶＤＣラインにおける調整電圧の供給を停止させる。その後、電圧が約０Ｖにランプダウンするのに数秒を要し、ＣＰＵ４０に多数のコマンドを実行する時間を提供する。従って、ＣＰＵ４０はタスク１００２で無限ループ（"スピン"）を実行しながら、タスク１００４で、電源装置１７により生成されるシステム電圧が、ＣＰＵ４０の機能が停止するレベルまで低下するのを待機する。上述のように、マイクロコントローラＵ２は好適には絶えずＡＵＸ５ラインにより電力供給され、そのプログラム・ルーチンの実行を継続する。
【０２５１】
その後、タスク９９７でマイクロコントローラＵ２が有効起床コードを返却するか、或いはタスク９９８でマイクロコントローラＵ２がリセットされたが、システムへの電力供給が維持されるべき場合、ＣＰＵ４０はタスク１００４でマイクロコントローラＵ２に次のように指令する。すなわち、マイクロコントローラＵ２が電源がオフされるべきと判断するに当たり、電源装置１７に±５ＶＤＣ及び±１２ＶＤＣラインにおける調整電圧の供給を停止させる以前に、ＳＭＩをＣＰＵ４０に対して生成するように指令する。またタスク１００４で、ＣＰＵ４０はＣＭＯＳ  ＮＶＲＡＭ内のDEFAULT_ONビットをセットし、ＡＣ電力が失われても、ＡＣ電力が再投入された後にシステムが自身を再度オンするようにする。
【０２５２】
上述のように、不活動延期タイマは２つの時間間隔を有し得り、その一方がその満了までに比較的長い時間間隔を有するか、或いは２つの不活動延期タイマが存在し、その一方が他方よりも満了までの比較的長い時間間隔を有する。次にタスク１５４０で、システムはどちらの時間間隔が使用されるべきか（またはどちらのタイマがアクティブにされるべきか）を判断する。タスク１５４０でシステムは、自身が接続電話回線の着呼または内部警報による無人操作によりオンされたのではなく、ユーザ・アクションによりオンされたかどうかをテストする。この状況においては、ユーザ・アクションはユーザが電源ボタンを押下したか、システムをパワーアップさせる他のタスクを実行したことを意味する。システムがユーザ・アクションによりオンされた場合には、タスク１５４２で不活動延期タイマがその最長間隔にセットされる。システムがユーザ・アクション以外の理由によりオンされた場合には、タスク１５４４で不活動延期タイマがその短い方の時間間隔にセットされる。
【０２５３】
どちらの時間間隔が使用されるかに関わらず、ブート・ルーチンは当業者には既知のように、次にタスク１００６で、最初のプラグ・アンド・プレイ資源割当てパス（pass）を実行する。
【０２５４】
次にタスク３８３で、シャドー・メモリがテストされ、ＢＩＯＳがＲＯＭ８８からＲＡＭ５３のシャドー・メモリ部分にコピーされる。実行コードのフローは、延期フラグがＣＭＯＳ  ＮＶＲＡＭ９６内でセットされているかどうかに依存する。延期フラグがセットされている場合、コンピュータ・システム１０は延期状態１５０にあり、コンピュータ・システム１０は、自身が延期されたときの状態に復元されるべきである。システムＲＡＭ５３のセグメントＥ０００Ｈ及びＦ０００Ｈは、短縮テストを提供される。コンピュータが再開するために要する時間を低減するために、メモリは単に適正サイズがチェックされるだけで、０にクリアされる（各位置に０００Ｈが書込まれる）。
【０２５５】
一方、延期フラグがＣＭＯＳ  ＮＶＲＡＭ９６内でクリアされていると、システムＲＡＭ５３のセグメントＥ０００Ｈ及びＦ０００Ｈは、標準の徹底的メモリ・テストを提供される。このテストには、（１）スティッキ（sticky）・ビット・テスト、（２）ダブル・ビット・メモリ・テスト、及び（３）クロス・アドレス・ライン・テストが含まれる。これらのテストは既知である。
【０２５６】
セグメントＥ０００Ｈ及びＦ０００Ｈがテストされた後、ＢＩＯＳはシャドーイングされ得る。これはＲＯＭ  ＢＩＯＳ８８の内容をシステムＲＡＭ５３にコピーし、ＢＩＯＳをＲＡＭから実行するようにメモリ制御装置を構成することにより達成される。ＢＩＯＳのシャドーイングは、システム速度を向上するために実行される。すなわち、ＢＩＯＳが低速のＲＯＭ８８（通常のアクセス時間は２５０ナノ秒）からではなく、高速のシステムＲＡＭ５３（通常のアクセス時間は８０ナノ秒）から実行されるために、システム性能が向上する。ＢＩＯＳのシャドーイングは、ＢＩＯＳコピア（copier）を下位メモリのアドレスにロードするステップと、ＢＩＯＳをＲＯＭ８８からシステムＲＡＭ５３のセグメントＥ０００Ｈ及びＦ０００Ｈにコピーするステップと、シャドーＲＡＭをイネーブルするステップとを含む。
【０２５７】
次にタスク３８４で、ビデオ制御装置５６がテストされて初期化され、ビデオ・メモリ５８がテストされる。これらのテスト及び初期化は既知である。
【０２５８】
次にタスク１００８で、ブート・ルーチンが既知のように、第２のプラグ・アンド・プレイ資源割当てパスを実行する。
【０２５９】
実行コードのフローは、タスク３８６で、延期フラグがＣＭＯＳ  ＮＶＲＡＭ９６内でセットされているかどうかに依存する。延期フラグがセットされている場合、タスク３８３の場合同様、残りのシステムＲＡＭ５３のサイズが単にチェックされ、０にクリアされる。しかしながら、延期フラグがＣＭＯＳ  ＮＶＲＡＭ９６内でクリアされていると、残りのシステムＲＡＭ５３がタスク３９８で、タスク３８３に関連して上述した３ステップを含む徹底的メモリ・テストによりテストされる。
【０２６０】
メモリがテストされた後、タスク４００で、８２５９、ＵＡＲＴ、８０４２などの補助装置がテストされ、初期化される。タスク４０８では、固定ディスク制御装置が初期化される。
【０２６１】
実行コードのフローは、タスク４０９で延期フラグがＣＭＯＳ  ＮＶＲＡＭ９６内でセットされているかどうかに依存する。延期フラグがセットされている場合、これは電源が最後に取り除かれたときにシステムの状態が成功裡に保管されたことを示し、ブートアップ・ルーチンは、ハード・ドライブ制御装置８６及びハード・ドライブ３１のテストをスキップする。一方、延期フラグがＣＭＯＳ  ＮＶＲＡＭ９６内でクリアされている場合、これは電源が最後に取り除かれたときにシステムの状態が保管されなかったことを示し、ブートアップ・ルーチンはタスク４１０で、既知のように、固定ディスク制御装置８６及びハード・ドライブ３１の完全なテストを実行する。
【０２６２】
次にタスク４１２で、フロッピー・ドライブ制御装置８４がテストされ、初期化される。
【０２６３】
この時点で、全ての装置が初期化され、ベクトル・ポイントが既知の位置を指し示し、従って割込みルーチンが期待通りに機能するようになる。従って、ブートアップ・ルーチンはタスク４１４で、ＢＩＯＳデータ領域及びベクトル・テーブルをスナップショット（速写）するために、ＢＩＯＳデータ領域及びベクトル・テーブルのコピーをセグメントＥ０００Ｈデータ構造に書込む。ＢＩＯＳデータ領域及びベクトル・テーブルのコピーは、タスク２７４で延期ルーチンにより使用され、コンピュータ・システム１０を全ての割込みが期待通りに機能する既知の状態にする。
【０２６４】
次にタスク４１６で、既知のように、任意のＢＩＯＳ拡張が"スキャン・イン"され、初期化される。ＢＩＯＳ拡張は、ネットワーク・アダプタなどの周辺アダプタにより、システムに追加されるＢＩＯＳコードのブロックである。ＢＩＯＳ拡張は通常、ＩＳＡバス７６上のセグメントＣ０００Ｈ及びＤ０００Ｈに配置され、ＢＩＯＳ拡張自身を識別するための関連する"シグニチャ"を有する。ＢＩＯＳ拡張が検出される場合、その長さがチェックされ、チェックサムが計算されチェックされる。シグニチャ、長さ、及びチェックサムが全て、有効なＢＩＯＳ拡張が存在することを示すと、プログラム制御は、シグニチャより３バイト先に配置される命令に移行し、ＢＩＯＳ拡張が周辺アダプタの初期化などの任意の必要なタスクを実行する。拡張が実行を終えると、制御はブートアップ・ルーチンに戻り、更にＢＩＯＳ拡張を探索する。そして、任意のＢＩＯＳ拡張が上述のＢＩＯＳ拡張の場合同様に処理される。ＢＩＯＳ拡張がもはや検出されないと、ブートアップ・ルーチンはタスク４１７に移行する。
【０２６５】
次にタスク１０１０で、ＣＰＵがＣＭＯＳメモリの状態を読出し、それをハード・ドライブに書込む。
【０２６６】
次にタスク１５４８で、図５８のルーチンが呼び出され、システムがパワーオンされた総経過時間を計算し、保管する。以降で詳述されるように、総パワーオン時間は２ステージ・プロセスにより保管される。第１のステージでは、パワーオン時間デルタ（すなわち増分）が計算され、ＣＭＯＳ  ＮＶＲＡＭ９６に保管される。第２のステージでは、パワーオン時間デルタが総パワーオン時間に加算され、新たな総パワーオン時間デルタがハード・ドライブに保管される。タスク１５４８で呼び出されるルーチンは、２ステージ・パワーオン時間保管プロセスの第２ステージである。
【０２６７】
図５８を参照すると、パワーオン時間ルーチンの第２ステージが示され、タスク１５３３で開始する。最初にタスク１５３４で、ＣＰＵ４０は総システム・パワーオン時間をハードファイルから読出す。総パワーオン時間は好適には、通常のユーザにはアクセスできないハード・ドライブの特殊部分に記憶される。例えば、パワーオン時間は、ユーザにより容易に消去または変更されない特殊ディスク・パーティションに保管される。好適には、特殊パーティションは、任意のＦＡＴベースのオペレーティング・システムによりアクセス不能であり、例えばほとんどのハード・ドライブの最後のシリンダなどが当てはまる。ハード・ドライブ上に記憶される総パワーオン時間値は、コンピュータが使用された総経過時間である。但し、最も最近のセッションの経過時間を除き、これはパワーオン時間デルタとしてＣＭＯＳメモリに記憶される。従ってタスク１５３５で、パワーオン時間デルタがＣＭＯＳメモリから読出され、直前のステップでハード・ドライブ３１上の特殊パーティションから読出された総時間に加算される。次にタスク１５３７で、新たな（更新）総パワーオン時間が、ハード・ドライブ３１上の特殊パーティションに書戻される。最終的にタスク１５３７で、新たなタイムスタンプがＲＴＣから読出され、ＣＭＯＳメモリに書込まれ、システムのパワーダウン時に、次のパワーオン時間デルタが計算されるようにする。最後に、タスク１５３８で、コードが呼び出しプログラムに復帰する。これでパワーオン時間コードの第２ステージが終了する。
【０２６８】
パワーオン時間コードの第１ステージでは、システムが最も最近使用された期間を表すパワーオン時間デルタが計算される。図６０を参照すると、パワーオン時間コードの第１ステージが示される。上述したように、マイクロコントローラＵ２はシステムをパワーダウンする以前に、ＳＭＩラインをアサートすることにより、ＣＰＵ４０に割込みを発生する。結果的に、ＣＰＵ４０はシステムが差し迫ってパワーダウンされようとしているとの想定にもとづき、特定のタスクを実行する。好適には、これは経過パワーオン時間タイマにより測定される上述のパワーオン・デルタなどの、特定の情報を計算し、ＣＭＯＳ  ＮＶＲＡＭ９６に保管するタスクを含む。その後、ＣＰＵ４０はマイクロコントローラＵ２にシステムをパワーダウンさせる。従って、パワーオン時間ルーチンの第１ステージは、タスク１７５２で、ユーザ制御シャット・ダウンに応答するコードの一部として入力され得る。
【０２６９】
システム・シャット・ダウンの制御値に加え、たとえシステムが不明な理由から電源を失ったとしても、パワーオン時間が計算されなければならない。こうした理由には、ユーザによるプラグの引き抜きによる、標準のＡＣアウトレットからのＡＣ電力の遮断などが含まれる。結果的に、電源の故障時またはシステムからの除去時に、パワーオン時間ルーチンの第１ステージが、タスク１７５０で呼び出されなければならない。上述したように、パワー管理プロセッサＵ２は、システム電源ラインが許容範囲内にあることを示すPOWERGOOD信号をモニタする。POWERGOOD信号が否定された後、ＣＰＵ４０は確実な電源をわずか約１ミリ秒有するに過ぎない。従って、あらゆるデータをハード・ドライブに書込むための十分な時間が維持されない。しかしながら、後述されるように、パワーオン時間デルタを計算し、それをＣＭＯＳ  ＮＶＲＡＭに保管するための時間は、十分に存在する。従ってタスク１７５４で、パワー管理プロセッサＵ２はＣＰＵのＳＭＩを介して、ＣＰＵに割込みを発生する。
【０２７０】
ＳＭＩに応答して、またはユーザ制御シャット・ダウンに応答して、ＣＰＵ４０はタスク１７５６で、リアル・タイム・クロック（ＲＴＣ）から現時刻を読出す。任意的に、この値はユーザにより変更されていないことを保証するように、チェックされ得る。例えば、ユーザが値を置換しており、その値がパワーオン時間デルタを負の値にし、それにより総パワーオン時間値を増加させるのではなく、減少させるような状況をチェックする。図５８のタスク１５３７で、タイムスタンプがＲＴＣから読出され、ＣＭＯＳ  ＮＶＲＡＭに保管されたことを思い起こされたい。タスク１７５８で、このパワーオン・タイムスタンプがＣＭＯＳ  ＮＶＲＡＭから読出される。再度任意的に、この値がユーザにより変更されていないことを保証するように、チェックされ得る。例えば、ユーザが値を置換しており、その値がパワーオン時間デルタを負の値にし、それにより総パワーオン時間値を増加させるのではなく、減少させるような状況をチェックする。
【０２７１】
次にタスク１７６０で、パワーオン時間デルタが、パワーオン・タイムスタンプ及び現時刻から計算される。再度任意的に、この値がユーザにより変更されていないことを保証するように、チェックされ得る。例えば、ユーザが値を置換しており、その値がパワーオン時間デルタを負の値にし、それにより総パワーオン時間値を増加させるのではなく、減少させるような状況をチェックする。次にタスク１７６２で、計算されたパワーオン時間デルタがＣＭＯＳ  ＮＶＲＡＭに保管される。
【０２７２】
最後にタスク１７６４で、コードは復帰して他のタスクを実行するか（ユーザ制御シャット・ダウンの場合）、プログラム実行をシステムをオフするルーチン（例えばタスク３４０）にジャンプさせる（電源故障の場合）。
【０２７３】
上述のように、ハード・ドライブの最後の（内部）シリンダは、総パワーオン時間、パワーオン・サイクル数、並びに過去のエラー・コード及びそれらが発生した日付を記憶するために使用される特殊部分の好適な位置に相当する。このパーティションに対応する好適な１つのデータ構造は、次のようである。パーティションの最初にはシグニチャ・ヘッダが配置され、これはこのパーティションが前記日付を保管するために使用されることを確認するために、ＢＩＯＳにより使用される。次にデータが、それ以降の固定位置に配置される。しかしながら好適には、次に相対オフセット・ポインタが配置され、ポインタ以降に配置されるデータ・ブロックを指し示す。ポインタはヘッダ部分を有する。このヘッダ部分は、相対オフセット部分に何が配置されるかを正確に識別し、例えばプラグ・アンド・プレイ割当てデータ、システム総パワーオン時間、システム・パワーオン・サイクル・データ、特定の周辺パワーオン時間及びサイクルなどを指し示す。別の態様では、ポインタはヘッダ部分を有さず、単にデータ・ブロックを指し示す相対オフセット・ポインタであり、ヘッダ部分は各データ・ブロックの一部である。
【０２７４】
上述の例では、システム全体の総パワーオン時間だけが記憶される。別の態様では、多くの異なるパワーオン時間値が記憶される。例えば、新たなハード・ドライブなどの新たなコンポーネントが追加される場合、その新たなコンポーネントに対応する別の総パワーオン時間値が生成される。図５８のコードにおいて、様々なパワーオン時間値の全てが好適には特殊パーティションに記憶され、システムがブートされる度に全てが新たなパワーオン時間デルタに加算される。
【０２７５】
更に、パワーオン時に、他のシステム・パラメータが新たな総パワーオン時間と一緒にハード・ドライブに書込まれ得る。例えば、システムがパワーオンされた総回数を保管することが有益であろう。この場合、システムがブートする度に、システムがこれまでにブートされた現回数がハード・ドライブから読出され、１だけ増分されて、ハード・ドライブに書戻される。別の例では、システムが様々なシステム・エラーを検出し、コードを特定のエラーに関連付ける。ユーザはエラー・コードを書留めてもそうでなくてもよく、またエラー・コードに応答してもよい。従って、特定数のエラー・コード、及びそれらが発生した日付を、ハード・ドライブ上の特殊パーティションに記憶することが有益であろう。上述の総パワーオン時間と同様、システムがパワーダウンされる度に、現セッションにおけるエラー・コードがＣＭＯＳ  ＮＶＲＡＭに記憶され、次のシステム・ブート時にハード・ドライブに書込まれ得る。これらの間の違いは、総パワーオン時間値として１つだけを保管する代わりに、全ての（または先に保管したものから順番に廃棄する方式で記憶される固定数の）エラー・コードが別々に保管される点である。
【０２７６】
上述の構造では、システムがオフされたことを検出するために、POWERGOODが使用される。この信号に応答して、パラメータ保管ルーチンの第１ステージが実行される。POWERGOODは、電源装置１７の調整ステージをモニタする。すなわち、調整電圧が許容範囲内のレベルを獲得するとき、POWERGOOD信号は論理１に変化し、一方、±５ＶＤＣまたは±１２ＶＤＣラインが許容範囲から外れると、POWERGOOD信号は論理０になり、電圧が許容範囲外であることを指摘する。従って、POWERGOOD信号は調整システム電圧に関連付けられ、POWERGOOD信号が許容範囲外状態を指摘するまでに、ＣＰＵ４０は約１ミリ秒の処理時間を残されるだけである。
【０２７７】
別の態様では、電源装置１７が図６に示されるACGOOD（ＡＣ良好）信号を提供するように変更される。ACGOOD信号は、壁上のアウトレットから電源装置１７の１次ステージへのＡＣ入力をモニタする。電源装置１７へのＡＣ入力が特定の所定パラメータに達すると、ACGOOD信号が論理０になり、電源装置１７への入力に障害が有ることを示す。こうしたACGOOD信号の論理０への遷移は、POWERGOOD信号の論理０への遷移がシステム電圧が許容範囲外であることを指摘するよりも、数１０ミリ秒早く、システム電圧の故障を指摘するものと思われる。ACGOOD信号を生成する厳密な回路はここでは重要ではなく、これらは特定の電源装置がシステム電圧に影響することなく許容可能なＡＣ入力の変化に応じて異なり得る。当業者には、ＡＣ入力をモニタするために要求される特定の回路を設計することが可能であろう。こうした回路はＡＣ入力のＲＭＳ電圧をモニタし、比較器によりＲＭＳ値が特定のしきい値以下に降下したことが測定されるとき、ACGOOD信号の論理０への遷移をトリガし得る。その他の多くの回路が本発明により考慮される。
【０２７８】
ACGOOD信号はPOWERGOOD信号と同様に、コプロセッサＵ２を介してＣＰＵに接続される。ACGOOD信号の論理１から０への遷移は、コプロセッサＵ２にＣＰＵ４０へのＳＭＩを生成させる。ＳＭＩに応答して、ＣＰＵ４０はコプロセッサＵ２に、ＳＭＩの原因を判断するように問い合わせる。ACGOOD遷移がＳＭＩを生じた場合、ＣＰＵ４０は特定のタスクのセットを実行できる。なぜなら、約３０ミリ秒の確実なプロセッサ時間が残っていることを知るからである。約３０ミリ秒の電源の保持は、ＣＰＵ４０に少量のデータをハード・ドライブに書込むのに十分な時間を提供する。従って、コプロセッサＵ２を介してＣＰＵ４０に接続されるACGOOD信号は、パワーオン時間値を決定し、ハード・ドライブに保管する上述の２ステップ・プロセスに代わる１ステップ・プロセスを提供する。２ステージを使用する代わりに、ＣＰＵ４０はパワーオン時間値を計算し、ACGOODにより生成されるＳＭＩに応答してその値をハード・ドライブに書込む。このプロセスは、パワーオン時間デルタが、ある期間ＣＭＯＳ  ＮＶＲＡＭに記憶される必要がない点を除けば、図５８及び図６０に示されるものと同一である。
【０２７９】
更に、特定のACGOOD信号により提供される確実なプロセッサ時間の量に依存して、パワーオン・サイクル、エラー・コード、エラー日付などの、上述の他のシステム・パラメータが、ACGOOD信号の論理０への遷移に応答して、１ステップでハード・ドライブに保管され得る。
【０２８０】
図２６乃至図２９を再度参照して、パワーオン時間値が決定され保管された後、システムはタスク１５５０で、多重延期／再開マネージャが呼び出されるかどうかを判断する。呼び出される場合、タスク１５５２で多重延期／再開マネージャ画面が表示される。
【０２８１】
多重延期／再開マネージャ画面１７００が図５９に示され、これに関しては既に述べた通りである。
【０２８２】
コード実行はタスク１５５４で、ユーザが多重延期／再開マネージャ画面１７００の"新規生成"ボタン１７０８を選択したかどうかに依存して分岐する。選択した場合、タスク１５５６で、コードは図５６のタスク１６００にジャンプする。選択していない場合には、コード実行はタスク１５５８で、ユーザがシステムを再開するための新規の延期ファイルを選択したかどうかに依存して分岐する。ユーザは、ウィンドウ１７０２及び１７０４に示される有効なセッションの１つを選択し、画面１７００の"再開"ボタン１７０６を選択することにより、これを実行する。タスク１５５８で、ユーザが新たな延期ファイルを選択したと判断されると、タスク１５６０で、再開ルーチンにより、システムをその特定の延期ファイルから再開するための適切なコードがセットされる。こうしたコードは、ＣＭＯＳメモリ内の延期ファイルを指示するステップと、ＣＭＯＳメモリ内の任意のスワップ・ファイルの位置を指示するステップとを含み得る。コードがセットされた後、コード実行がタスク４１９に分岐し、可能であればアダプタを初期化し、その後システムを選択延期ファイルから再開する。
【０２８３】
タスク１５５０で、多重延期／再開マネージャが呼び出されないか、ユーザが"脱出（EXIT）"ボタン１７１０を選択すると（タスク１５５８で新たな延期ファイルが選択されなかったことを示す）、コードはタスク４１８に継続し、延期フラグをテストする。
【０２８４】
タスク４１７で、ブートアップ・ルーチンは、延期ファイルに特定的に割当てられたパーティションと思われるハード・ドライブ３１上のパーティションを探索する。パーティション・テーブル内に、ＰＳ／１識別子"ＦＥ"を有するパーティションまたは識別子"８４"を有するハイバネーション・パーティションが見い出され、そのパーティションがこの特定のシステムの延期ファイルを収容できるように十分に大きいと、そのパーティションが延期ファイルのために使用される。結果的に、延期ファイル・シグニチャが領域の最初のバイトに書込まれ、領域の開始ヘッド、セクタ、及びシリンダが、ＣＭＯＳ  ＮＶＲＡＭ９６に書込まれる。
【０２８５】
実行コードのフローは次にタスク４１８で、延期フラグがＣＭＯＳ  ＮＶＲＡＭ９６内でセットされているか否かに依存して分岐する。延期フラグがクリアされていると、ブートアップ・ルーチンはタスク４２０で、制御をＰＢＯＯＴルーチンに渡し、これがタスク１０１２で図４６乃至図４９のルーチンを実行し、制御をオペレーティング・システムに渡す。ＰＢＯＯＴは既知であり、オペレーティング・システム（ＯＳ）及びコマンド・インタプリタを、フロッピー・ディスクまたはハード・ドライブ３１からロードする。タスク４１７で延期ファイル用のパーティションが見い出されなかった場合、ＯＳは図４６乃至図４９に関連して述べられるＯＳ特有のドライバを実行し、これがパーティションが見い出されたかどうかをチェックし、見い出されなかった場合、ＦＡＴ内の連続セクタのファイルを割当て（必要に応じて領域を分割解除（defragment）する）、シグニチャを延期ファイルの最初のバイトに書込み、延期ファイルの開始ヘッド、セクタ、及びシリンダをＣＭＯＳ  ＮＶＲＡＭ９６に書込む。
【０２８６】
延期ファイルがいつ割当てられるかに関わらず、ファイルは、延期及び再開の間の、それぞれディスクへの迅速な書込み及びディスクからの迅速な読出しを可能にするように、連続セクタであるべきである。
【０２８７】
ＯＳは次にCONFIG.SYSファイル内に見い出される命令にもとづき、システムを構成する。最後に、ＯＳはAUTOEXEC.BATファイルを実行し、これが結局実行制御をオペレーティング・システムに戻す。延期フラグがＣＭＯＳ  ＮＶＲＡＭ９６内でクリアされている場合には、電源が最後に取り除かれたときに、システムの状態が保管されなかったことを示し、RESUME.EXE（タスク４２１に関連して詳述される）が無視される。
【０２８８】
タスク４１８を再度参照し、延期フラグがＣＭＯＳ  ＮＶＲＡＭ９６内でセットされていると、これは電源が最後に取り除かれたときにシステムの状態が保管されたことを示し、実行コードは次にタスク４１９で、アダプタ再初期化フラグがＣＭＯＳ  ＮＶＲＡＭ９６内でセットされている否かに依存して分岐する。アダプタ再初期化フラグがセットされていると、ブートアップ・ルーチンはタスク４２１で制御をＰＢＯＯＴルーチンに渡す。通常のＰＢＯＯＴルーチン同様、本発明のＰＢＯＯＴはＯＳをロードし、これがCONFIG.SYS及びAUTOEXEC.BATファイル内で見い出されるコマンドに従いシステムを構成する。既知のように、これらのファイルは特にドライバをロードし、システムを構成する。
【０２８９】
CONFIG.SYS及びAUTOEXEC.BATファイル内のコマンドは、システム内のアダプタ・カードを初期化し得る。本願は３つのタイプのアダプタ・カードを想定する。タイプＩアダプタは初期化を必要としない。タイプＩＩアダプタは初期化を必要とするが、ＢＩＯＳ拡張若しくはCONFIG.SYSまたはAUTOEXEC.BATファイルに従いロードされるドライバにより、既知の作業状態に置かれる。またタイプＩＩＩアダプタは、システム上で実行されるコードにより変更される。タイプＩ及びタイプＩＩアダプタを含むシステムは、延期及び復元され得るが、タイプＩＩＩアダプタ（多くのネットワーク・アダプタなど）を含むシステムは、カードがシステム電源の除去などの特定の条件の発生後に、アダプタを再初期化する関連ＡＰＭ対応デバイス・ドライバを有さない限り、復元され得ない。システムは、ＡＰＭ対応デバイス・ドライバを有するタイプＩＩＩカードを延期し得る。
【０２９０】
好適な態様では、ファイルRESUME.EXEがAUTOEXEC.BATファイルに追加され、プログラム制御をＯＳから再開ルーチンに渡す役割をする。ＯＳはタスク４２０でRESUME.EXEの存在を無視するが、タスク４２１のＯＳはRESUME.EXEを実行する。そして、タイプＩＩアダプタが、ＯＳによりCONFIG.SYS及びAUTOEXEC.BATからロードされたデバイス・ドライバにより初期化されると、RESUME.EXEは制御を再開ルーチンに渡す。
【０２９１】
タスク４１９を再度参照して、アダプタ再初期化フラグがＣＭＯＳ  ＮＶＲＡＭ９６内でクリアされていると、ＯＳは実行制御をRESUME.EXEを介して再開ルーチンに渡す。再開ルーチンは、図３０乃至３４に関連して詳述されるように、ハード・ドライブ上の延期ファイルからシステム状態を復元する。
【０２９２】
図３０乃至図３４を参照すると、再開ルーチンのタスク４５０乃至５３０が示される。最初に、ＣＰＵ４０がタスク４５１でテストされる。ＣＰＵ４０がＳＭＩを有すると、タスク４５４でＣＰＵ再開ＳＭＩが生成され、ＣＰＵをＳＭＭモードにする。ＣＰＵがＳＭＩを有さない場合、タスク４５３でシャット・ダウン再開が発生し、それによりリセットが生じ、リセット・ハンドラがタスク４５４にジャンプする。構成プロセスの間、ＢＩＯＳデータ領域及びベクトル・テーブルが恐らく不明の状態に変更される。従って、基本ＢＩＯＳルーチンが期待通りに機能しないかも知れない。結果的に、再開ルーチンはタスク４５４でセグメントＥ０００Ｈの読出し／書込みを許可し、タスク４５６でＢＩＯＳデータ領域及びベクトル・テーブルのスワップ・ルーチンを呼び出す。このルーチンは、タスク４１４で、セグメントＥ０００Ｈにコピーされた既知の適正なＢＩＯＳデータ領域及びベクトル・テーブルを、目下セグメント００００Ｈにおいてアクティブな変更ＢＩＯＳデータ領域及びベクトル・テーブルとスワップする。ルーチンが終了するとき、既知のＢＩＯＳデータ領域及びベクトル・テーブルが、セグメントＥ０００Ｈにおいてアクティブとなり、変更ＢＩＯＳデータ領域及びベクトル・テーブルがセグメントＥ０００Ｈに配置され、ＢＩＯＳルーチンは期待通りに機能するようになる。
【０２９３】
次にタスク４５８で、再開ルーチンは、キーボード及びハード・ドライブをサポートする割込みを除く、全ての割込みを禁止する。次にタスク１５７０で、再開ルーチンはハード・ドライブ３１上の適切な延期ファイルを突き止める。上述のように、システムは複数の延期ファイルを有し得り、適切な延期ファイルが再開ルーチンにより突き止められねばならない。延期ファイルはユーザにより、多重延期／再開マネージャを介して選択され、その１つの例が図５９に示される。更に、オペレーティング・システムは、上述のように、システムが再開するための延期ファイルを決定することができる。次に再開ルーチンはファイル・サイズ及びシグニチャを読出す。これらは上述のように、延期ファイルに対応する多数バイト識別子である。実行コードのフローはタスク４６２で、延期ファイルが適正なサイズ及びシグニチャを有するかどうかに依存して分岐する。延期ファイルが適正なサイズ及びシグニチャを有さない場合、再開ルーチンはタスク４６４で、ＣＭＯＳメモリ９６内の延期フラグをクリアし、タスク４６４で、プログラム制御はリセット・ベクトルにより指し示される位置のコードに移行され、それによりシステムはあたかも延期されなかったかのようにブートする。一方、延期フラグが適正なサイズ及びシグニチャを有する場合には、再開ルーチンがシステムの再開を継続し、タスク４６８で、延期ファイル内のシグニチャ以降に配置される６４Ｋブロック（セグメントＥ０００Ｈ情報に対応する延期ファイル部分）を、セグメント１０００Ｈに読出す。
【０２９４】
次にタスク４７０で、セグメント１０００Ｈ内のブロックのチェックサムが計算され、タスク４７２で、以前に記憶されたチェックサムがＣＭＯＳ不揮発メモリ９６から読出され、実行コードのフローはタスク４７４で、タスク４７０で計算されたチェックサムがタスク３３０で計算されたチェックサムと同一かどうかに依存して分岐する。同一でない場合、延期ファイルは何らかの理由で欠陥があり（例えば不正に変更されたなど）、制御はタスク４６４に移行し、ここで上述のように延期フラグをクリアし、システムをリセットする。タスク４７０で計算されたチェックサムが、タスク３３０で計算されたチェックサムと同一の場合には、延期ファイルは延期ルーチンにより書込まれたものと同一と見なされ、タスク４７６で、セグメント１０００Ｈ内のデータがセグメントＥ０００Ｈにコピーされる。
【０２９５】
次に再開ルーチンはタスク４７８で、システムが復元されており、再開を打ち切るためには、ユーザがCtrl-Alt-Delを押下すべきであることを知らせる特殊な合図画面を、画面に書込む。延期ルーチンの場合同様、Ctrl-Alt-Delの押下により、タスク５２６で延期フラグがクリアされ、タスク５２８でシステムがリブートされる。従って、Ctrl-Alt-Delが押下され、再開ルーチンが実行されているときには、システムは通常リブートする。
【０２９６】
８２０７７ディスケット制御装置８４及びＤＭＡユニット７１は、それぞれタスク４８０及び４８２で、セグメントＥ０００Ｈデータ構造から、それらのそれぞれのレジスタに値を書込むことにより復元される。
【０２９７】
次にタスク１０２０で、セグメントＥ０００Ｈデータ構造から、あらゆるモデムの状態を復元するための割込み駆動型並列スレッドが開始される。タスク９７６（図２１）におけるルーチンの場合同様、モデム復元ルーチンは、特定のモデムに関連付けられるＣＯＭＭポートに対応する割込みを捕獲し、セグメントＥ０００Ｈデータ構造から値を読出し、モデムにコマンド及び値を送信して、モデム内のレジスタを復元させる。このルーチンは第１のコマンドをモデムに送信し、次に割込み駆動式に応答して、モデムの応答を受信し、各ＣＯＭＭポート割込みに応答して、次の値をモデムに送信する。このようにして、モデムの全てのレジスタが復元されるまでこのプロセスを繰り返す。モデム保管ルーチン同様、並列スレッドとして実行されないと、モデム復元ルーチンはシステムを再開するために要する時間に数秒を追加し得る。実際にはモデム復元ルーチンは割込み駆動型並列スレッドであるので、システム状態がハード・ドライブ３１から読出される以前に完全に実行されれば、再開にほとんどまたは全く時間を追加しない。
【０２９８】
割込み駆動型並列スレッド・モデム復元ルーチンが開始された後、タスク４８６乃至５００において、システム・メモリが延期ファイルから復元される。これは延期ルーチン内のタスク３０４乃至３１８（図２２乃至図２３）に関連して述べられたルーチンと類似の、ツイン・バッファ・ルーチンを用いて実行される。ツイン・バッファ・システムは延期ファイルから圧縮データを読出し、それをセグメントＥ０００Ｈに書込み、それを伸長してシステム・メモリに書込む。２つのルーチンは時分割多重式に作用し、一方はデータを延期ファイルから読出し、それをセグメントＥ０００Ｈに書込み、他方はデータを伸長して、伸長データをシステム・メモリに書込む。後者はフォアグラウンドで実行され、前者はバックグラウンドで実行される割込み駆動型ルーチンである。明らかなように、１つのＣＰＵ４０だけしか存在しないので、所与の時刻に１ルーチンだけが実行され得る。しかしながら、前者のルーチンは割込み駆動型なので、延期ファイルからのデータの転送速度を最適化するために、後者のルーチンの実行を中断することができる。２つの各バッファは８Ｋバイト長であり、転送時間を最適化するものと考えられる。
【０２９９】
このプロセスはタスク４８６で開始し、第１の８Ｋバッファを充填するのに十分なデータを延期ファイルから読出し、セグメントＥ０００Ｈに書込む。この時、一般に４８９で示されるバッファへの読出しルーチンが、タスク４８８で開始される。バッファへの読出しルーチン４８９は割込み駆動型ルーチンであり、バックグラウンドで実行され、タスク４９０乃至４９２を含む。伸長ルーチンは一般に４９３で示され、タスク４９４乃至４９８を含むフォアグラウンド・ルーチンである。最初にタスク４９０で、バッファへの読出しルーチン４８９が、延期ファイルの次の８Ｋを読出し、それをカレント・バッファである他のバッファに書込む。バッファへの読出しルーチン４８９が、延期ファイルから次の８Ｋを読出し、それをカレント・バッファに書込む間、伸長ルーチン４９３はタスク４９４で、タスク４８６により充填されたバッファを読出し、圧縮データを伸長し、伸長データをシステム・メモリに書込む。伸長ルーチン４９３がバッファ内の全てのデータを伸長すると、次にタスク４９６で、システム・メモリ全体が既に伸長されたかどうかを判断する。
【０３００】
ＩＤＥ制御装置８６は、データをハード・ドライブ３１から超高速に読出すことができない。結果として、伸長ルーチン４９３は常に、バッファへの読出しルーチン４８９が、ハード・ドライブ３１からカレント・バッファへのデータの読出しを終了する以前に、ハード・ドライブ３１から現在読出されていない方の８Ｋバッファの伸長を終了する。従って、伸長ルーチン４９３は、バッファへの読出しルーチン４８９が、ハード・ドライブ３１からのデータの読出しを終了するのを待機しなければならない。伸長ルーチン４９３が全てのシステム・メモリの伸長及び書込みを終了していないと、伸長ルーチン４９３はタスク４９８で、バッファへの読出しルーチン４８９を待機する。伸長ルーチン４９３及びバッファへの読出しルーチン４８９は、フラグのセットを介して通信する。バッファへの読出しルーチン４８９が、延期ファイルからカレント・バッファへの読出しを終了すると、ルーチン４８９は次にタスク４９０でバッファ・フラグを切り替え、それにより伸長ルーチン４９３に、延期ファイルから読出されたばかりのバッファ内のデータの伸長を開始してよいことを知らせる。バッファへの読出しルーチン４８９は、次にタスク４９２で、延期ファイルから読出される８Ｋブロックがまだ残っているかどうかを判断する。残っていない場合、バッファへの読出しルーチン４８９はタスク５０２で、延期ファイルから残りのデータを読出し、それをカレント・バッファに書込む。バッファへの読出しルーチン４８９は次にバックグラウンド走行を停止し、実際上、タスク５００で、伸長ルーチンが最後のメモリの伸長を終了するのを待機する。
【０３０１】
暫くして、伸長ルーチン４９３はバッファ・フラグを調査することにより、バッファがシステム・メモリへの伸長の準備を終えたと判断する。すなわち、伸長ルーチン４９３はタスク４９８で、バッファへの読出しルーチン４８９がカレント・バッファの処理を終了するのを待機し、その終了時にタスク４９４で伸長ループを継続する。
【０３０２】
伸長ルーチン４９３が全てのシステム・メモリの伸長を終了すると、実行されている唯一のバックグラウンド・ルーチンは、タスク１０２０に関連して述べられた割込み駆動型モデム復元ルーチンだけであり、メイン・プログラムはタスク５０４に継続する。
【０３０３】
次にタスク５０４及び５０６で、それぞれビデオ制御装置５６及びＩＤＥ制御装置８６が復元される。これはセグメントＥ０００Ｈデータ構造から２つの各装置内のレジスタに値を書込むことにより達成される。タスク５０４は、チェックポイントが生成されている場合に、延期ルーチンがジャンプするポイントでもある（タスク１０２４参照）。
【０３０４】
次にタスク１０２２で、再開ルーチンは、タスク１０２０に関連して述べられた割込み駆動型モデム復元ルーチンが終了したか否かをテストする。終了していない場合には、このルーチンが終了するのを待機する。
【０３０５】
タスク５０８に示されるように、割込み駆動型モデム状態復元ルーチンが終了すると、ＣＰＵキャッシュ４１及びシステム・キャッシュ６０がイネーブルされる。これはＣＰＵ４０及びキャッシュ制御装置６２のそれぞれに、適切な値を書込むことにより達成される。次に再開ルーチンはタスク５１０乃至５１４において、タイマ制御装置１０２、８０４２キーボード・インタフェース・マイクロプロセッサ１０４、及び８２５９割込み制御装置９２の状態を復元する。これはセグメントＥ０００Ｈデータ構造から、それぞれの装置内のレジスタに値を書込むことにより達成される。
【０３０６】
次にタスク４８４で、ＲＳ２３２  ＵＡＲＴ９４が復元される。これはセグメントＥ０００Ｈデータ構造から、それぞれのＵＡＲＴのレジスタに値を書込むことにより達成される。
【０３０７】
次にタスク５１６で、再開ルーチンは、ＢＩＯＳデータ領域及びベクトル・テーブルのスワップ・ルーチンを呼び出す。このルーチンが呼ばれる以前には、既知のＢＩＯＳデータ領域及びベクトル・テーブルは、セグメント００００Ｈにおいてアクティブであり、延期ファイルから読出されたＢＩＯＳデータ領域及びベクトル・テーブルは、セグメントＥ０００Ｈデータ構造において非アクティブである。スワップの後、既知のＢＩＯＳデータ領域及びベクトル・テーブルが、セグメントＥ０００Ｈにおいて非アクティブとなり、延期ルーチンにより保管されたＢＩＯＳデータ領域及びベクトル・テーブルが、セグメント００００Ｈにおいてアクティブとなる。
【０３０８】
最後に、再開ルーチンはタスク５１８で、ＣＰＵ４０の状態をその延期時の状態に復元するＣＰＵ復元ルーチンにジャンプする。ＣＰＵ復元ルーチンは、図３９乃至図４２に関連して詳述される。ＣＰＵ復元ルーチンは、結局実行制御をＡＰＭに戻す役目をする。
【０３０９】
最終的に、ＣＰＵ４０は復帰命令を実行し、システムをＡＰＭに復帰させる。システムはそれにより、あたかも延期されなかったかのようにコードの実行を継続する。全ての現実的な目的のために、システムは延期／再開プロシジャにより影響されない。
【０３１０】
図３５乃至図３８を参照すると、ＣＰＵ状態保管ルーチンのフローチャートが示される。延期ルーチンは、ＣＰＵ状態保管ルーチンのタスク６００にジャンプする。ここでＡＰＭがセグメントＥ０００Ｈ及びＦ０００Ｈをイネーブルにしており、この領域からこれらのルーチンが読出され、書込まれて実行される点に注意されたい。更に、タスク６００で、EFLAGS及び８つの汎用レジスタがＡＰＭにより保管される。ＣＰＵ状態保管ルーチンは最初にタスク６０４で、任意のＤＭＡが終了するのを待機し、このルーチンがマウス・パケット伝送の間に実行されることを保証するために、マウス１３データ・パケットに同期する。次のステップはＤＭＡを終了させ、マウス・パケットに同期することを可能にする。（１）割込みを許可し、（２）任意のＤＭＡが終了するのに７ミリ秒待機し、（３）割込みを禁止し、（４）マウス・パケット境界のために５ミリ秒待機し、（５）割込みを許可し、（６）マウス・パケットの到来のために更に５ミリ秒待機し、（７）割込みを禁止する。これらのステップの後、コードは無事にマウス・パケット間で実行され得る。
【０３１１】
次にタスク６０６で、アドレス・ライン２０（Ｉ／Ｏポート９２Ｈ）の状態がスタックにプッシュ（待避）される。
【０３１２】
実行コードのフローは、タスク１０３０で、ＣＰＵ４０がＳＭＩを有する"Ｓ"パーツであるか否かに依存して分岐する。Ｓパーツである場合、ＣＰＵ４０はタスク１０３２で、マイクロコントローラＵ２にＳＭＩを逆にＣＰＵ４０に生成するように指令する。ＳＭＩに応答して、ＣＰＵ４０内のマイクロコードがタスク１０３４で、ＣＰＵ４０の状態をセグメントＥ０００Ｈデータ構造内のＥ０００：ＦＥ００Ｈに保管する。その後、ＣＰＵ４０はタスク１０３６で浮動小数点コプロセッサ（ＦＰＵ）の状態を保管し、タスク１０３８で延期ルーチン（図１９乃至図２５）を呼び出す。別途述べたように、延期ルーチンはタスク１０４０で復帰し、更にタスク１０４０で浮動小数点コプロセッサの状態を復元する。その後タスク１０４２で、ＲＳＭ（再開）命令がＣＰＵ状態を復元し、タスク７３２（図４２）に分岐する。
【０３１３】
一方、ＣＰＵ４０がＳＭＩを有さない場合、ＣＰＵ状態は図３５乃至図３８の残りのコードにより保管されなければならず、タスク６０８で演算コプロセッサ４４の状態がスタックにプッシュされる。次にタスク６１０で、ＣＰＵが３２ビット・モードまたは１６ビット・モードのいずれにより実行されるかを示すフラグが、それぞれに対応してセットまたはクリアされる。
【０３１４】
実行コードのフローは、次にタスク６１２で、ＣＰＵ４０がプロテクト・モードで実行されているか否かに依存して分岐する。ＣＰＵ４０がプロテクト・モードで実行されていない場合、ＣＰＵ４０はリアル・モードで実行されているはずであり、レジスタは非常に直接的に保管され得る。最初にタスク６１４で、マシン・ステータス・ワード及びＣＲ３の値が、セグメントＥ０００Ｈデータ構造に書込まれる。更にタスク６１４では、０がセグメントＥ０００Ｈデータ構造内のＴＲ及びＬＤＴＲに対応する領域に書込まれる。なぜなら、ＴＲ及びＬＤＴＲはリアル・モードでは０であるからである。
【０３１５】
コードは次にタスク６１６で、共通コード・パスと併合し、ＧＤＴＲ及びＬＤＴＲに記憶される値がセグメントＥ０００Ｈデータ構造に書込まれる。次に実行コードのフローは、タスク６１８で、ＣＰＵ４０が仮想８０８６モードで実行されているか否かに依存して分岐する。ＣＰＵ４０が仮想８０８６モードで実行されていない場合、コードは共通パスに沿ってタスク６２０へと続き、ここでデバッグ・レジスタＤＲ７、ＤＲ６、ＤＲ３、ＤＲ２、ＤＲ１及びＤＲ０が、スタック上にプッシュされる。これらのレジスタはデバッガ及び他のルーチンにより使用されている。次にタスク６２２で、ＤＳ、ＥＳ、ＦＳ、及びＧＳがスタック上にプッシュされる。次にタスク６２４で、ＣＳ、ＳＳ、及びＥＳＰの値が、セグメントＥ０００Ｈデータ構造に書込まれる。
【０３１６】
この時点では、セグメントＥ０００Ｈデータ構造に書込まれるべき全ての値が書込まれ、タスク６２６でシャドーＲＡＭセグメントＥ０００Ｈ及びＦ０００Ｈが、読出し専用に戻される。次にタスク６２８で、キャッシュ書戻し及び無効化キャッシュ・コマンドにより、ＣＰＵキャッシュ４１がフラッシュされる。
【０３１７】
最後にタスク６３０で、固有のシャット・ダウン・フラグがＣＭＯＳ不揮発メモリ９６内にセットされる。最終的にタスク６３２で、ＣＰＵ状態保管ルーチンは、実際上、延期ルーチンに"復帰"する。"復帰"は実際にはリセットに続くコードの分岐である。ＣＰＵ４０は、リセット・ベクトルにより指し示されるコードにジャンプすることによりリセットされる。ＣＰＵ４０のリセットは、ＣＰＵ４０をリアル・モードに強要し、全ての装置及びメモリ位置が保護障害の心配無しにアクセスされ得る。この時点以降、ＣＰＵの状態は保管され、延期ルーチンはシステムの残りの状態を保管しなければならない。
【０３１８】
リセット・ベクトルにより指し示されるコード内で、プログラム制御は、シャット・ダウン・フラグがＣＭＯＳ  ＮＶＲＡＭ９６内にセットされているか否かに依存して分岐する。シャット・ダウン・フラグがクリアされている場合、システムは正規通りにブートする。一方、シャット・ダウン・フラグがセットされていると、コードは残りの延期ルーチンに分岐する。すなわち、実行制御が図１９乃至図２５に示される延期ルーチンのタスク２５３にジャンプし、システム１０の延期が終了する。従って、ＣＰＵ状態保管ルーチンはタスク６３２で、効果的に延期ルーチンに復帰する。
【０３１９】
再度タスク６１２を参照し、ＣＰＵ４０がプロテクト・モードの場合、コードはタスク６３４で、ＣＰＵが仮想８０８６モードか否かに依存して分岐する。ＣＰＵが仮想８０８６モードでない場合、コードは再度タスク６３６で、現特権レベルが０であるか否かに依存して分岐する。現特権レベルが０以外の場合、適正な特権を有さないルーチンがＣＰＵ状態保管ルーチンを実行していることになり、致命的延期エラー・ルーチン（タスク６５２で開始、図３８参照）が呼ばれる。致命的延期エラー・ルーチンについては後述される。プログラム制御が致命的延期エラー・ルーチンから復帰すると、ＣＰＵ４０はＣＰＵ状態保管ルーチンが呼ばれたとき以前の状態に復帰されなければならず、プログラム実行は図３９乃至図４２のタスク７９４にジャンプし、ＣＰＵの部分的復元を実行する。ＣＰＵ内でほとんど変更が生じていないために、部分的復元だけが必要とされる。
【０３２０】
タスク６３６を再度参照し、呼び出しコードが適正な特権レベルを有する場合には、タスク６４２で保管が継続し、ＣＲ０、ＣＲ３、ＴＲ及びＬＤＴＲの値がセグメントＥ０００Ｈデータ構造に保管される。次にこのコード・パスはタスク６１６で共通コード・パスと併合し、ここで上述のように、ＧＤＴＲ及びＩＤＴＲの値がセグメントＥ０００Ｈデータ構造に保管される。ここからコードは、上述のタスク６１８乃至６３２に沿って実行され、最終的に残りの延期ルーチン・コードに"復帰"する（リセットに続き分岐する）。
【０３２１】
再度タスク６３４を参照し、ＣＰＵ４０が仮想８０８６モードの場合、実行はタスク６４４へと続き、マシン・ステータス・ワードの値（ＣＲ０の下位１６ビット）がセグメントＥ０００Ｈデータ構造に保管され、セグメントＥ０００Ｈデータ構造内のフラグがセットされ、ＣＰＵ４０が仮想８０８６モードであることを示す。このコードは６４６及び６４８を介してタスク６１６で共通コードと併合される。タスク６１８で、ＣＰＵ４０が仮想８０８６モードの場合、制御はタスク６５０に分岐し、ＤＳ、ＥＳ、ＦＳ及びＧＳの値がセグメントＥ０００Ｈデータ構造に保管される。このコードはタスク６２４で共通コードと併合される。ここからコードは上述のように、タスク６２４乃至６３２に沿って実行され、最終的に残りの延期ルーチン・コードに"復帰"する（リセットに続き分岐する）。
【０３２２】
致命的延期エラー・ルーチンが、図３８においてタスク６５２乃至６６４により示される。このルーチンは、不正の特権レベルを有するコードがＣＰＵ状態を保管しようとするとき、タスク６３８で呼ばれる。最初にタスク６５４で、フェールセーフ・タイマがリセットされる。次にタスク６５６で、スピーカが多数回可聴周波数のビープを発生する（例えば８８６Ｈｚ、０．２５秒間のビープをビープ間隔１／６秒で３回発生）。３回のビープがユーザに、試行された延期が実行されなかったことを警報する。ビープの後、タスク６５８でフェールセーフ・タイマが再度リセットされ、フェールセーフ・タイマが満了して電源装置１７を遮断するまでに、一貫した１５秒乃至１８秒を提供する。
【０３２３】
次に、致命的延期エラー・ルーチンは、タスク６６０及び６６２で、スイッチ２１がユーザにより押下されたか、すなわちユーザが延期の打切りを希望しているか否かを繰り返しチェックする。スイッチはＣＰＵ４０がマイクロコントローラＵ２に閉鎖事象が発生したかどうかを問い合わすことにより、その閉鎖をチェックされる。ユーザがボタン２１を押下した場合、実行制御は上述のタスク６４０に戻る。ユーザが１５秒乃至１８秒以内にボタン２１を押下しないと、フェールセーフ・タイマが満了し、電源装置１７がマイクロコントローラＵ２によりオフされ、明らかなように、システム電圧が許容範囲から落ちるので、ＣＰＵ４０によるコードの全ての実行が停止する。
【０３２４】
図３９乃至図４２を参照すると、ＣＰＵ復元ルーチンのフローチャートが示され、タスク７００で開始する。このルーチンは、残りのハードウェア及びメモリが延期以前のそれらの状態に復元された後に、再開ルーチンにより呼び出される。最初にタスク７０２で、セグメントＥ０００Ｈがまだ読出し／書込み可能でない場合、それを読出し／書込み可能にするべきである。
【０３２５】
次にタスク７０４で、実行コードのフローは、ＣＰＵ４０がその延期時点において、仮想８０８６モードで実行されていたか否かに依存して分岐する。システム１０が延期されたときに、ＣＰＵ４０が仮想８０８６モードで実行されていた場合、仮想８０８６ＣＰＵ復元に固有のタスク７０６乃至７２８が実行される。次にコードはタスク７３０乃至７４８の共通パスに併合する。
【０３２６】
ＣＰＵ状態が保管されるときに、ＣＰＵ４０が仮想８０８６モードであった場合、ＣＲ３、ＬＤＴＲ及びＴＲは、これらの値をセグメントＥ０００Ｈデータ構造に保管するために、ＣＰＵ状態保管ルーチンによりアクセスされることができない。従って、ＣＲ３、ＬＤＴＲ及びＴＲが、それぞれタスク７０６、７０８及び７１０で予測されなければならない。一般に、これらはシステムＲＡＭ５３を通じて、ＣＲ３、ＬＤＴＲ及びＴＲが指し示す構造を探索することにより予測される。例えば、ＧＤＴ内でＬＤＴエントリを見い出すことは、ＬＤＴＲの決定を可能にする。
【０３２７】
ＣＲ３はタスク７０６で予測される。ＣＲ３は、ページ・ディレクトリのページ・フレーム・アドレスを保持するページ・ディレクトリ・ベース・レジスタ（ＰＤＢＲ）、ページ・レベル・キャッシュ不能（ＰＣＤ）ビット、及びページ・レベル書込みスルー（ＰＷＴ）ビットを保持する。ＰＤＢＲの予測は、ページ・ディレクトリがシステムＲＡＭ５３内の４Ｋ境界から直接開始しなければならない事実、及びＣＰＵ状態保管ルーチンによりセグメントＥ０００Ｈデータ構造に保管されたＩＤＴＲ及びＧＤＴＲの値を知り、ＢＩＯＳコードがセグメントＦ０００Ｈから実行されていると仮定することにより、達成される。この仮定は合理的である。ＢＩＯＳコードが高速化のために、既にシャドーＲＡＭ内にシャドーイングされているからである。オペレーティング・システムがＢＩＯＳコードを異なる領域にコピーした場合、ＣＲ３の予測は失敗する。
【０３２８】
上述の認識及び仮定にもとづき、物理メモリのあらゆる４Ｋページが、ＢＩＯＳコード・セグメントに対応するページ変換テーブルの存在を突き止めるために、テストされる。すなわち、ページ内のオフセット０３Ｃ０Ｈは、値０００Ｆ０ＸＸＸ、０００Ｆ１ＸＸＸ、０００Ｆ２ＸＸＸ、．．．、０００ＦＥＸＸＸを含む。そのページが突き止められると、前記突き止められたページ・テーブルの物理アドレスに対応する第１エントリを有するページ・ディレクトリを求めて、システムＲＡＭ５３が探索される。ページ・ディレクトリの物理アドレスは、ＰＤＢＲの値の良き"推測（guess）"である。
【０３２９】
次に、ＰＤＢＲがＧＤＴＲ及びＩＤＴＲのアドレスを正しく変換することを保証することにより、仮定のＰＤＢＲが検証される。すなわち、ＰＤＢＲはＧＤＴＲのリニア・アドレスを変換するために使用され、ＧＤＴの第１エントリがヌルであることが検証される（ＧＤＴの最初の８バイトは、任意のＣＰＵモードにおいて常に００Ｈである）。返却される物理アドレスが、物理メモリの範囲内にあることが検証される。リニア−物理変換を達成するために、ＣＰＵ変換方法を模倣するサブルーチンが使用される。すなわち、変換アドレスがＥＳＩに戻され、物理メモリ内に物理ページが存在すれば、キャリー・フラグＣＦがクリアされ、物理メモリ内に物理ページが存在しないと、ＣＦがセットされる。この変換ルーチンにより、ＧＤＴの第１バイトがメモリ５３から読出される。ＧＤＴの第１エントリがヌルの場合、仮定のＰＤＢＲはその１次テストを合格し、従って再度テストされる。ＰＤＢＲは次に、変換ルーチンを用いて、ＩＤＴを見い出すＩＤＴＲを変換するために使用される。次に、返却される物理アドレスが、物理メモリの範囲内にあることが検証される。ＩＤＴの最初の位置が物理メモリ内に存在する場合、ＰＤＢＲはその２次テストに合格する。
【０３３０】
仮定のＰＤＢＲが正しくＧＤＴＲ及びＩＤＴＲに変換されると、その値がＰＤＢＲであると仮定され、セグメントＥ０００Ｈデータ構造内のＣＲ３領域に書込まれる。一方、仮定のＣＲ３がいずれかのテストを合格しない場合、ルーチンは再度開始し、有効なＣＲ３を導出し得る別のＢＩＯＳコード・セグメント・ページ変換テーブルを求めて、システム・メモリを探索する。
【０３３１】
ＰＣＤ及びＰＷＴは、正規のプレーナ・オペレーションでは、常に００Ｈに固定されるものと仮定される。これらの値は０にセットされ、セグメントＥ０００Ｈデータ構造内のＣＲ３領域に、ＰＤＢＲと一緒に書込まれる。
【０３３２】
ＣＲ３が予測されると、次にタスク７０８でＬＤＴＲが予測される。ＬＤＴＲはＣＲ３が予測されたならば、ＬＤＴがＧＤＴ内のどこかに存在すること、及びＬＤＴがメモリ内に存在しなければならないことから、予測され得る。ＬＤＴＲを予測するために、存在が記されるＬＤＴを求めてＧＤＴが探索される。物理メモリ内に存在し（タスク７０６に関連して上述された変換ルーチンを用いてテストされる）、存在が記される第１のＬＤＴは、ＬＤＴＲが指し示すテーブルであると仮定される。そのテーブルの開始の物理アドレスが、セグメントＥ０００Ｈデータ構造内のＬＤＴＲ領域に保管される。
【０３３３】
ＬＤＴＲを予測する上述の方法は、たとえＯＳ／２下で複数のＬＤＴがその存在を記され、物理メモリ内に存在し得るとしても、十分に信頼性のあるものと考えられる。ＥＭＭ３８６は共通の仮想８０８６モード・ルーチンであり、従って、表面上は問題を生じ得るかも知れない。しかしながら、ＥＭＭ３８６におけるＣＲ３及びＬＤＴＲは、ＥＭＭ３８６が１つのＣＲ３及び１つのＬＤＴＲを有するだけなので、容易に予測することができる。
【０３３４】
ＣＲ３及びＬＤＴＲが予測されると、タスク７１０でＴＲが予測される。本来、ＧＤＴ及びＬＤＴ内の各タスク選択子エントリは、ビジー・ビットがセットされているタスク状態選択子として探索される。各エントリのタイプ・フィールドがテストされ、それがビジーの８０２８６タスク状態選択子（ＴＳＳ）か、それともビジーの８０４８６タスク状態選択子かがチェックされる。ビジーの２８６ＴＳＳまたはビジーの４８６ＴＳＳのいずれかを有する第１エントリは、ＴＲが指し示すアドレスであると仮定される。ビジーの２８６ＴＳＳまたは４８６ＴＳＳを有するエントリの物理アドレスは、セグメントＥ０００Ｈデータ構造内のＴＲ領域に保管される。ビジーの２８６ＴＳＳまたは４８６ＴＳＳを有するエントリが存在しない場合には、０がセグメントＥ０００Ｈデータ構造内のＴＲ領域に保管される。
【０３３５】
ＣＲ３、ＬＤＴＲ及びＴＲが予測されると、コードはタスク７１２へと継続する。タスク７１２で、ＴＲが有効なＴＳＳを指し示すと、ＴＲにより指し示されるＴＳＳ内のビジー・ビットが、タスク７１４でクリアされる。いずれの場合も、コードは次にタスク７１６に移行し、ＤＳ、ＥＳ、ＦＳ及びＧＳに、ＧＤＴにおいて有効な選択子がロードされる。タスク７１８で、ＣＲ３及びＣＲ０に、セグメントＥ０００Ｈデータ構造から値がロードされる。次にタスク７２０でページングが許可され、リニア・アドレスが物理アドレスに等しい領域だけが、セグメントＥ０００Ｈ及びＦ０００Ｈ内の領域となる。次にタスク７２２で、ＩＤＴＲ、ＧＤＴＲ、ＬＤＴＲ及びＴＲに、セグメントＥ０００Ｈデータ構造に記憶されている値がロードされる。
【０３３６】
最終的に、タスク７２４及び７２６で、セグメントＥ０００Ｈデータ構造からのＧＳ、ＦＳ、ＤＳ、ＥＳ、ＳＳ、ＥＳＰ、EFLAGS（ＶＭビットのセット後）、及びＣＳに対応する値を、スタックにプッシュすることにより、仮想８０８６割込みスタックが生成される。またタスク７２６で、タスク７３０のコードに対応する復帰アドレスが、スタックにプッシュされる。最後に、ＩＲＥＴＤ命令が実行され、ＣＰＵ４０を仮想８０８６モードに戻し、実行をタスク７３０に対応するコードに移す。
【０３３７】
タスク７３０は共通スレッドを開始し、これは図３９乃至図４２の様々なスレッドにより使用される。タスク７３０において、コプロセッサ４４が、セグメントＥ０００Ｈデータ構造に保管された値から復元される。次にタスク７３２で、アドレス・ライン２０（Ｉ／Ｏポート９２Ｈ）の状態が、スタックからポップされる（取り出される）。タスク７３２はまた、ＳＭＩベースのＣＰＵ状態保管ルーチンがジャンプするポイントでもある（タスク１０４６参照）。次にタスク７３４で、シャドーＲＡＭセグメントＥ０００Ｈが、再度読出し専用にされる。タスク７３６では、図７乃至図９、及び図５２乃至図５５に関連して述べたように、フェールセーフ・タイマを再始動することにより、ＡＰＭがハードウェアに接続される。次にタスク７３８で、シャドーＲＡＭセグメントＥ０００Ｈ及びＦ０００Ｈが読出し専用にされる。最後にタスク７４０で、ＣＰＵ状態復元ルーチンが、正常な再開が発生したことを示すフラグをセットする。タスク７４２、７４４及び７４６は、ＣＰＵ状態復元ルーチンにより実行されず、単に延期事象により中断されたコードに復帰する以前のある時点において、８つの汎用レジスタがスタックからポップされ、マスク可能割込みが許可され（但しコードが中断された時点でそれらが許可されている場合）、フラグがスタックからポップされることを示すために使用される。最後に、ＣＰＵ状態復元ルーチンがスーパバイザ・ルーチンに復帰し、スーパバイザ・ルーチンが制御をＡＰＭに戻し、ＡＰＭがあらゆる無効の（stale）システム値を更新し、制御を中断されたコードに戻す。
【０３３８】
タスク７０４を再度参照し、ＣＰＵ４０がその中断時に仮想８０８６モードでなかった場合、コードはタスク７５０乃至７９２に沿って実行され、その後コードは共通スレッド、すなわちタスク７３０乃至７４８に併合される。タスク７５０で、セグメントＥ０００Ｈデータ構造内のＴＲ値が、ＴＲが有効ＴＳＳを指し示すことを示す場合、タスク７５２でそのＴＳＳ内のビジー・ビットがクリアされる。いずれの場合も、次にタスク７５４で、ＧＤＴＲ及びＣＲ０にセグメントＥ０００Ｈデータ構造から値がロードされる。
【０３３９】
次にタスク７５６乃至７６４で、ダミー・ページ・ディレクトリ・テーブル及びページ変換テーブルが、セグメントＥ０００Ｈにロードされる。最初にタスク７５６で、シャドーＲＡＭセグメントＥ０００Ｈが読出し／書込み可能に設定される。第２にタスク７５８で、新たなページ・ディレクトリ・テーブルがアドレスＥ０００Ｈに生成される。第３にタスク７６０で、その新たなページ・ディレクトリ・テーブル内の第１エントリが、Ｃ１００Ｈを指し示すように変更される。第４にタスク７６２で、アドレスＥ０００Ｈ乃至ＥＦＦＦＨが存在し、このアドレス範囲においてリニア・アドレスが物理アドレスに等しいように、新たなページ変換テーブルがＣ１００Ｈに生成される。最後にタスク７６４で、ＣＲ３内のページ・ディレクトリ・ベース・レジスタにＥ０００Ｈがロードされ、Ｅ０００Ｈ内の新たなダミー・ページ・ディレクトリ及びページ変換テーブルにより、アドレス変換が実行される。タスク７５４でＣＲ０がロードされるとき、ページングが再活動化される（適応可能な場合）。
【０３４０】
次にタスク７６６で、シャドーＲＡＭセグメントＥ０００Ｈ及びＦ０００Ｈが読出し／書込み可能に設定される。次にタスク７６８で、ＣＰＵ４０がその延期時点において１６ビット・コードで実行されていた場合、それは１６ビット・モードであって、次にタスク７７０で、１６ビット・コード・パスを指し示すオフセットがセグメントＥ０００Ｈデータ構造に保管される。一方、ＣＰＵ４０が１６ビット・モードでなかった場合には、それは３２ビット・モードであって、次にタスク７７２で、１６ビット・オフセットの代わりに、３２ビット・コード・パスを指し示すオフセットがセグメントＥ０００Ｈデータ構造に保管される。いずれの場合にも、これらのコード・パスは並列であり、一方が１６ビット・オペランドを使用するのに対して、他方は３２ビット・オペランドを使用すると言う点においてのみ異なる。タスク７７０及び７７２は、単にオフセットをいずれかの並列パスにセット・アップするだけである。パスの一方（オフセットに対応する）が、下記のタスク７８２に入力される。
【０３４１】
次にタスク７７４において、セグメントＥ０００Ｈデータ構造からのＣＲ３値がＥＤＸにロードされ、セグメントＥ０００Ｈデータ構造からのＳＳ値がＥＣＸにロードされ、セグメントＥ０００Ｈデータ構造からのＥＳＰ値がＥＢＰにロードされ、セグメントＥ０００Ｈデータ構造からのＴＲ値がＥＳＩの上位半分にロードされ、セグメントＥ０００Ｈデータ構造からのＬＤＴＲ値がＥＳＩの下位半分（ＳＩ）にロードされる。これらの値は後述されるそれらの適正な位置にシフトされる。次にタスク７７６で、ＧＤＴＲ、ＬＤＴＲ及びＣＲ０に、セグメントＥ０００Ｈデータ構造からそれらの値がロードされる。タスク７７８では、ＬＤＴＲにＳＩに記憶されるＬＤＴＲ値がロードされる。次にコードは、タスク７７０または７７２のいずれかに配置されるオフセットに遠方ジャンプ（far jump）する。この遠方ジャンプは、オペコードを直接ソース・コード内に配置し、タスク７７０または７７２からのオフセットを使用することにより、コード化される。コードは次にタスク７８２において、１６ビット・オペコード・パスまたは３２ビット・オペコード・パスのいずれかにおいて、継続される。
【０３４２】
次にタスク７８４で、ＣＲ３にＥＤＸに記憶されるＣＲ３値がロードされ、ＳＳにＣＸに記憶されるＳＳ値がロードされ、ＥＳＰにＥＢＰに記憶されるＥＳＰ値がロードされる。次にタスク７８６で、ＧＳ、ＦＳ、ＥＳ、及びＤＳが、スタックからポップされる。次にタスク７８８で、中断されたＣＰＵ４０がコードをプロテクト・モードで実行していた場合、タスク７９０でＴＲにＥＳＩの上位半分に記憶されるＴＲ値がロードされる。いずれの場合も、コードはタスク７９２に継続し、デバッグ・レジスタＤＲ０、ＤＲ１、ＤＲ２、ＤＲ３、ＤＲ６及びＤＲ７がスタックからポップされる。
【０３４３】
この時点で、コード・パスは上述した共通コード・パス、すなわちタスク７３０乃至７４８に併合される。タスク７９４では、更にエラー回復ルーチンが、ＣＰＵ状態保管ルーチンのタスク６４０から共通コード・パスに併合される。
【０３４４】
図４３乃至図４５を参照すると、８２５９状態保管ルーチンのフローチャートが示され、タスク８００で開始する。８２５９の状態の保管は、タスク８０２で、リアル・タイム・クロック９８により使用される周期的割込み値を保管することから始まり、タスク８０４で、他の全ての読出し可能なレジスタをセグメントＥ０００Ｈデータ構造に保管する。コンピュータ・システム１０のアーキテクチャは、既知のように、特定の８２５９読出し専用レジスタが固定値を有することを要求する。これらの値は既知であり、決定される必要はない。獲得が困難な８２５９値には、８２５９基底アドレス、８２５９スレーブ・アドレス、及び２つの８２５９がＯＳにより、保留のまたはサービス中の割込みを示すようにセットされているか否かが含まれる。
【０３４５】
前記４つの項目は、図４３乃至図４５の残りのコードにより確認される。タスク８０６で、キーボード１２割込み及びマウス１３割込みだけをマスクしないで、８２５９がマスクされる。
【０３４６】
次にタスク８０８で、物理メモリの下位１ＫをセグメントＥ０００Ｈデータ構造にコピーすることにより、割込みベクトル・テーブルが保管される。次にタスク８１０で、新たな"ダミー"割込みベクトル・テーブルが物理メモリの下位１Ｋにロードされる。これは２５６のダミー割込みサービス・ルーチン（セグメントＣ８００Ｈから開始する）を指し示す２５６の固有ダミー・ベクトルをロードすることにより達成される。次に、タスク８１２で、２５６のダミー割込みサービス・ルーチンがセグメントＣ８００Ｈ内に生成される。
【０３４７】
次にタスク８１４で、キーボード１２割込み及びマウス１３割込みがディセーブルされる。タスク８１６では、応答されなかったキーボード１２割込み及びマウス１３割込みが応答されるようになる。
【０３４８】
次にタスク８１８で、キーボード割込みが生成され、タスク８２０で割込みがテストされる。ベース８２５９が保留にセットされているか、それともサービス中にセットされているかがテストされ、この値がセグメントＥ０００Ｈデータ構造に書込まれる。タスク８２２では、コードは割込みがサービスされるのを待機する。そしてタスク８２４で、ダミー・サービス・ルーチンの１つを呼び出すことにより、割込みがサービスされる。ダミー・サービス・ルーチンの呼び出しは８２５９基底アドレスを決定し、８２５９が保留であったか、サービス・モードであったかを判断する。基底アドレス及びモードがセグメントＥ０００Ｈデータ構造に保管される。
【０３４９】
類似のプロシジャがスレーブ８２５９について、タスク８２６、８２８、８３０及び８３２で実行される。
【０３５０】
タスク８３４では、割込みベクトル・テーブルが、Ｅ０００Ｈデータ構造から物理メモリの下位１Ｋにコピーされて、復元される。次にタスク８３６で、セグメントＥ０００Ｈが再度読出し専用にされ、全ての割込みが復帰の準備のためにタスク８３８でマスクされ、タスク８４０で呼び出しプログラムに復帰する。
【０３５１】
図４６乃至図４９を参照すると、延期ファイルを動的に割当てるためのルーチンが示される。タスク１０１２（図２９）に関連して示したように、ＦＡＴ内に割当てられる延期ファイルは、延期及び再開の間のそれぞれディスクへの迅速な書込み及びそこからの読出しを可能にするために、連続セクタであるべきである。また、当業者には明らかなように、延期ファイルはシステム状態全体の圧縮内容を記憶するように、十分大きくなければならない。
【０３５２】
このためにタスク１０５０で、延期ファイルを動的に割当てるルーチンが開始する。このルーチンは、システムが再開ルーチンを実行すること無くブートする度にＯＳにより実行され、メモリがシステムに追加された後に実行されるべきである。図４６乃至図４９に示される割当てルーチンは、最初にタスク１０５２で、ＣＭＯＳ  ＮＶＲＡＭ９６内のフラグをチェックすることにより、パワー管理回路が存在するか否かをテストする。パワー管理ハードウェア１０６が存在しない場合、プログラムはタスク１０５４で脱出する。パワー管理ハードウェア１０６が存在すると、ルーチンは次にタスク１０５６で、再開が保留か否かをチェックする。保留の場合、プログラムはタスク１０５８で脱出する。
【０３５３】
再開が保留でないと、次にタスク１５８０で、システムは延期ファイル生成フラグをチェックすることにより、新たな延期ファイルが生成される必要があるか否かを判断する。このフラグがセットされていると、タスク１５８２で新たな延期ファイル名が生成され、現延期ファイルとして選択される。
【０３５４】
新たな延期ファイルが生成されない場合、または新たな延期ファイル名が生成され、そのファイルが現延期ファイルとして選択された後、ファイルが保管ファイルとして、ＦＡＴ内に割当てられなければならない。最初にタスク１０６４で、ファイルのサイズが決定される。これはシステムＲＡＭ５３のサイズ、ビデオ・メモリ５８のサイズ、大容量の揮発メモリを有する他の装置のサイズ、及びＣＰＵ４０などの様々な装置のレジスタの値を記憶するための６４Ｋバイト領域を追加することにより計算される。
【０３５５】
要求保管ファイルのサイズが計算された後、割当てルーチンは次にタスク１０６６で、ＦＡＴ内の保管ファイルを割当てようとする。ハード・ドライブ３１上に使用可能な十分な記憶空間が存在しない場合、割当てルーチンはタスク１０７０で、ハード・ドライブ３１上の使用可能な空間のサイズを増加するためのルーチンを呼び出す（但し増加が可能な場合）。
【０３５６】
ＤＯＳ呼び出しはファイル内の連続セクタを保証できない。従って、ハード・ドライブ３１が保管ファイルを記憶するための十分な空間を有する場合、割当てルーチンは次にタスク１０７２で、空間が連続的かどうかを判断する。保管ファイルが分割されている場合（すなわち非連続的）、割当てルーチンはタスク１０７４で、保管ファイルのための連続ファイルを提供するように、ハード・ドライブ３１を分割解除するルーチンを呼び出す（但し提供可能な場合）。
【０３５７】
保管ファイルが分割されない場合には、タスク１０７６で、割当てルーチンが次にシグニチャ（"ＰＳ／１パワー管理"）を保管ファイルの第１セクタに書込み、延期ファイル生成フラグがクリアされる。
【０３５８】
次にタスク１５８４で、システムはＳＯＲＭフラグをテストすることにより、生成されたばかりの延期ファイルが、ＳＯＲＭ延期ファイルであるべきか否かを判断する。肯定の場合、ＳＯＲＭビットが特定の延期ファイルのヘッダ内でセットされ、ＳＯＲＭフラグがクリアされる。
【０３５９】
次に割当てルーチンはタスク１０７８で、この特定の延期ファイルのＤＯＳハンドルを、ＢＩＯＳにおけるその物理シリンダ、ヘッド、及びセクタに変換し、これらの値をＣＭＯＳ  ＮＶＲＡＭ９６に書込む。最後に、割当てルーチンはタスク１０８０で脱出する。
【０３６０】
タスク１０７４で呼ばれた、ハード・ドライブ３１を分割解除するルーチンは、図４８に示されるようにタスク１０８２で開始され、タスク１０９４まで継続する。最初にタスク１０８４で、ハード・ドライブ３１が、当業者には既知のハード・ドライブ圧縮ルーチンの１つを用いて圧縮されているか否かがテストされる。
【０３６１】
ハード・ドライブ３１が圧縮されていない場合、次にタスク１０８６で、ハード・ドライブ３１全体が、当業者には既知の分割解除ユーティリティを用いて分割解除される。その後ルーチンはタスク１０８８で復帰し、再度タスク１０９０で割当てルーチンの割当て部分を開始する。
【０３６２】
ハード・ドライブ３１が圧縮されていると、タスク１０９２でハード・ディスクの圧縮部分が最小化される。その後タスク１０９４で、ハード・ドライブ３１の非圧縮部分が、当業者には既知の分割解除ユーティリティを用いて分割解除される。その後ルーチンはタスク１０８８で復帰し、再度タスク１０９０で割当てルーチンの割当て部分を開始する。
【０３６３】
タスク１０７０で呼ばれた、ハード・ドライブ３１上の使用可能空間を増加するルーチンは、図４９に示されるようにタスク１１００で開始され、タスク１１０１０まで継続する。最初にタスク１１０２で、ハード・ドライブ３１が、当業者には既知のハード・ドライブ圧縮ルーチンの１つを用いて圧縮されているか否かがテストされる。
【０３６４】
ハード・ドライブ３１が圧縮されていない場合、ハード・ドライブ３１は保管ファイルのために使用可能な十分な空間を有しておらず、メッセージがタスク１１０４で表示され、ユーザに延期及び再開機構を使用ためには、ユーザは追加のハード・ドライブ容量を追加するか、ハード・ドライブ３１からファイルを消去しなければならないことを伝える。
【０３６５】
タスク１１０２でハード・ドライブ３１が圧縮されていると、次にタスク１１０８で、ハード・ドライブ３１の非圧縮部分のサイズが増加される（但し増加が可能な場合）。その後、ルーチンはタスク１１１０で復帰し、再度タスク１０９０で割当てルーチンの割当て部分を開始する。
【０３６６】
図５０を参照すると、待機状態を脱出するためのルーチンが示され、タスク１１２０で開始する。概念的には、システムは待機状態１５２を脱出するとき、自身が正常動作状態１５０から待機状態１５２へ遷移したときに生じた変化を逆に実行する。要するに、システムは待機状態を脱出するとき、ビデオ信号を復元し、ＬＥＤ２３を照明し、ハード・ドライブ３１内のハード・ディスクを回転し、システム・クロックを復元し、ＡＰＭ  ＣＰＵアイドル呼び出しを禁止し、ＡＰＭドライバからのＣＰＵアイドル呼び出しが、もはやＣＰＵ４０を停止しないようにし、システム１０が待機状態１５２であることを示すフラグをクリアする。
【０３６７】
最初にルーチンはタスク１１２２で、システムが待機状態１５２に入力したとき、チェックポイントが生成されたかどうかをテストする。生成された場合、タスク１１２４でチェックポイント生成ビットがクリアされ、チェックポイントがもはや有効でないことを示す。この特定の態様では、システムが待機状態を脱出するときチェックポイントは無効にされる。チェックポイント・データは、システムが待機状態１５２の間に故障する場合にシステムを再開するためだけに使用される。なぜなら、ほとんどのシステムは、ハード・ドライブ上の仮想スワップ・ファイルを使用し、チェックポイント・データからの再開によりマシンが置かれる状態では、スワップ・ファイルが、チェックポイント・データとして記憶されたシステム状態により期待されるファイルと全く異なるからである。別の態様では、次のディスク・アクセスの後に、チェックポイント・データが無効にされる。更に別の態様では、システムがチェックポイント・データから再開された場合に、システム問題を生じ得るファイルへのディスク・アクセスの後に、チェックポイント・データが無効にされる。更に別の態様では、チェックポイント・データからの再開が、ハード・ドライブ３１上の一部のまたは全てのデータを喪失させ得るとの条件の下で、チェックポイント・データが常時ユーザにとって使用可能である。
【０３６８】
その後、及びタスク１１２２でチェックポイントが生成されなかった場合、ＣＰＵ４０はタスク１１２６でマイクロコントローラＵ２に、（ｉ）ビデオ制御装置５６にビデオ信号の生成を開始させ、（ｉｉ）クロック・シンセサイザ９０６に高い周波数（２５ＭＨｚまたは３３ＭＨｚ）のシステム・クロックを再開させ、（ｉｉｉ）ＬＥＤ２３を照明するように、指令する。次にタスク１１２８で、ＣＰＵ４０は適切な値を固定ディスク制御装置８６に書込み、ハード・ドライブ３１内のハード・ディスクの回転を開始させる。次にタスク１１３０で、ＣＰＵ停止が発生しないように、ＡＰＭ  ＣＰＵアイドル呼び出しが禁止される。最後にタスク１１３２で、待機フラグがクリアされ、システム１０が正常動作状態１５０であることを示し、ルーチンはタスク１１４０で呼び出しプログラムに復帰する。
【０３６９】
図５１を参照すると、待機状態に入力するためのルーチンが示され、タスク１１４０で開始する。要するに、システムが待機状態１５２に入力するとき、システムはビデオ信号をブランキングし、ＬＥＤ２３を点滅させ、ハード・ドライブ３１内のハード・ディスクを回転停止し、システム・クロックを低速化し、ＡＰＭドライバからのＣＰＵアイドル呼び出しがＣＰＵ４０を停止するように、ＡＰＭ  ＣＰＵアイドル呼び出しを許可し、システム１０が待機状態１５２であることを示すフラグをセットする。
【０３７０】
最初にタスク１１４２で、チェックポイントが生成されるべきか否かがテストされる。生成されるべき場合、大部分の延期ルーチンがタスク１１４４で実行され、従って、コンピュータ・システム１０の状態がハード・ドライブ３１上に記憶される。本態様では、システムが待機状態に入力するとき、チェックポイントが生成される。別の態様では、図５０に関連して述べられた注意の上で、チェックポイントが周期的に生成され、システムを再開するために使用される。次にタスク１１４６で、タスク１１４４で実行された部分的延期から回復するように、再開ルーチンが十分に実行される。次にタスク１１４８で、チェックポイント生成ビットがセットされ、有効なチェックポイントが生成されたことを示す。この態様では、チェックポイント・データは、システムが待機状態１５２の間に故障する場合に限り、使用されることを想起されたい。この場合、システムがブートするとき、システムは保管されたチェックポイントから再開される。
【０３７１】
理想的には、チェックポイントはシステムにとって全く透過的であるべきである。チェックポイント自体は、ハードウェア割込みが発生する場合、データ損失を回避するために打ち切られるべきである。別の態様では、正規の延期により、あらゆるハードウェア割込みが無視される。
【０３７２】
その後、及びタスク１１４２でチェックポイントが生成されるべきでなかった場合、タスク１１５０でＣＰＵ４０はマイクロコントローラＵ２に、（ｉ）ビデオ制御装置５６にビデオ信号の生成を停止させ、（ｉｉ）クロック・シンセサイザ９０６にシステム・クロックを高い周波数（２５ＭＨｚまたは３３ＭＨｚ）から８ＭＨｚに落とさせ、（ｉｉｉ）ＬＥＤ２３を点滅するように、指令する。次にタスク１１５２で、ＣＰＵ４０は適切な値を固定ディスク制御装置８６に書込み、ハード・ドライブ３１内のハード・ディスクの回転を停止させる。次にタスク１１５４で、ＡＭＰドライバからのＣＰＵアイドル呼び出しがＣＰＵ４０を停止させるように、ＡＰＭ  ＣＰＵアイドル呼び出しが許可される。最後にタスク１１５６で、待機フラグがセットされ、システム１０が待機状態１５２であることを示し、ルーチンはタスク１１５８で呼び出しプログラムに復帰する。
【０３７３】
まとめとして、本発明の構成に関して以下の事項を開示する。
【０３７４】
（１）ａ）プロセッサ・ユニットと、
ｂ）前記プロセッサ・ユニットと回路接続され、揮発メモリ・データを記憶する揮発メモリと、
ｃ）前記プロセッサ・ユニットと回路接続され、揮発レジスタ・データを記憶する揮発レジスタと、
ｄ）前記プロセッサ・ユニットと回路接続され、少なくとも１つのシステム状態を記憶する不揮発記憶装置と、
ｅ）前記プロセッサ・ユニット及び制御ユニットと回路接続され、少なくとも第１の状態及び第２の状態を有するＳＯＲＭフラグと、
ｆ）前記プロセッサ・ユニット及び前記不揮発記憶装置に回路接続される前記制御ユニットと、
ｇ）前記プロセッサ・ユニットに回路接続され、前記制御ユニットに応答して、外部源から前記プロセッサ・ユニットにシステム電力を選択的に供給する電源装置と、
を含むコンピュータ・システムであって、
１）前記制御ユニットが第１のパワー管理コマンドに応答して、選択的に前記少なくとも１つのシステム状態の部分を、前記不揮発記憶装置から前記プロセッサ・ユニット、前記揮発メモリ、及び前記揮発レジスタに転送させ、
２）前記ＳＯＲＭフラグが前記２つの状態の特定の一方の間に、前記制御ユニットが第２のパワー管理コマンドに応答して、前記揮発メモリ・データ及び前記揮発レジスタ・データを前記不揮発記憶装置上に記憶することなく、前記電源装置にシステム電力を前記プロセッサ・ユニットに供給するのを停止させる、
コンピュータ・システム。
（２）コンピュータ・システムで実行されるコードを制御する方法であって、
ａ）第１の記憶コンピュータ状態を不揮発記憶装置から前記コンピュータ・システムにロードするステップと、
ｂ）前記第１の記憶コンピュータ状態から検索されるコードを実行し、それにより変更第１記憶コンピュータ状態を生成するステップと、
ｃ）前記変更第１記憶コンピュータ状態を前記不揮発記憶装置に廃棄するステップと、
を含む、方法。
（３）前記ロード・ステップが、
ａ）前記第１記憶コンピュータ状態のレジスタ部分を揮発レジスタにロードするステップと、
ｂ）前記第１記憶コンピュータ状態のメモリ部分を揮発メモリにロードするステップと、
を含む、前記（２）記載の方法。
（４）ａ）第２の記憶コンピュータ状態を、前記不揮発記憶装置から前記コンピュータ・システムにロードするステップと、
ｂ）前記第２の記憶コンピュータ状態から検索されるコードを実行し、それにより変更第２記憶コンピュータ状態を生成するステップと、
ｃ）前記変更第２記憶コンピュータ状態を前記不揮発記憶装置に廃棄するステップと、
を含む、前記（２）記載の方法。
（５）ａ）第１の記憶コンピュータ状態を不揮発記憶装置からコンピュータ・システムにロードする手段と、
ｂ）前記第１の記憶コンピュータ状態から検索されるコードを実行し、それにより変更第１記憶コンピュータ状態を生成する手段と、
ｃ）前記変更第１記憶コンピュータ状態を前記不揮発記憶装置に廃棄する手段と、
を含む、コンピュータ・システム。
（６）前記ロード手段が、
ａ）前記第１記憶コンピュータ状態のレジスタ部分を揮発レジスタにロードする手段と、
ｂ）前記第１記憶コンピュータ状態のメモリ部分を揮発メモリにロードする手段と、
を含む、前記（５）記載のコンピュータ・システム。
（７）ａ）第２の記憶コンピュータ状態を、前記不揮発記憶装置から前記コンピュータ・システムにロードする手段と、
ｂ）前記第２の記憶コンピュータ状態から検索されるコードを実行し、それにより変更第２記憶コンピュータ状態を生成する手段と、
ｃ）前記変更第２記憶コンピュータ状態を前記不揮発記憶装置に廃棄する手段と、
を含む、前記（５）記載のコンピュータ・システム。
【図面の簡単な説明】
【図１】本発明を実現するパーソナル・コンピュータの斜視図である。
【図２】図１のパーソナル・コンピュータのシャシ、カバー、電気機械的直接アクセス記憶装置、及びプレーナ・ボードなどの特定の要素の分解斜視図とそれらの関係を示す図である。
【図３】図１及び図２のパーソナル・コンピュータの特定のコンポーネントのブロック図である。
【図４】図１及び図２のパーソナル・コンピュータの特定のコンポーネントのブロック図である。
【図５】正常、待機、延期及びオフの４つのシステム状態を示す本発明のコンピュータ・システムの状態図である。
【図６】電源装置の関連部分を示すブロック図である。
【図７】他の図面との様々なインタフェースを示す本発明のパワー管理回路の電気図面である。
【図８】他の図面との様々なインタフェースを示す本発明のパワー管理回路の電気図面である。
【図９】他の図面との様々なインタフェースを示す本発明のパワー管理回路の電気図面である。
【図１０】パワー管理回路と内部モデムとの接続を示す電気図面である。
【図１１】パワー管理回路のためのリセット回路内の様々な信号を示す波形図である。
【図１２】電源故障検出及び訂正回路の第２の実施例の電気図面である。
【図１３】本発明のパワー管理プロセッサにより維持されるスイッチ状態の１つの状態図である。
【図１４】本発明のパワー・アップ・ルーチンの一般的なフローチャートを示す図である。
【図１５】オペレーティング・システム内のＡＰＭデバイス・ドライバによりほぼ毎秒ごとに呼び出されるスーパバイザ・ルーチンの詳細のフローチャートを示す図である。
【図１６】オペレーティング・システム内のＡＰＭデバイス・ドライバによりほぼ毎秒ごとに呼び出されるスーパバイザ・ルーチンの詳細のフローチャートを示す図である。
【図１７】ＡＰＭ最終要求処理ルーチンの詳細のフローチャートを示す図である。
【図１８】ＡＰＭ最終要求拒否ルーチンの詳細のフローチャートを示す図である。
【図１９】本発明の延期ルーチンの詳細のフローチャートを示す図である。
【図２０】本発明の延期ルーチンの詳細のフローチャートを示す図である。
【図２１】本発明の延期ルーチンの詳細のフローチャートを示す図である。
【図２２】本発明の延期ルーチンの詳細のフローチャートを示す図である。
【図２３】本発明の延期ルーチンの詳細のフローチャートを示す図である。
【図２４】本発明の延期ルーチンの詳細のフローチャートを示す図である。
【図２５】本発明の延期ルーチンの詳細のフローチャートを示す図である。
【図２６】本発明のブートアップ・ルーチンの詳細のフローチャートを示す図である。
【図２７】本発明のブートアップ・ルーチンの詳細のフローチャートを示す図である。
【図２８】本発明のブートアップ・ルーチンの詳細のフローチャートを示す図である。
【図２９】本発明のブートアップ・ルーチンの詳細のフローチャートを示す図である。
【図３０】本発明の再開ルーチンの詳細のフローチャートを示す図である。
【図３１】本発明の再開ルーチンの詳細のフローチャートを示す図である。
【図３２】本発明の再開ルーチンの詳細のフローチャートを示す図である。
【図３３】本発明の再開ルーチンの詳細のフローチャートを示す図である。
【図３４】本発明の再開ルーチンの詳細のフローチャートを示す図である。
【図３５】本発明のＣＰＵ状態保管ルーチンの詳細のフローチャートを示す図である。
【図３６】本発明のＣＰＵ状態保管ルーチンの詳細のフローチャートを示す図である。
【図３７】本発明のＣＰＵ状態保管ルーチンの詳細のフローチャートを示す図である。
【図３８】本発明のＣＰＵ状態保管ルーチンの詳細のフローチャートを示す図である。
【図３９】本発明のＣＰＵ状態復元ルーチンの詳細のフローチャートを示す図である。
【図４０】本発明のＣＰＵ状態復元ルーチンの詳細のフローチャートを示す図である。
【図４１】本発明のＣＰＵ状態復元ルーチンの詳細のフローチャートを示す図である。
【図４２】本発明のＣＰＵ状態復元ルーチンの詳細のフローチャートを示す図である。
【図４３】本発明の８２５９状態保管ルーチンの詳細のフローチャートを示す図である。
【図４４】本発明の８２５９状態保管ルーチンの詳細のフローチャートを示す図である。
【図４５】本発明の８２５９状態保管ルーチンの詳細のフローチャートを示す図である。
【図４６】本発明のファイル割当て動的保管ルーチンの詳細のフローチャートを示す図である。
【図４７】本発明のファイル割当て動的保管ルーチンの詳細のフローチャートを示す図である。
【図４８】本発明のファイル割当て動的保管ルーチンの詳細のフローチャートを示す図である。
【図４９】本発明のファイル割当て動的保管ルーチンの詳細のフローチャートを示す図である。
【図５０】本発明の待機出口ルーチンの詳細のフローチャートを示す図である。
【図５１】本発明の待機入力ルーチンの詳細のフローチャートを示す図である。
【図５２】本発明のプロセッサ・パワー管理ルーチンの詳細のフローチャートを示す図である。
【図５３】本発明のプロセッサ・パワー管理ルーチンの詳細のフローチャートを示す図である。
【図５４】本発明のプロセッサ・パワー管理ルーチンの詳細のフローチャートを示す図である。
【図５５】本発明のプロセッサ・パワー管理ルーチンの詳細のフローチャートを示す図である。
【図５６】新たなセッションを開始するために使用される本発明のルーチンの詳細のフローチャートを示す図である。
【図５７】図５６のルーチンにより表示される画面例を示す図である。
【図５８】時間データにもとづき電力を決定し節減する本発明のルーチンの第２ステージの詳細のフローチャートを示す図である。
【図５９】システムがどの延期ファイルから再開すべきかを選択するために、ユーザにより使用される本発明の多重延期／再開マネージャの例を示す図である。
【図６０】時間データにもとづき電力を決定し節減する本発明のルーチンの第１ステージの詳細のフローチャートを示す図である。
【符号の説明】
１０  コンピュータ・システム
１１  表示モニタ
１２  キーボード
１３  マウス
１４  プリンタ（プロッタ）
１５  カバー
１６  装飾外部部材
１７  電源装置
１８  内部遮蔽部材
１９  シャシ
２０  多層プレーナ
２１  電源ボタン（スイッチ）
２２  ベース
２３  パワー／フィードバックＬＥＤ
２４  フロント・パネル
２５  背面パネル
２６、２８、２９、３０  ベイ
２７  フロッピー・ディスク・ドライブ
３１  ハード・ディスク・ドライブ
４０  システム・プロセッサ
４１  ＣＰＵキャッシュ
４２  ＣＰＵローカル・バス
４４  演算コプロセッサ
４６  メモリ制御ユニット
４８  メモリ制御装置
５０  アドレス・マルチプレクサ
５２  データ・バッファ
５３、５４  ＲＡＭ
５６  ビデオ制御装置
５８  ビデオ・メモリ
６０  システム・キャッシュ・メモリ
６２  キャッシュ制御装置
６４、６８、７４  バッファ
６６  システム・バス
６８  ラッチ・バッファ
７０  タイミング・ユニット
７１  ＤＭＡユニット
７２  ＤＭＡ制御装置
７６  ＩＳＡバス
７８  Ｉ／Ｏスロット
８０  アービトレーション制御バス
８２  中央アービタ
８４  ディスケット・アダプタ
８６  総合ドライブ・エレクトロニクス
８８  ＲＯＭ
９０  プレーナＩ／Ｏバス
９２  割込み装置
９４  ＲＳ２３２アダプタ
９６  不揮発ＣＭＯＳ  ＲＡＭ
９８  ＣＭＯＳリアル・タイム・クロック
１００  パラレル・アダプタ
１０２  タイマ
１０４  キーボード制御装置
１０６  パワー管理回路
９００  内部モデム
【図１】
0004028605.tif 000002
【図２】
0004028605.tif 000003
【図３】
0004028605.tif 000004
【図４】
0004028605.tif 000005
【図５】
0004028605.tif 000006
【図６】
0004028605.tif 000007
【図７】
0004028605.tif 000008
【図８】
0004028605.tif 000009
【図９】
0004028605.tif 000010
【図１０】
0004028605.tif 000011
【図１１】
0004028605.tif 000012
【図１２】
0004028605.tif 000013
【図１３】
0004028605.tif 000014
【図１４】
0004028605.tif 000015
【図１５】
0004028605.tif 000016
【図１６】
0004028605.tif 000017
【図１７】
0004028605.tif 000018
【図１８】
0004028605.tif 000019
【図１９】
0004028605.tif 000020
【図２０】
0004028605.tif 000021
【図２１】
0004028605.tif 000022
【図２２】
0004028605.tif 000023
【図２３】
0004028605.tif 000024
【図２４】
0004028605.tif 000025
【図２５】
0004028605.tif 000026
【図２６】
0004028605.tif 000027
【図２７】
0004028605.tif 000028
【図２８】
0004028605.tif 000029
【図２９】
0004028605.tif 000030
【図３０】
0004028605.tif 000031
【図３１】
0004028605.tif 000032
【図３２】
0004028605.tif 000033
【図３３】
0004028605.tif 000034
【図３４】
0004028605.tif 000035
【図３５】
0004028605.tif 000036
【図３６】
0004028605.tif 000037
【図３７】
0004028605.tif 000038
【図３８】
0004028605.tif 000039
【図３９】
0004028605.tif 000040
【図４０】
0004028605.tif 000041
【図４１】
0004028605.tif 000042
【図４２】
0004028605.tif 000043
【図４３】
0004028605.tif 000044
【図４４】
0004028605.tif 000045
【図４５】
0004028605.tif 000046
【図４６】
0004028605.tif 000047
【図４７】
0004028605.tif 000048
【図４８】
0004028605.tif 000049
【図４９】
0004028605.tif 000050
【図５０】
0004028605.tif 000051
【図５１】
0004028605.tif 000052
【図５２】
0004028605.tif 000053
【図５３】
0004028605.tif 000054
【図５４】
0004028605.tif 000055
【図５５】
0004028605.tif 000056
【図５６】
0004028605.tif 000057
【図５７】
0004028605.tif 000058
【図５８】
0004028605.tif 000059
【図５９】
0004028605.tif 000060
【図６０】
0004028605.tif 000061