(57)【要約】【課題】デバッグ作業時に修正処理を実行させても、デバッグ作業に支障をきたさないデバッグ方法を提供すること【解決手段】仮想記憶技術による複数のアドレス空間を介してメモリにアクセスするコンピュータ装置と、コンピュータ装置に用いるデバッグ装置とを備えるデバッグシステムにおけるデバッグ方法において、コンピュータ装置が、例外事象が発生した際に行う例外処理の最後に停止し、前記デバッグ装置を起動させる第１の過程と、デバッグ装置が、第１の過程にて起動されると、例外事象を発生した命令が記憶されているのと同じアドレス空間に、コンピュータ装置を修正処理部として機能させる修正処理プログラムを配置する第２の過程とを備えること。【選択図】図１
2010061234.tif 000002
【特許請求の範囲】
【請求項１】
仮想記憶技術による複数のアドレス空間を介してメモリにアクセスするコンピュータ装置と、前記コンピュータ装置に用いるデバッグ装置とを備えるデバッグシステムにおけるデバッグ方法において、
前記コンピュータ装置が、例外事象が発生した際に行う例外処理の最後に停止し、前記デバッグ装置を起動させる第１の過程と、
前記デバッグ装置が、前記第１の過程にて起動されると、前記例外事象を発生した命令が記憶されているのと同じアドレス空間に、前記コンピュータ装置を修正処理部として機能させる修正処理プログラムを配置する第２の過程と
を備えることを特徴とするデバッグ方法。
【請求項２】
前記コンピュータ装置は、前記仮想アドレス空間を介してアクセスする領域の記憶内容が補助記憶装置に退避されているときは、該退避されている記憶内容を補助記憶装置から読み出して主記憶装置に書き込むページインを行い、
前記過程において前記修正処理プログラムを配置する領域は、前記ページインが発生しない領域であること
を特徴とする請求項１に記載のデバッグ方法。
【請求項３】
前記修正処理プログラムを配置する、前記ページインが発生しない領域は、前記例外事象を発生した命令を含むタスクのスタックであることを特徴とする請求項２に記載のデバッグ方法。
【請求項４】
仮想記憶技術による複数のアドレス空間を介してメモリにアクセスするコンピュータ装置に用いるデバッガ装置であって、
前記コンピュータ装置が例外事象を発生した際に、前記例外事象を発生した命令が記憶されているのと同じアドレス空間に、前記コンピュータ装置を修正処理部として機能させる修正処理プログラムを配置するプログラム転送部
を備えることを特徴とするデバッガ装置。
【請求項５】
仮想記憶技術による複数のアドレス空間を介してメモリにアクセスするコンピュータ装置に用いるデバッグ装置のコンピュータを
前記コンピュータ装置が例外事象を発生した際に、前記例外事象を発生した命令が記憶されているのと同じアドレス空間に、前記コンピュータ装置を修正処理部として機能させる修正処理プログラムを配置するプログラム転送部
として機能させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、デバッガ装置、デバッグ方法およびプログラム、特に仮想記憶技術を用いたコンピュータ装置のデバッグに用いるデバッグ方法、デバッガ装置およびプログラムに関する。
【背景技術】
【０００２】
物理メモリは、一般的に半導体記憶素子を用いた記憶装置であり、高速で読書きが行えることを特徴としている。物理メモリ上のある記憶領域を指定する際には、物理アドレスを用いる。物理アドレスで指定できる記憶領域全体を、物理アドレス空間と呼ぶ。
補助記憶装置は、一般的にハードディスク装置、フレキシブルディスク装置、またはフラッシュメモリ装置を用いた記憶装置であり、物理メモリよりも大容量であるが、読書きの速度が遅いことを特徴としている。
【０００３】
デバッガ装置は、プログラムの修正作業（以下、「デバッグ作業」という）を支援する装置である。デバッガ装置は一般に、コンピュータ装置の中央演算部（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ；ＣＰＵ）の動作を一時的に中断させたり、ＣＰＵの内部状態を調査したり、ＣＰＵに１命令ずつプログラムを実行させたりするなど、ＣＰＵがプログラムを実際に実行する際の動作を細かく解析するための機能を持つ。作業者はこれらの機構を用いてプログラム実行時のＣＰＵの動作を観察し、プログラムのどの部分の処理がプログラム製作者の意図と違うのかを解析することにより、プログラムの誤りを見つけ出す手掛かりとする。
【０００４】
メモリ管理部（Ｍｅｍｏｒｙ  Ｍａｎａｇｅｍｅｎｔ  Ｕｎｉｔ；ＭＭＵ）は、一般的に半導体素子を用いたメモリアクセスを処理する装置で、仮想記憶技術における仮想アドレス空間のアドレスと物理アドレス空間のアドレスとを対応付け、アドレスの変換を行うことを特徴としている。メモリ管理部ＭＭＵはＣＰＵと一体の半導体素子として実現される場合があるが、その処理はＣＰＵとは独立している。
【０００５】
仮想記憶技術とは、情報を補助記憶装置と物理メモリとに分散させて記憶し、記憶された情報の配置を必要に応じて入れ替えることにより、実際に装備されているよりも大きなサイズの物理メモリがシステムに装備されているかのように見せかける技術である。
仮想記憶技術によって作り出された大きなサイズのアドレス空間を仮想アドレス空間と呼ぶ。また仮想記憶技術で使用する補助記憶装置上の記憶領域を、スワップ領域と呼ぶ。
ＣＰＵが仮想アドレス空間のあるアドレス（以下、「仮想アドレス」という）に対して読書きを行う場合、まず、補助記憶装置と物理メモリ装置の制御を行っているメモリ管理部ＭＭＵがアドレス変換処理を行う。
【０００６】
メモリ管理部ＭＭＵは、仮想アドレス空間、物理アドレス空間、およびスワップ領域を、ページという一定の大きさの記憶領域を単位として管理している。メモリ管理部ＭＭＵは、ある仮想アドレスを含むページが物理メモリ上に存在しているかどうかの情報を保持している。アクセスの対象の仮想アドレスを含むページが物理メモリ上に存在している場合、メモリ管理部ＭＭＵは、当該仮想アドレス空間上のアドレス（以下、「仮想アドレス」という）を実際の物理メモリ上、すなわち物理アドレス空間のアドレス（以下、「物理アドレス」という）に変換し、読書きを行う。対象の仮想アドレスを含むページが物理メモリ上に存在していない場合、すなわち、補助記憶装置に退避されている場合、補助記憶装置に格納されている当該ページを、物理メモリ上の未使用のページへ転送する処理が行われる。
【０００７】
この処理をページインと呼ぶ。ページインは、メモリ管理部ＭＭＵがＣＰＵに対して要求を発し、ＣＰＵはページインプログラムを起動して補助記憶装置から読み出した当該ページを物理メモリ上に転送する。ページインプログラムは、スワップ領域に含まれる全てのページの情報を保持しており、メモリ管理部ＭＭＵから要求されたページをスワップ領域から読出し、メモリ管理部ＭＭＵへ渡す。メモリ管理部ＭＭＵは、あるページが物理メモリ上に存在しているかどうかの情報を更新した後、受取ったページ内容を物理メモリ上に書き込む。転送後、対象の仮想アドレスを含むページが物理メモリ上に存在している場合と同様に、メモリ管理部ＭＭＵは当該仮想アドレス空間上のアドレスを実際の物理メモリ上のアドレスに変換し、読書きを行う。
【０００８】
タスクとは、プログラムやデータ、及び実行中のＣＰＵの状態を管理する単位である。ひとつのタスクは、ひとつの仮想アドレス空間を持ち、タスク間では仮想アドレス空間は互いに独立している。
ＣＰＵは定期的に、または不定期に、プログラムの実行を一時中断し、その時のプログラム、データ、ＣＰＵの状態（タスク）を保存して、その代わりに以前に中断された別のタスクの状態を復元、あるいは新たにまったく別のタスクを生成し、実行を再開（あるいは開始）させることができる。この動作をタスク切り替えと呼び、このとき実行を再開（開始）されたタスクを実行中のタスクと呼ぶ。
この切り替えを定期的かつ高速に行うことにより、あたかも複数のＣＰＵが複数のプログラムを同時に実行しているかのような状況を作りだす。このように複数プログラムを並行実行することをマルチタスクと呼ぶ。
【０００９】
タスクの中には、カーネルタスクという特別なタスクが存在する。これは個々のタスクの管理をする唯一のタスクであり、システム動作中は必ず一つだけ常に存在している。
前述のタスク切り替えを行うタスク切替えプログラムやタスクの生成や消滅の処理は、このカーネルタスクの実行中に行われる。また、前述のページインプログラムや後述する例外処理プログラムも、このカーネルタスクの実行中に行われる。カーネルタスクが動作する際の仮想アドレス空間を、カーネル空間と呼ぶ。
【００１０】
一方、カーネルタスク以外の個々のタスクを、ユーザタスクと呼ぶ。ユーザタスクが動作する際の仮想アドレス空間を、ユーザ空間と呼ぶ。ユーザ空間は、ユーザタスクの個数分、存在する。スタックは、コンピュータで用いられる基本的なデータ構造の1 つで、データを後入れ先出しの構造で保持するものである。スタックは現代のコンピュータシステムで非常に広範囲に使われている。典型的なスタックはコンピュータのメモリ上に固定の基点と可変のサイズを持つ領域である。初期状態ではスタックのサイズはゼロである。「スタックポインタ」はスタック上で最も最近参照された位置を指している。多くのＣＰＵはスタックポインタとして使用可能なレジスタを持っている。
【００１１】
スタックに対する主な操作は、つぎの２種類である。プッシュ（Ｐｕｓｈ）操作は、スタックポインタが指す場所にデータを格納し、そのデータのサイズのぶんだけスタックポインタをずらすものである。ポップ（Ｐｏｐ）操作は、スタックポインタが指している現在位置にあるデータを取り出し、スタックポインタをそのデータのぶんだけ（プッシュとは逆方向に）ずらすものである。また、スタックポインタの値を直接修正する操作も可能である。
【００１２】
スタックは、プログラム内でサブルーチンの処理を呼出す際に利用される。サブルーチンを呼出す側の処理では、サブルーチンへ渡すデータ（引数）をスタックへプッシュ操作で格納する。サブルーチンを呼出す側の処理へ戻る必要があるため、戻り先のアドレスをスタックへプッシュ操作で格納した後、サブルーチンへ処理を移行する。サブルーチン側から呼出し側へ戻る際には、戻り先のアドレスをスタックからポップ操作で取り出し、そのアドレスへ処理を移行する。また、戻り先のアドレスをスタックからポップ操作で取り出した後、ポップ操作と同じ方向に、スタックへ格納されている引数の分だけスタックポインタをずらす処理を一緒に行う命令がある。この命令は、呼出し側に戻った後で、不要となった引数をスタックから取り除く処理を省略することを目的とする。加えて、もしこの処理を２つの個別の命令で実行した場合、それらの命令の間でタスク切り替えが発生すると、タスク切替え処理によってスタックの状態が変化する虞がある。その結果、呼出し元へ戻れなくなる危険を防ぐためにも、この処理は１つの命令で一緒に行う必要がある。
【００１３】
例外とは、プログラムの実行中にＣＰＵが検知した「特別な処理が必要な事態」のことである。例えば、「除算を実行しようとしたら除数が０だった」、「メモリの読み書きをしようとしたらその領域が読み書き禁止に設定されていた」、等の事象がこれに相当する。
例外が発生すると、サブルーチン呼び出しの際と同様に、例外発生時に処理を行っていたアドレスをスタックへプッシュ操作で格納する。次に、マルチタスクコンピュータシステムでは、ＣＰＵは実行中のタスクを直ちに中断し、タスクをカーネルタスクに切り替え、例外処理プログラムを実行させる。例外処理プログラムは例外事象を解析し、その要因に応じた対応、例えばエラーの処理等を行った後、タスク切替えプログラムに制御を移す。タスク切替えプログラムは、各々のタスクの状態に基づいて実行させるべきタスクを一つ選択し、そのタスクへのタスク切り替えを行う。
また、例外を発生させる「ブレーク命令」と呼ばれる命令がある。ＣＰＵは、このブレーク命令を実行すると、上述の「除算を実行しようとしたら除数が０だった」などの場合と同様に、例外を発生させて、スタックへのプッシュ、タスクの切り替えを行い、例外処理プログラムを実行する。
【００１４】
デバッガ装置を用いて、ＣＰＵの動作を一時的に中断させ、作業者がＣＰＵの動作を解析できる状態にすることをデバッガ装置の起動と呼ぶ。
ＣＰＵは、上述の「ブレーク命令」を複数種類備えており、それらのうち、特定のものを実行すると、デバッガ装置の起動を行う。よって、一般的にデバッガ装置を使ってデバッグ作業を行う場合、作業者が手動でＣＰＵを強制的に停止させ、解析したいプログラムの解析したい箇所の命令をブレーク命令に書き換えた後、ＣＰＵの実行を再開させる。ＣＰＵがそのブレーク命令を実行するとデバッガはその実行を検知してＣＰＵを停止させ、作業者にデバッグ作業の開始を促す。これにより、作業者はブレーク命令を設定した箇所の周辺をＣＰＵが実行する際の挙動を詳しく解析することが可能になる。
【００１５】
また、前述の例外処理プログラムの内部処理にて、ブレーク命令を実行することで、例えば、「除算を実行しようとしたら除数が０だった」などの不正な処理による例外が発生した場合も、同様にデバッガ装置の起動を行い、不正な処理の発生原因を調査するといったデバッグ作業を行うことができる。このように、例外処理プログラムの内部処理にてデバッガ装置の起動を行う場合は、特定のブレーク命令でデバッガ装置の起動を行うのではなく、例外処理プログラムの内部処理にてブレーク命令を実行すると、デバッガ装置の起動を行うようにしているものもある。
【００１６】
仮想記憶技術を用いたマルチタスクシステムにおいては、複数のタスクで物理アドレス空間を分割し、個々のタスクについては実行中のアドレスを含むページなど一部のページのみが物理メモリ上に存在している。
つまり、デバッガ装置を起動してデバッグ作業を開始した際に、実行中だったタスクのプログラムは、その全てが物理メモリ上に存在していない場合がある。一部のページのみが物理メモリ上に存在している状態でデバッグ作業を行うと、物理アドレス空間に存在していないページにアクセスした場合に、作業者が予期しないタイミングでページインが発生する。このページインにより、コンピュータのハードウェアの状態がデバッガを起動した際の状態から変化してしまい、デバッグ作業に支障をきたす虞がある。
デバッグ作業時には、デバッグ作業のために、あるいはデバッグ作業が可能なように一時的に通常の処理の流れの中に挿入される修正処理を用いる場合がある。この修正処理を行うための修正処理プログラムを書き込む領域は、新規に用意する必要があるが、この際に任意の領域を使用すると、前述のようにデバッグ作業時のハードウェア状態が変化してしまう虞がある。
【００１７】
このような問題に対処するため、従来は次の方法を取っているものがある（例えば、特許文献１の段落０００９、００１０を参照）。予め、プログラム内部に追加領域を用意しておき、何も処理を行わないノーオペレーション命令で満たしておく。通常の実行時には、その追加領域が呼出されることは無いが、デバッグ作業時には必要な修正処理プログラムを追加領域に書き込んだ後、その領域上の修正処理プログラムを一時的に呼出して、修正処理を実行する。
【特許文献１】特開平５−３４１９８１号公報
【発明の開示】
【発明が解決しようとする課題】
【００１８】
しかしながら、特許文献１に示す方法では、仮想記憶技術を用いたコンピュータ装置においてデバッグ作業を行う際に、追加領域に書き込まれた修正処理プログラムを呼び出して修正処理を実行すると、追加領域が物理メモリ上に存在しているとは限らないため、修正処理を実行したときにページイン処理が発生するなど、コンピュータ装置のハードウェア状況が変化してしまい、デバッグ作業に支障をきたすことがあるという問題がある。
【００１９】
本発明は、このような事情に鑑みてなされたもので、その目的は、デバッグ作業時に修正処理を実行させても、デバッグ作業に支障をきたさないデバッグ方法、デバッガ装置およびプログラムを提供することにある。
【課題を解決するための手段】
【００２０】
この発明は上述した課題を解決するためになされたもので、本発明のデバッグ方法は、仮想記憶技術による複数のアドレス空間を介してメモリにアクセスするコンピュータ装置と、前記コンピュータ装置に用いるデバッグ装置とを備えるデバッグシステムにおけるデバッグ方法において、前記コンピュータ装置が、例外事象が発生した際に行う例外処理の最後に停止し、前記デバッグ装置を起動させる第１の過程と、前記デバッグ装置が、前記第１の過程にて起動されると、前記例外事象を発生した命令が記憶されているのと同じアドレス空間に、前記コンピュータ装置を修正処理部として機能させる修正処理プログラムを配置する第２の過程とを備えることを特徴とする。
【００２１】
また、本発明のデバッグ方法は、上述のデバッグ方法であって、前記コンピュータ装置は、前記仮想アドレス空間を介してアクセスする領域の記憶内容が補助記憶装置に退避されているときは、該退避されている記憶内容を補助記憶装置から読み出して主記憶装置に書き込むページインを行い、前記過程において前記修正処理プログラムを配置する領域は、前記ページインが発生しない領域であることを特徴とする。
【００２２】
また、本発明のデバッグ方法は、前記修正処理プログラムを配置する、前記ページインが発生しない領域は、前記例外事象を発生した命令を含むタスクのスタックであることを特徴とする。
【００２３】
また、本発明のプログラムは、仮想記憶技術による複数のアドレス空間を介してメモリにアクセスするコンピュータ装置に用いるデバッグ装置のコンピュータを、前記コンピュータ装置が例外事象を発生した際に、前記例外事象を発生した命令が記憶されているのと同じアドレス空間に、前記コンピュータ装置を修正処理部として機能させる修正処理プログラムを配置するプログラム転送部として機能させる。
【発明の効果】
【００２４】
この発明によれば、例外事象が発生した際に、前記例外事象を発生した命令が記憶されているのと同じ仮想アドレス空間に、当該コンピュータ装置を修正処理部として機能させるプログラムを配置するので、デバッグ作業時に修正処理を実行しても、デバッグ作業に支障をきたさない。
【発明を実施するための最良の形態】
【００２５】
以下、図面を参照して、本発明の実施の形態について説明する。図１は、本実施形態におけるデバッグシステムの構成を示す概略ブロック図である。本実施形態におけるデバッグシステムは、コンピュータ装置１００とデバッガ装置１０２とを備える。コンピュータ装置１００は、中央演算装置（ＣＰＵ）１０１、物理メモリ１０３、メモリ管理装置（ＭＭＵ）１０４、補助記憶装置１０５を具備し、デバッガ装置１０２が接続される。中央演算装置１０１は、物理メモリ１０３から命令を表す情報を読み出して、該命令に従い動作するＣＰＵである。物理メモリ１０３は、ＲＡＭ（Random Access Memory）などの半導体記憶素子を用いた読み書き可能なメモリである。
【００２６】
メモリ管理装置１０４は、仮想アドレス空間１０６と物理アドレス空間１１１との対応付けを管理しており、中央演算装置１０１がメモリアクセスのために指定した仮想アドレスを物理アドレスに変換し、物理メモリ１０３の該当物理アドレスをメモリアクセスする。また、中央演算装置１０１がメモリアクセスのために指定した仮想アドレスに対応付けられた物理アドレスがないとき、すなわち該仮想アドレスに割り当てられた物理メモリ１０３の領域がないときは、メモリ管理装置１０４は、該当仮想アドレスを含むページのページインを中央演算装置１０１に要求する。このように、中央演算装置１０１は、メモリ管理装置１０４を介して、物理メモリ１０３の記憶領域を、物理アドレス空間１１１を用いて管理している。補助記憶装置１０５は、例えば、ハードディスク装置、フレキシブルディスク装置、またはフラッシュメモリ装置を用いた物理メモリ１０３より大容量で読み書き可能な記憶装置である。また、中央演算装置１０１は、補助記憶装置１０５の記憶領域を、スワップ領域１１０を用いて管理する。
【００２７】
デバッガ装置１０２は、コンピュータ装置１００のデバッグに用いられるＪＴＡＧ（Joint Test Action Group）エミュレータなどのオンチップエミュレータ、または、インサーキットエミュレータであり、作業者による中央演算装置１０１の強制停止を指示する操作を受けて、中央演算装置１０１を強制的に停止させることと、中央演算装置１０１がブレーク命令を実行すると、その実行を検知して中央演算装置１０１を停止させ、中央演算装置１０１の内部状態の表示、変更をすることができる。デバッガ装置１０２は、修正処理プログラム１１５を記憶する記憶部１２０およびプログラム転送部１１６を備える。
【００２８】
プログラム転送部１１６は、中央演算装置１０１が例外処理中のブレーク命令を実行した際に、すなわち例外事象が発生した際に、例外事象が発生した命令が記憶されているのと同じアドレス空間に、修正処理プログラム１１５を配置する。好ましくは、プログラム転送部１１６は、修正処理プログラム１１５をページインが発生しない領域、特に本実施形態では、例外事象を発生した命令を含むタスクのスタックに配置する。なお、中央演算装置１０１のブレーク命令が複数種類あり、中央演算装置１０１０が、それら複数種類のブレーク命令のうちの特定の種類を実行した際にプログラム転送部１１６が動作するようにしてもよい。この場合、上述の特定の種類のブレーク命令を、例外処理のプログラムに記載しておく。
【００２９】
修正処理プログラム１１５は、コンピュータ装置１００の中央演算装置１０１が実行可能なプログラムであり、コンピュータ装置１００を修正処理部として機能させる。そして、この修正処理部が行う修正処理は、デバッグ作業時に、デバッグ作業の一部を行う場合、あるいはデバッグ作業を実施可能なように一時的に通常の処理の流れの中に挿入される処理であり、特定のタイミングでアクセスしなければならないハードウェアの操作や、ハードウェアの状態を表す情報の取得を行う。また、修正処理プログラム１１５は、多くのデータを扱わなければならない場合などにも用いられる。なお、デバッガ装置１０２がインサーキットエミュレータの場合は、デバッガ装置１０２が中央演算装置１０１を兼ねており、中央演算装置１０１を取り外して、中央演算装置１０１の代りにデバッガ装置１０２をコンピュータ装置１００の物理メモリ１０３、メモリ管理装置１０４、補助記憶装置１０５に接続する
【００３０】
中央演算装置１０１上で動作するプログラムは、仮想アドレス空間１０６で動作する。仮想アドレス空間１０６には、１個のカーネル空間１０７と複数のユーザ空間（図１ではユーザタスクＡのユーザ空間１０８とユーザタスクＢのユーザ空間１０９）が存在する。図１ではユーザ空間は２個のみだが、３個以上のユーザ空間が存在している場合も同様である。カーネル空間１０７には、タスク切替えプログラム１１２、ページインプログラム１１３、例外処理プログラム１１４が存在する。
【００３１】
タスク切替えプログラム１１２は、一定時間毎に、中央演算装置１０１にて動作するタスクを切り替えるプログラムであるが、この切り替えは、この態様に限定されない。ページインプログラム１１３は、メモリ管理装置１０４からのページインの要求を受けると中央演算装置１０１が動作させるプログラムであり、該プログラムを実行した中央演算装置１０１は、補助記憶装置１０５のスワップ領域１１０からページインするページの記憶内容を読出し、物理メモリ１０３に書き込む。中央演算装置１０１は、このページインプログラム１１３を実行することにより、ページイン処理部として動作する。例外処理プログラム１１４は、中央演算装置１０１において、例外分岐命令を実行する、あるいは「除算を実行しようとしたら除数が０だった」などの不正な処理による例外事象が発生した場合に実行されるプログラムである。例外処理プログラム１１４の詳細については、後述する。
【００３２】
図２は、あるユーザタスクＡ（以下、「タスクＡ」という）を実行中のユーザ空間１０８の状態例を示す図である。タスクＡの仮想アドレス空間であるユーザ空間１０８は、その全てが物理メモリ１０３上に存在しておらず、ユーザ空間１０８で現在実行中のアドレスを含むページなど、一部分のページのみが物理メモリ１０３上に存在している。
ユーザ空間１０８で実行中のタスクＡは、ページａ２０１、ページｂ２０２、ページｃ２０３、ページｄ２０４、ページｅ２０５、ページｆ２０６、の６個のページからなる。
このうち、ページｂ２０２、ページｃ２０３、ページｆ２０６はそれぞれ物理メモリ１０３上に、ページｂ２０７、ページｃ２０８、ページｆ２０９として存在している。それ以外の、ページａ２０１、ページｄ２０４、ページｅ２０５はそれぞれ補助記憶装置１０５上に、ページａ２１０、ページｄ２１１、ページｅ２１２として存在している。
中央演算装置１０１がユーザ空間１０８のページｂ２０２、ページｃ２０３、ページｆ２０６にアクセスすると、メモリ管理装置１０４がそのアクセスのアドレスを変換するので、中央演算装置１０１は、それぞれに対応する物理メモリ１０３のページｂ２０７、ページｃ２０８、ページｆ２０９にアクセスすることになる。
【００３３】
図３は、タスクＡの実行中に、仮想アドレスａ０の命令コード３０１を実行した際に例外が発生した状態を表している。例外が発生すると、中央演算装置１０１は実行中のタスクＡを直ちに中断し、タスク切替えプログラム１１２によってカーネル空間１０７で動作するカーネルタスクに切替え、例外処理プログラム１１４を実行させる。
このとき、中央演算装置１０１は、例外を発生した命令コード３０１の仮想アドレスａ０をタスクＡの仮想アドレス空間であるユーザ空間１０８にあるスタックにＰｕｓｈ操作で格納する。このスタックはスタックポインタ３０２が指示している。Ｐｕｓｈ操作で格納した結果、ここでは、スタックポインタ３０２が指示するアドレス３０３に仮想アドレスａ０が格納される。併せて、タスク切替えプログラム１１２により中央演算装置１０１は、カーネルタスクからタスクＡへ切替える以外の、他のユーザタスクへの切り替えを停止する。
【００３４】
その後、中央演算装置１０１は、例外処理プログラム１１４の末尾にあり、デバッガ装置１０２を起動させるブレーク命令を実行すると、停止し、デバッガ装置１０２を起動する（デバッグ作業可能な状態となる）。これにより、作業者がデバッガ装置１０２を用いて例外発生原因の調査などのデバッグ作業を行うことができるようになる。デバッグ作業の際にプログラムの修正処理が必要な場合は、作業者は修正処理プログラム１１５をデバッガ装置１０２の記憶部１２０に予め格納しておき、デバッガ装置１０２が起動したときに、デバッガ装置１０２のプログラム転送部１１６が動作するように予め設定しておく。なお、ここでは、デバッガ装置１０２が起動したときにプログラム転送部１１６が動作するとして説明したが、デバッガ装置１０２の起動後に、作業者の指示操作に従い、プログラム転送部１１６が動作するようにしてもよい。
【００３５】
図４は、デバッガ装置１０２のプログラム転送部１１６およびコンピュータ装置１００の動作を説明するフローチャートである。デバッガ装置１０２のプログラム転送部１１６は、まずステップＳ４０１で、中央演算装置１０１のレジスタを参照し、例外が発生したタスクのスタック、すなわち例外が発生したタスクの仮想アドレス空間にあるスタックから仮想アドレスａ０をＰｏｐ操作で取得する。次に、ステップＳ４０２で、プログラム転送部１１６は、タスクＡのユーザ空間１０８にあるスタックに、修正処理プログラム１１５を転送する。転送元の修正処理プログラム１１５はデバッガ装置１０２の記憶部１２０に格納されている。プログラム転送部１１６は、修正処理プログラム１１５自体をＰｕｓｈ操作でスタックに格納することで、転送を行う。この転送の後にステップＳ４０３で、プログラム転送部１１６は、ステップＳ４０１にて取得した仮想アドレスａ０を、スタックにＰｕｓｈ操作で格納する。
【００３６】
図５（ａ）〜（ｃ）は、上述のステップＳ４０２の修正処理プログラム１１５を転送する際の、スタックの状態変化を示したものである。図５（ａ）は、プログラム転送部１１６が動作を開始した時点でのスタックの状態を表している。ここで、タスクＡはページｆ２０６にスタックを設定している。よってスタックポインタ５０４は、ページｆ２０６内の仮想アドレス５０５を指示しており、命令コード３０１を実行した際に、命令コード３０１がある仮想アドレスａ０の値がスタックに格納されている。
図５（ｂ）は、ステップＳ４０１の処理を実行した時点でのスタックの状態を表している。命令コード３０１がある仮想アドレスａ０の値がスタックから取り出され、スタックポインタ５０６が指示すアドレスもＰｏｐ操作により仮想アドレスａ０を取り出した分だけ変化している。
【００３７】
図５（ｃ）は、ステップＳ４０３の処理を実行した時点でのスタックの状態を表している。ステップＳ４０２の処理により、カーネル空間１０７上に格納されている修正処理プログラム１１５は、スタックに格納され、修正処理プログラム５０９となる。そしてステップＳ４０３の処理により、取得した命令コード３０１の仮想アドレスａ０が、仮想アドレス５０８に格納されている。これらの処理に伴い、スタックポインタ５０７が指示するアドレスは仮想アドレス５０８に変化している。
【００３８】
図４に戻り、ステップＳ４０３の次にステップＳ４０４で、中央演算装置１０１は、動作を再開し、タスクＡのユーザ空間１０８にある修正処理プログラム５０９（図５（ｃ））の処理開始アドレスへ分岐を行う。処理開始アドレスは、スタックの位置を示すスタックポインタ５０７が指示するアドレスから求める。この分岐は、カーネル空間１０７からタスクＡのユーザ空間１０８へ、処理が移行するものである。よって、中央演算装置１０１は、タスク切替えプログラム１１２によってカーネルタスクからタスクＡに切替をおこなう。その後、タスクＡのユーザ空間１０８にある修正処理プログラム５０９を実行する。
【００３９】
修正処理プログラム５０９の最後には、「スタックポインタを指定サイズだけずらした後、サブルーチンから復帰する命令」（以下、「リターン命令」という）が記述されており、中央演算装置１０１はこのリターン命令を実行する。このリターン命令に指定する、スタックポインタをずらすサイズは、修正処理プログラム５０９のサイズを元に設定する。すなわち、このリターン命令を実行後に、スタックにＰｕｓｈ操作で格納されていた修正処理プログラム５０９が、スタックから全て取り除かれるようなサイズを予め設定しておく。このリターン命令として、例えばＣＰＵ（中央演算装置１０１）がインテル（登録商標）社のＩＡ３２の場合は、「ＲＥＴ命令」を用いることが出来る。具体的には、サブルーチンから復帰するアドレス（仮想アドレスａ０）をＰｏｐ操作で取り出した後、Ｐｏｐ操作と同じ方向にスタックポインタをずらすサイズを、ＲＥＴ命令のオペランド（引数）に指定する。なお、中央演算装置１０１が、他のＣＰＵであっても（例えばＭＩＰＳ（登録商標）であれば「ＪＡＬＲ命令」を用いて）同様の処理を行うことが出来る。
【００４０】
図６は、リターン命令７０２を実行する際の、スタック上の状態を表す。図６（ａ）のユーザ空間５０３は、リターン命令７０２の実行前のユーザ空間１０８の状態であり、図６（ｂ）のユーザ空間７０１は、リターン命令７０２の実行後のユーザ空間１０８の状態である。中央演算装置１０１は、リターン命令７０２を実行すると、まずスタックポインタ５０７が指示する仮想アドレス５０８からアドレスａ０を取出す。続けて、中央演算装置１０１は、リターン命令７０２に指定した、スタックポインタをずらすサイズに基づき、スタックポインタの指示するアドレスをスタックポインタ７０３の位置まで移動する。
【００４１】
更に、中央演算装置１０１は、このリターン命令７０２を実行すると、スタックにＰｕｓｈ操作で格納されていた仮想アドレスａ０に、処理が移行する。その仮想アドレスａ０は、先に例外を発生した命令コード３０１のアドレスである。よって中央演算装置１０１は、命令コード３０１の実行を再開する。
【００４２】
このように、デバッガ装置１０２を起動させる例外事象が発生したときに、例外事象が発生した命令が記憶されているのと同じ仮想アドレス空間、すなわち例外事象が発生したときに実行中のタスクの仮想アドレス空間であるスタックに、修正処理用プログラムを配置して実行することで、修正処理用プログラムの実行時にページインが発生しないようにし、デバッグ作業時に修正処理を実行しても、デバッグ作業に支障をきたさないようにすることができる。
【００４３】
ここで、ページインが発生しないのは、図３の説明で述べたように、このスタック領域には、例外が発生した際にＰｕｓｈ操作で書き込みが行われており、既に物理メモリが割り当てられているためである。すなわち、本発明では、デバッガ装置１０２のプログラム転送部１１６が、コンピュータ装置１００のアドレス空間のうち、ページインが発生しない領域に、記憶部１２０から読み出した修正処理用プログラムを配置して実行することで、デバッグ作業に支障をきたさないようにしている。
【００４４】
なお、デバッガ装置１０２には、周辺機器として入力装置、表示装置等（いずれも図示せず）が接続されるものとする。ここで、入力装置とはキーボード、マウス等の入力デバイスのことをいう。表示装置とはＣＲＴ（Ｃａｔｈｏｄｅ  Ｒａｙ  Ｔｕｂｅ）や液晶表示装置等のことをいう。
また、本実施形態では、本発明をコンピュータ装置１００に適用する例を挙げて説明したが、携帯電話、テレビ受像装置、テレビ録画装置といった家電製品など、コンピュータを具備するその他の装置に適用してもよい。
【００４５】
なお、図１におけるタスク切替えプログラム１１２、ページインプログラム１１３、例外処理プログラム１１４、修正処理プログラム１１５各々を中央演算装置１０１が実行することにより行われる処理は、専用のハードウェアにより実現されるものであってもよい。
【００４６】
また、本実施形態において、中央演算装置１０１が、例えば、周辺機器からの割り込みなどの不正な処理以外の例外が発生したときにも、例外処理プログラム１１４を実行するようになっている場合は、例外処理プログラム１１４を実行することにより中央演算装置１０１が、例外の発生要因がデバッガ装置１０２を起動すべき発生要因であるか否かを判定し、起動すべき発生要因のときのみ、本実施形態における例外処理プログラム１１４の処理を行うようにしてもよい。
また、本実施形態において、デバッガ装置１０２を起動するのは、不正な処理が起きた場合としたが、プログラムの特定の箇所でデバッガ装置１０２を起動させたいときには、該当箇所にソフトウェア割込み命令を書いておき、該ソフトウェア割込み命令を実行した中央演算装置１０１が、例外処理プログラム１１４を実行するようにしておいてもよい。
【００４７】
以上、この発明の実施形態を図面を参照して詳述してきたが、具体的な構成はこの実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の設計変更等も含まれる。
【産業上の利用可能性】
【００４８】
本発明は、携帯電話、テレビ受像装置、テレビ録画装置などのコンピュータ装置を備えた家電製品のデバッガ装置に用いて好適であるが、これらに限らない。
【図面の簡単な説明】
【００４９】
【図１】この発明の一実施形態によるコンピュータ装置１００およびデバッガ装置１０２の構成を示す概略ブロック図である。
【図２】同実施形態におけるタスクＡを実行中のユーザ空間１０８の状態例を示す図である。
【図３】同実施形態における仮想アドレスａ０の命令コード３０１を実行した際に例外が発生した状態を表す図である。
【図４】同実施形態におけるプログラム転送部１１６を実行しているデバッガ装置１０２の動作を説明するフローチャートである。
【図５】同実施形態における修正処理プログラム１１５を転送する際の、スタックの状態変化を示したものである。
【図６】同実施形態におけるリターン命令７０２を実行する際の、スタック上の状態を表す図である。
【符号の説明】
【００５０】
１００…コンピュータ装置  １０１…中央演算装置  １０２…デバッガ装置  １０３…物理メモリ  １０４…メモリ管理装置  １０５…補助記憶装置  １０６…仮想アドレス空間  １０７…カーネル空間  １０８…ユーザ空間（タスクＡ）  １０９…ユーザ空間（タスクＢ）  １１０…スワップ領域  １１１…物理アドレス空間  １１２…タスク切替えプログラム  １１３…ページインプログラム  １１４…例外処理プログラム  １１５…修正処理プログラム  １１６…プログラム転送部
【図１】
2010061234.tif 000003
【図２】
2010061234.tif 000004
【図３】
2010061234.tif 000005
【図４】
2010061234.tif 000006
【図５】
2010061234.tif 000007
【図６】
2010061234.tif 000008