(57)【特許請求の範囲】
【請求項１】
データを転送する通信装置であって、
前記通信装置は、当該通信装置を制御する制御部及び前記データの転送を制御する転送部を備え、
前記制御部は、処理を実行する演算処理部と、不揮発性メモリと、揮発性メモリと、前記演算処理部がアクセスする前記不揮発性メモリの領域を分割することによって生成されたメモリ領域を制御するメモリ領域制御デバイスと、を含み、
前記転送部は、受信したデータを転送する経路を検索する経路検索エンジンと、前記受信したデータを前記経路検索エンジンの処理結果に基づいて転送する転送エンジンと、前記経路検索エンジンが前記受信したデータを転送する経路を検索するための経路情報を格納するメモリと、ネットワークに接続するインタフェースと、を含み、
前記メモリ領域制御デバイスは、
前記通信装置が起動し、かつ、前記不揮発性メモリが初期化されていない場合、前記不揮発性メモリの領域の一部を、データを格納する領域、前記メモリ領域に対するデータの上書きを抑止する制御を行う保護ビットを格納する領域、前記データに関するタイムスタンプを格納する領域を含む複数のメモリ領域に分割し、
前記複数のメモリ領域の中から前記演算処理部に使用させるメモリ領域である利用メモリ領域を決定し、
前記演算処理部は、前記メモリ領域制御デバイスによって決定された利用メモリ領域に前記通信装置の運用中に動的に更新される動的データを格納することを特徴とする通信装置。
【請求項２】
請求項１に記載の通信装置であって、
前記メモリ領域制御デバイスは、
前記通信装置が再起動した場合、前記保護ビット及び前記タイムスタンプに基づいて前記複数のメモリ領域の中から新たな利用メモリ領域を決定し、
前記演算処理部が利用するメモリ領域を、現在使用される前記利用メモリ領域から前記新たな利用メモリ領域に切り替えることを特徴とする通信装置。
【請求項３】
請求項２に記載の通信装置であって、
前記不揮発性メモリの領域の一部は、前記利用メモリ領域の候補となるメモリ領域の識別情報を格納する第１の格納領域を含み、
前記メモリ領域制御デバイスは、
前記第１の格納領域から前記利用メモリ領域の候補となるメモリ領域の識別情報を取得し、
前記取得されたメモリ領域の識別情報に基づいて、前記不揮発性メモリの前記利用メモリ領域の候補となるメモリ領域から前記保護ビットを取得して、前記保護ビットが有効化されているかを判定し、
前記保護ビットが無効化されている場合、前記利用メモリ領域の候補となるメモリ領域を前記新たな利用メモリ領域として選択して、前記新たな利用メモリ領域として選択されたメモリ領域に隣接するメモリ領域の識別情報を前記第１の格納領域に格納し、
前記保護ビットが有効化されている場合、前記保護ビットが無効化されたメモリ領域が存在するかを判定し、
前記保護ビットが無効化されたメモリ領域が存在すると判定された場合、前記保護ビットが無効化されたメモリ領域の中から前記新たな利用メモリ領域を選択して、前記新たな利用メモリ領域として選択されたメモリ領域に隣接するメモリ領域の識別情報を前記第１の格納領域に格納することを特徴とする通信装置。
【請求項４】
請求項３に記載の通信装置であって、
前記メモリ領域制御デバイスは、
前記通信装置の機能を実現するソフトウェアの起動が完了したかを判定し、
前記ソフトウェアの起動が完了したと判定された場合、前記利用メモリ領域の前記保護ビットを有効化し、
前記通信装置の再起動の開始の契機が、管理者の操作又はメンテナンス計画に基づく再起動である場合、前記現在使用される利用メモリ領域の前記保護ビットを無効化した後に、前記現在使用される利用メモリ領域から前記新たな利用メモリ領域に切り替え、
前記通信装置の再起動の開始の契機が、前記通信装置の障害に起因する再起動である場合、前記現在使用される利用メモリ領域の前記保護ビットを変更することなく、前記現在使用される利用メモリ領域から前記新たな利用メモリ領域に切り替えることを特徴とする通信装置。
【請求項５】
請求項３に記載の通信装置であって、
前記演算処理部は、前記不揮発性メモリに保存される障害ログの取得要求を受け付けた場合、前記保護ビットが有効化されたメモリ領域の中から前記障害ログを取得するメモリ領域を選択し、
前記メモリ領域制御デバイスは、前記演算処理部から前記現在使用される利用メモリ領域へのアクセスと、前記演算処理部から前記選択されたメモリ領域へのアクセスとを調停し、
前記演算処理部は、前記選択されたメモリ領域から当該メモリ領域に格納されるデータを前記障害ログとして取得し、
前記メモリ領域制御デバイスは、前記選択されたメモリ領域から前記データが取得された後に、当該メモリ領域の前記保護ビットを無効化することを特徴とする通信装置。
【請求項６】
請求項３に記載の通信装置であって、
前記通信装置が再起動した場合、前記複数のメモリ領域の各々の前記タイムスタンプを取得し、
前記複数のメモリ領域の各々の前記保護ビットを取得して、前記保護ビットが無効化されたメモリ領域を抽出し、
前記抽出されたメモリ領域の前記タイムスタンプに基づいて、前記抽出されたメモリ領域の中から前記新たな利用メモリ領域を選択することを特徴とする通信装置。
【請求項７】
請求項６に記載の通信装置であって、
前記メモリ領域制御デバイスは、
前記保護ビットが無効化されたメモリ領域が存在しない場合、前記タイムスタンプが最も古い障害ログを格納する前記メモリ領域を特定し、
前記タイムスタンプが最も古い障害ログを格納するメモリ領域を除く全てのメモリ領域の中から前記タイムスタンプが１番目に古いメモリ領域を前記新たな利用メモリ領域と選択して、前記選択されたメモリ領域の前記保護ビットを無効化することを特徴とする通信装置。
【請求項８】
請求項３に記載の通信装置であって、
前記不揮発性メモリの領域の一部は、前記不揮発性メモリが初期化されたことを示す情報を格納する第２の格納領域を含み、
前記メモリ領域制御デバイスは、
前記不揮発性メモリの領域の一部が前記複数のメモリ領域に分割された後、前記第２の格納領域に、前記不揮発性メモリが初期化されたことを示す情報を設定し、
前記通信装置が起動後に、前記第２の格納領域を参照し、
前記第２の格納領域に前記不揮発性メモリが初期化されたことを示す情報が設定されている場合、前記不揮発性メモリが初期化されていると判定することを特徴とする通信装置。
【請求項９】
請求項３に記載の通信装置であって、
前記メモリ領域制御デバイスは、前記利用メモリ領域の決定後、当該利用メモリ領域における前記データを格納する領域、及び、前記データに関するタイムスタンプを格納する領域を初期化することを特徴とする通信装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、通信装置に関する。
【背景技術】
【０００２】
ルータ及びスイッチ等の一般的な通信装置では、通信装置の運用時に決定され、かつ、運用中に動的に更新される経路情報等のデータは、書込寿命に優れているＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）等の揮発性メモリに格納される。また、一般的な通信装置では、通信装置の運用時に決定され、運用中に動的に更新されないコンフィグ情報及び装置の設定情報のデータは、一時的に揮発性メモリに格納され、ユーザからのオペレーション等を契機に、Ｆｌａｓｈメモリ等の不揮発性メモリに格納される。
【０００３】
本明細書では、運用中に動的に更新されるデータ（更新頻度が高いデータ）を動的データとも記載する。また、運用中に動的に更新されないデータ（更新頻度が低いデータ）を静的データとも記載する。
【０００４】
通信装置の運用及び管理において、インシデントが発生した直前の装置情報（ログ）を記録し、故障又は障害が発生した時の装置及び経路の情報である障害ログに基づいて、原因究明及び障害対策を立てることが重要である。障害が発生する直前の装置情報を保持するためには常にログを更新する必要がある。また、ログの更新に合わせて電源断などの致命的な障害が発生した場合でも、障害を解析できる仕組みが必要とされる。
【０００５】
通信装置の障害には、ルーティングプロトコルのアプリケーション若しくはデーモンのハングアップ又はプログラムの暴走等に起因するソフトウェア障害と、ＣＰＵ、メモリ、電源又はクロック周辺回路等の故障に起因するハードウェア障害とが存在する。
【０００６】
一般的な通信装置においてハードウェア障害が発生した場合、揮発性メモリに格納される動的データはログとして残らない。そのため、周期的に、揮発性メモリに格納される動的データを不揮発性メモリ等にバックアップする方法が考えられる。また、一般的な通信装置においてソフトウェア障害が発生した場合、揮発性メモリに格納される動的データを不揮発性メモリに障害ログとしてダンプする方法が考えられる。例えば、障害を解析するためのログの取得方法に関する発明として特許文献１に記載の発明が知られている。
【０００７】
特許文献１には、「機能ごとにパッケージ化されたユニットを複数個組み合わせて実装された伝送装置において、ロギングにより前記ユニットの状態情報を入手したログを、前記伝送装置に障害が生じた場合に前記障害の原因解析に利用できるように、順次記録する不揮発性記録部を備えることを特徴とする伝送装置」が記載されている。
【０００８】
特許文献１に記載の伝送装置は、ログ専用の揮発性メモリ及び不揮発性メモリを有する。特許文献１に記載の伝送装置は、周期的又は状態情報の変化が検出された場合にロギングを行い、収集された情報を一旦揮発性メモリに格納し、必要な情報を抽出し、抽出された情報を不揮発性メモリに格納する。また、特許文献１に記載の伝送装置は、重複した繰り返しパターンが含まれる場合には、時刻のログのみを不揮発性メモリに格納する。また、不揮発性メモリにおけるログの管理方法としてはループバッファ方式を用いることが記載されている。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２０１０−１４７８０４号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
特許文献１に記載の伝送装置は、一旦、揮発性メモリに、収集された情報を格納するため、ハードウェア障害が発生した場合、揮発性メモリに格納された情報が消滅する。そのためログを取得できない。
【００１１】
特許文献１に記載の伝送装置は、揮発性メモリに格納された情報から所定の条件を満たす情報のみを抽出し、抽出された情報を不揮発性メモリに格納する。そのため、揮発性メモリから不揮発性メモリへのデータの移動に時間が掛かり、前述したような問題が大きくなる要因となる。また、障害を解析するためには様々な要因を考慮する必要があるが、特許文献１に記載の伝送装置は必ずしも障害解析に必要な情報がログとして取得できるわけではない。
【００１２】
また、特許文献１に記載の伝送装置は、動的データを不揮発性メモリに格納する場合、ループバッファ方式でログを管理する。そのため、不揮発性メモリの容量が不足している場合、ログの取得を開始してから初めて発生した障害の障害情報が新たなデータに上書きされる。したがって、障害解析に必要な情報をログとして残すことができない。特許文献１に記載されているように、一度発生した障害は何度も発生する可能性があるため、初めて発生した障害の障害情報は、障害解析において重要な情報となる。
【課題を解決するための手段】
【００１３】
本願において開示される発明の代表的な一例を示せば以下の通りである。すなわち、データを転送する通信装置であって、前記通信装置は、当該通信装置を制御する制御部及び前記データの転送を制御する転送部を備え、前記制御部は、処理を実行する演算処理部と、不揮発性メモリと、揮発性メモリと、前記演算処理部がアクセスする前記不揮発性メモリの領域を分割することによって生成されたメモリ領域を制御するメモリ領域制御デバイスと、を含み、前記転送部は、受信したデータを転送する経路を検索する経路検索エンジンと、前記受信したデータを前記経路検索エンジンの処理結果に基づいて転送する転送エンジンと、前記経路検索エンジンが前記受信したデータを転送する経路を検索するための経路情報を格納するメモリと、ネットワークに接続するインタフェースと、を含み、前記メモリ領域制御デバイスは、前記通信装置が起動し、かつ、前記不揮発性メモリが初期化されていない場合、前記不揮発性メモリの領域の一部を、データを格納する領域、前記メモリ領域に対するデータの上書きを抑止する制御を行う保護ビットを格納する領域、前記データに関するタイムスタンプを格納する領域を含む複数のメモリ領域に分割し、前記複数のメモリ領域の中から前記演算処理部に使用させるメモリ領域である利用メモリ領域を決定し、前記演算処理部は、前記メモリ領域制御デバイスによって決定された利用メモリ領域に前記通信装置の運用中に動的に更新される動的データを格納することを特徴とする。
【発明の効果】
【００１４】
本発明によれば、複数のメモリ領域に分割し、データの上書きを抑止する保護ビットを設けた不揮発性メモリにログとして障害解析に必要となるデータを保存するので、ユーザによる障害解析を容易にする。上記した以外の課題、構成及び効果は、以下の実施例の説明により明らかにされる。
【図面の簡単な説明】
【００１５】
【図１】実施例の通信装置の構成の一例を示すブロック図である。
【図２】実施例の制御部の構成の一例を説明するブロック図である。
【図３】実施例の不揮発性メモリの構成の一例を示す説明図である。
【図４】実施例の面制御レジスタの一例を示す説明図である。
【図５】実施例の面管理テーブルの一例を示す説明図である。
【図６】実施例の通信装置の処理の流れを示す説明図である
【図７】実施例の面制御デバイスが実行する処理の概要を説明するフローチャートである。
【図８Ａ】実施例の面制御デバイスが実行する初期設定処理の一例を説明するフローチャートである。
【図８Ｂ】実施例の面制御デバイスが実行する初期設定処理の一例を説明するフローチャートである。
【図９Ａ】実施例の面制御デバイスが実行する利用面決定処理の一例を説明するフローチャートである。
【図９Ｂ】実施例の面制御デバイスが実行する利用面決定処理の一例を説明するフローチャートである。
【図１０】実施例の面制御デバイスが実行するログ更新面選択処理の一例を説明するフローチャートである。
【図１１】実施例の面制御デバイスが実行する不揮発性メモリ整合性確認処理の一例を説明するフローチャートである。
【図１２Ａ】実施例の面制御デバイスが実行するソフトウェア正常起動確認処理の一例を説明するフローチャートである。
【図１２Ｂ】実施例のＣＰＵがソフトウェア正常起動確認処理において実行する処理の一例を説明するフローチャートである。
【図１３Ａ】実施例の通信装置の不揮発性メモリ内の面の設定方法及び更新方法の一例を示す説明図である。
【図１３Ｂ】実施例の通信装置の不揮発性メモリ内の面の設定方法及び更新方法の一例を示す説明図である。
【図１３Ｃ】実施例の通信装置の不揮発性メモリ内の面の設定方法及び更新方法の一例を示す説明図である。
【図１３Ｄ】実施例の通信装置の不揮発性メモリ内の面の設定方法及び更新方法の一例を示す説明図である。
【図１４】実施例の通信装置が実行する障害ログの取得処理の一例を説明するフローチャートである。
【発明を実施するための形態】
【００１６】
以下、実施例を添付図面に基づいて説明する。
【実施例】
【００１７】
図１は、実施例の通信装置の構成の一例を示すブロック図である。
【００１８】
通信装置１０は、ネットワーク２０６からパケット（データ）を受信し、受信したパケット（データ）を所定の宛先に送信する。通信装置１０は、図１に示すように、制御部１００及び転送部２００から構成される。
【００１９】
制御部１００は、通信装置１０全体の制御を行う。制御部１００は、中央演算処理部１０４、Ｆｌａｓｈメモリ１０１、揮発性メモリ１０５、不揮発性メモリ１０６、メモリ領域制御デバイス１０９、及び転送デバイス１０８を含む。中央演算処理部１０４は、Ｆｌａｓｈメモリ１０１、揮発性メモリ１０５、メモリ領域制御デバイス１０９、転送デバイス１０８、保守用Ｆｌａｓｈメモリ１１８、及び入出力装置１０３と接続され、また、メモリ領域制御デバイス１０９を経由して不揮発性メモリ１０６と接続される。
【００２０】
中央演算処理部１０４は、Ｆｌａｓｈメモリ１０１、揮発性メモリ１０５、及び不揮発性メモリ１０６等の記憶装置に格納される情報を用いて演算処理を実行する。
【００２１】
Ｆｌａｓｈメモリ１０１は、データの書き込みによる性能劣化が発生する不揮発性メモリであり、制御部１００が有する機能を実現するＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）等のデータを格納する。
【００２２】
揮発性メモリ１０５は、運用中に動的に更新されないデータ（更新頻度が低いデータ）、すなわち、静的データ１０２を格納する。揮発性メモリ１０５は、例えばＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）等が考えられる。
【００２３】
不揮発性メモリ１０６は、運用中に動的に更新されるデータ（更新頻度が高いデータ）すなわち、動的データ１０７を格納する。不揮発性メモリ１０６は、データの書き込みによる性能劣化が発生しない不揮発性メモリであり、例えばＭＲＡＭ（Ｍａｇｎｅｔｏｒｅｓｉｓｔｉｖｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）等が考えられる。本実施例では、不揮発性メモリ１０６のメモリ領域が複数のメモリ領域に分割され、一つのメモリ領域にパケットの転送に必要な動的データ１０７が格納される。以下では、メモリ領域を２次元の「面」と表現するが、メモリ領域は３次元であってもよい。また、以下では、メモリ領域制御デバイス１０９を面制御デバイス１０９と表現する。
【００２４】
面制御デバイス１０９は、不揮発性メモリ１０６の各面に対するデータの追加、削除、更新等の制御を行う。面制御デバイス１０９の具体的な処理については後述する。
【００２５】
転送デバイス１０８は、制御部１００及び転送部２００間のデータの転送を行う。
【００２６】
保守用Ｆｌａｓｈメモリ１１８は、通信装置１０からログを取得する場合に、当該ログを一時的に格納する。保守用Ｆｌａｓｈメモリ１１８は、例えば通信装置１０から抜き差し可能なＵＳＢメモリなどが考えられる。
【００２７】
入出力装置１０３は、通信装置１０の管理者等のユーザが通信装置１０のオペレーションを行う装置である。入出力装置１０３は、例えば、管理用コンピュータ、キーボード、マウス、タッチパネル、及びディスプレイ等が考えられる。
【００２８】
転送部２００は、パケットの受信及びパケットの送信を制御する。転送部２００は、転送デバイス２０１、経路検索エンジン２０２、テーブルメモリ２０３、転送エンジン２０４、及び１つ以上のネットワークインタフェース２０５を含む。経路検索エンジン２０２は、転送デバイス２０１、テーブルメモリ２０３、及び転送エンジン２０４と接続される。転送エンジン２０４は、１つ以上のネットワークインタフェース２０５と接続される。図１では、転送エンジン２０４は、ネットワークインタフェース２０５Ａ、２０５Ｂ、２０５Ｃ、２０５Ｄ、２０５Ｅ、２０５Ｆと接続される。
【００２９】
転送デバイス２０１は、転送デバイス１０８と同様のものであり、制御部１００及び転送部２００間のデータの転送を行う。経路検索エンジン２０２は、受信したパケットの転送先を決定する。テーブルメモリ２０３は、経路検索エンジン２０２によって使用される経路情報等を格納する。ネットワークインタフェース２０５は、ネットワーク２０６に接続するインタフェースである。
【００３０】
ネットワーク２０６は、例えば、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＳＡＮ（Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、及びインターネット等が考えられる。なお、本実施例は、通信装置１０に接続されるネットワーク２０６の種類に限定されない。
【００３１】
なお、経路検索エンジン２０２及び転送エンジン２０４は、機能ブロック単位で分割されているが、一つの機能ブロック又は一つのデバイスとして実現してもよい。
【００３２】
ここで、通信装置１０の動作の概略について説明する。
【００３３】
中央演算処理部１０４は、ルーティングプロトコルによる収集された動的な経路データ及びユーザが入出力装置１０３を操作して入力した静的な経路データに基づいて、経路算出処理を実行する。経路算出処理は、管理しているネットワークトポロジが変更されるたびに実行される。
【００３４】
中央演算処理部１０４は、経路算出処理の結果に基づいて現時点の経路情報の差分を更新情報として抽出し、面制御デバイス１０９を介して不揮発性メモリ１０６のメモリ領域の一部（面）に更新情報を動的データ１０７として格納する。本実施例では、更新情報が面制御デバイス１０９を経由して不揮発性メモリ１０６に格納される。また、中央演算処理部１０４は、転送デバイス１０８を経由して更新情報を転送部２００に送信する。
【００３５】
転送デバイス１０８及び転送デバイス２０１は、それぞれ、バケツリレー方式で不揮発性メモリ１０６に格納された更新情報を転送する。これによって、テーブルメモリ２０３に当該更新情報が書き込まれる。
【００３６】
経路検索エンジン２０２は、テーブルメモリ２０３に書き込まれた更新情報に基づいて、ネットワーク２０６から送信されてきたパケットの転送先を決定する。
【００３７】
また、転送エンジン２０４は、経路検索エンジン２０２による宛先検索結果に基づいて、ネットワークインタフェース２０５のいずれかを経由して、ネットワーク２０６から受信したパケットを所定の宛先に転送する。なお、転送先が不明な場合又は通信装置１０宛のパケットだった場合、パケットは、転送デバイス２０１及び転送デバイス１０８を経由して中央演算処理部１０４へ送信され、中央演算処理部１０４によって当該パケットが処理される。
【００３８】
なお、図１に示す通信装置１０の構成は一例であってこれに限定されない。例えば、制御部１００及び転送部２００を冗長構成にしてもよい。
【００３９】
図２は、実施例の制御部１００の構成の一例を説明するブロック図である。
【００４０】
中央演算処理部１０４は、ＣＰＵ１０４１及びＩ／Ｏ（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ）制御部１０４２を有する。ＣＰＵ１０４１は、各種演算処理を実行する。Ｉ／Ｏ制御部１０４２は、転送デバイス１０８等のＩ／Ｏデバイスからのメモリアクセス（ＤＭＡ：Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  ＡＣＣＥＳＳ）及びＣＰＵ１０４１からのメモリアクセス（ＰＩＯ：Ｐｒｏｇｒａｍｍｅｄ  Ｉ／Ｏ）の調停処理を実行する。
【００４１】
ＣＰＵ１０４１は、Ｉ／Ｏ制御部１０４２に接続されるＤＤＲ３に代表されるメモリバス１１１を介して、揮発性メモリ１０５及び後述する面切替制御部１１４と接続される。ここで、メモリバス１１１はメモリアドレス信号の出力に用いられる接続線である。ＣＰＵ１０４１は、Ｉ／Ｏ制御部１０４２に接続されるＰＣＩｅに代表される制御バス１１２を介して、転送デバイス１０８及び後述する面切替制御部１１４と接続される。ここで、制御バス１１２は、通信装置１０内の各種バスを制御するバス制御用のバスであり、メモリバス１１１等のバスにおける信号の入出力タイミング、中央演算処理部１０４と面制御デバイス１０９等の他のデバイスとの間で送受信される制御情報の送信する信号の出力に用いられる接続線である。ＣＰＵ１０４１は、Ｉ／Ｏ制御部１０４２に接続されるＳＡＴＡに代表されるストレージ用バスを介して、Ｆｌａｓｈメモリ１０１と接続される。また、ＣＰＵ１０４１は、活線状態で抜き挿しが可能なＵＳＢ等を代表としたバスを介して保守用Ｆｌａｓｈメモリ１１８と接続される。
【００４２】
面制御デバイス１０９は、面切替制御部１１４、面制御レジスタ１１０、及び面管理テーブル１１３を有する。なお、面制御デバイス１０９は、面管理テーブル１１３及び面制御レジスタ１１０、処理に使用する一時的なデータを格納するメモリ（図示省略）を有する。
【００４３】
面切替制御部１１４は、不揮発性メモリ１０６における面の割り当て及び切り替えを行い、また、中央演算処理部１０４にＣＰＵリセット命令を出力する。ＣＰＵリセット命令は、ＣＰＵ１０４１の起動処理をリセット（停止）する命令である。面切替制御部１１４は、内部バスを介して面管理テーブル１１３及び面制御レジスタ１１０と接続される。また、面切替制御部１１４は、メモリバス１１１を介して不揮発性メモリ１０６と接続される。
【００４４】
本実施例では、中央演算処理部１０４は、メモリバス１１１を介して直接不揮発性メモリ１０６に接続されず、面切替制御部１１４を経由して不揮発性メモリ１０６に接続される。これによって、面切替制御部１１４は、ＣＰＵ１０４１が認識可能な不揮発性メモリ１０６のメモリ領域を特定の領域（面）に限定する。
【００４５】
面制御レジスタ１１０は、不揮発性メモリ１０６における面の制御に必要な情報を格納する。面制御レジスタ１１０の詳細については図４を用いて後述する。面管理テーブル１１３は、不揮発性メモリ１０６における面を管理する情報を格納する。面管理テーブル１１３の詳細については図５を用いて後述する。
【００４６】
本実施例では、中央演算処理部１０４が、データを格納するメモリ領域として、揮発性メモリ１０５及び不揮発性メモリ１０６を動的に決定する。具体的には、中央演算処理部１０４は、図２に示すように情報の削除及び追加等、頻繁に更新される動的データ１０７を不揮発性メモリ１０６に格納し、頻繁に更新されない静的データ１０２を揮発性メモリ１０５に格納する。静的データ１０２は、例えば、コンフィグ情報等、ユーザ契機で適宜変更される情報が考えられる。
【００４７】
なお、経路情報は、周期的に周辺の機器から収集された情報に基づいて設定されるデータ、すなわち、動的データ１０７の特性を有するデータと、ユーザ契機で設定されるデータ、すなわち、静的データ１０２の特性を有するデータとを含む。したがって、中央演算処理部１０４は、揮発性メモリ１０５又は不揮発性メモリ１０６のいずれか一方に経路情報を格納してもよいし、特性の異なるデータを分割することができる場合には、揮発性メモリ１０５及び不揮発性メモリ１０６にそれぞれのデータを格納してもよい。
【００４８】
次に、図３を用いて本実施例の不揮発性メモリ１０６の構成について説明する。図３は、実施例の不揮発性メモリ１０６の構成の一例を示す説明図である。
【００４９】
本実施例では不揮発性メモリ１０６のメモリ領域が、実利用メモリ領域１０６７及び制御フラグ格納領域１０６８の二つに分けて管理される。実利用メモリ領域１０６７は、データを格納するメモリ領域である。本実施例の実利用メモリ領域１０６７は、複数の面に分割され、各面にデータが格納される。以下の説明では、実利用メモリ領域１０６７を所定のサイズの複数の面に分割することを、面を設定するとも記載する。制御フラグ格納領域１０６８は、面を制御するためのフラグ及び情報を格納するメモリ領域である。
【００５０】
本実施例では、不揮発性メモリ１０６の制御フラグ格納領域１０６８の定義情報が、面制御デバイス１０９等の通信装置１０の内部に設定されているものとする。定義情報には、不揮発性メモリ１０６における制御フラグ格納領域１０６８の先頭アドレス（例えば、０ｘ０００００００）、及びサイズが含まれる。なお、制御フラグ格納領域１０６８は、必要な情報を格納できるメモリ領域であるものとする。
【００５１】
実利用メモリ領域１０６７には、一つ以上の面を含む。本実施例では、一つの面は、データエリア１０６２、保護ビット１０６３、マジックナンバ１０６４、及びタイムスタンプ１０６５から構成される。
【００５２】
データエリア１０６２は、データを格納するメモリ領域である。保護ビット１０６３は、保護ビットを設定するメモリ領域である。ここで、保護ビットは、面に対する新たなデータの上書きを抑止する制御を実現するためのビットである。保護ビット１０６３には、保護ビットが無効であることを示す「０」、又は、保護ビットが有効であることを示す「１」のいずれかが格納される。なお、保護ビット１０６３には初期値として「０」が格納される。
【００５３】
マジックナンバ１０６４は、データエリア１０６２に格納されるデータの整合性を確認するための識別情報を格納するメモリ領域である。タイムスタンプ１０６５は、データエリア１０６２にデータが格納された時間（タイムスタンプ）を格納するメモリ領域である。
【００５４】
制御フラグ格納領域１０６８は、不揮発性メモリ初期化パスフラグ１０６６及びライトポイント格納エリア１０６１を含む。
【００５５】
不揮発性メモリ初期化パスフラグ１０６６は、初期設定処理を実行する必要があるか否かを示すフラグを格納するメモリ領域である。不揮発性メモリ初期化パスフラグ１０６６が無効化されている場合、初期設定処理を実行する必要があることを示す。ライトポイント格納エリア１０６１は、中央演算処理部１０４にアサインする面の候補となる面の識別情報を格納するメモリ領域である。
【００５６】
次に、図４及び図５を用いて、面切替制御部１１４が保持する情報について説明する。
【００５７】
図４は、実施例の面制御レジスタ１１０の一例を示す説明図である。
【００５８】
面制御レジスタ１１０は、最大面数１１０１、制御フラグ格納領域サイズ１１０２、実利用メモリ容量１１０３、マジックナンバ１１０４、ソフトウェア起動確認フラグ１１０５、及び面選択フラグ１１０６を含む。
【００５９】
最大面数１１０１は、不揮発性メモリ１０６に設定された面の数である。制御フラグ格納領域サイズ１１０２は、制御フラグ格納領域１０６８のメモリ容量である。実利用メモリ容量１１０３は、実利用メモリ領域１０６７のメモリ容量である。マジックナンバ１１０４は、面に格納されるデータの整合性を確認するための識別情報である。なお、マジックナンバ１１０４には、面制御デバイス１０９の固有の値が予め設定されているものとする。
【００６０】
ソフトウェア起動確認フラグ１１０５は、ＯＳ等のソフトウェアの起動完了を確認するためのフラグである。本実施例のソフトウェア起動確認フラグ１１０５には、初期値としてフラグが無効であることを示す「０」が格納される。後述するように、ソフトウェアの起動が完了した場合、ソフトウェア起動確認フラグ１１０５にはフラグが有効であることを示す「１」が格納される。
【００６１】
面選択フラグ１１０６は、不揮発性メモリ１０６の各面に格納されるデータを障害ログとして取得するか否かを示すフラグである。面選択フラグ１１０６は、最大面数１１０１に格納される値と同一の数だけ存在する。面選択フラグ１１０６には、初期値として、面に格納されるデータを障害ログとして取得しないこと、すなわち、フラグが無効であることを示す「０」が格納される。後述するように、任意の面に格納されるデータを障害ログとして取得する場合には、当該面に対応する面選択フラグ１１０６にはフラグが有効であることを示す「１」が格納される。
【００６２】
図５は、実施例の面管理テーブル１１３の一例を示す説明図である。
【００６３】
面管理テーブル１１３は、面ＩＤ１１３１、不揮発性メモリ格納領域１１３２、タイムスタンプ１１３３、及び故障フラグ１１３４を含む。
【００６４】
面ＩＤ１１３１は、不揮発性メモリ１０６内の各面を一意に識別するための識別番号である。不揮発性メモリ格納領域１１３２は、面に対応するメモリ領域を特定するためのアドレス範囲である。タイムスタンプ１１３３は、面にデータが格納された時間である。故障フラグ１１３４は、面に格納されるデータにデータ化け等の不具合が発生しているか否かを示すフラグである。故障フラグ１１３４には、初期値として、不具合が発生していないこと、すなわち、フラグが無効であることを示す「０」が格納される。
【００６５】
次に、図６を用いて通信装置１０の一連の処理の流れについて説明する。図６は、実施例の通信装置１０の処理の流れを示す説明図である
【００６６】
図６では、横軸は時間軸に対応する。また、三角の記号は通信装置１０における状態変化を表す。以下、三つのケース３００、４００、５００に分けて通信装置１０の処理の流れについて説明する。
【００６７】
まず、通常の通信装置１０の起動処理の流れを示すケース３００について説明する。通信装置１０に初めて電源が投入されると（ステップＳ１０）、通信装置１０は、中央演算処理部１０４及び面制御デバイス１０９等の各種デバイスを起動する（ステップＳ１１）。このとき、面制御デバイス１０９は、中央演算処理部１０４のＣＰＵ１０４１に対してＣＰＵリセット命令を出力し、不揮発性メモリ１０６を初期化し、また、利用面を決定する（ステップＳ１２）。ここで、利用面とは、中央演算処理部１０４が動的データ１０７を格納するメモリ領域と提供される面をいう。また、初期化とは、格納された情報を削除することをいう。
【００６８】
具体的には、面制御デバイス１０９が、不揮発性メモリ１０６のメモリ領域に面を設定し、設定された面の中から初期の利用面を決定する。面制御デバイス１０９が、中央演算処理部１０４の起動前に不揮発性メモリ１０６を初期化し、また、利用面を決定することによって、中央演算処理部１０４がメモリ空間にアサインする不揮発性メモリ１０６のメモリ領域を設定できる。ここで、メモリ空間とは中央演算処理部１０４が不揮発性メモリ１０６にアクセスするアドレスが割り当てられたメモリ領域をいう。
【００６９】
通信装置１０は、ＢＩＯＳを起動させ、また、ＣＰＵのリセットを解除する（ステップＳ１３）。通信装置１０は、不揮発性メモリ１０６の所定の利用面をメモリ空間にアサインする（ステップＳ１４）。
【００７０】
具体的には、面制御デバイス１０９が中央演算処理部１０４へのＣＰＵリセット命令の出力を停止する。これによって、中央演算処理部１０４が、通信装置１０の各種デバイスの認識処理を開始する。本実施例では、面制御デバイス１０９によって不揮発性メモリ１０６の所定のメモリ領域、すなわち、一つの面のみを中央演算処理部１０４が認識できるように制御される。そのため、中央演算処理部１０４は、面制御デバイス１０９によって決定された一つの面をメモリ空間にアサインする。
【００７１】
さらに、通信装置１０は、ＯＳの起動処理を実行する（ステップＳ１５）。その後、通信装置１０は、ソフトウェアの通常運用を開始する（ステップＳ１６）。面制御デバイス１０９は、ソフトウェアの通常運用後に、アサインされた面の保護ビット１０６３に「１」を設定する（ステップＳ１７）。
【００７２】
次に、通常の通信装置１０の再起動処理の流れを示すケース４００について説明する。通信装置１０は、ソフトウェアの通常運用を開始している（ステップＳ２０）。再起動オペレーションが発生した場合（ステップＳ２１）、再起動のために通信装置１０に再度電源が投入される（ステップＳ２２）。面制御デバイス１０９は、通信装置１０の再起動前に、アサインされた面の保護ビット１０６３に「０」を設定する（ステップＳ２３）。
【００７３】
通信装置１０は、各種デバイスを起動すると（ステップＳ２４）、面制御デバイス１０９は、利用面を切り替える（ステップＳ２５）。再起動を契機にこれまで提供されていた利用面が他の面に切り替えられる。なお、切替前の面の保護ビット１０６３には「１」が設定されていないため、新たなデータを格納するメモリ領域として再利用できる。
【００７４】
通信装置１０は、ＢＩＯＳを起動させ、また、ＣＰＵのリセットを解除する（ステップＳ２６）。通信装置１０は、面制御デバイス１０９によって決定された利用面をメモリ空間にアサインする（ステップＳ２７）。さらに、通信装置１０は、ＯＳの起動処理を実行する（ステップＳ２８）。その後、通信装置１０は、ソフトウェアの通常運用を開始する（ステップＳ２９）。面制御デバイス１０９は、ソフトウェアの通常運用後に、アサインされた面の保護ビット１０６３に「１」を設定する。
【００７５】
次に、障害発生時の通信装置１０の再起動処理の流れを示すケース５００について説明する。
【００７６】
通信装置１０は、ソフトウェアの通常運用を開始している（ステップＳ３０）。障害が発生した場合（ステップＳ３１）、再起動のために通信装置１０に再度電源が投入される（ステップＳ３２）。このとき、アサインされた面の保護ビット１０６３は変更されない。通信装置１０は、各種デバイスを起動すると（ステップＳ３３）、面制御デバイス１０９は、利用面を切り替える（ステップＳ３４）。
【００７７】
このとき、これまで利用していた利用面の保護ビット１０６３には「１」が設定されているため、切替前の面のデータエリア１０６２に格納されるデータが障害ログとして保存される。
【００７８】
通信装置１０は、ＢＩＯＳを起動させ、また、ＣＰＵのリセットを解除する（ステップＳ３５）。通信装置１０は、不揮発性メモリ１０６の所定の利用面をメモリ空間にアサインする（ステップＳ３６）。さらに、通信装置１０は、ＯＳの起動処理を実行する（ステップＳ３７）。その後、通信装置１０は、ソフトウェアの通常運用を開始する（ステップＳ３８）。面制御デバイス１０９は、ソフトウェアの通常運用後に、アサインされた面の保護ビット１０６３に「１」を設定する（ステップＳ３９）。
【００７９】
通信装置１０は、自動的に又は管理者からの指示にしたがって、保護ビット１０６３に「１」が設定された面に格納されるデータを障害ログとして取得する（ステップＳ４０）。
【００８０】
ケース３００、４００、５００を用いて説明したように、本実施例の通信装置１０は、不揮発性メモリ１０６の一部のメモリ領域（面）を中央演算処理部１０４が動的データ１０７を格納するメモリ領域として提供する。また、通信装置１０は、通常の再起動処理の場合、保護ビット１０６３を無効化した後に、中央演算処理部１０４が使用する面を切り替え、また、障害発生に起因する再起動処理の場合、保護ビット１０６３を有効化したまま、中央演算処理部１０４が使用する面を切り替える。なお、以下の説明では障害発生に起因する再起動処理を障害再起動処理とも記載する。
【００８１】
従来、通信装置１０は、障害が発生した場合、障害ログのダンプを取得した後に再起動を行っていたため、通信装置１０の停止時間が長くなるという問題があった。しかし、本実施例の通信装置１０は、面を切り替えることによって障害ログを保存できるため、停止時間を短くすることができる。
【００８２】
また、保護ビット１０６３が「１」でない面は、新たにデータを上書きできるように制御される。そのため、不揮発性メモリ１０６のメモリ領域を有効に活用することができ、障害解析に必要な障害ログのみを不揮発性メモリ１０６に保存することができる。
【００８３】
なお、面制御デバイス１０９の起動時間、不揮発性メモリ１０６の初期化、利用面の決定に必要な処理時間は、障害ログのダンプの取得に必要な時間より短いため、通信装置１０の通常運用に与える影響は十分に小さい。
【００８４】
次に、通信装置１０の起動時の処理における面制御デバイス１０９の処理の詳細について説明する。
【００８５】
図７は、実施例の面制御デバイス１０９が実行する処理の概要を説明するフローチャートである。通信装置１０に電源が投入され、各種デバイスが起動した後に面制御デバイス１０９は、以下で説明する処理を開始する。
【００８６】
面制御デバイス１０９は、不揮発性メモリ１０６に対する初期設定処理を実行する（ステップＳ１００）。初期設定処理では、面制御デバイス１０９は、不揮発性メモリ１０６のメモリ領域を所定のサイズのメモリ領域に分割することによって、複数の面を設定する。初期設定処理の詳細は図８Ａ及び図８Ｂを用いて後述する。
【００８７】
面制御デバイス１０９は、不揮発性メモリ１０６に設定された複数の面の中から、中央演算処理部１０４の利用面を決定するために、利用面決定処理を実行する（ステップＳ２００）。利用面決定処理では、通信装置１０の起動の契機及び不揮発性メモリ１０６の各面の状態に応じて、ログ更新面選択処理及び不揮発性メモリ整合性確認処理が実行される（ステップＳ３００、ステップＳ４００）。利用面決定処理の詳細は図９Ａ及び図９Ｂを用いて、ログ更新面選択処理の詳細は図１０を用いて、不揮発性メモリ整合性確認処理の詳細は図１１を用いて後述する。
【００８８】
面制御デバイス１０９は、利用面決定処理が完了した後、ソフトウェア正常起動確認処理を実行する（ステップＳ５００）。ソフトウェア正常起動確認処理の詳細は図１２Ａ及び図１２Ｂを用いて後述する。
【００８９】
ソフトウェア正常起動確認処理が正常に完了した場合、通信装置１０は、通常の運用状態に移行する。通常の運用状態では、図１を用いた説明したように、通信装置１０は、ネットワーク２０６に対するパケットの転送処理を実行する。
【００９０】
ソフトウェア正常起動確認処理が正常に完了しない場合、又は、再起動オペレーション若しくは障害が発生した場合、通信装置１０はステップＳ１００に戻り、面制御デバイス１０９は同様の処理を実行する。
【００９１】
後述するように、本実施例では、不揮発性メモリ１０６の面に対して、リングバッファ形式でデータが更新される。通常の再起動処理の場合、保護ビット１０６３は無効化される。一方、障害再起動処理の場合、保護ビット１０６３は無効化されない。そのため、リングバッファ形式で面の管理を実現しつつ、不揮発性メモリ１０６に障害ログを残すことができる。
【００９２】
図８Ａ及び図８Ｂは、実施例の面制御デバイス１０９が実行する初期設定処理の一例を説明するフローチャートである。
【００９３】
面制御デバイス１０９の面切替制御部１１４は、通信装置１０に電源が投入された後に初期設定処理を開始する。なお、面制御デバイス１０９は、通信装置１０の管理者によって不揮発性メモリ１０６、面制御レジスタ１１０、及び面管理テーブル１１３が初期化された場合に初期設定処理を実行してもよい。
【００９４】
面切替制御部１１４は、中央演算処理部１０４に対してＣＰＵリセット命令を発行する（ステップＳ１００１）。これによって、中央演算処理部１０４の起動が停止する。これは、中央演算処理部１０４がメモリ空間に不揮発性メモリ１０６のメモリ領域をアサインする前に、不揮発性メモリ１０６の設定を完了させるためである。
【００９５】
なお、通信装置１０に電源管理用のデバイスを設けて、面制御デバイス１０９及び中央演算処理部１０４の起動シーケンスを制御することによって、同様の手順を実現してもよい。
【００９６】
面切替制御部１１４は、不揮発性メモリ１０６の制御フラグ格納領域１０６８の不揮発性メモリ初期化パスフラグ１０６６の値を読み出し（ステップＳ１００２）、不揮発性メモリ初期化パスフラグ１０６６が有効化されているか否かを判定する（ステップＳ１００３）。すなわち、不揮発性メモリ１０６の初期設定が必要であるか否かが判定される。
【００９７】
具体的には、面切替制御部１１４は、制御フラグ格納領域１０６８が設定されるメモリ領域の先頭アドレスに基づいて不揮発性メモリ１０６にアクセスし、不揮発性メモリ初期化パスフラグ１０６６の値を読み出す。
【００９８】
不揮発性メモリ初期化パスフラグ１０６６が有効化されている場合（ステップＳ１００３がＹＥＳ）、すでに不揮発性メモリ１０６の初期化が完了しているため、面切替制御部１１４は初期設定処理を終了する。
【００９９】
不揮発性メモリ初期化パスフラグ１０６６が無効化されている場合（ステップＳ１００３がＮＯ）、面切替制御部１１４は、面制御レジスタ１１０及び面管理テーブル１１３に設定された値を初期化する（ステップＳ１００４）。
【０１００】
具体的には、面切替制御部１１４は、面制御レジスタ１１０の最大面数１１０１、制御フラグ格納領域サイズ１１０２及び実利用メモリ容量１１０３の値を削除し、ソフトウェア起動確認フラグ１１０５に「０」を設定する。面切替制御部１１４は、面制御レジスタ１１０に含まれる全ての面選択フラグ１１０６を削除する。また、面切替制御部１１４は、面管理テーブル１１３から全てのエントリを削除する。
【０１０１】
面切替制御部１１４は、不揮発性メモリ１０６を初期化する（ステップＳ１００５）。
【０１０２】
具体的には、面切替制御部１１４は、不揮発性メモリ１０６の実利用メモリ領域１０６７を初期化する。また、面切替制御部１１４は、制御フラグ格納領域１０６８の不揮発性メモリ初期化パスフラグ１０６６を無効化し、また、ライトポイント格納エリア１０６１に初期値（例えば「１」）を設定する。また、面切替制御部１１４は、不揮発性メモリ１０６のメモリ領域のサイズを取得する。
【０１０３】
面切替制御部１１４は、面制御レジスタ１１０の制御フラグ格納領域サイズ１１０２及び実利用メモリ容量１１０３に値を格納する（ステップＳ１００６）。
【０１０４】
具体的には、面切替制御部１１４は、制御フラグ格納領域１０６８の定義情報から制御フラグ格納領域１０６８のサイズを取得し、取得された値を制御フラグ格納領域サイズ１１０２に格納する。面切替制御部１１４は、不揮発性メモリ１０６のメモリ領域のサイズから制御フラグ格納領域１０６８のサイズを減算することによって、実利用メモリ領域１０６７のサイズを算出する。面切替制御部１１４は、算出された値を実利用メモリ容量１１０３に格納する。
【０１０５】
面切替制御部１１４は、実利用メモリ領域１０６７に設定可能な最大面数を算出し、面制御レジスタ１１０を更新する（ステップＳ１００７）。
【０１０６】
具体的には、面切替制御部１１４は、面制御レジスタ１１０の最大面数１１０１に算出された値を格納し、また、面制御レジスタ１１０に算出された値の数だけ面選択フラグ１１０６を生成し、生成された面選択フラグ１１０６に「０」を設定する。
【０１０７】
なお、一つの面のサイズは、面切替制御部１１４に設定されているものとする。例えば、面切替制御部１１４に予め面のサイズの情報を入力する方法、管理者からの入力を受け付ける方法などが考えられる。また、不揮発性メモリ１０６の制御フラグ格納領域１０６８の一部に一つの面のサイズの情報を格納し、面切替制御部１１４が当該情報を読み出してもよい。
【０１０８】
面切替制御部１１４は、算出された最大面数に基づいて実利用メモリ領域１０６７を分割し、面管理テーブル１１３を更新する（ステップＳ１００８）。具体的には、以下のような処理が実行される。
【０１０９】
面切替制御部１１４は、実利用メモリ領域１０６７を最大面数分のメモリ領域（面）に分割する。また、面切替制御部１１４は、分割された各メモリ領域に、データエリア１０６２、保護ビット１０６３、マジックナンバ１０６４、及びタイムスタンプ１０６５に対応するメモリ領域を設定する。この時点では、データエリア１０６２、保護ビット１０６３、マジックナンバ１０６４、及びタイムスタンプ１０６５にはデータは格納されていない。
【０１１０】
また、面切替制御部１１４は、面管理テーブル１１３に最大面数のエントリを生成する。面切替制御部１１４は、生成された各エントリの不揮発性メモリ格納領域１１３２に、各面に対応するメモリ領域の開始アドレス及び終了アドレスを設定する。面切替制御部１１４は、生成された各エントリの面ＩＤ１１３１に降順に面の識別番号を設定する。また、面切替制御部１１４は、生成された各エントリの故障フラグ１１３４に「０」を設定する。なお、面ＩＤ１１３１に設定する面の識別番号は昇順に設定されてもよい。
【０１１１】
面切替制御部１１４は、面制御レジスタ１１０のマジックナンバ１１０４の値を読み出し（ステップＳ１００９）、不揮発性メモリ１０６の各面のマジックナンバ１０６４に読み出された値を設定する（ステップＳ１０１０）。
【０１１２】
面切替制御部１１４は、不揮発性メモリの全ての面のマジックナンバ１０６４に設定された値が面制御レジスタ１１０のマジックナンバ１１０４の値と一致するか否かを判定する（ステップＳ１０１１）。
【０１１３】
全ての面のマジックナンバ１０６４に設定された値が面制御レジスタ１１０のマジックナンバ１１０４の値と一致すると場合（ステップＳ１０１１がＹＥＳ）、面切替制御部１１４は、ステップＳ１０１３に進む。
【０１１４】
全ての面のマジックナンバ１０６４に設定された値が面制御レジスタ１１０のマジックナンバ１１０４の値と一致しない場合（ステップＳ１０１１がＮＯ）、面切替制御部１１４は、面制御レジスタ１１０のマジックナンバ１１０４の値と一致していない面に対応するエントリの故障フラグ１１３４を有効化する（ステップＳ１０１２）。
【０１１５】
具体的には、面切替制御部１１４は、故障フラグ１１３４に「１」を設定する。なお、面切替制御部１１４は、ステップＳ１０１２の処理の代わりに、ステップＳ１００２又はステップＳ１００９に戻ってもよい。面のマジックナンバ１０６４に設定された値が面制御レジスタ１１０のマジックナンバ１１０４の値と一致しない場合、データの欠損及びデータ化け等が発生することによって当該面にはデータを正しく格納できないことを示しており、面が故障している可能性がある。そのため、前述した面の故障フラグ１１３４に「１」が設定される。
【０１１６】
ステップＳ１０１１又はステップＳ１０１２の処理が完了した後、面切替制御部１１４は、不揮発性メモリ１０６の制御フラグ格納領域１０６８にアクセスし、不揮発性メモリ初期化パスフラグ１０６６を有効化する（ステップＳ１０１３）。その後、面切替制御部１１４は、初期設定処理を終了する。
【０１１７】
図９Ａ及び図９Ｂは、実施例の面制御デバイス１０９が実行する利用面決定処理の一例を説明するフローチャートである。
【０１１８】
面制御デバイス１０９の面切替制御部１１４は、初期設定処理が終了した後、以下で説明する利用面決定処理を開始する。
【０１１９】
面切替制御部１１４は、不揮発性メモリ１０６にアクセスし、ライトポイント格納エリア１０６１から値を読み出し、読み出された値を変数ＷＰとして保持する（ステップＳ２００１）。面切替制御部１１４は、面管理テーブル１１３から変数ＷＰに対応する面のアドレスを取得する（ステップＳ２００２）。
【０１２０】
具体的には、面切替制御部１１４は、面ＩＤ１１３１の値が変数ＷＰの値と一致するエントリを検索し、検索されたエントリの不揮発性メモリ格納領域１１３２から面のアドレスを取得する。
【０１２１】
面切替制御部１１４は、取得されたアドレスに基づいて不揮発性メモリ１０６の変数ＷＰの値に対応する面にアクセスして、当該面の保護ビット１０６３の値を読み出す（ステップＳ２００３）。さらに、面切替制御部１１４は、読み出された値に基づいて保護ビット１０６３が有効化されているか否かを判定する（ステップＳ２００４）。すなわち、保護ビット１０６３から読み出された値が「１」であるか否かが判定される。
【０１２２】
保護ビット１０６３が無効化されている場合（ステップＳ２００４がＮＯ）、面切替制御部１１４は、変数ＷＰの値に対応する面に不具合が発生しているか否かを判定するために不揮発性メモリ整合性確認処理を実行する（ステップＳ４００）。また、面切替制御部１１４は、当該処理の結果が正常完了であるか否かを判定する（ステップＳ２００５）。なお、不揮発性メモリ整合性確認処理では、変数ＷＰの値に対応する面が処理対象の面として入力される。
【０１２３】
不揮発性メモリ整合性確認処理の処理結果が正常完了である場合（ステップＳ２００５がＹＥＳ）、面切替制御部１１４は、変数ＷＰの値に対応する面を中央演算処理部１０４の利用面として決定し、ステップＳ２００８に進む。
【０１２４】
保護ビット１０６３が有効化されている場合（ステップＳ２００４がＹＥＳ）、又は、不揮発性メモリ整合性確認処理の処理結果が正常完了でない場合（ステップＳ２００５がＮＯ）、面切替制御部１１４は、変数ＷＰの値に対応する面を中央演算処理部１０４の利用面として選択できない。そこで、面切替制御部１１４は、変数ＷＰの値に対応する面以外の面の中で利用可能な全ての面の保護ビット１０６３の値を読み出す（ステップＳ２００６）。さらに、面切替制御部１１４は、利用可能な全ての面の保護ビット１０６３が有効化されているか否かを判定する（ステップＳ２００７）。ここで、利用可能な面とは故障フラグ１１３４が無効化された面を示す。具体的には、以下のような処理が実行される。
【０１２５】
面切替制御部１１４は、面管理テーブル１１３を参照し、面ＩＤ１１３１の値が変数ＷＰの値と異なるエントリの中から、故障フラグ１１３４が「０」であるエントリを検索する。すなわち、面切替制御部１１４は、不揮発性メモリ１０６の面の中から利用可能な全ての面を検索する。
【０１２６】
面切替制御部１１４は、検索された各エントリの不揮発性メモリ格納領域１１３２に格納されるアドレスに基づいて、当該エントリに対応する面の保護ビット１０６３の値を読み出す。面切替制御部１１４は、全ての面の保護ビット１０６３の値が「１」であるか否かを判定する。以上が、ステップＳ２００６及びステップＳ２００７の処理の説明である。
【０１２７】
利用可能な全ての面の保護ビット１０６３が有効化されている場合（ステップＳ２００７がＹＥＳ）、面切替制御部１１４は、保護ビット１０６３が有効化されている面の中から中央演算処理部１０４の利用面を決定するために更新ログ選択処理を実行する（ステップＳ３００）。これによって、中央演算処理部１０４の利用面が決定される。
【０１２８】
面切替制御部１１４は、中央演算処理部１０４の利用面として決定された面にアクセスして、当該面のデータエリア１０６２及びタイムスタンプ１０６５を初期化し（ステップＳ２００８）、また、変数ＷＰの値に「１」を加算した値をライトポイント格納エリア１０６１に設定する（ステップＳ２００９）。
【０１２９】
具体的には、面切替制御部１１４は、データエリア１０６２からデータを削除し、タイムスタンプ１０６５からタイムスタンプを削除する。
【０１３０】
面切替制御部１１４は、面制御レジスタ１１０の決定された面に対応する面選択フラグ１１０６の操作を禁止する（ステップＳ２０１０）。例えば、面切替制御部１１４は、面選択フラグ１１０６へのアクセス属性を読み出しのみに設定する。その後、面切替制御部１１４は、利用面決定処理を終了する。ステップＳ２０１０の処理は、通信装置１０の起動処理とは異なる処理として実行される障害ログの取得処理において、決定された面への操作を禁止するためのものである。
【０１３１】
ステップＳ２００７において、少なくとも一つの利用可能な面の保護ビット１０６３が無効化されている場合（ステップＳ２００７がＮＯ）、面切替制御部１１４は、変数ＷＰの値に「１」を加算した値を新たな変数ＷＰとして設定する（ステップＳ２０１１）。
【０１３２】
面切替制御部１１４は、変数ＷＰの値と最大面数とを比較し（ステップＳ２０１２）、変数ＷＰの値が最大面数と一致するか否かを判定する（ステップＳ２０１３）。例えば、最大面数が「Ｎ−１」の場合、面切替制御部１１４は、変数ＷＰの値が「Ｎ−１」であるか否かを判定する。
【０１３３】
変数ＷＰの値が最大面数と一致しない場合（ステップＳ２０１３がＮＯ）、面切替制御部１１４は、ステップＳ２００２に戻り同様の処理を実行する。
【０１３４】
変数ＷＰの値が最大面数と一致する場合（ステップＳ２０１３がＹＥＳ）、面切替制御部１１４は、変数ＷＰの値を「１」に設定し（ステップＳ２０１４）、その後ステップＳ２００２に戻り同様の処理を実行する。
【０１３５】
ステップＳ２００９において、面切替制御部１１４は、面が決定された後、当該面の次の面の識別番号を不揮発性メモリ１０６上のライトポイント格納エリア１０６１に設定することによって、通常運用中の電源障害等のハードウェア障害が発生した場合でも、再起動後の中央演算処理部１０４の利用面の候補を特定することが可能となり、リングバッファとしての機能が維持することができる。
【０１３６】
なお、面切替制御部１１４は、ステップＳ２００７の判定処理の前に、利用可能な全ての面の保護ビット１０６３の値を読み出していたが、以下のような処理でもよい。すなわち、面切替制御部１１４は、ステップＳ２００７の判定処理の実行回数をカウントする変数を保持し、そのカウント値が最大面数と一致するまで変数ＷＰの値をカウントアップする。このとき、面切替制御部１１４は、一度だけステップＳ２００６の処理を実行し、読み出した保護ビット１０６３の値を一時的に保持する。これによって、不揮発性メモリ１０６へのアクセス回数を削減できる。
【０１３７】
前述したように、本実施例では、全ての面にデータが格納された状態において新たにデータを格納する場合に、所定の制御ポリシにしたがって、データを格納する面が選択される。これによって、不揮発性メモリ１０６の面におけるデータをリングバッファ形式で更新することができ、また、所定の条件を満たすデータが不揮発性メモリ１０６に障害ログとして残る。
【０１３８】
図１０は、実施例の面制御デバイス１０９が実行するログ更新面選択処理の一例を説明するフローチャートである。
【０１３９】
面制御デバイス１０９の面切替制御部１１４は、利用面決定処理において利用可能な全ての面の保護ビット１０６３が有効化されている場合に、以下で説明するログ更新面選択処理を開始する。
【０１４０】
面切替制御部１１４は、不揮発性メモリ１０６の全ての面のタイムスタンプ１０６５の値を読み出し（ステップＳ３００１）、読み出された値に基づいて面管理テーブル１１３を更新する（ステップＳ３００２）。
【０１４１】
具体的には、面切替制御部１１４は、各面のタイムスタンプ１０６５から取得された値を、各面に対応するエントリのタイムスタンプ１１３３に設定する。
【０１４２】
面切替制御部１１４は、更新された面管理テーブル１１３に基づいて、タイムスタンプが最も古い障害ログが格納される面を特定する（ステップＳ３００３）。具体的には、以下のような処理が実行される。
【０１４３】
面切替制御部１１４は、更新された面管理テーブル１１３を参照し、故障フラグ１１３４が「０」であるエントリを全て抽出する。面切替制御部１１４は、抽出されたエントリの中からタイムスタンプ１１３３の値が最も古いエントリを選択する。面切替制御部１１４は、選択されたエントリに基づいて、当該エントリに対応する面の保護ビット１０６３の値を読み出す。
【０１４４】
面切替制御部１１４は、読み出された保護ビット１０６３の値が「１」であるか否かを判定する。読み出された保護ビット１０６３の値が「１」である場合、面切替制御部１１４は、選択されたエントリに対応する面を、最も古い障害ログが格納される面として特定する。
【０１４５】
読み出された保護ビット１０６３の値が「１」ではない場合、面切替制御部１１４は、抽出されたエントリの中からタイムスタンプ１１３３の値が２番目に古いエントリを選択し、前述した処理を実行する。面切替制御部１１４は、最も古い障害ログが格納される面が特定されるまで、前述した処理を繰り返し実行する。面切替制御部１１４は、特定された面の面ＩＤ１１３１を一時的に保持する。以上がステップＳ３００３の処理の説明である。
【０１４６】
面切替制御部１１４は、変数Ｊに「１」を設定する（ステップＳ３００４）。また、面切替制御部１１４は、面管理テーブル１１３を参照して、最も古い障害ログが格納される面を除いた面の中から利用可能な全ての面を抽出し（ステップＳ３００５）、抽出された利用可能な全ての面の中からＪ番目にタイムスタンプが古い面を選択する（ステップＳ３００６）。
【０１４７】
具体的には、面切替制御部１１４は、最も古い障害ログが格納される面に対応するエントリを検索対象から除外する。面切替制御部１１４は、残りの面の中から故障フラグ１１３４が「０」であるエントリを全て抽出し、一時的に抽出されたエントリを保持する。面切替制御部１１４は、抽出されたエントリのタイムスタンプ１１３３の値を参照して、Ｊ番目に古いタイムスタンプを特定する。
【０１４８】
さらに、面切替制御部１１４は、選択された面に不具合が発生しているか否かを判定するために不揮発性メモリ整合性確認処理を実行する（ステップＳ４００）。また、面切替制御部１１４は、当該処理の結果が正常完了であるか否かを判定する（ステップＳ３００７）。なお、不揮発性メモリ整合性確認処理では、選択された面に対応するエントリの面ＩＤ１１３１の値が処理対象の面として入力される。つまり、面切替制御部１１４は、選択された面に対応するエントリの面ＩＤ１１３１を変数ＷＰとして設定し、不揮発性メモリ整合性確認処理を実行する。
【０１４９】
不揮発性メモリ整合性確認処理の処理結果が正常完了である場合（ステップＳ３００７がＹＥＳ）、面切替制御部１１４は、不揮発性メモリ１０６のＪ番目に古い面の保護ビット１０６３を無効化する（ステップＳ３００８）。面切替制御部１１４は、Ｊ番目に古い面に対応するエントリの面ＩＤ１１３１の値を変数ＷＰとして設定し（ステップＳ３００９）、ログ更新面選択処理を終了する。
【０１５０】
ステップＳ３００７において、不揮発性メモリ整合性確認処理の処理結果が正常完了でない場合（ステップＳ３００７がＮＯ）、面切替制御部１１４は、抽出された面の中に選択可能な面が存在するか否かを判定する（ステップＳ３０１０）。すなわち、処理されていない面が存在するか否かが判定される。
【０１５１】
抽出された面の中に選択可能な面が存在する場合（ステップＳ３０１０がＹＥＳ）、面切替制御部１１４は、変数Ｊの値に「１」を加算した値を新たな変数Ｊとして設定して（ステップＳ３０１１）、ステップＳ３００６に戻り、同様の処理を実行する。一方、抽出された面の中に選択可能な面が存在しない場合（ステップＳ３０１０がＮＯ）、面切替制御部１１４は、通信装置１０の起動を中断し、通信装置１０を停止させる。
【０１５２】
不揮発性メモリ１０６の面に対するデータの更新はリングバッファ形式で管理される。そのため、面切替制御部１１４は、通常、全ての面にデータが格納されている場合、一番古いデータが格納される面に新たなデータを上書きする。この場合、通信装置１０が起動してから初めて発生した障害に関する障害ログを保存することができない。
【０１５３】
本実施例では、ユーザが通信装置１０の障害を解析するために障害ログを取得する場合、通信装置１０が正常に起動した後から障害ログが取得されるまでの間に、最も古い障害ログ（最初の障害ログ）及び最も新しい障害ログ（直前の障害ログ）を不揮発性メモリ１０６に必ず残すことを想定している。これによって、１次障害及び２次障害で問題の切り分け等の障害解析に役立てることができる。したがって、面切替制御部１１４は、ユーザオペレーション又は障害の発生により通信装置１０が再起動を繰り返した場合に、最初の障害ログが格納される面に新たなデータが上書きされるのを防止する必要がある。
【０１５４】
そこで、面切替制御部１１４は、利用可能な全ての面に保護ビット１０６３が有効化されている場合、最初の障害ログを格納する面を除外した面の中から新たなデータを上書きする面を選択する。前述のような制御によって、不揮発性メモリ１０６におけるリングバッファ形式のログ更新及び障害解析に必要な障害ログの保存を実現している。
【０１５５】
なお、本実施例の面切替制御部１１４は、最初の障害ログ及び直前の障害ログを必ず不揮発性メモリ１０６に残すように制御しているがこれに限定されない。面切替制御部１１４に予めログの更新を定義した制御ポリシを設定することが考えられる。例えば、面切替制御部１１４は、制御ポリシに基づいて、最初の障害の発生後、通信装置１０が再起動し、再び発生した障害に関する障害ログを不揮発性メモリ１０６に残すように制御してもよい。また、不揮発性メモリ１０６に残す障害ログの数を制御ポリシとして設定することもできる。
【０１５６】
図１１は、実施例の面制御デバイス１０９が実行する不揮発性メモリ整合性確認処理の一例を説明するフローチャートである。
【０１５７】
面制御デバイス１０９の面切替制御部１１４は、利用面の候補が選択された場合（ステップＳ２００４がＹＥＳ、又はステップＳ３００６の後）、以下で説明する不揮発性メモリ整合性確認処理を開始する。なお、当該処理の開始時には、変数ＷＰの値が入力される。
【０１５８】
面切替制御部１１４は、面管理テーブル１１３を参照し、変数ＷＰの値に対応する面の故障フラグ１１３４が有効化されているか否かを判定する（ステップＳ４００１）。
【０１５９】
具体的には、面切替制御部１１４は、面ＩＤ１１３１の値が変数ＷＰの値と一致するエントリを検索し、検索されたエントリの故障フラグ１１３４が「１」であるか否かを判定する。検索されたエントリの故障フラグ１１３４が「１」である場合、面切替制御部１１４は、変数ＷＰの値に対応する面の故障フラグ１１３４が有効化されていると判定する。
【０１６０】
変数ＷＰの値に対応する面の故障フラグ１１３４が有効化されている場合（ステップＳ４００１がＹＥＳ）、面切替制御部１１４は、処理結果が失敗であるとして、不揮発性メモリ整合性確認処理を終了する。
【０１６１】
変数ＷＰの値に対応する面の故障フラグ１１３４が無効化されている場合（ステップＳ４００１がＮＯ）、面切替制御部１１４は、面管理テーブル１１３から変数ＷＰの値に対応する面のアドレスを取得する（ステップＳ４００２）。さらに、面切替制御部１１４は、取得されたアドレスに基づいて不揮発性メモリ１０６の変数ＷＰの値に対応する面のマジックナンバ１０６４から値を読み出す（ステップＳ４００３）。
【０１６２】
具体的には、面切替制御部１１４は、ステップＳ４００１において検索されたエントリの不揮発性メモリ格納領域１１３２から変数ＷＰの値に対応する面のアドレスを取得する。また、面切替制御部１１４は、取得されたアドレスに基づいて変数ＷＰの値に対応する面にアクセスし、当該面のマジックナンバ１０６４の値を読み出す。
【０１６３】
面切替制御部１１４は、面制御レジスタ１１０のマジックナンバ１１０４の値と変数ＷＰに対応する面のマジックナンバ１０６４の値とを比較し（ステップＳ４００４）、両方のマジックナンバが一致するか否かを判定する（ステップＳ４００５）。
【０１６４】
両方のマジックナンバが一致する場合（ステップＳ４００５がＹＥＳ）、面切替制御部１１４は、処理結果が正常完了であるとして不揮発性メモリ整合性確認処理を終了する。両方のマジックナンバが一致しない場合（ステップＳ４００５がＮＯ）、面切替制御部１１４は、変数ＷＰの値に対応する面の故障フラグ１１３４を有効化し（ステップＳ４００６）、また、処理結果が失敗であるとして、不揮発性メモリ整合性確認処理を終了する。
【０１６５】
具体的には、面切替制御部１１４は、面管理テーブル１１３を参照して、面ＩＤ１１３１の値が変数ＷＰに値に一致するエントリを検索し、検索されたエントリの故障フラグ１１３４に「１」を設定する。
【０１６６】
図１２Ａは、実施例の面制御デバイス１０９が実行するソフトウェア正常起動確認処理の一例を説明するフローチャートである。図１２Ｂは、実施例のＣＰＵ１０４１がソフトウェア正常起動確認処理において実行する処理の一例を説明するフローチャートである。
【０１６７】
面制御デバイス１０９の面切替制御部１１４は、利用面決定処理が完了した後、以下で説明するソフトウェア正常起動確認処理を開始する。ソフトウェアが起動し、当該ソフトウェアがメモリの利用を開始した後に、保護ビット１０６３が有効化された面に格納される情報が障害ログとして意味を持つ。そのため、面に格納される情報を障害ログとして保存するためにソフトウェア正常起動確認処理が実行される。
【０１６８】
面切替制御部１１４は、中央演算処理部１０４に出力していたＣＰＵリセット命令の発行を停止し（ステップＳ５００１）、決定された利用面を不揮発性メモリ１０６のメモリ領域及び面制御レジスタ１１０を制御用のメモリ空間としてアサインするようにＣＰＵ１０４１に通知する（ステップＳ５００２）。さらに、面切替制御部１１４は、面制御レジスタ１１０を参照し、ソフトウェア起動確認フラグ１１０５が有効化されているか否かを判定する（ステップＳ５００３）。
【０１６９】
具体的には、面切替制御部１１４は、周期的に、面制御レジスタ１１０のソフトウェア起動確認フラグ１１０５が「１」であるか否か判定する。面制御レジスタ１１０のソフトウェア起動確認フラグ１１０５が「１」である場合、面切替制御部１１４は、ソフトウェア起動確認フラグ１１０５が有効化されていると判定する。
【０１７０】
ソフトウェア起動確認フラグ１１０５が有効化されている場合（ステップＳ５００３がＹＥＳ）、面切替制御部１１４は、不揮発性メモリ１０６にアクセスして、利用面の保護ビット１０６３を有効化し（ステップＳ５００４）、また、利用面のタイムスタンプ１０６５を更新する（ステップＳ５００５）。具体的には、以下のような処理が実行される。
【０１７１】
面切替制御部１１４は、面管理テーブル１１３を参照して利用面に対応するエントリを検索し、検索されたエントリの不揮発性メモリ格納領域１１３２から利用面のアドレスを取得する。面切替制御部１１４は、取得されたアドレスに基づいて不揮発性メモリ１０６にアクセスし、利用面の保護ビット１０６３に「１」を設定する。これによって、利用面に格納された情報を障害ログとして保存することができる。また、ステップＳ５００４及びステップＳ５００５の処理後は、通信装置１０の通常運用に移行する。
【０１７２】
また、面切替制御部１１４は、アクセスした利用面のタイムスタンプ１０６５に所定のタイムスタンプを設定する。タイムスタンプ１０６５に設定される時刻は、利用面の保護ビット１０６３を有効化された時刻、及びソフトウェア正常起動確認処理を開始した時刻等が考えられる。なお、本実施例はタイムスタンプ１０６５に格納する時刻に限定されない。以上がステップＳ５００４及びステップＳ５００５の処理の説明である。
【０１７３】
ソフトウェア起動確認フラグ１１０５が無効化されている場合（ステップＳ５００３がＮＯ）、面切替制御部１１４は、ソフトウェア起動確認フラグ１１０５の監視を開始してから一定時間経過したか否かを判定する（ステップＳ５００８）。
【０１７４】
ソフトウェア起動確認フラグ１１０５の監視を開始してから一定時間経過していない場合（ステップＳ５００８がＮＯ）、面切替制御部１１４は、ステップＳ５００３に戻り、同様の処理を実行する。
【０１７５】
ソフトウェア起動確認フラグ１１０５の監視を開始してから一定時間経過した場合（ステップＳ５００８がＹＥＳ）、面切替制御部１１４は、障害発生として障害再起動処理を開始する。
【０１７６】
ステップＳ５００５の処理後、通信装置１０は通常運用の状態に移行する。通常運用の状態では、面切替制御部１１４は、ＣＰＵ１０４１によって発行された再起動コマンドを検知したか否かを判定する（ステップＳ５００６）。
【０１７７】
ＣＰＵ１０４１によって発行された再起動コマンドを検知していない場合（ステップＳ５００６がＮＯ）、面切替制御部１１４は、障害の発生が検知されたか否かを判定する（ステップＳ５００７）。障害発生の検知方法としては、例えば、ＯＳがソフトウェア障害又はハードウェア障害を検知する方法や、再起動処理の失敗を検知する方法などが考えられる。
【０１７８】
障害の発生が検知されていない場合（ステップＳ５００７がＮＯ）、面切替制御部１１４は、ステップＳ５００６に戻り同様の処理を実行する。一方、障害の発生が検知された場合（ステップＳ５００７がＹＥＳ）、面切替制御部１１４は、障害再起動処理を開始する。
【０１７９】
ステップＳ５００６において、ＣＰＵ１０４１によって発行された再起動コマンドを検知した場合（ステップＳ５００６がＹＥＳ）、面切替制御部１１４は、利用面の保護ビット１０６３を無効化し（ステップＳ５００９）、通常の再起動処理を開始する。
【０１８０】
具体的には、面切替制御部１１４は、面管理テーブル１１３を参照して面ＩＤ１１３１の値が変数ＷＰの値と一致するエントリを検索し、検索されたエントリの不揮発性メモリ格納領域１１３２から利用面のアドレスを取得する。面切替制御部１１４は、取得されたアドレスに基づいて、不揮発性メモリ１０６の利用面にアクセスし、保護ビット１０６３に「０」を設定する。
【０１８１】
図１２Ａを用いて説明したように、障害再起動処理の場合、利用面の保護ビット１０６３は無効化されないため、利用面に格納される情報は初期化されず、障害ログとして保存される。
【０１８２】
次に、図１２Ｂを用いてＣＰＵ１０４１が実行する処理について説明する。
【０１８３】
ＣＰＵ１０４１は、面切替制御部１１４から発行されたＣＰＵリセット命令の発行が停止されることによって、ＣＰＵリセットが解除されると（ステップＳ５１０１）、面切替制御部１１４から通知された不揮発性メモリ１０６のメモリ領域（利用面）をメモリ空間にアサインし（ステップＳ５１０２）、面制御レジスタ１１０をメモリ空間にアサインする（ステップＳ５１０３）。これによって、ＣＰＵ１０４１は、不揮発性メモリ１０６の利用面及び面制御レジスタ１１０にアクセスできる。
【０１８４】
ＣＰＵ１０４１は、デバイスを初期化し、また、診断する（ステップＳ５１０４）。このとき、ＣＰＵ１０４１は、不揮発性メモリ１０６の利用面のメモリ領域のサイズ等を確認し、また、不揮発性メモリ１０６（利用面）を診断する。ＣＰＵ１０４１は、Ｆｌａｓｈメモリ１０１からＯＳを実現するプログラムを読み出し、揮発性メモリ１０５にロードすることによって、ＯＳを起動させる（ステップＳ５１０５）。これによって、通信装置１０のソフトウェアが正常に起動する。ＣＰＵ１０４１は、ＯＳの起動後、面制御レジスタ１１０のソフトウェア起動確認フラグ１１０５を有効化する（ステップＳ５１０６）。
【０１８５】
具体的には、ＣＰＵ１０４１は、メモリ空間にアサインされた面制御レジスタ１１０にアクセスし、面制御レジスタ１１０のソフトウェア起動確認フラグ１１０５に「１」を設定する。ステップＳ５１０６の処理後は、通信装置１０の通常運用に移行する。
【０１８６】
ＣＰＵ１０４１は、再起動オペレーションを受け付けたか否かを判定する（ステップＳ５１０７）。例えば、管理者からの指示に起因する再起動オペレーション又は通信装置１０の保守若しくはアップデートに起因する再起動オペレーションが考えられる。
【０１８７】
再起動オペレーションを受け付けていない場合（ステップＳ５１０７がＮＯ）、ＣＰＵ１０４１は、ステップＳ５１０７に戻り同様の処理を実行する。
【０１８８】
再起動オペレーションを受け付けた場合（ステップＳ５１０７がＹＥＳ）、ＣＰＵ１０４１は、再起動コマンドを発行し（ステップＳ５１０８）、ＯＳ等のソフトウェアの起動処理が終了した後、ソフトウェア起動確認フラグ１１０５を無効化する（ステップＳ５１０９）。その後、通常の再起動処理が開始される。
【０１８９】
なお、初期設定処理から、利用面決定処理のステップＳ２０１４において不揮発性メモリ１０６のライトポイント格納エリア１０６１の値が更新されるまでの間に、ハードウェア障害が発生した場合、又は不揮発性メモリ整合性確認処理の完了後にＣＰＵ１０４１によるステップＳ５１０４の診断結果が不正となった場合、障害再起動処理が繰り返し実行される。この場合、ＣＰＵ１０４１等が、リブートカウンタ等を用いてリブート回数をカウントして通信装置１０を停止させる方法が考えられる。
【０１９０】
ここで、通信装置１０の通常運用時の動作について説明する。
【０１９１】
中央演算処理部１０４は、入出力装置１０３より受け付けた管理者のオペレーションにしたがって、コンフィグ情報及び装置設定情報などの静的データ１０２を揮発性メモリ１０５に格納する。また、中央演算処理部１０４は、管理者からの保存オペレーションにしたがって、揮発性メモリ１０５から静的データ１０２の情報をＦｌａｓｈメモリ１０１にコピーする。
【０１９２】
中央演算処理部１０４は、通信装置１０と隣接するネットワーク、すなわち、各ネットワークインタフェース２０５に接続される全てのネットワーク２０６のネットワークトポロジを把握するために、ＲＩＰ（Ｒｏｕｔｉｎｇ  Ｉｎｆｏｒｍａｔｉｏｎ  Ｐｒｏｔｏｃｏｌ）、ＯＳＰＦ（Ｏｐｅｎ  Ｓｈｏｒｔｅｓｔ  Ｐａｔｈ  Ｆｉｒｓｔ）、及びＧＲＰ（Ｇａｔｅｗａｙ  Ｒｏｕｔｉｎｇ  Ｐｒｏｔｏｃｏｌ）等のルーティングプロトコルにしたがって繰り返し、例えば周期的に経路情報を収集する。
【０１９３】
中央演算処理部１０４は、収集した周辺の経路情報を用いた経路計算の結果に基づいて、パケットを転送するために必要な経路の追加、削除、変更等を求める。中央演算処理部１０４は、面制御デバイス１０９を経由して、経路情報における更新単位で動的データ１０７の情報を不揮発性メモリ１０６に書き込む。中央演算処理部１０４は、経路情報の更新を契機に、不揮発性メモリ１０６に格納された動的データ１０７の格納番地を転送デバイス１０８に通知する。
【０１９４】
転送デバイス１０８は、通知された不揮発性メモリ１０６の格納番地にアクセスして更新された動的データ１０７を読み出し、転送部２００に含まれる転送デバイス２０１に更新された動的データ１０７を転送する。
【０１９５】
転送デバイス２０１は、転送デバイス１０８から更新された動的データ１０７を受信し、テーブルメモリ２０３へ更新された動的データ１０７を転送することによって経路情報を更新する。
【０１９６】
転送エンジン２０４が各ネットワーク２０６に接続するネットワークインタフェース２０５を介してパケットを受信した場合、経路検索エンジン２０２は、テーブルメモリ２０３を参照して、受信した動的データ１０７が反映された経路情報に基づいてパケットの宛先を特定する。さらに、転送エンジン２０４は、経路検索エンジン２０２が特定した宛先の結果に基づいて、ネットワークインタフェース２０５を介してネットワーク２０６にパケットを転送する。
【０１９７】
受信したパケットの転送先が不明な場合、又は、受信したパケットが通信装置１０宛のパケットの場合、受信したパケットは転送デバイス２０１及び転送デバイス１０８を経由して中央演算処理部１０４に送信され、中央演算処理部１０４によって所定の処理が実行される。
【０１９８】
ここで、図１３Ａ、図１３Ｂ、図１３Ｃ及び図１３Ｄを用いて、本実施例の面の設定方法及び更新方法について説明する。
【０１９９】
図１３Ａ、図１３Ｂ、図１３Ｃ及び図１３Ｄは、実施例の通信装置１０の不揮発性メモリ１０６内の面の設定方法及び更新方法の一例を示す説明図である。
【０２００】
なお、図１３Ａ、図１３Ｂ、図１３Ｃ及び図１３Ｄでは、不揮発性メモリ１０６の実利用メモリ領域１０６７に３つの面が生成されるものとする。また、下の面の面ＩＤ１１３１は「１」、真ん中の面の面ＩＤ１１３１は「２」、上の面の面ＩＤ１１３１は「３」であるものとする。また、３つの面の故障フラグ１１３４の値は「０」であるものとする。また、タイムスタンプの時系列は「Ａ：Ａ：Ａ」、「Ｂ：Ｂ：Ｂ」、「Ｃ：Ｃ：Ｃ」及び「Ｄ：Ｄ：Ｄ」の順に古いものとする。
【０２０１】
図１３Ａについて説明する。通信装置１０の通常の起動処理が開始した場合、面切替制御部１１４は、実利用メモリ領域１０６７を初期化し、また、不揮発性メモリ初期化パスフラグ１０６６を無効化し、ライトポイント格納エリア１０６１に初期値を設定する（ステップＳ１００５）。面切替制御部１１４は、最大面数を「３」と算出し（ステップＳ１００７）、実利用メモリ領域１０６７を３つに分割する（ステップＳ１００８）。このとき、面の状態は状態１のようになる。
【０２０２】
面切替制御部１１４は、面制御レジスタ１１０のマジックナンバ１１０４の値を読み出し（ステップＳ１００９）、不揮発性メモリ１０６の各面のマジックナンバ１０６４に読み出された値を設定する（ステップＳ１０１０）。これによって、面の状態は状態１から状態２に遷移する。
【０２０３】
面切替制御部１１４は、ライトポイント格納エリア１０６１に格納される値「１」を変数ＷＰとして保持する（ステップＳ２００１）。また、面切替制御部１１４は、下の面の保護ビット１０６３Ａが有効化されているか否かを判定する（ステップＳ２００４）。
【０２０４】
面切替制御部１１４は、下の面の保護ビット１０６３Ａは無効化されていると判定し（ステップＳ２００４がＮＯ）、下の面について不揮発性メモリ整合性確認処理を実行する（ステップＳ４００）。下の面の故障フラグ１１３４は無効化されているため、面切替制御部１１４は、正常完了であると判定する（ステップＳ２００５がＹＥＳ）。
【０２０５】
面切替制御部１１４は、下の面を利用面として決定して、当該利用面を初期化する（ステップＳ２００８）。面切替制御部１１４は、ライトポイント格納エリア１０６１に「２」を書き込む（ステップＳ２００９）。また、ソフトウェア正常起動確認処理において、面切替制御部１１４は、下の面の保護ビット１０６３Ａを有効化し（ステップＳ５００４）、タイムスタンプ１０６５Ａを更新する（ステップＳ５００５）。
【０２０６】
ＣＰＵ１０４１は、下の面をメモリ空間にアサインし（ステップＳ５１０２）、下の面に動的データ１０７を格納する。以上の処理によって、面の状態は状態２から状態３に遷移する。
【０２０７】
このようにして、面制御デバイス１０９は、不揮発性メモリ１０６の一部のメモリ領域（面）をＣＰＵ１０４１が利用するメモリ領域として提供することができる。
【０２０８】
次に、図１３Ｂについて説明する。図１３Ｂの下の面のデータエリア１０６２Ａにはデータが格納され、かつ、保護ビット１０６３Ａは「０」であり、また、真ん中の面のデータエリア１０６２Ｂにはデータが格納され、かつ、保護ビット１０６３Ｂが「１」である。そのため、通常の起動処理の実行後に、通常の再起動処理が１回行われ、現在真ん中の面が利用面であることを示す。このとき、ライトポイント格納エリア１０６１には「３」が格納される。
【０２０９】
真ん中の面を利用しているときに通常の再起動処理が開始される場合、面切替制御部１１４は、真ん中の面の保護ビット１０６３Ｂを「１」から「０」に変更し（ステップＳ５００９）、さらに、ライトポイント格納エリア１０６１に格納される「３」を変数ＷＰとして保持する（ステップＳ２００１）。面切替制御部１１４は、上の面の保護ビット１０６３Ｃが有効化されているかを判定する（ステップＳ２００４）。
【０２１０】
面切替制御部１１４は、上の面の保護ビット１０６３Ｃは無効化されていると判定し（ステップＳ２００４がＮＯ）、上の面について不揮発性メモリ整合性確認処理を実行する（ステップＳ４００）。上の面の故障フラグ１１３４は無効化されているため、面切替制御部１１４は、正常完了であると判定する（ステップＳ２００５がＹＥＳ）。
【０２１１】
したがって、面切替制御部１１４は、上の面を利用面として決定して、当該利用面を初期化する（ステップＳ２００８）。面切替制御部１１４は、ライトポイント格納エリア１０６１に「１」を書き込む（ステップＳ２００９）。また、ソフトウェア正常起動確認処理において、面切替制御部１１４は、上の面の保護ビット１０６３Ｃを有効化し（ステップＳ５００４）、タイムスタンプ１０６５Ｃを更新する（ステップＳ５００５）。
【０２１２】
ＣＰＵ１０４１は、上の面をメモリ空間にアサインし（ステップＳ５１０２）、上の面に動的データ１０７を格納する。以上の処理によって、面の状態は状態１から状態２に遷移する。
【０２１３】
その後、再び通常の再起動処理が開始される場合、面切替制御部１１４は、上の面の保護ビット１０６３Ｃを無効化し（ステップＳ５００９）、前述した処理と同様の処理を実行する。これによって、下の面が初期化され（ステップＳ２００８）、ライトポイント格納エリア１０６１に「２」が格納される（ステップＳ２００９）。また、ソフトウェア正常起動確認処理において、面切替制御部１１４は、下の面の保護ビット１０６３Ａを有効化し（ステップＳ５００４）、タイムスタンプ１０６５Ａを更新する（ステップＳ５００５）。また、ＣＰＵ１０４１は、下の面をメモリ空間にアサインし（ステップＳ５１０２）、下の面に動的データ１０７を格納する。以上の処理によって、面の状態は状態２から状態３に遷移する。
【０２１４】
このようにして、本実施例では不揮発性メモリ１０６の面にリングバッファ形式で情報が上書きされる。また、再起動処理に伴って、利用面が切り替えられる。
【０２１５】
次に、図１３Ｃについて説明する。図１３Ｃの下の面及び真ん中の面のデータエリア１０６２Ａ、Ｂにはデータが格納され、かつ、保護ビット１０６３Ａ、Ｂは「１」である。そのため、障害再起動処理が１回行われ、現在真ん中の面が利用面であることを示す。このとき、ライトポイント格納エリア１０６１には「３」が格納される。
【０２１６】
真ん中の面を利用しているときに通常の再起動処理が開始される場合、面切替制御部１１４は、図１３Ｂと同様の処理を実行することによって、真ん中の面の保護ビット１０６３Ｂを無効化する（ステップＳ５００９）。また、面切替制御部１１４は、上の面を初期化し（ステップＳ２００８）、ライトポイント格納エリア１０６１に「１」を格納する（ステップＳ２００９）。また、ソフトウェア正常起動確認処理において、面切替制御部１１４は、上の面の保護ビット１０６３Ｃを有効化し（ステップＳ５００４）、タイムスタンプ１０６５Ｃを更新する（ステップＳ５００５）。また、ＣＰＵ１０４１は、上の面をメモリ空間にアサインし（ステップＳ５１０２）、上の面に動的データ１０７を格納する。以上の処理によって、面の状態は状態１から状態２に遷移する。
【０２１７】
その後、再び通常の再起動処理が開始される場合、面切替制御部１１４は、上の面の保護ビット１０６３Ｃを無効化する（ステップＳ５００９）。面切替制御部１１４は、下の面の保護ビット１０６３Ａの値を読み出し（ステップＳ２００３）、下の面の保護ビット１０６３Ａが有効化されていると判定する（ステップＳ２００４がＹＥＳ）。そこで、面切替制御部１１４は、利用可能な全ての面として真ん中の面及び上の面の保護ビット１０６３Ｂ、Ｃの値を読み出す（ステップＳ２００６）。
【０２１８】
少なくとも一つの利用可能な面の保護ビット１０６３が無効化されているため（ステップＳ２００７がＮＯ）、面切替制御部１１４は、変数ＷＰの値を「２」に更新する（ステップＳ２０１１）。真ん中の面の保護ビット１０６３Ｂが無効化されているため（ステップＳ２００４がＮＯ）、面切替制御部１１４は、真ん中の面について不揮発性メモリ整合性確認処理を実行する（ステップＳ４００）。真ん中の面の故障フラグ１１３４は無効化されており、面切替制御部１１４は、マジックナンバの整合性を確認し、正常完了と判定する（ステップＳ２００５がＹＥＳ）。
【０２１９】
面切替制御部１１４は、真ん中の面を利用面として決定して、当該利用面を初期化する（ステップＳ２００８）。面切替制御部１１４は、ライトポイント格納エリア１０６１に「３」を書き込む（ステップＳ２００９）。また、ソフトウェア正常起動確認処理において、面切替制御部１１４は、真ん中の面の保護ビット１０６３Ｂを有効化し（ステップＳ５００４）、タイムスタンプ１０６５Ｂを更新する（ステップＳ５００５）。また、ＣＰＵ１０４１は、真ん中の面をメモリ空間にアサインし（ステップＳ５１０４）、真ん中の面に動的データ１０７を格納する。以上の処理によって、面の状態は状態２から状態３に遷移する。
【０２２０】
このように、本実施例では、不揮発性メモリ１０６の面にリングバッファ形式で情報を上書きする場合、障害ログとして保存する面については情報が上書きされないように制御される。
【０２２１】
次に、図１３Ｄについて説明する。図１３Ｄの下の面及び真ん中の面のデータエリア１０６２Ａ、Ｂにはデータが格納され、かつ、保護ビット１０６３Ａ、Ｂは「１」である。そのため、障害再起動処理が１回行われ、現在真ん中の面が利用面であることを示す。このとき、ライトポイント格納エリア１０６１には「３」が格納される。
【０２２２】
真ん中の面を利用しているときに障害発生に起因する再起動が発生した場合、面切替制御部１１４は、図１３Ｂと同様の処理を実行することによって、上の面を初期化し（ステップＳ２００８）、ライトポイント格納エリア１０６１に「１」を格納する（ステップＳ２００９）。また、ソフトウェア正常起動確認処理において、面切替制御部１１４は、上の面の保護ビット１０６３Ｃを有効化する（ステップＳ５００４）。また、面切替制御部１１４は、タイムスタンプ１０６５Ｃを更新する（ステップＳ５００５）。このとき、真ん中の面の保護ビット１０６３Ｂは無効化されない。
【０２２３】
また、ＣＰＵ１０４１は、上の面をメモリ空間にアサインし（ステップＳ５１０４）、上の面に動的データ１０７を格納する。以上の処理によって、面の状態は状態１から状態２に遷移する。
【０２２４】
その後、再び障害再起動処理が開始される場合、面切替制御部１１４は、下の面の保護ビット１０６３Ａの値を読み出し（ステップＳ２００３）、下の面の保護ビット１０６３Ａが有効化されていると判定する（ステップＳ２００４がＹＥＳ）。このとき、上の面の保護ビット１０６３Ｃは無効化されない。
【０２２５】
面切替制御部１１４は、利用可能な全ての面として真ん中の面及び上の面の保護ビット１０６３Ｂ、Ｃの値を読み出す（ステップＳ２００６）。面切替制御部１１４は、利用可能な全ての面に保護ビット１０６３Ｂ、Ｃが有効化されていると判定し（ステップＳ２００７がＹＥＳ）、ログ更新面選択処理を実行する（ステップＳ３００）。
【０２２６】
面切替制御部１１４は、ログ更新面選択処理において、最も古い障害ログを格納する面として下の面を特定し（ステップＳ３００３）、下の面を除く、上の面及び真ん中の面を利用可能な面として抽出する（ステップＳ３００５）。面切替制御部１１４は、１番目にタイムスタンプが古い面、すなわち、真ん中の面を選択し（ステップＳ３００６）、真ん中の面について不揮発性メモリ整合性確認処理を実行する（ステップＳ４００）。真ん中の面の故障フラグ１１３４は無効化されており、面切替制御部１１４は、マジックナンバの整合性を確認し、正常完了と判定する（ステップＳ３００７がＹＥＳ）。
【０２２７】
面切替制御部１１４は、真ん中の面の保護ビット１０６３Ｂを無効化し（ステップＳ３００８）、変数ＷＰの値として「２」を設定する（ステップＳ３００９）。面切替制御部１１４は、真ん中の面を利用面として決定して、当該利用面を初期化する（ステップＳ２００８）。面切替制御部１１４は、ライトポイント格納エリア１０６１に「３」を書き込む（ステップＳ２００９）。また、ソフトウェア正常起動確認処理において、面切替制御部１１４は、真ん中の面の保護ビット１０６３Ｂを有効化する（ステップＳ５００４）。また、面切替制御部１１４は、タイムスタンプ１０６５Ｂを更新する（ステップＳ５００５）。
【０２２８】
また、ＣＰＵ１０４１は、真ん中の面をメモリ空間にアサインし（ステップＳ５１０４）、真ん中の面に動的データ１０７を格納する。以上の処理によって、面の状態が状態２から状態３に遷移する。
【０２２９】
このように、本実施例では不揮発性メモリ１０６の全ての面の保護ビット１０６３が有効化されている場合、所定の制御ポリシに基づいて、障害ログとして保存する面が決定され、また、利用面が決定される。本実施例では、通信装置１０が起動を開始してから最初に発生した障害に関する障害ログ（最も古い障害ログ）、及び最新の障害ログが不揮発性メモリ１０６に保存されるように制御される。
【０２３０】
次に、障害ログの取得処理について説明する。
【０２３１】
図１４は、実施例の通信装置１０が実行する障害ログの取得処理の一例を説明するフローチャートである。
【０２３２】
障害ログは通信装置１０に障害が発生した後に取得されるものであり、障害ログの取得方法には以下のようなものがある。一つの方法は、通信装置１０の再起動処理によってソフトウェアの起動が完了し、通信装置１０が通常運用に移行した後に、管理者等がコマンドを入力することによって障害ログを取得する方法である。もう一つの方法は、通信装置１０の再起動処理でもソフトウェアの起動ができない場合、ソフトウェア起動を中断して、通信装置１０を停止し、通信装置１０から障害ログが格納された不揮発性メモリ１０６を回収する方法である。
【０２３３】
通信装置１０に障害が発生した後に、以下で説明する処理が実行される。
【０２３４】
ＣＰＵ１０４１は、ステップＳ５１０５におけるＯＳの起動処理（再起動処理）と平行して以下で説明する処理を開始する（ステップＳ６００１）。まず、ＣＰＵ１０４１は、ソフトウェア起動確認フラグ１１０５が有効化されているか否かを判定する（ステップＳ６００２）。
【０２３５】
具体的には、ＣＰＵ１０４１は、制御バス１１２を介して面切替制御部１１４に面制御レジスタ１１０のソフトウェア起動確認フラグ１１０５の値の読み出しを指示することによって、ソフトウェア起動確認フラグ１１０５の値を取得する。ＣＰＵ１０４１は、ソフトウェア起動確認フラグ１１０５の値が「１」であるか否かを判定する。ソフトウェア起動確認フラグ１１０５の値が「１」の場合、ソフトウェア起動確認フラグ１１０５が有効化されていると判定する。
【０２３６】
ソフトウェア起動確認フラグ１１０５が有効化されている場合（ステップＳ６００２がＹＥＳ）、ＣＰＵ１０４１は、管理者によって入出力装置１０３を介して入力された障害ログの取得コマンドを受け付け（ステップＳ６００３）、障害ログを取得する面の面選択フラグ１１０６を有効化する（ステップＳ６００４）。取得コマンドは様々な形式が考えられる。例えば、障害ログを取得する面の識別番号を含むコマンド、現在の利用面以外の面の中から保護ビット１０６３が有効化されている面を指定するコマンド等が考えられる。
【０２３７】
具体的には、ＣＰＵ１０４１は、入力された取得コマンドに基づいて障害ログを取得する面を特定する。ＣＰＵ１０４１は、面制御レジスタ１１０にアクセスし、特定された面に対応する面選択フラグ１１０６に「１」を設定する。なお、ＣＰＵ１０４１は、面に格納される障害ログを参照するために、制御バス１１２経由で面選択フラグ１１０６を操作する。
【０２３８】
なお、受け付けたコマンドが現在の利用面以外の面のうち保護ビット１０６３が有効化されている面を指定するコマンドの場合、ＣＰＵ１０４１は、面制御デバイス１０９に当該条件を満たす面の検索処理を依頼する。これによって、ＣＰＵ１０４１は、障害ログを取得する面を特定できる。
【０２３９】
なお、ＣＰＵ１０４１は、制御バス１１２を介して、不揮発性メモリ１０６から障害ログを取得する。そのため、利用面に格納されるデータが利用されていないときに、不揮発性メモリ１０６の所定の面から障害ログを読み出す必要がある。
【０２４０】
面切替制御部１１４は、面選択フラグ１１０６の状態を監視し、ＣＰＵ１０４１によって面選択フラグ１１０６が操作されたことを検知した場合、面管理テーブル１１３を参照して、操作された面選択フラグ１１０６に対応する面のアドレスを取得する（ステップＳ６００５）。面切替制御部１１４は、取得されたアドレスに基づいて、障害ログを取得する面へのアクセス設定を行う（ステップＳ６００６）。
【０２４１】
具体的には、面切替制御部１１４は、面ＩＤ１１３１が面選択フラグ１１０６に示す面の識別番号と一致するエントリを検索し、検索されたエントリの不揮発性メモリ格納領域１１３２から障害ログを取得する面のアドレスを取得する。また、面切替制御部１１４は、アドレスに対応するメモリ領域（面）をＣＰＵ１０４１のメモリ領域にアサインすることによって障害ログを取得する面へのアクセス設定を行う。このとき、面切替制御部１１４は、当該面からのデータの読み出しのみを許可するように設定してもよい。これによって、ＣＰＵ１０４１は、制御バス１１２を介してアサインされた面から障害ログを取得できる。
【０２４２】
面切替制御部１１４は、メモリバス１１１及び制御バス１１２のそれぞれを介した、不揮発性メモリ１０６に対するアクセスの調停処理を実行する（ステップＳ６００７）。当該調停処理では、面切替制御部１１４は、メモリバス１１１を介した不揮発性メモリ１０６へのアクセス中に、制御バス１１２を介した不揮発性メモリ１０６へのアクセス、すなわち、障害ログの取得が行われないように制御する。
【０２４３】
ＣＰＵ１０４１は、管理者から保守用Ｆｌａｓｈメモリ１１８への障害ログのコピーを指示するコマンドを受け付けた場合、障害ログを保守用Ｆｌａｓｈメモリ１１８にコピーする（ステップＳ６００８）。
【０２４４】
具体的には、ＣＰＵ１０４１は、制御バス１１２を介して面から読み出された障害ログを保守用Ｆｌａｓｈメモリ１１８に格納する。
【０２４５】
面切替制御部１１４は、障害ログが取得された面に対応する面選択フラグ１１０６を無効化し（ステップＳ６００９）、また、当該面の保護ビット１０６３を無効化する（ステップＳ６０１０）。その後、通信装置１０は障害ログの取得処理を終了する。
【０２４６】
具体的には、面切替制御部１１４は、面制御レジスタ１１０を参照して、障害ログが取得された面の面選択フラグ１１０６に「０」を設定し、また、不揮発性メモリ１０６の当該面の保護ビット１０６３に「０」を設定する。
【０２４７】
ステップＳ６００２において、ソフトウェア起動確認フラグ１１０５が無効化されている場合（ステップＳ６００２がＮＯ）、ＣＰＵ１０４１は、再起動の回数が所定の閾値以上であるか否かを判定する（ステップＳ６０１１）。例えば、リブートカウンタを用いる方法が考えられる。
【０２４８】
再起動の回数が所定の閾値より小さい場合（ステップＳ６０１１がＮＯ）、通信装置１０は、ステップＳ６００１に戻り同様の処理を実行する。
【０２４９】
再起動の回数が所定の閾値以上の場合（ステップＳ６０１１がＹＥＳ）、ＣＰＵ１０４１は、入出力装置１０３を介して管理者に再起動ができない旨を通知する（ステップＳ６０１２）。その後、ＣＰＵ１０４１は、通信装置１０を停止させる。このとき、管理者は、通信装置１０からの通知を受信した場合、通信装置１０の停止を確認し、通信装置１０から不揮発性メモリ１０６を取り外す。
【０２５０】
前述したように、面切替制御部１１４が実行する調停処理等によって、管理者は障害ログを取得するタイミングを意識することなく、不揮発性メモリ１０６から障害ログを読み出すことができる。また、ステップＳ２０１０において、現在の利用面に対する面選択フラグ１１０６の操作は禁止されているため、障害ログの取得処理においてＣＰＵ１０４１が誤って現在の利用面から障害ログを取得することを防止できる。
【０２５１】
従来は以下のような問題があった。
【０２５２】
特許文献１に記載の伝送装置は、ハードウェア障害が発生した場合、適切なログを不揮発性メモリに保存することが困難である。また、特許文献１に記載の伝送装置は、動的データを不揮発性メモリに格納する場合、ループバッファ方式でログを管理する。そのため、不揮発性メモリの容量が不足している場合、ログの取得を開始してから初めて発生した障害の障害情報が新たなデータに上書きされる。したがって、障害解析に必要な情報をログとして残すことができない。特許文献１に記載されているように、一度発生した障害は何度も発生する可能性があるため、初めて発生した障害の障害情報は、障害解析において重要な情報となる。
【０２５３】
また、特許文献１に記載の伝送装置は、ソフトウェア障害が発生した場合、一般的な通信装置と同様にダンプ処理が実行される。ダンプ処理が終了した後に伝送装置が再起動するため、早期の復旧が困難である。
【０２５４】
また、特許文献１に記載の伝送装置は、不揮発性メモリに格納する情報を抽出するための定義情報を予め設定する必要があるため、管理コストが増大する。さらに、特許文献１に記載の伝送装置は、ログの保存にのみ使用する揮発性メモリ及び不揮発性メモリが必要となるため、装置のコストが増大する。
【０２５５】
図１から図１４を用いて説明したように、本実施例によれば、通信装置１０は、不揮発性メモリを複数の面に分け、所定の制御ポリシにしたがって障害ログとして残す面の保護ビット１０６３を有効化することによって、障害解析に必要な障害ログを不揮発性メモリに残すことができる。これによって、１次障害及び２次障害の問題の切り分け等の障害解析に役立てることができる。
【０２５６】
また、通信装置１０の運用中に、本来の処理とは関係のないバックアップ処理が不要であるため通信装置１０の処理性能の低下が発生しない。本実施例の通信装置１０は再起動時に利用面を切り替えることによって、すなわち、起動時処理同時にログの取得も実現しているため、動的データ１０７のダンプ処理が不要となる。したがって、通信装置１０の早期の復旧が可能となる。
【０２５７】
また、本実施例の通信装置１０は、不揮発性メモリの一つの面に運用中に使用する動的データ１０７を格納するため、ログ専用の不揮発性メモリを必要としない。したがって、装置のコストを低く抑えることができる。また、情報の抽出処理等が不要なため管理コストを低減できる。
【０２５８】
また、面制御デバイスが不揮発性メモリを複数のメモリ領域に分割し、演算部が動的データを格納する領域として分割された一つのメモリ領域を提供する。他の分割されたメモリ領域はログを格納する領域として使用できる。また、分割されたメモリ領域にデータの上書きを抑止する保護ビットを設けることによって、新たなデータが上書きされる場合であっても、ログとして必要となるデータを不揮発性メモリに保存するので、ユーザによる障害解析を容易にする。
【０２５９】
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。また、例えば、上記した実施例は本発明を分かりやすく説明するために構成を詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、各実施例の構成の一部について、他の構成に追加、削除、置換することが可能である。
【０２６０】
また、上記の各構成、機能、処理部、処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、本発明は、実施例の機能を実現するソフトウェアのプログラムコードによっても実現できる。この場合、プログラムコードを記録した記憶媒体をコンピュータに提供し、そのコンピュータが備えるＣＰＵが記憶媒体に格納されたプログラムコードを読み出す。この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施例の機能を実現することになり、そのプログラムコード自体、及びそれを記憶した記憶媒体は本発明を構成することになる。このようなプログラムコードを供給するための記憶媒体としては、例えば、フレキシブルディスク、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、ハードディスク、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）、光ディスク、光磁気ディスク、ＣＤ−Ｒ、磁気テープ、不揮発性のメモリカード、ＲＯＭなどが用いられる。
【０２６１】
また、本実施例に記載の機能を実現するプログラムコードは、例えば、アセンブラ、Ｃ／Ｃ＋＋、ｐｅｒｌ、Ｓｈｅｌｌ、ＰＨＰ、Ｊａｖａ（登録商標）等の広範囲のプログラム又はスクリプト言語で実装できる。
【０２６２】
さらに、実施例の機能を実現するソフトウェアのプログラムコードを、ネットワークを介して配信することによって、それをコンピュータのハードディスクやメモリ等の記憶手段又はＣＤ−ＲＷ、ＣＤ−Ｒ等の記憶媒体に格納し、コンピュータが備えるＣＰＵが当該記憶手段や当該記憶媒体に格納されたプログラムコードを読み出して実行するようにしてもよい。
【０２６３】
上述の実施例において、制御線や情報線は、説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。全ての構成が相互に接続されていてもよい。
【符号の説明】
【０２６４】
１０  通信装置
１００  制御部
１０１  Ｆｌａｓｈメモリ
１０２  静的データ
１０３  入出力装置
１０４  中央演算処理部
１０５  揮発性メモリ
１０６  不揮発性メモリ
１０７  動的データ
１０８  転送デバイス
１０９  面制御デバイス
１１０  面制御レジスタ
１１１  メモリバス
１１２  制御バス
１１３  面管理テーブル
１１４  面切替制御部
１１８  保守用Ｆｌａｓｈメモリ
２００  転送部
２０１  転送デバイス
２０２  経路検索エンジン
２０３  テーブルメモリ
２０４  転送エンジン
２０５  ネットワークインタフェース
２０６  ネットワーク
１０４１  ＣＰＵ
１０４２  Ｉ／Ｏ制御部
１０６１  ライトポイント格納エリア
１０６２  データエリア
１０６３  保護ビット
１０６４  マジックナンバ
１０６５  タイムスタンプ
１０６６  不揮発性メモリ初期化パスフラグ
１０６７  実利用メモリ領域
１０６８  制御フラグ格納領域
１１０１  最大面数
１１０２  制御フラグ格納領域サイズ
１１０３  実利用メモリ容量
１１０４  マジックナンバ
１１０５  ソフトウェア起動確認フラグ
１１０６  面選択フラグ
１１３１  面ＩＤ
１１３２  不揮発性メモリ格納領域
１１３３  タイムスタンプ
１１３４  故障フラグ
【図１】
0006316223.tif 000002
【図２】
0006316223.tif 000003
【図３】
0006316223.tif 000004
【図４】
0006316223.tif 000005
【図５】
0006316223.tif 000006
【図６】
0006316223.tif 000007
【図７】
0006316223.tif 000008
【図８Ａ】
0006316223.tif 000009
【図８Ｂ】
0006316223.tif 000010
【図９Ａ】
0006316223.tif 000011
【図９Ｂ】
0006316223.tif 000012
【図１０】
0006316223.tif 000013
【図１１】
0006316223.tif 000014
【図１２Ａ】
0006316223.tif 000015
【図１２Ｂ】
0006316223.tif 000016
【図１３Ａ】
0006316223.tif 000017
【図１３Ｂ】
0006316223.tif 000018
【図１３Ｃ】
0006316223.tif 000019
【図１３Ｄ】
0006316223.tif 000020
【図１４】
0006316223.tif 000021