(57)【要約】【課題】デバッグ用資源を抑制し、複数の仮想プロセッサのデバッグ処理を略同時に行う仮想マルチプロセッサシステム、その制御プログラム及び仮想マルチプロセッサの制御方法を提供する。【解決手段】仮想マルチプロセッサシステム２００は、複数の仮想プロセッサが時分割で割り当てられる物理プロセッサ２１０、仮想プロセッサにより共通に利用されるレジスタ２２０を有する。各仮想プロセッサは、ユーザプログラムを実行可能なユーザモード、ユーザプログラムの処理を行わない第１のデバッグモード、デバッグ処理を実行可能な第２のデバッグモードを有し、第１のトリガに応じ、ユーザモードから第１のデバッグモードに遷移する。第２のデバッグモードの仮想プロセッサの数がレジスタ２２０の数を超えない場合に有効化される第２のトリガに応じ、第１のデバッグモードから第２のデバッグモードに遷移し、仮想プロセッサの状態情報をレジスタ２２０に格納する。【選択図】図１
2013254318.tif 000002
【特許請求の範囲】
【請求項１】
複数の仮想プロセッサが時分割で割り当てられ、前記仮想プロセッサの処理を実行する物理プロセッサと、
前記複数の仮想プロセッサによって共通に利用されるレジスタとを有し、
各々の前記複数の仮想プロセッサは、
ユーザプログラムを実行可能なユーザモードと、ユーザプログラムの処理を行わない第１のデバッグモードと、デバッグ処理を実行可能な第２のデバッグモードとを有し、
第１のトリガの入力に応じて、前記ユーザモードから、前記第１のデバッグモードに遷移し、
前記第２のデバッグモードの前記仮想プロセッサの数が前記レジスタの数を超えない場合に有効化される第２のトリガの入力に応じて、前記第１のデバッグモードから、前記第２のデバッグモードに遷移し、前記仮想プロセッサの状態を示す状態情報を前記レジスタに格納する
仮想マルチプロセッサシステム。
【請求項２】
前記仮想プロセッサは、前記デバッグ処理の終了に応じ、前記レジスタから前記状態情報を読み出すとともに、前記第２のデバッグモードから、前記第１のデバッグモードに遷移する
請求項１記載の仮想マルチプロセッサシステム。
【請求項３】
前記仮想プロセッサは、第３のトリガの入力に応じ、前記第１のデバッグモードから、前記ユーザモードに遷移する
請求項１又は２記載の仮想マルチプロセッサシステム。
【請求項４】
前記第１のトリガは、前記仮想プロセッサが実行するユーザプログラムに含まれる第１の命令、又は前記仮想プロセッサに対する第１の端子入力である
請求項１乃至３いずれか１項記載の仮想マルチプロセッサシステム。
【請求項５】
前記第２のトリガは、前記仮想プロセッサに対する第２の端子入力である
請求項１乃至４いずれか１項記載の仮想マルチプロセッサシステム。
【請求項６】
前記第３のトリガは、前記仮想プロセッサに対する第３の端子入力である
請求項１乃至５いずれか１項記載の仮想マルチプロセッサシステム。
【請求項７】
前記第１のトリガとしての第１の端子入力、前記第２のトリガとしての第２の端子入力、及び前記仮想プロセッサを前記第１のデバッグモードから前記ユーザモードに遷移させる第３のトリガとして第３の端子入力の少なくとも１つを有効化するツール部をさらに含む
請求項１乃至６いずれか１項記載の仮想マルチプロセッサシステム。
【請求項８】
前記ツール部は、前記第２のデバッグモードに遷移する前記仮想プロセッサが、前記レジスタの数を超えないよう制御する
請求項１乃至７いずれか１項記載の仮想マルチプロセッサシステム。
【請求項９】
複数の仮想プロセッサが有する複数のスレッドが時分割で割り当てられ、前記スレッドの処理を実行する物理プロセッサと、
前記複数のスレッドによって共通に利用されるレジスタとを有し、
各々の前記複数のスレッドは、
ユーザプログラムを実行可能なユーザモードと、ユーザプログラムの処理を行わない第１のデバッグモードと、デバッグ処理を実行可能な第２のデバッグモードとを有し、
第１のトリガの入力に応じて、前記スレッドと同じ前記仮想プロセッサに属するすべてのスレッドが、前記ユーザモードから、前記第１のデバッグモードに遷移し、
前記第２のデバッグモードの前記スレッドの数が前記レジスタの数を超えない場合に有効化される第２のトリガの入力に応じて、前記スレッドそれぞれが、前記第１のデバッグモードから、前記第２のデバッグモードに遷移し、前記スレッドの状態を示す状態情報を前記レジスタに格納する
仮想マルチプロセッサシステム。
【請求項１０】
物理プロセッサに時分割で割り当てられて処理を行う複数の仮想プロセッサの各々が、第１のトリガの入力に応じ、ユーザプログラムを実行可能なユーザモードから、ユーザプログラムの処理を行わない第１のデバッグモードに遷移するステップと、
前記複数の仮想プロセッサの各々が、第２のトリガの入力に応じ、前記第１のデバッグモードから、デバッグ処理を実行可能な第２のデバッグモードに遷移するとともに、前記仮想プロセッサの状態を示す状態情報を、前記複数の仮想プロセッサによって共通に利用されるレジスタに格納するステップとを有する
仮想マルチプロセッサの制御方法。
【請求項１１】
物理プロセッサに時分割で割り当てられて処理を行う複数の仮想プロセッサに属する複数のスレッドの全てが、第１のトリガの入力に応じ、ユーザプログラムを実行可能なユーザモードから、ユーザプログラムの処理を行わない第１のデバッグモードに遷移するステップと、
前記複数のスレッドそれぞれが、第２のトリガの入力に応じ、前記第１のデバッグモードから、デバッグ処理を実行可能な第２のデバッグモードに遷移するとともに、前記スレッドの状態を示す状態情報を、前記スレッドによって共通に利用されるレジスタに格納するステップとを有する
仮想マルチプロセッサの制御方法。
【請求項１２】
コンピュータに、
物理プロセッサに時分割で割り当てられて処理を行う複数の仮想プロセッサの各々が、第１のトリガの入力に応じ、ユーザプログラムを実行可能なユーザモードから、ユーザプログラムの処理を行わない第１のデバッグモードに遷移するステップと、
前記複数の仮想プロセッサの各々が、第２のトリガの入力に応じ、前記第１のデバッグモードから、デバッグ処理を実行可能な第２のデバッグモードに遷移するとともに、前記仮想プロセッサの状態を示す状態情報を、前記複数の仮想プロセッサによって共通に利用されるレジスタに格納するステップとを実行させる
仮想マルチプロセッサの制御プログラム。
【請求項１３】
コンピュータに、
物理プロセッサに時分割で割り当てられて処理を行う複数の仮想プロセッサに属する複数のスレッドの全てが、第１のトリガの入力に応じ、ユーザプログラムを実行可能なユーザモードから、ユーザプログラムの処理を行わない第１のデバッグモードに遷移するステップと、
前記複数のスレッドそれぞれが、第２のトリガの入力に応じ、前記第１のデバッグモードから、デバッグ処理を実行可能な第２のデバッグモードに遷移するとともに、前記スレッドの状態を示す状態情報を、前記スレッドによって共通に利用されるレジスタに格納するステップとを実行させる
仮想マルチプロセッサの制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、仮想マルチプロセッサシステム、仮想マルチプロセッサの制御方法及び仮想マルチプロセッサの制御プログラムに関し、例えばデバッグ用資源を抑制しつつ、複数の仮想プロセッサのデバッグ処理を略同時に行う技術に関する。
【背景技術】
【０００２】
従来、仮想マルチプロセッサのデバッグ制御においては、複数の仮想プロセッサ毎にデバッグ用資源を設けることが一般的であった。したがって、仮想プロセッサの数が増えると、それに応じデバッグ用資源も増やす必要があり、そのコストが問題となっていた。
【０００３】
かかる問題を解決するため、特許文献１は、仮想プロセッサが物理プロセッサに割り当てられていないときにその仮想プロセッサの状態情報を保持する資源を、複数の仮想プロセッサ間で共用する方法を開示している。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００９−１７５９６０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
特許文献１記載の方法では、デバック処理を実行できる仮想プロセッサが１つに限られるという問題があった。
【０００６】
その他の課題と新規な特徴は、本明細書の記述及び添付図面から明らかになるであろう。
【課題を解決するための手段】
【０００７】
一実施の形態によれば、仮想マルチプロセッサシステムは、複数の仮想プロセッサが時分割で割り当てられ、前記仮想プロセッサの処理を実行する物理プロセッサと、前記複数の仮想プロセッサによって共通に利用されるレジスタとを有し、各々の前記複数の仮想プロセッサは、ユーザプログラムを実行可能なユーザモードと、ユーザプログラムの処理を行わない第１のデバッグモードと、デバッグ処理を実行可能な第２のデバッグモードとを有し、第１のトリガの入力に応じて、前記ユーザモードから、前記第１のデバッグモードに遷移し、前記第２のデバッグモードの前記仮想プロセッサの数が前記レジスタの数を超えない場合に有効化される第２のトリガの入力に応じて、前記第１のデバッグモードから、前記第２のデバッグモードに遷移し、前記仮想プロセッサの状態を示す状態情報を前記レジスタに格納するものである。
【０００８】
他の実施の形態によれば、仮想マルチプロセッサシステムは、複数の仮想プロセッサが有する複数のスレッドが時分割で割り当てられ、前記スレッドの処理を実行する物理プロセッサと、前記複数のスレッドによって共通に利用されるレジスタとを有し、各々の前記複数のスレッドは、ユーザプログラムを実行可能なユーザモードと、ユーザプログラムの処理を行わない第１のデバッグモードと、デバッグ処理を実行可能な第２のデバッグモードとを有し、第１のトリガの入力に応じて、前記スレッドと同じ前記仮想プロセッサに属するすべてのスレッドが、前記ユーザモードから、前記第１のデバッグモードに遷移し、前記第２のデバッグモードの前記スレッドの数が前記レジスタの数を超えない場合に有効化される第２のトリガの入力に応じて、前記スレッドそれぞれが、前記第１のデバッグモードから、前記第２のデバッグモードに遷移し、前記スレッドの状態を示す状態情報を前記レジスタに格納するものである。
【０００９】
他の実施の形態によれば、仮想マルチプロセッサの制御方法は、物理プロセッサに時分割で割り当てられて処理を行う複数の仮想プロセッサの各々が、第１のトリガの入力に応じ、ユーザプログラムを実行可能なユーザモードから、ユーザプログラムの処理を行わない第１のデバッグモードに遷移するステップと、前記複数の仮想プロセッサの各々が、第２のトリガの入力に応じ、前記第１のデバッグモードから、デバッグ処理を実行可能な第２のデバッグモードに遷移するとともに、前記仮想プロセッサの状態を示す状態情報を、前記複数の仮想プロセッサによって共通に利用されるレジスタに格納するステップとを有するものである。
【００１０】
他の実施の形態によれば、仮想マルチプロセッサの制御方法は、物理プロセッサに時分割で割り当てられて処理を行う複数の仮想プロセッサに属する複数のスレッドの全てが、第１のトリガの入力に応じ、ユーザプログラムを実行可能なユーザモードから、ユーザプログラムの処理を行わない第１のデバッグモードに遷移するステップと、前記複数のスレッドそれぞれが、第２のトリガの入力に応じ、前記第１のデバッグモードから、デバッグ処理を実行可能な第２のデバッグモードに遷移するとともに、前記スレッドの状態を示す状態情報を、前記スレッドによって共通に利用されるレジスタに格納するステップとを有するものである。
【００１１】
他の実施の形態によれば、仮想マルチプロセッサの制御プログラムは、コンピュータに、物理プロセッサに時分割で割り当てられて処理を行う複数の仮想プロセッサの各々が、第１のトリガの入力に応じ、ユーザプログラムを実行可能なユーザモードから、ユーザプログラムの処理を行わない第１のデバッグモードに遷移するステップと、前記複数の仮想プロセッサの各々が、第２のトリガの入力に応じ、前記第１のデバッグモードから、デバッグ処理を実行可能な第２のデバッグモードに遷移するとともに、前記仮想プロセッサの状態を示す状態情報を、前記複数の仮想プロセッサによって共通に利用されるレジスタに格納するステップとを実行させるものである。
【００１２】
他の実施の形態によれば、仮想マルチプロセッサの制御プログラムは、コンピュータに、物理プロセッサに時分割で割り当てられて処理を行う複数の仮想プロセッサに属する複数のスレッドの全てが、第１のトリガの入力に応じ、ユーザプログラムを実行可能なユーザモードから、ユーザプログラムの処理を行わない第１のデバッグモードに遷移するステップと、前記複数のスレッドそれぞれが、第２のトリガの入力に応じ、前記第１のデバッグモードから、デバッグ処理を実行可能な第２のデバッグモードに遷移するとともに、前記スレッドの状態を示す状態情報を、前記スレッドによって共通に利用されるレジスタに格納するステップとを実行させるものである。
【発明の効果】
【００１３】
前記一実施の形態によれば、デバッグ用資源を抑制しつつ、複数の仮想プロセッサのデバッグ処理を略同時に行うことができる仮想マルチプロセッサシステム、仮想マルチプロセッサの制御方法及び仮想マルチプロセッサの制御プログラムを提供することができる。
【図面の簡単な説明】
【００１４】
【図１】実施の形態１にかかる仮想マルチプロセッサシステム２００の構成を示す図である。
【図２】実施の形態１にかかる仮想マルチプロセッサシステム２００の構成を示す図である。
【図３】実施の形態１における仮想プロセッサの状態遷移を示す図である。
【図４】実施の形態１におけるＤＢ＿ＳＴＡＴレジスタの例を示す図である。
【図５】実施の形態１におけるＤＢＰＣレジスタの利用例を示す図である。
【図６】実施の形態１にかかる仮想マルチプロセッサシステム２００の処理を示す図である。
【図７】実施の形態１にかかる仮想マルチプロセッサシステム２００の処理を示す図である。
【図８】実施の形態１にかかる仮想マルチプロセッサシステム２００の処理を示す図である。
【図９】実施の形態１にかかる仮想マルチプロセッサシステム２００の処理を示す図である。
【図１０（ａ）】実施の形態１にかかる仮想マルチプロセッサシステム２００の処理を示す図である。
【図１０（ｂ）】実施の形態１にかかる仮想マルチプロセッサシステム２００の処理を示す図である。
【図１０（ｃ）】実施の形態１にかかる仮想マルチプロセッサシステム２００の処理を示す図である。
【図１１】実施の形態１にかかる仮想マルチプロセッサシステム２００の処理を示す図である。
【図１２】実施の形態１にかかる仮想マルチプロセッサシステム２００の処理を示す図である。
【図１３】実施の形態２にかかる仮想マルチプロセッサシステム３００の構成を示す図である。
【図１４】実施の形態２におけるスレッドの状態遷移を示す図である。
【図１５】実施の形態２におけるＤＢ＿ＳＴＡＴレジスタの例を示す図である。
【図１６】実施の形態２におけるＤＢＰＣレジスタの利用例を示す図である。
【図１７（ａ）】実施の形態２にかかる仮想マルチプロセッサシステム３００の処理を示す図である。
【図１７（ｂ）】実施の形態２にかかる仮想マルチプロセッサシステム３００の処理を示す図である。
【図１８】実施の形態２にかかる仮想マルチプロセッサシステム３００の処理を示す図である。
【図１９】実施の形態２にかかる仮想マルチプロセッサシステム３００の処理を示す図である。
【図２０】実施の形態２にかかる仮想マルチプロセッサシステム３００の処理を示す図である。
【図２１】実施の形態２にかかる仮想マルチプロセッサシステム３００の処理を示す図である。
【図２２（ａ）】実施の形態２にかかる仮想マルチプロセッサシステム３００の処理を示す図である。
【図２２（ｂ）】実施の形態２にかかる仮想マルチプロセッサシステム３００の処理を示す図である。
【図２２（ｃ）】実施の形態２にかかる仮想マルチプロセッサシステム３００の処理を示す図である。
【図２３】実施の形態２にかかる仮想マルチプロセッサシステム３００の処理を示す図である。
【図２４】実施の形態２にかかる仮想マルチプロセッサシステム３００の処理を示す図である。
【図２５】従来の仮想マルチプロセッサシステムの図である。
【図２６】従来の仮想マルチプロセッサシステムの図である。
【発明を実施するための形態】
【００１５】
はじめに、本発明の実施の形態の理解を容易にするため、図２５及び図２６を用いて、特許文献１記載の発明における上述の問題の発生機序について説明する。
【００１６】
図２５に、特許文献１記載の仮想マルチプロセッサシステムの構成を示す。
【００１７】
物理プロセッサ１００は、通常処理又は割込み処理を実行する実際に存在するプロセッサである。論理プロセッサ１１０乃至１１３はそれぞれ、物理プロセッサ１００上で通常処理又は割込み処理が実行されることにより実現される仮想的なプロセッサである。保管部１３０乃至１３３はそれぞれ、論理プロセッサ１１０乃至１１３の処理が物理プロセッサ１００上で実行されていない間、それらの論理プロセッサの状態を保持するための記憶装置である。例えば、保管部１３０は論理プロセッサ１１０の状態を保持する。ディスパッチ部１２０は、物理プロセッサ１００への論理プロセッサ１１０乃至１１３の割り当て処理を行なう処理部であり、スケジュール部１２１と、コンテキストスイッチ部１２２とを含む。スケジュール部１２１は、現在物理プロセッサ１００に割り当てられていない論理プロセッサ１１１乃至１１３の中から物理プロセッサ１００に対して次に割り当てる論理プロセッサを決定する処理部である。
【００１８】
図２６に、物理プロセッサ１００上で論理プロセッサ１１０が実行中にデバッグ割込み要求信号１４１が発生した場合の動作を示す。
【００１９】
割込み部１４０が、デバッグ割込み要求信号１４１を論理プロセッサ１１０に対して発生させる。これを物理プロセッサ１００が受理する。物理プロセッサ１００がデバッグ割込み要求信号１４１を受理した時点で、物理プロセッサ１００は、デバッグ割込み受理通知１０１をスケジュール部１２１へ出力する。スケジュール部１２１は、デバッグ割込み受理通知１０１を受けると、コンテキストスイッチ部１２２に対して、入れ替え動作指示１２５を発行し、セーブ部１２３を起動し、プロセッサ状態１０２を保管部１３０に退避する。物理プロセッサ１００上の論理プロセッサ１１０は、デバッグ割込み要求信号１４１に対する割込み処理の実行を継続する。また、これと並行して、スケジュール部１２１は、コンテキストスイッチ部１２２に対する入れ替え動作指示１２５の発行が禁止された状態へ遷移する。デバッグ割込み要求信号１４１に対する割込み処理が完了した事を示すデバッグ割込み処理からの復帰指示１０４が、物理プロセッサ１００（論理プロセッサ１１０）からスケジュール部１２１に対して発行されると、入れ替え動作指示１２５が発行される。
【００２０】
ここで、デバッグ対象となる論理プロセッサ１１０のプロセッサ状態１０２を保管部１３０に退避すると、ディスパッチ部１２０が論理プロセッサの切替えを禁止し、保管部１３０の上書きが発生しないようにする。そのため、この間は物理プロセッサ１００が論理プロセッサ１１０のデバッグ処理に占有されてしまい、他の論理プロセッサが動作できない。すなわち、複数の論理プロセッサを同時にデバッグすることができないという上述の問題が発生する。
【００２１】
以下、本発明を適用した具体的な実施の形態について、図面を参照しながら詳細に説明する。
【００２２】
＜実施の形態１＞
図１を用いて、本発明の実施の形態１にかかる仮想マルチプロセッサシステム２００の構成について説明する。
【００２３】
仮想マルチプロセッサシステム２００は、少なくとも物理プロセッサ２１０、レジスタ２２０を含む。物理プロセッサ２１０は、制御プログラムに基づいて所定の処理を実行する演算装置であり、本実施の形態では複数の仮想プロセッサの処理を時分割で実行する。レジスタ２２０は、複数の仮想プロセッサによって共用される記憶装置であって、本実施の形態では仮想プロセッサの状態を示す状態情報を格納する。
【００２４】
仮想プロセッサは、所定のトリガに応じて、ユーザプログラムの処理を行わない第１のデバッグモード及びデバッグ処理を実行可能な第２のデバッグモードに遷移するとともに、第２のデバッグモードに遷移する際はその仮想プロセッサの状態情報をレジスタ２２０に格納する処理を行う。
【００２５】
つぎに、図２乃至図５を用いて、仮想マルチプロセッサシステム２００のより具体的な実装例と、その動作の概念とを説明する。
【００２６】
本実施の形態では、４つの仮想プロセッサＶＣＰＵｘ（ｘは０乃至３）が、物理プロセッサ２１０上で動作するものとする。具体的には、スケジューラ／ティスパッチャ２３０が、スケジュールに従って、仮想プロセッサＶＣＰＵｘを物理プロセッサ２１０に割り当てる。物理ＣＰＵ２１０は、スケジュールが割り当てられている１以上の仮想プロセッサＶＣＰＵｘの処理を時分割で並行して実行する。
【００２７】
仮想プロセッサＶＣＰＵｘは、スケジュールが割り当てられている間、つぎの３つの状態のいずれかにとどまるものとする。すなわち、ユーザプログラムを実行可能なＵＳＥＲｘ状態（ｘは０乃至３）、ユーザプログラムの実行を停止したＤＢＳｕｓｐｅｎｄｘ状態（ｘは０乃至３）、及びデバッグ処理のためのデバッグモニタプログラムを実行可能なＤＢｘ状態（ｘは０乃至３）である。
【００２８】
ＤＢ＿ＳＴＡＴレジスタ２６０は、仮想プロセッサＶＣＰＵｘそれぞれの現在の状態を示す情報を保持する。仮想プロセッサＶＣＰＵｘは、状態を遷移した際に、ＤＢ＿ＳＴＡＴレジスタ２６０の内容を更新する。
【００２９】
レジスタ２２０としてのＤＢＰＣレジスタ２２０は、ＤＢｘ状態に遷移した仮想プロセッサＶＣＰＵｘの遷移前の状態を示す状態情報としてのＰＣ値を保持する。仮想プロセッサＶＣＰＵｘは、ＤＢＳｕｓｐｅｎｄｘ状態からＤＢｘ状態に遷移する際に、自身のＰＣ値をＤＢＰＣレジスタ２２０に格納する。また、仮想プロセッサＶＣＰＵｘは、ＤＢｘ状態からＤＢＳｕｓｐｅｎｄｘ状態に遷移する際に、ＰＣ値をＤＢＰＣレジスタ２２０から取り出す。
【００３０】
ツール２４０は、ユーザの端末としてのＰＣ２５０が発行するコマンドに応じ、仮想プロセッサＶＣＰＵｘに対して、状態遷移のトリガとなる各種端子入力を有効化する等の処理を行う。ツール２４０は、ＰＣ２５０からのコマンド入力インタフェースとなるツールＩ／Ｆ２４１、コマンドを解析するＰＣコマンド解析部２４２、各種端子入力の有効化等を行うＣＰＵ制御部２４３、一時保管領域２４４、及びデバッグモニタプログラムの実行の際に利用されるＤＢ例外用メモリ２７０とのインタフェースとなるデバッグＩ／Ｆ２４５を有する。
【００３１】
図３に、仮想プロセッサＶＣＰＵｘが上記３つの状態をどのように遷移するかを示す。
【００３２】
仮想プロセッサＶＣＰＵｘは、実行開始直後はＵＳＥＲｘ状態となる。
【００３３】
仮想プロセッサＶＣＰＵｘは、ＤＢＳＵＳＰＲＱｘ（ｘは０乃至３）端子入力に応じ、ＵＳＥＲｘ状態からＤＢＳｕｓｐｅｎｄｘ状態に遷移する。ＤＢＳＵＳＰＲＱｘ端子入力は、ユーザの指示により入力される。より具体的には、ユーザの端末であるＰＣ２５０が発行するコマンドに応じ、ツール２４０がＤＢＳＵＳＰＲＱｘ端子をアクティブにする。
【００３４】
また、仮想プロセッサＶＣＰＵｘは、ユーザプログラムに含まれているＤＢＴＲＡＰ命令の実行に応じて、ＵＳＥＲｘ状態からＤＢＳｕｓｐｅｎｄｘ状態に遷移することもできる。
【００３５】
仮想プロセッサＶＣＰＵｘは、ＤＢＲＥＳＭＲＱｘ（ｘは０乃至３）端子入力に応じ、ＤＢＳｕｓｐｅｎｄｘ状態からＵＳＥＲｘ状態に遷移する。なお、ＤＢＲＥＳＭＲＱｘ端子入力が有効となったとき、ＤＢＩＮＴｘ（ｘは０乃至３）端子入力も有効である場合には、仮想プロセッサＶＣＰＵｘは、ＤＢＳｕｓｐｅｎｄｘ状態からＤＢｘ状態に遷移する。ＤＢＲＥＳＭＲＱｘ端子入力、ＤＢＩＮＴｘ端子入力は、ユーザの指示により入力される。より具体的には、ユーザの端末であるＰＣ２５０が発行するコマンドに応じ、ツール２４０がＤＢＲＥＳＭＲＱｘ端子、ＤＢＩＮＴｘ端子をアクティブにする。
【００３６】
仮想プロセッサＶＣＰＵｘは、デバッグモニタプログラムに含まれているＤＢＲＥＴ命令の実行に応じて、ＤＢｘ状態からＤＢＳｕｓｐｅｎｄｘ状態に遷移する。
【００３７】
図４に、ＤＢ＿ＳＴＡＴレジスタ２０６の一例を示す。
【００３８】
ＤＢ＿ＳＴＡＴレジスタ２０６は、仮想プロセッサＶＣＰＵｘそれぞれの現在の状態を表す情報として、ＤＢｘ（ｘは０乃至３）ビットと、ＤＢＳＳｘ（ｘは０乃至３）ビットとの組を保持する。本実施の形態では、ＤＢｘビット＝０かつＤＢＳＳｘビット＝０であるとき、仮想プロセッサＶＣＰＵｘがＵＳＥＲｘ状態にあることを意味する。ＤＢｘビット＝０かつＤＢＳＳｘビット＝１であるとき、仮想プロセッサＶＣＰＵｘがＤＢＳｕｓｐｅｎｄｘ状態にあることを意味する。ＤＢｘビット＝１かつＤＢＳＳｘビット＝０のとき、仮想プロセッサＶＣＰＵｘはＤＢｘ状態にあることを意味する。なお、ＤＢｘビット＝１かつＤＢＳＳｘビット＝１となることは想定されていない。
【００３９】
仮想プロセッサＶＣＰＵｘは、状態を遷移したとき、ＤＢｘビット及びＤＢＳＳｘビットを、遷移した状態を示す値に更新する。
【００４０】
図５に、仮想プロセッサＶＣＰＵｘがＤＢＰＣレジスタ２２０との間でＰＣ値の格納及び取得を行う様子を示す。
【００４１】
仮想プロセッサＶＣＰＵｘは、ＤＢＩＮＴｘ端子入力及びＤＢＲＥＳＭＲＱｘ端子入力に応じて、ＤＢＳｕｓｐｅｎｄｘ状態からＤＢｘ状態に遷移する。このとき、仮想プロセッサＶＣＰＵｘは、ＤＢＰＣレジスタ２２０に仮想プロセッサＶＣＰＵｘのＰＣ情報を格納し、保管しておく。ついで、仮想プロセッサＶＣＰＵｘは、ＤＢＲＥＴ命令の実行に応じて、ＤＢｘ状態からＤＢＳｕｓｐｅｎｄｘ状態に遷移する。このとき、仮想プロセッサＶＣＰＵｘは、ＤＢＰＣレジスタ２２０から仮想プロセッサＶＣＰＵｘのＰＣ情報を取り出す。
【００４２】
本実施の形態では、ツール２４０によって、ＤＢｘ状態に遷移する仮想プロセッサＶＣＰＵｘの数は、ＤＢＰＣレジスタ２２０の数を超えないよう制御される。本実施の形態ではＤＢＰＣレジスタ２２０は１つであるから、ＤＢｘ状態に遷移する仮想プロセッサＶＣＰＵｘの数は１を超えないように制御される。そのため、仮想プロセッサＶＣＰＵｘの数より少ないＤＢＰＣレジスタ２２０で、すべての仮想プロセッサＶＣＰＵｘのＰＣ値を保持することができる。換言すれば、複数の仮想プロセッサＶＣＰＵｘによって、ＤＢＰＣレジスタ２２０が共用される。
【００４３】
つづいて、図６乃至図１１のフローチャートを用いて、仮想マルチプロセッサシステム２００の動作について詳細に説明する。
【００４４】
まず、図６を用いて、仮想プロセッサＶＣＰＵｘがデバッグ処理を行うため状態遷移を行う際の動作を説明する。ここでは、仮想プロセッサＶＣＰＵ３を例として説明する。
【００４５】
Ｓ１０１：仮想プロセッサＶＣＰＵ３は、ＵＳＥＲ３状態でユーザプログラムを実行している。
【００４６】
Ｓ１０２：仮想プロセッサＶＣＰＵ３が、ユーザプログラムに含まれていたＤＢＴＲＡＰ命令を実行する。
【００４７】
Ｓ１０３：ユーザが、何らかの理由によりデバッグ処理の実行を所望したため、ユーザの端末であるＰＣ２５０を用いて、ツール２４０に対し、仮想プロセッサＶＣＰＵ３をＤＢＳｕｓｐｅｎｄ３状態にすべき旨のコマンドを送出する。これに応じ、ツール２４０は、ＤＢＳＵＳＰＲＱ３端子をアクティブにする。
【００４８】
仮想プロセッサＶＣＰＵ３は、このＤＢＳＵＳＰＲＱ３端子入力を検出する。
【００４９】
Ｓ１０４：Ｓ１０２又はＳ１０３に応じ、仮想プロセッサＶＣＰＵ３は、ＤＢＳｕｓｐｅｎｄ３状態に遷移する。
【００５０】
ここで、ツール２４０は、ＤＢＳＵＳＰＲＱ３端子をアクティブにした後、ＤＢ＿ＳＴＡＴレジスタ２６０を監視し、ＤＢ３＝０かつＤＢＳＳ３＝１となったこと、すなわち仮想プロセッサＶＣＰＵ３がＤＢＳｕｓｐｅｎｄ３状態に移行したことを確認する。ツール２４０は、このことが確認できたなら、ＤＢＩＮＴ３端子をアクティブにし、つづけてＤＢＲＥＳＭＲＱ３端子をアクティブにする。
【００５１】
Ｓ１０５乃至Ｓ１０７：仮想プロセッサＶＣＰＵ３は、ＤＢＲＥＳＭＲＱ３端子入力、及びＤＢＩＮＴ３端子入力を検出すると、ＤＢ３状態に遷移し、現在のＰＣ値をＤＢＰＣレジスタ２２０に保存する。この後、仮想プロセッサＶＣＰＵ３は、デバッグモニタプログラムを実行する。
【００５２】
Ｓ１０８：ユーザが、デバッグ処理を終了するため、デバッグモニタプログラムに含まれるＤＢＲＥＴ命令の実行を指示する。
【００５３】
仮想プロセッサＶＣＰＵ３は、この指示に応じてＤＢＲＥＴ命令を実行し、ＤＢＰＣレジスタ２２０からＰＣ値を取得し、ＤＢＳｕｓｐｅｎｄ３状態に遷移する。これにより、仮想プロセッサＶＣＰＵ３のＰＣ値は、ＤＢ３状態に遷移する直前のＰＣ値に復帰する。
【００５４】
Ｓ１０４乃至Ｓ１０６：ユーザが、ユーザプログラムの実行に戻るため、ツール２４０に対し、仮想プロセッサＶＣＰＵ３をＵＳＥＲ３状態にすべき旨のコマンドを送出する。これに応じ、ツール２４０は、ＤＢＲＥＳＭＲＱ３端子をアクティブにする。
【００５５】
仮想プロセッサＶＣＰＵ３は、このＤＢＲＥＳＭＲＱ３端子入力を検出し、ＵＳＥＲ３状態に遷移する。すなわち、仮想プロセッサＶＣＰＵ３は、上述の復帰したＰＣ値で示されるユーザプログラムの実行状態に復帰する。
【００５６】
ここで、仮想プロセッサＶＣＰＵ３がＤＢＳｕｓｐｅｎｄ３状態に遷移するトリガは、ＤＢＴＲＡＰ命令（Ｓ１０２）又はＤＢＳＵＳＰＲＱ３端子入力（Ｓ１０３）のいずれであってもよい（図７参照）。ＤＢＴＲＡＰ命令は、ユーザプログラムの特定の命令に同期してデバッグ処理を行いたい場合に利用できる。例えば、ユーザプログラムの命令ａを実行したタイミングで、特定の汎用レジスタ値を確認したい場合等である。これは、ユーザプログラムにおいて、特定の命令、例えば命令ａの次にＤＢＴＲＡＰ命令を記述することにより実現できる。一方、ＤＢＳＵＳＰＲＱｘ端子入力は、ユーザプログラムの特定の命令には非同期で、ユーザの指示によってユーザプログラムの実行を中断したい場合に利用できる。例えば、仮想プロセッサＶＣＰＵ３が暴走状態にあるなどの理由で、ユーザがデバッガのＳＴＯＰボタンを押した場合等である。
【００５７】
また、ここでは仮想プロセッサＶＣＰＵ３においてデバッグ処理を行う例を説明したが、同様の手順により、他の仮想プロセッサＶＣＰＵｘにおいてもデバッグ処理を行うことが可能である。
【００５８】
つぎに、図８乃至図１１を用いて、ツール２４０の動作について説明する。
【００５９】
図８のフローチャートは、ツール２４０が、ユーザの端末であるＰＣ２５０が発行するコマンドに応じて行う処理を示している。
【００６０】
Ｓ２０１：ツールＩ／Ｆ２４１が、ＰＣ２５０からコマンドを受信する。
【００６１】
Ｓ２０２：ＰＣコマンド解析部２４２は、受信したコマンドの内容に応じ、ツール２４０がどのような処理を実行すべきかを決定する。
【００６２】
本実施の形態では、ＰＣ２５０及びツール２４０は、少なくとも以下の９つのコマンドをサポートしているものとする。
コマンドＡ−２：仮想プロセッサＶＣＰＵ２のユーザプログラム実行を強制的に停止させる（ＤＢＳｕｓｐｅｎｄ２状態に遷移させる）。
コマンドＡ−３：仮想プロセッサＶＣＰＵ３のユーザプログラム実行を強制的に停止させる（ＤＢＳｕｓｐｅｎｄ３状態に遷移させる）。
コマンドＡ−２３：仮想プロセッサＶＣＰＵ２及びＶＣＰＵ３のユーザプログラム実行を略同時に強制的に停止させる（ＤＢＳｕｓｐｅｎｄ２状態及びＤＢＳｕｓｐｅｎｄ３状態に遷移させる）。
コマンドＢ−２：仮想プロセッサＶＣＰＵ２の汎用レジスタ：ＧＲをダンプする（読み出す）。
コマンドＢ−３：仮想プロセッサＶＣＰＵ３の汎用レジスタ：ＧＲをダンプする（読み出す）。
コマンドＢ−２３：仮想プロセッサＶＣＰＵ２及びＶＣＰＵ３の汎用レジスタ：ＧＲをダンプする（読み出す）。
コマンドＣ−２：仮想プロセッサＶＣＰＵ２でユーザプログラム実行を再開させる（ＵＳＥＲ２状態に復帰させる）。
コマンドＣ−３：仮想プロセッサＶＣＰＵ２でユーザプログラム実行を再開させる（ＵＳＥＲ３状態に復帰させる）。
コマンドＣ−２３：仮想プロセッサＶＣＰＵ２及びＶＣＰＵ３でユーザプログラム実行を再開させる（ＵＳＥＲ２状態及びＵＳＥＲ３状態に復帰させる）。
【００６３】
Ｓ２０３乃至Ｓ２１１：ＣＰＵ制御部２４３は、上述の９つのコマンドの内容に応じた後述の処理を実行する。
【００６４】
図９に、コマンドＡ−２（Ｓ２０３）、コマンドＡ−３（Ｓ２０４）、コマンドＡ−２３（Ｓ２０５）に対応する処理の内容を示す。
【００６５】
コマンドＡ−２に対する処理、すなわち仮想プロセッサＶＣＰＵ２のユーザプログラム実行を強制的に停止させる（ＤＢＳｕｓｐｅｎｄ２状態に遷移させる）処理（Ｓ２０３）：
【００６６】
Ｓ２０３１：ＣＰＵ制御部２４３は、ＤＢＳＵＳＰＲＱ２端子をアクティブにする。
【００６７】
Ｓ２０３２：ＣＰＵ制御部２４３は、ＤＢ＿ＳＴＡＴレジスタ２６０の仮想プロセッサＶＣＰＵ２に関する値、すなわちＤＢ２及びＤＢＳＳ２の値を一定時間毎に取得するなどして監視する。
【００６８】
Ｓ２０３３：ＤＢ＿ＳＴＡＴレジスタ２６０の値が、ＤＢ２＝０かつＤＢＳＳ２＝１となったことが確認できたならば、すなわち仮想プロセッサＶＣＰＵ２がＤＢＳｕｓｐｅｎｄ２状態になったことが確認できたならば、ＣＰＵ制御部２４３はＤＢＳＵＳＰＲＱ２端子入力を停止する。
【００６９】
コマンドＡ−３に対する処理、すなわち仮想プロセッサＶＣＰＵ３のユーザプログラム実行を強制的に停止させる（ＤＢＳｕｓｐｅｎｄ３状態に遷移させる）処理（Ｓ２０４）：
【００７０】
Ｓ２０４１：ＣＰＵ制御部２４３は、ＤＢＳＵＳＰＲＱ３端子をアクティブにする。
【００７１】
Ｓ２０４２：ＣＰＵ制御部２４３は、ＤＢ＿ＳＴＡＴレジスタ２６０の仮想プロセッサＶＣＰＵ３に関する値、すなわちＤＢ３及びＤＢＳＳ３の値を一定時間毎に取得するなどして監視する。
【００７２】
Ｓ２０４３：ＤＢ＿ＳＴＡＴレジスタ２６０の値が、ＤＢ３＝０かつＤＢＳＳ３＝１となったことが確認できたならば、すなわち仮想プロセッサＶＣＰＵ３がＤＢＳｕｓｐｅｎｄ３状態になったことが確認できたならば、ＣＰＵ制御部２４３はＤＢＳＵＳＰＲＱ３端子入力を停止する。
【００７３】
コマンドＡ−２３に対する処理、すなわち仮想プロセッサＶＣＰＵ２及びＶＣＰＵ３のユーザプログラム実行を略同時に強制的に停止させる（ＤＢＳｕｓｐｅｎｄ２状態及びＤＢＳｕｓｐｅｎｄ３状態に遷移させる）処理（Ｓ２０５）：
【００７４】
Ｓ２０５１：ＣＰＵ制御部２４３は、ＤＢＳＵＳＰＲＱ２端子及びＤＢＳＵＳＰＲＱ３端子をアクティブにする。
【００７５】
Ｓ２０５２：ＣＰＵ制御部２４３は、ＤＢ＿ＳＴＡＴレジスタ２６０の仮想プロセッサＶＣＰＵ２に関する値、すなわちＤＢ２及びＤＢＳＳ２の値と、仮想プロセッサＶＣＰＵ３に関する値、すなわちＤＢ３及びＤＢＳＳ３の値とを一定時間毎に取得するなどして監視する。
【００７６】
Ｓ２０５３：ＤＢ＿ＳＴＡＴレジスタ２６０の値が、ＤＢ２＝０、ＤＢＳＳ２＝１、ＤＢ３＝０かつＤＢＳＳ３＝１となったことが確認できたならば、すなわち仮想プロセッサＶＣＰＵ２及びＶＣＰＵ３がＤＢＳｕｓｐｅｎｄ２状態及びＤＢＳｕｓｐｅｎｄ３状態になったことが確認できたならば、ＣＰＵ制御部２４３はＤＢＳＵＳＰＲＱ２端子入力及びＤＢＳＵＳＰＲＱ３端子入力を停止する。
【００７７】
図１０（ａ）乃至図１０（ｃ）に、コマンドＢ−２（Ｓ２０６）、コマンドＢ−３（Ｓ２０７）、コマンドＢ−２３（Ｓ２０８）に対応する処理の内容を示す。
【００７８】
コマンドＢ−２に対する処理、すなわち仮想プロセッサＶＣＰＵ２の汎用レジスタ：ＧＲをダンプする（読み出す）処理（Ｓ２０６）：
【００７９】
Ｓ２０６１：ＣＰＵ制御部２４３は、ＤＢ＿ＳＴＡＴレジスタ２６０の値が、ＤＢ２＝０かつＤＢＳＳ２＝１であること、すなわち仮想プロセッサＶＣＰＵ２がＤＢＳｕｓｐｅｎｄ２状態にあることを確認する。
【００８０】
Ｓ２０６２：仮想プロセッサＶＣＰＵ２がＤＢＳｕｓｐｅｎｄ２状態でない場合、ＣＰＵ制御部２４３はエラー処理を行い、処理を終了する。
【００８１】
Ｓ２０６３：ＣＰＵ制御部２４３は、デバッグモニタプログラムを、図示しない記憶部等からＤＢ例外用メモリ２７０にダウンロードする。ここで、本実施の形態におけるデバッグモニタプログラムは、汎用レジスタ：ＧＲの値を読み出し、ＤＢ例外用メモリ２７０のワーク領域に書き込む処理を実行するものとする。
【００８２】
Ｓ２０６４：ＣＰＵ制御部２４３は、ＤＢＩＮＴ２端子をアクティブにする。
【００８３】
Ｓ２０６５：ＣＰＵ制御部２４３は、ＤＢＲＥＳＭＲＱ２端子をアクティブにする。
【００８４】
Ｓ２０６６：ＣＰＵ制御部２４３は、ＤＢ＿ＳＴＡＴレジスタ２６０のＤＢ２及びＤＢＳＳ２の値を一定時間毎に取得するなどして監視する。
【００８５】
Ｓ２０６７乃至Ｓ２０６８：ＤＢ＿ＳＴＡＴレジスタ２６０の値が、ＤＢ２＝１かつＤＢＳＳ２＝０となったことが確認できたならば、すなわち仮想プロセッサＶＣＰＵ２がＤＢ２状態に遷移したことが確認できたならば、ＣＰＵ制御部２４３はＤＢＩＮＴ２端子入力及びＤＢＲＥＳＭＲＱ端子入力を停止する。デバッグモニタプログラムの実行が開始される。
【００８６】
Ｓ２０６９：ＣＰＵ制御部２４３は、ＤＢ＿ＳＴＡＴレジスタ２６０のＤＢ２及びＤＢＳＳ２の値を一定時間毎に取得するなどして監視する。
【００８７】
Ｓ２０６１０：ＤＢ＿ＳＴＡＴレジスタ２６０の値が、ＤＢ２＝０かつＤＢＳＳ２＝１となったことが確認できたならば、すなわち、デバッグモニタプログラムの実行が終了して、換言すればＤＢＲＥＴ命令が実行された結果、仮想プロセッサＶＣＰＵ２がＤＢＳｕｓｐｅｎｄ２状態に遷移したことが確認できたならば、ＣＰＵ制御部２４３は、ＤＢ例外用メモリ２７０のワーク領域から、汎用レジスタ：ＧＲの値を読み出し、一時保管領域２４４に一時保管する。
【００８８】
Ｓ２０６１１：ＣＰＵ制御部２４３は、ツールＩ／Ｆ２４１を介して、一時保管領域２４４に保管した値をＰＣ２５０に送信する。
【００８９】
コマンドＢ−３に対する処理、すなわち仮想プロセッサＶＣＰＵ３の汎用レジスタ：ＧＲをダンプする（読み出す）処理（Ｓ２０７）：
【００９０】
Ｓ２０７１：ＣＰＵ制御部２４３は、ＤＢ＿ＳＴＡＴレジスタ２６０の値が、ＤＢ３＝０かつＤＢＳＳ３＝１であること、すなわち仮想プロセッサＶＣＰＵ３がＤＢＳｕｓｐｅｎｄ３状態にあることを確認する。
【００９１】
Ｓ２０７２：仮想プロセッサＶＣＰＵ３がＤＢＳｕｓｐｅｎｄ３状態でない場合、ＣＰＵ制御部２４３はエラー処理を行い、処理を終了する。
【００９２】
Ｓ２０７３：ＣＰＵ制御部２４３は、デバッグモニタプログラムを、図示しない記憶部等からＤＢ例外用メモリ２７０にダウンロードする。
【００９３】
Ｓ２０７４：ＣＰＵ制御部２４３は、ＤＢＩＮＴ３端子をアクティブにする。
【００９４】
Ｓ２０７５：ＣＰＵ制御部２４３は、ＤＢＲＥＳＭＲＱ３端子をアクティブにする。
【００９５】
Ｓ２０７６：ＣＰＵ制御部２４３は、ＤＢ＿ＳＴＡＴレジスタ２６０のＤＢ３及びＤＢＳＳ３の値を一定時間毎に取得するなどして監視する。
【００９６】
Ｓ２０７７乃至Ｓ２０７８：ＤＢ＿ＳＴＡＴレジスタ２６０の値が、ＤＢ３＝１かつＤＢＳＳ３＝０となったことが確認できたならば、すなわち仮想プロセッサＶＣＰＵ３がＤＢ３状態に遷移したことが確認できたならば、ＣＰＵ制御部２４３はＤＢＩＮＴ３端子入力及びＤＢＲＥＳＭＲＱ３端子入力を停止する。デバッグモニタプログラムの実行が開始される。
【００９７】
Ｓ２０７９：ＣＰＵ制御部２４３は、ＤＢ＿ＳＴＡＴレジスタ２６０のＤＢ３及びＤＢＳＳ３の値を一定時間毎に取得するなどして監視する。
【００９８】
Ｓ２０７１０：ＤＢ＿ＳＴＡＴレジスタ２６０の値が、ＤＢ３＝０かつＤＢＳＳ３＝１となったことが確認できたならば、すなわち、デバッグモニタプログラムの実行が終了して、換言すればＤＢＲＥＴ命令が実行された結果、仮想プロセッサＶＣＰＵ３がＤＢＳｕｓｐｅｎｄ３状態に遷移したことが確認できたならば、ＣＰＵ制御部２４３は、ＤＢ例外用メモリ２７０のワーク領域から、汎用レジスタ：ＧＲの値を読み出し、一時保管領域２４４に一時保管する。
【００９９】
Ｓ２０７１１：ＣＰＵ制御部２４３は、ツールＩ／Ｆ２４１を介して、一時保管領域２４４に保管した値をＰＣ２５０に送信する。
【０１００】
コマンドＢ−２３に対する処理、すなわち仮想プロセッサＶＣＰＵ２及びＶＣＰＵ３の汎用レジスタ：ＧＲをダンプする（読み出す）処理（Ｓ２０８）：
【０１０１】
Ｓ２０８１：ＣＰＵ制御部２４３は、ＤＢ＿ＳＴＡＴレジスタ２６０の値が、ＤＢ２＝０かつＤＢＳＳ２＝１であること、すなわち仮想プロセッサＶＣＰＵ２がＤＢＳｕｓｐｅｎｄ２状態にあることを確認する。
【０１０２】
Ｓ２０８２：仮想プロセッサＶＣＰＵ２がＤＢＳｕｓｐｅｎｄ２状態でない場合、ＣＰＵ制御部２４３はエラー処理を行い、処理を終了する。
【０１０３】
Ｓ２０８３：ＣＰＵ制御部２４３は、デバッグモニタプログラムを、図示しない記憶部等からＤＢ例外用メモリ２７０にダウンロードする。ここで、本実施の形態におけるデバッグモニタプログラムは、汎用レジスタ：ＧＲの値を読み出し、ＤＢ例外用メモリ２７０のワーク領域に書き込む処理を実行するものとする。
【０１０４】
Ｓ２０８４：ＣＰＵ制御部２４３は、ＤＢＩＮＴ２端子をアクティブにする。
【０１０５】
Ｓ２０８５：ＣＰＵ制御部２４３は、ＤＢＲＥＳＭＲＱ２端子をアクティブにする。
【０１０６】
Ｓ２０８６：ＣＰＵ制御部２４３は、ＤＢ＿ＳＴＡＴレジスタ２６０のＤＢ２及びＤＢＳＳ２の値を一定時間毎に取得するなどして監視する。
【０１０７】
Ｓ２０８７乃至Ｓ２０８８：ＤＢ＿ＳＴＡＴレジスタ２６０の値が、ＤＢ２＝１かつＤＢＳＳ２＝０となったことが確認できたならば、すなわち仮想プロセッサＶＣＰＵ２がＤＢ２状態に遷移したことが確認できたならば、ＣＰＵ制御部２４３はＤＢＩＮＴ２端子入力及びＤＢＲＥＳＭＲＱ２端子入力を停止する。デバッグモニタプログラムの実行が開始される。
【０１０８】
Ｓ２０８９：ＣＰＵ制御部２４３は、ＤＢ＿ＳＴＡＴレジスタ２６０のＤＢ２及びＤＢＳＳ２の値を一定時間毎に取得するなどして監視する。
【０１０９】
Ｓ２０８１０：ＤＢ＿ＳＴＡＴレジスタ２６０の値が、ＤＢ２＝０かつＤＢＳＳ２＝１となったことが確認できたならば、すなわち、デバッグモニタプログラムの実行が終了して、換言すればＤＢＲＥＴ命令が実行された結果、仮想プロセッサＶＣＰＵ２がＤＢＳｕｓｐｅｎｄ２状態に遷移したことが確認できたならば、ＣＰＵ制御部２４３は、ＤＢ例外用メモリ２７０のワーク領域から、汎用レジスタ：ＧＲの値を読み出し、一時保管領域２４４に一時保管する。
【０１１０】
Ｓ２０８１１：ＣＰＵ制御部２４３は、ＤＢ＿ＳＴＡＴレジスタ２６０の値が、ＤＢ３＝０かつＤＢＳＳ３＝１であること、すなわち仮想プロセッサＶＣＰＵ３がＤＢＳｕｓｐｅｎｄ３状態にあることを確認する。
【０１１１】
Ｓ２０８１２：仮想プロセッサＶＣＰＵ３がＤＢＳｕｓｐｅｎｄ３状態でない場合、ＣＰＵ制御部２４３はエラー処理を行い、処理を終了する。
【０１１２】
Ｓ２０８１３：ＣＰＵ制御部２４３は、デバッグモニタプログラムを、図示しない記憶部等からＤＢ例外用メモリ２７０にダウンロードする。
【０１１３】
Ｓ２０８１４：ＣＰＵ制御部２４３は、ＤＢＩＮＴ３端子をアクティブにする。
【０１１４】
Ｓ２０８１５：ＣＰＵ制御部２４３は、ＤＢＲＥＳＭＲＱ３端子をアクティブにする。
【０１１５】
Ｓ２０８１６：ＣＰＵ制御部２４３は、ＤＢ＿ＳＴＡＴレジスタ２６０のＤＢ３及びＤＢＳＳ３の値を一定時間毎に取得するなどして監視する。
【０１１６】
Ｓ２０８１７乃至Ｓ２０８１８：ＤＢ＿ＳＴＡＴレジスタ２６０の値が、ＤＢ３＝１かつＤＢＳＳ３＝０となったことが確認できたならば、すなわち仮想プロセッサＶＣＰＵ３がＤＢ３状態に遷移したことが確認できたならば、ＣＰＵ制御部２４３はＤＢＩＮＴ３端子入力及びＤＢＲＥＳＭＲＱ３端子入力を停止する。デバッグモニタプログラムの実行が開始される。
【０１１７】
Ｓ２０８１９：ＣＰＵ制御部２４３は、ＤＢ＿ＳＴＡＴレジスタ２６０のＤＢ３及びＤＢＳＳ３の値を一定時間毎に取得するなどして監視する。
【０１１８】
Ｓ２０８２０：ＤＢ＿ＳＴＡＴレジスタ２６０の値が、ＤＢ３＝０かつＤＢＳＳ３＝１となったことが確認できたならば、すなわち、デバッグモニタプログラムの実行が終了して、換言すればＤＢＲＥＴ命令が実行された結果、仮想プロセッサＶＣＰＵ３がＤＢＳｕｓｐｅｎｄ３状態に遷移したことが確認できたならば、ＣＰＵ制御部２４３は、ＤＢ例外用メモリ２７０のワーク領域から、汎用レジスタ：ＧＲの値を読み出し、一時保管領域２４４に一時保管する。
【０１１９】
Ｓ２０８２１：ＣＰＵ制御部２４３は、ツールＩ／Ｆ２４１を介して、一時保管領域２４４に保管した値、すなわち仮想プロセッサＶＣＰＵ２の汎用レジスタ：ＧＲの値と、仮想プロセッサＶＣＰＵ３の汎用レジスタ：ＧＲの値とを、ＰＣ２５０に送信する。
【０１２０】
図１１に、コマンドＣ−２（Ｓ２０９）、コマンドＣ−３（Ｓ２１０）、コマンドＣ−２３（Ｓ２１１）に対応する処理の内容を示す。
【０１２１】
コマンドＣ−２に対する処理、すなわち仮想プロセッサＶＣＰＵ２でユーザプログラム実行を再開させる（ＵＳＥＲ２状態に復帰させる）処理（Ｓ２０９）：
【０１２２】
Ｓ２０９１：ＣＰＵ制御部２４３は、ＤＢＲＥＳＭＲＱ２端子をアクティブにする。
【０１２３】
Ｓ２０９２：ＣＰＵ制御部２４３は、ＤＢ＿ＳＴＡＴレジスタ２６０のＤＢ２及びＤＢＳＳ２の値を一定時間毎に取得するなどして監視する。
【０１２４】
Ｓ２０９３：ＤＢ＿ＳＴＡＴレジスタ２６０の値が、ＤＢ２＝０かつＤＢＳＳ２＝０となったことが確認できたならば、すなわち仮想プロセッサＶＣＰＵ２がＵＳＥＲ２状態に遷移したことが確認できたならば、ＣＰＵ制御部２４３はＤＢＲＥＳＭＲＱ２端子入力を停止する。
【０１２５】
コマンドＣ−３に対する処理、すなわち仮想プロセッサＶＣＰＵ３でユーザプログラム実行を再開させる（ＵＳＥＲ３状態に復帰させる）処理（Ｓ２１０）：
【０１２６】
Ｓ２１０１：ＣＰＵ制御部２４３は、ＤＢＲＥＳＭＲＱ３端子をアクティブにする。
【０１２７】
Ｓ２１０２：ＣＰＵ制御部２４３は、ＤＢ＿ＳＴＡＴレジスタ２６０のＤＢ３及びＤＢＳＳ３の値を一定時間毎に取得するなどして監視する。
【０１２８】
Ｓ２１０３：ＤＢ＿ＳＴＡＴレジスタ２６０の値が、ＤＢ３＝０かつＤＢＳＳ３＝０となったことが確認できたならば、すなわち仮想プロセッサＶＣＰＵ３がＵＳＥＲ３状態に遷移したことが確認できたならば、ＣＰＵ制御部２４３はＤＢＲＥＳＭＲＱ３端子入力を停止する。
【０１２９】
コマンドＣ−２３に対する処理、すなわち仮想プロセッサＶＣＰＵ２及びＶＣＰＵ３でユーザプログラム実行を再開させる（ＵＳＥＲ２状態及びＵＳＥＲ３状態に復帰させる）処理（Ｓ２１１）：
【０１３０】
Ｓ２１１１：ＣＰＵ制御部２４３は、ＤＢＲＥＳＭＲＱ２端子及びＤＢＲＥＳＭＲＱ３端子をアクティブにする。
【０１３１】
Ｓ２１１２：ＣＰＵ制御部２４３は、ＤＢ＿ＳＴＡＴレジスタ２６０のＤＢ２及びＤＢＳＳ２の値と、ＤＢ３及びＤＢＳＳ３の値とを一定時間毎に取得するなどして監視する。
【０１３２】
Ｓ２１１３：ＤＢ＿ＳＴＡＴレジスタ２６０の値が、ＤＢ２＝０、ＤＢＳＳ２＝０、ＤＢ３＝０かつＤＢＳＳ３＝０となったことが確認できたならば、すなわち仮想プロセッサＶＣＰＵ２及びＶＣＰＵ３がＵＳＥＲ２状態及びＵＳＥＲ３状態になったことが確認できたならば、ＣＰＵ制御部２４３はＤＢＲＥＳＭＲＱ２端子入力及びＤＢＲＥＳＭＲＱ３端子入力を停止する。
【０１３３】
最後に、図１２のタイミングチャートを用いて、仮想プロセッサＶＣＰＵ０及びＶＣＰＵ１においてユーザプログラムを実行しつつ、仮想プロセッサＶＣＰＵ３及びＶＣＰＵ２を略同時にデバッグする場合の仮想マルチプロセッサシステム２００の動作例について説明する。
【０１３４】
時刻ｔ０：仮想プロセッサＶＣＰＵ０乃至ＶＣＰＵ３は、ＵＳＥＲ０状態、ＵＳＥＲ１状態、ＵＳＥＲ２状態及びＵＳＥＲ３状態にあり、それぞれユーザプログラムを実行している。
【０１３５】
時刻ｔ１：ツール２４０が、ユーザの要求に応じ、ＤＢＳＵＳＰＲＱ３端子をアクティブにする。これに応じ、仮想プロセッサＶＣＰＵ３はＤＢＳｕｓｐｅｎｄ３状態に遷移する。
【０１３６】
時刻ｔ２：ツール２４０は、仮想プロセッサＶＣＰＵ３がＤＢＳｕｓｐｅｎｄ３状態に遷移したことを確認した後、まずＤＢＩＮＴ３端子を、つづいてＤＢＲＥＳＭＲＱ３端子をアクティブにする。これに応じ、仮想プロセッサＶＣＰＵ３はＤＢ３状態に遷移する。また、仮想プロセッサＶＣＰＵ３はＤＢＰＣレジスタ２２０にＰＣ値を格納する。仮想プロセッサＶＣＰＵ３はデバッグモニタプログラムを実行可能となる。
【０１３７】
時刻ｔ３：仮想プロセッサＶＣＰＵ２が、ユーザプログラムのＤＢＴＲＡＰ命令を実行する。これに応じ、仮想プロセッサＶＣＰＵ２はＤＢＳｕｓｐｅｎｄ２状態に遷移する。
【０１３８】
ここで、ツール２４０は、ＤＢＳｕｓｐｅｎｄｘ状態からＤＢｘ状態に遷移する仮想プロセッサＶＣＰＵｘの数が、ＤＢＰＣレジスタ２２０の数、すなわち本実施の形態においては１を超えないよう制御する。すなわち、時刻ｔ３以降においては、仮想プロセッサＶＣＰＵ３はＤＢ３状態にあるため、ツール２４０は、仮にＰＣ２５０から仮想プロセッサＶＣＰＵ２をＤＢ２状態に移行させるべき旨のコマンドが入力されたとしても、仮想プロセッサＶＣＰＵ３がＤＢＳｕｓｐｅｎｄ３状態に復帰するまで、ＤＢＩＮＴ２端子入力及びＤＢＲＥＳＭＲＱ２端子入力の有効化を待ち合わせる。
【０１３９】
時刻ｔ４：仮想プロセッサＶＣＰＵ３が、デバッグモニタプログラムのＤＢＲＥＴ命令を実行する。これに応じ、仮想プロセッサＶＣＰＵ３はＤＢＳｕｓｐｅｎｄ３状態に遷移する。このとき、仮想プロセッサＶＣＰＵ３はＤＢＰＣレジスタ２２０からＰＣ値を取得する。
【０１４０】
時刻ｔ５：ツール２４０は、仮想プロセッサＶＣＰＵ２がＤＢＳｕｓｐｅｎｄ２状態にあることを確認した後、まずＤＢＩＮＴ２端子を、つづいてＤＢＲＥＳＭＲＱ２端子をアクティブにする。これに応じ、仮想プロセッサＶＣＰＵ２はＤＢ２状態に遷移する。また、仮想プロセッサＶＣＰＵ２はＤＢＰＣレジスタ２２０にＰＣ値を格納する。仮想プロセッサＶＣＰＵ２はデバッグモニタプログラムを実行可能となる。
【０１４１】
時刻ｔ６：ツール２４０が、ユーザの要求に応じ、ＤＢＲＥＳＭＲＱ３端子をアクティブにする。これに応じ、仮想プロセッサＶＣＰＵ３がＵＳＥＲ３状態に復帰する。
【０１４２】
本実施の形態では、ＤＢＳｕｓｐｅｎｄｘ状態からＤＢｘ状態に移る直前の仮想プロセッサのＰＣ値を退避させるための一時記憶領域として、全ての仮想プロセッサにより共有されるＤＢＰＣレジスタ２２０を設けた。
【０１４３】
そして、ツール２４０が、ＤＢＳｕｓｐｅｎｄｘ状態からＤＢｘ状態に遷移する仮想プロセッサの数が、ＤＢＰＣレジスタ２２０の数、すなわち本実施の形態においては１を超えないよう制御する。
【０１４４】
よって、ユーザは、複数の仮想プロセッサについて、ＤＢＰＣレジスタ２２０の競合を意識することなく、デバッグ処理の開始を指示することができる。
【０１４５】
また、このような構成によれば、ある仮想プロセッサでのデバッグ中に、他の仮想プロセッサにスケジュールが切替えられたとしても、ＰＣ値が上書きされることがない。よって、複数の仮想プロセッサのうち、ある仮想プロセッサがデバッグ状態であっても、デバッグ要求が発生していない他の仮想プロセッサ（例えば、図１２におけるＶＣＰＵ０、ＶＣＰＵ１など）は、ユーザプログラムの実行を続けることができる。
【０１４６】
すなわち、ある仮想プロセッサＶＣＰＵｘの状態（ＵＳＥＲｘ状態、ＤＢＳｕｓｐｅｎｄｘ状態、ＤＢｘ状態）が、他の仮想プロセッサＶＣＰＵｘの状態に影響しないので、ユーザは、複数の仮想プロセッサＶＣＰＵｘについて、ユーザプログラムの実行やデバッグ処理を略同時に行うことができる。
【０１４７】
＜実施の形態２＞
実施の形態２では、本発明をハードウェアマルチスレッド対応の仮想マルチプロセッサに適用した例を示す。
【０１４８】
まず、図１３乃至図１６を用いて、実施の形態２にかかる仮想マルチプロセッサシステム３００の実装例と、その動作の概念とを説明する。なお、実施の形態１と重複する部分については説明を省略する。
【０１４９】
実施の形態２では、２つの仮想プロセッサＶＣＰＵ０及びＶＣＰＵ１が、物理プロセッサ２１０上で動作するものとする。仮想プロセッサＶＣＰＵ０は、ＨＴ０とＨＴ１の２つのハードウェアスレッドを有する。仮想プロセッサＶＣＰＵ１は、ＨＴ２とＨＴ３の２つのハードウェアスレッドを有する。スケジューラ／ティスパッチャ２３０は、仮想プロセッサＶＣＰＵｘ（ｘは０乃至１）及びスレッドＨＴｘ（ｘは０乃至３）のスケジュールに従って、ＨＴｘを物理プロセッサ２１０に割り当てる。物理ＣＰＵ２１０は、スケジュールが割り当てられたＨＴｘの処理を時分割で並行して実行する。
【０１５０】
図１４に、スレッドＨＴｘが上記３つの状態をどのように遷移するかを示す。
【０１５１】
スレッドＨＴｘは、実行開始直後はＵＳＥＲｘ状態となる。
【０１５２】
スレッドＨＴｘは、スレッドＨＴｘが属する仮想プロセッサＶＣＰＵｘに対するＤＢＳＵＳＰＲＱｘ（ｘは０乃至１）端子入力に応じ、ＵＳＥＲｘ状態（ｘは０乃至３）からＤＢＳｕｓｐｅｎｄｘ状態（ｘは０乃至３）に遷移する。また、スレッドＨＴｘは、ＤＢＴＲＡＰ命令に応じて、ＤＢＳｕｓｐｅｎｄｘ状態に遷移することもできる。ここで、実施の形態２におけるＤＢＴＲＡＰ命令は、命令を実行したスレッドＨＴｘが属する仮想プロセッサＶＣＰＵｘに属するすべてのスレッドＨｔｘを、ＤＢＳｕｓｐｅｎｄｘ状態に遷移させる機能を有するものとする。
【０１５３】
スレッドＨＴｘは、各スレッドＨＴｘに対するＤＢＲＥＳＭＲＱｘ（ｘは０乃至３）端子入力に応じ、ＤＢＳｕｓｐｅｎｄｘ状態からＵＳＥＲｘ状態に遷移する。なお、ＤＢＲＥＳＭＲＱｘ端子入力が有効となったとき、スレッドＨＴｘが属する仮想プロセッサＶＣＰＵｘに対するＤＢＩＮＴｘ（ｘは０乃至１）端子入力も有効である場合には、スレッドＨＴｘは、ＤＢＳｕｓｐｅｎｄｘ状態からＤＢｘ状態に遷移する。
【０１５４】
スレッドＨＴｘは、ＤＢＲＥＴ命令の実行に応じて、ＤＢｘ状態からＤＢＳｕｓｐｅｎｄｘ状態に遷移する。
【０１５５】
図１５に、実施の形態２におけるＤＢ＿ＳＴＡＴレジスタ２０６の一例を示す。
【０１５６】
ＤＢ＿ＳＴＡＴレジスタ２０６は、スレッドＨＴｘそれぞれの現在の状態を表す情報として、ＤＢｘ（ｘは０乃至３）ビットと、ＤＢＳＳｘ（ｘは０乃至３）ビットとの組を保持する。本実施の形態では、ＤＢｘビット＝０かつＤＢＳＳｘビット＝０であるとき、スレッドＨＴｘがＵＳＥＲｘ状態にあることを意味する。ＤＢｘビット＝０かつＤＢＳＳｘビット＝１であるとき、スレッドＨＴｘがＤＢＳｕｓｐｅｎｄｘ状態にあることを意味する。ＤＢｘビット＝１かつＤＢＳＳｘビット＝０のとき、スレッドＨＴｘはＤＢｘ状態にあることを意味する。なお、ＤＢｘビット＝１かつＤＢＳＳｘビット＝１となることは想定されていない。
【０１５７】
スレッドＨＴｘは、状態を遷移したとき、ＤＢｘビット及びＤＢＳＳｘビットを、遷移した状態を示す値に更新する。
【０１５８】
図１６に、スレッドＨＴｘがＤＢＰＣレジスタ２２０との間でＰＣ値の格納及び取得を行う様子を示す。
【０１５９】
スレッドＨＴｘは、ＤＢＳｕｓｐｅｎｄｘ状態からＤＢｘ状態に遷移する際、ＤＢＰＣレジスタ２２０にスレッドＨＴｘのＰＣ情報を格納し、保管しておく。また、スレッドＨＴｘは、ＤＢｘ状態からＤＢＳｕｓｐｅｎｄｘ状態に遷移する際、ＤＢＰＣレジスタ２２０からスレッドＨＴｘのＰＣ情報を取り出す。
【０１６０】
つづいて、図１７乃至図２３のフローチャートを用いて、仮想マルチプロセッサシステム３００の動作について詳細に説明する。
【０１６１】
まず、図１７（ａ）及び図１７（ｂ）を用いて、スレッドＨＴｘがデバッグ処理を行うため状態遷移を行う際の動作を説明する。ここでは、スレッドＨＴ２及びＨＴ３を例として説明する。
【０１６２】
ＨＴ２の動作：
Ｓ３０１：スレッドＨＴ２は、ＵＳＥＲ２状態でユーザプログラムを実行している。
【０１６３】
Ｓ３０２：スレッドＨＴ２が属する仮想プロセッサＶＣＰＵ１に属する、スレッドＨＴ２又はスレッドＨＴ３が、ユーザプログラムに含まれていたＤＢＴＲＡＰ命令を実行する。
【０１６４】
Ｓ３０３：ユーザが、ＰＣ２５０を用いて、ツール２４０に対し、仮想プロセッサＶＣＰＵ１に属するスレッドＨＴｘをＤＢＳｕｓｐｅｎｄｘ状態にすべき旨のコマンドを送出する。これに応じ、ツール２４０は、ＤＢＳＵＳＰＲＱ１端子をアクティブにする。
【０１６５】
スレッドＨＴ２は、このＤＢＳＵＳＰＲＱ１端子入力を検出する。
【０１６６】
Ｓ３０４：Ｓ３０２又はＳ３０３に応じ、スレッドＨＴ２は、ＤＢＳｕｓｐｅｎｄ２状態に遷移する。
【０１６７】
ツール２４０は、ＤＢ＿ＳＴＡＴレジスタ２６０を監視し、ＤＢ２＝０かつＤＢＳＳ２＝１となったこと、すなわちスレッドＨＴ２がＤＢＳｕｓｐｅｎｄ２状態に移行したことを確認する。ツール２４０は、このことが確認できたなら、ＤＢＩＮＴ１端子をアクティブにし、つづけてＤＢＲＥＳＭＲＱ２端子をアクティブにする。
【０１６８】
Ｓ３０５乃至Ｓ３０７：スレッドＨＴ２は、ＤＢＲＥＳＭＲＱ２端子入力、及びＤＢＩＮＴ１端子入力を検出すると、ＤＢ２状態に遷移し、現在のＰＣ値をＤＢＰＣレジスタ２２０に保存する。この後、スレッドＨＴ２は、デバッグモニタプログラムを実行する。
【０１６９】
Ｓ３０８：スレッドＨＴ２は、デバッグモニタプログラムに含まれるＤＢＲＥＴ命令を実行し、ＤＢＰＣレジスタ２２０からＰＣ値を取得し、ＤＢＳｕｓｐｅｎｄ２状態に遷移する。
【０１７０】
Ｓ３０４乃至Ｓ３０６：ユーザが、ユーザプログラムの実行に戻るため、ツール２４０に対し、スレッドＨＴ２をＵＳＥＲ２状態にすべき旨のコマンドを送出する。これに応じ、ツール２４０は、ＤＢＲＥＳＭＲＱ２端子をアクティブにする。
【０１７１】
スレッドＨＴ２は、このＤＢＲＥＳＭＲＱ２端子入力を検出し、ＵＳＥＲ２状態に遷移する。
【０１７２】
ＨＴ３の動作：
Ｓ４０１：スレッドＨＴ３は、ＵＳＥＲ３状態でユーザプログラムを実行している。
【０１７３】
Ｓ３０２：スレッドＨＴ３が属する仮想プロセッサＶＣＰＵ１に属する、スレッドＨＴ２又はスレッドＨＴ３が、ユーザプログラムに含まれていたＤＢＴＲＡＰ命令を実行する。
【０１７４】
Ｓ３０３：ユーザが、ＰＣ２５０を用いて、ツール２４０に対し、仮想プロセッサＶＣＰＵ１に属するスレッドＨＴｘをＤＢＳｕｓｐｅｎｄｘ状態にすべき旨のコマンドを送出する。これに応じ、ツール２４０は、ＤＢＳＵＳＰＲＱ１端子をアクティブにする。
【０１７５】
スレッドＨＴ３は、このＤＢＳＵＳＰＲＱ１端子入力を検出する。
【０１７６】
Ｓ４０４：Ｓ３０２又はＳ３０３に応じ、スレッドＨＴ３は、ＤＢＳｕｓｐｅｎｄ３状態に遷移する。
【０１７７】
ツール２４０は、ＤＢ＿ＳＴＡＴレジスタ２６０を監視し、ＤＢ３＝０かつＤＢＳＳ３＝１となったこと、すなわちスレッドＨＴ３がＤＢＳｕｓｐｅｎｄ３状態に移行したことを確認する。ツール２４０は、このことが確認できたなら、ＤＢＩＮＴ１端子をアクティブにし、つづけてＤＢＲＥＳＭＲＱ３端子をアクティブにする。
【０１７８】
Ｓ４０５、Ｓ３０６及びＳ４０７：スレッドＨＴ３は、ＤＢＲＥＳＭＲＱ３端子入力、及びＤＢＩＮＴ１端子入力を検出すると、ＤＢ３状態に遷移し、現在のＰＣ値をＤＢＰＣレジスタ２２０に保存する。この後、スレッドＨＴ３は、デバッグモニタプログラムを実行する。
【０１７９】
Ｓ４０８：スレッドＨＴ３は、デバッグモニタプログラムに含まれるＤＢＲＥＴ命令を実行し、ＤＢＰＣレジスタ２２０からＰＣ値を取得し、ＤＢＳｕｓｐｅｎｄ３状態に遷移する。
【０１８０】
Ｓ４０４、Ｓ４０５及びＳ３０６：ユーザが、ユーザプログラムの実行に戻るため、ツール２４０に対し、スレッドＨＴ３をＵＳＥＲ３状態にすべき旨のコマンドを送出する。これに応じ、ツール２４０は、ＤＢＲＥＳＭＲＱ３端子をアクティブにする。
【０１８１】
スレッドＨＴ３は、このＤＢＲＥＳＭＲＱ３端子入力を検出し、ＵＳＥＲ３状態に遷移する。
【０１８２】
ここで、ＨＴ２とＨＴ３は、ステップＳ３０２乃至Ｓ３０３を共有している。これは、ＤＢＳＵＳＰＲＱｘ端子入力が仮想プロセッサＶＣＰＵｘ単位であること、及びＤＢＴＲＡＰ命令の効果が仮想プロセッサＶＣＰＵｘ単位に及ぶことによる。そのため、実施の形態２では、ＤＢＳＵＳＰＲＱｘ端子入力又はＤＢＴＲＡＰ命令の実行があると、当該端子入力がなされた仮想プロセッサＶＣＰＵｘに属するすべてのスレッドＨＴｘ、又はＤＢＴＲＡＰ命令を実行したスレッドＨＴｘが属する仮想プロセッサＶＣＰＵｘに属するスレッドＨＴｘが、ＤＢＳｕｓｐｅｎｄｘ状態に遷移する。
【０１８３】
ここで、スレッドＨＴｘがＤＢＳｕｓｐｅｎｄｘ状態に遷移するトリガは、ＤＢＴＲＡＰ命令（Ｓ３０２）又はＤＢＳＵＳＰＲＱｘ端子入力（Ｓ３０３）のいずれであってもよい（図１８及び図１９参照）。ＤＢＴＲＡＰ命令は、スレッドＨＴｘが実行するユーザプログラムの特定の命令に同期してデバッグ処理を行いたい場合に利用できる。例えば、スレッドＨＴ３が実行するユーザプログラムの命令ｃを実行したタイミングで、特定の汎用レジスタ値を確認したい場合等である。これは、ユーザプログラムにおいて、特定の命令、例えば命令ｃの次にＤＢＴＲＡＰ命令を記述することにより実現できる。但し、この場合、スレッドＨＴ３がＤＢＳｕｓｐｅｎｄ３状態に遷移すると同時に、スレッドＨＴ３が属する仮想プロセッサＶＣＰＵ１に属する他のスレッドＨＴ２もＤＢＳｕｓｐｅｎｄ２状態に遷移するが、スレッドＨＴ２にとっては、特定の命令に同期するものとはならない。
【０１８４】
一方、ＤＢＳＵＳＰＲＱｘ端子入力は、いかなるスレッドＨＴｘ、例えばスレッドＨＴ２及びＨＴ３のいずれのユーザプログラムの特定の命令にも非同期で、ユーザの指示によってユーザプログラムの実行を中断したい場合に利用できる。例えば、仮想プロセッサＶＣＰＵ１が暴走状態にあるなどの理由で、ユーザがデバッガのＳＴＯＰボタンを押した場合等である。
【０１８５】
また、ここではスレッドＨＴ２及びＨＴ３においてデバッグ処理を行う例を説明したが、同様の手順により、他のスレッドＨＴｘにおいてもデバッグ処理を行うことが可能である。
【０１８６】
つぎに、図２０乃至図２３を用いて、実施の形態２におけるツール２４０の動作について説明する。
【０１８７】
図２０のフローチャートは、ツール２４０が、ＰＣ２５０が発行するコマンドに応じて行う処理を示している。
【０１８８】
Ｓ５０１：ツールＩ／Ｆ２４１が、ＰＣ２５０からコマンドを受信する。
【０１８９】
Ｓ５０２：ＰＣコマンド解析部２４２は、受信したコマンドの内容に応じ、ツール２４０がどのような処理を実行すべきかを決定する。
【０１９０】
本実施の形態では、ＰＣ２５０及びツール２４０は、少なくとも以下の５つのコマンドをサポートしているものとする。
コマンドＡ２−２３：仮想プロセッサＶＣＰＵ１（スレッドＨＴ２及びＨＴ３）のユーザプログラム実行を強制的に停止させる（ＤＢＳｕｓｐｅｎｄ２状態及びＤＢＳｕｓｐｅｎｄ３状態に遷移させる）。
コマンドＢ２−２：仮想プロセッサＶＣＰＵ１のスレッドＨＴ２の汎用レジスタ：ＧＲをダンプする（読み出す）。
コマンドＢ２−３：仮想プロセッサＶＣＰＵ１のスレッドＨＴ３の汎用レジスタ：ＧＲをダンプする（読み出す）。
コマンドＢ２−２３：仮想プロセッサＶＣＰＵ１のスレッドＨＴ２及びＨＴ３の汎用レジスタ：ＧＲをダンプする（読み出す）。
コマンドＣ２−２３：仮想プロセッサＶＣＰＵ１のスレッドＨＴ２及びＨＴ３でユーザプログラム実行を再開させる（ＵＳＥＲ２状態及びＵＳＥＲ３状態に復帰させる）。
【０１９１】
Ｓ５０３乃至Ｓ５０７：ＣＰＵ制御部２４３は、上述の５つのコマンドの内容に応じた後述の処理を実行する。
【０１９２】
図２１に、Ａ２−２３に対する処理、すなわち仮想プロセッサＶＣＰＵ１（スレッドＨＴ２及びＨＴ３）のユーザプログラム実行を強制的に停止させる（ＤＢＳｕｓｐｅｎｄ２状態及びＤＢＳｕｓｐｅｎｄ３状態に遷移させる）処理（Ｓ５０３）の内容を示す。
【０１９３】
Ｓ５０３１：ＣＰＵ制御部２４３は、ＤＢＳＵＳＰＲＱ１端子をアクティブにする。
【０１９４】
Ｓ５０３２：ＣＰＵ制御部２４３は、ＤＢ＿ＳＴＡＴレジスタ２６０のスレッドＨＴ２及びＨＴ３に関する値、すなわちＤＢ２、ＤＢＳＳ２、ＤＢ３及びＤＢＳＳ３の値を一定時間毎に取得するなどして監視する。
【０１９５】
Ｓ５０３３：ＤＢ＿ＳＴＡＴレジスタ２６０の値が、ＤＢ２＝０、ＤＢＳＳ２＝１、ＤＢ３＝０かつＤＢＳＳ３＝１となったことが確認できたならば、すなわちスレッドＨＴ２及びＨＴ３がＤＢＳｕｓｐｅｎｄ２状態及びＤＢＳｕｓｐｅｎｄ３状態になったことが確認できたならば、ＣＰＵ制御部２４３はＤＢＳＵＳＰＲＱ１端子入力を停止する。
【０１９６】
このように、実施の形態２では、ＵＳＥＲｘ状態からＤＢＳｕｓｐｅｎｄｘ状態への遷移は、仮想プロセッサＶＣＰＵｘ単位で行われる。すなわち、仮想プロセッサＶＣＰＵｘに属するすべてのスレッドＨＴｘがともにＤＢＳｕｓｐｅｎｄｘ状態に遷移することとなる。
【０１９７】
図２２（ａ）乃至図２２（ｃ）に、コマンドＢ２−２（Ｓ５０４）、コマンドＢ２−３（Ｓ５０５）、コマンドＢ２−２３（Ｓ５０６）に対応する処理の内容を示す。
【０１９８】
コマンドＢ２−２に対する処理、すなわち仮想プロセッサＶＣＰＵ１のスレッドＨＴ２の汎用レジスタ：ＧＲをダンプする（読み出す）処理（Ｓ５０４）：
【０１９９】
Ｓ５０４１：ＣＰＵ制御部２４３は、ＤＢ＿ＳＴＡＴレジスタ２６０の値が、ＤＢ２＝０かつＤＢＳＳ２＝１であること、すなわちスレッドＨＴ２がＤＢＳｕｓｐｅｎｄ２状態にあることを確認する。
【０２００】
Ｓ５０４２：スレッドＨＴ２がＤＢＳｕｓｐｅｎｄ２状態でない場合、ＣＰＵ制御部２４３はエラー処理を行い、処理を終了する。
【０２０１】
Ｓ５０４３：ＣＰＵ制御部２４３は、デバッグモニタプログラムを、図示しない記憶部等からＤＢ例外用メモリ２７０にダウンロードする。
【０２０２】
Ｓ５０４４：ＣＰＵ制御部２４３は、ＤＢＩＮＴ１端子をアクティブにする。
【０２０３】
Ｓ５０４５：ＣＰＵ制御部２４３は、ＤＢＲＥＳＭＲＱ２端子をアクティブにする。
【０２０４】
Ｓ５０４６：ＣＰＵ制御部２４３は、ＤＢ＿ＳＴＡＴレジスタ２６０のＤＢ２及びＤＢＳＳ２の値を一定時間毎に取得するなどして監視する。
【０２０５】
Ｓ５０４７乃至Ｓ５０４８：ＤＢ＿ＳＴＡＴレジスタ２６０の値が、ＤＢ２＝１かつＤＢＳＳ２＝０となったことが確認できたならば、すなわちスレッドＨＴ２がＤＢ２状態に遷移したことが確認できたならば、ＣＰＵ制御部２４３はＤＢＩＮＴ１端子入力及びＤＢＲＥＳＭＲＱ２端子入力を停止する。デバッグモニタプログラムの実行が開始される。
【０２０６】
Ｓ５０４９：ＣＰＵ制御部２４３は、ＤＢ＿ＳＴＡＴレジスタ２６０のＤＢ２及びＤＢＳＳ２の値を一定時間毎に取得するなどして監視する。
【０２０７】
Ｓ５０４１０：ＤＢ＿ＳＴＡＴレジスタ２６０の値が、ＤＢ２＝０かつＤＢＳＳ２＝１となったことが確認できたならば、すなわち、デバッグモニタプログラムの実行が終了して、換言すればＤＢＲＥＴ命令が実行された結果、スレッドＨＴ２がＤＢＳｕｓｐｅｎｄ２状態に遷移したことが確認できたならば、ＣＰＵ制御部２４３は、ＤＢ例外用メモリ２７０のワーク領域から、汎用レジスタ：ＧＲの値を読み出し、一時保管領域２４４に一時保管する。
【０２０８】
Ｓ５０４１１：ＣＰＵ制御部２４３は、ツールＩ／Ｆ２４１を介して、一時保管領域２４４に保管した値をＰＣ２５０に送信する。
【０２０９】
コマンドＢ２−３に対する処理、すなわち仮想プロセッサＶＣＰＵ１のスレッドＨＴ３の汎用レジスタ：ＧＲをダンプする（読み出す）処理（Ｓ５０５）：
【０２１０】
Ｓ５０５１：ＣＰＵ制御部２４３は、ＤＢ＿ＳＴＡＴレジスタ２６０の値が、ＤＢ３＝０かつＤＢＳＳ３＝１であること、すなわちスレッドＨＴ３がＤＢＳｕｓｐｅｎｄ３状態にあることを確認する。
【０２１１】
Ｓ５０５２：スレッドＨＴ３がＤＢＳｕｓｐｅｎｄ３状態でない場合、ＣＰＵ制御部２４３はエラー処理を行い、処理を終了する。
【０２１２】
Ｓ５０５３：ＣＰＵ制御部２４３は、デバッグモニタプログラムを、図示しない記憶部等からＤＢ例外用メモリ２７０にダウンロードする。
【０２１３】
Ｓ５０５４：ＣＰＵ制御部２４３は、ＤＢＩＮＴ１端子をアクティブにする。
【０２１４】
Ｓ５０５５：ＣＰＵ制御部２４３は、ＤＢＲＥＳＭＲＱ３端子をアクティブにする。
【０２１５】
Ｓ５０５６：ＣＰＵ制御部２４３は、ＤＢ＿ＳＴＡＴレジスタ２６０のＤＢ３及びＤＢＳＳ３の値を一定時間毎に取得するなどして監視する。
【０２１６】
Ｓ５０５７乃至Ｓ５０５８：ＤＢ＿ＳＴＡＴレジスタ２６０の値が、ＤＢ３＝１かつＤＢＳＳ３＝０となったことが確認できたならば、すなわちスレッドＨＴ３がＤＢ３状態に遷移したことが確認できたならば、ＣＰＵ制御部２４３はＤＢＩＮＴ１端子入力及びＤＢＲＥＳＭＲＱ３端子入力を停止する。デバッグモニタプログラムの実行が開始される。
【０２１７】
Ｓ５０５９：ＣＰＵ制御部２４３は、ＤＢ＿ＳＴＡＴレジスタ２６０のＤＢ３及びＤＢＳＳ３の値を一定時間毎に取得するなどして監視する。
【０２１８】
Ｓ５０５１０：ＤＢ＿ＳＴＡＴレジスタ２６０の値が、ＤＢ３＝０かつＤＢＳＳ３＝１となったことが確認できたならば、すなわち、デバッグモニタプログラムの実行が終了して、換言すればＤＢＲＥＴ命令が実行された結果、スレッドＨＴ３がＤＢＳｕｓｐｅｎｄ３状態に遷移したことが確認できたならば、ＣＰＵ制御部２４３は、ＤＢ例外用メモリ２７０のワーク領域から、汎用レジスタ：ＧＲの値を読み出し、一時保管領域２４４に一時保管する。
【０２１９】
Ｓ５０５１１：ＣＰＵ制御部２４３は、ツールＩ／Ｆ２４１を介して、一時保管領域２４４に保管した値をＰＣ２５０に送信する。
【０２２０】
コマンドＢ２−２３に対する処理、すなわち仮想プロセッサＶＣＰＵ１のスレッドＨＴ２及びＨＴ３の汎用レジスタ：ＧＲをダンプする（読み出す）処理（Ｓ５０６）：
【０２２１】
Ｓ５０６１：ＣＰＵ制御部２４３は、ＤＢ＿ＳＴＡＴレジスタ２６０の値が、ＤＢ２＝０かつＤＢＳＳ２＝１であること、すなわちスレッドＨＴ２がＤＢＳｕｓｐｅｎｄ２状態にあることを確認する。
【０２２２】
Ｓ５０６２：スレッドＨＴ２がＤＢＳｕｓｐｅｎｄ２状態でない場合、ＣＰＵ制御部２４３はエラー処理を行い、処理を終了する。
【０２２３】
Ｓ５０６３：ＣＰＵ制御部２４３は、デバッグモニタプログラムを、図示しない記憶部等からＤＢ例外用メモリ２７０にダウンロードする。
【０２２４】
Ｓ５０６４：ＣＰＵ制御部２４３は、ＤＢＩＮＴ１端子をアクティブにする。
【０２２５】
Ｓ５０６５：ＣＰＵ制御部２４３は、ＤＢＲＥＳＭＲＱ２端子をアクティブにする。
【０２２６】
Ｓ５０６６：ＣＰＵ制御部２４３は、ＤＢ＿ＳＴＡＴレジスタ２６０のＤＢ２及びＤＢＳＳ２の値を一定時間毎に取得するなどして監視する。
【０２２７】
Ｓ５０６７乃至Ｓ５０６８：ＤＢ＿ＳＴＡＴレジスタ２６０の値が、ＤＢ２＝１かつＤＢＳＳ２＝０となったことが確認できたならば、すなわちスレッドＨＴ２がＤＢ２状態に遷移したことが確認できたならば、ＣＰＵ制御部２４３はＤＢＩＮＴ１端子入力及びＤＢＲＥＳＭＲＱ２端子入力を停止する。デバッグモニタプログラムの実行が開始される。
【０２２８】
Ｓ５０６９：ＣＰＵ制御部２４３は、ＤＢ＿ＳＴＡＴレジスタ２６０のＤＢ２及びＤＢＳＳ２の値を一定時間毎に取得するなどして監視する。
【０２２９】
Ｓ５０６１０：ＤＢ＿ＳＴＡＴレジスタ２６０の値が、ＤＢ２＝０かつＤＢＳＳ２＝１となったことが確認できたならば、すなわち、デバッグモニタプログラムの実行が終了して、換言すればＤＢＲＥＴ命令が実行された結果、スレッドＨＴ２がＤＢＳｕｓｐｅｎｄ２状態に遷移したことが確認できたならば、ＣＰＵ制御部２４３は、ＤＢ例外用メモリ２７０のワーク領域から、汎用レジスタ：ＧＲの値を読み出し、一時保管領域２４４に一時保管する。
【０２３０】
Ｓ５０６１１：ＣＰＵ制御部２４３は、ＤＢ＿ＳＴＡＴレジスタ２６０の値が、ＤＢ３＝０かつＤＢＳＳ３＝１であること、すなわちスレッドＨＴ３がＤＢＳｕｓｐｅｎｄ３状態にあることを確認する。
【０２３１】
Ｓ５０６１２：スレッドＨＴ３がＤＢＳｕｓｐｅｎｄ３状態でない場合、ＣＰＵ制御部２４３はエラー処理を行い、処理を終了する。
【０２３２】
Ｓ５０６１３：ＣＰＵ制御部２４３は、デバッグモニタプログラムを、図示しない記憶部等からＤＢ例外用メモリ２７０にダウンロードする。
【０２３３】
Ｓ５０６１４：ＣＰＵ制御部２４３は、ＤＢＩＮＴ１端子をアクティブにする。
【０２３４】
Ｓ５０６８１５：ＣＰＵ制御部２４３は、ＤＢＲＥＳＭＲＱ３端子をアクティブにする。
【０２３５】
Ｓ５０６１６：ＣＰＵ制御部２４３は、ＤＢ＿ＳＴＡＴレジスタ２６０のＤＢ３及びＤＢＳＳ３の値を一定時間毎に取得するなどして監視する。
【０２３６】
Ｓ５０６１７乃至Ｓ５０６１８：ＤＢ＿ＳＴＡＴレジスタ２６０の値が、ＤＢ３＝１かつＤＢＳＳ３＝０となったことが確認できたならば、すなわちスレッドＨＴ３がＤＢ３状態に遷移したことが確認できたならば、ＣＰＵ制御部２４３はＤＢＩＮＴ１端子入力及びＤＢＲＥＳＭＲＱ３端子入力を停止する。デバッグモニタプログラムの実行が開始される。
【０２３７】
Ｓ５０６１９：ＣＰＵ制御部２４３は、ＤＢ＿ＳＴＡＴレジスタ２６０のＤＢ３及びＤＢＳＳ３の値を一定時間毎に取得するなどして監視する。
【０２３８】
Ｓ５０６２０：ＤＢ＿ＳＴＡＴレジスタ２６０の値が、ＤＢ３＝０かつＤＢＳＳ３＝１となったことが確認できたならば、すなわち、デバッグモニタプログラムの実行が終了して、換言すればＤＢＲＥＴ命令が実行された結果、スレッドＨＴ３がＤＢＳｕｓｐｅｎｄ３状態に遷移したことが確認できたならば、ＣＰＵ制御部２４３は、ＤＢ例外用メモリ２７０のワーク領域から、汎用レジスタ：ＧＲの値を読み出し、一時保管領域２４４に一時保管する。
【０２３９】
Ｓ５０６２１：ＣＰＵ制御部２４３は、ツールＩ／Ｆ２４１を介して、一時保管領域２４４に保管した値、すなわちスレッドＨＴ２の汎用レジスタ：ＧＲの値と、スレッドＨＴ３の汎用レジスタ：ＧＲの値とを、ＰＣ２５０に送信する。
【０２４０】
このように、実施の形態２では、ＤＢＳｕｓｐｅｎｄｘ状態からＤＢｘ状態への遷移は、ツール２４０の制御により、スレッドＨＴｘ単位で行うことを可能としている。
【０２４１】
図２３に、コマンドＣ２−２３に対する処理、すなわち仮想プロセッサＶＣＰＵ１のスレッドＨＴ２及びＨＴ３でユーザプログラム実行を再開させる（ＵＳＥＲ２状態及びＵＳＥＲ３状態に復帰させる）処理（Ｓ５０７）の内容を示す：
【０２４２】
Ｓ５０７１：ＣＰＵ制御部２４３は、ＤＢＲＥＳＭＲＱ２端子及びＤＢＲＥＳＭＲＱ３端子をアクティブにする。
【０２４３】
Ｓ５０７２：ＣＰＵ制御部２４３は、ＤＢ＿ＳＴＡＴレジスタ２６０のＤＢ２及びＤＢＳＳ２の値と、ＤＢ３及びＤＢＳＳ３の値とを一定時間毎に取得するなどして監視する。
【０２４４】
Ｓ５０７３：ＤＢ＿ＳＴＡＴレジスタ２６０の値が、ＤＢ２＝０、ＤＢＳＳ２＝０、ＤＢ３＝０かつＤＢＳＳ３＝０となったことが確認できたならば、すなわちスレッドＨＴ２及びＨＴ３がＵＳＥＲ２状態及びＵＳＥＲ３状態になったことが確認できたならば、ＣＰＵ制御部２４３はＤＢＲＥＳＭＲＱ２端子入力及びＤＢＲＥＳＭＲＱ３端子入力を停止する。
【０２４５】
このように、実施の形態２では、仮想プロセッサＶＣＰＵｘに属するスレッドＨＴｘがデバッグ処理を終了し、ＤＢＳｕｓｐｅｎｄｘ状態からＵＳＥＲｘ状態へ遷移する際には、これらのスレッドＨＴｘに対応するＤＢＲＥＳＭＲＱｘ端子を同時にアクティブにする。これにより、仮想プロセッサＶＣＰＵｘに属するスレッドＨＴｘがＵＳＥＲｘ状態に遷移する。
【０２４６】
最後に、図２４のタイミングチャートを用いて、仮想プロセッサＶＣＰＵ０に属するスレッドＨＴ０及びＨＴ１においてユーザプログラムを実行しつつ、仮想プロセッサＶＣＰＵ１に属するスレッドＨＴ２及びＨＴ３を略同時にデバッグする場合の仮想マルチプロセッサシステム２００の動作例について説明する。
【０２４７】
時刻ｔ０：スレッドＨＴ０乃至ＨＴ３は、ＵＳＥＲ０状態、ＵＳＥＲ１状態、ＵＳＥＲ２状態及びＵＳＥＲ３状態にあり、それぞれユーザプログラムを実行している。
【０２４８】
時刻ｔ１：ツール２４０が、ユーザの要求に応じ、ＤＢＳＵＳＰＲＱ１端子をアクティブにする。又は、スレッドＨＴ２又はＨＴ３が、ユーザプログラムのＤＢＴＲＡＰ命令を実行する。これに応じ、スレッドＨＴ２及びＨＴ３は同時にＤＢＳｕｓｐｅｎｄ２状態及びＤＢＳｕｓｐｅｎｄ３状態に遷移する。
【０２４９】
時刻ｔ２：ツール２４０は、スレッドＨＴ３がＤＢＳｕｓｐｅｎｄ３状態に遷移したことを確認した後、まずＤＢＩＮＴ１端子を、つづいてＤＢＲＥＳＭＲＱ３端子をアクティブにする。これに応じ、スレッドＨＴ３はＤＢ３状態に遷移する。また、スレッドＨＴ３はＤＢＰＣレジスタ２２０にＰＣ値を格納する。スレッドＨＴ３はデバッグモニタプログラムを実行可能となる。
【０２５０】
時刻ｔ３：スレッドＨＴ３が、デバッグモニタプログラムのＤＢＲＥＴ命令を実行する。これに応じ、スレッドＨＴ３はＤＢＳｕｓｐｅｎｄ３状態に遷移する。このとき、スレッドＨＴ３はＤＢＰＣレジスタ２２０からＰＣ値を取得する。
【０２５１】
時刻ｔ４：ツール２４０は、スレッドＨＴ２がＤＢＳｕｓｐｅｎｄ２状態にあることを確認した後、まずＤＢＩＮＴ１端子を、つづいてＤＢＲＥＳＭＲＱ２端子をアクティブにする。これに応じ、スレッドＨＴ２はＤＢ２状態に遷移する。また、スレッドＨＴ２はＤＢＰＣレジスタ２２０にＰＣ値を格納する。スレッドＨＴ２はデバッグモニタプログラムを実行可能となる。
【０２５２】
時刻ｔ５：スレッドＨＴ２が、デバッグモニタプログラムのＤＢＲＥＴ命令を実行する。これに応じ、スレッドＨＴ２はＤＢＳｕｓｐｅｎｄ２状態に遷移する。このとき、スレッドＨＴ２はＤＢＰＣレジスタ２２０からＰＣ値を取得する。
【０２５３】
時刻ｔ６：ツール２４０が、ユーザの要求に応じ、ＤＢＲＥＳＭＲＱ２端子とＤＢＲＥＳＭＲＱ３端子をアクティブにする。これに応じ、スレッドＨＴ２及びＨＴ３がＵＳＥＲ２状態及びＵＳＥＲ３状態に復帰する。
【０２５４】
本実施の形態では、ハードウェアマルチスレッド対応の仮想マルチプロセッサにおいて、ＤＢＳｕｓｐｅｎｄｘ状態からＤＢｘ状態に移る直前のハードウェアスレッドのＰＣ値を退避させるための一時記憶領域として、全てのハードウェアスレッドにより共有されるＤＢＰＣレジスタ２２０を設けた。
【０２５５】
そして、ツール２４０が、ＤＢＳｕｓｐｅｎｄｘ状態からＤＢｘ状態に遷移するハードウェアスレッドの数が、ＤＢＰＣレジスタ２２０の数、すなわち本実施の形態においては１を超えないよう制御する。
【０２５６】
よって、ユーザは、複数のハードウェアスレッドについて、ＤＢＰＣレジスタ２２０の競合を意識することなく、デバッグ処理の開始を指示することができる。
【０２５７】
また、このような構成によれば、あるハードウェアスレッドでのデバッグ中に、他のハードウェアスレッドにスケジュールが切替えられたとしても、ＰＣ値が上書きされることがない。よって、複数のハードウェアスレッドのうち、あるハードウェアスレッドがデバッグ状態であっても、デバッグ要求が発生していない他のハードウェアスレッド（例えば、図２４におけるＨＴ０、ＨＴ１など）は、ユーザプログラムの実行を続けることができる。
【０２５８】
すなわち、あるハードウェアスレッドＨＴｘの状態（ＵＳＥＲｘ状態、ＤＢＳｕｓｐｅｎｄｘ状態、ＤＢｘ状態）が、他のハードウェアスレッドＨＴｘの状態に影響しないので、ユーザは、複数のハードウェアスレッドＨＴｘについて、ユーザプログラムの実行やデバッグ処理を略同時に行うことができる。
【０２５９】
＜その他の実施の形態＞
なお、本発明は上述した実施の形態のみに限定されるものではなく、本発明の要旨を逸脱しない範囲において種々の変更が可能であることは勿論である。
【０２６０】
例えば、上述の実施の形態では、本発明を主にハードウェアにより構成されるものとして説明したが、これに限定されるものではなく、任意の構成要素を、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）にコンピュータプログラムを実行させることにより論理的に実現することも可能である。この場合、コンピュータプログラムは、様々なタイプの非一時的なコンピュータ可読媒体（ｎｏｎ−ｔｒａｎｓｉｔｏｒｙ  ｃｏｍｐｕｔｅｒ  ｒｅａｄａｂｌｅ  ｍｅｄｉｕｍ）を用いて格納され、コンピュータに供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体（ｔａｎｇｉｂｌｅ  ｓｔｏｒａｇｅ  ｍｅｄｉｕｍ）を含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体（例えばフレキシブルディスク、磁気テープ、ハードディスクドライブ）、光磁気記録媒体（例えば光磁気ディスク）、ＣＤ−ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＣＤ−Ｒ、ＣＤ−Ｒ／Ｗ、半導体メモリ（例えば、マスクＲＯＭ、ＰＲＯＭ（Ｐｒｏｇｒａｍｍａｂｌｅ  ＲＯＭ）、ＥＰＲＯＭ（Ｅｒａｓａｂｌｅ  ＰＲＯＭ）、フラッシュＲＯＭ、ＲＡＭ（ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ））を含む。また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体（ｔｒａｎｓｉｔｏｒｙ  ｃｏｍｐｕｔｅｒ  ｒｅａｄａｂｌｅ  ｍｅｄｉｕｍ）によってコンピュータに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の有線通信路、又は無線通信路を介して、プログラムをコンピュータに供給できる。
【符号の説明】
【０２６１】
１００  物理プロセッサ
１１０  論理プロセッサ
１１１  論理プロセッサ
１１２  論理プロセッサ
１１３  論理プロセッサ
１２０  ディスパッチ部
１２１  スケジュール部
１２２  コンテキストスイッチ部
１２３  セーブ部
１２４  リストア部
１３０  保管部
１３１  保管部
１３２  保管部
１３３  保管部
１４０  割込み部
２００  仮想マルチプロセッサシステム
２１０  物理プロセッサ
２２０  レジスタ（ＤＢＰＣレジスタ）
２３０  スケジューラ／ディスパッチャ
２４０  ツール
２４１  ツールＩ／Ｆ
２４２  ＰＣコマンド解析部
２４３  ＣＰＵ制御部
２４４  一時保管領域
２４５  デバッグＩ／Ｆ
２５０  ＰＣ
２６０  ＤＢ＿ＳＴＡＴレジスタ
２７０  ＤＢ例外用メモリ
３００  仮想マルチプロセッサシステム
【図１】
2013254318.tif 000003
【図２】
2013254318.tif 000004
【図３】
2013254318.tif 000005
【図４】
2013254318.tif 000006
【図５】
2013254318.tif 000007
【図６】
2013254318.tif 000008
【図７】
2013254318.tif 000009
【図８】
2013254318.tif 000010
【図９】
2013254318.tif 000011
【図１０（ａ）】
2013254318.tif 000012
【図１０（ｂ）】
2013254318.tif 000013
【図１０（ｃ）】
2013254318.tif 000014
【図１１】
2013254318.tif 000015
【図１２】
2013254318.tif 000016
【図１３】
2013254318.tif 000017
【図１４】
2013254318.tif 000018
【図１５】
2013254318.tif 000019
【図１６】
2013254318.tif 000020
【図１７（ａ）】
2013254318.tif 000021
【図１７（ｂ）】
2013254318.tif 000022
【図１８】
2013254318.tif 000023
【図１９】
2013254318.tif 000024
【図２０】
2013254318.tif 000025
【図２１】
2013254318.tif 000026
【図２２（ａ）】
2013254318.tif 000027
【図２２（ｂ）】
2013254318.tif 000028
【図２２（ｃ）】
2013254318.tif 000029
【図２３】
2013254318.tif 000030
【図２４】
2013254318.tif 000031
【図２５】
2013254318.tif 000032
【図２６】
2013254318.tif 000033