説明

プログラム、例外処理方法、コンピュータ、携帯電話およびテレビ受像装置

【課題】デバッガ装置を用いたデバッグ作業中のページイン発生を防ぎ、かつ、タスク切り替えの時間的オーバヘッドを抑制する
【解決手段】複数のタスクを各々の仮想アドレス空間にて実行させるマルチタスク処理を実行するコンピュータを、例外事象が発生すると起動され、コンピュータに接続されたデバッガ装置を起動する命令を、実行中のタスクに例外処理から復帰したときに実行される命令が格納されているメモリに格納するとともに、仮想アドレス空間に物理メモリを割り当てるページイン処理部に例外事象の発生時に実行中のタスクの仮想アドレス空間のうち少なくとも実行中のタスクが使用する仮想アドレスに物理メモリを割り当てさせる例外処理部として機能させるためのプログラム。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、プログラム、例外処理方法、コンピュータ、携帯電話およびテレビ受像装置、特にマルチタスクコンピュータシステムにおいて、デバッガ装置を制御するプログラム、例外処理方法、コンピュータ、携帯電話およびテレビ受像装置に関する。
【背景技術】
【0002】
従来、デバッガ装置を使ってマルチタスクコンピュータシステムのプログラムの修正作業(以下、「デバッグ作業」という)を行う場合、作業者が手動で中央演算処理装置(Central Processing Unit;以下、「CPU」という)を強制的に停止させ、解析したいプログラムの解析したい箇所の命令をブレーク命令に書き換えた後、CPUの実行を再開させる。CPUがそのブレーク命令を実行するとデバッガ装置はその実行を検知してCPUを停止させ、作業者にデバッグ作業の開始を促す。これにより、作業者はブレーク命令を設定した箇所の周辺をCPUが実行する際の挙動を詳しく解析することが可能になる。
また、例外処理プログラムの内部処理にて、ブレーク命令を実行することで、例えば、「除算を実行しようとしたら除数が0だった」などの不正な処理による例外が発生した場合も、同様にデバッガ装置の起動を行い、不正な処理の発生原因を調査するといったデバッグ作業を行うことができる。
【0003】
以下、各用語を説明する。物理メモリは、例えば、半導体記憶素子を用いた記憶装置であり、高速で読書きが行えることを特徴としている。物理メモリ上のある記憶領域を指定する際には、物理アドレスを用いる。物理アドレスで指定できる記憶領域全体を、物理アドレス空間と呼ぶ。
外部記憶装置は、例えば、ハードディスク装置、フレキシブルディスク装置、またはフラッシュメモリ装置を用いた記憶装置であり、物理メモリよりも大容量であるが、物理メモリに比べて読書きの速度が遅いことを特徴としている。
デバッガ装置は、プログラムのデバッグ作業を支援する装置である。デバッガ装置は例えば、コンピュータシステムのCPUの動作を一時的に中断させたり、CPUの内部状態を調査したり、CPUに1命令ずつプログラムを実行させたりするなど、CPUがプログラムを実際に実行する際の動作を細かく解析するための機能を持つ。作業者はこれらの機構を用いてプログラム実行時のCPUの動作を観察し、プログラムのどの部分の処理がプログラム製作者の意図と違うのかを解析することにより、プログラムの誤りを見つけ出す手掛かりとする。
【0004】
メモリ管理装置(Memory Management Unit;以下、「MMU」という)は、例えば、半導体素子を用いたメモリアクセスを処理する装置で、仮想記憶空間のアドレスと物理アドレス空間とを対応付け、アドレスの変換を行うことを特徴としている。MMUはCPUと一体の半導体素子として実現される場合があるが、その処理はCPUとは独立している。
仮想記憶技術とは、情報を外部記憶装置と物理メモリとに分散させて記憶し、記憶された情報の配置を必要に応じて入れ替えることにより、実際に装備されているよりも大きなサイズの物理メモリがコンピュータシステムに装備されているかのように見せかける技術である。仮想記憶技術によって作り出された大きなサイズのメモリ空間を仮想アドレス空間と呼ぶ。また仮想記憶技術で使用する外部記憶装置上の記憶領域を、スワップ領域と呼ぶ。
【0005】
CPUが仮想アドレス空間のあるアドレス(以下、「仮想アドレス」という)に対して読書きを行う場合、まず、外部記憶装置と物理メモリ装置の制御を行っているMMUがアドレス変換処理を行う。MMUは、仮想アドレス空間、物理アドレス空間、およびスワップ領域を、ページという一定の大きさの記憶領域を単位として管理している。MMUは、ある仮想アドレスを含むページが物理メモリ上に存在しているかどうかの情報を保持している。対象の仮想アドレスを含むが物理メモリ上に存在している場合、MMUは、当該仮想アドレス空間上のアドレスを実際の物理メモリ上のアドレスに変換し、読み書きを行う。
【0006】
対象の仮想アドレスを含むページが物理メモリ上に存在していない場合、外部記憶装置に格納されている当該ページを、物理メモリ上の未使用のページへ転送する処理が行われる。この処理をページインと呼ぶ。ページインは、MMUがCPUに対して要求を発し、CPUはページインプログラムを起動して外部記憶装置から読み出した当該ページを物理メモリ上に転送する。ページインプログラムは、スワップ領域に含まれる全てのページの情報を保持しており、MMUから要求されたページをスワップ領域から読出し、MMUへ渡す。MMUは、あるページが物理メモリ上に存在しているかどうかの情報を更新した後、受取ったページ内容を物理メモリ上に書き込む。転送後、対象の仮想アドレスを含むページが物理メモリ上に存在している場合と同様に、MMUは当該仮想アドレス空間上のアドレスを実際の物理メモリ上のアドレスに変換し、読み書きを行う。
【0007】
タスクとは、プログラムやデータ、及び実行中のCPUの状態を管理する単位である。ひとつのタスクは、ひとつの仮想アドレス空間を持ち、タスク間では仮想アドレス空間は互いに独立している。CPUは定期的に、または不定期に、プログラムの実行を一時中断し、その時のプログラム、データ、CPUの状態(タスク)を保存して、その代わりに以前に中断された別のタスクの状態を復元、あるいは新たにまったく別のタスクを生成し、実行を再開(あるいは開始)させることができる。この動作をタスク切り替えと呼び、このとき実行を再開(開始)されたタスクを実行中のタスクと呼ぶ。この切り替えを定期的かつ高速に行うことにより、あたかも複数のCPUが複数のプログラムを同時に実行しているかのような状況を作りだす。このように複数プログラムを並行実行することをマルチタスクと呼ぶ。
【0008】
タスクの中には、カーネルタスクという特別なタスクが存在する。これは個々のタスクの管理をする唯一のタスクであり、システム動作中は必ず一つだけ常に存在している。前述のタスク切り替えを行うタスク切り替えプログラムやタスクの生成や消滅の処理は、このカーネルタスクの実行中に行われる。また、前述のページインプログラムや後述する例外処理プログラムも、このカーネルタスクの実行中に行われる。カーネルタスクが動作する際の仮想アドレス空間を、カーネル空間と呼ぶ。一方、カーネルタスク以外の個々のタスクを、ユーザタスクと呼ぶ。ユーザタスクが動作する際の仮想アドレス空間を、ユーザ空間と呼ぶ。ユーザ空間は、ユーザタスクの個数分、存在する。
【0009】
スタックは、コンピュータで用いられる基本的なデータ構造の1つで、データを後入れ先出しの構造で保持するものである。スタックは現代のコンピュータシステムで非常に広範囲に使われている。典型的なスタックはコンピュータのメモリ上に固定の基点と可変のサイズを持つ領域である。初期状態ではスタックのサイズはゼロである。「スタックポインタ」はスタック上で最後に参照された位置を指している。多くのCPUはスタックポインタとして使用可能なレジスタを持っている。
スタックに対する主な操作は、Push操作とPop操作の2種類である。Push操作は、スタックポインタが指す場所にデータを格納し、そのデータのサイズのぶんだけスタックポインタをずらすものである。Pop操作は、スタックポインタが指している現在位置にあるデータを取り出し、スタックポインタをそのデータのぶんだけ(Pushとは逆方向に)ずらすものである。
【0010】
また、スタックポインタの値を直接修正する操作も可能である。スタックは、プログラム内でサブルーチンの処理を呼出す際に利用される。サブルーチンを呼出す側の処理では、サブルーチンへ渡すデータ(引数)をスタックへPush操作で格納する。サブルーチンを呼出す側の処理へ戻る必要があるため、戻り先のアドレスをスタックへPush操作で格納した後、サブルーチンへ処理を移行する。サブルーチン側から呼出し側へ戻る際には、戻り先のアドレスをスタックからPop操作で取り出し、そのアドレスへ処理を移行する。また、戻り先のアドレスをスタックからPop操作で取り出した後、Pop操作と同じ方向に、スタックへ格納されている引数のぶんだけスタックポインタをずらす処理を一緒に行う命令がある。この命令は、呼出し側に戻った後で、不要となった引数をスタックから取り除く処理を省略することを目的とする。
【0011】
例外とは、プログラムの実行中にCPUが検知した「特別な処理が必要な事態」のことである。例えば、「除算を実行しようとしたら除数が0だった」、「メモリの読み書きをしようとしたらその領域が読み書き禁止に設定されていた」、等の事象がこれに相当する。例外が発生すると、サブルーチン呼び出しの際と同様に、例外発生時に処理を行っていたアドレスをスタックへPush操作で格納する。次に、マルチタスクコンピュータシステムでは、CPUは実行中のタスクを直ちに中断し、タスクをカーネルタスクに切り替え、例外処理プログラムを実行させる。例外処理プログラムは例外事象を解析し、その要因に応じた対応、例えばエラーの処理等を行った後、タスク切り替えプログラムに制御を移す。タスク切り替えプログラムは、各々のタスクの状態に基づいて実行させるべきタスクを一つ選択し、そのタスクへのタスク切り替えを行う。
【0012】
デバッガ装置を用いて、CPUの動作を一時的に中断させ、作業者がCPUの動作を解析できる状態にすることをデバッガ装置の起動と呼ぶ。CPUは「ブレーク命令」という特定の命令を実行すると、デバッガ装置の起動を行う。
仮想記憶技術を用いたマルチタスクシステムにおいては、複数のタスクで物理アドレス空間を分割し、個々のタスクについては実行中のアドレスを含むページなど一部のページのみが物理メモリ上に存在している。つまり、デバッガ装置を起動してデバッグ作業を開始した際に、実行中だったタスクのプログラムは、その全てが物理メモリ上に存在していない場合がある。
【0013】
一部のページのみが物理メモリ上に存在している状態でデバッグ作業を行うと、物理アドレス空間に存在していないページにアクセスした場合に、作業者が予期しないタイミングでページインが発生する。このページインにより、コンピュータのハードウェアの状態がデバッガを起動した際の状態から変化してしまい、デバッグ作業に支障をきたす虞がある。例えば、作業者が、ハードウェアの状態(たとえば周辺チップの設定レジスタの値)などを調べながらデバッグ作業を進めている途中で、CPUが物理メモリ上に無いページへアクセスすると、ページインが発生する。このページインに伴い、調査していたハードウェアの状態(たとえばメモリ管理装置や外部記憶装置の設定)が変化してしまい、デバッグ作業ができなくなる。
このような問題に対処するため、従来は次の方法がある。タスク切り替えが発生した際に、次に実行するタスクが使用するページを全て物理メモリ上に転送する(例えば、特許文献1の段落0034、0035を参照)。
【特許文献1】特表2001−517830号公報
【発明の開示】
【発明が解決しようとする課題】
【0014】
しかしながら、従来のデバッグ作業中にページインの発生を防ぐ方法にあっては、デバッグ作業時以外の通常の動作状態においても、タスク切り替えが発生する度に次に実行するタスクが使用するページを全て物理メモリ上に転送するため、大きな時間的オーバヘッドが発生するという問題がある。
【0015】
本発明は、このような事情に鑑みてなされたもので、その目的は、デバッガ装置を用いたデバッグ作業中のページイン発生を防ぎ、かつ、タスク切り替えの時間的オーバヘッドを抑制するプログラム、例外処理方法、コンピュータ、携帯電話およびテレビ受像装置を提供することにある。
【課題を解決するための手段】
【0016】
この発明は上述した課題を解決するためになされたもので、本発明のプログラムは、複数のタスクを各々の仮想アドレス空間にて実行させるマルチタスク処理を実行するコンピュータを、例外事象が発生すると起動され、前記コンピュータに接続されたデバッガ装置を起動する命令を、前記実行中のタスクに例外処理から復帰したときに実行される命令が格納されているメモリに格納するとともに、仮想アドレス空間に物理メモリを割り当てるページイン処理部に前記例外事象の発生時に実行中のタスクの仮想アドレス空間のうち少なくとも前記実行中のタスクが使用する仮想アドレスに物理メモリを割り当てさせる例外処理部として機能させる。
【0017】
また、本発明のプログラムは、上述のプログラムであって、前記例外処理部は、起動される要因となった前記例外事象が予め決められた所定の例外事象であるか否かを判定し、前記所定の例外事象であると判定したときに、前記デバッガ装置を起動する命令を、前記実行中のタスクに例外処理から復帰したときに実行される命令が格納されているメモリに格納するとともに、前記ページイン処理部に前記実行中のタスクの仮想アドレス空間のうち少なくとも該タスクが使用する仮想アドレスに物理メモリを割り当てさせることを特徴とする。
【0018】
また、本発明のプログラムは、上述のいずれかのプログラムであって、前記ページイン処理部は、コンピュータを当該ページイン処理部として機能させるプログラムが実行時に配置されている仮想アドレス空間の指定された領域に、物理メモリを割り当て、前記例外処理部は、前記コンピュータをページイン処理部として機能させるプログラムを、前記例外事象の発生時に実行中のタスクの仮想アドレス空間に配置し、該タスクが使用する仮想アドレス空間の領域を指定して該配置したプログラムを実行させることを特徴とする。
【0019】
また、本発明の例外処理方法は、複数のタスクを各々の仮想アドレス空間にて実行させるマルチタスク処理を実行するコンピュータにおいて、例外事象が発生されると起動される例外処理部の例外処理方法であって、前記例外処理部が、前記コンピュータに接続されたデバッガ装置を起動する命令を、前記実行中のタスクに例外処理から復帰したときに実行される命令が格納されているメモリに格納する第1の過程と、前記例外処理部が、仮想アドレス空間に物理メモリを割り当てるページイン処理部に、前記例外事象の発生時に実行中のタスクの仮想アドレス空間のうち、少なくとも前記タスクが使用する仮想アドレスに物理メモリを割り当てさせる第2の過程とを備えることを特徴とする。
【0020】
また、本発明のコンピュータは、複数のタスクを各々の仮想アドレス空間にて実行させるマルチタスク処理を実行するコンピュータにおいて、仮想アドレス空間に物理メモリを割り当てるページイン処理部と、例外事象が発生すると起動され、前記コンピュータに接続されたデバッガ装置を起動する命令を、前記実行中のタスクに例外処理から復帰したときに実行される命令が格納されているメモリに格納するとともに、前記ページイン処理部に前記例外事象の発生時に実行中のタスクの仮想アドレス空間のうち少なくとも前記実行中のタスクが使用する仮想アドレスに物理メモリを割り当てさせる例外処理部とを具備することを特徴とする。
【0021】
また、本発明の携帯電話は、複数のタスクを各々の仮想アドレス空間にて実行させるマルチタスク処理を実行するコンピュータを具備する携帯電話において、仮想アドレス空間に物理メモリを割り当てるページイン処理部と、例外事象が発生すると起動され、当該携帯電話に接続されたデバッガ装置を起動する命令を、前記実行中のタスクに例外処理から復帰したときに実行される命令が格納されているメモリに格納するとともに、前記ページイン処理部に前記例外事象の発生時に実行中のタスクの仮想アドレス空間のうち少なくとも前記実行中のタスクが使用する仮想アドレスに物理メモリを割り当てさせる例外処理部とを具備することを特徴とする。
【0022】
また、本発明のテレビ受像装置は、複数のタスクを各々の仮想アドレス空間にて実行させるマルチタスク処理を実行するコンピュータを具備するテレビ受像装置において、仮想アドレス空間に物理メモリを割り当てるページイン処理部と、例外事象が発生すると起動され、当該テレビ受像装置に接続されたデバッガ装置を起動する命令を、前記実行中のタスクに例外処理から復帰したときに実行される命令が格納されているメモリに格納するとともに、前記ページイン処理部に前記例外事象の発生時に実行中のタスクの仮想アドレス空間のうち少なくとも前記実行中のタスクが使用する仮想アドレスに物理メモリを割り当てさせる例外処理部とを具備することを特徴とする。
【発明の効果】
【0023】
この発明によれば、例外処理部は、不正な処理による例外が発生したときに実行中だったタスクに例外処理から復帰したときに実行される命令を、デバッガ装置を起動する命令に書き替え、さらにページイン処理部に該タスクが使用する仮想アドレスに物理メモリを割り当てさせているので、タスク切り替え時にオーバヘッドを起こさずに、かつ、デバッガ装置にてデバッグ作業を行う際に、作業者が予期しないページインの発生を防ぐことができるプログラム、例外処理方法、コンピュータ、携帯電話およびテレビ受像装置を提供できる。
【発明を実施するための最良の形態】
【0024】
以下、図面を参照して、本発明の実施の形態について説明する。図1は、本実施形態における演算装置100の構成を示す概略ブロック図である。演算装置100は、中央演算装置(CPU)101、物理メモリ103、メモリ管理装置(MMU)104、外部記憶装置105を具備し、デバッガ装置102が接続される。中央演算装置101は、物理メモリ103から命令を表す情報を読み出して、該命令に従い動作するCPUである。物理メモリ103は、RAM(Random Access Memory)などの半導体記憶素子を用いた読み書き可能なメモリである。
【0025】
メモリ管理装置104は、仮想アドレス空間106と物理アドレス空間111との対応付けを管理しており、中央演算装置101がメモリアクセスのために指定した仮想アドレスを物理アドレスに変換し、物理メモリ103の該当物理アドレスをメモリアクセスする。また、中央演算装置101がメモリアクセスのために指定した仮想アドレスに対応付けられた物理アドレスがないとき、すなわち該仮想アドレスに割り当てられた物理メモリ103の領域がないときは、メモリ管理装置104は、該当仮想アドレスを含むページのページインを中央演算装置101に要求する。このように、中央演算装置101は、メモリ管理装置104を介して、物理メモリ103の記憶領域を、物理アドレス空間111を用いて管理している。外部記憶装置105は、例えば、ハードディスク装置、フレキシブルディスク装置、またはフラッシュメモリ装置を用いた物理メモリ103より大容量で読み書き可能な記憶装置である。また、中央演算装置101は、外部記憶装置105の記憶領域を、スワップ領域110を用いて管理する。
【0026】
デバッガ装置102は、JTAG(Joint Test Action Group)エミュレータなどのオンチップエミュレータ、または、インサーキットエミュレータであり、中央演算装置101がブレーク命令を実行すると、その実行を検知して中央演算装置101を停止させ、中央演算装置101の内部状態の表示、変更をすることができる。なお、デバッガ装置102がインサーキットエミュレータの場合は、デバッガ装置102が中央演算装置101を兼ねており、中央演算装置101を取り外して、中央演算装置101の代りにデバッガ装置102を演算装置100の物理メモリ103、メモリ管理装置104、外部記憶装置105に接続する。
【0027】
中央演算装置101上で動作するプログラムは、仮想アドレス空間106で動作する。仮想アドレス空間106には、1個のカーネル空間107と複数のユーザ空間(図1ではユーザタスクAのユーザ空間108とユーザタスクBのユーザ空間109)が存在する。図1ではユーザ空間は2個のみだが、3個以上のユーザ空間が存在している場合も同様である。カーネル空間107には、タスク切り替えプログラム112、ページインプログラム113、例外処理プログラム114、ユーザタスク内ページイン実行プログラム115が存在する。タスク切り替えプログラム112は、一定時間毎に、中央演算装置101にて動作するタスクを切り替えるプログラムであるが、この切り替えは、この態様に限定されない。ページインプログラム113は、メモリ管理装置104からのページインの要求を受けると中央演算装置101が動作させるプログラムであり、該プログラムを実行した中央演算装置101は、外部記憶装置105のスワップ領域110からページインするページの記憶内容を読出し、物理メモリ103に書き込む。中央演算装置101は、このページインプログラム113を実行することにより、ページイン処理部として動作する。
【0028】
例外処理プログラム114は、中央演算装置101において「除算を実行しようとしたら除数が0だった」などの不正な処理(例外事象)による例外が発生した場合に実行されるプログラムである。ユーザタスク内ページイン実行プログラム115は、例外処理プログラム114により、ユーザ空間108、109のうち、不正な処理による例外が発生したユーザ空間にロードされて、該空間に物理メモリ103を割り当てるプログラムである。中央演算装置101は、例外処理プログラム114を実行し、さらに例外処理プログラム114を実行することにより、例外が発生したタスクのユーザ空間に転送されたユーザタスク内ページイン実行プログラム115を実行することにより、例外処理部として動作する。例外処理プログラム114およびユーザタスク内ページイン実行プログラム115の詳細については、後述する。
【0029】
図2は、あるユーザタスクA(以下、「タスクA」という)を実行中のユーザ空間108の状態例を示す図である。タスクAの仮想アドレス空間であるユーザ空間108は、その全てが物理メモリ103上に存在しておらず、ユーザ空間108で現在実行中のアドレスを含むページなど、一部分のページのみが物理メモリ103上に存在している。
ユーザ空間108で実行中のタスクAは、ページa201、ページb202、ページc203、ページd204、ページe205、ページf206、の6個のページからなる。このうち、ページb202、ページc203、ページf206はそれぞれ物理メモリ103上に、ページb207、ページc208、ページf209として存在している。それ以外の、ページa201、ページd204、ページe205はそれぞれ外部記憶装置105上に、ページa210、ページd211、ページe212として存在している。
中央演算装置101がユーザ空間108のページb202、ページc203、ページf206にアクセスすると、メモリ管理装置104がそのアクセスのアドレスを変換するので、中央演算装置101は、それぞれに対応する物理メモリ103のページb207、ページc208、ページf209にアクセスすることになる。
【0030】
図3は、タスクAの実行中に、仮想アドレスa0の命令コード301を実行した際に例外が発生した状態を表している。例外が発生すると、CPU101は実行中のタスクAを直ちに中断し、タスク切替えプログラム112によってカーネル空間107で動作するカーネルタスクに切替え、例外処理プログラム114を実行させる。
このとき、中央演算装置101は、例外を発生した命令コード301の仮想アドレスa0をタスクAの仮想アドレス空間であるユーザ空間108にあるスタックにPush操作で格納する。このスタックはスタックポインタ302が指示している。Push操作で格納した結果、ここでは、スタックポインタ302が指示するアドレス303に仮想アドレスa0が格納される。併せて、タスク切替えプログラム112により中央演算装置101は、カーネルタスクからタスクAへ切替える以外の、他のユーザタスクへの切り替えを停止する。
【0031】
図4は、例外処理プログラム114を実行している中央演算装置101の動作を説明するフローチャートである。例外処理プログラム114を実行すると中央演算装置101は、まずステップS401で、スタックから仮想アドレスa0をPop操作で取得する。次にステップS402で、中央演算装置101は、取得した仮想アドレスa0が指示すアドレスから、例外を発生した命令コード301を読出す。次にステップS403で、中央演算装置101は、例外を発生した命令コード301の仮想アドレスa0、およびその仮想アドレスa0から読み出した命令コード301を、デバッグ作業の際に利用可能なように、カーネル空間内の特定の領域に保存しておく。次にステップS404で、中央演算装置101は、例外を発生した命令コード301の仮想アドレスa0にブレーク命令を書き込む。この例外が発生した命令コード301の仮想アドレスa0は、この発生した例外により起動される例外処理(例外処理プログラム114)を終了して、例外発生時に実行中だったタスクに復帰したときに、中央演算装置101が実行する命令が格納されているアドレスである。
【0032】
次に、ステップS405で、中央演算装置101は、タスクAのユーザ空間108にあるスタックに、ユーザタスク内ページイン実行プログラム115を転送する。転送元のユーザタスク内ページイン実行プログラム115はカーネル空間107上に格納されている。中央演算装置101は、ユーザタスク内ページイン実行プログラム115自体をPush操作でスタックに格納することで、転送を行う。この転送の後にステップS406で、中央演算装置101は、ステップS403にてカーネル空間内の特定の領域に保存しておいた例外を発生した命令コード301の仮想アドレスa0を、スタックにPush操作で格納する。
【0033】
図5(a)〜(c)は、上述のステップS405のユーザタスク内ページイン実行プログラム115を転送する際の、スタックの状態変化を示したものである。図5(a)は、例外処理プログラム114が動作を開始した時点でのスタックの状態を表している。ここで、タスクAはページf206にスタックを設定している。よってスタックポインタ504は、ページf206内の仮想アドレス505を指示しており、命令コード301を実行した際に、命令コード301がある仮想アドレスa0の値がスタックに格納されている。図5(b)は、ステップS401の処理を実行した時点でのスタックの状態を表している。命令コード301がある仮想アドレスa0の値がスタックから取り出され、スタックポインタ506が指示すアドレスもPop操作により仮想アドレスa0を取り出した分だけ変化している。
【0034】
図5(c)は、ステップS406の処理を実行した時点でのスタックの状態を表している。ステップS405の処理により、カーネル空間107上に格納されているユーザタスク内ページイン実行プログラム115は、スタックに格納され、ユーザタスク内ページイン実行プログラム509となる。そしてステップS406の処理により、カーネル空間107内の特定の領域に保存しておいた例外を発生した命令コード301の仮想アドレスa0が、仮想アドレス508に格納されている。これらの処理に伴い、スタックポインタ507が指示するアドレスは仮想アドレス508に変化している。
【0035】
図4に戻り、ステップS406の次にステップS407で、中央演算装置101は、タスクAのユーザ空間108にあるユーザタスク内ページイン実行プログラム509の処理開始アドレスへ分岐を行う。処理開始アドレスは、スタックの位置を示すスタックポインタ507が指示するアドレスから求める。この分岐は、カーネル空間107からタスクAのユーザ空間108へ、処理が移行するものである。よって、中央演算装置101は、タスク切替えプログラム112によってカーネルタスクからタスクAに切替をおこなう。その後、タスクAのユーザ空間108にあるユーザタスク内ページイン実行プログラム509を実行する。
【0036】
図6は、ユーザタスク内ページイン実行プログラム509を実行している中央演算装置101の動作を説明するフローチャートである。ユーザタスク内ページイン実行プログラム509を実行すると中央演算装置101は、まずステップS601で、ユーザ空間108の先頭アドレスを、プログラム内部の変数Aに設定する。次にステップS602で、中央演算装置101は、ユーザ空間108が含む全てのページの個数を、プログラム内部の変数Cに設定する。次にステップS603で、中央演算装置101は、変数Aの示すアドレスの内容を読み込む。次にステップS604で、中央演算装置101は、変数Aの値を1ページのサイズ分だけ増加する。次にステップS605で、中央演算装置101は、変数Cの値を、1減ずる。次にステップS606で、中央演算装置101は、変数Cの値が0であるか否かを判定し、0でなければ、ステップS603へ戻る。また、ステップS606の判定で、変数Cの値が0ならば、ステップS607へ進む。
【0037】
このステップS603〜S606の処理を繰り返すことにより、ユーザタスク内ページイン実行プログラム509は、タスクAのユーザ空間108の全部のページについて、その個々のページの先頭アドレスの読出しをおこなう。その読出しを行った先頭アドレスのページが物理メモリ103に割り当てられている場合は、そのアドレスの内容を読み取るだけだが、そのページが物理メモリ103に割り当てられていない場合は、ページインが発生する。このページインの発生により、ページインプログラム113を実行する中央演算装置101は、メモリ管理装置104に、その当該ページに物理メモリ103のいずれかのページを割り当てさせ、さらに外部記憶装置105のスワップ領域110に格納されている当該ページの内容を、当該ページに割り当てた物理メモリ103上のページに転送する。転送した後、その当該ページの先頭アドレスの内容を読み取るが、この処理は、メモリ内容の読出し自体が目的ではなく、この処理によって、タスクAのユーザ空間108の全部のページについて、物理メモリ103に割り当てられた状態にすることを目的としている。
【0038】
最後にステップS607で、中央演算装置101は、「スタックポインタを指定サイズだけずらした後、サブルーチンから復帰する命令」(以下、「リターン命令」という)を実行する。このリターン命令に指定する、スタックポインタをずらすサイズは、ユーザタスク内ページイン実行プログラム509のサイズを元に設定する。すなわち、このリターン命令を実行後に、スタックにPush操作で格納されていたユーザタスク内ページイン実行プログラム509が、スタックから全て取り除かれるようなサイズを設定する。このリターン命令として、例えばCPUがインテル社のIA32の場合は、「RET命令」を用いることが出来る。具体的には、サブルーチンから復帰するアドレス(仮想アドレスa0)をPop操作で取り出した後、Pop操作と同じ方向にスタックポインタをずらすサイズを、RET命令のオペランド(引数)に指定する。なお、中央演算装置101が、他のCPUであっても(例えばMIPS(登録商標)であれば「JALR命令」を用いて)同様の処理を行うことが出来る。
【0039】
更に、中央演算装置101は、このリターン命令を実行すると、スタックにPush操作で格納されていた仮想アドレスa0に、処理が移行する。その仮想アドレスa0は、先に例外を発生した命令コード301のアドレスである。そして、その仮想アドレスa0の内容は、ステップS404にて既にブレーク命令で置き換えられているため、中央演算装置101はブレーク命令を実行し、該ブレーク命令の実行を検知したデバッガ装置102は、中央演算装置101を停止させる。
【0040】
図7は、リターン命令702を実行する際の、スタック上の状態を表す。図7(a)は、リターン命令702の実行前のユーザ空間108の状態であり、図7(b)は、リターン命令702の実行後のユーザ空間108の状態である。中央演算装置101は、リターン命令702を実行すると、まずスタックポインタ507が指示する仮想アドレス508からアドレスa0を取出す。続けて、中央演算装置101は、リターン命令702に指定した、スタックポインタをずらすサイズに基づき、スタックポインタの指示するアドレスをスタックポインタ703の位置まで移動する。その後、中央演算装置101は、さきに取り出した仮想アドレスa0へ処理が移り、そこにあるブレーク命令705を実行する。中央演算装置101がブレーク命令705を実行すると、デバッガ装置102が起動される。その後、利用者はデバッガ装置102を用いて、例外発生の原因調査をおこなうことができる。
【0041】
このように、不正な処理による例外が発生したときに、中央演算装置101は、ユーザタスク内ページイン実行プログラム115を実行して、該例外が発生したときに実行中だったタスクが使用するメモリをページインさせてから、デバッガ装置102を起動するので、タスク切り替え時のオーバヘッドを起こさずに、かつ、デバッガ装置102にてデバッグ作業を行う際に、作業者が予期しないページインの発生を防ぐことができる。
【0042】
なお、デバッガ装置102には、周辺機器として入力装置、表示装置等(いずれも図示せず)が接続されるものとする。ここで、入力装置とはキーボード、マウス等の入力デバイスのことをいう。表示装置とはCRT(Cathode Ray Tube)や液晶表示装置等のことをいう。
また、本実施形態では、本発明を演算装置100に適用する例を挙げて説明したが、携帯電話、テレビ受像装置、テレビ録画装置といった家電製品など、コンピュータを具備するその他の装置に適用してもよい。
【0043】
また、本実施形態において、ユーザ空間108に転送されたユーザタスク内ページイン実行プログラム509を中央演算装置101が実行する際に、変数Cにはユーザ空間の全ページ数を設定し、中央演算装置101は全ページをページインするとして説明したが、ユーザ空間108よりも物理メモリ103の方が小さい場合などには、タスクAが使用するページのみをページインするようにしてもよい。このとき、タスクAが使用するページは連続しているとは限らず、プログラムの格納領域、スタックの領域、変数領域など、複数の領域に分かれていることがある。そのような場合には、ユーザタスク内ページイン実行プログラム115は、中央演算装置101に、各領域の先頭アドレスとページ数とを用いて各領域をページインさせる。
なお、図1におけるタスク切替えプログラム112、ページインプログラム113、例外処理プログラム114、ユーザタスク内ページイン実行プログラム115各々を中央演算装置101が実行することにより行われる処理は、専用のハードウェアにより実現されるものであってもよい。
【0044】
また、本実施形態において、中央演算装置101が、例えば、周辺機器からの割り込みなどの不正な処理以外の例外が発生したときにも、例外処理プログラム114を実行するようになっている場合は、例外処理プログラム114を実行することにより中央演算装置101が、例外の発生要因がデバッガ装置102を起動すべき発生要因であるか否かを判定し、起動すべき発生要因のときのみ、本実施形態における例外処理プログラム114の処理を行うようにしてもよい。
また、本実施形態において、デバッガ装置102を起動するのは、不正な処理が起きた場合としたが、プログラムの特定の箇所でデバッガ装置102を起動させたいときには、該当箇所にソフトウェア割込み命令を書いておき、該ソフトウェア割込み命令を実行した中央演算装置101が、例外処理プログラム114を実行するようにしておいてもよい。
【0045】
以上、この発明の実施形態を、図面を参照して詳述してきたが、具体的な構成はこの実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の設計変更等も含まれる。
【産業上の利用可能性】
【0046】
本発明は、携帯電話、テレビ受像装置、テレビ録画装置などの家電製品に用いて好適であるが、これらに限らない。
【図面の簡単な説明】
【0047】
【図1】この発明の一実施形態による演算装置100の構成を示す概略ブロック図である。
【図2】同実施形態におけるタスクAを実行中のユーザ空間108の状態例を示す図である。
【図3】同実施形態における仮想アドレスa0の命令コード301を実行した際に例外が発生した状態を表す図である。
【図4】同実施形態における例外処理プログラム114を実行している中央演算装置101の動作を説明するフローチャートである。
【図5】同実施形態におけるユーザタスク内ページイン実行プログラム115を転送する際の、スタックの状態変化を示したものである。
【図6】同実施形態におけるユーザタスク内ページイン実行プログラム509を実行している中央演算装置101の動作を説明するフローチャートである。
【図7】同実施形態におけるリターン命令702を実行する際の、スタック上の状態を表す図である。
【符号の説明】
【0048】
100…演算装置
101…中央演算装置
102…デバッガ装置
103…物理メモリ
104…メモリ管理装置
105…外部記憶装置
106…仮想アドレス空間
107…カーネル空間
108…ユーザ空間(タスクA)
109…ユーザ空間(タスクB)
110…スワップ領域
111…物理アドレス空間
112…タスク切替えプログラム
113…ページインプログラム
114…例外処理プログラム
115…ユーザタスク内ページイン実行プログラム

【特許請求の範囲】
【請求項1】
複数のタスクを各々の仮想アドレス空間にて実行させるマルチタスク処理を実行するコンピュータを、
例外事象が発生すると起動され、前記コンピュータに接続されたデバッガ装置を起動する命令を、前記実行中のタスクに例外処理から復帰したときに実行される命令が格納されているメモリに格納するとともに、仮想アドレス空間に物理メモリを割り当てるページイン処理部に前記例外事象の発生時に実行中のタスクの仮想アドレス空間のうち少なくとも前記実行中のタスクが使用する仮想アドレスに物理メモリを割り当てさせる例外処理部
として機能させるためのプログラム。
【請求項2】
前記例外処理部は、起動される要因となった前記例外事象が予め決められた所定の例外事象であるか否かを判定し、前記所定の例外事象であると判定したときに、前記デバッガ装置を起動する命令を、前記実行中のタスクに例外処理から復帰したときに実行される命令が格納されているメモリに格納するとともに、前記ページイン処理部に前記実行中のタスクの仮想アドレス空間のうち少なくとも該タスクが使用する仮想アドレスに物理メモリを割り当てさせること
を特徴とする請求項1に記載のプログラム。
【請求項3】
前記ページイン処理部は、コンピュータを当該ページイン処理部として機能させるプログラムが実行時に配置されている仮想アドレス空間の指定された領域に、物理メモリを割り当て、
前記例外処理部は、前記コンピュータをページイン処理部として機能させるプログラムを、前記例外事象の発生時に実行中のタスクの仮想アドレス空間に配置し、該タスクが使用する仮想アドレス空間の領域を指定して該配置したプログラムを実行させること
を特徴とする請求項1または請求項2に記載のプログラム。
【請求項4】
複数のタスクを各々の仮想アドレス空間にて実行させるマルチタスク処理を実行するコンピュータにおいて、例外事象が発生されると起動される例外処理部の例外処理方法であって、
前記例外処理部が、前記コンピュータに接続されたデバッガ装置を起動する命令を、前記実行中のタスクに例外処理から復帰したときに実行される命令が格納されているメモリに格納する第1の過程と、
前記例外処理部が、仮想アドレス空間に物理メモリを割り当てるページイン処理部に、前記例外事象の発生時に実行中のタスクの仮想アドレス空間のうち、少なくとも前記タスクが使用する仮想アドレスに物理メモリを割り当てさせる第2の過程と
を備えることを特徴とする例外処理方法。
【請求項5】
複数のタスクを各々の仮想アドレス空間にて実行させるマルチタスク処理を実行するコンピュータにおいて、
仮想アドレス空間に物理メモリを割り当てるページイン処理部と、
例外事象が発生すると起動され、前記コンピュータに接続されたデバッガ装置を起動する命令を、前記実行中のタスクに例外処理から復帰したときに実行される命令が格納されているメモリに格納するとともに、前記ページイン処理部に前記例外事象の発生時に実行中のタスクの仮想アドレス空間のうち少なくとも前記実行中のタスクが使用する仮想アドレスに物理メモリを割り当てさせる例外処理部と
を具備することを特徴とするコンピュータ。
【請求項6】
複数のタスクを各々の仮想アドレス空間にて実行させるマルチタスク処理を実行するコンピュータを具備する携帯電話において、
仮想アドレス空間に物理メモリを割り当てるページイン処理部と、
例外事象が発生すると起動され、当該携帯電話に接続されたデバッガ装置を起動する命令を、前記実行中のタスクに例外処理から復帰したときに実行される命令が格納されているメモリに格納するとともに、前記ページイン処理部に前記例外事象の発生時に実行中のタスクの仮想アドレス空間のうち少なくとも前記実行中のタスクが使用する仮想アドレスに物理メモリを割り当てさせる例外処理部と
を具備することを特徴とする携帯電話。
【請求項7】
複数のタスクを各々の仮想アドレス空間にて実行させるマルチタスク処理を実行するコンピュータを具備するテレビ受像装置において、
仮想アドレス空間に物理メモリを割り当てるページイン処理部と、
例外事象が発生すると起動され、当該テレビ受像装置に接続されたデバッガ装置を起動する命令を、前記実行中のタスクに例外処理から復帰したときに実行される命令が格納されているメモリに格納するとともに、前記ページイン処理部に前記例外事象の発生時に実行中のタスクの仮想アドレス空間のうち少なくとも前記実行中のタスクが使用する仮想アドレスに物理メモリを割り当てさせる例外処理部と
を具備することを特徴とするテレビ受像装置。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate