(57)【要約】【課題】  パッチレジスタの組の数よりも多くのパッチを実現することができるようにする。【解決手段】  初期化の時、ＲＡＭプログラムエリアの特定の場所に、ＲＯＭプログラムエリアの所望の場所へのジャンプ命令に該当するコードデータを書き込んでおく（リターンポイント）。また、そのコードの前の行には、実行して害のないノーオペレーション命令（ｎｏｐ）を置いておくのが良い（エントリポイント）。このエントリポイントとリターンポイントとの間での処理（パッチコントロールプログラム）は、実行状況に応じて適用するパッチを選択する処理であり、ＲＯＭにストアされたプログラムを順次実行していく時に、定期的に実行されることとなる。このパッチコントロールプログラムによる処理では、プログラムの実行状態に応じて、パッチアドレスレジスタとパッチデータレジスタとの内容を動的に書き換える。【選択図】  図１
2005063311.tif 000002
【特許請求の範囲】
【請求項１】
不揮発性メモリにストアされたプログラムを順次実行するプロセッサシステムで、書き込み可能なプログラムメモリと、パッチアドレスレジスタと、パッチプログラムレジスタと、前記不揮発性メモリで実行するプログラムアドレスとアドレスレジスタに保存されたデータとを比較する比較手段と、を具備し、
前記パッチアドレスレジスタの内容と前記不揮発性メモリで実行するプログラムアドレスとが一致した場合には、該不揮発性メモリにストアされたプログラムの代わりにパッチプログラムレジスタの内容を実行するように構成されたプロセッサシステムのパッチ方法であって、
前記不揮発性メモリにストアされたプログラムを順次実行していく時に、定期的に実行状況に応じて適用するパッチを選択する処理を実行することを特徴とするプロセッサシステムのパッチ方法。
【請求項２】
不揮発性メモリにストアされたプログラムを順次実行するプロセッサシステムで、書き込み可能なプログラムメモリと、パッチアドレスレジスタと、パッチプログラムレジスタと、前記不揮発性メモリで実行するプログラムアドレスとアドレスレジスタに保存されたデータとを比較する比較手段と、を具備し、
前記パッチアドレスレジスタの内容と前記不揮発性メモリで実行するプログラムアドレスとが一致した場合には、該不揮発性メモリにストアされたプログラムの代わりにパッチプログラムレジスタの内容を実行するように構成されたプロセッサシステムのパッチ方法であって、
前記不揮発性メモリにストアされたプログラムは、実行初期化時に前記書き込み可能なプログラムメモリの特定のエリアに、前記不揮発性メモリの所定の番地にジャンプする命令を書き込むように構成されると共に、
該プログラムは、通常実行時に定期的に、該書き込み可能なプログラムメモリにおける当該プログラムの実行状況に応じて適用するパッチを選択する処理を行う部分にジャンプするように構成され、
前記書き込み可能なプログラムメモリに書かれたプログラムを逐次実行していく時に、前記所定の番地に処理をジャンプさせる命令が定期的に実行されることにより、処理を該所定の番地にジャンプさせることを特徴とするプロセッサシステムのパッチ方法。
【請求項３】
前記実行状況に応じて適用するパッチを選択する処理では、プログラムの実行状態に応じて、前記パッチアドレスレジスタと前記パッチデータレジスタとの内容を動的に書き換えることを特徴とする請求項１または２記載のプロセッサシステムのパッチ方法。
【請求項４】
不揮発性メモリにストアされたプログラムを順次実行するプロセッサシステムで、書き込み可能なプログラムメモリと、パッチアドレスレジスタと、パッチプログラムレジスタと、前記不揮発性メモリで実行するプログラムアドレスとアドレスレジスタに保存されたデータとを比較する比較手段と、を具備し、
前記パッチアドレスレジスタの内容と前記不揮発性メモリで実行するプログラムアドレスとが一致した場合には、該不揮発性メモリにストアされたプログラムの代わりにパッチプログラムレジスタの内容を実行するように構成されたプロセッサシステムにおけるパッチ適用プログラムであって、
前記プロセッサシステムに、
前記不揮発性メモリにストアされたプログラムを順次実行させていく時、定期的に実行状況に応じて適用するパッチを選択する処理を実行させることを特徴とするプロセッサシステムのパッチ適用プログラム。
【請求項５】
不揮発性メモリにストアされたプログラムを順次実行するプロセッサシステムで、書き込み可能なプログラムメモリと、パッチアドレスレジスタと、パッチプログラムレジスタと、前記不揮発性メモリで実行するプログラムアドレスとアドレスレジスタに保存されたデータとを比較する比較手段と、を具備し、
前記パッチアドレスレジスタの内容と前記不揮発性メモリで実行するプログラムアドレスとが一致した場合には、該不揮発性メモリにストアされたプログラムの代わりにパッチプログラムレジスタの内容を実行するように構成されたプロセッサシステムにおけるパッチ適用プログラムであって、
前記プロセッサシステムに、
実行初期化時に前記書き込み可能なプログラムメモリの特定のエリアに、前記不揮発性メモリの所定の番地に処理をジャンプさせる命令を書き込む機能を実現させると共に、
通常実行時に定期的に、該書き込み可能なプログラムメモリにおける当該プログラムの実行状況に応じて適用するパッチを選択する処理を行う部分に処理をジャンプさせる機能を実現させ、
前記書き込み可能なプログラムメモリに書かれたプログラムを逐次実行させる時、前記所定の番地に処理をジャンプさせる命令を定期的に実行させることにより、処理を該所定の番地にジャンプさせることを特徴とするプロセッサシステムのパッチ適用プログラム。
【請求項６】
前記実行状況に応じて適用するパッチを選択する処理では、プログラムの実行状態に応じて、前記パッチアドレスレジスタと前記パッチデータレジスタとの内容を動的に書き換えさせることを特徴とする請求項４または５記載のプロセッサシステムのパッチ適用プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、例えばＣＰＵ、ＤＳＰ（Digital Signal Processor）などのプロセッサを用いる各種のプロセッサシステムにおけるバグを修正するためのプロセッサシステムのパッチ方法およびパッチ適用プログラムに関する。
【背景技術】
【０００２】
従来より、ＣＰＵやＤＳＰによるプロセッサシステムで、そのプロセッサシステムにおけるプログラムが不揮発性のメモリ（ＲＯＭ）に格納されている場合、プログラムの間違い（バグ）が大きな問題となっていた。
すなわち、バグのあるプログラムは、その結果が容認できない場合、ＲＯＭであるがために変更が利かず、そのＲＯＭの交換が必要となる。また、プロセッサが、ＲＯＭを内蔵している場合であれば、そのプロセッサごと交換しなければならない。また、改訂する場合でも、そのＲＯＭないしはプロセッサ内蔵のＲＯＭ領域を新たに作り直すことになってしまう。
【０００３】
このため、従来から、「パッチ」という手法によるバグの修復方法が用いられてきた。
この従来のパッチによるバグの修復方法について、図３を参照して説明する。
【０００４】
プロセッサは、プログラムカウンタに示されるアドレスのＲＯＭの内容を命令コードとして実行する。
パッチアドレスレジスタは、変更したいプログラムがストアされているアドレスを保持する。このアドレスは、外部Ｉ／Ｆ（不図示）から、プログラム実行を介して、もしくはハードウエアにより任意に書き込めるように構成されている。
【０００５】
プログラムカウンタが発生するアドレスと、パッチアドレスレジスタが発生するパッチアドレスは比較器によって比較される。
この比較器による比較結果が一致したときに、プログラムデコーダへ送る命令コードを、ＲＯＭの内容ではなく、パッチプログラムレジスタの内容に切り替えるようにセレクタを動作させる。
このようにして、命令コードを変更することができる。
上述した図３に示す例では、このパッチアドレスレジスタと、パッチプログラムレジスタとを４組持っているので、４カ所のパッチに対応できることになる。
【０００６】
また、このパッチによるバグの修復を行う場合、１つのパッチあたり、単に１命令の入れ替えでは済まない場合に対応するために、書き込み可能のメモリ（ＲＡＭ）で構成されたプログラムメモリ領域を準備して、そこに別途書き込んでおいたパッチプログラム（不図示）を実行させるという方法が用いられている。この方法による従来のバグの修復方法について、図４を参照して説明する。
【０００７】
このプログラムのＲＡＭ領域への書き込みは、外部Ｉ／Ｆ（不図示）からプログラム実行を介して、もしくはハードウエアにより任意に書き込めるように構成される。
この場合、パッチプログラムレジスタに書かれる内容は、ＲＡＭに書かれたパッチの先頭番地へのジャンプ命令となる。このことにより、パッチ対象アドレスに到達したときに、ＲＡＭエリアのパッチプログラムに飛んで、所望の処理をすることができる。
ＲＡＭ領域のパッチの最終行には、ＲＯＭエリアへのジャンプ命令を置いておくことで、パッチ完了後、所定の処理に戻れることになる。
【０００８】
また、特開平５−２３３２６５号公報（特許文献１）のものは、プロセッサが読み出し専用メモリ部のパッチアドレスを指定した時、そのアドレスを読み書き可能メモリ部のアドレスに変換してパッチプログラムデータを読み出すようにしたものである。
【特許文献１】特開平５−２３３２６５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００９】
しかしながら、上述した従来のバグの修復方法は、パッチレジスタの数が許す範囲内でのパッチを可能とするものであり、パッチレジスタの数を超えたパッチは実現できない問題があった。
例えば、上述した従来例ではパッチレジスタの組（アドレスとプログラム）が４組なので、バグが５箇所以上あると対応できなくなっていた。
【００１０】
また、上述した特許文献１のものは、読み出し専用メモリ部に格納されたプログラムをパッチ可能にする好適なものであるが、パッチレジスタの組の数よりも多くのパッチを実現することについてまで考慮されたものではない。
【００１１】
本発明はこのような状況に鑑みてなされたものであり、パッチレジスタの組の数よりも多くのパッチを実現することができるプロセッサシステムのパッチ方法およびパッチ適用プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１２】
かかる目的を達成するため、本発明の第１の態様としてのプロセッサシステムのパッチ方法は、不揮発性メモリにストアされたプログラムを順次実行するプロセッサシステムで、書き込み可能なプログラムメモリと、パッチアドレスレジスタと、パッチプログラムレジスタと、不揮発性メモリで実行するプログラムアドレスとアドレスレジスタに保存されたデータとを比較する比較手段と、を具備し、パッチアドレスレジスタの内容と不揮発性メモリで実行するプログラムアドレスとが一致した場合には、該不揮発性メモリにストアされたプログラムの代わりにパッチプログラムレジスタの内容を実行するように構成されたプロセッサシステムのパッチ方法であって、不揮発性メモリにストアされたプログラムを順次実行していく時に、定期的に実行状況に応じて適用するパッチを選択する処理を実行することを特徴とする。
【００１３】
また、本発明の第２の態様としてのプロセッサシステムのパッチ方法は、不揮発性メモリにストアされたプログラムを順次実行するプロセッサシステムで、書き込み可能なプログラムメモリと、パッチアドレスレジスタと、パッチプログラムレジスタと、不揮発性メモリで実行するプログラムアドレスとアドレスレジスタに保存されたデータとを比較する比較手段と、を具備し、パッチアドレスレジスタの内容と不揮発性メモリで実行するプログラムアドレスとが一致した場合には、該不揮発性メモリにストアされたプログラムの代わりにパッチプログラムレジスタの内容を実行するように構成されたプロセッサシステムのパッチ方法であって、不揮発性メモリにストアされたプログラムは、実行初期化時に書き込み可能なプログラムメモリの特定のエリアに、不揮発性メモリの所定の番地にジャンプする命令を書き込むように構成されると共に、該プログラムは、通常実行時に定期的に、該書き込み可能なプログラムメモリにおける当該プログラムの実行状況に応じて適用するパッチを選択する処理を行う部分にジャンプするように構成され、書き込み可能なプログラムメモリに書かれたプログラムを逐次実行していく時に、所定の番地に処理をジャンプさせる命令が定期的に実行されることにより、処理を該所定の番地にジャンプさせることを特徴とする。
【００１４】
上記した「実行状況に応じて適用するパッチを選択する処理」では、プログラムの実行状態に応じて、パッチアドレスレジスタとパッチデータレジスタとの内容を動的に書き換えることが好ましい。
【００１５】
また、本発明の第３の態様としてのプロセッサシステムのパッチ適用プログラムは、不揮発性メモリにストアされたプログラムを順次実行するプロセッサシステムで、書き込み可能なプログラムメモリと、パッチアドレスレジスタと、パッチプログラムレジスタと、不揮発性メモリで実行するプログラムアドレスとアドレスレジスタに保存されたデータとを比較する比較手段と、を具備し、パッチアドレスレジスタの内容と不揮発性メモリで実行するプログラムアドレスとが一致した場合には、該不揮発性メモリにストアされたプログラムの代わりにパッチプログラムレジスタの内容を実行するように構成されたプロセッサシステムにおけるパッチ適用プログラムであって、プロセッサシステムに、不揮発性メモリにストアされたプログラムを順次実行させていく時、定期的に実行状況に応じて適用するパッチを選択する処理を実行させることを特徴とする。
【００１６】
また、本発明の第４の態様としてのプロセッサシステムのパッチ適用プログラムは、不揮発性メモリにストアされたプログラムを順次実行するプロセッサシステムで、書き込み可能なプログラムメモリと、パッチアドレスレジスタと、パッチプログラムレジスタと、不揮発性メモリで実行するプログラムアドレスとアドレスレジスタに保存されたデータとを比較する比較手段と、を具備し、パッチアドレスレジスタの内容と不揮発性メモリで実行するプログラムアドレスとが一致した場合には、該不揮発性メモリにストアされたプログラムの代わりにパッチプログラムレジスタの内容を実行するように構成されたプロセッサシステムにおけるパッチ適用プログラムであって、プロセッサシステムに、実行初期化時に書き込み可能なプログラムメモリの特定のエリアに、不揮発性メモリの所定の番地に処理をジャンプさせる命令を書き込む機能を実現させると共に、通常実行時に定期的に、該書き込み可能なプログラムメモリにおける当該プログラムの実行状況に応じて適用するパッチを選択する処理を行う部分に処理をジャンプさせる機能を実現させ、書き込み可能なプログラムメモリに書かれたプログラムを逐次実行させる時、所定の番地に処理をジャンプさせる命令を定期的に実行させることにより、処理を該所定の番地にジャンプさせることを特徴とする。
【００１７】
上記した「実行状況に応じて適用するパッチを選択する処理」では、プログラムの実行状態に応じて、パッチアドレスレジスタとパッチデータレジスタとの内容を動的に書き換えさせることが好ましい。
【発明の効果】
【００１８】
以上のように、本発明によれば、パッチレジスタの組の数よりも多くのパッチを実現することができる。
このため、プロセッサシステムのハードウエア構成が同様であっても、より多くのバグを修正可能にすることができる。
【発明を実施するための最良の形態】
【００１９】
次に、本発明に係るプロセッサシステムのパッチ方法およびパッチ適用プログラムの一実施形態について、図面を用いて詳細に説明する。
本実施形態におけるハードウエア構成は、図３に示す構成と同様であることとする。
【００２０】
本発明の実施形態におけるプロセッサシステムは、図３に示すように、不揮発性メモリ（ＲＯＭ）にストアされたプログラムを順次実行するプロセッサシステムであり、書き込み可能なプログラムメモリ（ＲＡＭ）と、そのプログラムメモリに対して外部からプログラムを書き込む外部Ｉ／Ｆ（不図示）と、パッチアドレスレジスタと、パッチプログラムレジスタと、ＲＯＭで実行するプログラムアドレスとアドレスレジスタに保存されたデータとを比較する比較器とを備える。
【００２１】
プロセッサは、プログラムカウンタに示されるアドレスのＲＯＭの内容を命令コードとして実行する。
パッチアドレスレジスタは、変更したいプログラムがストアされているアドレスを保持する。このアドレスは、外部Ｉ／Ｆ（不図示）から、プログラム実行を介して、もしくはハードウエアにより任意に書き込めるように構成されている。
【００２２】
プログラムカウンタが発生するアドレスと、パッチアドレスレジスタが発生するパッチアドレスは比較器によって比較される。
この比較器による比較結果が一致したときに、プログラムデコーダへ送る命令コードを、ＲＯＭの内容ではなく、パッチプログラムレジスタの内容に切り替えるようにセレクタを動作させる。
こうして、パッチアドレスレジスタの内容とＲＯＭから実行するプログラムアドレスとが一致した場合には、そのＲＯＭにストアされたプログラムの代わりに、パッチプログラムレジスタの内容を実行するように構成される。このようにして、命令コードを変更することができる。
【００２３】
次に、本発明の実施形態としてのプロセッサシステムにおけるパッチを適用したプログラムの処理について、図１を参照して手順を追って説明する。
まず、プログラムが起動して行うのが初期化であるが、この時、ＲＡＭプログラムエリアの特定の場所に、ＲＯＭプログラムエリアの所望の場所へのジャンプ命令に該当するコードデータを書き込んでおく。ここを「パッチコントロールプログラムのリターンポイント」と呼ぶことにする。
また、そのコードの前の行には、実行して害のないノーオペレーション命令（ｎｏｐ）を置いておくのが良い。ここを「パッチコントロールプログラムのエントリポイント」とする。
【００２４】
初期化が終わるとプログラムは通常実行状態となる。通常実行状態では、プログラムのある部分が繰り返し定期的に実行されることがしばしばある。これはイベントラウンドロビンと呼ばれる。
このラウンドロビンの中に、先のＲＡＭエリアのパッチコントロールプログラムのエントリポイントへジャンプするモジュールを置く。そして前述のパッチコントロールプログラムのリターンポイントは、このモジュールの所望の箇所へ戻ってくるようにアドレスを選んでおく。
このようにすれば、通常実行状態になったときに、定期的にＲＡＭエリアの特定のプログラムを実行できる仕組みが整ったことになる。
この特定のプログラムを「パッチコントロールプログラム」と呼ぶことにする。
【００２５】
このエントリポイントとリターンポイントとの間での処理（パッチコントロールプログラム）は、実行状況に応じて適用するパッチを選択する処理であり、ＲＯＭにストアされたプログラムを順次実行していく時に、定期的に実行されることとなる。
この実行状況に応じて適用するパッチを選択するパッチコントロールプログラムによる処理では、プログラムの実行状態に応じて、パッチアドレスレジスタとパッチデータレジスタとの内容を動的に書き換える。
【００２６】
こうして、パッチが必要になったとき、外部Ｉ／Ｆを通じて、このパッチコントロールプログラムを書き込む。パッチコントロールプログラムの例を図２に示す。
なお、図２に示すプログラム例は、説明用のベーシック的な言語によるものであり、本発明に係るパッチコントロールプログラムは、特定のプログラム言語に特定されるものではない。
【００２７】
この図２に示す例では、プログラムの実行状態が「Ａ」と呼ばれる状態の時と、それ以外の場合とで、パッチレジスタの４組を全て書き換えている。
一例を挙げると、
○実行状態「Ａ」の時は、パッチアドレスレジスタ０番は１００００番地を指定する。
○同、パッチプログラムレジスタ０番は１２３４番地へのジャンプ命令とする。
以下同様である。
【００２８】
この図２に示す例では、２状態に対し、異なる４パッチが実装されている。延べ８パッチが実現できている。
このようにして、図３に示す構成例ではパッチレジスタの組は４個しかないが、８種類のパッチを実現することができる。
対応するＲＡＭエリアには、外部インターフェース全てのパッチのプログラムを事前に書き込んでおけばよい。この例では８カ所になる。
【００２９】
このように、本実施形態では、ＲＯＭにストアされたプログラムが、実行初期化時にＲＡＭの特定のエリアにＲＯＭの所定（１）の番地（リターンポイントからの復帰位置）にジャンプする命令を書き込むように構成され、また、このプログラムは、通常実行時に定期的にＲＡＭの所定（２）の番地（エントリポイント）にジャンプするように構成され、このＲＡＭに書かれたプログラムを逐次実行し、上記したＲＯＭの所定（１）の番地にジャンプする命令の実行によりＲＯＭの所定（１）の番地にジャンプする。
また、ＲＡＭに書かれて定期的に実行される上記したプログラムは、プログラムの実行状態に応じて、パッチアドレスレジスタとパッチデータレジスタの内容を動的に書き換える。
このことにより、本実施形態によれば、物理的なパッチレジスタの組の数よりも多くのパッチを実現することができる。
【００３０】
以上のように、本実施形態によれば、ＲＡＭのプログラムエリアに、パッチレジスタの内容をプログラムの実行状況に応じて動的に書き換えるプログラムを置き、定期的に実行させることにより、パッチレジスタの組の数よりも多くのパッチを実現することができる。
【００３１】
なお、上述した各実施形態は、本発明の好適な実施形態であり、本発明の主旨を逸脱しない範囲内において、種々変形して実施することが可能である。
例えば、プログラムをストアする不揮発性メモリをＲＯＭとして説明しているがこのものに限定されず、例えばＨＤＤやメモリカードなどであってもよい。
【００３２】
また、本発明に係るプロセッサシステムは、ＲＯＭのプログラムにバグがあった場合に、書き込み可能なメモリ（ＲＡＭ）にその修復をするパッチプログラムを書き、実行するシステムであれば各種のプロセッサシステムであってよく、応用分野は特に限定されない。
【図面の簡単な説明】
【００３３】
【図１】本発明の実施形態としてのプロセッサシステムにおけるパッチを適用したプログラムの実行概念を示す図である。
【図２】本発明の実施形態におけるパッチコントロールプログラムの例を示す図である。
【図３】一般的なパッチを適用するプロセッサシステムの構成例を示す図である。
【図４】従来のプロセッサシステムにおけるパッチを適用したプログラムの実行概念を示す図である。
【図１】
2005063311.tif 000003
【図２】
2005063311.tif 000004
【図３】
2005063311.tif 000005
【図４】
2005063311.tif 000006