(57)【要約】【課題】情報処理フローの動作検証方法について新たな検証方法を提供可能にする。【解決手段】物理コア上に複数の仮想コアを構築可能である中央演算装置に、任意の仮想コアの実行コンテキストに影響を与えることなく、該仮想コアで用いる現在のレジスタ値を同一物理コア上の他の仮想コアから直接参照する参照命令を自仮想コアで実行する或いは他仮想コアに実行させる手段と、レジスタ値を参照する参照命令を実行する権限を仮想コアごとに切り替え得る手段と、を設ける。【選択図】図１
2014203106.tif 000002
【特許請求の範囲】
【請求項１】
物理コア上に複数の仮想コアを構築可能である中央演算装置であって、
任意の仮想コアの実行コンテキストに影響を与えることなく、該仮想コアで用いる現在のレジスタ値を同一物理コア上の他の仮想コアから直接参照する参照命令を、自仮想コアで実行する或いは他仮想コアに実行させる手段と、
前記レジスタ値を参照する前記参照命令を実行する権限を仮想コアごとに切り替え得る手段と、
を有する
ことを特徴とする中央演算装置。
【請求項２】
前記参照命令によって参照され得るレジスタ値の変更を伴い得る自他の仮想コアでの処理を停止することを実施する参照準備命令を自仮想コアで実行する或いは他仮想コアに実行させる手段を更に有することを特徴とする請求項１記載の中央演算装置。
【請求項３】
前記参照準備命令によって停止された仮想コアの停止状態を解除する参照準備解除命令を自仮想コアで実行する或いは他仮想コアに実行させる手段を更に有することを特徴とする請求項２記載の中央演算装置。
【請求項４】
同一物理コアに属する他の仮想コアから通知を受けた際に、自仮想コアのデバッグレジスタに前記参照命令、参照準備命令、参照準備解除命令の何れかを実行又は実行し合うポイントを設定する設定命令を自仮想コアで実行する或いは他仮想コアに実行させる手段を更に有することを特徴とする請求項１ないし３の何れか一項に記載の中央演算装置。
【請求項５】
１つの物理コア上に仮想コアを複数実装可能であり、前記物理コア内に構築される各レジスタが外部の記憶要素とのデータ転送よりも高速動作する構成を有する中央演算装置であって、
解析対象とする仮想コアの実行コンテキストに影響を与えることなく、該仮想コアで動作させるプログラム実行にかかる現在のレジスタ値を同一物理コア上の他の仮想コアから直接参照する参照命令を自仮想コアで実行する或いは他仮想コアに実行させる手段と、
前記参照命令によって参照され得るレジスタ値の変更を伴い得る自他の仮想コアでの処理を停止することを実施する参照準備命令を自仮想コアで実行する或いは他仮想コアに実行させる手段と
前記参照準備命令によって停止された仮想コアの停止状態を解除する参照準備解除命令を自仮想コアで実行する或いは他仮想コアに実行させる手段と、
同一物理コアに属する他の仮想コアから通知を受けた際に、自仮想コアのデバッグレジスタに前記参照命令、参照準備命令、参照準備解除命令の何れかを実行又は実行し合うポイントを設定する設定命令を自仮想コアで実行する或いは他仮想コアに実行させる手段と、
前記レジスタ値を参照する前記参照命令を実行する権限を仮想コアごとに切り替え得る手段と、
を有する
ことを特徴とする中央演算装置。
【請求項６】
前記各命令を実行或いは実行させる仮想コアそれぞれに、該仮想コアが構築される同一物理コアをパーティショニングすることによってハードウェアリソースをそれぞれ割り当て、独立したＯＳを動作させ得る機能を有することを特徴とする請求項１ないし５の何れか一項に記載の中央演算装置。
【請求項７】
請求項１ないし６の何れか一項に記載の中央演算装置を搭載すると共に、
同一物理コア上の複数の仮想コアの１つ若しくは２以上（最大仮想コア数以下）をプログラム実行主体として使用するプログラムを対象に、前記複数の仮想コアの何れか又は複数を実行主体とみなして動作するＯＳ上から、少なくとも 任意の仮想コアの実行コンテキストに影響を与えることなく、該仮想コアで用いる現在のレジスタ値を同一物理コア上の他の仮想コアから直接参照する参照命令を使用して解析・デバッグ・並列処理の何れか又は組み合わせを実行する
ことを特徴とする情報処理装置。
【請求項８】
請求項１ないし６の何れか一項に記載の中央演算装置における物理コア内の各仮想コアに対して、それぞれの仮想コア上で異なるＯＳが起動できるようにパーティショニングを可能とした異なるＡＣＰＩテーブルを生成することを特徴とするＢＩＯＳシステム。
【請求項９】
１つの物理コア上に複数の仮想コアが構築された環境下で、
任意の仮想コアが使用するレジスタを参照する権限を、同一の物理コアに属する他の仮想コアにも与え得る設定を有効に設定するステップと、
前記任意の仮想コアの実行コンテキストに影響を与えることなく、該仮想コアで用いる現在のレジスタ値を前記同一物理コア上の他の仮想コアから直接参照する参照命令を、前記同一物理コアに属する任意の他の仮想コアから実行して、該任意の他の仮想コアが 参照を受ける前記任意の仮想コアが使用した現レジスタ値を識別するステップと、
を含むことを特徴とする中央演算装置の内部動作による仮想コア内レジスタ値取得方法。
【請求項１０】
１つの物理コア上に複数の仮想コアを構築され、且つ、任意の仮想コアが使用するレジスタを参照する権限を 同一の物理コアに属する他の仮想コアにも与え得る設定を有効に設定し、該環境下で、
前記同一物理コア上の複数の仮想コアの１つ若しくは２以上（最大仮想コア数以下）をプログラム実行主体として使用するプログラムを対象に、前記複数の仮想コアの何れか又は複数を実行主体とみなして動作するＯＳ上から、少なくとも 任意の仮想コアの実行コンテキストに影響を与えることなく、該仮想コアで用いる現在のレジスタ値を同一物理コア上の他の仮想コアから直接参照する参照命令を実行し、
前記参照命令を用いて得た仮想コアのレジスタ値を用いて解析・デバッグ・並列処理の何れか又は組み合わせを実行する
ことを特徴とするプログラムの検証方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、物理コアを複数の仮想コアとして使用する仮想化技術に関して、詳しくは任意の仮想コアで動作するプログラムに関する検証技術に関する。
【背景技術】
【０００２】
昨今の情報処理装置では、仮想化技術を用いて、プログラムを実行する中央演算装置内（物理コア内）に、複数の仮想コアを構築して利用している。  
中央演算装置内の仮想化は、ハードウェアマルチスレッディング技術などと呼ばれている。
【０００３】
ところで、情報処理装置上で動作させる様々なプログラムについて動作検証が様々な手法で行われている。  
プログラムをデバッグする際、通常はデバッガを用いてインタラクティブに調査したり、メモリダンプを使用して静的な情報から調査を行なったりする。このいずれの方法も、検証対象とするプログラム（以下、対象プログラムと記載）の挙動に影響を与えるために運用中のサーバなどでは使用することが難しい。また、ＯＳ（Operating System）自体がストール状態で操作ができない場合に、検証方法がさらに限定される。  
このような場合に際して、ハードウェアの機能でレジスタやメモリの状態を参照できる機能が提供されれば検証に有用である。この機能を提供する手法として既にJTAG（Joint Test Action Group）やICE（In-Circuit Emulator）がある。他方、通常運用時には必要としないハードウェア装置であるため、開発用途の特殊な例を除き、価格を上昇等のために、一般的なサーバ装置には現状実装されていない。
【０００４】
また、ソフトウェアの動作検証手法としては、情報処理装置自身からメモリやレジスタの情報を正確に取得して、その情報を情報処理装置自身が分析することも行われている。
【０００５】
本発明に関連する技術は、例えば、特許文献１ないし特許文献６に記載されている。  
特許文献１や特許文献２には、チップ外部からレジスタ情報を読み出せるCPU（Central Processing Unit）装置が提案されている。これらは、チップの外部からレジスタ内容を読み出す際、動作中のCPUの実行コンテキストによるレジスタ更新と外部からの参照を同期させるコストや複雑さを避けるため、あらかじめ別の領域にコピーしておいたレジスタ情報を外部から読み出すというものである。  
特許文献３や特許文献４には、メインCPUからレジスタ内容を拡張演算装置に引き渡して処理を継続するコプロセッサが提案されている。  
また、特許文献５では、CPU間でレジスタを共有する実装方法として、ベクトルプロセッサ上での方法を提案している。これは、高速かつ大容量のレジスタがCPU外部にあり、複数のCPUやコアからレジスタ領域を共用してベクトル計算をするためのものである。  
また、特許文献６には、１台の情報処理装置を成す１組のハードウェア上に複数のOSを同居させて、プログラムによりメモリに記録される値を診断用ＯＳにより検証させる手法が提案されている。  
また、特許文献７には、複数のCPUを並列動作させると共に、１つのCPUを障害処理用プロセッサコアとして動作させる障害処理手法が記載されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特許第３２０６９６０号公報
【特許文献２】特開２００３−０８５１２４号公報
【特許文献３】特開２００８−３１０６９３号公報
【特許文献４】特許第３８６７８０４号公報
【特許文献５】特許第２５７７８６５号公報
【特許文献６】特許第２８６８１１４号公報
【特許文献７】特開２００９−１２９１０１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
ソフトウェアの動作検証手法としては、メモリダンプ、デバッガ、リアルタイムトレースなどが用いられている。
【０００８】
メモリダンプは、実行している対象プログラムのある静止点のメモリイメージを保存して、その内容から事後的に不具合等を解析する手法である。このため、プログラム走行箇所の遷移、またはデータの変化を追跡したい場合などの解析には向いていない側面を有する。
【０００９】
デバッガは、一見すると動作している対象プログラムに対して解析ができているように動作するものの、実際にはデバッガが動作している間は対象プログラムを停止する必要性があり、デバッグすることで対象プログラムの処理動作に様々な影響を与える。このため、複数のプログラムやスレッドの動作タイミングに依存する問題などは解析には向いていない側面を有する。  
また、一般的に、OS起動処理の途中であったり、何らかの障害によりOSがストール状態にあったりした場合には使用できない。また、カーネルデバッガの中には、OSストール中に使用できるものも存在するが、カーネルを停止して解析する手法であるためにデバッグ作業中にOS全体が停止する問題を内在している。このため、運用中のシステムに対する検証手法としてカーネルデバッガを安易に用いることができないとの側面を有する。
【００１０】
リアルタイムトレースは、JTAGやICEといったハードウェアを使用して、中央演算装置（CPU）の状態を外部から調査する技術であり、対象プログラムが動作しているOSがストールしている場合などでも実行することが可能である。他方、専用の高価なハードウェアを別途実装する必要がある。このようなハードウェアは、動作周波数や調査する信号の本数など、対象の回路に合わせてカスタマイズする必要がある。このため、一般的には汎用性が低い。組み込み系の装置の中には、あらかじめCPU基板上にJTAGを実装する場合もあるものの、CPU基板に組み込まれた専用ハードウェアは通常運用時には使用されない無駄なリソースとなってしまうというデメリットもある。  
また、実装形態によらず、対象プログラムが動作している物理コアの外部から一貫性のあるレジスタ情報を読み出すためには、対象コアを一時的に停止してデバッグモードに移行した後にレジスタ情報を転送することを必要としており、オーバヘッドが大きい問題もある。
【００１１】
また、上記例示した先行技術を用いてソフトウェアの動作検証手法の問題を説明すれば、以下のような指摘ができる。
【００１２】
特許文献１や特許文献２に記載されたCPU装置では、CPU基板外部からあらかじめ別の領域にコピーしておいたレジスタ情報を読み出せる。  
しかし、この装置で参照できるレジスタ値は過去の内容であるため、読み出した内容に基づいた次の解析処理を実行してもこの時点で既にCPUは先の処理に実行を進めており、リアルタイムなデバッグに使用することはできない。
【００１３】
特許文献３や特許文献４に記載されたコプロセッサでは、メインCPUからレジスタ内容を拡張演算装置側に引き渡して処理を継続する。  
しかし、これらのコプロセッサは浮動小数点演算などの特定の処理を目的とした専用ハードウェアである。付加的に設けることの問題や検証用プログラムの自由度に課題を有する。
【００１４】
特許文献５に記載されたCPU間でレジスタを共有する実装方法では、高速かつ大容量のレジスタをCPU外部に備える必要がある。このようなレジスタの構成は高価なメモリを大量に用意できる高価な大規模計算機に対しては向くかもしれない。  
しかし、価格が高くなりすぎる傾向が高いため、現状の一般的なCPU周囲のアーキテクチャには採用できない。
【００１５】
特許文献６に記載されたアプリケーションの検証方法では、診断用OSによってメモリに記録された出力結果について整合性をチェックできる。  
しかし、CPU内のレジスタ値や、カーネル解析などが行なえない問題がある。
【００１６】
上記のように対象プログラムについて様々な動作検証手法が提案されているものの、より、対象プログラムやOSの動作状態に影響を与えずに、且つ、オーバヘッドの小さい手法を用いて、リアルタイム的に綿密に検証できる手法が求められる。
【００１７】
本発明は、上記様々な観点を踏まえ、仮想コアで使用しているレジスタ情報を低オーバヘッドで取得して、動作中の対象プログラムの処理動作を検証可能とする中央演算装置及び情報処理装置を提供することを目的とする。
【００１８】
また、本発明の別の目的は、上記様々な観点を踏まえ、所定の仮想コアで使用しているレジスタ情報を中央演算装置の内部動作により低オーバヘッドで取得する仮想コア内レジスタ値取得方法、及びその方法を用いたプログラムの検証方法を提供することである。
【課題を解決するための手段】
【００１９】
本発明に係る中央演算装置は、物理コア上に複数の仮想コアを構築可能である中央演算装置であって、任意の仮想コアの実行コンテキストに影響を与えることなく、該仮想コアで用いる現在のレジスタ値を同一物理コア上の他の仮想コアから直接参照する参照命令を自仮想コアで実行する或いは他仮想コアに実行させる手段と、前記レジスタ値を参照する前記参照命令を実行する権限を仮想コアごとに切り替え得る手段と、を有することを特徴とする。
【００２０】
本発明に係る情報処理装置は、少なくとも、物理コア上に複数の仮想コアを構築可能である情報処理装置であって、任意の仮想コアの実行コンテキストに影響を与えることなく、該仮想コアで用いる現在のレジスタ値を同一物理コア上の他の仮想コアから直接参照する参照命令を自仮想コアで実行する或いは他仮想コアに実行させる手段と、前記レジスタ値を参照する前記参照命令を実行する権限を仮想コアごとに切り替え得る手段と、を有する中央演算装置を搭載すると共に、同一物理コア上の複数の仮想コアの１つ若しくは２以上（最大仮想コア数以下）をプログラム実行主体として使用するプログラムを対象に、前記複数の仮想コアの何れか又は複数を実行主体とみなして動作するＯＳ上から、少なくとも前記参照命令を使用して解析・デバッグ・並列処理の何れか又は組み合わせを実行することを特徴とする。
【００２１】
本発明に係る中央演算装置の内部動作による仮想コア内レジスタ値取得方法は、１つの物理コア上に複数の仮想コアが構築された環境下で、任意の仮想コアが使用するレジスタを参照する権限を、同一の物理コアに属する他の仮想コアにも与え得る設定を有効に設定するステップと、前記任意の仮想コアの実行コンテキストに影響を与えることなく、該仮想コアで用いる現在のレジスタ値を前記同一物理コア上の他の仮想コアから直接参照する参照命令を、前記同一物理コアに属する任意の他の仮想コアから実行して、該任意の他の仮想コアが参照を受ける前記任意の仮想コアが使用した現レジスタ値を識別するステップと、を含むことを特徴とする。
【００２２】
本発明に係るプログラムの検証方法は、１つの物理コア上に複数の仮想コアを構築され、且つ、任意の仮想コアが使用するレジスタを参照する権限を 同一の物理コアに属する他の仮想コアにも与え得る設定を有効に設定し、該環境下で、前記同一物理コア上の複数の仮想コアの１つ若しくは２以上（最大仮想コア数以下）をプログラム実行主体として使用するプログラムを対象に、前記複数の仮想コアの何れか又は複数を実行主体とみなして動作するＯＳ上から、少なくとも 任意の仮想コアの実行コンテキストに影響を与えることなく、該仮想コアで用いる現在のレジスタ値を同一物理コア上の他の仮想コアから直接参照する参照命令を実行し、前記参照命令を用いて得た仮想コアのレジスタ値を用いて解析・デバッグ・並列処理の何れか又は組み合わせを実行することを特徴とする。
【発明の効果】
【００２３】
本発明によれば、仮想コアで使用しているレジスタ情報を低オーバヘッドで取得して、動作中の対象プログラムの処理動作を検証可能とする中央演算装置及び情報処理装置を提供できる。
【００２４】
また、本発明によれば、所定の仮想コアで使用しているレジスタ情報を中央演算装置の内部動作により低オーバヘッドで取得する仮想コア内レジスタ値取得方法、及びその方法を用いたプログラムの検証方法を提供できる。
【図面の簡単な説明】
【００２５】
【図１】実施形態にかかる中央演算装置の概念を示したブロック図である。
【図２】他の仮想コアのレジスタ参照機能を有するCPU周囲アーキテクチャの概念的構成を示したブロック図である。
【図３】他の仮想コアのレジスタ参照機能を有するCPU周囲アーキテクチャの別の概念的構成を示したブロック図である。
【図４】実施形態で追加実装するCPU命令構成を例示した説明図である。
【図５】仮想コアごとに異なるOSを動作させる処理動作形態を示した説明図である。
【図６】複数の仮想コア上で同じOSを動作させる処理動作形態を示した説明図である。
【図７】複数の仮想コア上で同じOSを動作させる別の処理動作形態を示した説明図である。
【図８】本発明にかかる参照命令を使用しない場合のデバッグ処理動作フロー例を示した説明する。
【図９】図４に示したCPU命令の実装例におけるデバッグ処理動作フロー例を示した説明図である。
【図１０】図４に示したCPU命令の実装例における簡易トレース処理動作フロー例を示した説明図である。
【図１１】図４に示したCPU命令の実装例における並列検証処理例を示したフローチャートである。
【図１２】図４に示したCPU命令の実装例における並列検証処理動作フロー例を示した説明図である。
【発明を実施するための形態】
【００２６】
本発明の実施形態について図面を参照しながら説明する。
【００２７】
図１は、実施形態の中央演算装置の一部を論理的に示したブロック図である。図示された中央演算装置（CPU、Central Processing Unit）は、物理コア１上に２つの仮想コア２が構築された中央演算装置の一部を示している。  
各仮想コア２には、仮想コア用レジスタ３、命令実行権限設定部４が設けられている。なお、必ずしも各仮想コア２は対照的な構成を有する必要はない。
【００２８】
一方の仮想コア２は、他方の仮想コアの実行コンテキストに影響を与えることなく、その仮想コアで用いる現在の仮想コア用レジスタ３の値を直接参照する参照命令を自仮想コア２で実行する或いは他方の仮想コア２に実行させる手段として動作させ得る。また、OSやアプリケーションなどを動作させ得る一般的な用途にも使用できる。
【００２９】
仮想コア用レジスタ３は、各仮想コアが使用するために 物理コア１内に物理レジスタとして準備され、プログラムの処理動作に利用される。また、対応付けられる各仮想コア２で一般的な用途でOSやアプリケーションなどを動作させる際に、各仮想コア用レジスタ３は、対応付けられた仮想コア２のために排他的記憶リソースとして使用される。  
また、任意の仮想コア２は、自仮想コアで用いる現在のレジスタ値を直接参照するための参照命令が他の仮想コア２で実行された際に、他の仮想コア２から値の参照を論理的に受ける。
【００３０】
命令実行権限設定部４は、少なくとも、レジスタ値を参照する参照命令を実行する権限を仮想コアごとに切り替え得る手段として動作させ得る。この手段では、参照命令等を受け付け得ることを設定しても良いし、参照命令等を通知し得ることを設定しても良い。また、任意の仮想コアとの関係を指定して設定の有効／無効を切り替えても良い。
【００３１】
仮想コア技術は、物理コア１の実行パイプライン上で個々の仮想コア２に仮想的に受け持たせるスレッドを同時に走行させる技術である。物理コア１は、物理的なチップ実装としては単一のコアである。このため、互いの仮想コア用レジスタ３は、物理的に配置（配線）距離が近く、外部の記憶要素とのデータ転送よりもレジスタ内でのデータ転送が高速に完遂できる。換言すればコストが非常に小さい。  
また、命令実行権限設定部４が権限設定する各命令（各仮想コア２で扱われる各命令）は、OSやアプリケーションよりも高速に処理が完遂される。  
また、仮想コア２相互は、同じ物理コアであるため、各実行スレッドを同期させるコストが、異なる物理コア間で同期する場合に比べて非常に小さい。
【００３２】
本発明にかかる情報処理装置では、仮想化技術の有する特徴を利用し、レジスタ等の本来排他的に使用するリソースを、他の仮想コアから参照するCPU命令を上記参照命令として実装することで、小オーバヘッドで任意の仮想コア用に構築された仮想コア用レジスタ３の値を取得可能にした。
【００３３】
また、上記参照命令と共に、参照命令を有効利用するために、幾つかのCPU命令を追加で実装する。これらの命令は、一CPU命令で実現してもよいし、分割して複数命令で実現してもよい。また用途や使用タイミングに合わせて以下の複数のCPU命令を組み合わせて準備してもよい。  
・自仮想コアでの処理を停止する参照準備命令  
・他仮想コアでの処理を停止する参照準備命令  
・参照準備命令によって停止した状態を解除する参照準備解除命令  
・参照命令を送出するポイントを設定する設定命令  
・参照準備命令を送出するポイントを設定する設定命令  
・参照準備解除命令を送出するポイントを設定する設定命令  
・参照命令を送出させるポイントを設定する設定命令  
・参照準備命令を送出させるポイントを設定する設定命令  
・参照準備解除命令を送出させるポイントを設定する設定命令  
・命令実行権限を設定する設定命令  
上記命令実行権限設定部４はそれぞれ、参照命令を受け付けるか否かと共に上記各命令を受け付けるか否か設定可能に構成する。なお、個々の命令毎に権限設定することとしてもよいし、参照命令セットとして一体的に受け付けて参照命令を実行する権限設定することとしてもよい。また、３以上の仮想コアが物理コアに構築されることを踏まえ、任意の仮想コアのみに上記各命令を実行可能とする権限を設定可能に構築してもよい。
【００３４】
上記情報処理装置では、上記CPU命令を実行可能とした中央演算装置を搭載して、同一物理コア上の複数の仮想コアの１つ若しくは複数をプログラム実行主体として仮想的に使用するプログラムを対象プログラムとして、動作中の対象プログラムの処理動作を検証する。検証用のプログラムは、様々なレベルのプログラムを利用でき、検証する用途に合わせて適宜作成すればよい。この際、検証用プログラム独自でコンピュータを所望用途に機能させても良いし、OSやアプリケーション内に組み込んでそのプログラム自身やコンピュータで動作させる別のプログラムを検証する用途をも含ませるようにしてもよい。  
この際に、同一物理コアで成る複数の仮想コアのうち、検証プログラムを走らせる仮想コアと異なる仮想コア 又は 複数の仮想コア上で動作させるOS上から、上記参照命令等を使用して、解析・デバッグ・並列処理などを、行って検証を行えば、利便性が高いツールとなり得る。
【００３５】
検証対象が動作した仮想コアが直前にアクセスしていたデータは、仮想コア間で共有するCPU内キャッシュに存在する可能性が非常に高く、相対的に低速である主メモリにアクセスすることなく検証可能とし得るため、多くの良好な情報を得ることが可能である。
【００３６】
以下、幾つかのプログラム検証システムの構成を挙げて中央演算装置の動作を説明する。なお、検証システムの構成を限定するものではない。  
以下、検証対象となるプログラム（対象プログラム）を走らせる仮想コアを被解析仮想コアと呼び、その対象プログラムの動作検証を行なうプログラム（解析プログラム）を走らせる仮想コアを解析用仮想コアと呼ぶ。この被解析仮想コアと解析用仮想コアは、同一の物理コア内に構築される。
【００３７】
（１）被解析仮想コアと解析用仮想コアの動作構成例  
・構成例１・・・被解析仮想コアと解析用仮想コアで異なるOSをそれぞれ動作させる
・構成例２・・・被解析仮想コアと解析用仮想コアで同じOSを動作させ、解析用仮想コアで解析プロセスを常駐させる  
・構成例３・・・被解析仮想コアと解析用仮想コアで同じOSを動作させ、解析用仮想コアに参照命令を通知させる設定命令に応じて実行する検証用コードを予め登録する
【００３８】
（２）仮想コアごとに別OSを動作させるため、一つの物理コア内でリソースパーティショニングを行なうと共に、OSごとに別のI/Oコントローラを割り当てた動作構成例  
・実施例１・・・CPU内にI/Oコントローラを複数実装し、メインOSと解析用OSでそれぞれ物理的に異なるI/Oコントローラを使用させる  
・実施例２・・・LPAR（Logical PARtitioning）を用いて一つのI/Oコントローラを論理的に複数のI/Oコントローラとして使用することにより、メインOSと解析OSとにI/Oコントローラを共用させる  
【００３９】
（３）検証用仮想コアからのレジスタ参照機能を用いる処理動作例  
・実施例１・・・ブレークポイントを設定することにより、任意の条件でのレジスタ情報を読み出して利用  
・実施例２・・・解析用仮想コア側から定期的にサンプリングすることにより、リアルタイムトレース  
・実施例３・・・同一物理コア内の仮想コアが互いにレジスタを参照しあうことにより、レジスタ参照機能を高速なプロセス間通信として使用する並列処理  
・実施例４・・・イベント通知機能のオーバヘッドの低さを利用した性能ボトルネック調査
【００４０】
例えば、上記実施例１の処理動作では、被解析仮想コアで対象プログラムに則して動作してブレークポイントに達した際に、解析用仮想コアに所定の命令を通知して、解析用仮想コア側から参照命令を用いてプログラムカウンタや命令レジスタなどのアーキテクチャステートを読み出す。このため、従前のデバッグモードに移行する検証処理の代わりとして利用できる。  
解析用仮想コアから、実装された機能を使用して被解析仮想コアのレジスタを直接参照するため、被解析仮想コア上ではコンテキストスイッチによるレジスタ退避や、デバッガ起動などの動作を実行することを省くことができる。このため、レジスタ参照処理に伴うオーバヘッドが非常に小さく、被解析仮想コアについてレジスタ情報の採取が終了した後に即座に処理を再開させることが可能になる。
【００４１】
また、解析用仮想コアを構築する中央演算装置の物理的構成及び論理的構成は汎用的な構成であるため、検証に用いない場合や、検証に要する処理を実行中以外の間は、従前の論理プロセッサユニットとしての利用が可能である。  
別の観点によれば、汎用仮想プロセッサの一部リソースを検証処理に使用することとなり、専用の検証・解析用ハードウェアをCPU内外に実装する既存技術に比べてリソースが無駄にならない利点がある。
【００４２】
上記したように、対象プログラムの検証を実行する際に、物理CPU上の同一コア内で、ある仮想コアで対象プログラムを実行し、別の仮想コアでデバッガを動作させることによって、解析対象のプログラム自体を大きく止めることなく別の仮想コアでレジスタ値を観察できる。  
これを実行するにあたって、より詳細な実装構成及び動作例を示して、上記実施形態にかかる情報処理装置を用いたそれぞれのプログラム検証方法について説明する。以下では２つの処理形態を詳細に説明する。一つは、解析対象のプログラムを実行する仮想コアとデバッガを動作させる仮想コアそれぞれにおいて、別のOSを稼動させる形態である。もう一つは、両方の仮想コア上で一つの同じOSを稼動させる形態である。
【００４３】
まず、対象プログラムを実行する仮想コアと解析する仮想コアで別のOSが動作する形態について説明する。  
本形態の説明では、同じ物理コア上の仮想コアをサーバOS用仮想コアと解析用仮想コアとしてそれぞれ位置づけ、リソースパーティショニングによりそれぞれの仮想コアで異なるOSを稼動させる。  
リソースパーティショニングとは、単一のハードウェア上で複数のOSが動作できるように、CPU、メモリ、およびI/Oデバイスなどをアクセス制御し、それぞれのOSが必要とするリソースにアクセスを許可して、必要なOSにハードウェアリソースへのアクセス権を割り振るという既存技術である。
【００４４】
この実施形態は、カーネルを解析対象とする際に有用である。サーバOS用仮想コア上で動作するOSが起動途中やストール中などの理由で操作が制限されている場合であっても、解析用仮想コア上で独立して動作するOSを介して解析対象とするカーネルの挙動を調査することができる。
【００４５】
もう一つは、プロセスを解析対象とし、解析用・被解析用の両仮想コア上で同じ１つのOSを動作させる形態である。  
この実施形態では、被解析プロセスを仮想コアの１つで動作させ、解析プロセスを同一物理コアの別の仮想コアに割り当てることにより、解析処理を行なう。  
こちらの実施形態はOSが起動中・ストール中には使用できないものの、実装が容易となる側面があり、上記実施形態よりも利便性が優れた点を有しており、解析対象がカーネルではなくプロセスの場合にはこちらが有用ともいえる。
【００４６】
［構成の一例］  
図２は、他の仮想コアのレジスタ参照機能を有するCPUコアの概念的構成を示したブロック図である。  
CPUコア１０は、サーバ装置の中央演算装置として動作して、CPU外部に独立したコアとして認識される仮想コア１１と仮想コア１２とを有している。  
仮想コア１１は上記被解析仮想コアであり、サーバOSを動作させ、仮想コア１２は解析用仮想コアであり、デバッガを動作させる。これらの仮想コアの実体は実行パイプラインを共有したスレッドであり、それぞれがアーキテクチャステートを保持するための専用のレジスタ（データレジスタ２１、２２等）を有している。  
仮想コア１１及び１２はそれぞれ独立して参照機能のEnable/Disableを切り替えられるレジスタ（解析権限切替レジスタ４１、４２）を有しており、その内容により他の仮想コアのレジスタへのアクセス権を制御する。  
図２に示した構成では、仮想コア１２の解析権限切替レジスタ４２がEnableになっており、仮想コア１２が仮想コア１１のデータレジスタ２１を参照でき、またデバッグレジスタ３１を更新することができる。一方、仮想コア１１の解析権限切替レジスタ４１はDisableに設定されており、仮想コア１１には仮想コア１２のレジスタにアクセスする権限がない。
【００４７】
前述したサーバOS用仮想コアと解析用仮想コアとで異なるOSを動作させる方式において、仮想コアごとにI/Oコントローラ５１、５２を実装し、別個に管理する。I/OコントローラをOSごとに分けて管理する理由は、複数OSから単一のI/Oコントローラを管理していると、I/Oに伴う割り込みやリセット処理等が他のOSにも影響し、混乱が生じ得ることを考慮する。メモリコントローラ６２は、仮想コア１１及び１２に共有され、メモリ６１について個々の仮想コアに割り振る領域ごとにアクセス権を制御して、それぞれのOSで使用可能にする。
【００４８】
I/Oコントローラに関する別な実装例として、既存のLPAR技術を用いることもできる。LPARは、ハードウェアを論理的に分割することであたかもI/Oコントローラが複数あるかのように振舞う技術である。LPARを使用する場合には、仮想コア１１と仮想コア１２が物理的に一つのI/Oコントローラを共用することが可能となるため、仮想コアごとに別のI/Oコントローラを実装する必要はない。
【００４９】
図３に、サーバOSと解析OSに分割するリソースパーティショニングの実施例を示す。リソースパーティショニングは、BIOS７０がそれぞれのOS用に異なる構成のACPI(Advanced Configuration and Power Interface) テーブルを生成することにより実現する。CPUコア１０内に実現された仮想コア１１と仮想コア２１には、それぞれ異なるACPIの識別子が割り当てられて内部構造が隠蔽され、動作する各OSからは別のコアとして認識される。  
BIOS７０は、サーバOS用に、ACPIテーブル７１を生成する。ACPIテーブル７１には、サーバOSコア用の仮想コア１１、I/Oコントローラ５１、およびメモリ６１のうちサーバOS用に割り当てる領域をEnableとして列挙される。サーバOSはACPIテーブル７１を参照して各リソースの初期化を実行し、OSを起動する。  
他方、BIOS７０は、解析OS用に、ACPIテーブル７２を生成する。ACPIテーブル７２には、解析OS用の仮想コア１２、I/Oコントローラ５２、およびメモリ６１のうち解析OS用に割り当てる領域をEnableとして列挙される。サーバOS用ACPIテーブル７１との差として、解析OSはサーバOSのメモリを読み込むことのみ許可されている。これは、解析処理のためにサーバOS側のメモリも参照する必要があるためである。解析OSは、これらの情報をもとに各リソースの初期化を実行し、OSを起動する。  
それぞれのI/Oコントローラ（５１、５２）には、例えばNIC８１、NIC８２などのネットワークインターフェースなどがそれぞれ接続され、互いのOSの状態に関わらず、それぞれのOSと外部とを接続して操作することを可能に構成される。
【００５０】
次に、一実施形態にかかるCPUに実装するCPU命令について説明する。  
図４に、本実施形態で追加するCPU命令を列挙する。なお、この列挙する各命令は、上記した幾つかの命令を組み合わせて構成された命令群であり、利用目的に合わせて統合や分割、参照範囲指定などの変更を加えてもよい。  
・命令A は、任意の仮想コアにレジスタを参照させる準備をさせ、別の仮想コアに処理を移すための参照準備命令である。一貫性のある情報を読み出すため、命令Aを実行した仮想コア（自仮想コア）は、スペキュレーティブロードや、割り込みなどのレジスタを変更する可能性のある処理の全てを停止する。また、更新中のレジスタが電気信号的に安定するまで待ち合わせ、レジスタを読み出し可能な状態に遷移した後に、解析用仮想コアに割り込み信号をアサートして通知する。この命令Ａは主に、プログラムに設定されたブレークポイントに到達して、デバッグ例外が生成された際に実行すればよいが、任意のタイミングで実行可能にすることもできる。  
・命令Bは、他の仮想コアを停止してレジスタを読み出し可能な状態に遷移させるための参照準備命令である。この命令Ｂは、解析する側の仮想コアから、解析される側の仮想コアに対して発行される。解析対象の仮想コアがレジスタ参照を可能とする準備が完了するまで待ち合わせるため、実行した仮想コアをブロックする役割も持つ。  
・命令Cは、命令Aまたは命令Bによって停止した仮想コアの処理動作を再開するための参照準備解除命令である。  
命令Dは、対象の仮想コアから任意のレジスタの内容を読み出すための参照命令である。  
命令Eは、対象の仮想コアのデバッグレジスタの内容を書き換えるための設定命令である。ハードウェアブレークポイントを設定することにより、解析する仮想コア側から命令Aを発生させるタイミングを制御するために使用する。  
ここで、命令Eの使い方について以下に補足する。指定したアドレスの命令を実行したとき、または指定したアドレスのデータにアクセスしたとき、などのように一定の条件を満たしたタイミングで命令Aを発行させる目的で、ブレークポイントを設定する。  
ブレークポイントには、デバッガから設定するソフトウェアブレークポイントとデバッグレジスタで設定するハードウェアブレークポイントがある。いずれもデバッグ例外を発生させる点では同じだが、各々の仮想コア上で異なるOSを動作させる形態では、他のOS上のプログラムに対してソフトウェアブレークポイントの設定が既存の命令群ではできず、ハードウェアブレークポイントしか使用できない。また、各々の仮想コア上で同じOSを動作させる形態であっても、解析対象のプログラムが実行中である場合には、後からソフトウェアブレークポイントを設定することは難しい。そのため、対象の仮想コアの状態に依存せず、任意の条件で命令Aを発行させるように外部から制御する目的で命令Eを使用する。
【００５１】
次に、図５、図６、図７を用いて、処理動作例を説明する。図５は、仮想コアごとに異なるOSを動作させる形態、図６と図７は両仮想コア上で同じOSを動作させる形態である。
【００５２】
図５は、被解析仮想コアと解析用仮想コアで異なるOSを動作させる処理動作例である。前述のように、ACPIテーブルを使い分けることによってそれぞれで使用するリソースをパーティショニングし、被解析仮想コア上でサーバOSを 解析用仮想コア上で解析OSを それぞれ動作させる。それぞれのOSが参照したACPIテーブルに従い、被解析仮想コアからはサーバOSコア用メモリ（領域）を読書き可能だが、解析用仮想コアからはサーバOSコア用メモリ（領域）について読み出しのみが許可される。また、解析用仮想コアは自身が起動するための解析OS用メモリ（領域）を読書き可能だが、この領域は被解析仮想コアからはアクセスされない（できない）。
【００５３】
図６は、被解析仮想コアと解析用仮想コアが同一のOS制御下で動作する構成例である。解析用仮想コア上には解析用プロセスが常駐し、被解析コアで動作するプログラムをデバッグ・トレースにより解析する。被解析コアで動作するプログラムは、ソフトウェア/ハードウェアブレークポイントを設定され、解析用コアからの解析を受け付ける。同一OS上で動作するため、被解析仮想コアからも解析用仮想コアからも同様にメモリに読書きすることができる。
【００５４】
図７は、被解析仮想コアと解析用仮想コアを同一のOS制御下で動作させる別の構成例である。本アーキテクチャでは、図６と異なり、解析用仮想コア上に解析用プロセスを固定的に割り当てずに、実行するコードを予め登録しておくという構成である。被解析仮想コア上でデバッグ例外が発生した際に命令Aを発行し、命令Aにより解析用仮想コアで通知が識別された時点で、解析用仮想コア上で解析用コードを起動するように例外ハンドラを登録しておき、被解析仮想コアの解析を開始する。解析用コードは複数登録することができる。解析用仮想コアは、命令Dを発行することによって、被解析仮想コアから命令レジスタやその他のレジスタの内容を読み出し、その内容により実行する解析用コードを切り替える。  
この構成には、解析用コードを実行していない場合には他の処理に解析用仮想コアを使用することができ、リソースを無駄にしない利点がある。このため、デバッグ目的ではなく、通常運用時におけるイベントベースのプログラム起動手段としても応用しやすい。
【００５５】
図５から図７に示した各アーキテクチャは、利用形態に合わせて使い分けることが望ましい。解析対象がカーネルである場合には、サーバOSに障害が発生して操作不能な状態でも、サーバOSと独立して動作する解析OSから調査が可能な図５の処理構成が好適であり、解析対象がプロセスである場合には、同じOS上で動作していたほうがアドレス配置の解析等が容易であるため、図６または図７の処理構成が好適となる。  
図６と図７を比較すると、解析用仮想コアでデバッガを実行してインタラクティブに解析を行いたい場合に図６が適しており、実行したい内容があらかじめ決まっており、ブレークポイントに到達した場合に自動的に処理したい場合には図７が適している。
【００５６】
［処理動作の説明］ 
次に、図８から図１２を用いて処理動作を説明する。
【００５７】
図８を用いて、比較のために本発明にかかる検証を使用しない場合（本発明にかかる参照命令を使用しない場合）のデバッグ時の動作を説明する。図示した方法では、解析するプログラムを実行しているコア自身から、もしくは物理的に異なるコアから解析処理を行う。  
図８（ａ）、図８（ｂ）では、ブレークポイントに到達すると、プログラムを実行するコア上でコンテキストスイッチを実行してレジスタを退避し、デバッガを起動している。
その後の処理は、解析処理を行なうコアがプログラムを実行しているコアと同じかどうかで、図８（ａ）と図８（ｂ）に分かれる。  
プログラムを実行していたコア自身で解析を行う場合は、図８（ａ）に示したように、プログラムは解析処理を行い終えるまでの間中長時間停止したままとなり、解析処理終了後に再度コンテキストスイッチを実行してプログラムを再開する。  
物理的に異なるコアから解析する場合、図８（ｂ）に示したように、解析対象のプログラムは、解析処理と並行して動作を再開して処理を継続できる。しかし退避したレジスタ情報を、解析処理をするコアに引き渡すために、異なるコア間での同期や転送がやはり必要となる。この処理が同一物理コア上の仮想コア間で行うよりも様々な点でコストの高い処理となる。
【００５８】
図９を用いて、命令実装例における基本処理を説明する。ブレークポイントでプログラムの動作を停止させるところまでは上記の方法と同様である。その後、デバッガを起動するのではなく、命令Aによって被解析仮想コアの動作を停止させた後に、解析用仮想コアにレジスタを参照可能な状態になったことを通知する。通知を受けた解析用仮想コアは、命令Dを使用してレジスタ情報を読み出した後に命令Cにより、被解析仮想コアの処理を再開する。  
この一連の処理では、被解析仮想コア上でコンテキストスイッチやデバッガの起動を不要としたこと、および物理コア間の同期やデータ転送を必要としない構成としたことにより、低コスト且つ高速に実行できる。
【００５９】
図１０を用いて、簡易トレースを行う処理動作例を説明する。図９で示した処理では、被解析仮想コアがブレークポイントに到達したことを契機に解析処理を開始している。他方で、図１０に示した処理では解析用仮想コア側から解析処理を開始している。解析用仮想コアは、定期的に被解析コアの命令レジスタを読み出してプログラムフローのどこを現在処理しているかをサンプリングすることで、被解析コアの動作をモニタリングすることができる。  
この処理は同一の物理コア内での処理であるため、被解析コア上で動作するプログラムに与える影響をごくわずかに限定することができるというメリットがある。
【００６０】
図１１に、並列検証処理の一処理例のフローチャートを示す。この並列検証処理では、被解析仮想コアと解析用仮想コアが互いにレジスタ情報を参照する例を示しており、両仮想コアにおいて解析機能をEnableに設定されている。  
様々なプログラムの中には、処理結果が妥当であるかどうかを検証したり、処理内容に応じた暗号キーを生成したりするなど、ある処理を実行すると同時に、その処理に関連する独立した処理を並列して実行させたいものがある。  
このようなプログラムに対して、本発明によるレジスタ参照機能を低コストの通信手段として使用する並列プログラムを作成することができる。
【００６１】
図１１では、検証したい処理である処理X自体の実行と、処理Xの結果を検証する検証処理Yを並列処理で実行する際の各仮想コアでの処理タイミングを示している。  
被解析仮想コアでは、あらかじめ処理Xの開始部分にブレークポイントを設定したうえでプログラムを開始する。被解析仮想コアでブレークポイントに到達すると、命令Aにより解析用仮想コアにそのことが通知される（Ｓ１１）。  
次に、解析用仮想コアから被解析仮想コアのレジスタを命令Dを使用して読み出すと共に実行中の処理に応じた検証プログラムを起動する（Ｓ２１）。この時、検証処理Yに必要なデータも被解析仮想コアのレジスタやメモリ・キャッシュから読み出しておく。  
その後、命令Cにより被解析仮想コアの停止状態を解除（Ｓ２２）することにより、それぞれの仮想コアが処理Xと検証処理Yを並列で実行する。  
被解析仮想コア上で処理Xが完了すると、再び命令Aを使用してそのことを解析用仮想コアに通知する（Ｓ１２）。  
解析用仮想コアは、命令Dを使用して処理Xの結果を取得（Ｓ２３）し、命令Cを実行して被解析仮想コアの処理を再開（Ｓ２４）させる。  
次に検証処理として、解析用仮想コア上で処理Xと検証処理Yの結果の比較を実施する（Ｓ２５）。解析用仮想コアでは、比較結果が一致していればその結果のみ記録（Ｓ２６）して解析用仮想コア上の検証処理は終了し、被解析仮想コア上のプログラムは邪魔されること無く処理を継続する。他方、解析用仮想コアは、比較結果が一致していない場合に、命令Aにより被解析仮想コアに対してそのことを通知（Ｓ２７）する。  
比較結果が一致していないことの通知を受けたことを識別（Ｓ１３）して、被解析仮想コアは、命令Dにより解析用仮想コアのレジスタから検証結果を読み出す（Ｓ１４）。読み出した内容により、処理を継続すべきか終了すべきかを判断（Ｓ１５）する。  
この並列処理において、プロセス間通信等のメモリ経由のデータ転送を伴わずにイベントの通知やデータの転送を行なっており、高速な並列処理プログラムを実現できている。
【００６２】
図１２に示す並列処理は、解析対象プログラムを死活監視や性能ボトルネックを診断する実施例である。一般的に、プログラムの死活監視は、定期的にプログラム自身がログを残したり、外部のプログラムとメッセージを送受信したりすることによって実施している。しかし定期的な監視に失敗してもプログラムのどこで停止していたかを外部から知ることは困難である場合が多い。  
本発明にかかるＣＰＵでは、任意の箇所にブレークポイントを動的に設定し、対象プログラムへの影響を最小限にして動作を解析することができる。このため、どこで停止しているかに加え、どの処理に時間がかかっているか まで調査することが可能になる。  
まず解析したい対象プログラムに対して、性能ボトルネックを監視したい任意の箇所にブレークポイントを設定する。図１２では、死活監視メッセージの受信処理にブレークポイントを設定している。解析用仮想コアから対象プログラムに対して死活監視用のメッセージを送信すると、被解析仮想コア上でデバッグ例外が発生し、命令Aによって解析用仮想コアに通知する。この通知があった場合、解析用仮想コアは対象プログラムがメッセージを受信したことを知ることができ、通知が来ない場合、死活監視メッセージが途中で失われたか、解析対象プログラムがメッセージの受信処理を実行できない状態であると判断することができる。対象プログラムはメッセージ受信後、死活監視に対する応答メッセージを送信する。前述の通知があったうえでこの応答メッセージが無い場合には、その間に停止する要因があると判断することができる。
【００６３】
本発明にかかるCPUでは、コンテキストスイッチを発生させず、同一物理コア内の仮想コア間でCPU命令を数命令動作させるだけでレジスタ情報を読み出せるため、対象プログラムにはほとんど検知できないレベルの影響しか与えない。そのため処理にかかった時間を高精度に計測することができる。このことにより、死活監視メッセージ送信、命令Aによる解析対象プログラムのメッセージ受信検知、応答メッセージ受信などの各ポイントで時刻を記録することにより、どの部分に時間がかかったかを知ることもでき、性能ボトルネックの調査に応用できる。
【００６４】
［効果の説明］  
次に、本発明の中央演算装置を用いたサーバなどの情報処理装置で提供できる幾つかの効果を例示する。
【００６５】
第一の効果は、動作中のプログラムに対してほぼ影響を与えずにデバッグ・トレースを可能できることである。これは、例えばデバッガを同一物理コア内の隣接した別の仮想コア上で動作させることでプログラム実行中のコア上でのコンテキストスイッチやデバッガ起動を不要とすること、および、仮想コア間のレジスタ参照や同期のためのコストが小さいことにより、全体のオーバヘッドが非常に小さいためである。
【００６６】
第二の効果は、JTAGやICEといった特別なハードウェアを必要とせずにリアルタイムトレースを実現できることである。これは、隣接仮想コアはその特性上、解析対象の仮想コアと同じ速度・周波数で動作する能力を通常有して、本発明により仮想コア間のレジスタ参照をプログラムから制御できるように成ることで、リアルタイムトレースに必要な機能要件をも同時に満たすためである。
【００６７】
第三の効果は、レジスタ参照機能による高速なデータ転送を使用した並列処理を実現できることである。これは、異なる物理コア間の同期や、メインメモリ経由でのデータ転送を含む低速なプロセス間通信手段を必要とせずに、数個のCPU命令のみで仮想コア間のイベント通知やレジスタ参照によるデータ転送を低コストで実施しているためである。
【００６８】
また、先行技術文献に対する効果としては、特許文献１や２に記載されたCPU装置では、チップ外部からあらかじめ別の領域にコピーしておいたレジスタ情報を読み出せる。しかし、この方法で参照できるレジスタ値は過去の内容であるため、読み出した内容に基づいた次の解析処理を実行としてもこの時点で既にCPUは先の処理に実行を進めており、リアルタイムなデバッグに使用することはできない。  
これに対し、本発明では、実行パイプラインを共有する仮想コア間でレジスタ情報を読み出すため、他方の仮想コア（スレッド）をわずかな短時間のみ停止して読み出し中にレジスタを更新しないように同期することが容易であり、コピー領域を必要とせずに低コストでレジスタを参照可能である。結果、リアルタイム性が向上したデバッグ・トレースを実現できる。
【００６９】
また、カーネルを解析対象とする際に有用である。これはサーバOS用仮想コア上で動作するようなOSが起動途中やストール中などの理由で操作が制限されている場合であっても、解析用仮想コア上で独立して動作するOSを介して解析対象とするカーネルの挙動を調査することができる。  
また、より細かい粒度でプログラムやカーネルを解析・デバッグできる。
【００７０】
以上説明したように、本発明によれば、仮想コアで使用しているレジスタ情報を低オーバヘッドで取得して、動作中の対象プログラムの処理動作を検証可能とする中央演算装置及び情報処理装置を提供できる。  
また、本発明によれば、所定の仮想コアで使用しているレジスタ情報を中央演算装置の内部動作により低オーバヘッドで取得する仮想コア内レジスタ値取得方法、及びその方法を用いたプログラムの検証方法を提供できる。
【００７１】
また、上記本願発明にかかる命令群データや解析用プログラムは、記憶媒体に固定的に記録されて頒布されても良い。当該記録媒体に記録されたプログラムは、有線、無線、又は記録媒体そのものを介して、メモリに読込まれ、制御部等を動作させる。尚、記録媒体を例示すれば、オプティカルディスクや磁気ディスク、半導体メモリ装置、ハードディスクなどが挙げられる。
【００７２】
以上に実施形態を図示して説明したが、そのブロック構成の分離併合、並列要素数の変更、処理手順の入れ替えなどの変更は本発明の趣旨および説明される機能を満たせば自由であり、本発明を限定するものではない。
【００７３】
また、上記の実施形態の一部又は全部は、以下のようにも記載されうる。尚、以下の付記は本発明をなんら限定するものではない。  
［付記１］
物理コア上に複数の仮想コアを構築可能である中央演算装置であって、
任意の仮想コアの実行コンテキストに影響を与えることなく、該仮想コアで用いる現在のレジスタ値を同一物理コア上の他の仮想コアから直接参照する参照命令を自仮想コアで実行する或いは他仮想コアに実行させる手段と、
前記レジスタ値を参照する前記参照命令を実行する権限を仮想コアごとに切り替え得る手段と、
を有する
ことを特徴とする中央演算装置。
【００７４】
［付記２］
前記参照命令によって参照され得るレジスタ値の変更を伴い得る自他の仮想コアでの処理を停止することを実施する参照準備命令を自仮想コアで実行する或いは他仮想コアに実行させる手段を更に有することを特徴とする上記付記記載の中央演算装置。
【００７５】
［付記３］
前記参照準備命令によって停止された仮想コアの停止状態を解除する参照準備解除命令を自仮想コアで実行する或いは他仮想コアに実行させる手段を更に有することを特徴とする上記付記記載の中央演算装置。
【００７６】
［付記４］
同一物理コアに属する他の仮想コアから通知を受けた際に、自仮想コアのデバッグレジスタに前記参照命令、参照準備命令、参照準備解除命令の何れかを実行又は実行し合うポイントを設定する設定命令を自仮想コアで実行する或いは他仮想コアに実行させる手段を更に有することを特徴とする上記付記記載の中央演算装置。
【００７７】
［付記５］
１つの物理コア上に仮想コアを複数実装可能であり、前記物理コア内に構築される各レジスタが外部の記憶要素とのデータ転送よりも高速動作する構成を有する中央演算装置であって、
解析対象とする仮想コアの実行コンテキストに影響を与えることなく、該仮想コアで動作させるプログラム実行にかかる現在のレジスタ値を同一物理コア上の他の仮想コアから直接参照する参照命令を自仮想コアで実行する或いは他仮想コアに実行させる手段と、
前記参照命令によって参照され得るレジスタ値の変更を伴い得る自他の仮想コアでの処理を停止することを実施する参照準備命令を自仮想コアで実行する或いは他仮想コアに実行させる手段と
前記参照準備命令によって停止された仮想コアの停止状態を解除する参照準備解除命令を自仮想コアで実行する或いは他仮想コアに実行させる手段と、
同一物理コアに属する他の仮想コアから通知を受けた際に、自仮想コアのデバッグレジスタに前記参照命令、参照準備命令、参照準備解除命令の何れかを実行又は実行し合うポイントを設定する設定命令を自仮想コアで実行する或いは他仮想コアに実行させる手段と、
前記レジスタ値を参照する前記参照命令を実行する権限を仮想コアごとに切り替え得る手段と、
を有する
ことを特徴とする中央演算装置。
【００７８】
［付記６］
前記各命令を実行或いは実行させる仮想コアそれぞれに、該仮想コアが構築される同一物理コアをパーティショニングすることによってハードウェアリソースをそれぞれ割り当て、独立したＯＳを動作させ得る機能を有することを特徴とする上記付記記載に記載の中央演算装置。
【００７９】
［付記７］
前記各命令の受け渡しを行う仮想コアに跨ったＯＳを動作させ得る機能を有することを特徴とする上記付記記載に記載の中央演算装置。
【００８０】
［付記８］
上記付記記載の中央演算装置を搭載すると共に、
同一物理コア上の複数の仮想コアの１つ若しくは２以上（最大仮想コア数以下）をプログラム実行主体として使用するプログラムを対象に、前記複数の仮想コアの何れか又は複数を実行主体とみなして動作するＯＳ上から、少なくとも 任意の仮想コアの実行コンテキストに影響を与えることなく、該仮想コアで用いる現在のレジスタ値を同一物理コア上の他の仮想コアから直接参照する参照命令を使用して解析・デバッグ・並列処理の何れか又は組み合わせを実行する
ことを特徴とする情報処理装置。
【００８１】
［付記９］
上記付記記載の中央演算装置における物理コア内の各仮想コアに対して、それぞれの仮想コア上で異なるＯＳが起動できるようにパーティショニングを可能とした異なるＡＣＰＩテーブルを生成することを特徴とするＢＩＯＳシステム。
【００８２】
［付記１０］
１つの物理コア上に複数の仮想コアが構築された環境下で、
任意の仮想コアが使用するレジスタを参照する権限を、同一の物理コアに属する他の仮想コアにも与え得る設定を有効に設定するステップと、
前記任意の仮想コアの実行コンテキストに影響を与えることなく、該仮想コアで用いる現在のレジスタ値を前記同一物理コア上の他の仮想コアから直接参照する参照命令を、前記同一物理コアに属する任意の他の仮想コアから実行して、該任意の他の仮想コアが 参照を受ける前記任意の仮想コアが使用した現レジスタ値を識別するステップと、
を含むことを特徴とする中央演算装置の内部動作による仮想コア内レジスタ値取得方法。
【００８３】
［付記１１］
前記参照命令によって参照され得るレジスタ値の変更を伴い得る自他の仮想コアでの処理を停止することを実施する参照準備命令を実行するステップ又は他仮想コアに実行させるステップを前記参照命令に先だって実行することを特徴とする上記付記記載の仮想コア内レジスタ値取得方法。
【００８４】
［付記１２］
前記参照準備命令によって停止された仮想コアの停止状態を解除する参照準備解除命令を自仮想コアで実行するステップ又は他仮想コアに実行させるステップを前記参照命令の後に実行することを特徴とする上記付記記載の仮想コア内レジスタ値取得方法。
【００８５】
［付記１３］
同一物理コアに属する他の仮想コアから通知を受けた際に、自仮想コアのデバッグレジスタに前記参照命令、参照準備命令、参照準備解除命令の何れかを実行又は実行し合うポイントを設定する設定命令を自仮想コアで実行するステップ又は他仮想コアに実行させるステップを前記参照命令を実行する条件設定に用いることを特徴とする上記付記記載の仮想コア内レジスタ値取得方法。
【００８６】
［付記１４］
１つの物理コア上に複数の仮想コアを構築され、且つ、任意の仮想コアが使用するレジスタを参照する権限を 同一の物理コアに属する他の仮想コアにも与え得る設定を有効に設定し、該環境下で、
前記同一物理コア上の複数の仮想コアの１つ若しくは２以上（最大仮想コア数以下）をプログラム実行主体として使用するプログラムを対象に、前記複数の仮想コアの何れか又は複数を実行主体とみなして動作するＯＳ上から、少なくとも 任意の仮想コアの実行コンテキストに影響を与えることなく、該仮想コアで用いる現在のレジスタ値を同一物理コア上の他の仮想コアから直接参照する参照命令を実行し、
前記参照命令を用いて得た仮想コアのレジスタ値を用いて解析・デバッグ・並列処理の何れか又は組み合わせを実行する
ことを特徴とするプログラムの検証方法。
【００８７】
［付記１５］
前記参照命令によって参照され得るレジスタ値の変更を伴い得る自他の仮想コアでの処理を停止することを実施する参照準備命令を自仮想コアで実行又は他仮想コアに実行させることを前記参照命令に先だって実行することを特徴とする上記付記記載のプログラムの検証方法。
【００８８】
［付記１６］
前記参照準備命令によって停止された仮想コアの停止状態を解除する参照準備解除命令を自仮想コアで実行又は他仮想コアに実行させることを前記参照命令の後に実行することを特徴とする上記付記記載のプログラムの検証方法。
【００８９】
［付記１７］
同一物理コアに属する他の仮想コアから通知を受けた際に、自仮想コアのデバッグレジスタに前記参照命令、参照準備命令、参照準備解除命令の何れかを実行又は実行し合うポイントを設定する設定命令を自仮想コアで実行又は他仮想コアに実行させることを前記参照命令を実行する条件設定に用いることを特徴とする上記付記記載のプログラムの検証方法。
【産業上の利用可能性】
【００９０】
本発明は、例えば、カーネル、アプリケーションのデバッグ、性能ボトルネック調査、サーバプログラムの診断、死活監視、レジスタ参照を用いた高速並列検証処理などのように、様々なプログラムの検証に使用できる。
【符号の説明】
【００９１】
１    物理コア
２    仮想コア
３    仮想コア用レジスタ
４    命令実行権限設定部
１０  CPUコア
１１、１２  仮想コア
２１、２２  データレジスタ
３１、３２  デバッグレジスタ
４１、４２  解析権限切替レジスタ
５１、５２  I/Oコントローラ
６１  メモリ
６２  メモリコントローラ
７０  BIOS
７１、７２  ACPIテーブル
８１、８２  NIC
【図１】
2014203106.tif 000003
【図２】
2014203106.tif 000004
【図３】
2014203106.tif 000005
【図４】
2014203106.tif 000006
【図５】
2014203106.tif 000007
【図６】
2014203106.tif 000008
【図７】
2014203106.tif 000009
【図８】
2014203106.tif 000010
【図９】
2014203106.tif 000011
【図１０】
2014203106.tif 000012
【図１１】
2014203106.tif 000013
【図１２】
2014203106.tif 000014