(57)【要約】【課題】起動過程の情報を保持しながら、起動失敗の原因を排除した再起動をおこなう。【解決手段】情報処理装置１は、プログラムの起動を、実行単位となるタスクで管理し、処理ブロック単位でシーケンスごとにタスクを実行する。情報処理装置１は、実行状態管理テーブル３を保持する不揮発性メモリ２を備える。処理ブロックの実行状態は、実行状態管理テーブル３に記録される。制御部９は、情報処理装置１の起動時に、実行状態管理テーブル３の初期化をおこない、実行状態管理テーブル３の実行状態を更新しながらタスクを実行する第１起動処理４を実行する。制御部９は、第１起動処理４による起動に失敗したときに、第２起動処理５による起動をおこない、被疑シーケンス７を特定する。制御部９は、第２起動処理５による起動に失敗したときに、第３起動処理６による起動をおこない、被疑タスク８を特定する。【選択図】図１
2014041407.tif 000002
【特許請求の範囲】
【請求項１】
タスクごとにシーケンスで分割された処理ブロックの実行状態を記録可能な実行状態管理テーブルを保持する不揮発性メモリと、
前記実行状態管理テーブルを初期化し、前記処理ブロックごとの実行状態を、前記実行状態管理テーブルに記録しながら、前記シーケンスごとに前記タスクを実行し、情報処理装置を起動する第１起動処理と、
前記第１起動処理による前記情報処理装置の起動に失敗した後に、前記実行状態管理テーブルにもとづいて前記情報処理装置の起動に失敗した被疑シーケンスを特定し、前記処理ブロックごとの実行状態を、前記実行状態管理テーブルに記録しながら、前記被疑シーケンスでは、前記タスクごとに前記処理ブロックを実行し、前記情報処理装置を起動する第２起動処理と、
前記第２起動処理による前記情報処理装置の起動に失敗した後に、前記実行状態管理テーブルにもとづいて前記情報処理装置の起動に失敗した被疑タスクを特定し、前記処理ブロックごとの実行状態を前記実行状態管理テーブルに記録し、前記被疑シーケンス以降の前記被疑タスクの実行をパスし、前記情報処理装置を起動する第３起動処理と、をおこなう制御部と、
を備えることを特徴とする情報処理装置。
【請求項２】
前記制御部は、前記第２起動処理による前記情報処理装置の起動時に、
前記被疑シーケンスで前記処理ブロックを実行中の前記タスクを被疑タスク候補として、前記被疑タスクの実行状態と、前記被疑タスク候補の実行状態とを区別可能にして前記実行状態管理テーブルに記録する、
ことを特徴とする請求項１記載の情報処理装置。
【請求項３】
前記制御部は、前記被疑タスクにおける、前記第２起動処理による前記情報処理装置の起動を失敗した前記被疑シーケンス以降の処理ブロックを実行対象外とする、
ことを特徴とする請求項２記載の情報処理装置。
【請求項４】
前記制御部は、前記第３起動処理による前記情報処理装置の起動に失敗した場合、再度、前記第３起動処理をおこなう、
ことを特徴とする請求項３記載の情報処理装置。
【請求項５】
前記制御部は、あらかじめ設定する、前記タスクごとの処理ブロックの実行手順にもとづいて前記実行状態管理テーブルを初期化する、
ことを特徴とする請求項１乃至４のいずれか１項記載の情報処理装置。
【請求項６】
前記第１起動処理による前記情報処理装置の起動は、電源投入検出にもとづく前記情報処理装置の起動であり、前記第２起動処理による前記情報処理装置の起動および前記第３起動処理による前記情報処理装置の起動は、マシンリカバリにもとづく前記情報処理装置の起動である、
ことを特徴とする請求項１乃至４のいずれか１項記載の情報処理装置。
【請求項７】
前記第１起動処理、前記第２起動処理および前記第３起動処理による前記情報処理装置の起動は、マシンリカバリにもとづく前記情報処理装置の起動である、
ことを特徴とする請求項１乃至４のいずれか１項記載の情報処理装置。
【請求項８】
前記制御部は、マシンリカバリにもとづく前記情報処理装置の起動で、前記処理ブロックの一部をスキップする、
ことを特徴とする請求項１乃至４のいずれか１項記載の情報処理装置。
【請求項９】
前記制御部は、
前記第１起動処理および前記第２起動処理において、前記処理ブロックごとの実行状態を、実行前、実行中、および実行完了を区別可能にして前記実行状態管理テーブルに記録し、
前記第３起動処理において、前記処理ブロックごとの実行状態を、前記情報処理装置の起動に失敗した被疑処理ブロックを特定可能にして前記実行状態管理テーブルに記録する、
ことを特徴とする請求項１乃至４のいずれか１項記載の情報処理装置。
【請求項１０】
情報処理装置を起動する起動プログラムであって、
コンピュータに、
前記情報処理装置を起動する第１起動時に、不揮発性メモリにあって、タスクごとにシーケンスで分割された処理ブロックの実行状態を記録可能な実行状態管理テーブルを初期化し、
前記処理ブロックごとの実行状態を前記実行状態管理テーブルに記録しながら、前記シーケンスごとに前記タスクを実行し、
前記第１起動に失敗した後に前記情報処理装置を起動する第２起動時に、前記実行状態管理テーブルにもとづいて前記第１起動を失敗した被疑シーケンスを特定し、
前記処理ブロックごとの実行状態を前記実行状態管理テーブルに記録しながら、前記被疑シーケンスでは、前記タスクごとに前記処理ブロックを実行し、
前記第２起動に失敗した後に前記情報処理装置を起動する第３起動時に、前記実行状態管理テーブルにもとづいて前記第２起動を失敗した被疑タスクを特定し、前記処理ブロックごとの実行状態を前記実行状態管理テーブルに記録し、前記被疑シーケンス以降の前記被疑タスクの実行をパスする、
処理を実行させる、
ことを特徴とする起動プログラム。
【請求項１１】
情報処理装置を起動する起動方法であって、
コンピュータが、
前記情報処理装置を起動する第１起動時に、不揮発性メモリにあって、タスクごとにシーケンスで分割された処理ブロックの実行状態を記録可能な実行状態管理テーブルを初期化し、
前記処理ブロックごとの実行状態を前記実行状態管理テーブルに記録しながら、前記シーケンスごとに前記タスクを実行し、
前記第１起動に失敗した後に前記情報処理装置を起動する第２起動時に、前記実行状態管理テーブルにもとづいて前記第１起動を失敗した被疑シーケンスを特定し、
前記処理ブロックごとの実行状態を前記実行状態管理テーブルに記録しながら、前記被疑シーケンスでは、前記タスクごとに前記処理ブロックを実行し、
前記第２起動に失敗した後に前記情報処理装置を起動する第３起動時に、前記実行状態管理テーブルにもとづいて前記第２起動を失敗した被疑タスクを特定し、前記処理ブロックごとの実行状態を前記実行状態管理テーブルに記録し、前記被疑シーケンス以降の前記被疑タスクの実行をパスする、
ことを特徴とする起動方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、起動プログラム、および起動方法に関する。
【背景技術】
【０００２】
情報処理装置は、電源投入から所定のプログラムを起動する起動処理をおこなう。情報処理装置は、起動処理で正常に起動しない異常を検出した場合、リカバリ処理で再起動をおこない自動復旧を試みることがおこなわれる。
【０００３】
こうした起動処理の失敗原因を解析するために、初期化処理過程の状態表示や、ログの記録をおこなう情報処理装置がある。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平５−１０８３９４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、同一箇所で固定的にプログラム異常が発生する状態（０番地アクセスなど）の場合、情報処理装置は、リカバリ処理を繰り返し実行することとなり起動することができない。
【０００６】
そのため、情報処理装置は、起動過程で起動失敗の原因を処置しないと、起動過程の情報を確認することができない。このような情報処理装置は、再起動により起動過程の情報を喪失し、起動失敗の原因追究を困難にしている。
【０００７】
１つの側面では、本発明は、起動過程の情報を保持しながら、起動失敗の原因を排除した再起動が可能な情報処理装置、起動プログラム、および起動方法を提供することを目的とする。
【課題を解決するための手段】
【０００８】
上記目的を達成するために、以下に示すような、情報処理装置が提供される。情報処理装置は、不揮発性メモリと、制御部と、を備える。不揮発性メモリは、タスクごとにシーケンスで分割された処理ブロックの実行状態を記録可能な実行状態管理テーブルを保持する。制御部は、第１起動処理と、第２起動処理と、第３起動処理とをおこなう。第１起動処理は、実行状態管理テーブルを初期化し、処理ブロックごとの実行状態を、実行状態管理テーブルに記録しながら、シーケンスごとにタスクを実行し、情報処理装置を起動する。第２起動処理は、第１起動処理による情報処理装置の起動に失敗した後に、実行状態管理テーブルにもとづいて情報処理装置の起動に失敗した被疑シーケンスを特定し、処理ブロックごとの実行状態を、実行状態管理テーブルに記録しながら、被疑シーケンスでは、タスクごとに処理ブロックを実行し、情報処理装置を起動する。第３起動処理は、第２起動処理による情報処理装置の起動に失敗した後に、実行状態管理テーブルにもとづいて情報処理装置の起動に失敗した被疑タスクを特定し、処理ブロックごとの実行状態を、実行状態管理テーブルに記録し、被疑シーケンス以降の被疑タスクの実行をパスし、情報処理装置を起動する。
【０００９】
また、上記目的を達成するために、情報処理装置を起動する起動プログラム、および起動方法が提供される。起動プログラム、および起動方法は、以下に示すような処理をコンピュータに実行させる。コンピュータは、情報処理装置を起動する第１起動時に、不揮発性メモリにあって、タスクごとにシーケンスで分割された処理ブロックの実行状態を記録可能な実行状態管理テーブルを初期化し、処理ブロックごとの実行状態を、実行状態管理テーブルに記録しながら、シーケンスごとにタスクを実行し、第１起動に失敗した後に情報処理装置を起動する第２起動時に、実行状態管理テーブルにもとづいて第１起動を失敗した被疑シーケンスを特定し、処理ブロックごとの実行状態を、実行状態管理テーブルに記録しながら、被疑シーケンスでは、タスクごとに処理ブロックを実行し、第２起動に失敗した後に情報処理装置を起動する第３起動時に、実行状態管理テーブルにもとづいて第２起動を失敗した被疑タスクを特定し、処理ブロックごとの実行状態を、実行状態管理テーブルに記録し、被疑シーケンス以降の被疑タスクの実行をパスする。
【発明の効果】
【００１０】
１態様によれば、情報処理装置、起動プログラム、および起動方法において、起動過程の情報を保持しながら、起動失敗の原因を排除した再起動ができる。
【図面の簡単な説明】
【００１１】
【図１】第１の実施形態の情報処理装置の構成例を示す図である。
【図２】第２の実施形態のストレージ装置のハードウェア構成例を示す図である。
【図３】第２の実施形態の本体制御部のハードウェア構成例を示す図である。
【図４】第２の実施形態の起動処理のフローチャートである。
【図５】第２の実施形態のマシンダウンリカバリ管理テーブルの一例である。
【図６】第２の実施形態の電源投入時起動処理のフローチャートである。
【図７】第２の実施形態の装置起動シーケンステーブルの一例である。
【図８】第２の実施形態の初期化時のシーケンス管理テーブルの一例である。
【図９】第２の実施形態の電源投入起動時のシーケンス管理テーブルの一例である。
【図１０】第２の実施形態の電源投入起動時のシーケンス管理テーブルの一例である。
【図１１】第２の実施形態の電源投入起動時のシーケンス管理テーブルの一例である。
【図１２】第２の実施形態の電源投入起動時のシーケンス管理テーブルの一例である。
【図１３】第２の実施形態のマシンダウンリカバリ起動処理のフローチャートである。
【図１４】第２の実施形態のマシンダウンリカバリ起動処理のフローチャートである。
【図１５】第２の実施形態の被疑シーケンス実行処理のフローチャートである。
【図１６】第２の実施形態のマシンダウン発生時のシーケンス管理テーブルの一例である。
【図１７】第２の実施形態のマシンダウン発生時のシーケンス管理テーブルの一例である。
【図１８】第２の実施形態のマシンダウン発生時のシーケンス管理テーブルの一例である。
【図１９】第２の実施形態のマシンダウン発生時のシーケンス管理テーブルの一例である。
【図２０】第２の実施形態のマシンダウン発生時のシーケンス管理テーブルの一例である。
【図２１】第２の実施形態のマシンダウン発生時のシーケンス管理テーブルの一例である。
【図２２】第２の実施形態のマシンダウン発生時のシーケンス管理テーブルの一例である。
【図２３】第２の実施形態のマシンダウン発生時のシーケンス管理テーブルの一例である。
【図２４】第２の実施形態のマシンダウン発生時のシーケンス管理テーブルの一例である。
【図２５】第２の実施形態のマシンダウン発生時のシーケンス管理テーブルの一例である。
【図２６】第３の実施形態のマシンダウンリカバリ管理テーブルの一例である。
【発明を実施するための形態】
【００１２】
以下、実施の形態を図面を参照して詳細に説明する。
［第１の実施形態］
まず、第１の実施形態の情報処理装置について図１を用いて説明する。図１は、第１の実施形態の情報処理装置の構成例を示す図である。
情報処理装置は、不揮発性メモリと、制御部と、を備える。不揮発性メモリは、タスクごとにシーケンスで分割された処理ブロックの実行状態を記録可能な実行状態管理テーブルを保持する。制御部は、第１起動処理と、第２起動処理と、第３起動処理とをおこなう。第１起動処理は、実行状態管理テーブルを初期化し、処理ブロックごとの実行状態を、実行状態管理テーブルに記録しながら、シーケンスごとにタスクを実行し、情報処理装置を起動する。第２起動処理は、第１起動処理による情報処理装置の起動に失敗した後に、実行状態管理テーブルにもとづいて情報処理装置の起動に失敗した被疑シーケンスを特定し、処理ブロックごとの実行状態を、実行状態管理テーブルに記録しながら、被疑シーケンスでは、タスクごとに処理ブロックを実行し、情報処理装置を起動する。第３起動処理は、第２起動処理による情報処理装置の起動に失敗した後に、実行状態管理テーブルにもとづいて情報処理装置の起動に失敗した被疑タスクを特定し、処理ブロックごとの実行状態を、実行状態管理テーブルに記録し、被疑シーケンス以降の被疑タスクの実行をパスし、情報処理装置を起動する。
【００１３】
情報処理装置１は、起動プログラムにしたがい、所定の起動契機（たとえば、電源投入）から所定のプログラム（サービスプログラム）を起動する起動処理をおこなう。情報処理装置１は、プログラムの起動を、実行単位となるタスクで管理する。タスクは、１以上の処理ブロック単位で、シーケンスごとに実行される。
【００１４】
情報処理装置１は、不揮発性メモリ２と、制御部９と、を備える。不揮発性メモリ２は、タスクごとにシーケンスで分割された処理ブロックの実行状態を記録可能な実行状態管理テーブル３を保持する。不揮発性メモリ２は、情報処理装置１の電源遮断時においても情報を保持可能なメモリであり、たとえば、ＥＥＰＲＯＭ（Electrically Erasable Programmable Read-Only Memory）やフラッシュメモリ、ＨＤＤ（Hard Disk Drive）などである。
【００１５】
制御部９は、第１起動処理４と、第２起動処理５と、第３起動処理６とを実行する。第１起動処理４は、情報処理装置１の起動時に、実行状態管理テーブル３の初期化をおこなう処理である。制御部９は、第１起動処理４において、実行状態管理テーブル３に記録されている各処理ブロックの実行状態を未だ実行されていない状態（実行前の状態）とする。
【００１６】
制御部９は、第１起動処理４において、シーケンスごとにタスクを実行する。たとえば、タスクａ，ｂ，ｃがあるとき、制御部９は、シーケンス（１）でタスクａ，ｂ，ｃの処理ブロックを同時に実行する。制御部９は、タスクａ，ｂ，ｃの処理ブロックの実行開始時に、各処理ブロックの実行状態を実行中とする。制御部９は、各処理ブロックの実行が終了するごとに、各処理ブロックの実行状態を実行完了とする。制御部９は、シーケンス（１）のすべての処理ブロック（タスクａ，ｂ，ｃの処理ブロック）の実行が終了すると、次のシーケンス（２）の処理ブロックの実行をおこなう。このようにして、制御部９は、処理ブロックごとの実行状態を、実行前、実行中、および実行完了を区別可能にして実行状態管理テーブル３に記録しながら、シーケンスごとにタスクを実行する第１起動処理４を実行する。
【００１７】
制御部９は、第２起動処理５において、第１起動処理４で情報処理装置１の起動に失敗したときに、情報処理装置１の起動をおこなう。制御部９は、第２起動処理５において、実行状態管理テーブル３の初期化を伴わない起動、すなわち、実行状態管理テーブル３の記録状態を保持して起動をおこなう。
【００１８】
制御部９は、第２起動処理５において、実行状態管理テーブル３にもとづいて情報処理装置１の起動に失敗した被疑シーケンス７を特定する。第１起動処理４による起動に失敗した情報処理装置１は、起動失敗時のシーケンスでいくつかの処理ブロックが実行中である。これら処理ブロックの実行状態は、実行状態管理テーブル３に記録されていることから、制御部９は、第２起動処理５において、これら処理ブロックを実行するシーケンスを被疑シーケンス７として特定することができる。
【００１９】
第２起動処理５において制御部９は、被疑シーケンス７に至る前までのシーケンスでは、第１起動処理４と同様にシーケンスごとにタスクを実行する。第２起動処理５において制御部９は、被疑シーケンス７では、タスクごとに処理ブロックを実行する。たとえば、タスクａ，ｂ，ｃがあるとき、制御部９は、シーケンス（３）（被疑シーケンス７）でタスクａ，ｂ，ｃの処理ブロックを１つずつ順次に実行する。制御部９は、タスクａの処理ブロックの実行開始時に、タスクａの処理ブロックの実行状態を実行中とし、タスクａの実行が終了するとタスクａの処理ブロックの実行状態を実行完了とする。制御部９は、以降、同様にして、タスクｂ，ｃの処理ブロックを１つずつ順次に実行する。このようにして、制御部９は、処理ブロックごとの実行状態を、実行前、実行中、および実行完了を区別可能にして実行状態管理テーブル３に記録しながら、被疑シーケンス７では、タスクごとに処理ブロックを実行する第２起動処理５を実行する。
【００２０】
制御部９は、第３起動処理６において、第２起動処理５での情報処理装置１の起動に失敗したときに、情報処理装置１の起動をおこなう。制御部９は、第３起動処理６において、実行状態管理テーブル３の初期化を伴わない起動、すなわち、実行状態管理テーブル３の記録状態を保持して起動をおこなう。
【００２１】
第３起動処理６において制御部９は、実行状態管理テーブル３にもとづいて情報処理装置１の起動に失敗した被疑タスク８を特定する。第２起動処理５での起動に失敗した情報処理装置１は、起動失敗時のシーケンスで１つの処理ブロックが実行中である。この処理ブロックの実行状態は、実行状態管理テーブル３に記録されていることから、第３起動処理６において制御部９は、この処理ブロックを実行するタスクを被疑タスク８として特定することができる。
【００２２】
第３起動処理６において制御部９は、被疑シーケンス７以降の被疑タスク８の処理ブロックについて、実行状態管理テーブル３の実行状態を実行をパスする状態（実行不能の状態）とする。被疑シーケンス７以降の被疑タスク８の処理ブロックに、情報処理装置１の起動に失敗した原因があれば、第３起動処理６において制御部９は、被疑シーケンス７以降の被疑タスク８の処理ブロックの実行をパスすることにより情報処理装置１を起動することができる。
【００２３】
このように、情報処理装置１は、不揮発性メモリ２に起動過程の情報を保持しながら、起動失敗の原因を排除して再起動をおこなうことができる。これにより、情報処理装置１は、起動に失敗した原因の特定を容易にすることができる。
【００２４】
なお、情報処理装置１は、第１起動処理４を電源投入時の起動処理とし、第２起動処理５を１回目のマシンリカバリ時の起動処理とし、第３起動処理６を２回目のマシンリカバリ時の起動処理とすることができる。また、情報処理装置１は、第１起動処理４を１回目のマシンリカバリ時の起動処理とし、第２起動処理５を２回目のマシンリカバリ時の起動処理とし、第３起動処理６を３回目のマシンリカバリ時の起動処理とすることもできる。
【００２５】
［第２の実施形態］
次に、第２の実施形態のストレージ装置について図２を用いて説明する。図２は、第２の実施形態のストレージ装置のハードウェア構成例を示す図である。
【００２６】
ストレージ装置２０は、データを格納可能なストレージデバイスであり、情報処理装置の１つである。ストレージ装置２０は、ホスト１１の要求に応じてデータのリード／ライトをおこなう。
【００２７】
ストレージ装置２０は、チャネルアダプタ２１，２５と、ディスクデバイス２２と、メインコントローラ２６，３３と、メインコントローラ監視制御部３２を備える。ストレージ装置２０は、チャネルアダプタ２１，２５を介してホストと接続する。チャネルアダプタ２１は、メインコントローラ２６とホスト１１との接続制御をおこなう。チャネルアダプタ２５は、メインコントローラ３３とホスト１１との接続制御をおこなう。
【００２８】
メインコントローラ２６，３３は、ストレージ制御のメイン制御モジュールであり、ストレージ装置２０は、メインコントローラ２６とメインコントローラ３３によりストレージ制御を冗長化（二重化）している。メインコントローラ監視制御部３２は、メインコントローラ２６，３３の状態監視をおこない、異常を検出したメインコントローラの切り離しをおこなう。
【００２９】
メインコントローラ２６は、本体制御部２７と、ハード制御部３１を備える。本体制御部２７は、Ｉ／Ｏ制御部２８と、システム制御部２９と、装置起動制御部３０を備え、メインコントローラ２６の動作制御を担う。ハード制御部３１は、図示しないＲＡＭ（Random Access Memory）の電源保持や、本体制御部２７のリセット制御を担う。
【００３０】
Ｉ／Ｏ制御部２８は、ホスト１１の要求に応じてディスクデバイス２２とのＩ／Ｏ制御をおこなう。システム制御部２９は、ストレージ装置２０のシステム制御をおこなう。
装置起動制御部３０は、ストレージ装置２０の電源投入時やマシンダウンリカバリ時の起動制御をおこなう。装置起動制御部３０は、メインコントローラ２６，３３の間で起動処理を同期させるため、ストレージ装置２０を起動するためのプロセスを複数の処理ブロックに分けてシーケンス化したうえで、電源投入時およびマシンダウンリカバリ時の起動処理を実行している。
【００３１】
また、装置起動制御部３０は、本体制御部２７のＩ／Ｏ制御部２８やシステム制御部２９、チャネルアダプタ２１，２５、やディスクデバイス２２の制御などをタスク化して、タスクごとに起動処理を管理している。ストレージ装置２０の起動プロセスは、シーケンス単位に進行が管理される。装置起動制御部３０は、１シーケンスで複数のタスク処理を並行して実行する。
【００３２】
Ｉ／Ｏ制御部２８、システム制御部２９、および装置起動制御部３０を含む本体制御部２７は、カーネル層（制御ファーム向けＯＳ（Operating System））上で動作する。
ディスクデバイス２２は、ディスク制御部２３と、１以上のディスク２４を備え、ディスク２４のＩ／Ｏ制御をおこなう。ディスク制御部２３は、ディスク２４のインタフェース制御をおこなう。ディスク２４は、たとえば、ＨＤＤであり、複数台でＲＡＩＤ（Redundant Array of Inexpensive Disks）を構成する。
【００３３】
なお、メインコントローラ３３もメインコントローラ２６と同様の構成であるため、メインコントローラ２６の説明に代えて図示を省略するとともに説明を省略する。
次に、第２の実施形態の本体制御部２７のハードウェア構成について図３を用いて説明する。図３は、第２の実施形態の本体制御部のハードウェア構成例を示す図である。
【００３４】
本体制御部２７は、プロセッサ１０１によって装置全体が制御されている。プロセッサ１０１には、バス１０６を介してＲＡＭ１０２と複数の周辺機器が接続されている。プロセッサ１０１は、マルチプロセッサであってもよい。プロセッサ１０１は、たとえばＣＰＵ（Central Processing Unit）、ＭＰＵ（Micro Processing Unit）、ＤＳＰ（Digital Signal Processor）、ＡＳＩＣ（Application Specific Integrated Circuit）、またはＰＬＤ（Programmable Logic Device）である。またプロセッサ１０１は、ＣＰＵ、ＭＰＵ、ＤＳＰ、ＡＳＩＣ、ＰＬＤのうちの２以上の要素の組み合わせであってもよい。
【００３５】
ＲＡＭ１０２は、本体制御部２７の主記憶装置として使用される。ＲＡＭ１０２には、プロセッサ１０１に実行させるＯＳのプログラムやファームウェア、アプリケーションプログラムの少なくとも一部が一時的に格納される。また、ＲＡＭ１０２には、プロセッサ１０１による処理に必要な各種データ（たとえば、システム制御の情報管理）が格納される。また、ＲＡＭ１０２は、ホスト１１からのＩ／Ｏデータを格納するキャッシュ領域として使用される。
【００３６】
バス１０６に接続されている周辺機器としては、不揮発性メモリ１０３、入出力インタフェース１０４、およびネットワークインタフェース１０５がある。
不揮発性メモリ１０３は、ストレージ装置２０の電源遮断から電源投入の間、あるいはリセットの前後で記憶内容を保持する。不揮発性メモリ１０３は、たとえば、ＥＥＰＲＯＭやフラッシュメモリなどの半導体記憶装置や、ＨＤＤなどである。不揮発性メモリ１０３は、起動制御に用いる情報を記憶保持する。また、不揮発性メモリ１０３は、本体制御部２７の補助記憶装置として使用される。不揮発性メモリ１０３には、ＯＳのプログラムやファームウェア、アプリケーションプログラム、および各種データが格納される。
【００３７】
入出力インタフェース１０４は、所要の入出力装置と接続して入出力をおこなう。入出力インタフェース１０４は、たとえば、他の制御部や、本体制御部２７と接続するキーボードやマウスから送られてくる信号をプロセッサ１０１に送信する。また、入出力インタフェース１０４は、たとえば、プロセッサ１０１から受信した信号を、他の制御部や、本体制御部２７と接続する表示器やスピーカに出力する。
【００３８】
ネットワークインタフェース１０５は、ネットワーク１０７に接続可能にしている。ネットワークインタフェース１０５は、ネットワーク１０７と接続することで、ネットワーク１０７を介して、他のコンピュータまたは通信機器との間でデータの送受信をおこなう。
【００３９】
なお、本体制御部２７は、必要に応じてグラフィック処理装置、光学ドライブ装置、および機器接続インタフェースを備えるようにしてもよい。
グラフィック処理装置は、モニタを接続して、プロセッサ１０１からの命令に従って、画像を表示することができる。モニタとしては、ＣＲＴ（Cathode Ray Tube）を用いた表示装置や液晶表示装置などがある。
【００４０】
光学ドライブ装置は、レーザ光などを利用して、光ディスクに記録されたデータの読み取りをおこなうことができる。光ディスクは、光の反射によって読み取り可能なようにデータが記録された可搬型の記録媒体である。光ディスクには、ＤＶＤ（Digital Versatile Disc）、ＤＶＤ−ＲＡＭ、ＣＤ−ＲＯＭ（Compact Disc Read Only Memory）、ＣＤ−Ｒ（Recordable）／ＲＷ（ReWritable）などがある。
【００４１】
機器接続インタフェースは、本体制御部２７に周辺機器を接続するための通信インタフェースである。たとえば機器接続インタフェースには、メモリ装置やメモリリーダライタを接続することができる。メモリ装置は、機器接続インタフェースとの通信機能を搭載した記録媒体である。メモリリーダライタは、メモリカードへのデータの書き込み、またはメモリカードからのデータの読み出しをおこなう装置である。メモリカードは、カード型の記録媒体である。
【００４２】
以上のようなハードウェア構成によって、第２の実施形態の本体制御部２７の処理機能を実現することができる。なお、第１の実施形態に示した情報処理装置１も、図３に示した本体制御部２７と同様のハードウェアにより実現することができる。
【００４３】
また、第２の実施形態に示す他の制御部（Ｉ／Ｏ制御部２８、システム制御部２９、および装置起動制御部３０）は、本体制御部２７と共通のハードウェア上に実装するものであるが、個別のハードウェア上に実装するものであってもよい。その場合、他の制御部は、本体制御部２７と同様のハードウェアにより実現することができる。
【００４４】
本体制御部２７は、たとえば、コンピュータ読み取り可能な記録媒体に記録されたプログラムを実行することにより、第２の実施形態の処理機能を実現する。本体制御部２７に実行させる処理内容を記述したプログラムは、様々な記録媒体に記録しておくことができる。たとえば、本体制御部２７に実行させるプログラムを不揮発性メモリ１０３に格納しておくことができる。プロセッサ１０１は、不揮発性メモリ１０３内のプログラムの少なくとも一部をＲＡＭ１０２にロードし、プログラムを実行する。また、本体制御部２７に実行させるプログラムを、光ディスク、メモリ装置、メモリカードなどの可搬型記録媒体に記録しておくこともできる。可搬型記録媒体に格納されたプログラムは、たとえばプロセッサ１０１からの制御により、不揮発性メモリ１０３にインストールされた後、実行可能となる。またプロセッサ１０１が、可搬型記録媒体から直接プログラムを読み出して実行することもできる。
【００４５】
次に、第２の実施形態の装置起動制御部３０が実行する起動処理について図４、図５を用いて説明する。図４は、第２の実施形態の起動処理のフローチャートである。図５は、第２の実施形態のマシンダウンリカバリ管理テーブルの一例である。
【００４６】
起動処理は、ストレージ装置２０の起動を制御する処理である。起動処理は、電源投入による起動時またはマシンリカバリによる起動時に、装置起動制御部３０により実行される。
【００４７】
［ステップＳ１１］装置起動制御部３０は、ストレージ装置２０の起動状態を判定する。ストレージ装置２０の起動状態は、電源投入状態（Ｐ＿ＯＮ）と、マシンダウンリカバリ状態（Ｓ３状態）とがある。Ｓ３状態は、省電力規格「ＡＣＰＩ（Advanced Configuration and Power Interface）」で規定されている「スタンバイ状態」である。Ｓ３状態は、消費電力の抑制モードであり、メモリに対して電力を供給するものの、ディスクデバイス２２、その他のデバイスの電源をオフにする。
【００４８】
電源投入状態は、電源投入からのストレージ装置２０の起動状態であり、マシンダウンリカバリ状態は、マシンダウンからのストレージ装置２０の起動状態である。マシンダウンとは、ストレージ装置２０の運用が維持できない状態を示す。たとえば、メインコントローラ２６が本体制御部２７や構成部品等の異常を生じ、正常に起動できない状態をいう。
【００４９】
ストレージ装置２０は、メインコントローラ２６，３３によって冗長化されているので、同時故障により冗長性を維持できない状態をマシンダウンとする。メインコントローラ監視制御部３２が２つのメインコントローラ２６，３３のハード制御部３１の状態（Ｓ３状態）をチェックし、マシンリカバリの可否を判断する。装置起動制御部３０は、メインコントローラ監視制御部３２の判断からストレージ装置２０の起動状態を判定することができる。
【００５０】
なお、各メインコントローラ２６，３３の電源投入状態およびマシンダウンリカバリ状態の検出は、ハード制御部３１に問い合わせることでおこなうことができる。ハード制御部３１は、本体制御部２７で発生した異常を認識したカーネル層から、異常発生の通知を受ける。ハード制御部３１は、データの保護を目的として、メモリ（たとえば、ＲＡＭ１０２）に供給する電源を保持して、メインコントローラ２６がマシンダウンリカバリ状態であることをハード制御部３１内のメモリ（たとえば、ＲＡＭ）に記録する。メインコントローラ３３についても各メインコントローラ２６と同様である。
【００５１】
これにより、装置起動制御部３０は、ストレージ装置２０の起動状態を判定することができる。装置起動制御部３０は、ストレージ装置２０の起動状態が電源投入状態である場合にステップＳ１２にすすみ、ストレージ装置２０の起動状態がマシンダウンリカバリ状態である場合にステップＳ１３にすすむ。
【００５２】
［ステップＳ１２］装置起動制御部３０は、電源投入時起動処理を実行する。電源投入時起動処理は、電源投入状態における起動処理である。ストレージ装置２０は、電源投入時起動処理の実行により正常に起動した場合に正常な稼働をおこなうことが可能な「Ｒｅａｄｙ」状態となり、異常を検出（Ｐａｎｉｃ検出）して正常に起動しなかった場合に「Ｓ３状態」となる。電源投入時起動処理の詳細は、図６を用いて後で説明する。
【００５３】
［ステップＳ１３］装置起動制御部３０は、マシンダウンリカバリ管理テーブル５０が記憶するマシンダウンリカバリの実行回数を１インクリメントする。マシンダウンリカバリ管理テーブル５０は、不揮発性メモリ１０３に保持され、マシンダウンリカバリ（マシンダウンリカバリ起動処理）の実行回数を記憶する。マシンダウンリカバリ管理テーブル５０は、電源投入時起動処理の中で初期値１に初期化される。装置起動制御部３０は、マシンダウンリカバリ管理テーブル５０を参照することにより、マシンダウンリカバリの実行回数を把握できる。
【００５４】
［ステップＳ１４］装置起動制御部３０は、マシンダウンリカバリ起動処理を実行する。マシンダウンリカバリ起動処理は、マシンダウンリカバリ状態における起動処理である。
【００５５】
装置起動制御部３０は、メインコントローラ２６のハード制御部に対してリセット指示をおこないリブートさせる。このとき、カーネル層はマシンダウンからのリカバリ起動であることを本体制御部２７が認識できるように固有のブートモードを見せる機構をもつ。メインコントローラ３３についても各メインコントローラ２６と同様である。
【００５６】
ストレージ装置２０は、マシンダウンリカバリ起動処理の実行により異常を検出しなかった場合に機能を限定して起動する「Ｎｏｔ  Ｒｅａｄｙ」状態となり、異常を検出（Ｐａｎｉｃ検出）した場合に「Ｓ３状態」となる。マシンダウンリカバリ起動処理の詳細は、図８を用いて後で説明する。
【００５７】
次に、第２の実施形態の装置起動制御部３０が実行する電源投入時起動処理について図６から図１２を用いて説明する。図６は、第２の実施形態の電源投入時起動処理のフローチャートである。図７は、第２の実施形態の装置起動シーケンステーブルの一例である。図８は、第２の実施形態の初期化時のシーケンス管理テーブルの一例である。図９から図１２は、第２の実施形態の電源投入起動時のシーケンス管理テーブルの一例である。
【００５８】
電源投入時起動処理は、ストレージ装置２０の電源投入起動時の起動を制御する処理である。電源投入時起動処理は、起動処理のステップＳ１２で、装置起動制御部３０により実行される。
【００５９】
［ステップＳ２１］装置起動制御部３０は、シーケンス管理テーブル５２を含む所要の情報を初期化する。装置起動制御部３０は、シーケンス管理テーブル５２の他に、たとえば、マシンダウンリカバリ管理テーブル５０を「０」に、シーケンス番号を「０」にする。
【００６０】
ここで、図７を用いて装置起動シーケンステーブル５１について説明する。装置起動制御部３０は、装置起動シーケンステーブル５１にしたがい、ストレージ装置２０の起動をおこなう。装置起動シーケンステーブル５１は、電源投入時起動処理において実行するタスクごとの処理ブロックの実行手順をシーケンス順に記録する。
【００６１】
たとえば、装置起動シーケンステーブル５１ａは、シーケンス（０）からシーケンス（５）の６ステップで、タスク１からタスク４の各処理ブロックの実行手順を記録する。装置起動シーケンステーブル５１ａによれば、装置起動制御部３０は、シーケンス（０）で、タスク１−０（タスク１の処理ブロック）、タスク２−０、およびタスク３−０を実行する。装置起動制御部３０は、タスク４がシーケンス（０）において「処理なし」のため、タスク４を実行しない。装置起動制御部３０は、シーケンス（０）のすべての処理ブロックの実行が終了すると、シーケンス（１）の処理ブロックの実行をおこなう。装置起動制御部３０は、以降、同様にしてシーケンス（５）の処理ブロックの実行を終了すると、装置起動シーケンスの完了となる。
【００６２】
装置起動制御部３０は、装置起動シーケンステーブル５１にしたがいシーケンス管理テーブル５２を初期化する。たとえば、装置起動制御部３０は、装置起動シーケンステーブル５１ａにしたがい初期化することで、シーケンス管理テーブル５２ａ（図８参照）を得る。装置起動シーケンステーブル５１ａにおいて「処理なし」とされている処理ブロックは、シーケンス管理テーブル５２ａにおいて「実行不要」が記録される。また、装置起動シーケンステーブル５１ａにおいて処理ブロック名（たとえば、タスク１−０）が記録されている処理ブロックは、シーケンス管理テーブル５２ａにおいて「実行未」が記録される。「実行不要」は、該当シーケンスにおいて該当タスクの処理ブロックの実行を要しないことを意味する。また、「実行未」は、該当シーケンスにおいて該当タスクの処理ブロックが未だ実行されていないことを意味する。
【００６３】
［ステップＳ２２］装置起動制御部３０は、シーケンス番号を参照し、シーケンス管理テーブル５２に記録する。
［ステップＳ２３］装置起動制御部３０は、シーケンス管理テーブル５２に記録されているシーケンス番号に対応するすべての処理ブロックについて、実行状態を「実行未」から「実行中」に更新する。
【００６４】
たとえば、シーケンス管理テーブル５２ａに記録されているシーケンス番号が「０」であれば、装置起動制御部３０は、シーケンス（０）のタスク１、タスク２、およびタスク３の実行状態を「実行未」から「実行中」に更新する。なお、装置起動制御部３０は、シーケンス（０）のタスク４については、「実行不要」のため更新をおこなわない。これにより、装置起動制御部３０は、シーケンス管理テーブル５２ｂ（図９参照）を得る。
【００６５】
［ステップＳ２４］装置起動制御部３０は、実行状態を「実行中」に更新した処理ブロックを実行する。このとき、装置起動制御部３０は、各処理ブロックを並行して実行する。
【００６６】
［ステップＳ２５］装置起動制御部３０は、実行中の処理ブロックの異常検出をおこなう。装置起動制御部３０は、実行中の処理ブロックで異常を検出しない場合にステップＳ２６にすすみ、実行中の処理ブロックで異常を検出した場合に「Ｓ３状態」となる。
【００６７】
［ステップＳ２６］装置起動制御部３０は、正常に終了した処理ブロックについて、実行状態を「実行中」から「実行済」に更新する。
たとえば、装置起動制御部３０は、シーケンス（０）のタスク１、タスク２、およびタスク３の実行を正常に終了したのであれば、これら処理ブロックの実行状態を「実行中」から「実行済」に更新する。なお、装置起動制御部３０は、シーケンス（０）のタスク４については、「実行不要」のため更新をおこなわない。これにより、装置起動制御部３０は、シーケンス管理テーブル５２ｃ（図１０参照）を得る。
【００６８】
［ステップＳ２７］装置起動制御部３０は、実行対象とした処理ブロックの実行状態を監視する。装置起動制御部３０は、実行対象としたすべての処理ブロックの実行が終了したか否かを判定する。装置起動制御部３０は、実行対象としたすべての処理ブロックの実行が終了した場合にステップＳ２８にすすみ、実行対象としたすべての処理ブロックの実行が終了していない場合にステップＳ２５にすすむ。
【００６９】
［ステップＳ２８］装置起動制御部３０は、シーケンス番号を１インクリメントして更新する。
［ステップＳ２９］装置起動制御部３０は、実行可能なシーケンスが終了しているか否かを判定し、終了していない場合にはステップＳ２２にすすみ、終了している場合には、「Ｒｅａｄｙ」状態となる。
【００７０】
たとえば、装置起動制御部３０は、シーケンス（０）を正常に終了したのであれば、次に、シーケンス（１）を実行し、ステップＳ２３の２回目の実行で、シーケンス管理テーブル５２ｄ（図１１参照）を得る。このようにして、装置起動制御部３０は、シーケンス（０）からシーケンス（５）までを正常に終了すると、シーケンス管理テーブル５２ｅ（図１２参照）を得る。
【００７１】
このように、装置起動制御部３０は、シーケンス管理テーブル５２に、処理ブロックの実行状態を記録するので、電源投入時起動処理の実行中に異常が生じても「Ｓ３状態」となり、シーケンス管理テーブル５２を参照可能にする。
【００７２】
次に、第２の実施形態の装置起動制御部３０が実行するマシンダウンリカバリ起動処理について図１３、図１４を用いて説明する。図１３、図１４は、第２の実施形態のマシンダウンリカバリ起動処理のフローチャートである。
【００７３】
マシンダウンリカバリ起動処理は、ストレージ装置２０のマシンダウンリカバリ時の起動を制御する処理である。マシンダウンリカバリ起動処理は、起動処理のステップＳ１４で、装置起動制御部３０により実行される。
【００７４】
［ステップＳ３１］装置起動制御部３０は、シーケンス管理テーブル５２からマシンダウンの原因となった処理ブロックの実行時のシーケンスを被疑シーケンスとして特定する。シーケンス管理テーブル５２は、電源投入時起動処理におけるマシンダウン時の処理ブロックの実行状態を「実行中」として記録している。これにより、装置起動制御部３０は、シーケンス管理テーブル５２を参照することで、実行状態が「実行中」の処理ブロックを含むシーケンスを、被疑シーケンスとして特定することができる。
【００７５】
［ステップＳ３２］装置起動制御部３０は、シーケンス管理テーブル５２から被疑シーケンスに含まれるタスクの処理ブロックの実行状態をすべて取得する。
［ステップＳ３３］装置起動制御部３０は、実行状態が「実行中」の処理ブロックについて実行状態を「再実行未」に更新する。「再実行未」とは、被疑タスク候補として、処理ブロックを再実行対象とする実行状態である。
【００７６】
［ステップＳ３４］装置起動制御部３０は、実行状態が「再実行中」の処理ブロックの有無を判定する。装置起動制御部３０は、実行状態が「再実行中」の処理ブロックがある場合にステップＳ３５にすすみ、実行状態が「再実行中」の処理ブロックがない場合にステップＳ３６にすすむ。
【００７７】
［ステップＳ３５］装置起動制御部３０は、実行状態が「再実行中」の処理ブロックおよび該当するタスクの以降の処理ブロックについて実行状態を「実行不能」に更新する。「実行不能」とは、処理ブロックを実行対象外とする実行状態である。
【００７８】
［ステップＳ３６］装置起動制御部３０は、シーケンス管理テーブル５２のすべての処理ブロックについて、実行状態が「実行済」である場合に実行状態を「実行未」に更新する。
【００７９】
［ステップＳ３７］装置起動制御部３０は、シーケンス番号を「０」に初期化する。
［ステップＳ３８］装置起動制御部３０は、シーケンス番号を参照し、シーケンス管理テーブル５２に記録する。
【００８０】
［ステップＳ３９］装置起動制御部３０は、シーケンス番号により特定されるシーケンスが被疑シーケンスであるか否かを判定する。装置起動制御部３０は、被疑シーケンスである場合にステップＳ４０にすすみ、被疑シーケンスでない場合にステップＳ４１にすすむ。
【００８１】
［ステップＳ４０］装置起動制御部３０は、被疑シーケンス実行処理を実行する。被疑シーケンス実行処理は、マシンダウンの原因となった被疑シーケンスの処理ブロックを実行する処理である。被疑シーケンス実行処理の詳細は、図１５を用いて後で説明する。
【００８２】
［ステップＳ４１］装置起動制御部３０は、シーケンス番号により特定されるシーケンスで実行対象とするタスクの処理ブロックを選択する。
［ステップＳ４２］装置起動制御部３０は、選択した処理ブロックのうち、実行状態が「実行不能」の処理ブロックを実行対象から除外する。
【００８３】
［ステップＳ４３］装置起動制御部３０は、選択した処理ブロックの実行状態を「実行未」から「実行中」に更新する。
［ステップＳ４４］装置起動制御部３０は、実行状態を「実行中」に更新した処理ブロックを実行する。このとき、装置起動制御部３０は、各処理ブロックを並行して実行する。
【００８４】
［ステップＳ４５］装置起動制御部３０は、正常に終了した処理ブロックについて、実行状態を「実行中」から「実行済」に更新する。
［ステップＳ４６］装置起動制御部３０は、実行対象とした処理ブロックの実行状態を監視する。装置起動制御部３０は、実行対象としたすべての処理ブロックの実行が終了したか否かを判定する。装置起動制御部３０は、実行対象としたすべての処理ブロックの実行が終了した場合にステップＳ４７にすすみ、実行対象としたすべての処理ブロックの実行が終了していない場合にステップＳ４５にすすむ。
【００８５】
［ステップＳ４７］装置起動制御部３０は、シーケンス番号を１インクリメントして更新する。
［ステップＳ４８］装置起動制御部３０は、実行可能なシーケンスが終了しているか否かを判定し、終了していない場合にはステップＳ３８にすすみ、終了している場合には、「Ｎｏｔ  Ｒｅａｄｙ」状態となる。
【００８６】
次に、第２の実施形態の装置起動制御部３０が実行する被疑シーケンス実行処理について図１５を用いて説明する。図１５は、第２の実施形態の被疑シーケンス実行処理のフローチャートである。
【００８７】
被疑シーケンス実行処理は、ストレージ装置２０のマシンダウンリカバリ時の起動を制御する処理である。被疑シーケンス実行処理は、マシンダウンの原因となった被疑シーケンスの処理ブロックを実行する処理であり、マシンダウンリカバリ起動処理のステップＳ４０で、装置起動制御部３０により実行される。
【００８８】
［ステップＳ５１］装置起動制御部３０は、被疑シーケンスで実行対象とするタスクの処理ブロックを１つ選択する。被疑シーケンス実行処理では、被疑タスクを特定するため、実行対象となる処理ブロックを１つ選択する。
【００８９】
［ステップＳ５２］装置起動制御部３０は、選択した処理ブロックの実行状態が「実行不能」であるか否かを判定する。装置起動制御部３０は、選択した処理ブロックの実行状態が「実行不能」である場合にステップＳ５９にすすみ、選択した処理ブロックの実行状態が「実行不能」でない場合にステップＳ５３にすすむ。
【００９０】
［ステップＳ５３］装置起動制御部３０は、選択した処理ブロックの実行状態が「再実行未」であるか否かを判定する。装置起動制御部３０は、選択した処理ブロックの実行状態が「再実行未」である場合にステップＳ５４にすすみ、選択した処理ブロックの実行状態が「再実行未」でない場合、すなわち「実行未」である場合にステップＳ５５にすすむ。
【００９１】
［ステップＳ５４］装置起動制御部３０は、選択した処理ブロックの実行状態を「再実行未」から「再実行中」に更新する。
［ステップＳ５５］装置起動制御部３０は、選択した処理ブロックの実行状態を「実行未」から「実行中」に更新する。
【００９２】
［ステップＳ５６］装置起動制御部３０は、実行状態を「再実行中」または「実行中」に更新した処理ブロックを実行する。このとき、装置起動制御部３０は、処理ブロックを１つずつ実行する。これにより、装置起動制御部３０は、マシンダウンの原因となる処理ブロックを特定可能にする。
【００９３】
［ステップＳ５７］装置起動制御部３０は、実行中の処理ブロックの異常検出をおこなう。装置起動制御部３０は、実行中の処理ブロックで異常を検出しない場合にステップＳ５８にすすみ、実行中の処理ブロックで異常を検出した場合に「Ｓ３状態」となる。
【００９４】
［ステップＳ５８］装置起動制御部３０は、正常に終了した処理ブロックについて、実行状態を「実行中」から「実行済」に更新する。
［ステップＳ５９］装置起動制御部３０は、実行対象とするタスクの処理ブロックのすべてについて選択したか否かを判定する。装置起動制御部３０は、実行対象とするタスクの処理ブロックのすべてについて選択していない場合にステップＳ５１にすすみ、選択している場合に被疑シーケンス実行処理を終了する。
【００９５】
これにより、装置起動制御部３０は、１回目のマシンダウンリカバリ起動処理の実行により、被疑シーケンスを特定することができ、２回目のマシンダウンリカバリ起動で被疑タスク（被疑処理ブロック）を特定することができる。装置起動制御部３０は、被疑タスクが複数ある場合には、３回目以降のマシンダウンリカバリ起動で、被疑タスクを１つずつ特定することができる。装置起動制御部３０は、被疑タスクを１つずつ実行対象から除外することで、「Ｎｏｔ  Ｒｅａｄｙ」状態での起動をおこなうことができる。装置起動制御部３０は、マシンダウンの原因となった処理ブロックを特定可能なシーケンス管理テーブル５２を不揮発性メモリ１０３に保持することができる。
【００９６】
次に、マシンダウン発生時の起動処理実行過程を、図１６から図２３を用いたシーケンス管理テーブルの更新過程によって説明する。図１６から図２３は、第２の実施形態のマシンダウン発生時のシーケンス管理テーブルの一例である。
【００９７】
ここで説明するマシンダウンは、シーケンス（１）でタスク３の処理ブロックを実行中に生じたものとする。
１回目のマシンダウンリカバリ処理の実行開始時に、不揮発性メモリ１０３は、シーケンス管理テーブル５２ｆ（図１６参照）を保持する。シーケンス管理テーブル５２ｆのシーケンス（１）のタスク３とタスク４に実行状態が「実行中」の処理ブロックがあることから、装置起動制御部３０は、１回目のマシンダウンリカバリ処理でシーケンス（１）を被疑タスクであると特定することができる。
【００９８】
装置起動制御部３０は、実行状態が「実行中」の処理ブロックの実行状態を「再実行未」に更新し、実行状態が「再実行済」の処理ブロックの実行状態を「実行未」に更新する。これにより、装置起動制御部３０は、シーケンス管理テーブル５２ｇ（図１７参照）を得る。
【００９９】
装置起動制御部３０は、処理ブロックの実行状態が「実行不要」のタスク４を除いて、シーケンス（０）の処理ブロック（タスク１、タスク２、タスク３）を実行対象として、実行対象の処理ブロックの実行状態を「実行中」に更新する。装置起動制御部３０は、シーケンス（０）で実行対象とした処理ブロックを並行して実行する。これにより、装置起動制御部３０は、シーケンス管理テーブル５２ｈ（図１８参照）を得る。
【０１００】
装置起動制御部３０は、シーケンス（０）で実行対象とした処理ブロックの実行後に、シーケンス（０）で実行対象とした処理ブロックの実行状態を「実行済」に更新する。装置起動制御部３０は、実行シーケンスをシーケンス（０）からシーケンス（１）にすすめる。装置起動制御部３０は、被疑シーケンスであるシーケンス（１）では、処理ブロックを１つずつ実行する。たとえば、装置起動制御部３０は、タスク１から、タスク２（実行状態「実行不要」であるため実行しない）、タスク３、タスク４の順に処理ブロックを実行する。シーケンス管理テーブル５２ｉ（図１９参照）は、タスク１の実行状態が「実行済」、タスク３の実行状態が「再実行中」であることを示す。
【０１０１】
ここで、シーケンス（１）でタスク３の処理ブロックの実行により、マシンダウンが発生する。したがって、シーケンス管理テーブル５２ｉは、２回目のマシンダウンリカバリ処理の実行開始時に、不揮発性メモリ１０３に保持されている。
【０１０２】
シーケンス管理テーブル５２ｉのシーケンス（１）のタスク３の処理ブロックの実行状態が「再実行中」であることから、装置起動制御部３０は、２回目のマシンダウンリカバリ処理でシーケンス（１）のタスク３が被疑タスクであると特定することができる。
【０１０３】
装置起動制御部３０は、タスク３のシーケンス（１）以降の処理ブロックについて、実行状態を「実行不能」に更新し、実行状態が「再実行済」の処理ブロックの実行状態を「実行未」に更新する。これにより、装置起動制御部３０は、シーケンス管理テーブル５２ｊ（図２０参照）を得る。なお、タスク３のシーケンス（１）以降の処理ブロックは、実行状態が「実行不能」に更新されたことにより実行されない。
【０１０４】
装置起動制御部３０は、マシンダウンの原因となった被疑タスクを特定することができたが、未だシーケンス（１）のタスク４の処理ブロックの実行状態が「再実行未」であるため、１回目のマシンダウンリカバリ処理と同様にして、処理をすすめる。シーケンス管理テーブル５２ｋ（図２１参照）は、シーケンス（１）において、もう１つの被疑タスク候補であるタスク４の処理ブロックの実行前を示す。
【０１０５】
ここで、もう１つの被疑タスク候補であるタスク４の処理ブロックが正常に実行が終了した場合、装置起動制御部３０は、被疑タスク候補であるタスク４の処理ブロックの実行状態を「実行済」に更新する。これにより、装置起動制御部３０は、シーケンス管理テーブル５２ｍ（図２２参照）を得る。以降、装置起動制御部３０は、マシンダウンすることなく、「Ｎｏｔ  Ｒｅａｄｙ」状態での起動をおこなうことができる。
【０１０６】
このとき、不揮発性メモリ１０３は、シーケンス管理テーブル５２ｎ（図２３参照）を保持する。シーケンス管理テーブル５２ｎのタスク３がシーケンス（１）以降の処理ブロックの実行状態が「実行不能」であることから、マシンダウンの原因が、シーケンス（１）のタスク３の処理ブロックにあることがわかる。
【０１０７】
次に、もう１つのマシンダウン発生時の起動処理実行過程を、図２４、図２５を用いたシーケンス管理テーブルの更新過程によって説明する。図２４、図２５は、第２の実施形態のマシンダウン発生時のシーケンス管理テーブルの一例である。
【０１０８】
ここで説明するマシンダウンは、シーケンス（１）でタスク３の処理ブロックあるいはタスク４の処理ブロックを実行中に生じたものとする。
シーケンス管理テーブル５２ｋ（図２１参照）が示す状態までのシーケンス管理テーブル５２の更新過程は、上記したマシンダウン発生時の起動処理実行過程と同様のため、説明を省略する。
【０１０９】
装置起動制御部３０は、シーケンス（０）で実行対象とした処理ブロックの実行後に、シーケンス（０）で実行対象とした処理ブロックの実行状態を「実行済」に更新する。装置起動制御部３０は、実行シーケンスをシーケンス（０）からシーケンス（１）にすすめる。装置起動制御部３０は、被疑シーケンスであるシーケンス（１）では、処理ブロックを１つずつ実行する。たとえば、装置起動制御部３０は、タスク１から、タスク２（実行状態「実行不要」であるため実行しない）、タスク３（実行状態「実行不能」であるため実行しない）、タスク４の順に処理ブロックを実行する。シーケンス管理テーブル５２ｐ（図２４参照）は、タスク１の実行状態が「実行済」、タスク４の実行状態が「再実行中」であることを示す。
【０１１０】
ここで、シーケンス（１）でタスク４の処理ブロックの実行により、マシンダウンが発生する。したがって、シーケンス管理テーブル５２ｐは、３回目のマシンダウンリカバリ処理の実行開始時に、不揮発性メモリ１０３に保持されている。
【０１１１】
以降、装置起動制御部３０は、２回目のマシンダウンリカバリ処理と同様の３回目のマシンダウンリカバリ処理を実行し、「Ｎｏｔ  Ｒｅａｄｙ」状態での起動をおこなうことができる。
【０１１２】
このとき、不揮発性メモリ１０３は、シーケンス管理テーブル５２ｑ（図２５参照）を保持する。シーケンス管理テーブル５２ｑのタスク３およびタスク４がシーケンス（１）以降の処理ブロックの実行状態が「実行不能」であることから、マシンダウンの原因が、シーケンス（１）のタスク３およびタスク４の処理ブロックにあることがわかる。
【０１１３】
このように、シーケンス管理テーブル５２は、マシンダウンの原因が複数あっても、記録を保持することが可能である。これにより、ストレージ装置２０は、マシンダウンの原因を除去して起動することができる。また、ストレージ装置２０は、起動時の処理状況（起動過程の情報）を保持して起動するため、異常原因の究明を容易にすることができる。
【０１１４】
［第３の実施形態］
次に、第３の実施形態のストレージ装置２０について図２６を用いて説明する。図２６は、第３の実施形態のマシンダウンリカバリ管理テーブルの一例である。
【０１１５】
第２の実施形態において、装置起動制御部３０は、装置起動シーケンステーブル５１ａにしたがい、ストレージ装置２０の電源投入時起動とマシンダウンリカバリ起動とをおこなっていた。第３の実施形態では、ストレージ装置２０のマシンダウンリカバリ起動で、一部処理ブロックをスキップする点で第２の実施形態と相違する。
【０１１６】
マシンダウンリカバリ起動は、一旦、電源投入時起動を経ていることなどから、一部の処理ブロックをスキップして起動した方がよい場合がある。そのため、装置起動制御部３０は、マシンダウンリカバリ起動の開始時（たとえば、ステップＳ３１の前後）で、スキップ対象とする処理ブロックに、装置起動シーケンステーブル５１ｂのように、スキップフラグを設定する。具体的には、装置起動シーケンステーブル５１ｂは、タスク２−２（シーケンス（２）のタスク２の処理ブロック）およびタスク３−４（シーケンス（４）のタスク３の処理ブロック）にスキップフラグ（スキップ＝１）を設定する。
【０１１７】
これにより、装置起動制御部３０は、装置起動シーケンステーブル５１ｂを参照し、シーケンス管理テーブル５２の該当シーケンスの該当タスクの処理ブロックの実行状態を「実行不要」に更新することで、対象とする処理ブロックをスキップすることができる。
【０１１８】
これにより、装置起動制御部３０は、ストレージ装置２０の運用状態からの再起動/データ保護の優先を、マシンダウンリカバリ起動に反映することができる。
なお、スキップフラグの設定は、あらかじめおこなうものであってもよい。たとえば、スキップ設定の異なる装置起動シーケンステーブル５１をあらかじめ複数種類用意して、マシンダウンリカバリ起動時の環境条件（たとえば、把握可能なマシンダウンの原因）にしたがい、装置起動シーケンステーブル５１を選択することができる。
【０１１９】
以上、ストレージ装置２０を例示して説明したが、その他の情報処理装置においても適用可能である。
なお、装置起動制御部３０は、正常な起動時の起動過程のログから装置起動シーケンステーブル５１を生成するようにしてもよい。これにより、シーケンス数やタスク数などの起動条件が固定されていない情報処理装置にも本技術が適用可能になる。
【０１２０】
また、シーケンス管理テーブル５２の初期化処理を電源投入時起動処理でおこなうようにしたが、マシンダウンリカバリ起動処理の１回目でおこなうようにしてもよい。この場合、装置起動制御部３０は、２回目のマシンダウンリカバリ起動処理で被疑シーケンスを特定することができる。装置起動制御部３０は、マシンダウンリカバリ管理テーブル５０によって、マシンダウンリカバリ起動処理の起動回数を把握することができる。
【０１２１】
なお、電源投入時起動処理でシーケンス管理テーブル５２の初期化処理をおこなう場合、電源投入時起動処理が第１の実施形態の第１起動処理４に相当する。また、マシンダウンリカバリ起動処理の１回目でシーケンス管理テーブル５２の初期化処理をおこなう場合、１回目のマシンダウンリカバリ起動処理が第１の実施形態の第１起動処理４に相当する。
【０１２２】
なお、上記の処理機能は、コンピュータによって実現することができる。その場合、情報処理装置１、ストレージ装置２０（本体制御部２７、Ｉ／Ｏ制御部２８、システム制御部２９、装置起動制御部３０、ハード制御部３１、およびディスク制御部２３等）が有すべき機能の処理内容を記述したプログラムが提供される。そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記憶装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記憶装置には、ハードディスク装置（ＨＤＤ）、フレキシブルディスク（ＦＤ）、磁気テープなどがある。光ディスクには、ＤＶＤ、ＤＶＤ−ＲＡＭ、ＣＤ−ＲＯＭ／ＲＷなどがある。光磁気記録媒体には、ＭＯ（Magneto-Optical disk）などがある。
【０１２３】
プログラムを流通させる場合には、たとえば、そのプログラムが記録されたＤＶＤ、ＣＤ−ＲＯＭなどの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
【０１２４】
プログラムを実行するコンピュータは、たとえば、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムに従った処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することもできる。また、コンピュータは、ネットワークを介して接続されたサーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムに従った処理を実行することもできる。
【０１２５】
また、上記の処理機能の少なくとも一部を、ＤＳＰ、ＡＳＩＣ、ＰＬＤなどの電子回路で実現することもできる。
【符号の説明】
【０１２６】
１  情報処理装置
２，１０３  不揮発性メモリ
３  実行状態管理テーブル
４  第１起動処理
５  第２起動処理
６  第３起動処理
７  被疑シーケンス
８  被疑タスク
９  制御部
１１  ホスト
２０  ストレージ装置
２１，２５  チャネルアダプタ
２２  ディスクデバイス
２３  ディスク制御部
２４  ディスク
２６，３３  メインコントローラ
２７  本体制御部
２８  Ｉ／Ｏ制御部
２９  システム制御部
３０  装置起動制御部
３１  ハード制御部
３２  メインコントローラ監視制御部
５０  マシンダウンリカバリ管理テーブル
５１  装置起動シーケンステーブル
５２  シーケンス管理テーブル
１０１  プロセッサ
１０２  ＲＡＭ
１０４  入出力インタフェース
１０５  ネットワークインタフェース
１０６  バス
１０７  ネットワーク
【図１】
2014041407.tif 000003
【図２】
2014041407.tif 000004
【図３】
2014041407.tif 000005
【図４】
2014041407.tif 000006
【図５】
2014041407.tif 000007
【図６】
2014041407.tif 000008
【図７】
2014041407.tif 000009
【図８】
2014041407.tif 000010
【図９】
2014041407.tif 000011
【図１０】
2014041407.tif 000012
【図１１】
2014041407.tif 000013
【図１２】
2014041407.tif 000014
【図１３】
2014041407.tif 000015
【図１４】
2014041407.tif 000016
【図１５】
2014041407.tif 000017
【図１６】
2014041407.tif 000018
【図１７】
2014041407.tif 000019
【図１８】
2014041407.tif 000020
【図１９】
2014041407.tif 000021
【図２０】
2014041407.tif 000022
【図２１】
2014041407.tif 000023
【図２２】
2014041407.tif 000024
【図２３】
2014041407.tif 000025
【図２４】
2014041407.tif 000026
【図２５】
2014041407.tif 000027
【図２６】
2014041407.tif 000028