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