(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0014】
[実施の形態1]
以下、図面を参照して本発明の実施の形態について説明する。
【0015】
図1は、実施の形態1に係る処理装置を例示するブロック図である。
【0016】
図1に示すように、実施の形態1に係る処理装置10は、メイン処理部11と監視制御部12と障害検出部13とを備える。メイン処理部11は、外部に提供する情報の処理などの主要な処理を行う。障害検出部13は、メイン処理部11の外部に設けられ、メイン処理部11の障害を検出する。また、障害検出部13は、障害の発生に関係なくメイン処理部11から通知されるメイン処理部11の状態情報を取得する。監視制御部12は、障害検出部13が取得した状態情報から、障害の発生時に対応する状態情報を選択し、外部からアクセス可能な状態で保存する。
【0017】
実施の形態1に係る処理装置10について詳細に説明する。
図2は、実施の形態1に係る処理装置を例示するブロック図である。
【0018】
処理装置10は、表示部115をさらに備える。また、メイン処理部11は、CPU111と記憶部112〜114とを有する。
【0019】
処理装置10は、例えば、ウェブサーバやファイルサーバなどの装置である。CPU111は、CPU(Central Processing Unit)、すなわち中央演算部を有し、処理装置10の主たる機能を実現し、外部に対して出力し提供する情報を処理する。記憶部112は、例えば、ROM(Read-Only Memory)であり、BIOS(Basic Input Output System)などのブートローダが格納される。記憶部113は、例えば、RAM(Randum Access Memory)であり、処理装置10の主記憶部である。記憶部114は、OS(Operating System)やファイルシステム・アプリケーションが格納される。
【0020】
なお、BIOSとは、ファームウェアの一つで、コンピュータ等の処理装置に搭載されたプログラムのうち、ハードウェアとの間で、最も低レベルな入出力を行うためのプログラムである。BIOSは、処理装置の電源投入時に実行される。BIOSの機能には、処理装置のハードウェアの初期化や、記憶部からのブートローダの呼び出しがある。
【0021】
また、ブートとは、処理装置の起動を意味し、電源を投入時のOS(Operating System)等、処理装置の動作環境を立ち上げるまでの処理がこれに該当する。また、ブートローダとは、ブート時に、処理装置の動作環境の立ち上げに必要なプログラムの読み込みを行うプログラムのことである。
【0022】
障害検出部13は、ウォッチドッグタイマ(WDT)制御部131とCPU状態保持部134とアラーム生成部132とアラーム付加情報生成部133とを有する。
【0023】
障害検出部13は、処理装置10の内部であってメイン処理部11の外部に設けられる。障害検出部13のCPU状態保持部134は、メイン処理部11から、例えば、定期的に送信されるメイン処理部11の状態情報を取得する。
【0024】
ここで、メイン処理部11で発生する障害について説明する。メイン処理部11で発生する障害の例としては、デッドロックが挙げられる。このデッドロックを検出する方法としては、ウォッチドッグタイマを使用した方法が挙げられる。ウォッチドッグタイマは、SoC(System-on-a-chip)に含まれるものを使用する場合もあるし、外付けのウォッチドッグタイマを使用する場合もある。SoCが所有する資源や将来的なメンテナンスのし易さから、外付けのウォッチドッグタイマを使用してもよい。
【0025】
この例では、外付けのウォッチドッグタイマを使用する。処理装置10は、障害検出部13のウォッチドッグタイマ制御部131内にウォッチドッグタイマ131aを有し、これを外付けのウォッチドッグタイマとして使用する。ウォッチドッグタイマ制御部131は、ウォッチドッグタイマ131aを使用してメイン処理部11のCPU111のデッドロックを検出する。すなわち、メイン処理部11は、障害検出部13に対してメイン処理部11の障害の発生を検出するための検出用信号(リロード要求)を送信する。障害検出部13のウォッチドッグタイマ制御部131は、例えば、所定期間αの間、CPU111がウォッチドッグタイマ131aに対して行う検出用信号が無い場合、CPU111においてデッドロックなどの障害の発生を検出したと判断する。このようにして障害検出部13は、タイムアウト情報などの障害情報を取得する。なお、検出用信号をリロード要求と呼ぶ。また、検出用信号は所定期間α内に送信される。また、検出用信号は、定期的に行われてもよい。
【0026】
ウォッチドッグタイマ制御部131は、障害が発生したと判断した場合、タイムアウト情報などの障害情報をアラーム付加情報生成部133とアラーム生成部132とに通知する。
【0027】
なお、デッドロックとは、複数のプロセスが互いに相手の占有している資源の解放を待ち、処理が停止してしまう障害のことである。また、ウォッチドッグタイマは、ウォッチドッグタイマ機能を意味する場合もある。
【0028】
CPU状態保持部134は、処理装置10の起動時のBIOSのステータス(POST(Power On Self Test)ステータス)などのCPU111から通知されるCPU111の状態情報を保持する。また、CPU状態保持部134は、CPU111の状態情報を表示部115に表示する。
【0029】
アラーム付加情報生成部133は、ウォッチドッグタイマ制御部131から通知されたタイムアウト情報などの障害情報と、CPU状態保持部134に保持されているCPU111の状態情報とを、BMC122に通知するための形式に加工する。なお、加工された障害情報と状態情報とをアラーム付加情報と呼ぶ。アラーム付加情報生成部133は、アラーム付加情報を、BMC122のアラーム付加情報取得部122bに出力する。
【0030】
アラーム生成部132は、ウォッチドッグタイマ制御部131から通知されたタイムアウト情報などの障害情報をBMC122のアラーム取得部122cに出力する。なお、アラーム生成部132から出力される情報をアラーム情報と呼ぶ。
【0031】
監視制御部12は、BMC122と記憶部121とを有する。BMC122は、CPU111が有するCPUとは別のCPUを有する。記憶部121は、例えば、EEPROM(Electrically Erasable Programmable Read-Only Memory)である。
【0032】
BMC122は、プラットフォームイベント(PlatformEvent)生成部122aとアラーム付加情報取得部122bとアラーム取得部122cとを有する。プラットフォームイベント(PlatformEvent)生成部122aは、アラーム情報とアラーム付加情報とを、後述するイベント情報に加工する。アラーム付加情報取得部122bは、アラーム付加情報生成部133から出力されたアラーム付加情報を取得し、取得した状態情報から、障害の発生時に対応する状態情報を選択して保存する。アラーム取得部122cは、アラーム生成部132から出力された障害情報を取得する。
図2に示す経路L11〜L13を経由して状態情報(ステータス情報)がアラーム付加情報取得部122bに通知され、経路L21〜経路L23を経由してアラーム情報がアラーム取得部122cに通知される。
【0033】
プラットフォームイベント生成部122aが加工したイベント情報は、外部からアクセス可能な状態で記憶部121に記憶される、又は、外部装置20にイベント情報として出力される。なお、監視制御部12から外部装置20へのイベント情報の出力は、例えば、IPMB(Intelligent Platform Management Bus)3を介して出力される。
【0034】
表示部115は、例えば、7segLED(7 segment Lazer Emitting Diode)などで構成され、処理装置10の起動時のBIOSのステータスなどを表示する。また、表示部115は、CPU111の状態情報とCPU111の障害情報とを表示する。
【0035】
実施の形態1においては、CPU111の障害の発生を検出するためのウォッチドッグタイマ131aを、CPU111から独立させた障害検出部13内に設けている。ウォッチドッグタイマによる障害の検出を障害検出部13が自発的に行っている。これにより、CPU111に障害が発生し異常動作している場合においても、CPU111の障害を検出し、その障害情報を障害検出部13経由でBMC122に通知することができる。
【0036】
また、CPU111の状態情報を、CPU111から独立させ障害検出部13のCPU状態保持部134にステータス通知して保持している。そして、CPU111の状態情報をCPU状態保持部134経由でBMC122に通知している。すなわち、CPU111から障害検出部13に対してステータスを通知し、状態情報(ステータス)をBMC122に通知している。これらの動作を、障害検出部13とBMC122とが自発的に行っている。これにより、CPU111に障害が発生し以上動作している場合においても、CPU111の状態情報を障害検出部13経由でBMC122に出力することができる。
【0037】
次に、実施の形態1に係る処理装置の動作について説明する。
図3は、実施の形態1に係る処理装置の動作を例示するシーケンス図である
【0038】
図3に示すように、メイン処理部11のCPU111は、処理装置10の起動時などにBIOSのPOSTステータスの進行具合に応じたPOSTステータスコードであるステータス情報(CPU111の状態情報)を障害検出部13のCPU状態保持部134に通知する(ステップS101)。
【0039】
CPU111は、ステップS101と共にウォッチドッグタイマ制御部131に対してウォッチドッグタイマのリロード要求(検出用信号の送信)を行う(ステップS102)。
【0040】
ステップS101により、障害検出部13は、メイン処理部11から障害の発生に関係なく通知されるメイン処理部11の状態情報を取得する。ステップS101とステップS102とは定期的に行われてもよい。ステップS101の通知を略してステータス通知と呼ぶ。
【0041】
CPU状態保持部134は、ステップS101のステータス通知の内容を表示部115に表示させる。なお、ウォッチドッグタイマ制御部131は、ステップS101のステータス通知の前に、CPU111用のウォッチドッグタイマを予め開始しておく(ステップS103)。
【0042】
ステップS102において、定期的にウォッチドッグタイマのリロード要求が行われていれば、メイン処理部11は正常に動作しているとする。
【0043】
メイン処理部11においてデッドロックが発生した場合(ステップS105)、ウォッチドッグタイマのリロード要求は滞る。リロード要求が滞り、所定期間αの間、リロード要求が無い場合、障害検出部13のウォッチドッグタイマ制御部131は、CPU111に障害が発生したと判断し、ウォッチドッグタイマをタイムアウトする(ステップS106)。ステップS106により、障害検出部13は、メイン処理部11の障害を検出し、このタイムアウトなどの障害情報を取得する。そして、ウォッチドッグタイマ制御部131は、このタイムアウトに関するタイムアウト情報をアラーム付加情報生成部133とアラーム生成部132とに通知する(ステップS107a、ステップS107c)。タイムアウト情報の通知を略してタイムアウト通知と呼ぶ。
【0044】
ステップS107aのタイムアウト通知を受信したアラーム付加情報生成部133は、CPU状態保持部134に、CPU111の現在のステータス情報(CPU111の状態情報)の問い合わせを行い、CPU状態保持部134から現在のステータス情報を取込む(ステップS107b)。また、アラーム付加情報生成部133は、ステータス情報とタイムアウト情報とをBMC122に通知する形式に加工してアラーム付加情報を生成する(ステップS108a)。
【0045】
タイムアウト情報を受信したアラーム生成部132は、ウォッチドッグタイマアラームが発生した旨のウォッチドッグタイマアラームフラグを起立する(ステップS108b)。ウォッチドッグタイマアラームフラグを起立するとは、例えば、ウォッチドッグタイマのアラームビットを設け、アラームビットをオンにすることである。アラームビットのオン又はオフの情報をアラーム情報と呼ぶ。アラーム生成部132は、メイン処理部11のCPU111のタイムアウト情報(障害情報)に基づいてアラーム情報を生成する。
【0046】
監視制御部12のBMC122は、ウォッチドッグタイマアラームフラグを監視する(ステップS104a)と共にアラーム付加情報が生成されているか否かを監視する(ステップS104b)。ステップS104aにおいて、BMC122は、アラーム生成部132に対して、例えば、ポーリングを行うことによりウォッチドッグタイマアラームフラグが起立しているか否かを監視する。また、ステップS104bにおいて、BMC122は、アラーム付加情報生成部133に対して、ポーリングを行うことによりアラーム付加情報が生成されているか否かを監視する。すなわち、監視制御部12は、障害検出部13のアラーム付加情報生成部133に対して障害確認要求を行い、CPU111の状態情報をアラーム付加情報生成部133から取得する。また、監視制御部12は、障害検出部13のアラーム生成部132に対して障害確認要求を行い、障害情報をアラーム生成部132から取得する。ステップS104aとステップS104bとにおける障害確認要求は、定期的に行われる。
【0047】
ウォッチドッグタイマアラームフラグが起立し、ウォッチドッグタイマアラームが発生していることを認識した場合(ステップS109a)、BMC122は、プラットフォームイベント生成部122aにて情報を整形し、記憶部121などにウォッチドッグタイマアラームの情報(SEL(System Event Log))を記憶し登録する(ステップS110a)。
【0048】
また、ウォッチドッグタイマアラームが発生していることを認識した場合(ステップS109a)、BMC122は、外部装置20に対してIPMB3を介してイベント通知を行う(ステップS111a)。
【0049】
アラーム付加情報が生成されていることを認識した場合(ステップS109b)、BMC122は、プラットフォームイベント生成部122aにて情報を整形し、記憶部121などにアラーム付加情報(SEL(System Event Log))を記憶し登録する(ステップS110b)。ステップS110bにおいて、BMC122は、アラーム付加情報生成部133から取得したCPU111の状態情報から、障害の発生時に対応する状態情報を選択し、これを外部からアクセス可能な状態で記憶部121に保存する。
【0050】
また、アラーム付加情報が生成されていることを認識した場合(ステップS109b)、BMC122は、外部装置20に対してIPMB3を介してイベント通知を行う(ステップS111b)。すなわち、BMC122は、状態情報と障害情報とを関連付けて外部に出力する。
【0051】
次に、プラットフォームイベント生成部122aが生成するイベント情報について説明する。
図4は、プラットフォームイベント生成部が生成するイベント情報を例示する図である。
図4は、障害検出部13のアラーム付加情報生成部133と、BMC122のアラーム付加情報取得部122bと、の間でやり取りする情報を示す。
【0052】
図4に示す情報D401(アラーム付加情報)は、アラーム付加情報生成部133とアラーム付加情報取得部122bとがやり取りする情報である。情報D401は、アラーム付加情報生成部133が生成し、アラーム付加情報取得部122bに対して出力するアラーム付加情報である。情報D401は、ステータス発行元とステータスコードとステータスコード(拡張)とを含む。ステータス発行元とステータスコード(拡張)は将来の拡張用である。ステータスコードは、メイン処理部11におけるデッドロック発生時(障害発生時)のCPU111のステータス情報(状態情報)を示す。
【0053】
図4に示す情報D402は、BMC122のプラットフォームイベント(PlatformEvent)生成部122aが生成するイベント情報である。プラットフォームイベント生成部122aは、アラーム付加情報取得部122bがアラーム付加情報生成部133から取得した情報D401(アラーム付加情報)を、一般的にIPMI(Intelligent Platform Management Interface)で定義されているPlatformEventの形式に加工する。プラットフォームイベント生成部122aが生成したイベント情報は、記憶部121や外部装置20に格納される。
【0054】
このようにして、メイン処理部11のCPU111のデッドロック(障害情報)だけでなく、メイン処理部11のステータス情報(状態情報)も、イベント情報として外部装置20などに伝えることができる。
【0055】
実施の形態1に係る処理装置の特徴は、CPU111の異常を外付けのウォッチドッグタイマ131aにより検出し、例えば、ウォッチドッグタイマアラームなどの障害発生時のCPU111の状態情報をイベント情報情報として外部装置20などに通知する点である。
【0056】
実施の形態1の効果について説明する。
実施の形態1においては、メイン処理部11のCPU111から障害検出部13に対して随時ステータス情報を通知し、ウォッチドックタイマアラームの検出を自発的に行い、BMC122への報告を自発的に行っている。そして、CPU111が有するウォッチドックタイマを使用せずに、外部のウォッチドックタイマを使用してCPU111の障害を検出している。これにより、CPU111に障害が発生している場合でも、CPU111の障害を検出してCPU111の障害状況をBMC122に通知することができる。
【0057】
また、実施の形態1においては、CPU111が有するSMI(System Management Interrupt)機能を使用せずに、CPU111の外部に存在する障害検出部13から、CPU111のステータス情報とウォッチドックタイマアラーム情報とを監視制御部12に通知している。これにより、CPU111に障害が発生している場合でも、CPU111のステータスをBMC122に通知することができる。
【0058】
また、実施の形態1に係る処理装置10は、メイン処理部11がデッドロックした際に、その原因解析に必要となるCPU111のステータス情報とアラーム情報とを外部装置20などに伝えることができる。これにより、処理装置10の障害の解析を容易に行うことができる。その結果、メイン処理部に障害が発生した場合、メイン処理部の障害の解析を容易に行うことが可能な処理装置、方法及びプログラムを提供することができる。
【0059】
なお、この実施例においては、BIOSのステータスコードを例にして説明したが、OS(Operating System)やアプリケーションのプロセス番号に当てはめて応用してもよい。
【0060】
また、この実施例においては、外付けのウォッチドッグタイマを例にして説明したが、この外付けのウォッチドッグタイマを、監視制御のSoC(System-on-a-Chip)に含めて1チップの構成で実現してもよい。
【0061】
[実施の形態1の比較例1]
図5は、実施の形態1の比較例1に係る処理装置を例示するブロック図である。
【0062】
図5に示すように、比較例1に係る処理装置10aは、メイン処理部11aと監視制御部12aと障害検出部13aとを有する。
【0063】
メイン処理部11aは、例えば、7セグメントLED(Lazer Emitting Diode)などの簡素な表示部115を有し、処理装置10aの起動時のBIOSステータス(POST(Power On Self Test)ステータス)を表示部115に表示させる。
【0064】
監視制御部12aは、実施の形態1の監視制御部12と比べてアラーム付加情報取得部122bが設けられていない。
【0065】
障害検出部13aは、実施の形態1の障害検出部13と比べてCPU状態保持部134とアラーム付加情報生成部133が設けられていない。
【0066】
図6は、実施の形態1の比較例1に係る処理装置の動作を例示するシーケンス図である。
【0067】
図6に示すように、メイン処理部11aのCPU111は、処理装置10aの起動時などにBIOSのPOSTステータスの進行具合に応じたPOSTステータスコードを表示部115に伝える(ステップS101)と共にウォッチドッグタイマ制御部131に対して、定期的にウォッチドッグタイマのリロード要求を行う(ステップS102)。
【0068】
メイン処理部11aにデッドロックが発生し(ステップS105)、ウォッチドッグタイマのリロード指示が滞ると、ウォッチドッグタイマ制御部131はタイムアウトし(ステップS106)、その旨をアラーム生成部132に伝える(ステップS107)。
【0069】
アラーム生成部132は、ウォッチドッグタイマアラームが発生した旨のフラグを起立する(ステップS108)。
【0070】
一方、監視制御部12aのBMC122は、ウォッチドッグタイマアラームフラグを定期的に監視し(ステップS104)、アラームを認識すると(ステップS109)、記憶部121などにアラーム情報(SEL(System Event Log))を記憶し登録し(ステップS110)、外部装置20にIPMB3を通してイベント通知を行う(ステップS111)。
【0071】
しかしながら、実施の形態1の比較例1においては、メイン処理部11aにおいてデッドロックが発生した際、故障が発生したというアラーム情報しか認識することができない。CPU111の状態情報を認識することができない。従って、処理装置10の障害の解析をすることは難しい。
【0072】
[実施の形態1の比較例2]
実施の形態1の比較例2においては、実施の形態1と比較して、CPU111が有するウォッチドッグタイマ機能を使用してCPU111の障害を検出する点が異なる。本比較例2においては、ウォッチドッグタイマ機能に障害が発生しCPU111が異常動作している場合、CPU111の障害を検出することが難しい。
【0073】
[実施の形態1の比較例3]
実施の形態1の比較例3においては、実施の形態1と比較して、CPU111が有するSMI(System Management Interrupt)機能を使用してCPUの障害発生の通知を行う点が異なる。本比較例3においては、SMI機能に障害が発生しCPU111が異常動作している場合、CPU111の障害を通知することが難しい。
【0074】
[実施の形態2]
次に、実施の形態2について説明する。
図7は、実施の形態2に係る処理装置を例示するブロック図である。
【0075】
図7に示すように、実施の形態2は、前述の実施の形態1と比べて、障害検出部13に付加情報制御部135を有する点が異なる。付加情報制御部135は、デッドロックが発生後にステータスコードを複数回取得し、取得したステータスコードを一定時間毎に何回、アラーム付加情報取得部122bに対して出力するかを制御する。なお、一定時間の時間間隔及び一定時間毎に出力するステータスコードの回数は、付加情報制御部135により所望の値が設定される。
【0076】
実施の形態2においては、付加情報制御部135が一定時間の時間間隔と一定時間毎に出力するステータスコードの回数とを設定する。これにより、ウォッチドッグタイマのリロード間隔の長さにより、CPU111において、例えば、ソフトウェアの暴走などの障害が発生しているのか否か、又はソフトウェアはある程度適正に動いているのか否かの判断を行うことができる。
【0077】
例えば、監視制御部12は、障害の発生前の最後の検出用信号から障害の発生後の最初の検出用信号までの時間に基づいてメイン処理部11の障害の度合いを判断することができる。
【0078】
また、監視制御部12は、障害の発生後の最初の検出用信号から2番目の検出用信号までの時間に基づいてメイン処理部11の障害の度合いを判断してもよい。
【0079】
また、監視制御部12は、障害の発生前の最後の検出用信号とさらに1つ前の検出用信号との間の時間に基づいてメイン処理部11の障害の度合いを判断してもよい。
【0080】
[実施の形態3]
次に、実施の形態3について説明する。
図8は、実施の形態3に係る処理装置を例示するブロック図である。
図9は、実施の形態3に係る処理装置の一部を例示するブロック図である。
【0081】
図8に示すように、実施の形態3に係る障害検出部13は、前述の実施の形態1と比べて、異常検出部136と記憶部137とをさらに有する点が異なる。異常検出部136は、ウォッチドッグタイマ制御部131と同様な機能、仕組みであって、CPU111とは別の部位の障害を検出するための機能を有する。異常検出部136は、複数の部位の障害をそれぞれ検出するために、検出機能Fa、検出機能Fb、検出機能Fcなどの複数の検出機能を有する。
【0082】
障害検出部13が、例えば、FPGA(Field-Programmable Gate Array)で構成されている場合、FPGAをコンフィグするためのコンフィグ用ファイルは、フラッシュROM(Read Only Memory)などにより構成された記憶部137に格納される。
【0083】
FPGAをコンフィグする場合、コンフィグ用ファイルが格納された記憶部137にアクセスする。このとき、異常検出部136は、記憶部137へのアクセス異常などを検出し、これをアラーム付加情報としてBMC122に通知する。アラーム付加情報としては、例えば、
図4に示す情報D401であるステータス発行元、ステータスコード及びステータスコード(拡張)を使用して情報の判別をする。このようにして、異常検出部136は、障害を検出する。
【0084】
また、異常検出部136は、記憶部137へのアクセス異常の他にも、別の部位の異常を、検出機能Fa、検出機能Fb及検出機能びFcなどを使用して行う。
【0085】
異常検出部136及びウォッチドッグタイマ制御部131が、複数の部位の異常を同時に検出し、それらの異常が発生した旨をアラーム付加情報生成部133に通知する場合、通知する情報間で競合が起こり、通知する情報が消失する可能性がある。このような情報の消失を避けるため、例えば、
図9に示すように、障害検出部13内にFIFO(First In First Out)を設ける。
【0086】
次に、実施の形態3に係るアラーム付加情報生成部133の動作について説明する。
【0087】
図9に示すように、アラーム付加情報生成部133は、ウォッチドッグタイマ制御部131及び異常検出部136からアラームの書き込み要求があると、FIFOに次々と情報を書き込む。
【0088】
アラーム付加情報生成部133は、FIFOに情報が書き込まれている場合、アラーム付加情報の有無を示すレジスタR401を確認する。レジスタR401のフラグが立っている場合、FIFOに情報が書き込まれている状態を示す。また、レジスタR401のフラグが立っていない場合、FIFOに情報が書き込まれていない状態を示す。
【0089】
アラーム付加情報生成部133は、レジスタR401のフラグが立っている場合、何もしない。また、アラーム付加情報生成部133は、レジスタR401のフラグが立っていない場合、FIFOから情報を取り出し、レジスタR402に取り出した情報を反映すると共にレジスタR401のフラグを立てる。
【0090】
一方、BMC122は、レジスタR401を監視し、レジスタR401のフラグが立っていない場合、何もしない。また、BMC122は、レジスタR401のフラグが立っている場合、レジスタR402の内容を読み出すと共にレジスタR401のフラグを落とす。
【0091】
なお、レジスタR402は、ステータス発行元、ステータスコード及びステータスコード(拡張)を示すレジスタである。
【0092】
また、上記の実施の形態では、本発明を主にハードウェアの構成として説明したが、本発明はこれに限定されるものではない。本発明は、各構成要素の処理を、CPU(Central Processing Unit)にコンピュータプログラムを実行させることにより実現することも可能である。
【0093】
上記の例において、プログラムは、様々なタイプの非一時的なコンピュータ可読媒体(non-transitory computer readable medium)を用いて格納され、コンピュータに供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実態のある記録媒体(trangible storage medium)を含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体(例えばフレキシブルディスク、磁気テープ、ハードディスクドライブ)、光磁気記録媒体(例えば光磁気ディスク)、CD−ROM(Read Only Memory)、CD−R、CD−R/W、半導体メモリ(例えば、マスクROM、PROM(Programable ROM)、EPROM(Erasable PROM))、フラッシュROM、RAM(Random Access Memory)を含む。また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体(transitory computer readable medium)によってコンピュータに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の有線通信路、又は無線通信路を介して、プログラムをコンピュータに供給できる。
【0094】
なお、本発明は上記実施の形態に限られたものではなく、趣旨を逸脱しない範囲で適宜変更することが可能である。