(57)【要約】【課題】  電力の供給が停止した際における状態にＣＰＵやメモリの状態を復帰させる際に必要となる情報の量を低減することが可能な計算機、制御プログラム、及び、制御方法を提供する。【解決手段】  計算機１が、実行されているブロックのブロックＩＤをＢＣとして記憶するブロックカウンタ５１と、読取用バッファとして用いる不揮発性のバッファのバッファＩＤをＲＰとして記憶する不揮発性の読取用バッファポインタ記憶部５２と、書込用バッファとして用いる不揮発性のバッファのバッファＩＤをＷＰとして記憶する書込用バッファポインタ記憶部５３と、ＲＰによって特定される不揮発性のバッファに書き込まれた情報を読み出してブロックを実行し、該ブロックを実行することによって得られた情報をＷＰによって特定される不揮発性のバッファに書き込むプログラム実行部２０とを備える。【選択図】  図２
2005352769.tif 000002
【特許請求の範囲】
【請求項１】
所定のプログラムに含まれ、奇数番目に実行されるブロックである第１のブロックと、該所定のプログラムに含まれ、偶数番目に実行されるブロックである第２のブロックとを実行するプログラム実行部と、
前記所定のプログラムに含まれるブロックを実行する場合に、該ブロックを特定するブロック識別子を記憶する不揮発性のブロック識別子記憶部と、
前記第１のブロックを実行する場合に、不揮発性のバッファである第１のバッファを特定する第１のバッファ識別子を読取用バッファ識別子として記憶し、前記第２のブロックを実行する場合に、不揮発性のバッファである第２のバッファを特定する第２のバッファ識別子を前記読取用バッファ識別子として記憶する不揮発性の読取用バッファ識別子記憶部と、
前記第１のブロックを実行する場合に、前記第２のバッファ識別子を書込用バッファ識別子として記憶し、前記第２のブロックを実行する場合に、前記第１のバッファ識別子を前記書込用バッファ識別子として記憶する不揮発性の書込用バッファ識別子記憶部とを備え、
前記プログラム実行部は、
前記第１のバッファに書き込まれた情報を読み出して前記第１のブロックを実行し、該第１のブロックを実行することによって得られた情報を前記第２のバッファに書き込み、前記第２のバッファに書き込まれた情報を読み出して前記第２のブロックを実行し、該第２のブロックを実行することによって得られた情報を前記第１のバッファに書き込むことを特徴とする計算機。
【請求項２】
前記プログラム実行部は、
該プログラム実行部に対する電力の供給が停止した後、該プログラム実行部に対する電力の供給が再開された場合に、前記読取用バッファ識別子によって特定される前記不揮発性のバッファに書き込まれた情報を読み出して前記ブロック識別子によって特定されるブロックを実行し、該ブロックを実行することによって得られた情報を前記書込用バッファ識別子によって特定される前記不揮発性のバッファに書き込むことを特徴とする請求項１に記載の計算機。
【請求項３】
前記プログラム実行部は、
前記所定のプログラムを実行しているときに、所定の機器から所定の情報が入力されると、該所定の情報に対応する割込みプログラムを実行し、前記割込みプログラムを実行した後に、前記読取用バッファ識別子によって特定される前記不揮発性のバッファに書き込まれた情報を読み出して前記ブロック識別子によって特定されるブロックを実行し、該ブロックを実行することによって得られた情報を前記書込用バッファ識別子によって特定される前記不揮発性のバッファに書き込むことを特徴とする請求項１又は請求項２に記載の計算機。
【請求項４】
前記プログラム実行部は、
前記所定のプログラムを実行しているときに、前記所定の機器から前記所定の情報が入力されると、前記所定のプログラムの優先度と前記割込みプログラムの優先度とを比較し、前記割込みプログラムの優先度が前記所定のプログラムの優先度よりも高い場合に、該割込みプログラムを実行することを特徴とする請求項３に記載の計算機。
【請求項５】
所定のプログラムに含まれ、奇数番目に実行されるブロックである第１のブロックと、該所定のプログラムに含まれ、偶数番目に実行されるブロックである第２のブロックとを実行する手順Ａと、
前記所定のプログラムに含まれるブロックを実行する場合に、該ブロックを特定するブロック識別子を不揮発性のブロック識別子記憶部に記憶する手順Ｂと、
前記第１のブロックを実行する場合に、不揮発性のバッファである第１のバッファを特定する第１のバッファ識別子を読取用バッファ識別子として不揮発性の読取用バッファ識別子記憶部に記憶する手順Ｃと、
前記第２のブロックを実行する場合に、不揮発性のバッファである第２のバッファを特定する第２のバッファ識別子を前記読取用バッファ識別子として前記読取用バッファ識別子記憶部に記憶する手順Ｄと、
前記第１のブロックを実行する場合に、前記第２のバッファ識別子を書込用バッファ識別子として不揮発性の書込用バッファ識別子記憶部に記憶する手順Ｅと、
前記第２のブロックを実行する場合に、前記第１のバッファ識別子を前記書込用バッファ識別子として前記書込用バッファ識別子記憶部に記憶する手順Ｆとを計算機に実行させ、
前記手順Ａには、
前記第１のバッファに書き込まれた情報を読み出して前記第１のブロックを実行し、該第１のブロックを実行することによって得られた情報を前記第２のバッファに書き込む手順と、
前記第２のバッファに書き込まれた情報を読み出して前記第２のブロックを実行し、該第２のブロックを実行することによって得られた情報を前記第１のバッファに書き込む手順とが含まれていることを特徴とする制御プログラム。
【請求項６】
前記手順Ａには、
電力の供給が停止した後に、電力の供給が再開された場合に、前記読取用バッファ識別子によって特定される前記不揮発性のバッファに書き込まれた情報を読み出して前記ブロック識別子によって特定されるブロックを実行し、該ブロックを実行することによって得られた情報を前記書込用バッファ識別子によって特定される前記不揮発性のバッファに書き込む手順が含まれていることを特徴とする請求項５に記載の制御プログラム。
【請求項７】
所定のプログラムに含まれ、奇数番目に実行されるブロックである第１のブロックと、該所定のプログラムに含まれ、偶数番目に実行されるブロックである第２のブロックとを実行するステップＡと、
前記所定のプログラムに含まれるブロックを実行する場合に、該ブロックを特定するブロック識別子を不揮発性のブロック識別子記憶部に記憶するステップＢと、
前記第１のブロックを実行する場合に、不揮発性のバッファである第１のバッファを特定する第１のバッファ識別子を読取用バッファ識別子として不揮発性の読取用バッファ識別子記憶部に記憶するステップＣと、
前記第２のブロックを実行する場合に、不揮発性のバッファである第２のバッファを特定する第２のバッファ識別子を前記読取用バッファ識別子として前記読取用バッファ識別子記憶部に記憶するステップＤと、
前記第１のブロックを実行する場合に、前記第２のバッファ識別子を書込用バッファ識別子として不揮発性の書込用バッファ識別子記憶部に記憶するステップＥと、
前記第２のブロックを実行する場合に、前記第１のバッファ識別子を前記書込用バッファ識別子として前記書込用バッファ識別子記憶部に記憶するステップＦとを含み、
前記ステップＡには、
前記第１のバッファに書き込まれた情報を読み出して前記第１のブロックを実行し、該第１のブロックを実行することによって得られた情報を前記第２のバッファに書き込むステップと、
前記第２のバッファに書き込まれた情報を読み出して前記第２のブロックを実行し、該第２のブロックを実行することによって得られた情報を前記第１のバッファに書き込むステップとが含まれていることを特徴とする制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
所定のプログラムに含まれる複数のブロックを実行する計算機、制御プログラム、及び、制御方法。
【背景技術】
【０００２】
従来、所定のプログラムを実行する中央演算装置（以下、ＣＰＵ）と、ＣＰＵによって実行される所定のプログラムが展開される主記憶装置（以下、メモリ）とを備えた計算機が知られている。
【０００３】
一般的に、このように構成された計算機では、ＣＰＵやメモリに対する電力の供給が停止すると、ＣＰＵのレジスタやメモリに記憶された情報は、消失してしまう。
【０００４】
これに対し、ＣＰＵやメモリに対する電力の供給が停止した後に、電力の供給が再開された場合に、電力の供給が停止した際における状態にＣＰＵやメモリの状態を復帰させる方法として、チェックポイントアルゴリズムが知られている。
【０００５】
具体的には、計算機は、所定のタイミング（チェックポイント）毎に、ＣＰＵのレジスタやメモリに記憶されている情報をチェックポイントレコードとして外部機器（ハードディスク等）に記憶する。また、計算機は、ＣＰＵやメモリに対する電力の供給が停止した後に、電力の供給が再開された場合には、上述したチェックポイントレコードを用いてロールバックやロールフォワード等を行い、電力の供給が停止した際における状態にＣＰＵやメモリの状態を復帰させる。
【０００６】
一方、チェックポイントレコードを外部機器に記憶する処理に係る負荷及びチェックポイントレコードをメモリ上に読み出す処理に係る負荷を軽減するために、上述したメモリや外部機器として不揮発性メモリを用いる方法が提案されている（例えば、非特許文献１）。
【０００７】
なお、一般的に、電力の供給が停止した際における状態にＣＰＵやメモリの状態を復帰させるために必要な時間を短縮するために、チェックポイントの数は、多い方が望ましい。
【非特許文献１】大村  廉、山崎  信行、安西  祐一郎、“不揮発メモリを用いた永続システムの設計方法”、信学論、Vol.J85-D1、No.9、pp.817-830、Nov.2002．
【発明の開示】
【発明が解決しようとする課題】
【０００８】
しかしながら、上述した計算機では、各チェックポイントにおいて外部機器（又は、不揮発性メモリ）に記憶される情報（チェックポイントレコード）の量は、チェックポイントの数に応じて増加する。すなわち、チェックポイントの数を増加させると、チェックポイントレコードに係る記憶領域として大きな記憶領域が必要となるという問題があった。
【０００９】
また、上述した計算機では、各チェックポイントにおいてチェックポイントレコードを記憶する処理に係る時間が長く、電源の供給が停止した際における状態にＣＰＵの状態を復帰させる処理に係る時間も長かった。
【００１０】
そこで、本発明は、上述の問題を解決するためになされたものであり、電力の供給が停止した際における状態にＣＰＵやメモリの状態を復帰させる際に必要となる情報の量を低減することが可能な計算機、制御プログラム、及び、制御方法を提供することを目的とする。
【課題を解決するための手段】
【００１１】
本発明の第１の特徴は、所定のプログラムに含まれ、奇数番目に実行されるブロックである第１のブロックと、該所定のプログラムに含まれ、偶数番目に実行されるブロックである第２のブロックとを実行するプログラム実行部と、所定のプログラムに含まれるブロックを実行する場合に、該ブロックを特定するブロック識別子を記憶する不揮発性のブロック識別子記憶部と、第１のブロックを実行する場合に、不揮発性のバッファである第１のバッファを特定する第１のバッファ識別子を読取用バッファ識別子として記憶し、第２のブロックを実行する場合に、不揮発性のバッファである第２のバッファを特定する第２のバッファ識別子を読取用バッファ識別子として記憶する不揮発性の読取用バッファ識別子記憶部と、第１のブロックを実行する場合に、第２のバッファ識別子を書込用バッファ識別子として記憶し、第２のブロックを実行する場合に、第１のバッファ識別子を書込用バッファ識別子として記憶する不揮発性の書込用バッファ識別子記憶部とを備え、プログラム実行部は、第１のバッファに書き込まれた情報を読み出して第１のブロックを実行し、該第１のブロックを実行することによって得られた情報を第２のバッファに書き込み、第２のバッファに書き込まれた情報を読み出して第２のブロックを実行し、該第２のブロックを実行することによって得られた情報を第１のバッファに書き込む計算機であることを要旨とする。
【００１２】
かかる特徴によれば、計算機は、第１のバッファと第２のバッファとを読取用バッファとしてブロック毎に交互に用いるとともに、ブロック識別子を不揮発性のブロック識別子記憶部に記憶し、読取用バッファ識別子を不揮発性の読取用バッファ識別子記憶部に記憶することにより、電力の供給が停止した際における状態にプログラム実行部（ＣＰＵ等）の状態を復帰させる際に必要となる情報の量を低減することができる。
【００１３】
本発明の第１の特徴において、プログラム実行部は、該プログラム実行部に対する電力の供給が停止した後、該プログラム実行部に対する電力の供給が再開された場合に、読取用バッファ識別子によって特定される不揮発性のバッファに書き込まれた情報を読み出してブロック識別子によって特定されるブロックを実行し、該ブロックを実行することによって得られた情報を書込用バッファ識別子によって特定される不揮発性のバッファに書き込むことが好ましい。
【００１４】
かかる特徴によれば、計算機は、読取用バッファ識別子によって特定される不揮発性のバッファに書き込まれた情報を読み出してブロック識別子によって特定されるブロックを実行することにより、電力の供給が停止した際における状態にプログラム実行部（ＣＰＵ等）の状態を容易に復帰させることができる。
【００１５】
本発明の第１の特徴において、プログラム実行部は、所定のプログラムを実行しているときに、所定の機器から所定の情報が入力されると、該所定の情報に対応する割込みプログラムを実行し、割込みプログラムを実行した後に、読取用バッファ識別子によって特定される不揮発性のバッファに書き込まれた情報を読み出してブロック識別子によって特定されるブロックを実行し、該ブロックを実行することによって得られた情報を書込用バッファ識別子によって特定される不揮発性のバッファに書き込むことが好ましい。
【００１６】
かかる特徴によれば、計算機は、割込みプログラムを実行した後に、読取用バッファ識別子によって特定される不揮発性のバッファに書き込まれた情報を読み出してブロック識別子によって特定されるブロックを実行することにより、割込みプログラムによる割込みが発生した場合であっても、割込みプログラムによる割込みが発生する前の状態にプログラム実行部の状態を容易に復帰させることができる。
【００１７】
本発明の第１の特徴において、プログラム実行部は、所定のプログラムを実行しているときに、所定の機器から所定の情報が入力されると、所定のプログラムの優先度と割込みプログラムの優先度とを比較し、割込みプログラムの優先度が所定のプログラムの優先度よりも高い場合に、該割込みプログラムを実行することが好ましい。
【００１８】
かかる特徴によれば、計算機は、割込みプログラムの優先度が所定のプログラムの優先度よりも高い場合に、該割込みプログラムを実行することにより、所定のプログラムの優先度が高い場合に、割込みプログラムによる割込みが発生することを防止することができる。
【００１９】
本発明の第２の特徴は、所定のプログラムに含まれ、奇数番目に実行されるブロックである第１のブロックと、該所定のプログラムに含まれ、偶数番目に実行されるブロックである第２のブロックとを実行する手順Ａと、所定のプログラムに含まれるブロックを実行する場合に、該ブロックを特定するブロック識別子を不揮発性のブロック識別子記憶部に記憶する手順Ｂと、第１のブロックを実行する場合に、不揮発性のバッファである第１のバッファを特定する第１のバッファ識別子を読取用バッファ識別子として不揮発性の読取用バッファ識別子記憶部に記憶する手順Ｃと、第２のブロックを実行する場合に、不揮発性のバッファである第２のバッファを特定する第２のバッファ識別子を読取用バッファ識別子として読取用バッファ識別子記憶部に記憶する手順Ｄと、第１のブロックを実行する場合に、第２のバッファ識別子を書込用バッファ識別子として不揮発性の書込用バッファ識別子記憶部に記憶する手順Ｅと、第２のブロックを実行する場合に、第１のバッファ識別子を書込用バッファ識別子として書込用バッファ識別子記憶部に記憶する手順Ｆとを計算機に実行させ、手順Ａには、第１のバッファに書き込まれた情報を読み出して第１のブロックを実行し、該第１のブロックを実行することによって得られた情報を第２のバッファに書き込む手順と、第２のバッファに書き込まれた情報を読み出して第２のブロックを実行し、該第２のブロックを実行することによって得られた情報を第１のバッファに書き込む手順とが含まれている制御プログラムであることを要旨とする。
【００２０】
かかる特徴によれば、第１のバッファと第２のバッファとが読取用バッファとしてブロック毎に交互に計算機に用いられるとともに、ブロック識別子が不揮発性のブロック識別子記憶部に記憶され、読取用バッファ識別子が不揮発性の読取用バッファ識別子記憶部に記憶されることにより、電力の供給が停止した際における状態に計算機（ＣＰＵ等）の状態を復帰させる際に必要となる情報の量を低減することができる。
【００２１】
本発明の第２の特徴において、手順Ａには、電力の供給が停止した後に、電力の供給が再開された場合に、読取用バッファ識別子によって特定される不揮発性のバッファに書き込まれた情報を読み出してブロック識別子によって特定されるブロックを実行し、該ブロックを実行することによって得られた情報を書込用バッファ識別子によって特定される不揮発性のバッファに書き込む手順が含まれていることが好ましい。
【００２２】
かかる特徴によれば、読取用バッファ識別子によって特定される不揮発性のバッファに書き込まれた情報が読み出されて、ブロック識別子によって特定されるブロックが実行されることにより、電力の供給が停止した際における状態に計算機（ＣＰＵ等）の状態を容易に復帰させることができる。
【００２３】
本発明の第３の特徴は、所定のプログラムに含まれ、奇数番目に実行されるブロックである第１のブロックと、該所定のプログラムに含まれ、偶数番目に実行されるブロックである第２のブロックとを実行するステップＡと、所定のプログラムに含まれるブロックを実行する場合に、該ブロックを特定するブロック識別子を不揮発性のブロック識別子記憶部に記憶するステップＢと、第１のブロックを実行する場合に、不揮発性のバッファである第１のバッファを特定する第１のバッファ識別子を読取用バッファ識別子として不揮発性の読取用バッファ識別子記憶部に記憶するステップＣと、第２のブロックを実行する場合に、不揮発性のバッファである第２のバッファを特定する第２のバッファ識別子を読取用バッファ識別子として読取用バッファ識別子記憶部に記憶するステップＤと、第１のブロックを実行する場合に、第２のバッファ識別子を書込用バッファ識別子として不揮発性の書込用バッファ識別子記憶部に記憶するステップＥと、第２のブロックを実行する場合に、第１のバッファ識別子を書込用バッファ識別子として書込用バッファ識別子記憶部に記憶するステップＦとを含み、ステップＡには、第１のバッファに書き込まれた情報を読み出して第１のブロックを実行し、該第１のブロックを実行することによって得られた情報を第２のバッファに書き込むステップと、第２のバッファに書き込まれた情報を読み出して第２のブロックを実行し、該第２のブロックを実行することによって得られた情報を第１のバッファに書き込むステップとが含まれている制御方法であることを要旨とする。
【００２４】
かかる特徴によれば、第１のバッファと第２のバッファとが読取用バッファとしてブロック毎に交互に用いられ、ブロック識別子が不揮発性のブロック識別子記憶部に記憶され、読取用バッファ識別子が不揮発性の読取用バッファ識別子記憶部に記憶されることにより、電力の供給が停止した際における状態に計算機（ＣＰＵ等）の状態を復帰させる際に必要となる情報の量を低減することができる。
【発明の効果】
【００２５】
本発明によれば、電力の供給が停止した際における状態にＣＰＵやメモリの状態を復帰させる際に必要となる情報の量を低減することが可能な計算機、制御プログラム、及び、制御方法を提供することができる。
【発明を実施するための最良の形態】
【００２６】
（本発明の一実施形態に係る計算機の構成）
以下において、本発明の一実施形態に係る計算機の構成について、図面を参照しながら説明する。
【００２７】
図１は、本発明の一実施形態に係る計算機の構成を示すブロック図である。
【００２８】
図１に示すように、本発明の一実施形態に係る計算機１は、プログラム記憶部１０と、プログラム実行部２０と、実行結果記憶部３０と、第１バッファ４０ａと、第２バッファ４０ｂと、実行状態記憶部５０と、実行状態補助記憶部６０と、制御プログラム記憶部６８とによって構成されている。
【００２９】
プログラム記憶部１０は、不揮発性メモリ（例えば、フラッシュメモリ）によって構成され、複数のブロックによって構成されたプログラムを記憶している。具体的には、図２（ａ）に示すように、プログラム記憶部１０は、各ブロックがブロック１から順にブロックＮまで実行されるように構成されたプログラムを記憶している。
【００３０】
ここで、各ブロックは、該ブロックを実行している途中で他のブロックを呼び出さないように構成され、該ブロックで外部変数を用いないように構成されている。また、各ブロックは、前のブロックが実行されたことによって得られた情報及び今回のブロックで定義される（宣言される）情報（変数）のみを用いて、実行されるように構成されている。
【００３１】
さらに、各ブロックは、該ブロックに条件文を記述する場合には、該ブロックの最後に条件文が記述されるように構成されている。具体的には、図３（ａ）に示すように、ブロック（function  A1）に条件文を記述する場合には、条件文は、該ブロック（function  A1）の最後に記述される。なお、条件文は、該条件文に該当する場合に実行されるブロック（function  B）と、条件文に該当しない場合に実行されるブロック（function  C）とのうち、いずれか一方が必ず選択されるように記述される。
【００３２】
また、各ブロックは、該ブロックに繰返し文を記述する場合には、該ブロックの最後に繰返し文が記述されるように構成されている。具体的には、図３（ｂ）に示すように、ブロック（function  B）に繰返し文を記述する場合には、該繰返し文は、該ブロック（function  B）の最後に記述される。すなわち、ブロック（function  B）は、該ブロックを実行した後に、再び実行される（繰り返される）。
【００３３】
プログラム実行部２０は、プログラム記憶部１０に記憶されたプログラムをブロック１から順にブロックＮまで実行する。具体的には、プログラム実行部２０は、第１バッファ４０ａ及び第２バッファ４０ｂのうち一方のバッファを読取用バッファとして用いるとともに、他方のバッファを書込用バッファとして用いて、各ブロックを実行する。また、プログラム実行部２０は、読取用バッファとして用いるバッファをブロック毎に切替えるとともに、書込用バッファとして用いるバッファをブロック毎に切替える。
【００３４】
例えば、図２（ｂ）に示すように、プログラム実行部２０は、ブロックＸを実行する場合には、読取用バッファとして第１バッファ４０ａを用い、書込用バッファとして第２バッファ４０ｂを用いる。一方、図２（ｃ）に示すように、プログラム実行部２０は、ブロックＸ＋１を実行する場合には、読取用バッファとして第２バッファ４０ｂを用い、書込用バッファとして第１バッファ４０ａを用いる。
【００３５】
また、プログラム実行部２０は、最後のブロック（ブロックＮ）を実行した結果、書込用バッファに書き込んだ情報を実行結果記憶部３０に記憶する。
【００３６】
実行結果記憶部３０は、プログラム実行部２０によってプログラムが実行されることによって得られた情報（最後のブロック（ブロックＮ）を実行した結果、書込用バッファに書き込まれた情報）を記憶するものである。なお、実行結果記憶部３０は、プログラム実行部２０によってプログラムが実行されたことによって得られた情報を所定の機器に送信するように構成されていてもよい。
【００３７】
第１バッファ４０ａは、不揮発性のメモリ（例えば、ＭＲＡＭ）によって構成され、読取用バッファ又は書込用バッファとして用いられるものである。また、第１バッファ４０ａは、読取用バッファから書込用バッファに（又は、書込用バッファから読取用バッファに）ブロック毎に切替えられる。例えば、第１バッファ４０ａは、奇数番目に実行されるブロックを実行する場合には、読取用バッファとして用いられ、偶数番目に実行されるブロックを実行する場合には、書込用バッファとして用いられる。
【００３８】
第２バッファ４０ｂは、不揮発性のメモリ（例えば、ＭＲＡＭ）によって構成され、読取用バッファ又は書込用バッファとして用いられるものである。また、第２バッファ４０ｂは、読取用バッファから書込用バッファに（又は、書込用バッファから読取用バッファに）ブロック毎に切替えられる。例えば、第２バッファ４０ｂは、奇数番目に実行されるブロックを実行する場合には、書込用バッファとして用いられ、偶数番目に実行されるブロックを実行する場合には、読取用バッファとして用いられる。
【００３９】
実行状態記憶部５０は、不揮発性のメモリ（例えば、ＭＲＡＭ）によって構成され、各ブロックを実行している際におけるプログラム実行部２０の状態を特定するための情報を記憶するものである。
【００４０】
具体的には、実行状態記憶部５０は、ブロックカウンタ５１と、読取用バッファポインタ記憶部５２と、書込用バッファポインタ記憶部５３とによって構成されている。
【００４１】
ブロックカウンタ５１は、プログラム実行部２０によって実行されているブロックを特定する識別子（以下、ブロックＩＤ）を、ＢＣとして記憶するものである。
【００４２】
読取用バッファポインタ記憶部５２は、プログラム実行部２０によって読取用バッファとして用いられているバッファを特定する識別子（以下、バッファＩＤ）をＲＰとして記憶するものである。上述したように、読取用バッファとして用いられているバッファは、第１バッファ４０ａ又は第２バッファ４０ｂであるため、読取用バッファポインタ記憶部５２には、第１バッファ４０ａのバッファＩＤ（以下、Ｐ１）又は第２バッファ４０ｂのバッファＩＤ（以下、Ｐ２）がＲＰとして記憶される。
【００４３】
書込用バッファポインタ記憶部５３は、プログラム実行部２０によって書込用バッファとして用いられているバッファを特定するバッファＩＤをＷＰとして記憶するものである。上述したように、書込用バッファとして用いられているバッファは、第１バッファ４０ａ又は第２バッファ４０ｂであるため、書込用バッファポインタ記憶部５３には、第１バッファ４０ａを特定するバッファＩＤ（Ｐ１）又は第２バッファ４０ｂを特定するバッファＩＤ（Ｐ２）がＷＰとして記憶される。
【００４４】
実行状態補助記憶部６０は、不揮発性のメモリ（例えば、ＭＲＡＭ）によって構成され、プログラム実行部２０に対する電力の供給が停止した後に、プログラム実行部２０に対する電力の供給が再開された場合に、電力の供給が停止した際における状態にプログラム実行部２０の状態を復帰させるために用いられる情報を記憶するものである。具体的には、実行状態補助記憶部６０は、ブロックカウンタ６１と、読取用バッファポインタ記憶部６２と、書込用バッファポインタ記憶部６３と、更新フラグ記憶部６４とによって構成されている。
【００４５】
ブロックカウンタ６１は、ブロックカウンタ５１に記憶されたＢＣの値と同じ値を、ＢＣ’として記憶するものである。ここで、ＢＣ’の値は、ＢＣの値が更新されたことに連動して更新されるが、ＢＣの値が更新された後に更新される。なお、ＢＣの値及びＢＣ’の値が更新されるタイミングについては後述する（図４を参照）。
【００４６】
読取用バッファポインタ記憶部６２は、読取用バッファポインタ記憶部５２に記憶されたＲＰの値と同じ値を、ＲＰ’として記憶するものである。ここで、ＲＰ’の値は、ＲＰの値が更新されたことに連動して更新されるが、ＲＰの値が更新された後に更新される。なお、ＲＰの値及びＲＰ’の値が更新されるタイミングについては後述する（図４を参照）。
【００４７】
書込用バッファポインタ記憶部６３は、書込用バッファポインタ記憶部５３に記憶されたＷＰの値と同じ値を、ＷＰ’として記憶するものである。ここで、ＷＰ’の値は、ＷＰの値が更新されたことに連動して更新されるが、ＷＰの値が更新された後に更新される。なお、ＷＰの値及びＷＰ’の値が更新されるタイミングについては後述する（図４を参照）。
【００４８】
更新フラグ記憶部６４は、ＢＣ、ＲＰ及びＷＰの値が更新されている途中であるか否かを示す更新フラグ（1bit）を記憶するものである。
【００４９】
具体的には、更新フラグには、ＢＣ、ＲＰ及びＷＰの値の更新が開始すると“１”がセットされ、ＢＣ、ＲＰ及びＷＰの値の更新が終了すると“０”がセットされる。
【００５０】
制御プログラム記憶部６８は、プログラム記憶部１０に記憶された所定のプログラムをプログラム実行部２０に実行させる制御プログラムを記憶するものである。制御プログラム記憶部６８は、例えば、ＲＡＭ、ＲＯＭ、ハードディスク、フレキシブルディスク、ＩＣチップ、カセットテープなどの記録媒体である。このような記録媒体によれば、制御プログラムの保存、運搬、販売などを容易に行うことができる。
【００５１】
以下において、ブロックＸが実行される場合において、ＢＣの値、ＲＰの値、ＷＰの値、ＢＣ’の値、ＲＰ’の値、ＷＰ’の値及び更新フラグの値が更新されるタイミングについて、図面を参照しながら説明する。
【００５２】
なお、ブロックＸのブロックＩＤは、Ｘであるものとし、ブロックＸ＋１のブロックＩＤは、Ｘ＋１であるものとする。
【００５３】
図４は、ＢＣの値、ＲＰの値、ＷＰの値、ＢＣ’の値、ＲＰ’の値、ＷＰ’の値及び更新フラグの値が更新されるタイミングについて説明するための図である。
【００５４】
図４に示すように、プログラム実行部２０がブロックＸの実行している場合には、ＢＣの値、ＲＰの値、ＷＰの値、ＢＣ’の値、ＲＰ’の値、ＷＰ’の値及び更新フラグの値は、それぞれ、Ｘ、Ｐ１、Ｐ２、Ｘ、Ｐ１、Ｐ２及び“０”である。
【００５５】
すなわち、プログラム実行部２０は、ブロックＸを実行する際には、第１バッファ４０ａを読取用バッファとして用い、第２バッファ４０ｂを書込用バッファとして用いる。
【００５６】
なお、プログラム実行部２０は、ブロックＸの実行が終了すると（第２バッファ４０ｂに対する情報の書き込みが終了する）と、手順１に係る処理に移る。
【００５７】
手順１において、プログラム実行部２０は、更新フラグに“１”をセットし、手順２に係る処理に移る。
【００５８】
手順２において、プログラム実行部２０は、ＢＣの値、ＲＰの値及びＷＰの値を、それぞれ、Ｘ＋１、Ｐ２及びＰ１に更新し、手順３に係る処理に移る。すなわち、プログラム実行部２０は、次のブロック（ブロックＸ＋１）を実行する際には、第２バッファ４０ｂを読取用バッファとして用い、第１バッファ４０ａを書込用バッファとして用いる。
【００５９】
手順３において、プログラム実行部２０は、ＢＣの値、ＲＰの値及びＷＰの値の更新が終了したものと判断して、更新フラグの値に“０”をセットし、手順４に係る処理に移る。
【００６０】
手順４において、プログラム実行部２０は、ＢＣ’の値、ＲＰ’の値及びＷＰ’の値を、それぞれ、ＢＣの値（Ｘ＋１）、ＲＰの値（Ｐ２）及びＷＰの値（Ｐ１）に更新し、ブロックＸ＋１の実行に係る処理に移る。
【００６１】
Ｘ＋１実行中では、読取用バッファである第２バッファ４０ｂから情報を読み出して、ブロックＸ＋１を実行し、ブロックＸ＋１を実行することによって得られた情報を、書込用バッファである第１バッファ４０ａに書き込む。
【００６２】
なお、プログラム実行部２０は、ブロックＸ＋１の実行が終了すると（第１バッファ４０ａに対する情報の書き込みが終了すると）、上述した手順１〜手順４に係る処理と同様の処理を実行することによって、ＢＣの値、ＲＰの値、ＷＰの値、ＢＣ’の値、ＲＰ’の値、ＷＰ’の値及び更新フラグの値を更新する。
【００６３】
上述したように、プログラム実行部２０は、ＢＣの値、ＲＰの値、ＷＰの値、ＢＣ’の値、ＲＰ’の値、ＷＰ’の値及び更新フラグの値を上述したタイミングで更新することにより、ＢＣの値、ＲＰの値、ＷＰの値、ＢＣ’の値、ＲＰ’の値、ＷＰ’の値及び更新フラグの値に基づいて、どの手順を実行しているときに電力の供給が停止したかを推定することができる。
【００６４】
具体的には、プログラム実行部２０は、更新フラグの値が“１”であり、ＢＣの値＝ＢＣ’の値、ＲＰの値＝ＲＰ’の値及びＷＰの値＝ＷＰ’の値である場合には、上述した手順１で電力の供給が停止したものと推定する。このとき、プログラム実行部２０は、上述した手順２に係る処理を再実行する（すなわち、ＢＣの値、ＲＰの値及びＷＰの値を更新する）。
【００６５】
また、プログラム実行部２０は、更新フラグの値が“１”であり、ＢＣの値＝ＢＣ’の値、ＲＰの値＝ＲＰ’の値及びＷＰの値＝ＷＰ’の値でない場合（ＢＣの値≠ＢＣ’の値、ＲＰの値≠ＲＰ’の値又はＷＰの値≠ＷＰ’の値のいずれかである場合）には、上述した手順２が完了する前に電力の供給が停止したものと推定する。このとき、プログラム実行部２０は、ＢＣの値、ＲＰの値及びＷＰの値を、それぞれ、ＢＣ’の値（Ｘ）、ＲＰ’の値（Ｐ１）及びＷＰ’の値（Ｐ２）に戻す（ロールバックする）。また、プログラム実行部２０は、上述した手順２に係る処理を再実行する（すなわち、ＢＣの値、ＲＰの値及びＷＰの値を更新する）。
【００６６】
上述したように、プログラム実行部２０は、更新フラグの値が“１”である場合には、ＢＣの値、ＲＰの値及びＷＰの値の更新している途中で電力の供給が停止したものと推定して、ＢＣの値、ＲＰの値及びＷＰの値の更新に係る処理を再実行する。
【００６７】
なお、更新フラグの値は、“０”又は“１”である（すなわち、１ｂｉｔで構成されている）。従って、プログラム実行部２０は、更新フラグの値を更新しているときに電力の供給が停止した場合であっても、不正な値が更新フラグの値としてセットされることはない。
【００６８】
また、ＢＣ’の値、ＲＰ’の値及びＷＰ’の値は、更新フラグの値が“１”であるときには更新されない。従って、プログラム実行部２０は、ＢＣの値、ＲＰの値及びＷＰの値を更新している途中で電力の供給が停止した場合（ＢＣの値、ＲＰの値及びＷＰの値の一貫性が保たれていない場合）であっても、ＢＣ’の値、ＲＰ’の値及びＷＰ’の値に基づいて、ＢＣの値、ＲＰの値及びＷＰの値の一貫性を保つことができる。
【００６９】
一方、プログラム実行部２０は、更新フラグの値が“０”であり、ＢＣの値＝ＢＣ’の値、ＲＰの値＝ＲＰ’の値及びＷＰの値＝ＷＰ’の値である場合には、上述したＸ実行中、手順４又はＸ＋１実行中で電力の供給が停止したものと推定する。このとき、プログラム実行部２０は、ＢＣの値に基づいて、ブロックＸ又はブロックＸ＋１を最初から実行する。
【００７０】
また、プログラム実行部２０は、更新フラグの値が“０”であり、ＢＣの値＝ＢＣ’の値、ＲＰの値＝ＲＰ’の値及びＷＰの値＝ＷＰ’の値でない場合（ＢＣの値≠ＢＣ’の値、ＲＰの値≠ＲＰ’の値又はＷＰの値≠ＷＰ’の値のいずれかである場合）には、上述した手順４が完了する前に電力の供給が停止したものと推定する。このとき、プログラム実行部２０は、ＢＣ’の値、ＲＰ’の値及びＷＰ’の値を、それぞれ、ＢＣの値（Ｘ＋１）、ＲＰの値（Ｐ２）及びＷＰの値（Ｐ１）に更新する。
【００７１】
ここで、ＢＣの値、ＲＰの値及びＷＰの値は、更新フラグの値が“０”であるときに更新されない。従って、プログラム実行部２０は、ＢＣ’の値、ＲＰ’の値及びＷＰ’の値を更新している途中で電力の供給が停止した場合（ＢＣ’の値、ＲＰ’の値及びＷＰ’の値の一貫性が保たれていない場合）であっても、ＢＣの値、ＲＰの値及びＷＰの値に基づいて、ＢＣ’の値、ＲＰ’の値及びＷＰ’の値の一貫性を保つことができる。
【００７２】
上述したように、プログラム実行部２０は、ＢＣの値、ＲＰの値、ＷＰの値、ＢＣ’の値、ＲＰ’の値及びＷＰ’の値の一貫性を常に保つことができる。
【００７３】
従って、プログラム実行部２０は、ＲＰの値によって読取用バッファを特定するとともに、ＷＰの値によって書込用バッファを特定し、ＢＣの値によって実行するブロックを特定することができる。
【００７４】
すなわち、プログラム実行部２０は、電力の供給が停止した後に、電力の供給が再開された場合であっても、電力の供給が停止した際における状態に安全かつ容易に復帰することができる。
【００７５】
（本発明の一実施形態に係る計算機の動作）
以下において、本発明の一実施形態に係る計算機の動作について、図面を参照しながら説明する。
【００７６】
図５は、本発明の一実施形態に係るプログラム実行部２０の動作を示すフロー図である。
【００７７】
図５に示すように、ステップＳ１１において、プログラム実行部２０は、更新フラグ記憶部６４に記憶された更新フラグの値に“１”をセットする。
【００７８】
ステップＳ１２において、プログラム実行部２０は、ＢＣの値、ＲＰの値及びＷＰの値を更新する。具体的には、プログラム実行部２０は、次のブロックのブロックＩＤをＢＣの値としてブロックカウンタ５１に記憶する。また、プログラム実行部２０は、読取用バッファポインタ記憶部５２にＲＰの値として記憶されているバッファＩＤを書込用バッファポインタ記憶部５３にＷＰの値として記憶するとともに、書込用バッファポインタ記憶部５３にＷＰの値として記憶されていたバッファＩＤを読取用バッファポインタ記憶部５２にＲＰの値として記憶する。
【００７９】
なお、プログラム実行部２０は、プログラム記憶部１０から読み出したプログラムに含まれる最初のブロックを実行する場合には、最初のブロックのブロックＩＤをブロックカウンタ５１にＢＣとしてセットする。また、プログラム実行部２０は、第１バッファ４０ａ（又は、第２バッファ４０ｂ）を特定するＰ１（又は、Ｐ２）を、読取用バッファポインタ記憶部５２に読取用バッファを特定するＲＰとしてセットする。さらに、プログラム実行部２０は、第２バッファ４０ｂ（又は、第１バッファ４０ａ）を特定するＰ２（又は、Ｐ１）を、書込用バッファポインタ記憶部５３に書込用バッファを特定するＷＰの値としてセットする。
【００８０】
ステップＳ１３において、プログラム実行部２０は、更新フラグ記憶部６４に記憶された更新フラグの値に“０”をセットする。
【００８１】
ステップＳ１４において、プログラム実行部２０は、ＢＣ’の値、ＲＰ’の値及びＷＰ’の値を更新する。具体的には、プログラム実行部２０は、ブロックカウンタ５１にＢＣの値として記憶されているブロックＩＤを、ブロックカウンタ６１にＢＣ’の値としてセットする。また、プログラム実行部２０は、読取用バッファポインタ記憶部５２にＲＰの値として記憶されているバッファＩＤを、読取用バッファポインタ記憶部６２にＲＰ’の値としてセットし、書込用バッファポインタ記憶部５３にＷＰの値として記憶されているバッファＩＤを、書込用バッファポインタ記憶部６３にＷＰ’の値としてセットする。
【００８２】
ステップＳ１５において、プログラム実行部２０は、ブロックカウンタ５１に記憶されているＢＣの値（ブロックＩＤ）によって特定されるブロックの実行を開始する。具体的には、プログラム実行部２０は、ブロックＩＤによって特定されるブロックをプログラム記憶部１０から読み出して、読み出したブロックをレジスタ（スタック）にセットする。
【００８３】
ステップＳ１６において、プログラム実行部２０は、ＲＰの値によって特定されるバッファに書き込まれた情報を読み出す。
【００８４】
ステップＳ１７において、プログラム実行部２０は、レジスタ（スタック）にセットされているブロック（ＢＣの値によって特定されるブロック）を実行することによって得られた情報を、ＷＰの値によって特定されるバッファに書き込む。
【００８５】
なお、プログラム実行部２０は、ステップＳ１７に係る処理が終了すると、上述したステップＳ１１に係る処理に移る。
【００８６】
以下において、計算機に対する電力の供給が停止した後に、電力の供給が再開された際における計算機の動作について、図面を参照しながら説明する。
【００８７】
図６は、計算機に対する電力の供給が停止した後に、電力の供給が再開された際における計算機の動作を示すフロー図である。
【００８８】
図６に示すように、ステップＳ２１において、プログラム実行部２０は、更新フラグの値が“０”であるか否か判定する。すなわち、プログラム実行部２０は、ＢＣの値、ＲＰの値及びＷＰの値を更新している途中で電力の供給が停止したか否か判定する。また、プログラム実行部２０は、更新フラグの値が“０”である場合には、ステップＳ２５に係る処理に移り、更新フラグの値が“１”である場合には、ステップＳ２２に係る処理に移る。
【００８９】
ステップＳ２２において、プログラム実行部２０は、ＢＣの値＝ＢＣ’の値、ＲＰの値＝ＲＰ’の値及びＷＰの値＝ＷＰ’の値であるか否か判定する。また、プログラム実行部２０は、ＢＣの値＝ＢＣ’の値、ＲＰの値＝ＲＰ’の値及びＷＰの値＝ＷＰ’の値である場合には、ステップＳ２４に係る処理に移り、ＢＣの値＝ＢＣ’の値、ＲＰの値＝ＲＰ’の値及びＷＰの値＝ＷＰ’の値でない場合（ＢＣの値≠ＢＣ’の値、ＲＰの値≠ＲＰ’の値又はＷＰの値≠ＷＰ’の値のいずれかである場合）には、ステップＳ２３に係る処理に移る。
【００９０】
ステップＳ２３において、プログラム実行部２０は、上述した手順２が完了する前に電力の供給が停止したものと推定し、ＢＣの値、ＲＰの値及びＷＰの値をロールバックする。
【００９１】
具体的には、プログラム実行部２０は、ブロックカウンタ６１に記憶されているＢＣ’の値をＢＣの値としてブロックカウンタ５１にセットし、読取用バッファポインタ記憶部６２に記憶されているＲＰ’の値をＲＰの値として読取用バッファポインタ記憶部５２にセットし、書込用バッファポインタ記憶部６３に記憶されているＷＰ’の値をＷＰの値として書込用バッファポインタ記憶部５３にセットする。
【００９２】
ステップＳ２４において、プログラム実行部２０は、ＢＣの値、ＲＰの値及びＷＰの値を更新する（すなわち、上述したステップＳ１２に係る処理を実行する）。また、プログラム実行部２０は、更新フラグ記憶部６４に記憶された更新フラグの値に“０”をセットする（すなわち、上述したステップＳ１３に係る処理を実行する）。さらに、プログラム実行部２０は、ＢＣ’の値、ＲＰ’の値、ＷＰ’の値を更新する（すなわち、上述したステップＳ１４に係る処理を実行する）。
【００９３】
ステップＳ２５において、プログラム実行部２０は、ＢＣの値＝ＢＣ’の値、ＲＰの値＝ＲＰ’の値及びＷＰの値＝ＷＰ’の値であるか否か判定する。また、プログラム実行部２０は、ＢＣの値＝ＢＣ’の値、ＲＰの値＝ＲＰ’の値及びＷＰの値＝ＷＰ’の値である場合には、ステップＳ２７に係る処理に移り、ＢＣの値＝ＢＣ’の値、ＲＰの値＝ＲＰ’の値及びＷＰの値＝ＷＰ’の値でない場合（ＢＣの値≠ＢＣ’の値、ＲＰの値≠ＲＰ’の値又はＷＰの値≠ＷＰ’の値のいずれかである場合）には、ステップＳ２６に係る処理に移る。
【００９４】
ステップＳ２６において、プログラム実行部２０は、上述した手順４が完了する前に電力の供給が停止したものと推定し、ＢＣ’の値、ＲＰ’の値及びＷＰ’の値を更新する（すなわち、上述したステップＳ１４に係る処理を実行する）。
【００９５】
ステップＳ２７において、プログラム実行部２０は、ＢＣの値によって特定されるブロックを最初から実行する。すなわち、プログラム実行部２０は、上述したステップＳ１５に係る処理に移る。
【００９６】
（本発明の一実施形態に係る計算機の作用及び効果）
本発明の一実施形態に係る計算機１によれば、計算機１は、実行しているブロックを特定するブロックＩＤをＢＣの値としてブロックカウンタ５１に記憶し、実行しているブロックで情報を読み出すバッファを特定するバッファＩＤをＲＰの値として読取用バッファポインタ記憶部５２に記憶することにより、プログラム実行部２０に対する電力の供給が停止した後に、電力の供給が再開された場合であっても、再開すべきブロックを特定することができ、情報を読み出すべき読取用バッファを特定することができる。
【００９７】
すなわち、計算機１は、プログラム実行部２０に対する電力の供給が停止した後に、電力の供給が再開された場合に、ＲＰの値によって特定される読取用バッファから情報を読み出して、ＢＣの値によって特定されるブロックを最初から再開することにより、電力の供給が停止した際における状態にプログラム実行部２０の状態を容易に復帰させることができる。
【００９８】
また、計算機１は、ＢＣの値によって特定されるブロックを最初から実行することによって得られた情報を、ＷＰの値によって特定される書込用バッファに書き込むことにより、電力の供給が停止した際における状態にＷＰの値によって特定される書込用バッファの状態を復帰させることができる。
【００９９】
さらに、計算機１は、ＲＰの値によって特定される読取用バッファをブロック毎に、第１バッファ４０ａから第２バッファ４０ｂ（又は、第２バッファ４０ｂから第１バッファ４０ａ）に切替えることにより、電力の供給が停止した際における状態にプログラム実行部２０の状態を復帰させるために必要な情報を低減することができる。
【０１００】
すなわち、計算機１は、ＢＣの値、ＲＰの値、及び、ＲＰの値によって特定される読取用バッファに書き込まれた情報のみによって、電力の供給が停止した際における状態にプログラム実行部２０の状態を復帰させることができる。
【０１０１】
従って、本発明の一実施形態に係る計算機１は、特に、プログラム実行部２０の処理能力やメモリ（バッファ）の容量等の計算資源に乏しい小型計算機として用いると効果的である。
【０１０２】
（変更例１）
以下において、本発明の一変更例に係る計算機について、図面を参照しながら説明する。なお、以下においては、上述した実施形態との差異を主として説明するものとする。
【０１０３】
具体的には、上述した実施形態では、プログラム実行部２０によって実行されるプログラムに他のプログラム（割込みプログラム）が割り込むことがないものとして説明したが、本変更例では、プログラム実行部２０によって実行されるプログラムに他のプログラム（割込みプログラム）が割り込むことがあるものとして説明する。
【０１０４】
図７は、本発明の一変更例に係る計算機の構成を示すブロック図である。
【０１０５】
図７に示すように、本変更例に係る計算機１には、赤外線センサ７０ａ、光度センサ７０ｂ及び外部機器７０ｃが接続されている。また、本変更例に係る計算機１は、上述したプログラム記憶部１０、プログラム実行部２０、実行結果記憶部３０、第１バッファ４０ａ、第２バッファ４０ｂ、実行状態記憶部５０及び実行状態補助記憶部６０に加え、割込みコントローラ８０と、赤外線センサ用バッファ９０ａと、光度センサ用バッファ９０ｂと、外部機器用バッファ９０ｃとによって構成されている。
【０１０６】
赤外線センサ７０ａは、人体から発せられる赤外線、出力した赤外線の反射光等を検出し、検出した結果を割込みコントローラ８０に出力する。
【０１０７】
光度センサ７０ｂは、所定の範囲内における光度を検出し、検出した結果を割込みコントローラ８０に出力する。
【０１０８】
外部機器７０ｃは、１００ＢＡＳＥ−ＴＸ等の有線通信回線網やＩｒＤＡやブルートゥース等の無線通信回線網を介して計算機１に接続可能な機器などである。また、外部機器７０ｃは、所定の情報を計算機１に出力する。
【０１０９】
なお、本変更例において、計算機１に接続されている機器は、赤外線センサ７０ａ、光度センサ７０ｂ及び外部機器７０ｃであるが、これに限定されるものではなく、温度センサやタグリーダ等であってもよい。
【０１１０】
割込みコントローラ８０は、赤外線センサ７０ａから入力された検出結果を赤外線センサ用バッファ９０ａに書き込むとともに、赤外線センサ７０ａから入力された検出結果に１対１で対応するプログラム（割込みプログラム）を実行するようにプログラム実行部２０に指示する。
【０１１１】
また、割込みコントローラ８０は、光度センサ７０ｂから入力された検出結果を光度センサ用バッファ９０ｂに書き込むとともに、光度センサ７０ｂから入力された検出結果に１対１で対応するプログラム（割込みプログラム）を実行するようにプログラム実行部２０に指示する。
【０１１２】
さらに、割込みコントローラ８０は、外部機器７０ｃから入力された所定の情報を外部機器用バッファ９０ｃに書き込むとともに、外部機器７０ｃから入力された情報に１対１で対応するプログラム（割込みプログラム）を実行するようにプログラム実行部２０に指示する。
【０１１３】
なお、上述した割込みプログラムには、該割込みプログラムを実行する条件、該割込みプログラムの優先度等が記述されているものとする。また、所定のプログラムに含まれる各ブロックには、該ブロック（又は、所定のプログラム）の優先度、所定のプログラムにおけるブロックの位置であるプログラムコード等が記述されているものとする。
【０１１４】
プログラム実行部２０は、割込みコントローラ８０によって指示された割込みプログラムを実行する。また、プログラム実行部２０は、所定のプログラムを実行しているときに、割込みプログラムを実行するように指示された場合には、実行している所定のプログラムの優先度と割込みプログラムの優先度とを比較し、優先度が高いプログラムを実行するものとする。
【０１１５】
なお、本変更例では、プログラム実行部２０と割込みコントローラ８０とを分けて説明したが、これに限定されるものではなく、プログラム実行部２０は、割込みコントローラ８０の機能を有するものであってもよい。
【０１１６】
また、計算機１は、割込みプログラムの実行状態を記憶するために、割込みプログラム用のＢＣの値、ＲＰの値、ＷＰの値、ＢＣ’の値、ＲＰ’の値、ＷＰ’の値及び更新フラグを別途記憶するように構成されていてもよい。このように構成された計算機１によれば、計算機１は、割込みプログラムを実行しているときに、電力の供給が停止した場合であっても、電力の供給が停止した際における状態に容易に復帰することができる。
【０１１７】
以下において、本発明の一変更例に係る計算機の動作について、図面を参照しながら説明する。
【０１１８】
図８は、割込みプログラムを実行するように指示された場合におけるプログラム実行部２０の動作を示すフロー図である。
【０１１９】
図８に示すように、ステップＳ３１において、プログラム実行部２０は、実行中のプログラムがあるか否か判定する。また、プログラム実行部２０は、実行中のプログラムがある場合には、ステップＳ３２に係る処理に移り、実行中のプログラムがない場合には、ステップＳ３５に係る処理に移る。
【０１２０】
ステップＳ３２において、プログラム実行部２０は、割込みプログラムの優先度が実行中のプログラムの優先度よりも高いか否か判定する。また、プログラム実行部２０は、割込みプログラムの優先度が実行中のプログラムの優先度よりも高い場合には、ステップＳ３５に係る処理に移り、割込みプログラムの優先度が実行中のプログラムの優先度よりも低い（又は、同じ）場合には、ステップＳ３３に係る処理に移る。
【０１２１】
ステップＳ３３において、プログラム実行部２０は、実行中のプログラム（ＢＣの値によって特定されるブロック）を続行する。
【０１２２】
ステップＳ３４において、プログラム実行部２０は、情報（検出結果等）が書き込まれたバッファの種類（赤外線センサ用バッファ９０ａ、光度センサ用バッファ９０ｂ又は外部機器用バッファ９０ｃ）に基づいて、実行する割込みプログラムを特定し、特定された割込みプログラムを実行する。すなわち、プログラム実行部２０は、実行していた所定のプログラムが全て終了してから、割込みプログラムを実行する。
【０１２３】
ステップＳ３５において、プログラム実行部２０は、割込みコントローラ８０によって指示された割込みプログラムを実行する。
【０１２４】
また、プログラム実行部２０は、実行していた所定のプログラムがあった場合には、ブロックカウンタ５１に記憶されているＢＣの値（ブロックＩＤ）によって特定されるブロックを最初から再開する。具体的には、プログラム実行部２０は、ブロックＩＤによって特定されるブロックをプログラム記憶部１０から読み出して、読み出したブロックをレジスタ（スタック）にセットする。すなわち、プログラム実行部２０は、割込みプログラムが全て終了してから、実行していたブロックを再開する。
【０１２５】
ここで、割込みプログラムが実行されたとしても、ＢＣの値、ＲＰの値及びＷＰの値が更新されることはない。従って、プログラム実行部２０は、ＢＣの値、ＲＰの値及びＷＰの値に基づいて、実行していたブロックを再開することができる。
【０１２６】
以下において、計算機に対する電力の供給が停止した後に、電力の供給が再開された際における計算機の動作について、図面を参照しながら説明する。
【０１２７】
図９は、計算機に対する電力の供給が停止した後に、電力の供給が再開された際における計算機の動作を示すフロー図である。なお、図９では、ステップＳ４１に係る処理を開始する前に、上述したステップ２１〜ステップ２６に係る処理が実行されているものとする（すなわち、ＢＣの値、ＲＰの値、ＷＰの値、ＢＣ’の値、ＲＰ’の値及びＷＰ’の値の一貫性が保たれている）。
【０１２８】
図９に示すように、ステップＳ４１において、プログラム実行部２０は、各バッファ（赤外線センサ用バッファ９０ａ、光度センサ用バッファ９０ｂ又は外部機器用バッファ９０ｃ）に書き込まれた情報（検出結果等）があるか否か判定する。また、プログラム実行部２０は、書き込まれた情報がある場合には、ステップＳ４３に係る処理に移り、書き込まれた情報がない場合には、ステップＳ４２に係る処理に移る。
【０１２９】
ステップＳ４２において、プログラム実行部２０は、情報（検出結果等）が書き込まれているバッファの種類（赤外線センサ用バッファ９０ａ、光度センサ用バッファ９０ｂ又は外部機器用バッファ９０ｃ）に基づいて、バッファの種類に対応する割込みプログラムを特定する。また、プログラム実行部２０は、特定した割込みプログラムの優先度がＢＣの値に対応するブロックを含む所定のプログラムの優先度よりも高いか否か判定する。さらに、プログラム実行部２０は、特定した割込みプログラムの優先度が所定のプログラムの優先度よりも高い場合には、ステップＳ４４に係る処理に移り、特定した割込みプログラムの優先度が所定のプログラムの優先度よりも低い（又は、同じ）場合には、ステップＳ４３に係る処理に移る。
【０１３０】
ステップＳ４３において、プログラム実行部２０は、ブロックカウンタ５１に記憶されているＢＣの値（ブロックＩＤ）によって特定されるブロックを最初から再開する。具体的には、プログラム実行部２０は、ブロックＩＤによって特定されるブロックをプログラム記憶部１０から読み出して、読み出したブロックをレジスタ（スタック）にセットする。
【０１３１】
ステップＳ４４において、プログラム実行部２０は、ステップＳ４２で特定した割込みプログラムを最初から再開する。
【０１３２】
ステップＳ４５において、プログラム実行部２０は、ＢＣの値（ブロックＩＤ）によって特定されるブロックを最初から再開する。具体的には、プログラム実行部２０は、ブロックＩＤによって特定されるブロックをプログラム記憶部１０から読み出して、読み出したブロックをレジスタ（スタック）にセットする。
【０１３３】
本変更例に係る計算機１によれば、計算機１は、割込みプログラムを実行した後に、ＲＰによって特定される読取用バッファに書き込まれた情報を読み出してＢＣによって特定されるブロックを実行することにより、割込みプログラムによる割込みが発生した場合であっても、割込みプログラムによる割込みが発生する前の状態にプログラム実行部の状態を容易に復帰させることができる。
【０１３４】
ところで、従来の小型計算機用では、プログラムの実行中における割込みプログラムの実行が許可されていない場合があった（例えば、ソフトウェアとしてContikiを採用している小型計算機）。また、プログラムの実行中における割込みプログラムの実行が許可されている場合であっても、割込みプログラムによる割込み処理がリアルタイムで実行されない場合があった。
【０１３５】
しかしながら、センサ等からの入力に応じた割込みプログラムによる割込み処理をリアルタイムで実行しなければならない場合がある。
【０１３６】
これに対し、本変更例に係る計算機１によれば、プログラムの実行中であっても、センサ等からの入力に応じた割込みプログラムを実行することができる。すなわち、本変更例に係る計算機１によれば、プログラムの実行中であっても、リアルタイム性が要求される情報（センサ等から入力された情報）を取得することが可能となる。
【図面の簡単な説明】
【０１３７】
【図１】本発明の一実施形態に係る計算機の構成を示すブロック図である。
【図２】本発明の一実施形態に係るプログラムについて説明するための図である（その１）。
【図３】本発明の一実施形態に係るプログラムについて説明するための図である（その２）。
【図４】本発明の一実施形態に係るプログラムの実行手順について示す図である。
【図５】本発明の一実施形態に係る計算機の動作を示すフロー図である（その１）。
【図６】本発明の一実施形態に係る計算機の動作を示すフロー図である（その２）。
【図７】本発明の一変更例に係る計算機の構成を示すブロック図である。
【図８】本発明の一変更例に係る計算機の動作を示すフロー図である（その１）。
【図９】本発明の一変更例に係る計算機の動作を示すフロー図である（その２）。
【符号の説明】
【０１３８】
１・・・計算機、１０・・・プログラム記憶部、２０・・・プログラム実行部、３０・・・実行結果記憶部、４０ａ・・・第１バッファ、４０ｂ・・・第２バッファ、５０・・・実行状態記憶部、５１・・・ブロックカウンタ、５２・・・読取用バッファポインタ記憶部、５３・・・書込用バッファポインタ記憶部、６０・・・実行状態補助記憶部、６１・・・ブロックカウンタ、６２・・・読取用バッファポインタ記憶部、６３・・・書込用バッファポインタ記憶部、６４・・・更新フラグ記憶部、６８・・・制御プログラム記憶部、７０ａ・・・赤外線センサ、７０ｂ・・・光度センサ、７０ｃ・・・外部機器、８０・・・割込みコントローラ、９０ａ・・・赤外線センサ用バッファ、９０ｂ・・・光度センサ用バッファ、９０ｃ・・・外部機器用バッファ
【図１】
2005352769.tif 000003
【図２】
2005352769.tif 000004
【図３】
2005352769.tif 000005
【図４】
2005352769.tif 000006
【図５】
2005352769.tif 000007
【図６】
2005352769.tif 000008
【図７】
2005352769.tif 000009
【図８】
2005352769.tif 000010
【図９】
2005352769.tif 000011