(57)【要約】【課題】ユーザ操作時にユーザにプログラムの処理速度の低下を感じさせないようにしつつも、プログラムが異常終了した場合には再起動した際に異常終了する直前の状態にまでプログラムの状態を復旧できるようにする。【解決手段】本発明の一態様としてのプログラム保護装置は、ユーザ操作を逐次、不揮発性メモリ上にユーザ操作履歴として保存する手段と、前記不揮発性メモリ内のユーザ操作履歴のサイズを監視する手段と、前記ユーザ操作履歴のサイズが予約発行サイズに達したら、前記プログラムが利用する揮発性メモリの領域に格納された内容を前記不揮発性メモリへコピーする処理を予約する手段と、ＣＰＵの負荷状態を監視する手段と、前記ＣＰＵの負荷状態が負荷基準を満たす場合は、前記コピーする処理の予約に基づきメモリコピー命令を発行するメモリコピー制御手段と、発行された前記メモリコピー命令にしたがって前記揮発性メモリの領域に格納された内容を前記不揮発性メモリへコピーするメモリコピー手段と、を備える。【選択図】図１
2007122357.tif 000002
【特許請求の範囲】
【請求項１】
ユーザの操作内容によって動作が決定されるプログラムに対するユーザ操作を逐次、不揮発性メモリ上にユーザ操作履歴として保存するユーザ操作履歴書き出し手段と、
前記不揮発性メモリに保存されているユーザ操作履歴のサイズを監視するユーザ操作履歴サイズ監視手段と、
前記不揮発性メモリに保存されている前記ユーザ操作履歴のサイズが予約発行サイズに達したら、前記プログラムが利用する揮発性メモリの領域に格納された内容を前記不揮発性メモリへコピーする処理を予約するメモリコピー予約発行手段と、
ＣＰＵの負荷状態を監視するＣＰＵ監視手段と、
前記ＣＰＵの負荷状態が負荷基準を満たす場合は、前記コピーする処理の予約に基づきメモリコピー命令を発行するメモリコピー制御手段と、
発行された前記メモリコピー命令にしたがって前記揮発性メモリの領域に格納された内容を前記不揮発性メモリへコピーするメモリコピー手段と、
を備えたプログラム保護装置。
【請求項２】
前記ＣＰＵ監視手段は、前記ＣＰＵの負荷状態として、前記ＣＰＵの使用率を監視し、
前記メモリコピー制御手段は、前記負荷基準として、前記ＣＰＵの使用率が一定値以下になったら、前記メモリコピー命令を発行することを特徴とする請求項１に記載のプログラム保護装置。
【請求項３】
前記メモリコピー制御手段は、前記コピーの実行中にユーザ操作が発生した場合は、前記コピーの中止を指示するコピー中止命令を前記メモリコピー手段に対し発行することを特徴とする請求項１または２に記載のプログラム保護装置。
【請求項４】
前記メモリコピー予約発行手段は、前記コピーが中止された場合は、再度前記コピーする処理を予約し、
前記メモリコピー制御手段は、前記ＣＰＵの負荷状態が負荷基準を満たすこととなった場合は、前記再度のコピーする処理の予約に基づき、前記メモリコピー命令を発行することを特徴とする請求項３に記載のプログラム保護装置。
【請求項５】
前記メモリコピー制御手段は、前記コピーの実行中にユーザ操作が発生した場合でも、前記ユーザ操作履歴のサイズがユーザ操作履歴最大サイズに達している場合は、前記コピー中止命令を発行せず、前記コピーが終了するまで、前記ユーザ操作に対する処理を前記ＣＰＵに待機させることを特徴とする請求項３または４に記載のプログラム保護装置。
【請求項６】
ユーザの操作内容によって動作が決定されるプログラムに対するユーザ操作を逐次、不揮発性メモリ上にユーザ操作履歴として保存するユーザ操作履歴書き出し手段と、
前記不揮発性メモリに保存されている前記ユーザ操作履歴のサイズを監視するユーザ操作履歴サイズ監視手段と、
前記ユーザ操作に一定の優先度を付与する第１の優先度付与手段と、
前記不揮発性メモリに保存されている前記ユーザ操作履歴のサイズが予約発行サイズに達したら、前記プログラムが利用する揮発性メモリの領域に格納された内容を前記不揮発性メモリへコピーすることを指示するメモリコピー命令を発行するメモリコピー予約発行手段と、
前記ユーザ操作履歴のサイズがユーザ操作履歴最大サイズより大きい場合は発行された前記メモリコピー命令に前記ユーザ操作よりも高い優先度を付与し、前記ユーザ操作履歴のサイズが前記ユーザ操作履歴最大サイズ以下である場合は発行された前記メモリコピー命令に前記ユーザ操作よりも低い優先度を付与する第２の優先度付与手段と、
前記一定の優先度が付与されたユーザ操作、および前記優先度が付与されたメモリコピー命令を保持する処理待ち操作保持用キューと、
前記メモリコピー命令にしたがって前記揮発性メモリの領域に格納された内容を前記不揮発性メモリへコピーするメモリコピー手段と、
を備えたプログラム保護装置。
【請求項７】
前記コピーの実行中において、前記一定の優先度が付されたユーザ操作が前記処理待ち操作保持用キューに入力された場合は、実行中のコピーの優先度と前記一定の優先度とを比較する比較手段をさらに備え、
前記メモリコピー手段は、前記実行中のコピー処理の優先度が前記一定の優先度よりも低い場合は、前記実行中のコピーを中止し、
前記メモリコピー予約発行手段は、新たにメモリコピー命令を生成することを特徴とする請求項６に記載のプログラム保護装置。
【請求項８】
前記メモリコピー手段は、前記不揮発性メモリへのコピーが終了したら、前記不揮発性メモリに保存されているユーザ操作履歴を消去することを特徴とする請求項１ないし７のいずれかに記載のプログラム保護装置。
【請求項９】
前記メモリコピー手段は、前記プログラムが正常終了したら、前記不揮発性メモリへコピーされた内容および前記不揮発性メモリに保存されているユーザ操作履歴を前記不揮発性メモリから消去することを特徴とする請求項１ないし８のいずれかに記載のプログラム保護装置。
【請求項１０】
前記プログラムの起動時に、前記プログラムが前回異常終了したか否かを、前記不揮発性メモリに前記コピーされた内容および前記ユーザ操作履歴が存在するか否かにより判断し、前記プログラムが異常終了したと判断した場合は、前記不揮発性メモリ内の前記コピーされた内容を用いて、前記異常終了前における揮発性メモリの内容を復元するメモリ内容復元手段と、
前記揮発性メモリの内容が復元されたら、前記不揮発性メモリ内の前記ユーザ操作履歴を前記プログラムへ入力するユーザ操作履歴読み込み手段と、
をさらに備えたことを特徴とする請求項９に記載のプログラム保護装置。
【請求項１１】
前記メモリコピー手段は、前記プログラムが正常終了したらプログラムが正常終了した旨を示すフラグを前記不揮発性メモリに書き込むことを特徴とする請求項１ないし８のいずれかに記載のプログラム保護装置。
【請求項１２】
前記プログラムの起動時に、前記プログラムが前回異常終了したか否かを、前記不揮発性メモリに前記フラグが存在するか否かにより判断し、前記プログラムが異常終了したと判断した場合は、前記不揮発性メモリ内の前記コピーされた内容を用いて、前記異常終了前における揮発性メモリの内容を復元するメモリ内容復元手段と、
前記揮発性メモリの内容が復元されたら、前記不揮発性メモリ内の前記ユーザ操作履歴を前記プログラムへ入力するユーザ操作履歴読み込み手段と、
をさらに備えたことを特徴とする請求項１１に記載のプログラム保護装置。
【請求項１３】
ユーザの操作内容によって動作が決定されるプログラムに対するユーザ操作を入力するステップと、
前記ユーザ操作を不揮発性メモリ上にユーザ操作履歴として保存するユーザ操作履歴書き出しステップと、
前記不揮発性メモリに保存されている前記ユーザ操作履歴のサイズを監視するユーザ操作履歴サイズ監視ステップと、
前記不揮発性メモリに保存されている前記ユーザ操作履歴のサイズが予約発行サイズに達したら、前記プログラムが利用する揮発性メモリの領域に格納された内容を前記不揮発性メモリへコピーする処理を予約するメモリコピー予約発行ステップと、
ＣＰＵの負荷状態を監視するＣＰＵ監視ステップと、
前記ＣＰＵの負荷状態が負荷基準を満たす場合は、前記コピーする処理の予約にしたがって前記揮発性メモリの領域に格納された内容を前記不揮発性メモリへコピーするメモリコピーステップと、
を備えたプログラム保護方法。
【請求項１４】
ユーザの操作内容によって動作が決定されるプログラムに対するユーザ操作を入力するステップと、
前記ユーザ操作を不揮発性メモリ上にユーザ操作履歴として保存するユーザ操作履歴書き出しステップと、
前記不揮発性メモリに保存されている前記ユーザ操作履歴のサイズを監視するユーザ操作履歴サイズ監視ステップと、
入力された前記ユーザ操作に一定の優先度を付与する第１の優先度付与ステップと、
前記不揮発性メモリに保存されている前記ユーザ操作履歴のサイズが予約発行サイズに達したら、前記プログラムが利用する揮発性メモリの領域に格納された内容を前記不揮発性メモリへコピーすることを指示するメモリコピー命令を発行するメモリコピー予約発行ステップと、
前記ユーザ操作履歴のサイズがユーザ操作履歴最大サイズより大きい場合は前記メモリコピー命令に前記ユーザ操作よりも高い優先度を付与し、前記ユーザ操作履歴のサイズが前記ユーザ操作履歴最大サイズ以下である場合は前記メモリコピー命令に前記ユーザ操作よりも低い優先度を付与する、第２の優先度付与ステップと、
前記一定の優先度が付与されたユーザ操作を処理待ち操作保持用キューに入力する第１の入力ステップと、
前記優先度が付与されたメモリコピー命令を前記処理待ち操作保持用キューに入力する第２の入力ステップと、
前記メモリコピー命令にしたがって前記揮発性メモリの領域に格納された内容を前記不揮発性メモリへコピーするメモリコピーステップと、
を備えたプログラム保護方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ユーザ操作を入力として動作が決定されるプログラムを実行するシステムに用いて好適なプログラム保護装置およびプログラム保護方法に関する。
【背景技術】
【０００２】
プログラムの実行中に停電等の事故によりシステムがダウンもしくは、オペレーティングシステム（ＯＳ：Operating System）が原因でプログラムが異常終了すると、それまでプログラムに対して入力していた操作内容が失われてしまう。対策としては、チェックポイントリカバリ方式等の既知の方法にあるように、プログラムの使用する揮発性メモリの内容を定期的に不揮発性メモリにチェックポイントとして保存しておく方法がある。しかし、プログラム実行中に定期的に揮発性メモリ内の内容をコピーする場合、あまり頻繁に揮発性メモリ内の内容をコピーする処理を行うとプログラムの実行速度が低下してしまう。また、逆に、揮発性メモリ内の内容をコピーする頻度が低すぎると、プログラムが異常終了した場合、異常終了するかなり前の状態にしか復帰できない。
【特許文献１】特開２００２−１８２９８８公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
本発明は、ユーザ操作時にユーザにプログラムの処理速度の低下を感じさせないようにしつつも、プログラムが異常終了した場合には異常終了する直前の状態にまでプログラムの状態を復旧できるようにしたプログラム保護装置およびプログラム保護方法を提供する。
【課題を解決するための手段】
【０００４】
本発明の一態様としてのプログラム保護装置は、ユーザの操作内容によって動作が決定されるプログラムに対するユーザ操作を逐次、不揮発性メモリ上にユーザ操作履歴として保存するユーザ操作履歴書き出し手段と、前記不揮発性メモリに保存されているユーザ操作履歴のサイズを監視するユーザ操作履歴サイズ監視手段と、前記不揮発性メモリに保存されている前記ユーザ操作履歴のサイズが予約発行サイズに達したら、前記プログラムが利用する揮発性メモリの領域に格納された内容を前記不揮発性メモリへコピーする処理を予約するメモリコピー予約発行手段と、ＣＰＵの負荷状態を監視するＣＰＵ監視手段と、前記ＣＰＵの負荷状態が負荷基準を満たす場合は、前記コピーする処理の予約に基づきメモリコピー命令を発行するメモリコピー制御手段と、発行された前記メモリコピー命令にしたがって前記揮発性メモリの領域に格納された内容を前記不揮発性メモリへコピーするメモリコピー手段と、を備える。
【０００５】
本発明の一態様としてのプログラム保護装置は、ユーザの操作内容によって動作が決定されるプログラムに対するユーザ操作を逐次、不揮発性メモリ上にユーザ操作履歴として保存するユーザ操作履歴書き出し手段と、前記不揮発性メモリに保存されている前記ユーザ操作履歴のサイズを監視するユーザ操作履歴サイズ監視手段と、前記ユーザ操作に一定の優先度を付与する第１の優先度付与手段と、前記不揮発性メモリに保存されている前記ユーザ操作履歴のサイズが予約発行サイズに達したら、前記プログラムが利用する揮発性メモリの領域に格納された内容を前記不揮発性メモリへコピーすることを指示するメモリコピー命令を発行するメモリコピー予約発行手段と、前記ユーザ操作履歴のサイズがユーザ操作履歴最大サイズより大きい場合は発行された前記メモリコピー命令に前記ユーザ操作よりも高い優先度を付与し、前記ユーザ操作履歴のサイズが前記ユーザ操作履歴最大サイズ以下である場合は発行された前記メモリコピー命令に前記ユーザ操作よりも低い優先度を付与する第２の優先度付与手段と、前記一定の優先度が付与されたユーザ操作、および前記優先度が付与されたメモリコピー命令を保持する処理待ち操作保持用キューと、前記メモリコピー命令にしたがって前記揮発性メモリの領域に格納された内容を前記不揮発性メモリへコピーするメモリコピー手段と、を備える。
【０００６】
本発明の一態様としてのプログラム保護方法は、ユーザの操作内容によって動作が決定されるプログラムに対するユーザ操作を入力するステップと、前記ユーザ操作を不揮発性メモリ上にユーザ操作履歴として保存するユーザ操作履歴書き出しステップと、前記不揮発性メモリに保存されている前記ユーザ操作履歴のサイズを監視するユーザ操作履歴サイズ監視ステップと、前記不揮発性メモリに保存されている前記ユーザ操作履歴のサイズが予約発行サイズに達したら、前記プログラムが利用する揮発性メモリの領域に格納された内容を前記不揮発性メモリへコピーする処理を予約するメモリコピー予約発行ステップと、ＣＰＵの負荷状態を監視するＣＰＵ監視ステップと、前記ＣＰＵの負荷状態が負荷基準を満たす場合は、前記コピーする処理の予約にしたがって前記揮発性メモリの領域に格納された内容を前記不揮発性メモリへコピーするメモリコピーステップと、を備える。
【０００７】
本発明の一態様としてのプログラム保護方法は、ユーザの操作内容によって動作が決定されるプログラムに対するユーザ操作を入力するステップと、前記ユーザ操作を不揮発性メモリ上にユーザ操作履歴として保存するユーザ操作履歴書き出しステップと、前記不揮発性メモリに保存されている前記ユーザ操作履歴のサイズを監視するユーザ操作履歴サイズ監視ステップと、入力された前記ユーザ操作に一定の優先度を付与する第１の優先度付与ステップと、前記不揮発性メモリに保存されている前記ユーザ操作履歴のサイズが予約発行サイズに達したら、前記プログラムが利用する揮発性メモリの領域に格納された内容を前記不揮発性メモリへコピーすることを指示するメモリコピー命令を発行するメモリコピー予約発行ステップと、前記ユーザ操作履歴のサイズがユーザ操作履歴最大サイズより大きい場合は前記メモリコピー命令に前記ユーザ操作よりも高い優先度を付与し、前記ユーザ操作履歴のサイズが前記ユーザ操作履歴最大サイズ以下である場合は前記メモリコピー命令に前記ユーザ操作よりも低い優先度を付与する、第２の優先度付与ステップと、前記一定の優先度が付与されたユーザ操作を処理待ち操作保持用キューに入力する第１の入力ステップと、前記優先度が付与されたメモリコピー命令を前記処理待ち操作保持用キューに入力する第２の入力ステップと、前記メモリコピー命令にしたがって前記揮発性メモリの領域に格納された内容を前記不揮発性メモリへコピーするメモリコピーステップと、を備える。
【発明の効果】
【０００８】
本発明により、ユーザ操作時にユーザにプログラムの処理速度の低下を感じさせないようにしつつも、プログラムが異常終了した場合には異常終了する直前の状態にまでプログラムの状態を復旧できる。
【発明を実施するための最良の形態】
【０００９】
図１は、本発明の一実施の形態としてのプログラム保護装置の構成を示すブロック図である。このプログラム保護装置は、ユーザの操作内容によって動作が決定されるプログラムに対するユーザ操作を逐次、不揮発性メモリ上にユーザ操作履歴として保存する機能と、ユーザ操作履歴のサイズを監視する機能と、ユーザ操作履歴のサイズが規定の予約発行サイズに達したら、プログラムが利用する揮発性メモリの領域に格納された内容を不揮発性メモリへコピーする処理を予約する機能と、ＣＰＵの負荷状態（例えば使用率）を監視する機能と、ＣＰＵの負荷状態が負荷基準を満たしたら（例えば使用率が一定値以下になったら）、上記予約にしたがって揮発性メモリの領域に格納された内容を不揮発性メモリへコピーする機能と、有することを特徴とする。以下、このような特徴を有するプログラム保護装置について詳細に説明する。
【００１０】
プログラム実行装置１１は、ユーザが、ボタン、キーボードもしくはマウスを使って入力を行い、その入力に対する処理を行うようなプログラムを、ＣＰＵ１２を用いて実行する。プログラムがインタプリタ型の言語で作成された中間プログラムである場合はプログラム実行装置１１が中間プログラムをオブジェクトコードに変換しながらＣＰＵ１２がオブジェクトコードを実行する。プログラムは、例えば図示しない記憶部に格納されている。実行中のプログラムの状態は、ＣＰＵ１２の作業領域となる主メモリ等の内部メモリ１３やＣＰＵ１２内のキャッシュメモリに格納される。内部メモリ１３およびキャッシュメモリは揮発性メモリに相当する。プログラムへの入力となるユーザ操作はプログラム実装装置１１の他にユーザ操作履歴書き出し機能１４にも入力される。
【００１１】
ユーザ操作履歴書き出し機能１４は、不揮発性メモリ１５上にユーザ操作の内容をユーザ操作履歴として書き込んでいく。ユーザ操作履歴書き出し機能１４は、ユーザ操作の内容を書き込むたびに現在のユーザ操作履歴のサイズ（合計サイズ）を計算する。ユーザ操作履歴書き出し機能１４は、計算した合計サイズをユーザ操作履歴の一部に含めて不揮発性メモリ１５に書き込んでもよい。
【００１２】
ユーザ操作履歴サイズ監視機能１６は、不揮発性メモリ１５内のユーザ操作履歴のサイズをユーザ操作履歴もしくはユーザ操作履歴書き出し機能１４から逐次取得する。
【００１３】
メモリコピー予約発行機能１７は、ユーザ操作履歴サイズ監視機能１６と協調動作し、ユーザ操作履歴のサイズが規定の予約発行サイズに達した場合、メモリコピー予約を発行する。発行されたメモリコピー予約はメモリコピー実行命令・停止命令発行機能（メモリコピー制御機能）１８に入力される。
【００１４】
ＣＰＵ使用率監視機能１９は、ＣＰＵ１２の使用率を取得する。ＣＰＵ１２の使用率の取得法については、ソフトウェア的に取得してもいいし、ハードウェアから取得してもよい。
【００１５】
メモリコピー実行命令・停止命令発行機能１８は、メモリコピー予約発行機能１７からメモリコピー予約が入力されると、ＣＰＵ使用率監視機能１９との協調動作を開始して、ＣＰＵ使用率監視機能１９から逐次ＣＰＵ使用率を取得する。メモリコピー実行命令・停止命令発行機能１９は、ＣＰＵ使用率が低くなったら（閾値以下になったら）、現在ユーザ操作に対する処理が行われていないと判断し、メモリコピー機能２０を始動させる。すなわち、メモリコピー実行命令・停止命令発行機能１９は、メモリコピー命令を発行する。
【００１６】
メモリコピー機能２０は、メモリコピー命令が入力されると、プログラムの利用する揮発性メモリ（内部メモリ１３およびＣＰＵ１２内のキャッシュメモリ）内の情報を、不揮発性メモリ１５上にメモリコピー情報としてコピーする。
【００１７】
メモリコピー機能２０によるメモリコピーの実行中に、ユーザ操作が入力された場合、メモリコピー実行命令・停止命令発行機能１８は、ユーザ操作履歴サイズ監視機能１６と協調動作して、ユーザ操作履歴サイズを調べる。ユーザ操作履歴サイズが規定のユーザ操作履歴最大サイズに達している場合には、メモリコピー機能２０によるメモリコピーを優先させ、ユーザ操作に対するプログラム処理を後回しにする。一方、ユーザ操作履歴サイズがユーザ履歴最大サイズに達しない場合は、メモリコピー機能２０によるメモリコピーを中止し、ユーザ操作に対するプログラム処理を優先させる。もしメモリコピーを行ったままユーザ操作に対するプログラム処理を並行して行うと、メモリコピーに対するＣＰＵ負荷が大きいことから、プログラムの実行速度が低下し、ユーザに処理速度の低下を感じさせてしまうからである。
【００１８】
メモリコピー機能２０は、メモリコピー完了時には、不揮発性メモリ１５内のユーザ操作履歴を削除する。また、メモリコピー機能２０は、プログラムが正常に終了した場合、不揮発性メモリ１５に保存しておいた、ユーザ操作履歴およびメモリコピー情報を削除する。
【００１９】
メモリ内容復元機能２１は、プログラムの起動時に、プログラムが前回異常終了したか否かを検査し、異常終了していた場合には、プログラムの利用していた揮発性メモリの内容を復元する機能を有する。
【００２０】
より詳細には、メモリ内容復元機能２１は、プログラムの起動時に、不揮発性メモリ１５にアクセスして、ユーザ操作履歴およびメモリコピー情報の少なくともいずれかが残っているか否かを検査する。残っていれば、プログラムが前回、異常終了したと判定する。プログラムが正常終了した場合に、正常終了したことを示すフラグを不揮発性メモリ１５内に立てておき、プログラム起動時にフラグが立っているか否かを調べることにより、プログラムが前回、異常終了かどうかを判定してもよい。メモリ内容復元機能２１は、プログラムが異常終了したと判定した場合、揮発性メモリの内容の復元を行う。すなわち、メモリ内容復元機能２１は、プログラムが異常終了した時点における揮発性メモリ（内部メモリ１３およびＣＰＵ１２内のキャッシュメモリ）内の状態をメモリコピー情報から復元する。
【００２１】
ユーザ操作履歴読み込み機能２２は、メモリ内容復元機能２１によって揮発性メモリの内容が復元された後、不揮発性メモリ１５からユーザ操作履歴を読み込み、自動でプログラム実行装置１１へ入力する。これにより、プログラムの状態が異常終了直前の状態にまで戻される。このように、メモリコピー情報とユーザ操作履歴とを併用することにより、プログラム再起動後、プログラム状態を異常終了する直前の状態に戻すことが可能となる
。
【００２２】
図１に示したプログラム保護装置により実現される機能はハードウェア的に実現してもよいしプログラムによって実現してもよい。プログラムによって実現する場合の例を以下に説明する。
【００２３】
一般的にユーザ操作を入力とし、それに対応する処理を行うプログラム（メインプログラム）は、図２のような流れとなっている。まず、初期設定を行い（Ｓ１１）、ユーザ操作を待機する（Ｓ１２）。ユーザ操作が発生したら、ユーザ操作に対する処理を行い（Ｓ１３）、再度、ユーザ操作待ちに戻る（Ｓ１２）。
【００２４】
上述したプログラム保護装置による機能は、このメインプログラムに新たに命令を書き加えることで実装できる。新たなメインプログラムのフローを図３に示す。処理１（Ｓ２３）および処理２（Ｓ２５）が新たに追加された部分である。この新たなメインプログラムでは、メモリコピープログラムをスレッドとして起動する。このメモリコピープログラムは、後に詳述するが、簡単には、ＣＰＵの使用率が閾値以下になったら、ユーザ操作に対するプログラム処理が行われていないと判断して、予約されているメモリコピー処理（プログラムが利用する揮発性メモリの内容の不揮発性メモリへコピーする処理）を実行するものである。以下この新たなメインプログラムおよびメモリコピープログラムについて詳細に説明する。
【００２５】
図３に示す新たなメインプログラムのフローにおいて、まず、初期設定を行い（Ｓ２１）、ユーザ操作待ち状態になる（Ｓ２２）。このユーザ操作待ち状態おいて、ユーザ操作が発生したら、ユーザ操作に対する処理（Ｓ２４）を行う前に、処理１（Ｓ２３）を行う。
【００２６】
処理１（Ｓ２３）では、まず、メモリコピープログラムが停止しているか否かを判断し（Ｓ３１）、停止している場合は（Ｓ３１のＹＥＳ）、ユーザ操作の内容を不揮発性メモリ１５に書き込み（Ｓ３２）、ユーザ操作履歴サイズを更新する（Ｓ３３）。メモリコピープログラムが停止していない場合は（Ｓ３１のＮＯ）、ユーザ操作履歴サイズと規定のユーザ操作履歴最大サイズとを比較する（Ｓ３４）。ユーザ操作履歴サイズが規定のユーザ操作履歴最大サイズに達している場合は（Ｓ３４のＮＯ）、メモリコピープログラムを統合する（Ｓ３５）。メモリコピープログラム統合処理は、Ｃ言語やＪａｖａ（登録商標）言語におけるｊｏｉｎ命令に対応する。すなわち、スレッドとして起動されているメモリコピープログラムの処理が終了するのを待ってから次の処理、すなわちユーザ操作内容の保存（Ｓ３２）およびユーザ操作履歴サイズの更新（Ｓ３３）に移ることになる。一方、Ｓ３４における比較の結果、ユーザ操作履歴サイズが規定のユーザ操作履歴最大サイズに達していない場合は（Ｓ３４のＹＥＳ）、スレッドとして起動されているメモリコピープログラム自体を停止し（Ｓ３６）、次の処理、すなわちユーザ操作内容の保存（Ｓ３２）およびユーザ操作履歴サイズの更新（Ｓ３３）に移る。
【００２７】
ユーザ操作履歴サイズの更新（Ｓ３３）が終わったら、Ｓ２２の直後で発生したユーザ操作に対する処理を行う（Ｓ２４）。ユーザ操作に対する処理を行ったら、処理２（Ｓ２５）に進む。
【００２８】
処理２（Ｓ２５）では、まず、ユーザ操作履歴サイズと規定の予約発行サイズとを比較し（Ｓ４１）、ユーザ操作履歴サイズが規定の予約発行サイズに達していない場合は（Ｓ４１のＹＥＳ）、ユーザ操作待ち（Ｓ２２）に戻る。一方、ユーザ操作履歴サイズが規定の予約発行サイズに達している場合は（Ｓ４１のＮＯ）、メモリコピープログラムをスレッドとして起動し、ユーザ操作待ち（Ｓ２２）に戻る。ここで、Ｓ２４におけるユーザ操作に対する処理がプログラム終了処理である場合は、不揮発性メモリ１５からユーザ操作履歴を削除し（ユーザ操作履歴サイズを０にし）（Ｓ４３）、不揮発性メモリ１５におけるメモリコピー情報を削除する（Ｓ４４）。これによりメインプログラムを終了する。
【００２９】
図４は、メモリコピープログラムのフローを示すフローチャートである。
【００３０】
このメモリコピープログラムはメモリコピー予約が発行された時点で起動（図４のＳ４２で起動）される。このメモリコピープログラムが起動され、スリープ（sleep）時間が経過したら（ｓｌｅｅｐ時間は自由に設定可能）（Ｓ５１）、ＣＰＵ１２の使用率を取得する（Ｓ５２）。すなわち定期的にＣＰＵ１２の使用率を監視する。ＣＰＵ１２の使用率が規定のＣＰＵ使用率を下回っていなければ（Ｓ５３のＮＯ）Ｓ５１に戻り、スリープ時間の経過を待って再度ＣＰＵの使用率を取得する。ＣＰＵの使用率が規定のＣＰＵ使用率を下回った場合は（Ｓ５３のＹＥＳ）、現在ユーザ操作に対する処理が行われていないと判断して、プログラムの利用する揮発性メモリの内容を不揮発性メモリ１５内にメモリコピー情報としてコピーする（Ｓ５４）。そして、不揮発性メモリ１５内のユーザ操作履歴を削除する（ユーザ操作履歴サイズを０にする）（Ｓ５５）。これによりメモリコピープログラムは終了する。ただし、上述したように、このメモリコピープログラムは図３のＳ３６において強制的に中止されることもある。
【００３１】
ここで、上述した新たなメインプログラムおよびメモリコピープログラムのコーディング例を示す。
【００３２】
図５は、Ｊａｖａ（登録商標）プログラムを用いて、ユーザ操作発生後の処理を記述した例を示す。このコードは、図３の処理１（Ｓ２３）の全体の流れを記述したものである。
【００３３】
図６は、図３の処理１（Ｓ２３）における、Ｓ３４、Ｓ３５、Ｓ３６を実行するコード例を詳細に示した図である。このコードは、プログラムが利用する揮発性メモリの内容を不揮発性メモリへコピーしている最中にユーザ操作が発生したときの処理をｉｎｔｅｒｒｕｐｔ＿ｐｒｏｃｅｓｓ関数として記述した例を示す。
【００３４】
図７は、図３の処理２（Ｓ２５）におけるＳ４１、Ｓ４２を実行するコード例を示す。すなわち、このコードは、ユーザ操作履歴のサイズが予約発行サイズに達した場合にメモリプログラムを起動する（メモリコピー予約を発行する）処理を記述した例を示している。
【００３５】
図８および図９は、メモリコピープログラムのコーディング例を示す。つまり、図８のコードおよび図８のコードに続く図９のコードは、ＣＰＵの使用率を監視する機能、メモリコピーを実行するか否かの判定機能、メモリコピーを実行する機能、ユーザ操作履歴を削除する機能を実装した例を示している。このように、ここでは、ＣＰＵの使用率を監視する仕組みもプログラム上で実装している（ここではＵＮＩＸ（登録商標）、Ｌｉｎｕｘ  ＯＳを想定したコーディングとなっている）。
【００３６】
ここでは、図１のプログラム保護装置による機能を全てソフトウェア上で実装した例を示した。この実装例の手法は、従来のメインプログラムに対して書き加えるプログラムが単純で、かつ、書き加える場所も特定されているため、既存のメインプログラムに対して、自動でプログラム保護機能を付与することも可能である。
【００３７】
以上に説明した本実施の形態により得られる効果について従来の場合と比較しつつ以下に述べる。
【００３８】
チェックポイントリカバリ方式等で一般的に行われている、プログラムが使用する揮発性メモリ内容を定期的に不揮発性メモリへコピーする方法においては、あまり頻繁に揮発性メモリ内の内容をコピーする処理を行うとプログラムの実行速度が低下してしまう。また、逆に、揮発性メモリ内の内容をコピーする頻度が低すぎると、プログラムがダウンするかなり前の状態にしか復帰できないという欠点がある。これに対し、本実施の形態では、プログラムが使用する揮発性メモリの内容を不揮発性メモリへコピーするのは、基本的に、ユーザ操作に対する処理が行われていないとみなせるＣＰＵ使用率の低い時点としている。しかしながら、ＣＰＵ使用率の低い時点というのがいつになるかは予測不能である。そこでユーザ操作履歴のサイズがシステムの設計者や管理者が規定する予約発行サイズ（システムの設計者や管理者が機器のメモリサイズ等に応じてカスタマイズが可能）に達したら、プログラムの利用する揮発性メモリの内容を不揮発性メモリへのコピーする処理の予約を発行するようにし、コピー処理予約が発行された後、ＣＰＵの低い時点を見計らい、プログラムの使用する揮発性メモリの内容を不揮発性メモリへコピーする。このようにすることで、プログラムが異常終了した場合には、不揮発性メモリへコピーした内容と、ユーザ操作履歴とにより、異常終了する直前の状態にまでプログラムの状態を復旧できるとともに、ユーザ操作時にはユーザにプログラムの処理速度の低下を感じさせないようにすることができる。例えば、本実施の形態を携帯電話やＤＶＤレコーダに適用した場合、携帯電話におけるメール作成中やＤＶＤレコーダにおける録画予約中に電源が落ちてしまっても、電源復旧後、作成中のメールや録画予約内容が失われることがない。また、メール作成中や録画予約中に処理の低下をユーザに感じさせることはない。また、停電等の異常事態でなくとも、例えば、携帯電話でのメール作成中に電池交換をするといったことも可能となる。
【００３９】
また、本実施の形態では、プログラムへのユーザ操作は、逐次、不揮発性メモリ上にユーザ操作履歴として保存していく。プログラムへのユーザ操作を逐次保存しても、プログラムの実行速度はほとんど低下しない。しかしながら、プログラムの動作時間が増えるに従って、ユーザによる操作回数も増え、ユーザ操作履歴のサイズが際限なく大きくなる可能性がある。これはリソース制約の厳しい携帯電話などの組込み機器では致命的な問題となる。また、本実施の形態では、プログラム異常終了後、再起動させる際、ユーザ操作履歴を自動でプログラムへ入力するが、ユーザ操作履歴が大きいと、プログラムを異常終了直前の状態に復旧させるのに時間がかかってしまう。特に、携帯電話などの処理能力が低い組込み機器では大きな問題となる。そこで、ユーザ操作履歴が予約発行サイズに達した場合は、プログラムの使用する揮発性メモリの内容を不揮発性メモリへコピーするとともに、コピーが終了した時点でユーザ操作履歴を削除する。このようにすることで、不揮発性メモリのサイズを抑えることができ、よってリソース制約の厳しい組込み機器においても本発明は有効である。また、ユーザにプログラムの処理速度の低下を感じさせることを防ぐことができる。
【００４０】
また、本実施の形態では、プログラムの使用する揮発性メモリの内容を不揮発性メモリへコピーしている最中に、ユーザによる操作が発生した場合、ユーザにプログラムの処理速度の低下を感じさせないようにするために、揮発性メモリの内容を不揮発性メモリへコピーする処理を中止する。このときも、ユーザ操作はユーザ操作履歴として保存される。この仕組みを導入すると、ユーザはプログラムの処理速度の低下は感じなくなるが、プログラムの使用する揮発性メモリの内容の不揮発性メモリへのコピー処理が終了せず、ユーザ操作履歴が際限なく大きくなる可能性が生じる。そこで、システムの設計者や管理者は、ユーザ操作履歴最大サイズを規定できるようにし、ユーザ操作履歴のサイズが、規定のユーザ操作履歴最大サイズに達した場合は、ユーザ操作に対する処理よりも、プログラムの使用する揮発性メモリの内容を不揮発性メモリへコピーする処理を優先する。これにより、ユーザ操作履歴が際限なく大きくなることを防止でき、よって本発明はリソース制約の厳しい機器でも有効である。
【００４１】
また、本実施の形態では、プログラムが異常終了から復帰した際、異常終了する直前の状態にプログラム状態を復帰させるために、不揮発性メモリに保存される、ユーザ操作履歴とメモリコピー情報とを利用する。具体的には、プログラムの利用する揮発性メモリの内容をメモリコピー情報を元に復元した後、ユーザ操作履歴を自動でプログラムへ入力する。このようにすることで、プログラムが異常終了した直前の状態まで復帰することが可能となる。
【００４２】
図１０は、本発明の他の実施の形態に従ったプログラム保護装置の構成を概略的に示すブロック図である。図１と同じ構成要素には同一の符号を付して詳細な説明を省略する。
【００４３】
このプログラム保護装置は、その基本的な構成は図１と同様であるが、図１のＣＰＵ使用率監視機能およびメモリコピー実行命令・停止命令発行機能の代わりに、処理待ち操作保持用キュー３１を備えている。
【００４４】
処理待ち操作保持用キュー３１には、プログラム実行装置１１への入力となるユーザ操作と、メモリコピー予約発行機能が発行するメモリコピー命令（プログラムの利用する揮発性メモリの内容を不揮発性メモリ１５にコピーする処理の実行命令）とが積まれる。メモリコピー命令およびユーザ操作には優先度が付けられる。通常、キューにおいては、先に入力された処理が先に実行されるが、今回使用する優先度付きキューでは、優先度の高い処理が優先的に処理される（優先度が等しい場合は先に入力された処理を先に処理する）。実行すべき処理がユーザ操作の場合はプログラム実行装置１１へ渡され、メモリコピー命令の場合はメモリコピー機能２０へ渡される。メモリコピー機能２０はメモリコピー命令を受けたら即座にメモリコピーを実行する。メモリコピー命令が、処理待ち操作保持用キュー３１に入っている状態が、揮発性メモリの内容を不揮発性メモリ１５へコピーする処理予約が発行されている状態に対応する。メモリコピー予約発行機能１７は、ユーザ操作履歴が規定の予約発行サイズに達したら、後述するルールにしたがって優先度を付与したメモリコピー命令を処理待ち操作保持用キュー３１に追加する。すなわちメモリコピー予約発行機能１７は優先度付与機能を含む。操作保持用キュー３１は、ユーザ操作が入力された場合は、このユーザ操作にあらかじめ決められた一定の優先度を付与して内部に格納する。すなわち、操作保持用キュー３１は、優先度付与機能を含む。この優先度付与機能は処理待ち操作保持用キュー３１の外部に設けられていてもよい。
【００４５】
処理待ち操作保持用キュー３１には、メモリコピー命令は最大１つしか保持されないようにメモリコピー予約発行機能１７が操作する。具体的には、処理待ち操作保持用キュー３１に入れようとするメモリコピー命令の優先度が、既に入っているメモリコピー命令の優先度より高い場合には、既に入っているメモリコピー命令を優先度の高いメモリコピー命令と入れ替える作業を行う。また、処理待ち操作保持用キュー３１に入れようとするメモリコピー命令の優先度が、既に入っているメモリコピー命令の優先度より低い場合、もしくは等しい場合には、新しくメモリコピー命令を処理待ち操作保持用キュー３１に入れることはしない。
【００４６】
ここで、処理待ち操作保持用キュー３１に保持されるメモリコピー命令およびユーザ操作には例えば３段階の優先度（優先度Ａ＞優先度Ｂ＞優先度Ｃ）を付加することができる。ユーザ操作は常に中間の優先度（優先度Ｂ）とする。メモリコピー命令には、次のルール（１）〜（３）に従い、最高優先度（優先度Ａ）または、最低優先度（優先度Ｃ）のどちらかが付される。
【００４７】
［ルール］
（１）ユーザ操作履歴のサイズが規定の予約発行サイズに達しており、かつ、ユーザ操作履歴のサイズが規定のユーザ操作履歴最大サイズに達していない場合は、メモリコピー命令に最低優先度（優先度Ｃ）を付与して、処理待ち操作保持用キュー３１に追加する。
（２）ユーザ操作履歴のサイズが規定のユーザ操作履歴最大サイズに達している場合は、メモリコピー命令に最高優先度（優先度Ａ）を付与して、処理待ち操作保持用キュー３１に追加する。
（３）ユーザ操作履歴のサイズが規定の予約発行サイズに達していない場合は、メモリコピー命令は処理待ち操作保持用キュー３１に追加しない（何もしない）。
【００４８】
上記のルールに従うと、ユーザ操作が行われていないときにのみ、メモリコピー命令が実行されることになる。ただし、ユーザ操作履歴が規定のユーザ操作履歴最大サイズに達している場合は例外で、その場合は、メモリコピー命令が優先して実行される。
【００４９】
ここで、メモリコピー命令を実行している最中（プログラムの利用する揮発性メモリの内容を不揮発性メモリへコピーしている最中）に、ユーザ操作が発生した場合は以下のようにする。まず、現在実行されているメモリコピー命令の優先度と、ユーザ操作の優先度とを比較する。この比較は例えば図示しない比較手段が行う。メモリコピー命令の優先度の方がユーザ操作のよりも低い場合、すなわちメモリコピー命令の優先度が優先度Ｃの場合は、メモリコピー機能２０はコピーを中止し、メモリコピー予約機能１７はメモリコピー命令を処理待ち操作保持用キュー３１に追加しなおす。このときメモリコピー命令に設定する優先度は上記のルールに従う。
【００５０】
以上のように、本実施の形態によれば、処理待ち操作保持用キューを用意し、このキューにユーザ操作とメモリコピー命令とを入れるとともにユーザ操作に対する優先度をメモリコピー命令よりも原則として高く設定することにより、ユーザにプログラムの処理速度の低下を感じさせないようにさせつつ、プログラム状態の保護が可能となる。ただし、ユーザ操作履歴のサイズが規定のユーザ操作履歴最大サイズに達している場合は、メモリコピー命令に対する優先度をユーザ操作のよりも高くし、これによりユーザ操作履歴が際限なく大きくなる不都合を回避できる。
【図面の簡単な説明】
【００５１】
【図１】本発明の一実施の形態に従ったプログラム保護装置の構成を概略的に示すブロック図。
【図２】ユーザ操作を入力として動作が決定されるメインプログラムの一般的な処理の流れを示すフローチャート。
【図３】本発明の実施形態に関わる新たなメインプログラムの流れを示すフローチャート。
【図４】メモリコピープログラムの流れを示すフローチャート。
【図５】図３の新たなメインプログラムの流れにおけるＳ２３を実行するコードの例を示す図。
【図６】図３の新たなメインプログラムの流れにおけるＳ３４〜Ｓ３６を実行するコードの例を示す図。
【図７】図３の新たなメインプログラムの流れにおけるＳ４１、Ｓ４２を実行するコードの例を示す図。
【図８】メモリコピープログラムを実現するコードの例を示す図。
【図９】図８に示すコードの続きを示す図。
【図１０】本発明の他の実施の形態に従ったプログラム保護装置の構成を概略的に示す図。
【符号の説明】
【００５２】
１１  プログラム実行装置
１２  ＣＰＵ
１３  内部メモリ
１４  ユーザ操作履歴書き出し機能
１５  不揮発性メモリ
１６  ユーザ操作履歴サイズ監視機能
１７  メモリコピー予約発行機能
１８  メモリコピー実行命令・停止命令発行機能（メモリコピー制御機能）
１９  ＣＰＵ使用率監視機能
２０  メモリコピー機能
２１  メモリ内容復元機能
２２  ユーザ操作履歴読み込み機能
３１  処理待ち操作保持用キュー（優先度付きキュー）
【図１】
2007122357.tif 000003
【図２】
2007122357.tif 000004
【図３】
2007122357.tif 000005
【図４】
2007122357.tif 000006
【図５】
2007122357.tif 000007
【図６】
2007122357.tif 000008
【図７】
2007122357.tif 000009
【図８】
2007122357.tif 000010
【図９】
2007122357.tif 000011
【図１０】
2007122357.tif 000012