<コンピュータのハードウェア構成の一例>
以下、図面を参照して、実施形態について説明する。図1は、コンピュータ1のハードウェア構成の一例を示している。例えば、コンピュータ1は、パーソナルコンピュータであってもよい。コンピュータ1は、情報処理装置の一例である。
図1の例において、コンピュータ1は、バス2に対して、CPU(Central Processing Unit)3とRAM(Random Access Memory)4とROM(Read Only Memory)5と補助記憶装置6とUSBコントローラ7とタイマ12とが接続されている。コンピュータ1のハードウェア構成は、図1の例には限定されない。
CPU3は、任意の処理回路である。CPU3は、RAM4に展開されたプログラムを実行する。ROM5は、不揮発性のメモリである。ROM5は、種々のプログラムを記憶することができる。
例えば、ROM5はファームウェアを記憶する。当該ファームウェアにはBIOSが含まれる。補助記憶装置6は、種々の情報を記憶する記憶装置であり、例えばハードディスクドライブや半導体メモリ等を補助記憶装置6に適用することができる。
USB(Universal Serial Bus)コントローラ7は、USBポート8に接続されるUSBデバイスとのデータ入出力を制御する。USBポート8は、USBデバイスを接続するためのポートである。
USBコントローラ7は、バスマスタ回路9とデバッグポート回路10とを有している。バスマスタ回路9は、例えば、UHCI(Universal Host Controller Interface)やEHCI(Enhanced Controller Interface)等を適用することができる。バスマスタ回路9は、RAM4とUSBデバイスとのデータ入出力をDMA(Direct Memory Access)で行われるように制御する。
デバッグポート回路10は、デバッグを目的として使用される回路である。デバッグポート回路10は、一般に、UART(Universal Asynchronous Receiver Transmitter)と称されるシリアル・パラレル変換回路を適用することができる。デバッグポート回路10は、回路に備えるレジスタを用いることで、RAM4等に障害を生じたとしても、USBポート8に接続されるUSBデバイスとデータの入出力を行うことができる。
切り替えスイッチ11は、USBポート8に対する接続をバスマスタ回路9またはデバッグポート回路10の何れかに切り替える。切り替えスイッチ11がバスマスタ回路9に接続されているときには、USBポート8は通常のUSBとして使用することができる。切り替えスイッチ11がデバッグポート回路10に接続されているときには、デバッグ目的のためにUSBポート8が使用される。
タイマ12は、時間のカウントを行う。タイマ12としては、チップセットに備えられるTCOタイマを適用してもよい。TCOタイマは、予め設定された時間ごとにSMI(System Management Interrupt)を発生させる。TCOタイマは、例えばウォッチドッグタイマ等の目的で使用される。
RAM4、ROM5および補助記憶装置6は、何れもコンピュータ読み取り可能な有形の記憶媒体の一例である。これらの有形な記憶媒体は、信号搬送波のような一時的な媒体ではない。
<外部装置の一例>
次に、USBポート8に接続される外部装置の一例について説明する。図2は、外部装置20の一例を示す斜視図である。外部装置20は、上述したUSBデバイスの一例である。
図2の例では、外部装置20は、ベース21とUSBコネクタ22と表示素子23と記憶素子24と割り込み発生ボタン25とを備えている。ベース21は、外部装置20の基板である。USBコネクタ22は、コンピュータ1のUSBポート8に着脱可能に接続される接続部である。
外部装置20のUSBコネクタ22がコンピュータ1のUSBポート8に接続されると、外部装置20とコンピュータ1との間でデータの入出力が可能になる。両者の間ではパケットを用いてデータの入出力が行われる。
表示素子23は、所定の情報を表示する。実施形態では、表示素子23は、4桁の7セグメントLEDであるものとする。ただし、表示素子23は、7セグメントLEDには限定されない。表示素子23は、表示装置の一例である。表示素子23の桁数は4桁には限定されない。また、表示素子23は、7セグメントLEDでなくてもよい。例えば、表示素子23は任意の情報を表示することが可能な小型液晶ディスプレイであってもよい。
実施形態では、表示素子23は4桁の7セグメントLEDであるため、表示素子23は、7セグメントLEDを4つ有している。1つの7セグメントLEDは、「0」から「F」までの16進数を表示できるものとする。
記憶素子24は、外部装置20がコンピュータ1に接続された状態で、コンピュータ1から出力されるデータを記憶する。記憶素子24としては、例えば、フラッシュメモリを適用することができる。記憶素子24は、フラッシュメモリには限定されない。ただし、記憶素子24は不揮発性の記憶手段である。記憶素子24は外部記憶装置の一例である。
割り込み発生ボタン25は、押下可能なボタンである。割り込み発生ボタン25が押下されたことが検出されると、コンピュータ1に対する割り込みが発生する。実施形態では、この割り込みは、SMIであるものとする。以下、割り込み発生ボタン25が押下されることにより、コンピュータ1に対して出力されるSMIを外部SMIと称する。
<外部装置のハードウェア構成の一例>
次に、図3を参照して、外部装置20のハードウェア構成の一例を説明する。外部装置20は、バス30に対して、CPU31とRAM32とROM33とUSBインタフェース34と表示制御回路35と外部SMI発行部36とが接続されている。上述した記憶素子24および割り込み発生ボタン25がバス30に接続されている。表示制御回路35には、上述した表示素子23が接続されている。外部SMI発行部36には、上述した割り込み発生ボタン25が接続されている。
CPU31は、任意の処理回路である。CPU31は、RAM32に展開されたプログラムを実行する。ROM5は、不揮発性のメモリであり、例えば、RAM32に展開されるプログラムを記憶する。
USBインタフェース34は、USBコネクタ22がコンピュータ1のUSBポート8に挿入され、コンピュータ1に外部装置20が接続されたときに、外部装置20とコンピュータ1とのデータの入出力を行うインタフェースである。
表示制御回路35は、表示素子23を制御する。上述したように、実施形態では、表示素子23は、4桁の7セグメントLEDである。よって、表示制御回路35は、4桁の7セグメントLEDの表示内容を制御する。
また、記憶素子24は、コンピュータ1から出力されるデータを記憶する。外部装置20がコンピュータ1に接続されている状態で、コンピュータ1と外部装置20とはデータの入出力が可能になる。USBインタフェース34に入力されたデータは、記憶素子24に記憶される。
外部SMI発行部36は、割り込み発生ボタン25が押下されたか否かを検出する。外部SMI発行部36は、割り込み発生ボタン25が押下されたことを検出したときに、外部SMIを発行する。この外部SMIは、USBインタフェース34を経由して、コンピュータ1に入力される。
図4は、外部装置20のUSBインタフェース34の機能の一例を示している。USBインタフェース34には、マストストレージクラスと称される共通仕様がある。マストストレージクラスには、EP0、EP1およびEP2という3つのエンドポイントが属している。マストストレージクラスの3つのエンドポイントは、通常のUSBのデータ入出力で使用される。
EP0〜EP4は、例えばレジスタを適用することができる。EP0は、一般的なUSBデバイスに共通的に備えられる。EP1およびEP2は、マストストレージによって規定されているエンドポイントである。EP1は、ステータス情報やデータの入力に使用される。EP2は、記憶素子24に対するコマンドの出力に使用される。
EP3およびEP4は、マストストレージクラスの体裁に対して付加されるものであり、デバッグポート機能で使用される。デバッグポート機能は、コンピュータ1の起動処理を行っているときに何らかの障害が発生したときに機能する。
EP3は、POST番号を表示するために設けられている。EP4は、1ビット分が使用される。EP4は、割り込み発生ボタン25が押下されたか否かを示す。例えば、割り込み発生ボタン25が押下されていれば、EP4の1ビットはHighになり、押下されていなければ、Lowになる。このEP4の状態は、コンピュータ1のBIOSから監視することができる。
図5は、表示素子23および割り込み発生ボタン25の概要を示している。外部装置20は、ドライバ回路41とデコーダ回路42とを備えている。ドライバ回路41は、表示素子23を駆動する。
実施形態では、表示素子23は4桁の7セグメントLEDであり、表示素子23は4つの7セグメントLEDを有している。EP3は16ビットで定義され、そのうち4ビットは、4つの7セグメントLEDに対応しており、ドライバ回路41は、EP3の4ビットの値に応じて、4つの7セグメントLEDのそれぞれを駆動する。残り7ビットについては未使用とする。
EP4の1ビットは、割り込み発生ボタン25が押下されたか否かによって変化する。割り込み発生ボタン25が押下されると、EP4に対する信号がHighになる。一方、割り込み発生ボタン25が押下されていない場合、EP4に対する信号はLowになる。なお、割り込み発生ボタン25が押下されると、処理が終了するまで、EP4に対する信号はHighのままになる。
<コンピュータの機能ブロックの一例>
次に、図6を参照して、実施形態の処理を行うコンピュータ1の機能ブロックについて説明する。コンピュータ1は、BIOS実行部51と割り込み検出部52とスイッチ制御部53と起動処理情報記憶部54とNMIハンドラ実行部55とSMIハンドラ実行部56と監視SMI発行部57と起動処理情報出力制御部58と障害検出部59とを備えている。
例えば、図6の起動処理情報記憶部54は、RAM4により実現されてもよい。また、図6の起動処理情報記憶部54以外の各部は、ROM5に記憶されているBIOSをCPU3が実行することにより実現されてもよい。
BIOS実行部51は、ROM5に記憶されているBIOSを実行する。BIOS実行部51がBIOSを実行することで、コンピュータ1の起動処理が行われる。割り込み検出部52は、割り込みを検出する。実施形態では、割り込み検出部52は、コンピュータ1の内部で発行されるNMI(Non-Maskable Interrupt)、外部装置20からの割り込みである外部SMIおよび当該外部SMIの入力を確認するための監視SMIを検出する。
NMIは、第1の割り込みの一例である。NMIは、「Int 02h」と称されることもある。外部SMIは、第2の割り込みの一例である。NMIは、優先度の高いマスク不能な割り込みである。SMIは、優先度の高いハードウェア割り込みである。
スイッチ制御部53は、切り替えスイッチ11の制御を行う。通常時には、スイッチ制御部53は、USBポート8とバスマスタ回路9とが接続されるように切り替えスイッチ11を制御する。障害が発生したときには、スイッチ制御部53は、USBポート8とデバッグポート回路10とが接続されるように切り替えスイッチ11を制御する。
起動処理情報記憶部54は、起動処理に関する情報(以下、起動処理情報と称する)を記憶する。NMIハンドラ実行部55は、割り込み検出部52がNMIを検出したときに、NMIに応じた割り込み処理を実行する。SMIハンドラ実行部56は、割り込み検出部52が外部SMIを検出したときに、外部SMIに応じた割り込み処理を実行する。起動処理情報記憶部54は、記憶部の一例である。
監視SMI発行部57は、監視SMIを発行する。監視SMIは、外部割込みが発生したか否かを定期的に監視するための割り込みである。コンピュータ1は、通常の起動処理を行っているときに、一定時間ごとに監視SMIを発行する。この監視SMIが発行されると、SMIハンドラ実行部56は、外部SMIを入力したか否かを確認する。監視SMIは、第3の割り込みの一例である。
起動処理情報出力制御部58は、起動処理情報を外部装置20に出力し、外部装置20の記憶素子24に起動処理情報を記憶させる制御を行う。起動処理情報は、コンピュータ1を起動しているときに、BIOS実行部51が実行する起動処理に関する情報である。起動処理情報出力制御部58は、制御部の一例である。
例えば、BIOS実行部51は、BIOSの処理内容に基づいて、起動処理を行う。実施形態では、BIOS実行部51は、BIOSに規定されている関数を実行することにより、起動処理を行う。そして、BIOS実行部51は、OS(Operating System)を起動する。
OSが起動されるまで、BIOS実行部51は、BIOSに規定された複数の関数を順次呼び出して実行する。実施形態の起動処理情報は、関数のパラメータと関数の呼び出し先と関数の呼び出し元との情報を含む。そして、BIOS実行部51は、起動処理情報記憶部54にスタック形式で起動処理情報を記憶していく。
起動処理情報に含まれる関数のパラメータとしては、例えば関数の引数がある。関数の呼び出し先および呼び出し元の情報としては、関数のアドレスがある。起動処理情報は、起動処理に関する他の情報を含んでもよい。
BIOS実行部51が実行していた関数が別の関数を呼び出すと、BIOS実行部51は、当該別の関数のパラメータと関数の呼び出し先と関数の呼び出し元との情報を起動処理情報記憶部54のスタックに蓄積する。従って、起動処理情報記憶部54のスタックには、関数が実行されるごとに、順次、関数に関する情報が蓄積される。
障害検出部59は、コンピュータ1に発生した障害を検出する。例えば、特権違反や不正命令実行、無限ループ処理等が発生したときに、障害検出部59は障害を検出する。コンピュータ1に発生する障害の例は、これらに限定されない。
<第1の処理>
次に、実施形態に係る第1の処理について説明する。第1の処理は、コンピュータ1が起動しているときに、コンピュータ1の内部で特権違反や不正命令実行等の障害が発生したときの処理である。なお、外部装置20は予めコンピュータ1に接続されているものとする。
特権違反や不正命令実行等の障害は、例えば、BIOSのプログラムで指定された命令の移動先が本来の移動先とは異なる場合に発生する。この場合、本来とは異なる移動先の命令に移動すると、CPU3は、正しい命令を認識できない。このような場合、特権違反や不正命令実行等の障害が発生する。
図7は、第1の処理の流れを示している。第1の処理では、初期的に、コンピュータ1の電源は遮断されているものとする。従って、最初に、コンピュータ1の電源が投入される(ステップS1)。
これにより、BIOS実行部51は、BIOSに規定された起動処理の実行を開始する。そして、BIOS実行部51は、POST処理を開始する(ステップS2)。BIOS実行部51は、実行する起動処理の進行状況に応じてPOSTコードを生成する。
第1の処理では、コンピュータ1を起動しているときに特権違反や不正命令実行等の障害が発生した場合、内部割込みとしてNMIが発行される。従って、BIOS実行部51は、障害発生時の処理をNMIハンドラに設定する(ステップS3)。
BIOS実行部51は、BIOSに規定されている起動処理の内容を実行していく。これに伴い、BIOS実行部51は、実行している関数のパラメータ、関数の呼び出し元および呼び出し先に関する起動処理情報を起動処理情報記憶部54にスタック形式で記憶する(ステップS4)。
障害検出部59は、BIOS実行部51がBIOSを実行しているとき、すなわちコンピュータ1を起動しているときに、障害が発生したか否かを判定する(ステップS5)。障害が発生していなければ(ステップS5でNO)、BIOS実行部51は起動処理を続行する(ステップS6)。
そして、BIOS実行部51は、BIOSに規定されている起動処理が終了したか否かを判定する(ステップS7)。起動処理が終了していない場合(ステップS7でNO)、処理はステップS5に戻る。一方、起動処理が終了したとBIOS実行部51が判定したときには(ステップS7でYES)、OSが起動される(ステップS8)。そして、第1の処理は終了する。
一方、BIOS実行部51が起動処理を行っているときに、障害検出部59が障害を検出したときには(ステップS5でYES)、マスク不能な割り込みであるNMIが発行される(ステップS9)。割り込み検出部52は、NMIが発行されたことを検出する。割り込み検出部52がNMIを検出したことをトリガとして、NMIハンドラ実行部55は、NMIハンドラを実行する(ステップS10)。
ステップS2で、障害が発生したときの処理がNMIハンドラに設定されている。起動処理情報は、起動処理情報記憶部54に記憶されている。NMIハンドラ実行部55は、起動処理情報記憶部54から起動処理情報を取得する(ステップS11)。このとき、NMIハンドラ実行部55は、障害発生時のCPU3のレジスタの値を起動処理情報に含めてもよい。
BIOS実行部51が起動処理を実行しているときに障害が発生すると、スイッチ制御部53は、USBコントローラ7を制御して、切り替えスイッチ11をバスマスタ回路9からデバッグポート回路10に切り替える。これにより、デバッグポート回路10とUSBポート8とが接続される。
また、BIOS実行部51が起動処理を実行しているときに障害が発生すると、POSTコードは障害が発生した時点で停止する。起動処理情報出力制御部58は、デバッグポート回路10に対して、起動処理情報およびPOSTコードを出力する。
デバッグポート回路10は、起動処理情報およびPOSTコードをUSBポート8に出力する。USBポート8には、外部装置20のUSBコネクタ22が接続されている。よって、起動処理情報およびPOSTコードは、外部装置20のUSBインタフェース34に出力される(ステップS12)。
USBインタフェース34から入力された起動処理情報は、外部装置20の記憶素子24に記憶される(ステップS13)。また、USBインタフェース34から入力されたPOSTコードは、表示制御回路35により表示素子23に表示される(ステップS14)。
起動処理情報は、USBインタフェース34のエンドポイントEP1から入力され、記憶素子24に記憶される。また、POSTコードは、USBインタフェース34のエンドポイントEP3から入力され、表示制御回路35に出力される。
実施形態では、表示素子23は4つの7セグメントLEDで表現されている。表示制御回路35は、ドライバ回路41およびデコーダ回路42を制御して、POSTコードの値に応じて、4つの7セグメントLEDのそれぞれの駆動制御を行う。これにより、表示素子23にPOSTコードが表示される。
また、記憶素子24には、起動処理情報およびCPU3のレジスタの状態が記憶される。起動処理情報は、BIOS実行部51がBIOSを実行していたときの関数のパラメータや関数の呼び出し先アドレス、関数の呼び出し元アドレス等を含む。
外部装置20のUSBインタフェース34は汎用インタフェースである。このため、外部装置20を、正常に動作する他のコンピュータのUSBポートに接続することにより、記憶素子24に記憶されている起動処理情報を解析することができる。
これにより、コンピュータ1を起動しているときの単なる進捗状況であるPOSTコードだけではなく、関数のパラメータやアドレス等のより詳細な情報を認識することができる。例えば、起動処理情報に基づいて、1つのPOSTコードの処理の中に複数の関数が含まれる場合、CPU3が実行している関数の流れを認識することができる。これにより、BIOSのプログラムの本来の流れと一致しているか否かを認識することができ、障害を発生している関数を特定することができる。
また、関数のパラメータについても認識することができるため、障害に関する詳細な情報を得ることができる。また、障害発生時のCPU3のレジスタの状態を記憶素子24が記憶することで、障害発生時のCPU3のレジスタの値を認識することができる。
<第2の処理>
次に、図8を参照して、第2の処理について説明する。第2の処理は、コンピュータ1に接続された外部装置20から出力された割り込みに基づいて行われる処理である。従って、外部装置20は予めコンピュータ1に接続されているものとする。
図8は、第2の処理の流れを示している。第1の処理と同様、初期的に、コンピュータ1の電源は遮断されているものとする。従って、最初に、コンピュータ1の電源が投入される(ステップS21)。これにより、BIOS実行部51は、BIOSを実行して、BIOSの内容に応じた起動処理を行う。そして、BIOS実行部51は、POST処理を開始する(ステップS22)。BIOS実行部51は、実行する起動処理の進行状況に応じてPOSTコードを生成する。
監視SMI発行部57は、予め設定されたタイミングで監視SMIを発行する(ステップS23)。監視SMIを発行するタイミング(一定時間ごと)は、タイマ12に設定することができる。タイマ12は、一定時間ごとに監視SMIを発行する。
BIOS実行部51は、BIOSに規定されている起動処理の内容を実行していく。これに伴い、BIOS実行部51は、実行している関数のパラメータ、関数の呼び出し元および呼び出し先に関する起動処理情報を起動処理情報記憶部54にスタック形式で記憶する(ステップS24)。
監視SMIは、外部装置20から外部SMIが入力されたか否かを確認するために発行される。割り込み検出部52は、監視SMIが発行されたタイミングで外部SMIが入力されているか否かを確認する(ステップS25)。
監視SMIが発行されたタイミングで、割り込み検出部52が外部SMIの入力を検出しなければ(ステップS25でNO)、処理は「A」に進む。つまり、この場合、図9のステップS33に処理が進む。一方、監視SMIが発行されたタイミングで、割り込み検出部52が外部SMIの入力を検出した場合(ステップS26でYES)、SMIハンドラ実行部56はSMIハンドラを実行する(ステップS26)。
図10は、SMIハンドラを実行するタイミングチャートの一例を示している。監視SMI発行部57は、一定時間ごとに監視SMIを発行する。監視SMIを発行するタイミングはタイマ12に基づく。
BIOS実行部51は、通常の起動処理を行っている。タイマ12がカウントする時間が一定時間に達したときに、監視SMIが発行される。監視SMIが発行されると、割り込み検出部52は、外部SMIが外部装置20から入力されたか否かを確認する。
図10の例において、時刻T1の時点で、タイマ12に基づいて、監視SMIが発行される。よって、時刻T1において、割り込み検出部52は、外部SMIがコンピュータ1に入力されたか否かを確認する。時刻T1の時点では、外部SMIはコンピュータ1に入力されていない。よって、SMIハンドラ実行部56はSMIハンドラを実行しない。
時刻T1からT2までの間、BIOS実行部51は通常の起動処理を行う。そして、タイマ12に基づいて、時刻T2になったときに、監視SMI発行部57は、監視SMIを発行する。時刻T1からT2までの間に、外部装置20からコンピュータ1に外部SMIが入力されたとする。
つまり、外部装置20の割り込み発生ボタン25が押下されたことを外部SMI発行部36が検出する。外部SMI発行部36は、USBインタフェース34に外部SMIを出力する。この外部SMIは、USBポート8からコンピュータ1に入力される。そして、外部SMIを割り込み検出部52が検出する。
従って、SMIハンドラ実行部56は、時刻T2のタイミングで外部SMIに基づいて、SMIハンドラを実行する。図10の例では、タイマ12に基づく時刻T3の時点でも、SMIハンドラが実行されている。
図10の一例に示すように、割り込み検出部52は、監視SMIが発生したタイミングで外部SMIが入力されたか否かを確認する。つまり、外部SMIの検出は、監視SMIの発行に基づくポーリングにより行われる。従って、監視SMI処理を行う時間以外の時間は、BIOS実行部51が通常の起動処理を実行することができる。
また、外部SMIが入力された否かを確認する監視SMIはSMIであり、SMIはOS処理に介入可能な優先度の高いハードウェア割り込みである。このような監視SMIを一定時間後ごとにポーリングにより発行することで、起動処理に障害を生じたとしても、割り込み検出部52は外部SMIを検出することができる。
以上により、図8のステップS26で示したSMIハンドラが実行される。SMIハンドラ実行部56は、起動処理情報記憶部54に記憶された起動処理情報を取得する(ステップS27)。第1の処理と同様、起動処理情報は、CPU3のレジスタの値を含んでいてもよい。
BIOS実行部51が起動処理を行っているときに障害が発生すると、障害検出部59は障害を検出する。障害が検出されると、スイッチ制御部53は、USBコントローラ7を制御して、切り替えスイッチ11をバスマスタ回路9からデバッグポート回路10に切り替える。これにより、デバッグポート回路10とUSBポート8とが接続される。
また、BIOS実行部51が起動処理を行っているときに障害が発生すると、POSTコードは障害が発生した時点で停止する。起動処理情報出力制御部58は、デバッグポート回路10に対して、起動処理情報およびPOSTコードを出力する。
デバッグポート回路10は、起動処理情報およびPOSTコードをUSBポート8に出力する。USBポート8には、外部装置20のUSBコネクタ22が接続されている。よって、起動処理情報およびPOSTコードは、外部装置20のUSBインタフェース34に出力される(ステップS28)。起動処理情報は、エンドポイントEP1を使用して、外部装置20に入力され、POSTコードはエンドポイントEP3を使用して、外部装置20に入力される。
コンピュータ1から外部装置20に起動処理情報およびPOSTコードが出力された後に、外部装置20はコンピュータ1に対して、出力完了を示すアクノレッジメント(以下、ACKと称する)を出力する。アクノレッジメントは、第1の情報の一例である。
コンピュータ1が外部装置20からACKを入力していない場合(ステップS29でNO)、コンピュータ1から外部装置20に起動処理情報およびPOSTコードが正常に出力されていないことになる。このため、起動処理情報出力制御部58は、外部装置20の表示素子23にエラーコードを表示する制御を行う(ステップS30)。
この場合、起動処理情報出力制御部58は、USBポート8から外部装置20のUSBインタフェース34に対して、特定のエラーコードの情報を出力する。外部装置20の表示制御回路35は、表示素子23に特定のエラーコードを表示する制御を行う。これにより、4桁の7セグメントLEDに特定のエラーコード(例えば、「FFFF」)が表示素子23に表示される。特定のエラーコードの情報は、第2の情報の一例である。
そして、表示素子23にエラーコードが表示された後に、処理はステップS28に戻る。これにより、コンピュータ1は、起動処理情報およびPOSTコードを外部装置20に対して再送する。
起動処理情報およびPOSTコードの再送処理が行われたとしても、まだコンピュータ1がACKを入力できないときには、表示素子23には継続して特定のエラーコードが表示される。これにより、起動処理情報およびPOSTコードの出力が正常に行われないことを認識することができる。
一方、コンピュータ1が外部装置20からACKを入力した場合(ステップS29でYES)、外部装置20はコンピュータ1から起動処理情報およびPOSTコードを正常に入力したことになる(ステップS31)。なお、以上のACKに関する処理は、第1の処理に適用してもよい。
次に、処理は「B」に進む。図9を参照して、「B」以降の処理について説明する。USBインタフェース34から入力された起動処理情報は、外部装置20の記憶素子24に記憶される(ステップS32)。また、USBインタフェース34から入力されたPOSTコードは、表示制御回路35により表示素子23に表示される(ステップS33)。
起動処理情報は、USBインタフェース34のエンドポイントEP1から入力され、記憶素子24に記憶される。また、POSTコードは、USBインタフェース34のエンドポイントEP3から入力され、表示制御回路35に出力される。
実施形態では、表示素子23は4つの7セグメントLEDで表現されている。表示制御回路35は、ドライバ回路41およびデコーダ回路42を制御して、POSTコードの値に応じて、4つの7セグメントLEDのそれぞれの駆動制御を行う。これにより、表示素子23にPOSTコードが表示される。
監視SMI発行部57は、一定時間ごとに監視SMIを発行する。発行するタイミングはタイマ12がカウントする時間に基づく。従って、タイマ12がカウントする時間が一定時間に達したときに、タイマ12がカウントしている時間はリロードされる(ステップS34)。つまり、タイマ12がカウントしている時間はリセットされる。
次に、BIOS実行部51は起動処理を終了したか否かを判定する(ステップS35)。BIOS実行部51が起動処理を終了したとき(ステップS35でYES)、すなわちBIOSに規定されている処理を終了したときに、OSが起動される(ステップS36)。
一方、BIOS実行部51が起動処理を終了していないとき(ステップS35でNO)、システムがハングアップの状態であるか否かが判定される(ステップS37)。この判定は、障害検出部59が行ってもよい。
システムがハングアップ状態にある場合(ステップS37でYES)、第2の処理は終了する。一方、システムがハングアップ状態にない場合(ステップS37でNO)、処理は、「C」から図8のステップS23に移る。つまり、BIOS実行部51により起動処理が続行する。
第2の処理は、第1の処理と同様、外部装置20の記憶素子24に起動処理情報が記憶されるため、後に、障害に関する詳細な情報を得ることができる。特に、1つのPOSTコードの処理の中の複数の関数のうち、何れの関数で障害を発生したかを特定することができる。
第1の処理は、障害検出部59が障害の発生を検出したときに、NMIが発行される。このNMIに基づいて、外部装置20の記憶素子24に起動処理情報が記憶される。ただし、コンピュータ1の状態によっては、NMIが発行されない場合がある。この場合、記憶素子24に起動処理情報は記憶されない。
例えば、BIOS実行部51がBIOSに規定されている起動処理を実行しているときに、無限ループが実行されたとする。この場合、起動処理は完了せず、OSは起動しない。また、BIOS実行部51が無限ループを実行すると、NMIが発行されないことがある。この場合、記憶素子24に起動処理情報は記憶されない。
OSが起動しない場合、例えばコンピュータ1に接続されるディスプレイ(不図示)には、起動処理を行っている旨の画面が表示され続け、OSの画面が表示されない。このときに、コンピュータ1の操作者(以下、オペレータと称する)は、OSの画面が表示されないことから、コンピュータ1に障害が発生していることを認識できる。このような場合、オペレータにより、外部装置20の割り込み発生ボタン25が押下される。
これにより、割り込み発生ボタン25が押下されたことを外部SMI発行部36が検出し、外部SMI発行部36は外部SMIを発行する。この外部SMIは、優先度の高いハードウェア割り込みであり、割り込み検出部52が外部SMIを検出できる。よって、この外部SMIに基づいて、第2の処理が行われる。
従って、コンピュータ1の状態によって、NMIが発行されなくても、外部SMIに基づいて、コンピュータ1は外部装置20に起動処理情報を出力することができる。これにより、外部装置20の記憶素子24は起動処理情報を記憶することができる。
<第3の処理>
第3の処理は、OSが起動した後に、システムを一時的に停止させたとき、またはシステムが一時的に停止した状態から復帰したときに適用される。システムの一時的な停止は、スリープまたは休止状態とも称される。第3の処理は、第1の処理における図7のステップS1の「電源投入」または第2の処理における図8のステップS21の「電源投入」の代わりに適用される。
OS起動後に、システムを一時的に停止させる機能としては、例えば、スリープ状態がある。図11は、ACPI(Advanced Configuration And Power Interface)で規定されている電源に関する状態遷移の仕様を示している。図11において「BIOS」から延出している点線は、BIOSが関与する範囲を示す。
ACPIでは、コンピュータ1のシステム稼働状態として、「Global State」という4つのレベルが設けられている。そして、各レベルには、それぞれ「Sleeping State」というステートが割り当てられている。
「G0」には、ステートS0が割り当てられる。「G0」はコンピュータ1のシステムが稼動している状態を示す。「G1」には、ステートS1〜S4が割り当てられる。「G1」はコンピュータ1がスリープ状態であることを示す。
スリープ状態に割り当てられるステートS1は、CPU3やキャッシュ、RAM4等の状態を維持した状態で電源をオフにするステートである。ステートS2は、CPU3およびキャッシュの状態を維持した状態で電源をオフにするステートである。
ステートS3は、OSが実行中のRAM4の内容を維持した状態でバックアップ電源を残して、コンピュータ1のメイン電源をオフにするステートである。ステートS4は、RAM4の内容を補助記憶装置6に保存した後に、バックアップ電源を含めて電源をオフにするステートである。
「G2」はコンピュータ1がソフトオフの状態であることを示す。「G1」にはステートS5が割り当てられる。「G3」はコンピュータ1がメカニカルオフの状態を示す。「G3」にはステートは割り当てられない。「G3」はコンピュータ1が完全にシャットダウンした状態である。
図11の一例に示すように、「G0」と「G1」、「G2」および「G3」との間で状態が遷移する。BIOSは、これらの遷移の全てに関与する。例えば、上述した第1の処理および第2の処理は、メカニカルオフの「G3」の状態からワーキングの「G0」の状態に遷移するときの処理になる。
図11の一例において、「G0」のワーキングの状態から、「G1」のステートS3の状態に遷移したとする。つまり、OSが稼動している状態からスリープ状態に遷移したとする。BIOS実行部51は、OSが稼動している状態からスリープ状態に移行させる。この移行処理を第1の移行処理と称する。
また、図11の一例において、「G1」のステートS3の状態から、「G0」のワーキングの状態に遷移したとする。BIOS実行部51は、スリープ状態からOSが稼動している状態に移行させる。この移行処理を第2の移行処理と称する。
図12は、第3の処理の一例を示している。図12の例では、スリープ状態からOSが稼動している状態に移行する第2の移行処理の流れを示している。初期的には、コンピュータ1は、スリープ状態になっている。この状態から、OS復帰操作が行われる(ステップS41)。例えば、電源スイッチを押下することで、OS復帰操作が行われてもよい。
BIOS実行部51は、POST処理を開始する(ステップS42)。そして、BIOS実行部51は、障害発生時の処理をNMIハンドラに設定する(ステップS43)。BIOS実行部51は、第2の移行処理を行っているときに、RAM4に第2の移行処理の情報を記憶する(ステップS44)。
障害検出部59は、コンピュータ1に何らかの障害が発生したか否かを検出する(ステップS45)。コンピュータ1に障害が発生していない場合(ステップS45でNO)、BIOS実行部51は第2の移行処理を続行する(ステップS46)。
BIOS実行部51は、第2の移行処理が終了したか否かを判定し(ステップS47)、終了していなければ(ステップS47でNO)、フローはステップS45に戻る。これにより、第2の移行処理が続行する。
第2の移行処理が終了したときに、OS稼動状態に復帰する(ステップS48)。一方、第2の移行処理を行っているときに何らかの障害が発生した場合(ステップS45でYES)、NMIが発行される(ステップS49)。割り込み検出部52がNMIを検出すると、NMIハンドラ実行部55がNMIハンドラを実行する(ステップS50)。
このNMIハンドラが実行されることにより、RAM4から第2の移行処理の情報が取得される(ステップS51)。そして、取得された第2の移行処理の情報は、POSTコードと共に、外部装置20に出力される(ステップS52)。
外部装置20は、入力した第2の移行処理の情報を記憶素子24に記憶する(ステップS53)。また、表示制御回路35は、入力したPOSTコードを表示素子23に表示する(ステップS54)。以上により、第3の処理が終了する。
第2の移行処理の情報は、上述した起動処理情報と同様に、関数のパラメータと関数の呼び出し先アドレスと関数の呼び出し元アドレスとの情報を含んでもよい。従って、記憶素子24に記憶されている第2の移行処理の情報に基づいて、障害に関する詳細な情報を得ることができる。
例えば、記憶素子24に記憶されている第2の移行処理の情報が、BIOS内で規定されていない処理を含んでいる場合、障害の原因は、BIOSの実行によるものではなく、OSによるものであることを認識することができる。
図12で示した第3の処理の例は、第1の移行処理に適用してもよい。また、図12で示した第3の処理の例は、図7で示した第1の処理に基づいた処理になる。第3の処理は、図8および図9で示した第2の処理に基づいた処理であってもよい。
つまり、コンピュータ1は、外部装置20から出力された外部SMIに基づいて、記憶している第1の移行処理または第2の移行処理の情報を外部装置20に出力する。そして、外部装置20の記憶素子24は第1の移行処理または第2の移行処理の情報を記憶してもよい。
<その他>
コンピュータ1および外部装置20は、第1の処理と第2の処理と第3の処理との何れか1つの処理だけを実現してもよいし、2つ以上の処理を実現してもよいし、全ての処理を実現してもよい。
例えば、コンピュータ1は、NMIをトリガとして起動処理情報を外部装置20に出力し、且つ外部SMIをトリガとして起動処理情報を外部装置20に出力してもよい。また、OSが起動した後に、稼動状態とスリープ状態との間で状態遷移が生じたときには、コンピュータ1は、外部装置20に起動処理情報を出力してもよい。
また、上述した例では、汎用インタフェースとしてUSBを適用した例を説明したが、USB以外の汎用インタフェースを適用してもよい。汎用インタフェースの接続方式も、シリアルであってもよいし、パラレルであってもよい。
開示の実施形態とその利点について詳しく説明したが、当業者は、特許請求の範囲に明確に記載した本発明の範囲から逸脱することなく、様々な変更、追加、省略をすることができるであろう。