JP2013254318A - 仮想マルチプロセッサシステム、仮想マルチプロセッサの制御方法及び仮想マルチプロセッサの制御プログラム - Google Patents

仮想マルチプロセッサシステム、仮想マルチプロセッサの制御方法及び仮想マルチプロセッサの制御プログラム Download PDF

Info

Publication number
JP2013254318A
JP2013254318A JP2012128995A JP2012128995A JP2013254318A JP 2013254318 A JP2013254318 A JP 2013254318A JP 2012128995 A JP2012128995 A JP 2012128995A JP 2012128995 A JP2012128995 A JP 2012128995A JP 2013254318 A JP2013254318 A JP 2013254318A
Authority
JP
Japan
Prior art keywords
virtual
state
debug
processor
mode
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2012128995A
Other languages
English (en)
Inventor
Kazuya Matsukawa
和哉 松川
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Renesas Electronics Corp
Original Assignee
Renesas Electronics Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Renesas Electronics Corp filed Critical Renesas Electronics Corp
Priority to JP2012128995A priority Critical patent/JP2013254318A/ja
Publication of JP2013254318A publication Critical patent/JP2013254318A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

【課題】デバッグ用資源を抑制し、複数の仮想プロセッサのデバッグ処理を略同時に行う仮想マルチプロセッサシステム、その制御プログラム及び仮想マルチプロセッサの制御方法を提供する。
【解決手段】仮想マルチプロセッサシステム200は、複数の仮想プロセッサが時分割で割り当てられる物理プロセッサ210、仮想プロセッサにより共通に利用されるレジスタ220を有する。各仮想プロセッサは、ユーザプログラムを実行可能なユーザモード、ユーザプログラムの処理を行わない第1のデバッグモード、デバッグ処理を実行可能な第2のデバッグモードを有し、第1のトリガに応じ、ユーザモードから第1のデバッグモードに遷移する。第2のデバッグモードの仮想プロセッサの数がレジスタ220の数を超えない場合に有効化される第2のトリガに応じ、第1のデバッグモードから第2のデバッグモードに遷移し、仮想プロセッサの状態情報をレジスタ220に格納する。
【選択図】図1

Description

本発明は、仮想マルチプロセッサシステム、仮想マルチプロセッサの制御方法及び仮想マルチプロセッサの制御プログラムに関し、例えばデバッグ用資源を抑制しつつ、複数の仮想プロセッサのデバッグ処理を略同時に行う技術に関する。
従来、仮想マルチプロセッサのデバッグ制御においては、複数の仮想プロセッサ毎にデバッグ用資源を設けることが一般的であった。したがって、仮想プロセッサの数が増えると、それに応じデバッグ用資源も増やす必要があり、そのコストが問題となっていた。
かかる問題を解決するため、特許文献1は、仮想プロセッサが物理プロセッサに割り当てられていないときにその仮想プロセッサの状態情報を保持する資源を、複数の仮想プロセッサ間で共用する方法を開示している。
特開2009−175960号公報
特許文献1記載の方法では、デバック処理を実行できる仮想プロセッサが1つに限られるという問題があった。
その他の課題と新規な特徴は、本明細書の記述及び添付図面から明らかになるであろう。
一実施の形態によれば、仮想マルチプロセッサシステムは、複数の仮想プロセッサが時分割で割り当てられ、前記仮想プロセッサの処理を実行する物理プロセッサと、前記複数の仮想プロセッサによって共通に利用されるレジスタとを有し、各々の前記複数の仮想プロセッサは、ユーザプログラムを実行可能なユーザモードと、ユーザプログラムの処理を行わない第1のデバッグモードと、デバッグ処理を実行可能な第2のデバッグモードとを有し、第1のトリガの入力に応じて、前記ユーザモードから、前記第1のデバッグモードに遷移し、前記第2のデバッグモードの前記仮想プロセッサの数が前記レジスタの数を超えない場合に有効化される第2のトリガの入力に応じて、前記第1のデバッグモードから、前記第2のデバッグモードに遷移し、前記仮想プロセッサの状態を示す状態情報を前記レジスタに格納するものである。
他の実施の形態によれば、仮想マルチプロセッサシステムは、複数の仮想プロセッサが有する複数のスレッドが時分割で割り当てられ、前記スレッドの処理を実行する物理プロセッサと、前記複数のスレッドによって共通に利用されるレジスタとを有し、各々の前記複数のスレッドは、ユーザプログラムを実行可能なユーザモードと、ユーザプログラムの処理を行わない第1のデバッグモードと、デバッグ処理を実行可能な第2のデバッグモードとを有し、第1のトリガの入力に応じて、前記スレッドと同じ前記仮想プロセッサに属するすべてのスレッドが、前記ユーザモードから、前記第1のデバッグモードに遷移し、前記第2のデバッグモードの前記スレッドの数が前記レジスタの数を超えない場合に有効化される第2のトリガの入力に応じて、前記スレッドそれぞれが、前記第1のデバッグモードから、前記第2のデバッグモードに遷移し、前記スレッドの状態を示す状態情報を前記レジスタに格納するものである。
他の実施の形態によれば、仮想マルチプロセッサの制御方法は、物理プロセッサに時分割で割り当てられて処理を行う複数の仮想プロセッサの各々が、第1のトリガの入力に応じ、ユーザプログラムを実行可能なユーザモードから、ユーザプログラムの処理を行わない第1のデバッグモードに遷移するステップと、前記複数の仮想プロセッサの各々が、第2のトリガの入力に応じ、前記第1のデバッグモードから、デバッグ処理を実行可能な第2のデバッグモードに遷移するとともに、前記仮想プロセッサの状態を示す状態情報を、前記複数の仮想プロセッサによって共通に利用されるレジスタに格納するステップとを有するものである。
他の実施の形態によれば、仮想マルチプロセッサの制御方法は、物理プロセッサに時分割で割り当てられて処理を行う複数の仮想プロセッサに属する複数のスレッドの全てが、第1のトリガの入力に応じ、ユーザプログラムを実行可能なユーザモードから、ユーザプログラムの処理を行わない第1のデバッグモードに遷移するステップと、前記複数のスレッドそれぞれが、第2のトリガの入力に応じ、前記第1のデバッグモードから、デバッグ処理を実行可能な第2のデバッグモードに遷移するとともに、前記スレッドの状態を示す状態情報を、前記スレッドによって共通に利用されるレジスタに格納するステップとを有するものである。
他の実施の形態によれば、仮想マルチプロセッサの制御プログラムは、コンピュータに、物理プロセッサに時分割で割り当てられて処理を行う複数の仮想プロセッサの各々が、第1のトリガの入力に応じ、ユーザプログラムを実行可能なユーザモードから、ユーザプログラムの処理を行わない第1のデバッグモードに遷移するステップと、前記複数の仮想プロセッサの各々が、第2のトリガの入力に応じ、前記第1のデバッグモードから、デバッグ処理を実行可能な第2のデバッグモードに遷移するとともに、前記仮想プロセッサの状態を示す状態情報を、前記複数の仮想プロセッサによって共通に利用されるレジスタに格納するステップとを実行させるものである。
他の実施の形態によれば、仮想マルチプロセッサの制御プログラムは、コンピュータに、物理プロセッサに時分割で割り当てられて処理を行う複数の仮想プロセッサに属する複数のスレッドの全てが、第1のトリガの入力に応じ、ユーザプログラムを実行可能なユーザモードから、ユーザプログラムの処理を行わない第1のデバッグモードに遷移するステップと、前記複数のスレッドそれぞれが、第2のトリガの入力に応じ、前記第1のデバッグモードから、デバッグ処理を実行可能な第2のデバッグモードに遷移するとともに、前記スレッドの状態を示す状態情報を、前記スレッドによって共通に利用されるレジスタに格納するステップとを実行させるものである。
前記一実施の形態によれば、デバッグ用資源を抑制しつつ、複数の仮想プロセッサのデバッグ処理を略同時に行うことができる仮想マルチプロセッサシステム、仮想マルチプロセッサの制御方法及び仮想マルチプロセッサの制御プログラムを提供することができる。
実施の形態1にかかる仮想マルチプロセッサシステム200の構成を示す図である。 実施の形態1にかかる仮想マルチプロセッサシステム200の構成を示す図である。 実施の形態1における仮想プロセッサの状態遷移を示す図である。 実施の形態1におけるDB_STATレジスタの例を示す図である。 実施の形態1におけるDBPCレジスタの利用例を示す図である。 実施の形態1にかかる仮想マルチプロセッサシステム200の処理を示す図である。 実施の形態1にかかる仮想マルチプロセッサシステム200の処理を示す図である。 実施の形態1にかかる仮想マルチプロセッサシステム200の処理を示す図である。 実施の形態1にかかる仮想マルチプロセッサシステム200の処理を示す図である。 実施の形態1にかかる仮想マルチプロセッサシステム200の処理を示す図である。 実施の形態1にかかる仮想マルチプロセッサシステム200の処理を示す図である。 実施の形態1にかかる仮想マルチプロセッサシステム200の処理を示す図である。 実施の形態1にかかる仮想マルチプロセッサシステム200の処理を示す図である。 実施の形態1にかかる仮想マルチプロセッサシステム200の処理を示す図である。 実施の形態2にかかる仮想マルチプロセッサシステム300の構成を示す図である。 実施の形態2におけるスレッドの状態遷移を示す図である。 実施の形態2におけるDB_STATレジスタの例を示す図である。 実施の形態2におけるDBPCレジスタの利用例を示す図である。 実施の形態2にかかる仮想マルチプロセッサシステム300の処理を示す図である。 実施の形態2にかかる仮想マルチプロセッサシステム300の処理を示す図である。 実施の形態2にかかる仮想マルチプロセッサシステム300の処理を示す図である。 実施の形態2にかかる仮想マルチプロセッサシステム300の処理を示す図である。 実施の形態2にかかる仮想マルチプロセッサシステム300の処理を示す図である。 実施の形態2にかかる仮想マルチプロセッサシステム300の処理を示す図である。 実施の形態2にかかる仮想マルチプロセッサシステム300の処理を示す図である。 実施の形態2にかかる仮想マルチプロセッサシステム300の処理を示す図である。 実施の形態2にかかる仮想マルチプロセッサシステム300の処理を示す図である。 実施の形態2にかかる仮想マルチプロセッサシステム300の処理を示す図である。 実施の形態2にかかる仮想マルチプロセッサシステム300の処理を示す図である。 従来の仮想マルチプロセッサシステムの図である。 従来の仮想マルチプロセッサシステムの図である。
はじめに、本発明の実施の形態の理解を容易にするため、図25及び図26を用いて、特許文献1記載の発明における上述の問題の発生機序について説明する。
図25に、特許文献1記載の仮想マルチプロセッサシステムの構成を示す。
物理プロセッサ100は、通常処理又は割込み処理を実行する実際に存在するプロセッサである。論理プロセッサ110乃至113はそれぞれ、物理プロセッサ100上で通常処理又は割込み処理が実行されることにより実現される仮想的なプロセッサである。保管部130乃至133はそれぞれ、論理プロセッサ110乃至113の処理が物理プロセッサ100上で実行されていない間、それらの論理プロセッサの状態を保持するための記憶装置である。例えば、保管部130は論理プロセッサ110の状態を保持する。ディスパッチ部120は、物理プロセッサ100への論理プロセッサ110乃至113の割り当て処理を行なう処理部であり、スケジュール部121と、コンテキストスイッチ部122とを含む。スケジュール部121は、現在物理プロセッサ100に割り当てられていない論理プロセッサ111乃至113の中から物理プロセッサ100に対して次に割り当てる論理プロセッサを決定する処理部である。
図26に、物理プロセッサ100上で論理プロセッサ110が実行中にデバッグ割込み要求信号141が発生した場合の動作を示す。
割込み部140が、デバッグ割込み要求信号141を論理プロセッサ110に対して発生させる。これを物理プロセッサ100が受理する。物理プロセッサ100がデバッグ割込み要求信号141を受理した時点で、物理プロセッサ100は、デバッグ割込み受理通知101をスケジュール部121へ出力する。スケジュール部121は、デバッグ割込み受理通知101を受けると、コンテキストスイッチ部122に対して、入れ替え動作指示125を発行し、セーブ部123を起動し、プロセッサ状態102を保管部130に退避する。物理プロセッサ100上の論理プロセッサ110は、デバッグ割込み要求信号141に対する割込み処理の実行を継続する。また、これと並行して、スケジュール部121は、コンテキストスイッチ部122に対する入れ替え動作指示125の発行が禁止された状態へ遷移する。デバッグ割込み要求信号141に対する割込み処理が完了した事を示すデバッグ割込み処理からの復帰指示104が、物理プロセッサ100(論理プロセッサ110)からスケジュール部121に対して発行されると、入れ替え動作指示125が発行される。
ここで、デバッグ対象となる論理プロセッサ110のプロセッサ状態102を保管部130に退避すると、ディスパッチ部120が論理プロセッサの切替えを禁止し、保管部130の上書きが発生しないようにする。そのため、この間は物理プロセッサ100が論理プロセッサ110のデバッグ処理に占有されてしまい、他の論理プロセッサが動作できない。すなわち、複数の論理プロセッサを同時にデバッグすることができないという上述の問題が発生する。
以下、本発明を適用した具体的な実施の形態について、図面を参照しながら詳細に説明する。
<実施の形態1>
図1を用いて、本発明の実施の形態1にかかる仮想マルチプロセッサシステム200の構成について説明する。
仮想マルチプロセッサシステム200は、少なくとも物理プロセッサ210、レジスタ220を含む。物理プロセッサ210は、制御プログラムに基づいて所定の処理を実行する演算装置であり、本実施の形態では複数の仮想プロセッサの処理を時分割で実行する。レジスタ220は、複数の仮想プロセッサによって共用される記憶装置であって、本実施の形態では仮想プロセッサの状態を示す状態情報を格納する。
仮想プロセッサは、所定のトリガに応じて、ユーザプログラムの処理を行わない第1のデバッグモード及びデバッグ処理を実行可能な第2のデバッグモードに遷移するとともに、第2のデバッグモードに遷移する際はその仮想プロセッサの状態情報をレジスタ220に格納する処理を行う。
つぎに、図2乃至図5を用いて、仮想マルチプロセッサシステム200のより具体的な実装例と、その動作の概念とを説明する。
本実施の形態では、4つの仮想プロセッサVCPUx(xは0乃至3)が、物理プロセッサ210上で動作するものとする。具体的には、スケジューラ/ティスパッチャ230が、スケジュールに従って、仮想プロセッサVCPUxを物理プロセッサ210に割り当てる。物理CPU210は、スケジュールが割り当てられている1以上の仮想プロセッサVCPUxの処理を時分割で並行して実行する。
仮想プロセッサVCPUxは、スケジュールが割り当てられている間、つぎの3つの状態のいずれかにとどまるものとする。すなわち、ユーザプログラムを実行可能なUSERx状態(xは0乃至3)、ユーザプログラムの実行を停止したDBSuspendx状態(xは0乃至3)、及びデバッグ処理のためのデバッグモニタプログラムを実行可能なDBx状態(xは0乃至3)である。
DB_STATレジスタ260は、仮想プロセッサVCPUxそれぞれの現在の状態を示す情報を保持する。仮想プロセッサVCPUxは、状態を遷移した際に、DB_STATレジスタ260の内容を更新する。
レジスタ220としてのDBPCレジスタ220は、DBx状態に遷移した仮想プロセッサVCPUxの遷移前の状態を示す状態情報としてのPC値を保持する。仮想プロセッサVCPUxは、DBSuspendx状態からDBx状態に遷移する際に、自身のPC値をDBPCレジスタ220に格納する。また、仮想プロセッサVCPUxは、DBx状態からDBSuspendx状態に遷移する際に、PC値をDBPCレジスタ220から取り出す。
ツール240は、ユーザの端末としてのPC250が発行するコマンドに応じ、仮想プロセッサVCPUxに対して、状態遷移のトリガとなる各種端子入力を有効化する等の処理を行う。ツール240は、PC250からのコマンド入力インタフェースとなるツールI/F241、コマンドを解析するPCコマンド解析部242、各種端子入力の有効化等を行うCPU制御部243、一時保管領域244、及びデバッグモニタプログラムの実行の際に利用されるDB例外用メモリ270とのインタフェースとなるデバッグI/F245を有する。
図3に、仮想プロセッサVCPUxが上記3つの状態をどのように遷移するかを示す。
仮想プロセッサVCPUxは、実行開始直後はUSERx状態となる。
仮想プロセッサVCPUxは、DBSUSPRQx(xは0乃至3)端子入力に応じ、USERx状態からDBSuspendx状態に遷移する。DBSUSPRQx端子入力は、ユーザの指示により入力される。より具体的には、ユーザの端末であるPC250が発行するコマンドに応じ、ツール240がDBSUSPRQx端子をアクティブにする。
また、仮想プロセッサVCPUxは、ユーザプログラムに含まれているDBTRAP命令の実行に応じて、USERx状態からDBSuspendx状態に遷移することもできる。
仮想プロセッサVCPUxは、DBRESMRQx(xは0乃至3)端子入力に応じ、DBSuspendx状態からUSERx状態に遷移する。なお、DBRESMRQx端子入力が有効となったとき、DBINTx(xは0乃至3)端子入力も有効である場合には、仮想プロセッサVCPUxは、DBSuspendx状態からDBx状態に遷移する。DBRESMRQx端子入力、DBINTx端子入力は、ユーザの指示により入力される。より具体的には、ユーザの端末であるPC250が発行するコマンドに応じ、ツール240がDBRESMRQx端子、DBINTx端子をアクティブにする。
仮想プロセッサVCPUxは、デバッグモニタプログラムに含まれているDBRET命令の実行に応じて、DBx状態からDBSuspendx状態に遷移する。
図4に、DB_STATレジスタ206の一例を示す。
DB_STATレジスタ206は、仮想プロセッサVCPUxそれぞれの現在の状態を表す情報として、DBx(xは0乃至3)ビットと、DBSSx(xは0乃至3)ビットとの組を保持する。本実施の形態では、DBxビット=0かつDBSSxビット=0であるとき、仮想プロセッサVCPUxがUSERx状態にあることを意味する。DBxビット=0かつDBSSxビット=1であるとき、仮想プロセッサVCPUxがDBSuspendx状態にあることを意味する。DBxビット=1かつDBSSxビット=0のとき、仮想プロセッサVCPUxはDBx状態にあることを意味する。なお、DBxビット=1かつDBSSxビット=1となることは想定されていない。
仮想プロセッサVCPUxは、状態を遷移したとき、DBxビット及びDBSSxビットを、遷移した状態を示す値に更新する。
図5に、仮想プロセッサVCPUxがDBPCレジスタ220との間でPC値の格納及び取得を行う様子を示す。
仮想プロセッサVCPUxは、DBINTx端子入力及びDBRESMRQx端子入力に応じて、DBSuspendx状態からDBx状態に遷移する。このとき、仮想プロセッサVCPUxは、DBPCレジスタ220に仮想プロセッサVCPUxのPC情報を格納し、保管しておく。ついで、仮想プロセッサVCPUxは、DBRET命令の実行に応じて、DBx状態からDBSuspendx状態に遷移する。このとき、仮想プロセッサVCPUxは、DBPCレジスタ220から仮想プロセッサVCPUxのPC情報を取り出す。
本実施の形態では、ツール240によって、DBx状態に遷移する仮想プロセッサVCPUxの数は、DBPCレジスタ220の数を超えないよう制御される。本実施の形態ではDBPCレジスタ220は1つであるから、DBx状態に遷移する仮想プロセッサVCPUxの数は1を超えないように制御される。そのため、仮想プロセッサVCPUxの数より少ないDBPCレジスタ220で、すべての仮想プロセッサVCPUxのPC値を保持することができる。換言すれば、複数の仮想プロセッサVCPUxによって、DBPCレジスタ220が共用される。
つづいて、図6乃至図11のフローチャートを用いて、仮想マルチプロセッサシステム200の動作について詳細に説明する。
まず、図6を用いて、仮想プロセッサVCPUxがデバッグ処理を行うため状態遷移を行う際の動作を説明する。ここでは、仮想プロセッサVCPU3を例として説明する。
S101:仮想プロセッサVCPU3は、USER3状態でユーザプログラムを実行している。
S102:仮想プロセッサVCPU3が、ユーザプログラムに含まれていたDBTRAP命令を実行する。
S103:ユーザが、何らかの理由によりデバッグ処理の実行を所望したため、ユーザの端末であるPC250を用いて、ツール240に対し、仮想プロセッサVCPU3をDBSuspend3状態にすべき旨のコマンドを送出する。これに応じ、ツール240は、DBSUSPRQ3端子をアクティブにする。
仮想プロセッサVCPU3は、このDBSUSPRQ3端子入力を検出する。
S104:S102又はS103に応じ、仮想プロセッサVCPU3は、DBSuspend3状態に遷移する。
ここで、ツール240は、DBSUSPRQ3端子をアクティブにした後、DB_STATレジスタ260を監視し、DB3=0かつDBSS3=1となったこと、すなわち仮想プロセッサVCPU3がDBSuspend3状態に移行したことを確認する。ツール240は、このことが確認できたなら、DBINT3端子をアクティブにし、つづけてDBRESMRQ3端子をアクティブにする。
S105乃至S107:仮想プロセッサVCPU3は、DBRESMRQ3端子入力、及びDBINT3端子入力を検出すると、DB3状態に遷移し、現在のPC値をDBPCレジスタ220に保存する。この後、仮想プロセッサVCPU3は、デバッグモニタプログラムを実行する。
S108:ユーザが、デバッグ処理を終了するため、デバッグモニタプログラムに含まれるDBRET命令の実行を指示する。
仮想プロセッサVCPU3は、この指示に応じてDBRET命令を実行し、DBPCレジスタ220からPC値を取得し、DBSuspend3状態に遷移する。これにより、仮想プロセッサVCPU3のPC値は、DB3状態に遷移する直前のPC値に復帰する。
S104乃至S106:ユーザが、ユーザプログラムの実行に戻るため、ツール240に対し、仮想プロセッサVCPU3をUSER3状態にすべき旨のコマンドを送出する。これに応じ、ツール240は、DBRESMRQ3端子をアクティブにする。
仮想プロセッサVCPU3は、このDBRESMRQ3端子入力を検出し、USER3状態に遷移する。すなわち、仮想プロセッサVCPU3は、上述の復帰したPC値で示されるユーザプログラムの実行状態に復帰する。
ここで、仮想プロセッサVCPU3がDBSuspend3状態に遷移するトリガは、DBTRAP命令(S102)又はDBSUSPRQ3端子入力(S103)のいずれであってもよい(図7参照)。DBTRAP命令は、ユーザプログラムの特定の命令に同期してデバッグ処理を行いたい場合に利用できる。例えば、ユーザプログラムの命令aを実行したタイミングで、特定の汎用レジスタ値を確認したい場合等である。これは、ユーザプログラムにおいて、特定の命令、例えば命令aの次にDBTRAP命令を記述することにより実現できる。一方、DBSUSPRQx端子入力は、ユーザプログラムの特定の命令には非同期で、ユーザの指示によってユーザプログラムの実行を中断したい場合に利用できる。例えば、仮想プロセッサVCPU3が暴走状態にあるなどの理由で、ユーザがデバッガのSTOPボタンを押した場合等である。
また、ここでは仮想プロセッサVCPU3においてデバッグ処理を行う例を説明したが、同様の手順により、他の仮想プロセッサVCPUxにおいてもデバッグ処理を行うことが可能である。
つぎに、図8乃至図11を用いて、ツール240の動作について説明する。
図8のフローチャートは、ツール240が、ユーザの端末であるPC250が発行するコマンドに応じて行う処理を示している。
S201:ツールI/F241が、PC250からコマンドを受信する。
S202:PCコマンド解析部242は、受信したコマンドの内容に応じ、ツール240がどのような処理を実行すべきかを決定する。
本実施の形態では、PC250及びツール240は、少なくとも以下の9つのコマンドをサポートしているものとする。
コマンドA−2:仮想プロセッサVCPU2のユーザプログラム実行を強制的に停止させる(DBSuspend2状態に遷移させる)。
コマンドA−3:仮想プロセッサVCPU3のユーザプログラム実行を強制的に停止させる(DBSuspend3状態に遷移させる)。
コマンドA−23:仮想プロセッサVCPU2及びVCPU3のユーザプログラム実行を略同時に強制的に停止させる(DBSuspend2状態及びDBSuspend3状態に遷移させる)。
コマンドB−2:仮想プロセッサVCPU2の汎用レジスタ:GRをダンプする(読み出す)。
コマンドB−3:仮想プロセッサVCPU3の汎用レジスタ:GRをダンプする(読み出す)。
コマンドB−23:仮想プロセッサVCPU2及びVCPU3の汎用レジスタ:GRをダンプする(読み出す)。
コマンドC−2:仮想プロセッサVCPU2でユーザプログラム実行を再開させる(USER2状態に復帰させる)。
コマンドC−3:仮想プロセッサVCPU2でユーザプログラム実行を再開させる(USER3状態に復帰させる)。
コマンドC−23:仮想プロセッサVCPU2及びVCPU3でユーザプログラム実行を再開させる(USER2状態及びUSER3状態に復帰させる)。
S203乃至S211:CPU制御部243は、上述の9つのコマンドの内容に応じた後述の処理を実行する。
図9に、コマンドA−2(S203)、コマンドA−3(S204)、コマンドA−23(S205)に対応する処理の内容を示す。
コマンドA−2に対する処理、すなわち仮想プロセッサVCPU2のユーザプログラム実行を強制的に停止させる(DBSuspend2状態に遷移させる)処理(S203):
S2031:CPU制御部243は、DBSUSPRQ2端子をアクティブにする。
S2032:CPU制御部243は、DB_STATレジスタ260の仮想プロセッサVCPU2に関する値、すなわちDB2及びDBSS2の値を一定時間毎に取得するなどして監視する。
S2033:DB_STATレジスタ260の値が、DB2=0かつDBSS2=1となったことが確認できたならば、すなわち仮想プロセッサVCPU2がDBSuspend2状態になったことが確認できたならば、CPU制御部243はDBSUSPRQ2端子入力を停止する。
コマンドA−3に対する処理、すなわち仮想プロセッサVCPU3のユーザプログラム実行を強制的に停止させる(DBSuspend3状態に遷移させる)処理(S204):
S2041:CPU制御部243は、DBSUSPRQ3端子をアクティブにする。
S2042:CPU制御部243は、DB_STATレジスタ260の仮想プロセッサVCPU3に関する値、すなわちDB3及びDBSS3の値を一定時間毎に取得するなどして監視する。
S2043:DB_STATレジスタ260の値が、DB3=0かつDBSS3=1となったことが確認できたならば、すなわち仮想プロセッサVCPU3がDBSuspend3状態になったことが確認できたならば、CPU制御部243はDBSUSPRQ3端子入力を停止する。
コマンドA−23に対する処理、すなわち仮想プロセッサVCPU2及びVCPU3のユーザプログラム実行を略同時に強制的に停止させる(DBSuspend2状態及びDBSuspend3状態に遷移させる)処理(S205):
S2051:CPU制御部243は、DBSUSPRQ2端子及びDBSUSPRQ3端子をアクティブにする。
S2052:CPU制御部243は、DB_STATレジスタ260の仮想プロセッサVCPU2に関する値、すなわちDB2及びDBSS2の値と、仮想プロセッサVCPU3に関する値、すなわちDB3及びDBSS3の値とを一定時間毎に取得するなどして監視する。
S2053:DB_STATレジスタ260の値が、DB2=0、DBSS2=1、DB3=0かつDBSS3=1となったことが確認できたならば、すなわち仮想プロセッサVCPU2及びVCPU3がDBSuspend2状態及びDBSuspend3状態になったことが確認できたならば、CPU制御部243はDBSUSPRQ2端子入力及びDBSUSPRQ3端子入力を停止する。
図10(a)乃至図10(c)に、コマンドB−2(S206)、コマンドB−3(S207)、コマンドB−23(S208)に対応する処理の内容を示す。
コマンドB−2に対する処理、すなわち仮想プロセッサVCPU2の汎用レジスタ:GRをダンプする(読み出す)処理(S206):
S2061:CPU制御部243は、DB_STATレジスタ260の値が、DB2=0かつDBSS2=1であること、すなわち仮想プロセッサVCPU2がDBSuspend2状態にあることを確認する。
S2062:仮想プロセッサVCPU2がDBSuspend2状態でない場合、CPU制御部243はエラー処理を行い、処理を終了する。
S2063:CPU制御部243は、デバッグモニタプログラムを、図示しない記憶部等からDB例外用メモリ270にダウンロードする。ここで、本実施の形態におけるデバッグモニタプログラムは、汎用レジスタ:GRの値を読み出し、DB例外用メモリ270のワーク領域に書き込む処理を実行するものとする。
S2064:CPU制御部243は、DBINT2端子をアクティブにする。
S2065:CPU制御部243は、DBRESMRQ2端子をアクティブにする。
S2066:CPU制御部243は、DB_STATレジスタ260のDB2及びDBSS2の値を一定時間毎に取得するなどして監視する。
S2067乃至S2068:DB_STATレジスタ260の値が、DB2=1かつDBSS2=0となったことが確認できたならば、すなわち仮想プロセッサVCPU2がDB2状態に遷移したことが確認できたならば、CPU制御部243はDBINT2端子入力及びDBRESMRQ端子入力を停止する。デバッグモニタプログラムの実行が開始される。
S2069:CPU制御部243は、DB_STATレジスタ260のDB2及びDBSS2の値を一定時間毎に取得するなどして監視する。
S20610:DB_STATレジスタ260の値が、DB2=0かつDBSS2=1となったことが確認できたならば、すなわち、デバッグモニタプログラムの実行が終了して、換言すればDBRET命令が実行された結果、仮想プロセッサVCPU2がDBSuspend2状態に遷移したことが確認できたならば、CPU制御部243は、DB例外用メモリ270のワーク領域から、汎用レジスタ:GRの値を読み出し、一時保管領域244に一時保管する。
S20611:CPU制御部243は、ツールI/F241を介して、一時保管領域244に保管した値をPC250に送信する。
コマンドB−3に対する処理、すなわち仮想プロセッサVCPU3の汎用レジスタ:GRをダンプする(読み出す)処理(S207):
S2071:CPU制御部243は、DB_STATレジスタ260の値が、DB3=0かつDBSS3=1であること、すなわち仮想プロセッサVCPU3がDBSuspend3状態にあることを確認する。
S2072:仮想プロセッサVCPU3がDBSuspend3状態でない場合、CPU制御部243はエラー処理を行い、処理を終了する。
S2073:CPU制御部243は、デバッグモニタプログラムを、図示しない記憶部等からDB例外用メモリ270にダウンロードする。
S2074:CPU制御部243は、DBINT3端子をアクティブにする。
S2075:CPU制御部243は、DBRESMRQ3端子をアクティブにする。
S2076:CPU制御部243は、DB_STATレジスタ260のDB3及びDBSS3の値を一定時間毎に取得するなどして監視する。
S2077乃至S2078:DB_STATレジスタ260の値が、DB3=1かつDBSS3=0となったことが確認できたならば、すなわち仮想プロセッサVCPU3がDB3状態に遷移したことが確認できたならば、CPU制御部243はDBINT3端子入力及びDBRESMRQ3端子入力を停止する。デバッグモニタプログラムの実行が開始される。
S2079:CPU制御部243は、DB_STATレジスタ260のDB3及びDBSS3の値を一定時間毎に取得するなどして監視する。
S20710:DB_STATレジスタ260の値が、DB3=0かつDBSS3=1となったことが確認できたならば、すなわち、デバッグモニタプログラムの実行が終了して、換言すればDBRET命令が実行された結果、仮想プロセッサVCPU3がDBSuspend3状態に遷移したことが確認できたならば、CPU制御部243は、DB例外用メモリ270のワーク領域から、汎用レジスタ:GRの値を読み出し、一時保管領域244に一時保管する。
S20711:CPU制御部243は、ツールI/F241を介して、一時保管領域244に保管した値をPC250に送信する。
コマンドB−23に対する処理、すなわち仮想プロセッサVCPU2及びVCPU3の汎用レジスタ:GRをダンプする(読み出す)処理(S208):
S2081:CPU制御部243は、DB_STATレジスタ260の値が、DB2=0かつDBSS2=1であること、すなわち仮想プロセッサVCPU2がDBSuspend2状態にあることを確認する。
S2082:仮想プロセッサVCPU2がDBSuspend2状態でない場合、CPU制御部243はエラー処理を行い、処理を終了する。
S2083:CPU制御部243は、デバッグモニタプログラムを、図示しない記憶部等からDB例外用メモリ270にダウンロードする。ここで、本実施の形態におけるデバッグモニタプログラムは、汎用レジスタ:GRの値を読み出し、DB例外用メモリ270のワーク領域に書き込む処理を実行するものとする。
S2084:CPU制御部243は、DBINT2端子をアクティブにする。
S2085:CPU制御部243は、DBRESMRQ2端子をアクティブにする。
S2086:CPU制御部243は、DB_STATレジスタ260のDB2及びDBSS2の値を一定時間毎に取得するなどして監視する。
S2087乃至S2088:DB_STATレジスタ260の値が、DB2=1かつDBSS2=0となったことが確認できたならば、すなわち仮想プロセッサVCPU2がDB2状態に遷移したことが確認できたならば、CPU制御部243はDBINT2端子入力及びDBRESMRQ2端子入力を停止する。デバッグモニタプログラムの実行が開始される。
S2089:CPU制御部243は、DB_STATレジスタ260のDB2及びDBSS2の値を一定時間毎に取得するなどして監視する。
S20810:DB_STATレジスタ260の値が、DB2=0かつDBSS2=1となったことが確認できたならば、すなわち、デバッグモニタプログラムの実行が終了して、換言すればDBRET命令が実行された結果、仮想プロセッサVCPU2がDBSuspend2状態に遷移したことが確認できたならば、CPU制御部243は、DB例外用メモリ270のワーク領域から、汎用レジスタ:GRの値を読み出し、一時保管領域244に一時保管する。
S20811:CPU制御部243は、DB_STATレジスタ260の値が、DB3=0かつDBSS3=1であること、すなわち仮想プロセッサVCPU3がDBSuspend3状態にあることを確認する。
S20812:仮想プロセッサVCPU3がDBSuspend3状態でない場合、CPU制御部243はエラー処理を行い、処理を終了する。
S20813:CPU制御部243は、デバッグモニタプログラムを、図示しない記憶部等からDB例外用メモリ270にダウンロードする。
S20814:CPU制御部243は、DBINT3端子をアクティブにする。
S20815:CPU制御部243は、DBRESMRQ3端子をアクティブにする。
S20816:CPU制御部243は、DB_STATレジスタ260のDB3及びDBSS3の値を一定時間毎に取得するなどして監視する。
S20817乃至S20818:DB_STATレジスタ260の値が、DB3=1かつDBSS3=0となったことが確認できたならば、すなわち仮想プロセッサVCPU3がDB3状態に遷移したことが確認できたならば、CPU制御部243はDBINT3端子入力及びDBRESMRQ3端子入力を停止する。デバッグモニタプログラムの実行が開始される。
S20819:CPU制御部243は、DB_STATレジスタ260のDB3及びDBSS3の値を一定時間毎に取得するなどして監視する。
S20820:DB_STATレジスタ260の値が、DB3=0かつDBSS3=1となったことが確認できたならば、すなわち、デバッグモニタプログラムの実行が終了して、換言すればDBRET命令が実行された結果、仮想プロセッサVCPU3がDBSuspend3状態に遷移したことが確認できたならば、CPU制御部243は、DB例外用メモリ270のワーク領域から、汎用レジスタ:GRの値を読み出し、一時保管領域244に一時保管する。
S20821:CPU制御部243は、ツールI/F241を介して、一時保管領域244に保管した値、すなわち仮想プロセッサVCPU2の汎用レジスタ:GRの値と、仮想プロセッサVCPU3の汎用レジスタ:GRの値とを、PC250に送信する。
図11に、コマンドC−2(S209)、コマンドC−3(S210)、コマンドC−23(S211)に対応する処理の内容を示す。
コマンドC−2に対する処理、すなわち仮想プロセッサVCPU2でユーザプログラム実行を再開させる(USER2状態に復帰させる)処理(S209):
S2091:CPU制御部243は、DBRESMRQ2端子をアクティブにする。
S2092:CPU制御部243は、DB_STATレジスタ260のDB2及びDBSS2の値を一定時間毎に取得するなどして監視する。
S2093:DB_STATレジスタ260の値が、DB2=0かつDBSS2=0となったことが確認できたならば、すなわち仮想プロセッサVCPU2がUSER2状態に遷移したことが確認できたならば、CPU制御部243はDBRESMRQ2端子入力を停止する。
コマンドC−3に対する処理、すなわち仮想プロセッサVCPU3でユーザプログラム実行を再開させる(USER3状態に復帰させる)処理(S210):
S2101:CPU制御部243は、DBRESMRQ3端子をアクティブにする。
S2102:CPU制御部243は、DB_STATレジスタ260のDB3及びDBSS3の値を一定時間毎に取得するなどして監視する。
S2103:DB_STATレジスタ260の値が、DB3=0かつDBSS3=0となったことが確認できたならば、すなわち仮想プロセッサVCPU3がUSER3状態に遷移したことが確認できたならば、CPU制御部243はDBRESMRQ3端子入力を停止する。
コマンドC−23に対する処理、すなわち仮想プロセッサVCPU2及びVCPU3でユーザプログラム実行を再開させる(USER2状態及びUSER3状態に復帰させる)処理(S211):
S2111:CPU制御部243は、DBRESMRQ2端子及びDBRESMRQ3端子をアクティブにする。
S2112:CPU制御部243は、DB_STATレジスタ260のDB2及びDBSS2の値と、DB3及びDBSS3の値とを一定時間毎に取得するなどして監視する。
S2113:DB_STATレジスタ260の値が、DB2=0、DBSS2=0、DB3=0かつDBSS3=0となったことが確認できたならば、すなわち仮想プロセッサVCPU2及びVCPU3がUSER2状態及びUSER3状態になったことが確認できたならば、CPU制御部243はDBRESMRQ2端子入力及びDBRESMRQ3端子入力を停止する。
最後に、図12のタイミングチャートを用いて、仮想プロセッサVCPU0及びVCPU1においてユーザプログラムを実行しつつ、仮想プロセッサVCPU3及びVCPU2を略同時にデバッグする場合の仮想マルチプロセッサシステム200の動作例について説明する。
時刻t0:仮想プロセッサVCPU0乃至VCPU3は、USER0状態、USER1状態、USER2状態及びUSER3状態にあり、それぞれユーザプログラムを実行している。
時刻t1:ツール240が、ユーザの要求に応じ、DBSUSPRQ3端子をアクティブにする。これに応じ、仮想プロセッサVCPU3はDBSuspend3状態に遷移する。
時刻t2:ツール240は、仮想プロセッサVCPU3がDBSuspend3状態に遷移したことを確認した後、まずDBINT3端子を、つづいてDBRESMRQ3端子をアクティブにする。これに応じ、仮想プロセッサVCPU3はDB3状態に遷移する。また、仮想プロセッサVCPU3はDBPCレジスタ220にPC値を格納する。仮想プロセッサVCPU3はデバッグモニタプログラムを実行可能となる。
時刻t3:仮想プロセッサVCPU2が、ユーザプログラムのDBTRAP命令を実行する。これに応じ、仮想プロセッサVCPU2はDBSuspend2状態に遷移する。
ここで、ツール240は、DBSuspendx状態からDBx状態に遷移する仮想プロセッサVCPUxの数が、DBPCレジスタ220の数、すなわち本実施の形態においては1を超えないよう制御する。すなわち、時刻t3以降においては、仮想プロセッサVCPU3はDB3状態にあるため、ツール240は、仮にPC250から仮想プロセッサVCPU2をDB2状態に移行させるべき旨のコマンドが入力されたとしても、仮想プロセッサVCPU3がDBSuspend3状態に復帰するまで、DBINT2端子入力及びDBRESMRQ2端子入力の有効化を待ち合わせる。
時刻t4:仮想プロセッサVCPU3が、デバッグモニタプログラムのDBRET命令を実行する。これに応じ、仮想プロセッサVCPU3はDBSuspend3状態に遷移する。このとき、仮想プロセッサVCPU3はDBPCレジスタ220からPC値を取得する。
時刻t5:ツール240は、仮想プロセッサVCPU2がDBSuspend2状態にあることを確認した後、まずDBINT2端子を、つづいてDBRESMRQ2端子をアクティブにする。これに応じ、仮想プロセッサVCPU2はDB2状態に遷移する。また、仮想プロセッサVCPU2はDBPCレジスタ220にPC値を格納する。仮想プロセッサVCPU2はデバッグモニタプログラムを実行可能となる。
時刻t6:ツール240が、ユーザの要求に応じ、DBRESMRQ3端子をアクティブにする。これに応じ、仮想プロセッサVCPU3がUSER3状態に復帰する。
本実施の形態では、DBSuspendx状態からDBx状態に移る直前の仮想プロセッサのPC値を退避させるための一時記憶領域として、全ての仮想プロセッサにより共有されるDBPCレジスタ220を設けた。
そして、ツール240が、DBSuspendx状態からDBx状態に遷移する仮想プロセッサの数が、DBPCレジスタ220の数、すなわち本実施の形態においては1を超えないよう制御する。
よって、ユーザは、複数の仮想プロセッサについて、DBPCレジスタ220の競合を意識することなく、デバッグ処理の開始を指示することができる。
また、このような構成によれば、ある仮想プロセッサでのデバッグ中に、他の仮想プロセッサにスケジュールが切替えられたとしても、PC値が上書きされることがない。よって、複数の仮想プロセッサのうち、ある仮想プロセッサがデバッグ状態であっても、デバッグ要求が発生していない他の仮想プロセッサ(例えば、図12におけるVCPU0、VCPU1など)は、ユーザプログラムの実行を続けることができる。
すなわち、ある仮想プロセッサVCPUxの状態(USERx状態、DBSuspendx状態、DBx状態)が、他の仮想プロセッサVCPUxの状態に影響しないので、ユーザは、複数の仮想プロセッサVCPUxについて、ユーザプログラムの実行やデバッグ処理を略同時に行うことができる。
<実施の形態2>
実施の形態2では、本発明をハードウェアマルチスレッド対応の仮想マルチプロセッサに適用した例を示す。
まず、図13乃至図16を用いて、実施の形態2にかかる仮想マルチプロセッサシステム300の実装例と、その動作の概念とを説明する。なお、実施の形態1と重複する部分については説明を省略する。
実施の形態2では、2つの仮想プロセッサVCPU0及びVCPU1が、物理プロセッサ210上で動作するものとする。仮想プロセッサVCPU0は、HT0とHT1の2つのハードウェアスレッドを有する。仮想プロセッサVCPU1は、HT2とHT3の2つのハードウェアスレッドを有する。スケジューラ/ティスパッチャ230は、仮想プロセッサVCPUx(xは0乃至1)及びスレッドHTx(xは0乃至3)のスケジュールに従って、HTxを物理プロセッサ210に割り当てる。物理CPU210は、スケジュールが割り当てられたHTxの処理を時分割で並行して実行する。
図14に、スレッドHTxが上記3つの状態をどのように遷移するかを示す。
スレッドHTxは、実行開始直後はUSERx状態となる。
スレッドHTxは、スレッドHTxが属する仮想プロセッサVCPUxに対するDBSUSPRQx(xは0乃至1)端子入力に応じ、USERx状態(xは0乃至3)からDBSuspendx状態(xは0乃至3)に遷移する。また、スレッドHTxは、DBTRAP命令に応じて、DBSuspendx状態に遷移することもできる。ここで、実施の形態2におけるDBTRAP命令は、命令を実行したスレッドHTxが属する仮想プロセッサVCPUxに属するすべてのスレッドHtxを、DBSuspendx状態に遷移させる機能を有するものとする。
スレッドHTxは、各スレッドHTxに対するDBRESMRQx(xは0乃至3)端子入力に応じ、DBSuspendx状態からUSERx状態に遷移する。なお、DBRESMRQx端子入力が有効となったとき、スレッドHTxが属する仮想プロセッサVCPUxに対するDBINTx(xは0乃至1)端子入力も有効である場合には、スレッドHTxは、DBSuspendx状態からDBx状態に遷移する。
スレッドHTxは、DBRET命令の実行に応じて、DBx状態からDBSuspendx状態に遷移する。
図15に、実施の形態2におけるDB_STATレジスタ206の一例を示す。
DB_STATレジスタ206は、スレッドHTxそれぞれの現在の状態を表す情報として、DBx(xは0乃至3)ビットと、DBSSx(xは0乃至3)ビットとの組を保持する。本実施の形態では、DBxビット=0かつDBSSxビット=0であるとき、スレッドHTxがUSERx状態にあることを意味する。DBxビット=0かつDBSSxビット=1であるとき、スレッドHTxがDBSuspendx状態にあることを意味する。DBxビット=1かつDBSSxビット=0のとき、スレッドHTxはDBx状態にあることを意味する。なお、DBxビット=1かつDBSSxビット=1となることは想定されていない。
スレッドHTxは、状態を遷移したとき、DBxビット及びDBSSxビットを、遷移した状態を示す値に更新する。
図16に、スレッドHTxがDBPCレジスタ220との間でPC値の格納及び取得を行う様子を示す。
スレッドHTxは、DBSuspendx状態からDBx状態に遷移する際、DBPCレジスタ220にスレッドHTxのPC情報を格納し、保管しておく。また、スレッドHTxは、DBx状態からDBSuspendx状態に遷移する際、DBPCレジスタ220からスレッドHTxのPC情報を取り出す。
つづいて、図17乃至図23のフローチャートを用いて、仮想マルチプロセッサシステム300の動作について詳細に説明する。
まず、図17(a)及び図17(b)を用いて、スレッドHTxがデバッグ処理を行うため状態遷移を行う際の動作を説明する。ここでは、スレッドHT2及びHT3を例として説明する。
HT2の動作:
S301:スレッドHT2は、USER2状態でユーザプログラムを実行している。
S302:スレッドHT2が属する仮想プロセッサVCPU1に属する、スレッドHT2又はスレッドHT3が、ユーザプログラムに含まれていたDBTRAP命令を実行する。
S303:ユーザが、PC250を用いて、ツール240に対し、仮想プロセッサVCPU1に属するスレッドHTxをDBSuspendx状態にすべき旨のコマンドを送出する。これに応じ、ツール240は、DBSUSPRQ1端子をアクティブにする。
スレッドHT2は、このDBSUSPRQ1端子入力を検出する。
S304:S302又はS303に応じ、スレッドHT2は、DBSuspend2状態に遷移する。
ツール240は、DB_STATレジスタ260を監視し、DB2=0かつDBSS2=1となったこと、すなわちスレッドHT2がDBSuspend2状態に移行したことを確認する。ツール240は、このことが確認できたなら、DBINT1端子をアクティブにし、つづけてDBRESMRQ2端子をアクティブにする。
S305乃至S307:スレッドHT2は、DBRESMRQ2端子入力、及びDBINT1端子入力を検出すると、DB2状態に遷移し、現在のPC値をDBPCレジスタ220に保存する。この後、スレッドHT2は、デバッグモニタプログラムを実行する。
S308:スレッドHT2は、デバッグモニタプログラムに含まれるDBRET命令を実行し、DBPCレジスタ220からPC値を取得し、DBSuspend2状態に遷移する。
S304乃至S306:ユーザが、ユーザプログラムの実行に戻るため、ツール240に対し、スレッドHT2をUSER2状態にすべき旨のコマンドを送出する。これに応じ、ツール240は、DBRESMRQ2端子をアクティブにする。
スレッドHT2は、このDBRESMRQ2端子入力を検出し、USER2状態に遷移する。
HT3の動作:
S401:スレッドHT3は、USER3状態でユーザプログラムを実行している。
S302:スレッドHT3が属する仮想プロセッサVCPU1に属する、スレッドHT2又はスレッドHT3が、ユーザプログラムに含まれていたDBTRAP命令を実行する。
S303:ユーザが、PC250を用いて、ツール240に対し、仮想プロセッサVCPU1に属するスレッドHTxをDBSuspendx状態にすべき旨のコマンドを送出する。これに応じ、ツール240は、DBSUSPRQ1端子をアクティブにする。
スレッドHT3は、このDBSUSPRQ1端子入力を検出する。
S404:S302又はS303に応じ、スレッドHT3は、DBSuspend3状態に遷移する。
ツール240は、DB_STATレジスタ260を監視し、DB3=0かつDBSS3=1となったこと、すなわちスレッドHT3がDBSuspend3状態に移行したことを確認する。ツール240は、このことが確認できたなら、DBINT1端子をアクティブにし、つづけてDBRESMRQ3端子をアクティブにする。
S405、S306及びS407:スレッドHT3は、DBRESMRQ3端子入力、及びDBINT1端子入力を検出すると、DB3状態に遷移し、現在のPC値をDBPCレジスタ220に保存する。この後、スレッドHT3は、デバッグモニタプログラムを実行する。
S408:スレッドHT3は、デバッグモニタプログラムに含まれるDBRET命令を実行し、DBPCレジスタ220からPC値を取得し、DBSuspend3状態に遷移する。
S404、S405及びS306:ユーザが、ユーザプログラムの実行に戻るため、ツール240に対し、スレッドHT3をUSER3状態にすべき旨のコマンドを送出する。これに応じ、ツール240は、DBRESMRQ3端子をアクティブにする。
スレッドHT3は、このDBRESMRQ3端子入力を検出し、USER3状態に遷移する。
ここで、HT2とHT3は、ステップS302乃至S303を共有している。これは、DBSUSPRQx端子入力が仮想プロセッサVCPUx単位であること、及びDBTRAP命令の効果が仮想プロセッサVCPUx単位に及ぶことによる。そのため、実施の形態2では、DBSUSPRQx端子入力又はDBTRAP命令の実行があると、当該端子入力がなされた仮想プロセッサVCPUxに属するすべてのスレッドHTx、又はDBTRAP命令を実行したスレッドHTxが属する仮想プロセッサVCPUxに属するスレッドHTxが、DBSuspendx状態に遷移する。
ここで、スレッドHTxがDBSuspendx状態に遷移するトリガは、DBTRAP命令(S302)又はDBSUSPRQx端子入力(S303)のいずれであってもよい(図18及び図19参照)。DBTRAP命令は、スレッドHTxが実行するユーザプログラムの特定の命令に同期してデバッグ処理を行いたい場合に利用できる。例えば、スレッドHT3が実行するユーザプログラムの命令cを実行したタイミングで、特定の汎用レジスタ値を確認したい場合等である。これは、ユーザプログラムにおいて、特定の命令、例えば命令cの次にDBTRAP命令を記述することにより実現できる。但し、この場合、スレッドHT3がDBSuspend3状態に遷移すると同時に、スレッドHT3が属する仮想プロセッサVCPU1に属する他のスレッドHT2もDBSuspend2状態に遷移するが、スレッドHT2にとっては、特定の命令に同期するものとはならない。
一方、DBSUSPRQx端子入力は、いかなるスレッドHTx、例えばスレッドHT2及びHT3のいずれのユーザプログラムの特定の命令にも非同期で、ユーザの指示によってユーザプログラムの実行を中断したい場合に利用できる。例えば、仮想プロセッサVCPU1が暴走状態にあるなどの理由で、ユーザがデバッガのSTOPボタンを押した場合等である。
また、ここではスレッドHT2及びHT3においてデバッグ処理を行う例を説明したが、同様の手順により、他のスレッドHTxにおいてもデバッグ処理を行うことが可能である。
つぎに、図20乃至図23を用いて、実施の形態2におけるツール240の動作について説明する。
図20のフローチャートは、ツール240が、PC250が発行するコマンドに応じて行う処理を示している。
S501:ツールI/F241が、PC250からコマンドを受信する。
S502:PCコマンド解析部242は、受信したコマンドの内容に応じ、ツール240がどのような処理を実行すべきかを決定する。
本実施の形態では、PC250及びツール240は、少なくとも以下の5つのコマンドをサポートしているものとする。
コマンドA2−23:仮想プロセッサVCPU1(スレッドHT2及びHT3)のユーザプログラム実行を強制的に停止させる(DBSuspend2状態及びDBSuspend3状態に遷移させる)。
コマンドB2−2:仮想プロセッサVCPU1のスレッドHT2の汎用レジスタ:GRをダンプする(読み出す)。
コマンドB2−3:仮想プロセッサVCPU1のスレッドHT3の汎用レジスタ:GRをダンプする(読み出す)。
コマンドB2−23:仮想プロセッサVCPU1のスレッドHT2及びHT3の汎用レジスタ:GRをダンプする(読み出す)。
コマンドC2−23:仮想プロセッサVCPU1のスレッドHT2及びHT3でユーザプログラム実行を再開させる(USER2状態及びUSER3状態に復帰させる)。
S503乃至S507:CPU制御部243は、上述の5つのコマンドの内容に応じた後述の処理を実行する。
図21に、A2−23に対する処理、すなわち仮想プロセッサVCPU1(スレッドHT2及びHT3)のユーザプログラム実行を強制的に停止させる(DBSuspend2状態及びDBSuspend3状態に遷移させる)処理(S503)の内容を示す。
S5031:CPU制御部243は、DBSUSPRQ1端子をアクティブにする。
S5032:CPU制御部243は、DB_STATレジスタ260のスレッドHT2及びHT3に関する値、すなわちDB2、DBSS2、DB3及びDBSS3の値を一定時間毎に取得するなどして監視する。
S5033:DB_STATレジスタ260の値が、DB2=0、DBSS2=1、DB3=0かつDBSS3=1となったことが確認できたならば、すなわちスレッドHT2及びHT3がDBSuspend2状態及びDBSuspend3状態になったことが確認できたならば、CPU制御部243はDBSUSPRQ1端子入力を停止する。
このように、実施の形態2では、USERx状態からDBSuspendx状態への遷移は、仮想プロセッサVCPUx単位で行われる。すなわち、仮想プロセッサVCPUxに属するすべてのスレッドHTxがともにDBSuspendx状態に遷移することとなる。
図22(a)乃至図22(c)に、コマンドB2−2(S504)、コマンドB2−3(S505)、コマンドB2−23(S506)に対応する処理の内容を示す。
コマンドB2−2に対する処理、すなわち仮想プロセッサVCPU1のスレッドHT2の汎用レジスタ:GRをダンプする(読み出す)処理(S504):
S5041:CPU制御部243は、DB_STATレジスタ260の値が、DB2=0かつDBSS2=1であること、すなわちスレッドHT2がDBSuspend2状態にあることを確認する。
S5042:スレッドHT2がDBSuspend2状態でない場合、CPU制御部243はエラー処理を行い、処理を終了する。
S5043:CPU制御部243は、デバッグモニタプログラムを、図示しない記憶部等からDB例外用メモリ270にダウンロードする。
S5044:CPU制御部243は、DBINT1端子をアクティブにする。
S5045:CPU制御部243は、DBRESMRQ2端子をアクティブにする。
S5046:CPU制御部243は、DB_STATレジスタ260のDB2及びDBSS2の値を一定時間毎に取得するなどして監視する。
S5047乃至S5048:DB_STATレジスタ260の値が、DB2=1かつDBSS2=0となったことが確認できたならば、すなわちスレッドHT2がDB2状態に遷移したことが確認できたならば、CPU制御部243はDBINT1端子入力及びDBRESMRQ2端子入力を停止する。デバッグモニタプログラムの実行が開始される。
S5049:CPU制御部243は、DB_STATレジスタ260のDB2及びDBSS2の値を一定時間毎に取得するなどして監視する。
S50410:DB_STATレジスタ260の値が、DB2=0かつDBSS2=1となったことが確認できたならば、すなわち、デバッグモニタプログラムの実行が終了して、換言すればDBRET命令が実行された結果、スレッドHT2がDBSuspend2状態に遷移したことが確認できたならば、CPU制御部243は、DB例外用メモリ270のワーク領域から、汎用レジスタ:GRの値を読み出し、一時保管領域244に一時保管する。
S50411:CPU制御部243は、ツールI/F241を介して、一時保管領域244に保管した値をPC250に送信する。
コマンドB2−3に対する処理、すなわち仮想プロセッサVCPU1のスレッドHT3の汎用レジスタ:GRをダンプする(読み出す)処理(S505):
S5051:CPU制御部243は、DB_STATレジスタ260の値が、DB3=0かつDBSS3=1であること、すなわちスレッドHT3がDBSuspend3状態にあることを確認する。
S5052:スレッドHT3がDBSuspend3状態でない場合、CPU制御部243はエラー処理を行い、処理を終了する。
S5053:CPU制御部243は、デバッグモニタプログラムを、図示しない記憶部等からDB例外用メモリ270にダウンロードする。
S5054:CPU制御部243は、DBINT1端子をアクティブにする。
S5055:CPU制御部243は、DBRESMRQ3端子をアクティブにする。
S5056:CPU制御部243は、DB_STATレジスタ260のDB3及びDBSS3の値を一定時間毎に取得するなどして監視する。
S5057乃至S5058:DB_STATレジスタ260の値が、DB3=1かつDBSS3=0となったことが確認できたならば、すなわちスレッドHT3がDB3状態に遷移したことが確認できたならば、CPU制御部243はDBINT1端子入力及びDBRESMRQ3端子入力を停止する。デバッグモニタプログラムの実行が開始される。
S5059:CPU制御部243は、DB_STATレジスタ260のDB3及びDBSS3の値を一定時間毎に取得するなどして監視する。
S50510:DB_STATレジスタ260の値が、DB3=0かつDBSS3=1となったことが確認できたならば、すなわち、デバッグモニタプログラムの実行が終了して、換言すればDBRET命令が実行された結果、スレッドHT3がDBSuspend3状態に遷移したことが確認できたならば、CPU制御部243は、DB例外用メモリ270のワーク領域から、汎用レジスタ:GRの値を読み出し、一時保管領域244に一時保管する。
S50511:CPU制御部243は、ツールI/F241を介して、一時保管領域244に保管した値をPC250に送信する。
コマンドB2−23に対する処理、すなわち仮想プロセッサVCPU1のスレッドHT2及びHT3の汎用レジスタ:GRをダンプする(読み出す)処理(S506):
S5061:CPU制御部243は、DB_STATレジスタ260の値が、DB2=0かつDBSS2=1であること、すなわちスレッドHT2がDBSuspend2状態にあることを確認する。
S5062:スレッドHT2がDBSuspend2状態でない場合、CPU制御部243はエラー処理を行い、処理を終了する。
S5063:CPU制御部243は、デバッグモニタプログラムを、図示しない記憶部等からDB例外用メモリ270にダウンロードする。
S5064:CPU制御部243は、DBINT1端子をアクティブにする。
S5065:CPU制御部243は、DBRESMRQ2端子をアクティブにする。
S5066:CPU制御部243は、DB_STATレジスタ260のDB2及びDBSS2の値を一定時間毎に取得するなどして監視する。
S5067乃至S5068:DB_STATレジスタ260の値が、DB2=1かつDBSS2=0となったことが確認できたならば、すなわちスレッドHT2がDB2状態に遷移したことが確認できたならば、CPU制御部243はDBINT1端子入力及びDBRESMRQ2端子入力を停止する。デバッグモニタプログラムの実行が開始される。
S5069:CPU制御部243は、DB_STATレジスタ260のDB2及びDBSS2の値を一定時間毎に取得するなどして監視する。
S50610:DB_STATレジスタ260の値が、DB2=0かつDBSS2=1となったことが確認できたならば、すなわち、デバッグモニタプログラムの実行が終了して、換言すればDBRET命令が実行された結果、スレッドHT2がDBSuspend2状態に遷移したことが確認できたならば、CPU制御部243は、DB例外用メモリ270のワーク領域から、汎用レジスタ:GRの値を読み出し、一時保管領域244に一時保管する。
S50611:CPU制御部243は、DB_STATレジスタ260の値が、DB3=0かつDBSS3=1であること、すなわちスレッドHT3がDBSuspend3状態にあることを確認する。
S50612:スレッドHT3がDBSuspend3状態でない場合、CPU制御部243はエラー処理を行い、処理を終了する。
S50613:CPU制御部243は、デバッグモニタプログラムを、図示しない記憶部等からDB例外用メモリ270にダウンロードする。
S50614:CPU制御部243は、DBINT1端子をアクティブにする。
S506815:CPU制御部243は、DBRESMRQ3端子をアクティブにする。
S50616:CPU制御部243は、DB_STATレジスタ260のDB3及びDBSS3の値を一定時間毎に取得するなどして監視する。
S50617乃至S50618:DB_STATレジスタ260の値が、DB3=1かつDBSS3=0となったことが確認できたならば、すなわちスレッドHT3がDB3状態に遷移したことが確認できたならば、CPU制御部243はDBINT1端子入力及びDBRESMRQ3端子入力を停止する。デバッグモニタプログラムの実行が開始される。
S50619:CPU制御部243は、DB_STATレジスタ260のDB3及びDBSS3の値を一定時間毎に取得するなどして監視する。
S50620:DB_STATレジスタ260の値が、DB3=0かつDBSS3=1となったことが確認できたならば、すなわち、デバッグモニタプログラムの実行が終了して、換言すればDBRET命令が実行された結果、スレッドHT3がDBSuspend3状態に遷移したことが確認できたならば、CPU制御部243は、DB例外用メモリ270のワーク領域から、汎用レジスタ:GRの値を読み出し、一時保管領域244に一時保管する。
S50621:CPU制御部243は、ツールI/F241を介して、一時保管領域244に保管した値、すなわちスレッドHT2の汎用レジスタ:GRの値と、スレッドHT3の汎用レジスタ:GRの値とを、PC250に送信する。
このように、実施の形態2では、DBSuspendx状態からDBx状態への遷移は、ツール240の制御により、スレッドHTx単位で行うことを可能としている。
図23に、コマンドC2−23に対する処理、すなわち仮想プロセッサVCPU1のスレッドHT2及びHT3でユーザプログラム実行を再開させる(USER2状態及びUSER3状態に復帰させる)処理(S507)の内容を示す:
S5071:CPU制御部243は、DBRESMRQ2端子及びDBRESMRQ3端子をアクティブにする。
S5072:CPU制御部243は、DB_STATレジスタ260のDB2及びDBSS2の値と、DB3及びDBSS3の値とを一定時間毎に取得するなどして監視する。
S5073:DB_STATレジスタ260の値が、DB2=0、DBSS2=0、DB3=0かつDBSS3=0となったことが確認できたならば、すなわちスレッドHT2及びHT3がUSER2状態及びUSER3状態になったことが確認できたならば、CPU制御部243はDBRESMRQ2端子入力及びDBRESMRQ3端子入力を停止する。
このように、実施の形態2では、仮想プロセッサVCPUxに属するスレッドHTxがデバッグ処理を終了し、DBSuspendx状態からUSERx状態へ遷移する際には、これらのスレッドHTxに対応するDBRESMRQx端子を同時にアクティブにする。これにより、仮想プロセッサVCPUxに属するスレッドHTxがUSERx状態に遷移する。
最後に、図24のタイミングチャートを用いて、仮想プロセッサVCPU0に属するスレッドHT0及びHT1においてユーザプログラムを実行しつつ、仮想プロセッサVCPU1に属するスレッドHT2及びHT3を略同時にデバッグする場合の仮想マルチプロセッサシステム200の動作例について説明する。
時刻t0:スレッドHT0乃至HT3は、USER0状態、USER1状態、USER2状態及びUSER3状態にあり、それぞれユーザプログラムを実行している。
時刻t1:ツール240が、ユーザの要求に応じ、DBSUSPRQ1端子をアクティブにする。又は、スレッドHT2又はHT3が、ユーザプログラムのDBTRAP命令を実行する。これに応じ、スレッドHT2及びHT3は同時にDBSuspend2状態及びDBSuspend3状態に遷移する。
時刻t2:ツール240は、スレッドHT3がDBSuspend3状態に遷移したことを確認した後、まずDBINT1端子を、つづいてDBRESMRQ3端子をアクティブにする。これに応じ、スレッドHT3はDB3状態に遷移する。また、スレッドHT3はDBPCレジスタ220にPC値を格納する。スレッドHT3はデバッグモニタプログラムを実行可能となる。
時刻t3:スレッドHT3が、デバッグモニタプログラムのDBRET命令を実行する。これに応じ、スレッドHT3はDBSuspend3状態に遷移する。このとき、スレッドHT3はDBPCレジスタ220からPC値を取得する。
時刻t4:ツール240は、スレッドHT2がDBSuspend2状態にあることを確認した後、まずDBINT1端子を、つづいてDBRESMRQ2端子をアクティブにする。これに応じ、スレッドHT2はDB2状態に遷移する。また、スレッドHT2はDBPCレジスタ220にPC値を格納する。スレッドHT2はデバッグモニタプログラムを実行可能となる。
時刻t5:スレッドHT2が、デバッグモニタプログラムのDBRET命令を実行する。これに応じ、スレッドHT2はDBSuspend2状態に遷移する。このとき、スレッドHT2はDBPCレジスタ220からPC値を取得する。
時刻t6:ツール240が、ユーザの要求に応じ、DBRESMRQ2端子とDBRESMRQ3端子をアクティブにする。これに応じ、スレッドHT2及びHT3がUSER2状態及びUSER3状態に復帰する。
本実施の形態では、ハードウェアマルチスレッド対応の仮想マルチプロセッサにおいて、DBSuspendx状態からDBx状態に移る直前のハードウェアスレッドのPC値を退避させるための一時記憶領域として、全てのハードウェアスレッドにより共有されるDBPCレジスタ220を設けた。
そして、ツール240が、DBSuspendx状態からDBx状態に遷移するハードウェアスレッドの数が、DBPCレジスタ220の数、すなわち本実施の形態においては1を超えないよう制御する。
よって、ユーザは、複数のハードウェアスレッドについて、DBPCレジスタ220の競合を意識することなく、デバッグ処理の開始を指示することができる。
また、このような構成によれば、あるハードウェアスレッドでのデバッグ中に、他のハードウェアスレッドにスケジュールが切替えられたとしても、PC値が上書きされることがない。よって、複数のハードウェアスレッドのうち、あるハードウェアスレッドがデバッグ状態であっても、デバッグ要求が発生していない他のハードウェアスレッド(例えば、図24におけるHT0、HT1など)は、ユーザプログラムの実行を続けることができる。
すなわち、あるハードウェアスレッドHTxの状態(USERx状態、DBSuspendx状態、DBx状態)が、他のハードウェアスレッドHTxの状態に影響しないので、ユーザは、複数のハードウェアスレッドHTxについて、ユーザプログラムの実行やデバッグ処理を略同時に行うことができる。
<その他の実施の形態>
なお、本発明は上述した実施の形態のみに限定されるものではなく、本発明の要旨を逸脱しない範囲において種々の変更が可能であることは勿論である。
例えば、上述の実施の形態では、本発明を主にハードウェアにより構成されるものとして説明したが、これに限定されるものではなく、任意の構成要素を、CPU(Central Processing Unit)にコンピュータプログラムを実行させることにより論理的に実現することも可能である。この場合、コンピュータプログラムは、様々なタイプの非一時的なコンピュータ可読媒体(non−transitory computer readable medium)を用いて格納され、コンピュータに供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体(tangible storage medium)を含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体(例えばフレキシブルディスク、磁気テープ、ハードディスクドライブ)、光磁気記録媒体(例えば光磁気ディスク)、CD−ROM(Read Only Memory)、CD−R、CD−R/W、半導体メモリ(例えば、マスクROM、PROM(Programmable ROM)、EPROM(Erasable PROM)、フラッシュROM、RAM(random access memory))を含む。また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体(transitory computer readable medium)によってコンピュータに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の有線通信路、又は無線通信路を介して、プログラムをコンピュータに供給できる。
100 物理プロセッサ
110 論理プロセッサ
111 論理プロセッサ
112 論理プロセッサ
113 論理プロセッサ
120 ディスパッチ部
121 スケジュール部
122 コンテキストスイッチ部
123 セーブ部
124 リストア部
130 保管部
131 保管部
132 保管部
133 保管部
140 割込み部
200 仮想マルチプロセッサシステム
210 物理プロセッサ
220 レジスタ(DBPCレジスタ)
230 スケジューラ/ディスパッチャ
240 ツール
241 ツールI/F
242 PCコマンド解析部
243 CPU制御部
244 一時保管領域
245 デバッグI/F
250 PC
260 DB_STATレジスタ
270 DB例外用メモリ
300 仮想マルチプロセッサシステム

Claims (13)

  1. 複数の仮想プロセッサが時分割で割り当てられ、前記仮想プロセッサの処理を実行する物理プロセッサと、
    前記複数の仮想プロセッサによって共通に利用されるレジスタとを有し、
    各々の前記複数の仮想プロセッサは、
    ユーザプログラムを実行可能なユーザモードと、ユーザプログラムの処理を行わない第1のデバッグモードと、デバッグ処理を実行可能な第2のデバッグモードとを有し、
    第1のトリガの入力に応じて、前記ユーザモードから、前記第1のデバッグモードに遷移し、
    前記第2のデバッグモードの前記仮想プロセッサの数が前記レジスタの数を超えない場合に有効化される第2のトリガの入力に応じて、前記第1のデバッグモードから、前記第2のデバッグモードに遷移し、前記仮想プロセッサの状態を示す状態情報を前記レジスタに格納する
    仮想マルチプロセッサシステム。
  2. 前記仮想プロセッサは、前記デバッグ処理の終了に応じ、前記レジスタから前記状態情報を読み出すとともに、前記第2のデバッグモードから、前記第1のデバッグモードに遷移する
    請求項1記載の仮想マルチプロセッサシステム。
  3. 前記仮想プロセッサは、第3のトリガの入力に応じ、前記第1のデバッグモードから、前記ユーザモードに遷移する
    請求項1又は2記載の仮想マルチプロセッサシステム。
  4. 前記第1のトリガは、前記仮想プロセッサが実行するユーザプログラムに含まれる第1の命令、又は前記仮想プロセッサに対する第1の端子入力である
    請求項1乃至3いずれか1項記載の仮想マルチプロセッサシステム。
  5. 前記第2のトリガは、前記仮想プロセッサに対する第2の端子入力である
    請求項1乃至4いずれか1項記載の仮想マルチプロセッサシステム。
  6. 前記第3のトリガは、前記仮想プロセッサに対する第3の端子入力である
    請求項1乃至5いずれか1項記載の仮想マルチプロセッサシステム。
  7. 前記第1のトリガとしての第1の端子入力、前記第2のトリガとしての第2の端子入力、及び前記仮想プロセッサを前記第1のデバッグモードから前記ユーザモードに遷移させる第3のトリガとして第3の端子入力の少なくとも1つを有効化するツール部をさらに含む
    請求項1乃至6いずれか1項記載の仮想マルチプロセッサシステム。
  8. 前記ツール部は、前記第2のデバッグモードに遷移する前記仮想プロセッサが、前記レジスタの数を超えないよう制御する
    請求項1乃至7いずれか1項記載の仮想マルチプロセッサシステム。
  9. 複数の仮想プロセッサが有する複数のスレッドが時分割で割り当てられ、前記スレッドの処理を実行する物理プロセッサと、
    前記複数のスレッドによって共通に利用されるレジスタとを有し、
    各々の前記複数のスレッドは、
    ユーザプログラムを実行可能なユーザモードと、ユーザプログラムの処理を行わない第1のデバッグモードと、デバッグ処理を実行可能な第2のデバッグモードとを有し、
    第1のトリガの入力に応じて、前記スレッドと同じ前記仮想プロセッサに属するすべてのスレッドが、前記ユーザモードから、前記第1のデバッグモードに遷移し、
    前記第2のデバッグモードの前記スレッドの数が前記レジスタの数を超えない場合に有効化される第2のトリガの入力に応じて、前記スレッドそれぞれが、前記第1のデバッグモードから、前記第2のデバッグモードに遷移し、前記スレッドの状態を示す状態情報を前記レジスタに格納する
    仮想マルチプロセッサシステム。
  10. 物理プロセッサに時分割で割り当てられて処理を行う複数の仮想プロセッサの各々が、第1のトリガの入力に応じ、ユーザプログラムを実行可能なユーザモードから、ユーザプログラムの処理を行わない第1のデバッグモードに遷移するステップと、
    前記複数の仮想プロセッサの各々が、第2のトリガの入力に応じ、前記第1のデバッグモードから、デバッグ処理を実行可能な第2のデバッグモードに遷移するとともに、前記仮想プロセッサの状態を示す状態情報を、前記複数の仮想プロセッサによって共通に利用されるレジスタに格納するステップとを有する
    仮想マルチプロセッサの制御方法。
  11. 物理プロセッサに時分割で割り当てられて処理を行う複数の仮想プロセッサに属する複数のスレッドの全てが、第1のトリガの入力に応じ、ユーザプログラムを実行可能なユーザモードから、ユーザプログラムの処理を行わない第1のデバッグモードに遷移するステップと、
    前記複数のスレッドそれぞれが、第2のトリガの入力に応じ、前記第1のデバッグモードから、デバッグ処理を実行可能な第2のデバッグモードに遷移するとともに、前記スレッドの状態を示す状態情報を、前記スレッドによって共通に利用されるレジスタに格納するステップとを有する
    仮想マルチプロセッサの制御方法。
  12. コンピュータに、
    物理プロセッサに時分割で割り当てられて処理を行う複数の仮想プロセッサの各々が、第1のトリガの入力に応じ、ユーザプログラムを実行可能なユーザモードから、ユーザプログラムの処理を行わない第1のデバッグモードに遷移するステップと、
    前記複数の仮想プロセッサの各々が、第2のトリガの入力に応じ、前記第1のデバッグモードから、デバッグ処理を実行可能な第2のデバッグモードに遷移するとともに、前記仮想プロセッサの状態を示す状態情報を、前記複数の仮想プロセッサによって共通に利用されるレジスタに格納するステップとを実行させる
    仮想マルチプロセッサの制御プログラム。
  13. コンピュータに、
    物理プロセッサに時分割で割り当てられて処理を行う複数の仮想プロセッサに属する複数のスレッドの全てが、第1のトリガの入力に応じ、ユーザプログラムを実行可能なユーザモードから、ユーザプログラムの処理を行わない第1のデバッグモードに遷移するステップと、
    前記複数のスレッドそれぞれが、第2のトリガの入力に応じ、前記第1のデバッグモードから、デバッグ処理を実行可能な第2のデバッグモードに遷移するとともに、前記スレッドの状態を示す状態情報を、前記スレッドによって共通に利用されるレジスタに格納するステップとを実行させる
    仮想マルチプロセッサの制御プログラム。
JP2012128995A 2012-06-06 2012-06-06 仮想マルチプロセッサシステム、仮想マルチプロセッサの制御方法及び仮想マルチプロセッサの制御プログラム Pending JP2013254318A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2012128995A JP2013254318A (ja) 2012-06-06 2012-06-06 仮想マルチプロセッサシステム、仮想マルチプロセッサの制御方法及び仮想マルチプロセッサの制御プログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2012128995A JP2013254318A (ja) 2012-06-06 2012-06-06 仮想マルチプロセッサシステム、仮想マルチプロセッサの制御方法及び仮想マルチプロセッサの制御プログラム

Publications (1)

Publication Number Publication Date
JP2013254318A true JP2013254318A (ja) 2013-12-19

Family

ID=49951778

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012128995A Pending JP2013254318A (ja) 2012-06-06 2012-06-06 仮想マルチプロセッサシステム、仮想マルチプロセッサの制御方法及び仮想マルチプロセッサの制御プログラム

Country Status (1)

Country Link
JP (1) JP2013254318A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108340374A (zh) * 2018-02-08 2018-07-31 西北农林科技大学 一种采摘机械手的控制系统及控制方法

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108340374A (zh) * 2018-02-08 2018-07-31 西北农林科技大学 一种采摘机械手的控制系统及控制方法
CN108340374B (zh) * 2018-02-08 2023-10-03 西北农林科技大学 一种采摘机械手的控制系统及控制方法

Similar Documents

Publication Publication Date Title
US8001549B2 (en) Multithreaded computer system and multithread execution control method
US10891158B2 (en) Task scheduling method and apparatus
CN103984598B (zh) 用于线程调度的方法以及系统
JP5405320B2 (ja) 仮想計算機制御装置、仮想計算機制御方法及び仮想計算機制御プログラム
US20140115603A1 (en) Method, apparatus, and system for scheduling processor core in multiprocessor core system
JPWO2008152790A1 (ja) マルチプロセッサ制御装置、マルチプロセッサ制御方法及びマルチプロセッサ制御回路
US11886846B2 (en) Method for executing computation, computing device, computing system, and storage medium
US20130036426A1 (en) Information processing device and task switching method
CN109960589B (zh) 嵌入式系统的系统软件层的实现方法、装置及可读介质
CN105359101A (zh) 用于多核处理器的系统管理中断处理
JPWO2009150815A1 (ja) マルチプロセッサシステム
KR20070090649A (ko) 멀티 코어 시스템에서 협력적 스케줄링을 제공하는 장치 및방법
JP2005539322A5 (ja)
US10732976B2 (en) Integrated circuit processor and method of operating the integrated circuit processor in different modes of differing thread counts
JP5819184B2 (ja) 情報処理装置及び情報処理装置の制御方法
JP2014191655A (ja) マルチプロセッサ、電子制御装置、プログラム
JP5726006B2 (ja) タスクおよびリソースのスケジューリング装置及びその方法並びに制御装置
CN103019695B (zh) 数据对象与状态控制逻辑分离系统和方法
CN109766168B (zh) 任务调度方法和装置、存储介质以及计算设备
JP6311330B2 (ja) 情報処理装置、情報処理方法およびプログラム
JP2013254318A (ja) 仮想マルチプロセッサシステム、仮想マルチプロセッサの制御方法及び仮想マルチプロセッサの制御プログラム
JP2009175960A (ja) 仮想マルチプロセッサシステム
JP2012083804A (ja) シミュレーション装置
JP4868012B2 (ja) コンピュータシステム、コンピュータシステムの制御方法、及びプログラム
JP2007122337A (ja) 演算装置