(57)【要約】【課題】ライトアクセス時におけるデータの退避実行有無の効率的な判定手法を提案し、退避データ中の重複データの発生を軽減させて回復時間の短縮を実現させる。【解決手段】メインメモリのスタック領域に対してライトアクセスを行う場合には（Ｓ１０５：Ｙｅｓ）、アクセスフラグテーブルを参照して過去にアクセス先アドレスにライトアクセスが発生したか否かを判定する（Ｓ１１０）。一方、グローバル領域に対してライトアクセスを行う場合には（Ｓ１０５：Ｎｏ）、アドレスリストを参照して過去にアクセス先アドレスにライトアクセスが発生したか否かを判定する（Ｓ１１５）。このようにすることにより、アクセスフラグテーブルを使う判定方法の特性とアドレスリストを使う判定方法の特性とをそれぞれ活かすことができ、ライトアクセス時におけるデータの退避実行有無を効率的に判定することができる。【選択図】図２
2008269488.tif 000002
【特許請求の範囲】
【請求項１】
マイクロコンピュータの実行状態を過去の状態に戻すためのロールバック方法において、
メインメモリのアクセス先アドレスに対して過去にライトアクセスが発生したか否かを示す情報を記憶するアクセスフラグテーブルと、過去に前記メインメモリから退避メモリにデータを退避させた前記メインメモリのアドレスをリスト化したアドレスリストとを用意し、
前記メインメモリへのライトアクセスに先立ち、アクセス先に応じて前記アクセスフラグテーブル又は前記アドレスリストのいずれかを参照して過去に前記アクセス先アドレスにライトアクセスが発生したか否かを判定し、ライトアクセスが未発生の場合にのみ、前記アクセス先アドレスの更新前データを退避メモリに退避させると共に参照した前記アクセスフラグテーブル又は前記アドレスリストを更新し、
ロールバック時には前記退避メモリに退避させておいた前記更新前データを用いてロールバックさせること、
を特徴とするロールバック方法。
【請求項２】
請求項１に記載のロールバック方法において、
前記アクセスフラグテーブルは、過去にライトアクセスが発生したか否かを示すアクセスフラグを、アクセス先のアドレス毎に記憶し、
前記アクセスフラグテーブルを参照して前記判定を行う際には、前記アクセス先アドレスに対応する前記アクセスフラグを前記アクセスフラグテーブルからロードし、前記アクセスフラグから過去に当該アドレスにライトアクセスが発生したか否かを判定し、過去にライトアクセスがない場合にのみアクセス先の更新前データを前記退避メモリに退避させると共に前記アクセス先アドレスに対応する前記アクセスフラグテーブルのアクセスフラグを更新すること、
を特徴とするロールバック方法。
【請求項３】
請求項１に記載のロールバック方法において、
前記アクセスフラグテーブルは、複数のアドレスを１つのアドレス群とし、前記メインメモリのアクセス先アドレス群に対して過去にライトアクセスが発生したか否かを示すアクセスフラグが割り当てられており、
前記アクセスフラグテーブルを参照して前記判定を行う際には、前記アクセス先アドレスに対応するアクセス先アドレス群の前記アクセスフラグを前記アクセスフラグテーブルからロードし、前記アクセスフラグから過去に当該アドレス群にライトアクセスが発生したか否かを判定し、過去にライトアクセスがない場合にのみ前記アクセス先アドレス群の更新前データを前記退避メモリに退避させると共に前記アクセス先アドレス群に対応する前記アクセスフラグテーブルのアクセスフラグを更新すること、
を特徴とするロールバック方法。
【請求項４】
請求項１に記載のロールバック方法において、
前記アクセスフラグテーブルは、過去にライトアクセスが発生したか否かをアドレス毎に示すアクセスフラグが、フラグ列として一つのワードに割り当てられており、
前記アクセスフラグテーブルを参照して前記判定を行う際には、前記アクセスフラグテーブルより、一つのワードに割り当てられたフラグ列を一度にロードすると共にロードしたフラグ列から前記アクセス先アドレスに対応する前記アクセスフラグを選択し、選択した前記アクセスフラグから過去に当該アドレスにライトアクセスが発生したか否かを判定し、過去にライトアクセスがない場合にのみアクセス先の更新前データを前記退避メモリに退避させると共に前記アクセス先アドレスに対応する前記アクセスフラグテーブルのアクセスフラグを更新すること、
を特徴とするロールバック方法。
【請求項５】
請求項４に記載のロールバック方法において、
前記フラグ列は、前記メインメモリの連続するアクセス先アドレス群の単位で存在していること、
を特徴とするロールバック方法。
【請求項６】
請求項５に記載のロールバック方法において、
前記フラグ列を構成する各フラグの並びは、前記アクセス先アドレス群を構成するアドレスの並びと同一であること、
を特徴とするロールバック方法。
【請求項７】
請求項１〜請求項６のいずれかに記載のロールバック方法において、
前記アドレスリストは、過去に退避メモリにデータを退避させた前記メインメモリのアドレスを退避順にリスト化したものであり、
前記アドレスリストを参照して前記判定を行う際には、前記アドレスリストの先頭から順に、リストの要素が前記アクセス先アドレスと一致するか否かを判定し、一致した場合は当該判定を終了し、全ての要素が前記アクセス先アドレスと一致しなかった場合には、アクセス先の更新前データを前記退避メモリに退避させると共に前記アクセス先アドレスを前記アドレスリストに追加すること、
を特徴とするロールバック方法。
【請求項８】
請求項１〜請求項６のいずれかに記載のロールバック方法において、
前記アドレスリストは、過去に退避メモリにデータを退避させた前記メインメモリのアドレスを退避順にリスト化したものであり、
前記アドレスリストを参照して前記判定を行う際には、記憶しておいたリスト位置から、リストの要素が前記アクセス先アドレスと一致するか否かを順に巡回的に判定し、一致した場合は一致したリストの位置を記憶して前記判定を終了し、前記アドレスリストを一巡しても前記アクセス先アドレスと一致しなかった場合は、前記アドレスリストの終端位置を記憶してアクセス先の更新前データを前記退避メモリに退避させると共に前記アクセス先アドレスを前記アドレスリストに追加すること、
を特徴とするロールバック方法。
【請求項９】
請求項８におけるロールバック方法において、
前記アドレスの一致判定は、記憶しておいたリスト位置の次から開始し、記憶しておいたリスト位置が前記アドレスリストの終端であった場合は前記アドレスリストの先頭位置から開始すること、
を特徴とするロールバック方法。
【請求項１０】
請求項７〜請求項９のいずれかに記載のロールバック方法において、
前記マイクロコンピュータが、同じ処理を繰り返すループ処理を実行する場合、
前記ループ処理の１ループ目のライトアクセス処理については、前記アドレスリストを参照して前記判定を行う場合になっても、前記アドレスリストの要素と前記アクセス先アドレスとが一致するか否かを判定することなく、アクセス先の更新前データを前記退避メモリに退避させると共に前記アクセス先アドレスを前記アドレスリストに追加すること、
を特徴とするロールバック方法。
【請求項１１】
請求項７〜請求項９のいずれかに記載のロールバック方法において、
前記アドレスリストの要素と前記アクセス先アドレスとが一致するか否かの判定を行うことなく無条件でアクセス先の更新前データを前記退避メモリに退避させる回数を示す無条件データ退避回数を予め設定しておき、
前記マイクロコンピュータが、特定の処理を開始後、前記アドレスリストを参照して前記判定を行う場合になっても、前記メインメモリへのライトアクセス回数が前記無条件データ退避回数に到達するまでは、前記アドレスリストの要素と前記アクセス先アドレスとが一致するか否かを判定することなく、アクセス先の更新前データを前記退避メモリに退避させると共に前記アクセス先アドレスを前記アドレスリストに追加すること、
を特徴とするロールバック方法。
【請求項１２】
請求項１〜請求項１１のいずれかに記載のロールバック方法において、
前記マイクロコンピュータが実行するプログラム内のローカル変数を割り当てるために使用する前記メインメモリのスタック領域に対してライトアクセスを行う場合には、前記アクセスフラグテーブルを参照して過去に前記アクセス先アドレスにライトアクセスが発生したか否かを判定すること、
を特徴とするロールバック方法。
【請求項１３】
請求項１〜請求項１２のいずれかに記載のロールバック方法において、
前記マイクロコンピュータが実行するプログラム内のグローバル変数を割り当てるために使用する前記メインメモリのグローバル領域に対してライトアクセスを行う場合には、前記アドレスリストを参照して過去に前記アクセス先アドレスにライトアクセスが発生したか否かを判定すること、
を特徴とするロールバック方法。
【請求項１４】
請求項１〜請求項１３のいずれかに記載したロールバック方法を実行することを特徴とする情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マイクロコンピュータにおけるロールバック方法に関するものであり、マイクロコンピュータに障害が発生した場合等に、退避しておいたデータをメモリに書き戻すことによってシステムの動作を継続させる技術に関する。
【背景技術】
【０００２】
旧来のロールバック方法は、正常時には、メモリに対する書き込みの都度、書き込み先のデータを退避させておき、ロールバックする際には、退避させたデータをＬＩＦＯ（Last In First Out）方式によりメモリに書き戻すようになっていた。したがって、同じメモリ番地に対して複数回の書き込みがある場合には、重複してデータが退避され、ロールバック時にも重複して書き戻しが行われていた。このため、本来書き戻す必要のないデータの転送により、ロールバックにかかる時間（回復時間）が長くなるという問題があった。
【０００３】
この問題に対し、これまでにも退避データ中の重複データを削減するための手法が幾つか提案されている。例えば、下記の特許文献１に記載された発明は、データベースファイルのブロック単位及びそのブロックの部分単位で既にジャーナルファイルに出力されているか否かを判定し、出力されていない場合にのみ、ジャーナルファイルへ出力することによって、退避データ中に重複データが発生することを軽減させている。
【０００４】
また、下記の特許文献２に記載の発明は、データベースのデータ項目に対して更新処理を実行する際、それ以前に同一のデータ項目のデータに対して更新処理を実行した際に記録したログ情報があるか否かを確認し、既にログ情報がある場合にはログ情報の記録を行わないことによって、退避データ中に重複データが発生することを軽減させている。
【特許文献１】特開平２−２５７２２８号公報
【特許文献２】特開平１１−５３２３９号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
たしかに、上述した特許文献１や特許文献２に記載の発明を用いれば、退避データ中の重複データを削減することができるが、既にデータを退避させていたか否かの具体的な判定方法は、いずれの特許文献にも開示されていない。つまり、どのようにしてデータを退避させたことを記録しておき、次にデータの退避機会が訪れた際に、どのようにして既に退避されたデータであるか否かを判定するかが具体的でない。もしもその判定方法が複雑であれば、判定に時間を要することになり、本来の処理の遅延を招くことになる。また、特に、退避単位がメモリアドレス単位であるようなケースにおいて判定に時間を要するとすれば、そのメモリ上で実行されるアプリケーションプログラムの実行速度は、ロールバックが考慮されていないシステムにおける実行速度と比較して大幅に低下することになる。
【０００６】
本願発明は、このような問題にかんがみなされたものであり、その目的とするところは、ライトアクセス時におけるデータの退避実行有無の効率的な判定手法を提案し、退避データ中の重複データの発生を軽減させて回復時間の短縮を実現させることである。
【課題を解決するための手段】
【０００７】
上記課題を解決するためになされた請求項１に記載のロールバック方法では、メインメモリのアクセス先アドレスに対して過去に（静止点以降に）ライトアクセスが発生したか否かを示す情報を記憶するアクセスフラグテーブルと、過去にメインメモリから退避メモリにデータを退避させたメインメモリのアドレスをリスト化したアドレスリストとを用意する。そして、メインメモリへのライトアクセス時には、アクセス先に応じてアクセスフラグテーブル又はアドレスリストのいずれかを参照して過去にアクセス先アドレスにライトアクセスが発生したか否かを判定し、ライトアクセスが未発生の場合にのみ、アクセス先アドレスの更新前データを退避メモリに退避させると共に参照したアクセスフラグテーブル又はアドレスリストを更新し、ロールバック時には退避メモリに退避させておいた更新前データを用いてロールバックさせる。
【０００８】
このようなロールバック方法によれば、アクセスフラグテーブル又はアドレスリストを適切に使い分けることにより、それぞれの判定方法の特性を生かすことができ、ライトアクセス時におけるデータの退避実行有無を効率的に判定することができる。
【０００９】
具体的な使い分けの方法としては、例えば、マイクロコンピュータが実行するプログラム内のローカル変数を割り当てるために使用するメインメモリのスタック領域に対してライトアクセスを行う場合には、アクセスフラグテーブルを参照して過去にアクセス先アドレスにライトアクセスが発生したか否かを判定するとよい（請求項１２）。
【００１０】
なぜなら、一般的にスタック領域は、メモリに占める割合が小さくアクセスの局所性が高いという特性を有しているからである。このため、アクセスフラグテーブルを用いることで、退避実行有無の判定に必要なテーブルサイズを抑えつつ、アドレスを指定した一度のテーブル参照で退避実行有無の判定を行うことができる。
【００１１】
それに対し、グローバル変数を割り当てるために使用するメインメモリのグローバル領域に対してライトアクセスを行う場合には、アドレスリストを参照して過去にアクセス先アドレスにライトアクセスが発生したか否かを判定するとよい（請求項１３）。
【００１２】
なぜなら、一般的にグローバル領域は、アクセスの局所性が低く、メモリに占める使用領域も大きいという特性を有する一方で、アクセスに順序性や周期性が高いという特性を有するからである。このため、リスト形式であれば、アクセス特性とマッチし、少ない参照回数で退避実行有無の判定を行うことができる。
【００１３】
ここで、アクセスフラグテーブルを参照する場合について説明する。
例えば、アクセスフラグテーブルは、過去にライトアクセスが発生したか否かを示すアクセスフラグを、アクセス先のアドレス毎に記憶しているとよい。そして、アクセスフラグテーブルを参照して判定を行う際には、アクセス先アドレスに対応するアクセスフラグをアクセスフラグテーブルからロードし、アクセスフラグから過去に当該アドレスにライトアクセスが発生したか否かを判定し、過去にライトアクセスがない場合にのみアクセス先の更新前データを退避メモリに退避させると共にアクセス先アドレスに対応するアクセスフラグテーブルのアクセスフラグを更新するとよい（請求項２）。なお、「アクセスフラグを更新する」というのは、過去に当該アドレスにライトアクセスが発生したことを意味する値にフラグを変更することである。
【００１４】
このように、アクセスフラグをアクセス先のアドレス毎にアクセスフラグテーブルが記憶していれば、退避メモリに対して重複してデータが退避されることを確実に防ぐことができる。
【００１５】
また、アクセスフラグテーブルは、複数のアドレスを１つのアドレス群とし、メインメモリのアクセス先アドレス群に対して過去にライトアクセスが発生したか否かを示すアクセスフラグが割り当てられていてもよい。そして、アクセスフラグテーブルを参照して判定を行う際には、アクセス先アドレスに対応するアクセス先アドレス群のアクセスフラグをアクセスフラグテーブルからロードし、アクセスフラグから過去に当該アドレス群にライトアクセスが発生したか否かを判定し、過去にライトアクセスがない場合にのみアクセス先アドレス群の更新前データを退避メモリに退避させると共にアクセス先アドレス群に対応するアクセスフラグテーブルのアクセスフラグを更新するとよい（請求項３）。なお、「アクセスフラグを更新する」というのは、過去に当該アドレス群のいずれかのアドレスにライトアクセスが発生したことを意味する値にフラグを変更することである。
【００１６】
このようにすれば、アクセスフラグテーブルの大きさを小さくすることできる。
また、アクセスフラグテーブルは、過去にライトアクセスが発生したか否かをアドレス毎に示すアクセスフラグが、フラグ列として一つのワードに割り当てられていてもよい。そして、アクセスフラグテーブルを参照して判定を行う際には、アクセスフラグテーブルより、一つのワードに割り当てられたフラグ列を一度にロードすると共にロードしたフラグ列からアクセス先アドレスに対応するアクセスフラグを選択し、選択したアクセスフラグから過去に当該アドレスにライトアクセスが発生したか否かを判定し、過去にライトアクセスがない場合にのみアクセス先の更新前データを退避メモリに退避させると共にアクセス先アドレスに対応するアクセスフラグテーブルのアクセスフラグを更新するとよい（請求項４）。なお、ここで言う「ワード」というのは、データのまとまりを意味し、例えば、１６ビットからなるデータ単位である。また、「アクセスフラグを更新する」というのは、過去に当該アドレスにライトアクセスが発生したことを意味する値にフラグを変更することである。
【００１７】
このように、アクセスフラグをフラグ列として一つのワードに割り当てるようにし、ワード単位でアクセスフラグをロードするようにすれば、ライトアクセスが発生した際のアクセスフラグテーブルへのアクセスを減らすことができる。
【００１８】
なお、フラグ列は、メインメモリの連続するアクセス先アドレス群の単位で存在しているとよい（請求項５）。
このようになっていれば、メインメモリに対するライトアクセスの局所性が高いプログラムをマイクロコンピュータが実行する場合に、アクセスフラグテーブルへのアクセスを特に減らすことができる。
【００１９】
また、フラグ列を構成する各フラグの並びは、アクセス先アドレス群を構成するアドレスの並びと同一であるとよい（請求項６）。
このようになっていれば、メインメモリに対するアクセスの局所性及び連続性が高いプログラムをマイクロコンピュータが実行する場合に、アクセスフラグテーブルへのアクセスを特に減らすことができる。
【００２０】
次に、アドレスリストを参照する場合について説明する。
例えば、アドレスリストは、過去に退避メモリにデータを退避させたメインメモリのアドレスを退避順にリスト化したものであるとよい。そして、アドレスリストを参照して判定を行う際には、アドレスリストの先頭から順に、リストの要素がアクセス先アドレスと一致するか否かを判定し、一致した場合は当該判定を終了し、全ての要素がアクセス先アドレスと一致しなかった場合には、アクセス先の更新前データを退避メモリに退避させると共にアクセス先アドレスをアドレスリストに追加するとよい（請求項７）。
【００２１】
このようにすれば、アドレスリストのサイズを抑えながら、退避メモリに対して重複してデータが退避されることを確実に防ぐことができる。
なお、アドレスリストを参照して判定を行う際には、記憶しておいたリスト位置から、リストの要素がアクセス先アドレスと一致するか否かを順に巡回的に判定し、一致した場合は一致したリストの位置を記憶して判定を終了し、アドレスリストを一巡してもアクセス先アドレスと一致しなかった場合は、アドレスリストの終端位置を記憶してアクセス先の更新前データを退避メモリに退避させると共にアクセス先アドレスをアドレスリストに追加するとよい（請求項８）。
【００２２】
一般的に、ライトアクセスの際のアドレスパターンは繰り返されることが多い。したがって、請求項８のようにすれば、平均一致判定回数を抑えることができる。
なお、アドレスの一致判定は、記憶しておいたリスト位置の次から開始し、記憶しておいたリスト位置がアドレスリストの終端であった場合はアドレスリストの先頭位置から開始するとよい（請求項９）。
【００２３】
一般的に、ライトアクセスの際のアドレスパターンは、単一のアドレスに対してアクセスを繰り返す場合よりも、複数の異なるアドレスに対して同一パターンでアクセスを繰り返す場合の方が多い。したがって、請求項９のようにすれば、平均一致判定回数をさらに抑えることができる。
【００２４】
また、マイクロコンピュータが、同じ処理を繰り返すループ処理を実行する場合は、ループ処理の１ループ目のライトアクセス処理については、アドレスリストを参照して判定を行う場合になっても、アドレスリストの要素とアクセス先アドレスとが一致するか否かを判定することなく、アクセス先の更新前データを退避メモリに退避させると共にアクセス先アドレスをアドレスリストに追加するとよい（請求項１０）。
【００２５】
一般的に、ループ処理の１ループ目は、ライトアクセスの対象先であるメインメモリの内容を退避メモリに退避させなければならない可能性が高い。したがって、請求項１０のようにすれば、１ループ目はアドレスリストを参照する判定を行わずに、無条件に退避メモリにアクセス先の更新前データを退避させても、重複してデータが退避される可能性は少ない。また、１ループ目はアドレスリストを参照する判定を行わずに済むため、ループ処理の実行速度も速い。
【００２６】
また、アドレスリストの要素とアクセス先アドレスとが一致するか否かの判定を行うことなく無条件でアクセス先の更新前データを退避メモリに退避させる回数を示す無条件データ退避回数を予め設定しておき、マイクロコンピュータが、プログラムの実行を開始後、アドレスリストを参照して判定を行う場合になっても、メインメモリへのライトアクセス回数が無条件データ退避回数に到達するまでは、アドレスリストの要素とアクセス先アドレスとが一致するか否かを判定することなく、アクセス先の更新前データを退避メモリに退避させると共にアクセス先アドレスをアドレスリストに追加するとよい（請求項１１）。
【００２７】
一般的に、特定の処理を開始した後、データの退避回数が一定数に達するまでは、ライトアクセスの対象先であるメインメモリの内容を退避メモリに退避させなければならない可能性が高い。したがって、請求項１１のようにすれば、データの退避回数が一定数に達するまではアドレスリストを参照する判定を行わずに、無条件に退避メモリにアクセス先の更新前データを退避させても、重複してデータが退避される可能性は少ない。また、データの退避回数が一定数に達するまではアドレスリストを参照する判定を行わずに済むため、マイクロコンピュータが実行する特定の処理の実行速度も速い。
【００２８】
なお、上述した各ロールバック方法を実行することができる情報処理装置を構成するとよい（請求項１４）。このような情報処理装置であれば、上述した各ロールバック方法について記載した効果を実際に享受することができる。
【発明を実施するための最良の形態】
【００２９】
以下、本発明が適用された実施形態について図面を用いて説明する。なお、本発明の実施の形態は、下記の実施形態に何ら限定されることはなく、本発明の技術的範囲に属する限り種々の形態を採りうる。
【００３０】
［構成の説明］
図１は、本発明のロールバック方法を実現可能な情報処理装置１１の概略構成を示すブロック図である。情報処理装置１１は、ＣＰＵ１２と、メインメモリ１３と、Ｉ／Ｏ１４と、退避メモリ１５と、アクセスフラグテーブル１６と、アドレスリスト１７と、これら各部を結ぶバス１８とを備える。
【００３１】
ＣＰＵ１２は、周知のマイクロコンピュータであり、予め定められたプログラムに基づいて各種の処理を実行することができる。なお、ＣＰＵ１２は、バス１８を介して各部にアクセスすることができる。
【００３２】
メインメモリ１３は、ＤＲＡＭ等から構成されたメモリモジュールであり、プログラムコードやデータ等を展開させることができる。
Ｉ／Ｏ１４は、情報処理装置１１の外部の装置との通信を司る部位である。外部の装置としては、例えば、表示装置、音声出力装置、操作装置等が考えられる。
【００３３】
退避メモリ１５は、ＤＲＡＭ等から構成されたメモリモジュールであり、メインメモリ１３とは別体となったメモリモジュールである。退避メモリ１５は、ロールバックの際に必要なデータを記憶するためのものである。なお、メインメモリ１３とは別体に構成せずに、メインメモリ１３の一部の領域を退避メモリ１５として用いてもよい。
【００３４】
アクセスフラグテーブル１６は、ＤＲＡＭ等から構成されたメモリモジュールからなり、ロールバックの際に必要な情報を記憶するためのテーブルである。なお、メインメモリ１３の一部の領域をアクセスフラグテーブル１６のための領域として用いてもよい。アクセスフラグテーブル１６の詳細は後述する。
【００３５】
アドレスリスト１７は、ＤＲＡＭ等から構成されたメモリモジュールからなり、ロールバックの際に必要な情報を記憶するリストである。なお、メインメモリ１３の一部の領域をアドレスリスト１７のための領域として用いてもよい。アドレスリスト１７の詳細は後述する。
【００３６】
［動作の説明］
［基本実施形態］
基本実施形態においてＣＰＵ１２が実行する処理を説明する。なお、ＣＰＵ１２が実行する処理のうち、本発明に関連する処理についてのみ説明し、ＣＰＵ１２が実行するアプリケーションプログラム等の処理についての説明は省略する。
【００３７】
（１）ライトアクセス処理
まず、ＣＰＵ１２が実行するライトアクセス処理について、図２のフローチャートを用いて説明する。ライトアクセス処理は、アプリケーションプログラムによってメインメモリ１３へのライトアクセス（書き込み指令）がなされた際に実行が開始される処理である。
【００３８】
ＣＰＵ１２は、ライトアクセス処理の実行を開始すると、まず、アクセス先はメインメモリ１３のスタック領域であるか否かを判定する（Ｓ１０５）。なお、スタック領域というのは、ＣＰＵ１２が実行するプログラム内のローカル変数を割り当てるための領域である。
【００３９】
Ｓ１０５における判定において、アクセス先はメインメモリ１３のスタック領域であると判定した場合には（Ｓ１０５：Ｙｅｓ）、Ｓ１１０へ処理を移行し、アクセス先はメインメモリ１３のスタック領域ではないと判定した場合には（Ｓ１０５：Ｎｏ）、Ｓ１１５へ処理を移行する。なお、アクセス先はメインメモリ１３のスタック領域ではない場合とは、例えば、グローバル領域（ＣＰＵ１２が実行するプログラム内のグローバル変数を割り当てるための領域）の場合である。
【００４０】
Ｓ１１０では、第一退避処理を実行する。この第一退避処理については後述する。第一退避処理を終えると、Ｓ１２０へ処理を移行する。
Ｓ１１５では、第二退避処理を実行する。この第二退避処理については後述する。第二退避処理を終えると、Ｓ１２０へ処理を移行する。
【００４１】
Ｓ１２０では、メインメモリ１３を更新する。具体的には、アプリケーションプログラムによって指定されたアドレス位置に指定のデータを書き込むことである。メインメモリ１３を更新すると、本処理（ライトアクセス処理）を終了する。
【００４２】
（２）第一退避処理
次に、ＣＰＵ１２が実行する第一退避処理について、図３のフローチャートを用いて説明する。第一退避処理は、上述したライトアクセス処理のＳ１１０において呼び出されて実行が開始される処理である。
【００４３】
ＣＰＵ１２は、第一退避処理の実行を開始すると、まず、アクセス先アドレスに対応するアクセスフラグをアクセスフラグテーブル１６からロードする（Ｓ２０５）。具体例については後述する。
【００４４】
続いて、ロードしたアクセスフラグはポジティブであるかネガティブであるかを判定する（Ｓ２１０）。ポジティブというのは、過去にライトアクセス処理の対象となったアドレスであることを示しており、例えば、フラグの値が「１」の状態である。一方、ネガティブというのは、未だライトアクセス処理の対象になっていないアドレスであることを示しており、例えば、フラグの値が「０」の状態である。
【００４５】
Ｓ２１０における判定において、ロードしたアクセスフラグがポジティブであった場合には（Ｓ２１０：Ｙｅｓ）、本処理（第一退避処理）を終了し、呼び出し元であるライトアクセス処理のＳ１１０に続く処理を実行する。
【００４６】
一方、Ｓ２１０における判定において、ロードしたアクセスフラグがポジティブでない、つまり、ネガティブであった場合には（Ｓ２１０：Ｎｏ）、Ｓ２１５へ処理を移行する。
【００４７】
Ｓ２１５では、メインメモリ１３のアクセス先アドレスに格納されている更新前データを退避メモリ１５に退避させる。なお、その際、同時に退避メモリ１５の退避メモリスタックポインタを１アドレス分、デクリメントする。続くＳ２２０では、アクセス先アドレスのアクセスフラグをポジティブにセットしてアクセスフラグテーブル１６にストアする（Ｓ２２０）。そして、本処理（第一退避処理）を終了し、呼び出し元であるライトアクセス処理のＳ１１０に続く処理を実行する。
【００４８】
ここで、第一退避処理の様子を図４の説明図を用いて説明する。
ＣＰＵ１２がメインメモリ１３のアドレス「８００１」にデータ「０３１０」を書き込む場合には、まず、アクセスフラグテーブル１６からアドレス「８００１」のアクセスフラグ「０」を読み出す。
【００４９】
そして、ＣＰＵ１２は、アクセスフラグ「０」を見て、メインメモリ１３のアドレス「８００１」にある既存データの退避が必要と判定して退避を実行する。具体的には、メインメモリ１３のアドレス「８００１」からデータ「００１０」を読み出して退避メモリ１５の退避メモリスタックポインタが指し示す位置に退避アドレス「８００１」、退避データ「００１０」を書き込む。そして、退避メモリスタックポインタを１アドレス分、デクリメントする。
【００５０】
その後、ＣＰＵ１２は、メインメモリ１３のアドレス「８００１」にデータ「０３１０」を書き込む。なお、アクセスフラグ「１」であった場合には、既存データの退避を行うことなくメインメモリ１３の該当アドレスにデータを書き込む。
（３）第二退避処理
次に、ＣＰＵ１２が実行する第二退避処理について、図５のフローチャートを用いて説明する。第二退避処理は、上述したライトアクセス処理のＳ１２０において呼び出されて実行が開始される処理である。
【００５１】
ＣＰＵ１２は、第二退避処理の実行を開始すると、まず、参照先リストインデックスを初期化する（Ｓ３０５）。この参照先リストインデックスというのは、アドレスリスト１７の参照先を示すポインタであり、この参照先リストインデックスの指し示すリスト要素が参照対象になる。
【００５２】
続くＳ３１０では、アドレスリスト１７中の全アドレスとライトアクセス先のアドレスとを比較したか否かを判定する。ここで言う「比較」というのは、後述するＳ３３０で行う比較を意味する。Ｓ３１０において、アドレスリスト１７中の全アドレスとライトアクセス先のアドレスとを比較したと判定した場合は（Ｓ３１０：Ｙｅｓ）、Ｓ３１５に処理を移行し、アドレスリスト１７中の全アドレスとライトアクセス先のアドレスとを比較していないと判定した場合は（Ｓ３１０：Ｎｏ）、Ｓ３３０へ処理を移行する。
【００５３】
アドレスリスト１７中の全アドレスとライトアクセス先のアドレスとを比較したと判定した場合に進むＳ３１５では、メインメモリ１３においてアクセス先アドレスに格納されているデータを退避メモリ１５に退避させる。そして、退避メモリ１５のスタックポインタをデクリメントする（Ｓ３２０）。そして、アドレスリスト１７の末端を退避データのアドレスに変更すると共に末端を意味するアドレス「ＦＦＦＦ」を新たなリスト要素として追加する（Ｓ３２５）。そして、本処理（第二退避処理）を終了して呼び出し元であるライトアクセス処理のＳ１２０に続く処理を実行する。
【００５４】
一方、アドレスリスト１７中の全アドレスとライトアクセス先のアドレスとを比較していないと判定した場合に進むＳ３３０では、参照先リストインデックスが示すアドレスリスト１７中のリスト要素（アドレス）とアクセス先アドレスとを比較する。そして、比較の結果によって処理を分岐する（Ｓ３３５）。アドレスが一致した場合には（Ｓ３３５：Ｙｅｓ）、本処理（第二退避処理）を終了して呼び出し元であるライトアクセス処理のＳ１２０に続く処理を実行する。一方、アドレスが一致しない場合には（Ｓ３３５：Ｎｏ）、Ｓ３４０へ処理を移行する。
【００５５】
アドレスは一致しないと判定した場合に進むＳ３４０では、参照先リストインデックスをインクリメントし、上述したＳ３１０へ処理を戻す。
ここで、第二退避処理の様子を図６の説明図を用いて説明する。
【００５６】
ＣＰＵ１２がメインメモリ１３のアドレス「７００１」にデータ「０３１０」を書き込む場合には、まず、リストインデックス「０」から順にインクリメントさせながらアドレスリスト１７からアドレスを読み出し、書き込み先のアドレス「７００１」がアドレスリスト１７に存在するか否かを判定する。参照先リストインデックスが一巡しても書き込み予定のアドレスがアドレスリスト１７に存在しないことを判定すると、ＣＰＵ１２は、メインメモリ１３のアドレス「７００１」にある既存データの退避が必要と判定して退避を実行する。具体的には、具体的には、メインメモリ１３のアドレス「７００１」からデータ「００１０」を読み出して退避メモリ１５の退避メモリスタックポインタが指し示す位置に退避アドレス「７００１」、退避データ「００１０」を書き込む。その後、ＣＰＵ１２は、メインメモリ１３のアドレス「７００１」にデータ「０３１０」を書き込む。そして、アドレスリスト１７にアドレスが「ＦＦＦＦ」であるリストインデックス「４」のアドレスを「ＦＦＦＦ」から「７００１」に変更し、新たにリストインデックス「５」としてアドレス「ＦＦＦＦ」を追加する。
【００５７】
なお、参照先リストインデックスが一巡する前に書き込み予定のアドレスがアドレスリスト１７に存在することを判定した場合には、既存データの退避を行わずに、メインメモリ１３のアドレス「７００１」にデータ「０３１０」を書き込む。
【００５８】
（４）ロールバック処理
次に、ＣＰＵ１２が実行するロールバック処理について、図７のフローチャートを用いて説明する。ロールバック処理は、情報処理装置１１に何らかの障害が発生した場合や、情報処理装置１１に接続された他の装置からロールバックを実行する旨の指令をＩ／Ｏ１４を介して受信した場合等に実行が開始される処理である。
【００５９】
ＣＰＵ１２は、ロールバック処理の実行を開始すると、まず、退避メモリ１５のスタックポインタはインクリメントが可能であるか否かを判定する。インクリメント可能であると判定した場合は（Ｓ４０５：Ｙｅｓ）、Ｓ４４０へ処理を移行し、インクリメント不可能であると判定した場合は（Ｓ４０５：Ｎｏ）、本処理（ロールバック処理）を終了する。
【００６０】
退避メモリ１５のスタックポインタはインクリメント可能であると判定した場合に進むＳ４１０では、退避メモリ１５のスタックポインタをインクリメントする。そして、退避メモリ１５のスタックポインタが指し示す退避メモリ１５中のデータを、メインメモリ１３の該当アドレス（スタックポインタが指し示す退避メモリ１５中のアドレスに相当するアドレス）に書き戻す（Ｓ４１５）。書き戻しを終えると、上述したＳ４１０へ処理を戻す。
【００６１】
このようにロールバック処理を実行することにより、前回の静止点までメインメモリ１３の内容を戻すことができる。
［基本実施形態の効果］
本実施形態の情報処理装置１１は、メインメモリ１３のスタック領域に対してライトアクセスを行う場合には（Ｓ１０５：Ｙｅｓ）、アクセスフラグテーブル１６を参照して過去にアクセス先アドレスにライトアクセスが発生したか否かを判定し（Ｓ１１０）、グローバル領域に対してライトアクセスを行う場合には（Ｓ１０５：Ｎｏ）、アドレスリスト１７を参照して過去にアクセス先アドレスにライトアクセスが発生したか否かを判定する（Ｓ１１５）。
【００６２】
したがって、アクセスフラグテーブル１６を使う判定方法の特性とアドレスリスト１７を使う判定方法の特性とをそれぞれ活かすことが、ライトアクセス時におけるデータの退避実行有無を効率的に判定することができる。
【００６３】
なお、アクセスフラグテーブル１６は、過去にライトアクセスが発生したか否かを示すアクセスフラグを、アクセス先のアドレス毎に記憶している。そして、ＣＰＵ１２は、アクセス先アドレスに対応するアクセスフラグをアクセスフラグテーブル１６からロードし、アクセスフラグから過去に当該アドレスにライトアクセスが発生したか否かを判定し、過去にライトアクセスがない場合にのみアクセス先の更新前データを退避メモリ１５に退避させると共にアクセス先アドレスに対応するアクセスフラグテーブル１６のアクセスフラグを更新する。したがって、アクセスフラグテーブル１６を用いた判定は、スタック領域に対するアクセス（メモリに占める割合が小さくアクセスの局所性が高いという特性を有するアクセス）に適している。
【００６４】
また、アドレスリスト１７は、過去に退避メモリ１５にデータを退避させたメインメモリ１３のアドレスを退避順にリスト化したものである。そして、ＣＰＵ１２は、アドレスリスト１７の先頭から順に、リストの要素がアクセス先アドレスと一致するか否かを判定し、一致した場合は当該判定を終了し、全ての要素がアクセス先アドレスと一致しなかった場合には、アクセス先の更新前データを退避メモリ１５に退避させると共にアクセス先アドレスをアドレスリスト１７に追加する。したがって、アドレスリスト１７を用いた判定は、グローバル領域に対するアクセス（アクセスの局所性が低くメモリに占める使用領域も大きいという特性を有する一方で、アクセスに順序性や周期性が高いという特性を有するアクセス）に適している。
【００６５】
［変形実施形態］
次に、変形実施形態について説明する。なお、上述した基本実施形態との相違点を中心に説明する。
【００６６】
（１）第三退避処理
第三退避処理は、上述した第一退避処理の代わりに実行可能な処理である。この第三退避処理について図８のフローチャートを用いて説明する。なお、第三退避処理の場合は、第一退避処理で用いたアクセスフラグテーブル１６の代わりに、図１０（ａ）に示すアクセスフラグテーブル１６ａを用いる。詳細は後述する。
【００６７】
ＣＰＵ１２は、第三退避処理の実行を開始すると、まず、アクセス先アドレスからテーブルインデックスを特定する（Ｓ５０５）。テーブルインデックスというのは、アクセスフラグテーブル１６ａのレコードを特定するための情報であり、本実施形態では、アクセス先アドレス（全１６ビット）の上位１２ビットである。したがって、一つのテーブルインデックスに対して１６のアクセス先アドレスが対応する。なお、別途、アクセス先アドレスとテーブルインデックスとの関係を示すテーブルを設け、それを参照するようにしてもよい。
【００６８】
続いて、テーブルインデックスに対応するアクセスフラグをアクセスフラグテーブル１６からロードする（Ｓ５１０）。ここで、図１０（ａ）を用いてアクセスフラグテーブル１６ａについて説明する。
【００６９】
アクセスフラグテーブル１６ａを構成する各レコードは、レコードを特定するためのテーブルインデックスと、アクセス先アドレス群に対して過去にライトアクセスがあったか否かを示すアクセスフラグとからなる。具体的には、例えば、アクセス先アドレス群「８０００」〜「８００Ｆ」は、テーブルインデックス「８００」に対応しており、アクセスフラグは「０」が対応する。したがって、アクセス先アドレスからテーブルインデックスを特定した後、その特定したテーブルインデックスに対応するアクセスフラグをアクセスフラグテーブル１６ａからロードすることにより、アクセス先アドレス群を構成するアドレスのいずれかに対して過去にライトアクセスがあったか否かがわかる。
【００７０】
説明を図８に戻し、続くＳ５１５では、ロードしたアクセスフラグはポジティブであるかネガティブであるかを判定する（Ｓ５１５）。ポジティブというのは、過去にライトアクセス処理の対象となったアドレス群であることを示しており、例えば、フラグの値が「１」の状態である。一方、ネガティブというのは、未だライトアクセス処理の対象になっていないアドレス群であることを示しており、例えば、フラグの値が「０」の状態である。
【００７１】
Ｓ５１５における判定において、ロードしたアクセスフラグがポジティブであった場合には（Ｓ５１５：Ｙｅｓ）、本処理（第三退避処理）を終了し、呼び出し元であるライトアクセス処理のＳ１１０に続く処理を実行する。
【００７２】
一方、Ｓ５１５における判定において、ロードしたアクセスフラグがポジティブでない、つまり、ネガティブであった場合には（Ｓ５１５：Ｎｏ）、Ｓ５２０へ処理を移行する。
【００７３】
Ｓ５２０では、メインメモリ１３のアクセス先アドレスに対応するアドレス群に格納されている更新前データを退避メモリ１５に退避させる。ここで言う「アクセス先アドレスに対応するアドレス群」というのは、Ｓ５０５で特定したテーブルインデックスと同一のテーブルインデックスに対応付けられたアドレスの全てである。
【００７４】
続くＳ５２５では、退避メモリ１５の退避メモリスタックポインタを退避させたデータのアドレス分、デクリメントする。
続くＳ５３０では、該当するアクセス先アドレス群のアクセスフラグをポジティブにセットしてアクセスフラグテーブル１６にストアする。そして、本処理（第三退避処理）を終了し、呼び出し元であるライトアクセス処理のＳ１１０に続く処理を実行する。
【００７５】
このような第三退避処理を第一退避処理の代わりに実行すれば、アクセスフラグテーブル１６の大きさ（テーブルサイズ）を小さくすることできる。
（２）第四退避処理
第四退避処理は、上述した第一退避処理の代わりに実行可能な処理である。この第四退避処理について図９のフローチャートを用いて説明する。なお、第四退避処理の場合は、第一退避処理で用いたアクセスフラグテーブル１６の代わりに、図１０（ｂ）に示すアクセスフラグテーブル１６ｂを用いる。詳細は後述する。
【００７６】
ＣＰＵ１２は、第四退避処理の実行を開始すると、まずアクセス先アドレスからテーブルインデックスを特定する（Ｓ６０５）。テーブルインデックスというのは、アクセスフラグテーブル１６ａのレコードを特定するための情報であり、本実施形態では、アクセス先アドレス（全１６ビット）の上位１２ビットである。したがって、一つのテーブルインデックスに対して１６のアクセス先アドレスが対応する。なお、別途、アクセス先アドレスとテーブルインデックスとの関係を示すテーブルを設け、それを参照するようにしてもよい。
【００７７】
続いて、Ｓ６０５で特定したテーブルインデックスに対応するアクセスフラグ列はＣＰＵ１２に既にロード済みであるか否かを判定する（Ｓ６１０）。アクセスフラグ列というのは、１６のアクセスフラグの集合であり、各フラグは１ビットに割り当てられている。つまり、一つのアクセスフラグ列は一つのワード（１６ビット）からなる。
【００７８】
Ｓ６１０において、アクセスフラグ列はロード済みであると判定した場合は（Ｓ６１０：Ｙｅｓ）、Ｓ６３０へ処理を移行し、アクセスフラグ列はロード済みでないと判定した場合は（Ｓ６１０：Ｎｏ）、Ｓ６１５へ処理を移行する。
【００７９】
アクセスフラグ列はロード済みでないと判定した場合に進むＳ６１５では、現在ＣＰＵ１２にロード済みのアクセスフラグ列をアクセスフラグテーブル１６ｂにストアする。そして、Ｓ６０５で特定したテーブルインデックスに対応するアクセスフラグ列をアクセスフラグテーブル１６ｂからロードする（Ｓ６２０）。ここで、図１０（ｂ）を用いてアクセスフラグテーブル１６ｂについて説明する。
【００８０】
アクセスフラグテーブル１６ｂを構成する各レコードは、レコードを特定するためのテーブルインデックスと、アクセス先アドレス群に対して過去にライトアクセスがあったか否かを示すアクセスフラグ列とからなる。このアクセスフラグ列は、アクセス先アドレス群を構成するアドレスに一対一に対応するようにして各フラグが存在し、アドレスの並び順とフラグの並び順とが一致している。具体的には、例えば、アクセス先アドレス群「８０００」〜「８００Ｆ」は、テーブルインデックス「８００」に対応しており、アクセスフラグ列は「００１１００１００００１００００」として最上位フラグがアドレス「８００Ｆ」に対応し、最下位フラグがアドレス「８０００」に対応する。したがって、アクセス先アドレスからテーブルインデックスを特定した後、その特定したテーブルインデックスに対応するアクセスフラグ列をアクセスフラグテーブル１６ｂからロードし、さらに、アクセスフラグ列からアクセス先アドレスに対応するアクセスフラグを選択すれば、アクセス先アドレスに対して過去にライトアクセスがあったか否かがわかる。
【００８１】
説明を図９に戻し、アクセスフラグ列をロードすると、ロードしたアクセスフラグ列からアクセス先アドレスに対応するアクセスフラグを選択し（Ｓ６２５）、Ｓ６３０へ移行する。
【００８２】
Ｓ６３０では、アクセスフラグはポジティブか否かを判定する。アクセスフラグはポジティブであると判定した場合は（Ｓ６３０：Ｙｅｓ）、本処理（第四退避処理）を終了し、アクセスフラグはポジティブないと判定した場合は（Ｓ６３０：Ｎｏ）、Ｓ６３５へ処理を移行する。
【００８３】
アクセスフラグはポジティブないと判定した場合に進むＳ６３５では、アクセス先アドレスに格納されている更新前データを退避メモリ１５に退避する。そして、退避メモリ１５の退避メモリスタックポインタを１アドレス分、デクリメントする（Ｓ６４０）。
【００８４】
続いて、アクセス先アドレスのアクセスフラグをポジティブにセットしアクセスフラグテーブル１６ｂにストアする（Ｓ６４５）。そして、本処理（第四退避処理）を終了する。
【００８５】
このような第四退避処理を第一退避処理の代わりに実行すれば、ライトアクセスが発生した際のアクセスフラグテーブル１６ｂへのアクセスを減らすことができる。また、メインメモリ１３に対するライトアクセスの局所性及び連続性が高いプログラムをＣＰＵ１２が実行する場合に、アクセスフラグテーブル１６ｂへのアクセスを特に減らすことができる。
【００８６】
（３）第二リスト参照処理
第二リスト参照処理は、第一リスト参照処理の代わりに実行可能な処理である。第一リスト参照処理というのは、第二退避処理のＳ３０５，Ｓ３１０，Ｓ３３０，Ｓ３３５，Ｓ３４０からなる処理ブロックを意味する（図５参照）。以下、第二リスト参照処理について、図１１のフローチャートを用いて説明する。
【００８７】
ＣＰＵ１２は、第二リスト参照処理の実行を開始すると、まずアドレスリスト１７中の全アドレスとの比較を終了したか否かを判定する（Ｓ７０５）。ここで言う「比較」というのは、後述するＳ７１５で行う比較を意味する。アドレスリスト１７中の全アドレスとの比較を終了したと判定した場合は（Ｓ７０５：Ｙｅｓ）、Ｓ７１０へ処理を移行し、アドレスリスト１７中の全アドレスとの比較を終了していないと判定した場合は（Ｓ７０５：Ｎｏ）、Ｓ７１５へ処理を移行する。
【００８８】
アドレスリスト１７中の全アドレスとの比較を終了したと判定した場合に進むＳ７１０では、最後に比較したアドレスリスト１７中のアドレスのリストインデックスを、次回第二リスト参照処理を実行する際に最初に参照するリストインデックスとして記憶する。そして、第二リスト参照処理を終え、第二退避処理のＳ３１５へ処理を移行する。
【００８９】
アドレスリスト１７中の全アドレスとの比較を終了していないと判定した場合に進むＳ７１５では、アドレスリストとアクセス先アドレスとを比較する。そして、アドレスは一致するか否かを判定する（Ｓ７２０）。アドレスは一致すると判定した場合は（Ｓ７２０：Ｙｅｓ）、Ｓ７２５へ処理を移行し、アドレスは一致しないと判定した場合は（Ｓ７２０：Ｎｏ）、Ｓ７３０へ処理を移行する。
【００９０】
アドレスは一致すると判定した場合に進むＳ７２５では、アドレスが一致した際におけるアドレスリスト１７のリストインデックスを、次回第二リスト参照処理を実行する際に最初に参照するリストインデックスとして記憶する。そして、本処理（第二リスト参照処理）を終了し、第二退避処理を終える（図５参照）。
【００９１】
一方、アドレスは一致しなかったと判定した場合に進むＳ７３０では、リストの末端か否かを判定する。リストの末端であると判定した場合は（Ｓ７３０：Ｙｅｓ）、Ｓ７３５へ処理を移行し、リストの末端でないと判定した場合は（Ｓ７３０：Ｎｏ）、Ｓ７４０へ処理を移行する。
【００９２】
リストの末端であると判定した場合に進むＳ７３５では、参照先リストインデックスを初期化する。つまり、アドレスリスト１７中の先頭のリストインデックスを参照するようにする。そして、Ｓ７０５へ処理を戻す。
【００９３】
リストの末端でないと判定した場合に進むＳ７４０では、参照先リストインデックスをインクリメントする。そして、Ｓ７０５へ処理を戻す。
このような第二リスト参照処理を第一リスト参照処理の代わりに実行すれば、アドレスリスト１７の平均参照回数を抑えることができる。
【００９４】
なお、アドレスの一致判定は、記憶しておいたリストインデックスの次から開始し、記憶しておいたリストインデックスがアドレスリストの終端であった場合はアドレスリストの先頭位置から開始してもよい。このようにすれば、よりアドレスリスト１７の平均参照回数を抑えることができる。
【００９５】
（４）第五退避処理
第五退避処理は、上述した第二退避処理の代わりに実行可能な処理である。この第五退避処理について図１２のフローチャートを用いて説明する。
【００９６】
ＣＰＵ１２は、まず、第五退避処理の実行契機はアプリケーションプログラム中のループ処理であって、本処理（第五待避処理）は一巡目のループ処理において実行する処理であるか否かを判定する（Ｓ８０５）。一巡目のループ処理において実行する処理であると判定した場合は（Ｓ８０５：Ｙｅｓ）、第二退避処理のＳ３１５と同様の処理を実行し、以降は既に説明した第二退避処理と同様の処理を実行する（図５参照）。
【００９７】
一方、Ｓ８０５において、一巡目のループ処理において実行する処理でないと判定した場合は（Ｓ８０５：Ｎｏ）、上述した第二退避処理の第一リスト参照処理又は第二リスト参照処理を実行する（図５，図１１参照）。
【００９８】
つまり、第五退避処理は、第二退避処理に先立ちＳ８０５を実行させ、Ｓ８０５の判定結果に応じて、第二退避処理中の特定のステップから開始させるようにした処理である。なお、一般的に、ＣＰＵ１２等のマイクロコンピュータが、同じ処理を繰り返すループ処理を実行する場合は、ループ処理の１ループ目はメインメモリ（メインメモリ１３）のデータの退避を行わなければならない可能性が高い。したがって、第五待避処理のように、ループ処理の１ループ目については、アドレスリスト１７を参照することなく退避を行うようになっていれば、アドレスリスト１７を参照する負担が減り、ＣＰＵ１２が実行するアプリケーションプログラムの実行処理速度が向上する。
【００９９】
（５）第六退避処理
第六退避処理は、上述した第二退避処理の代わりに実行可能な処理である。この第六退避処理について図１３のフローチャートを用いて説明する。
【０１００】
ＣＰＵ１２は、まず、第六退避処理の実行契機となったアプリケーションプログラムの実行時において、データ退避回数は無条件データ退避回数より少ないか否かを判定する（Ｓ９０５）。ここで言う「データ退避回数」というのは図５のＳ３１５の実行回数と同意である。また、「無条件データ退避回数」というのは予め設定された数値であり、数回程度が適していると考えられる。
【０１０１】
Ｓ９０５において、データ退避回数は無条件データ退避回数より少ないと判定した場合は（Ｓ９０５：Ｙｅｓ）、第二退避処理のＳ３１５と同様の処理を実行し、以降は既に説明した第二退避処理と同様の処理を実行する（図５参照）。
【０１０２】
一方、Ｓ９０５において、データ退避回数は無条件データ退避回数より少なくないと判定した場合は（Ｓ９０５：Ｎｏ）、上述した第二退避処理の第一リスト参照処理又は第二リスト参照処理を実行する（図５，図１１参照）。
【０１０３】
つまり、第六退避処理は、第二退避処理に先立ちＳ９０５を実行させ、Ｓ９０５の判定結果に応じて、第二退避処理中の特定のステップから開始させるようにした処理である。なお、一般的に、ＣＰＵ１２等のマイクロコンピュータが、アプリケーションプログラムの実行を開始した後、データの退避回数が一定数に達するまでは、データの退避を行わなければならない可能性が高い（新しいメモリ領域を使用する可能性が高いため）。したがって、第六待避処理のように、データの退避回数が一定数に達するまでは、アドレスリスト１７を参照することなく退避を行うようになっていれば、アドレスリスト１７を参照する負担が減り、ＣＰＵ１２が実行するアプリケーションプログラムの実行処理速度が向上する。
【図面の簡単な説明】
【０１０４】
【図１】情報処理装置の概略構成を示すブロック図である。
【図２】ライトアクセス処理を説明するためのフローチャートである。
【図３】第一退避処理を説明するためのフローチャートである。
【図４】第一退避処理の一例を説明するためのデータフロー図である。
【図５】第二退避処理を説明するためのフローチャートである。
【図６】第二退避処理の一例を説明するためのデータフロー図である。
【図７】ロールバック処理を説明するためのフローチャートである。
【図８】第三退避処理を説明するためフローチャートである。
【図９】第四退避処理を説明するためのフローチャートである。
【図１０】アクセスフラグテーブルの別例を説明するための説明図である。
【図１１】第二リスト参照処理を説明するためのフローチャートである。
【図１２】第五退避処理を説明するためのフローチャートである。
【図１３】第六退避処理を説明するためのフローチャートである。
【符号の説明】
【０１０５】
１１…情報処理装置、１２…ＣＰＵ、１３…メインメモリ、１４…Ｉ／Ｏ、１５…退避メモリ、１６，１６ａ，１６ｂ…アクセスフラグテーブル、１７…アドレスリスト、１８…バス。
【図１】
2008269488.tif 000003
【図２】
2008269488.tif 000004
【図３】
2008269488.tif 000005
【図５】
2008269488.tif 000006
【図７】
2008269488.tif 000007
【図８】
2008269488.tif 000008
【図９】
2008269488.tif 000009
【図１０】
2008269488.tif 000010
【図１１】
2008269488.tif 000011
【図１２】
2008269488.tif 000012
【図１３】
2008269488.tif 000013
【図４】
2008269488.tif 000014
【図６】
2008269488.tif 000015