(57)【要約】  マルチコア環境でのソフトウェアの検証を容易にする。マルチコアプロセッサシステム（１００）は、状態（１０１）にて、シングルＯＳ（１１３）を実行している。デバッガＶＭ（１１１）は、シングルＯＳ（１１３）上で実行中の検証対象アプリ（１１５＿Ｓ）の状態変化を受け付けると、実行中ＯＳをシングルＯＳ（１１３）からマルチＯＳ（１１４）に切り替える。続けて、デバッガＶＭ（１１１）は、マルチＯＳ（１１４）上で実行中の検証対象アプリ（１１５＿Ｍ）の状態変化を受け付けると、マルチコア環境区間データ（１２４）とシングルコア環境区間データ（１２３）を比較する。
2013008326.tif 000002
【特許請求の範囲】
【請求項１】
仮想マシンが、
第１オペレーティングシステムでのアプリケーションの起動に基づいてコンテキスト領域を確保するとともに第２オペレーティングシステムに前記コンテキスト領域の情報を通知し、
前記アプリケーションの状態変化に基づいて前記コンテキスト領域のデータを退避領域に退避するとともに、前記アプリケーションの実行を前記第１オペレーティングシステムから前記第２オペレーティングシステムに切り替え、
前記第２オペレーティングシステムで実行される前記アプリケーションの状態変化に基づいて前記コンテキスト領域と前記退避領域とを比較すること
を特徴とするソフトウェア検証方法。
【請求項２】
前記仮想マシンは、前記第２オペレーティングシステムに前記コンテキスト領域を前記第１オペレーティングシステムと共用するように指示すること
を特徴とする請求項１に記載のソフトウェア検証方法。
【請求項３】
前記比較の結果が一致を示すときは、前記仮想マシンは前記アプリケーションの実行を前記第２オペレーティングシステムから前記第１オペレーティングシステムに切り替えること
を特徴とする請求項１または請求項２に記載のソフトウェア検証方法。
【請求項４】
前記仮想マシンは、前記退避領域のデータを前記コンテキスト領域に書き戻すこと
を特徴とする請求項３に記載のソフトウェア検証方法。
【請求項５】
前記比較の結果が不一致を示すときは、前記仮想マシンはアラートを出力すること
を特徴とする請求項１乃至請求項３の何れか一に記載のソフトウェア検証方法。
【請求項６】
前記アプリケーションの状態変化は、排他制御処理、同期待ち処理、分岐処理、またはエラー処理のうちの少なくとも一の処理の開始を含むこと
を特徴とする請求項１乃至請求項５の何れか一に記載のソフトウェア検証方法。
【請求項７】
前記比較の結果が不一致を示し、かつ、前記アプリケーションの状態変化が前記エラー処理以外となる他の処理の開始であるときは、前記仮想マシンは前記アラートを出力しつつ、前記アプリケーションの実行を前記第２オペレーティングシステムから前記第１オペレーティングシステムに切り替えること
を特徴とする請求項６に記載のソフトウェア検証方法。
【請求項８】
前記比較の結果が不一致を示し、かつ、前記アプリケーションの状態変化が前記エラー処理の開始であるときは、前記仮想マシンは前記エラー処理に関する情報を出力しつつ、前記アプリケーションを停止すること
を特徴とする請求項６に記載のソフトウェア検証方法。
【請求項９】
前記第１オペレーティングシステムはシングルコア対応であり、
前記第２オペレーティングシステムはマルチコア対応であること
を特徴とする請求項１乃至請求項８の何れか一に記載のソフトウェア検証方法。
【請求項１０】
前記仮想マシンは、前記アプリケーションが起動される前に、前記第２オペレーティングシステムおよび前記第１オペレーティングシステムをブートするとともに、前記退避領域をメモリに確保すること
を特徴とする請求項１乃至請求項９の何れか一に記載のソフトウェア検証方法。
【請求項１１】
第１オペレーティングシステムと、
第２オペレーティングシステムと、
前記第１オペレーティングシステムと前記第２オペレーティングシステムとを制御する制御ユニットと、
前記第１オペレーティングシステムおよび前記第２オペレーティングシステムで共用されるコンテキスト領域と退避領域とを含むメモリと、
を含み、
前記制御ユニットは、
前記退避領域に保持される第１オペレーティングシステムでのアプリケーションの実行結果と前記コンテキスト領域に保持される前記第２オペレーティングシステムでの前記アプリケーションの実行結果とを比較すること
を特徴とするソフトウェア検証システム。
【請求項１２】
前記制御ユニットは、
前記アプリケーションが所定の処理を開始するときに、前記アプリケーションを実行するシステムを前記第１オペレーティングシステムまたは前記第２オペレーティングシステムの間で切り替えること
を特徴とする請求項１１に記載のソフトウェア検証システム。
【請求項１３】
前記所定の処理は、排他制御処理、同期待ち処理、分岐処理、またはエラー処理の何れかであること
を特徴とする請求項１１または請求項１２に記載のソフトウェア検証システム。
【請求項１４】
前記制御ユニットはデバッガであること
を特徴とする請求項１１乃至請求項１３の何れか一に記載のソフトウェア検証システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェアを検証するソフトウェア検証方法、およびソフトウェア検証システムに関する。
【背景技術】
【０００２】
近年、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）が１つ搭載されたコンピュータであるシングルコアプロセッサシステムに代わって、ＣＰＵが複数搭載されたコンピュータであるマルチコアプロセッサシステムを採用する装置が増えている。マルチコアプロセッサシステム環境（以下、「マルチコア環境」と称する）では、ソフトウェア内のスレッドを各ＣＰＵに割り当てることで、各スレッドを並列に実行することができ、ソフトウェアを高速に実行することができる。ここで、なお、スレッドとは、プログラムの実行単位である。【０００３】
シングルコアプロセッサシステム環境（以下、「シングルコア環境」と称する）で動作していたソフトウェアをマルチコア環境で動作する場合、並列化に伴った副作用が発生していた。たとえば、動作タイミングの変化による潜在的な障害が顕著化するという副作用が発生していた。また、新たにマルチコア環境用に開発されるソフトウェアに関しても、全ての動作タイミングを検証することは、シングルコア環境より困難となっていた。【０００４】
たとえば、ソフトウェアの検証方法として、ブレークポイントを設定することで、ソフトウェアのトレース情報を取得する技術が開示されている。また、シングルコア環境のソフトウェアとマルチコア環境のソフトウェアとを実行し、実行時データを比較する技術が開示されている。また、複数の環境を動作する技術として、コンピュータの資源を仮想化した仮想計算機上で複数の環境を実行し、複数の環境上で実行されるソフトウェアの実行結果を比較するという技術が開示されている（たとえば、下記特許文献１〜３を参照。）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平８−１８５３３６号公報
【特許文献２】特開平８−１３７７１４号公報
【特許文献３】特開２００４−３５５２３３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、上述した従来技術において、シングルコアプロセッサシステム環境とマルチコアプロセッサシステム環境の実行結果を比較する場合、ステップごとにブレークポイントを設定して比較することになるため、検証に時間がかかるという問題があった。また、ステップごとにブレークポイントを設定せず検証を行った場合、メモリ破壊が発生し、検証対象のソフトウェアを続行することでデバッグ情報も上書きされてしまうことがあり、メモリ破壊の原因を特定することが困難となる問題があった。また、メモリ破壊の問題が、検証対象のソフトウェアによる途中演算結果である場合も、途中演算を行っている箇所を特定することが困難であるという問題があった。【０００７】
本発明は、上述した従来技術による問題点を解消するため、マルチコア環境でのソフトウェアの検証を容易にするソフトウェア検証方法、およびソフトウェア検証システムを提供することを目的とする。
【課題を解決するための手段】
【０００８】
上述した課題を解決し、目的を達成するため、本発明の一側面によれば、仮想マシンが、第１オペレーティングシステムでのアプリケーションの起動に基づいてコンテキスト領域を確保するとともに第２オペレーティングシステムにコンテキスト領域の情報を通知し、アプリケーションの状態変化に基づいてコンテキスト領域のデータを退避領域に退避するとともに、アプリケーションの実行を第１オペレーティングシステムから第２オペレーティングシステムに切り替え、第２オペレーティングシステムで実行されるアプリケーションの状態変化に基づいてコンテキスト領域と退避領域とを比較するソフトウェア検証方法、およびソフトウェア検証システムが提案される。
【発明の効果】
【０００９】
本発明の一側面によれば、マルチコア環境でのソフトウェアの検証を容易にできるという効果を奏する。
【図面の簡単な説明】
【００１０】
【図１】図１は、マルチコアプロセッサシステム１００の動作例を示す説明図である。
【図２】図２は、マルチコアプロセッサシステム１００のハードウェア例を示すブロック図である。
【図３】図３は、マルチコアプロセッサシステム１００の機能例を示すブロック図である。
【図４】図４は、シングルＯＳ１１３動作中の状態例を示す説明図である。
【図５】図５は、マルチＯＳ１１４動作中の状態例を示す説明図である。
【図６】図６は、シングルＯＳ１１３およびマルチＯＳ１１４起動時の処理手順の一例を示すフローチャートである。
【図７】図７は、検証対象アプリ１１５起動時の処理手順の一例を示すフローチャートである。
【図８】図８は、検証対象アプリ１１５の検証中における処理手順の一例を示すフローチャート（その１）である。
【図９】図９は、検証対象アプリ１１５の検証中における処理手順の一例を示すフローチャート（その２）である。
【図１０】図１０は、本実施の形態にかかるコンピュータを用いたシステムの適用例を示す説明図である。
【発明を実施するための形態】
【００１１】
以下に添付図面を参照して、開示のソフトウェア検証方法、およびソフトウェア検証システムの実施の形態を詳細に説明する。なお、本実施の形態にかかるソフトウェア検証システムの実施の形態の一例として、複数のＣＰＵを有するマルチコアプロセッサシステムにて説明を行う。マルチコアプロセッサとは、コアが複数搭載されたプロセッサである。コアが複数搭載されていれば、複数のコアが搭載された単一のプロセッサでもよく、シングルコアのプロセッサが並列されているプロセッサ群でもよい。なお、本実施の形態では、説明を単純化するため、シングルコアのプロセッサが並列されているプロセッサ群を例にあげて説明する。
【００１２】
図１は、マルチコアプロセッサシステム１００の動作例を示す説明図である。マルチコアプロセッサシステム１００は、ＣＰＵ＃０〜ＣＰＵ＃３と、共用メモリ１１２と、を含み、デバッガＶＭ（ｖｉｒｔｕａｌ  ｍａｃｈｉｎｅ）１１１の機能によって、シングルＯＳ（オペレーティングシステム：Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）１１３か、マルチＯＳ１１４か、のいずれかを実行している。
【００１３】
デバッガＶＭ１１１は、コンピュータの資源を仮想化した仮想計算機であり、さらにデバッガの機能を有している。具体的に、デバッガＶＭ１１１は、デバッガＶＭ１１１上にて動作するシングルＯＳ１１３とマルチＯＳ１１４を制御しており、実行ＯＳをシングルＯＳ１１３からマルチＯＳ１１４に、またはマルチＯＳ１１４からシングルＯＳ１１３に切り替える。また、デバッガＶＭ１１１は、デバッガの機能として、メモリダンプ、スタックトレース等が行えてもよい。共用メモリ１１２は、ＣＰＵ＃０〜ＣＰＵ＃３からアクセスされるメモリである。シングルＯＳ１１３は、１つのＣＰＵで動作するＯＳであり、マルチＯＳ１１４は、複数のＣＰＵで動作するＯＳである。
【００１４】
図１では、マルチコアプロセッサシステム１００の動作環境として、状態１０１と状態１０２を示している。状態１０１におけるマルチコアプロセッサシステム１００は、実行ＯＳとして、シングルＯＳ１１３を実行しているシングルコア環境となっている状態である。状態１０２におけるマルチコアプロセッサシステム１００は、マルチコアプロセッサシステム１００がマルチＯＳ１１４を実行しているマルチコア環境となっている状態である。
【００１５】
初めに、状態１０１と状態１０２で共通する説明を行う。シングルＯＳ１１３は、ＣＰＵ＃０で実行され、マルチＯＳ１１４は、ＣＰＵ＃０〜ＣＰＵ＃３で実行する。本実施の形態にかかるソフトウェア検証方法では、検証対象となるソフトウェアとして、アプリケーションソフトウェア（以下、「アプリ」と称する）である検証対象アプリ１１５＿Ｓ、検証対象アプリ１１５＿Ｍの検証を行う。検証対象アプリ１１５＿Ｓと検証対象アプリ１１５＿Ｍは、ソースコード１１６から生成されていることを想定する。
【００１６】
検証対象アプリ１１５＿Ｓはシングルコア環境で実行されるアプリであり、検証対象アプリ１１５＿Ｍはマルチコア環境で実行されるアプリである。検証対象アプリ１１５＿Ｓと検証対象アプリ１１５＿Ｍは、同一のオブジェクトコードであってもよいし、異なっていてもよい。ソースコード１１６は、引数なし戻り値ｉｎｔ型のメイン関数の内部に、同期待ち処理を実行することが記述されている。
【００１７】
また、検証対象アプリ１１５＿Ｓと検証対象アプリ１１５＿Ｍは、同一のソースコード１１６から生成されていると想定したが、異なっていてもよい。たとえば、検証対象アプリ１１５＿Ｍは、検証対象アプリ１１５＿Ｓのソースコードに対してマルチコア環境対応のコードが追加されたソースコードから生成されたオブジェクトコードであってもよい。
【００１８】
マルチコアプロセッサシステム１００は、検証対象アプリコンテキスト領域１２１と退避領域１２２を確保する。検証対象アプリコンテキスト領域１２１とは、検証対象となるソフトウェアが用いるコンテキスト領域である。また、コンテキスト領域とは、ＣＰＵのレジスタの値、プログラムカウンタ、スタックポインタなどといったアプリが使用するデータを格納する領域である。
【００１９】
状態１０１にて、ＣＰＵ＃０は、検証対象アプリ１１５＿Ｓを実行し、検証対象アプリ１１５＿Ｓの状態変化の一つである同期待ち処理に到達している。状態１０１に至るまでに、ＣＰＵ＃０は、検証対象アプリ１１５＿Ｓの実行結果であるシングルコア環境区間データ１２３を検証対象アプリコンテキスト領域１２１内に書き込む。
【００２０】
検証対象アプリ１１５＿Ｓの状態変化を受け付けたデバッガＶＭ１１１は、実行ＯＳをシングルＯＳ１１３からマルチＯＳ１１４に切り替える。このとき、デバッガＶＭ１１１は、シングルコア環境区間データ１２３を退避領域１２２に退避する。
【００２１】
続けて、状態１０２にて、ＣＰＵ＃０〜ＣＰＵ＃３は、検証対象アプリ１１５＿Ｍを実行し、検証対象アプリ１１５＿Ｍの状態変化の一つである同期待ち処理に到達している。状態１０２に至るまでに、ＣＰＵ＃０〜ＣＰＵ＃３は、検証対象アプリ１１５＿Ｍの実行結果であるマルチコア環境区間データ１２４を検証対象アプリコンテキスト領域１２１内に書き込む。
【００２２】
検証対象アプリ１１５＿Ｍの状態変化を受け付けたデバッガＶＭ１１１は、シングルコア環境区間データ１２３とマルチコア環境区間データ１２４を比較する。このように、マルチコアプロセッサシステム１００は、シングルコア環境とマルチコア環境で検証対象アプリをそれぞれ実行し、２つのアプリの書込データの比較をアプリの状態変化時に行う。これにより、マルチコアプロセッサシステム１００は、全てのステップをトレースせずに済み、マルチコア環境でのアプリ検証を容易にする。
【００２３】
（マルチコアプロセッサシステム１００のハードウェア）
図２は、マルチコアプロセッサシステム１００のハードウェア例を示すブロック図である。本実施の形態におけるマルチコアプロセッサシステム１００は、携帯電話などの携帯端末を想定している。図３において、マルチコアプロセッサシステム１００は、ＣＰＵｓ２０１と、ＲＯＭ（Ｒｅａｄ‐Ｏｎｌｙ  Ｍｅｍｏｒｙ）２０２と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）２０３と、を含む。
【００２４】
また、マルチコアプロセッサシステム１００は、フラッシュＲＯＭ２０４と、フラッシュＲＯＭコントローラ２０５と、フラッシュＲＯＭ２０６と、を含む。また、マルチコアプロセッサシステム１００は、ユーザやその他の機器との入出力装置として、ディスプレイ２０７と、Ｉ／Ｆ（Ｉｎｔｅｒｆａｃｅ）２０８と、キーボード２０９と、を含む。また、各部はバス２１０によってそれぞれ接続されている。なお、共用メモリ１１２の具体的な装置としては、ＲＡＭ２０３、フラッシュＲＯＭ２０４である。また、共用メモリ１１２に格納されるデータのうち、書込を行わないデータに関しては、ＲＯＭ２０２に格納されていてもよい。
【００２５】
ここで、ＣＰＵｓ２０１は、マルチコアプロセッサシステム１００の全体の制御を司る。ＣＰＵｓ２０１は、ＣＰＵ＃０〜ＣＰＵ＃３を含む。また、ＣＰＵｓ２０１は、専用のキャッシュメモリを有してもよい。
【００２６】
ＲＯＭ２０２は、ブートプログラムなどのプログラムを記憶している。ＲＡＭ２０３は、ＣＰＵｓ２０１のワークエリアとして使用される。フラッシュＲＯＭ２０４は、読出し速度が高速なフラッシュＲＯＭであり、たとえば、ＮＯＲ型フラッシュメモリである。たとえば、フラッシュＲＯＭ２０４は、ＯＳなどのシステムソフトウェアやアプリケーションソフトウェアなどを記憶している。たとえば、ＯＳを更新する場合、マルチコアプロセッサシステム１００は、Ｉ／Ｆ２０８によって新しいＯＳを受信し、フラッシュＲＯＭ２０４に格納されている古いＯＳを、受信した新しいＯＳに更新する。
【００２７】
フラッシュＲＯＭコントローラ２０５は、ＣＰＵｓ２０１の制御に従ってフラッシュＲＯＭ２０６に対するデータのリード／ライトを制御する。フラッシュＲＯＭ２０６は、データの保存、運搬を主に目的としたフラッシュＲＯＭであり、たとえば、ＮＡＮＤ型フラッシュメモリである。フラッシュＲＯＭ２０６は、フラッシュＲＯＭコントローラ２０５の制御で書き込まれたデータを記憶する。データの具体例としては、マルチコアプロセッサシステム１００を使用するユーザがＩ／Ｆ２０８を通して取得した画像データ、映像データや、また本実施の形態にかかるソフトウェア検証方法を実行するプログラムなどである。フラッシュＲＯＭ２０６は、たとえば、メモリカード、ＳＤカードなどを採用することができる。
【００２８】
ディスプレイ２０７は、カーソル、アイコンあるいはツールボックスを始め、文書、画像、機能情報などのデータを表示する。ディスプレイ２０７は、たとえば、ＴＦＴ（Ｔｈｉｎ  Ｆｉｌｍ  Ｔｒａｎｓｉｓｔｏｒ）液晶ディスプレイなどを採用することができる。
【００２９】
Ｉ／Ｆ２０８は、通信回線を通じてＬＡＮ、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワーク２１１に接続され、ネットワーク２１１を介して他の装置に接続される。そして、Ｉ／Ｆ２０８は、ネットワーク２１１と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ２０８には、たとえばモデムやＬＡＮアダプタなどを採用することができる。
【００３０】
キーボード２０９は、数字、各種指示などの入力のためのキーを有し、データの入力を行う。また、キーボード２０９は、タッチパネル式の入力パッドやテンキーなどであってもよい。
【００３１】
（マルチコアプロセッサシステム１００の機能）
次に、マルチコアプロセッサシステム１００の機能について説明する。図３は、マルチコアプロセッサシステム１００の機能例を示すブロック図である。マルチコアプロセッサシステム１００は、確保部３０１と、通知部３０２と、受付部３０３と、比較部３０４と、交換部３０５と、切替部３０６と、出力部３０７とを含む。この制御部となる機能（確保部３０１〜出力部３０７）は、記憶装置に記憶されたプログラムをＣＰＵｓ２０１が実行することにより、その機能を実現する。記憶装置とは、具体的には、たとえば、図２に示したＲＯＭ２０２、ＲＡＭ２０３、フラッシュＲＯＭ２０４、フラッシュＲＯＭ２０６などである。また、確保部３０１〜出力部３０７は、デバッガＶＭ１１１の機能に含まれる。
【００３２】
また、マルチコアプロセッサシステム１００は、ユーザ空間３１０を確保している。ユーザ空間３１０とは、アプリのコンテキスト領域を確保する空間である。さらに、マルチコアプロセッサシステム１００は、シングルコア環境実行中の場合、ＣＰＵ＃０がシングルＯＳ１１３を実行する。また、マルチコアプロセッサシステム１００は、マルチコア環境実行中の場合、ＣＰＵ＃０がカーネル３１１＃０を実行し、ＣＰＵ＃１はカーネル３１１＃１を実行し、ＣＰＵ＃２はカーネル３１１＃２を実行し、ＣＰＵ＃３はカーネル３１１＃３を実行する。カーネル３１１は、マルチＯＳ１１４の中核をなす機能を有するソフトウェアである。
【００３３】
確保部３０１は、第１オペレーティングシステムと第２オペレーティングシステムとで共用するユーザ空間３１０を確保する機能を有する。なお、第１オペレーティングシステムとは、シングルＯＳ１１３であり、第２オペレーティングシステムとは、マルチＯＳ１１４である。たとえば、確保部３０１は、シングルＯＳ１１３がユーザ空間３１０を確保した後、ユーザ空間３１０を共用するようにマルチＯＳ１１４に指示する。また、確保部３０１は、マルチＯＳ１１４が確保したユーザ空間３１０に関して、シングルＯＳ１１３に共用するように指示してもよい。
【００３４】
また、確保部３０１は、共用メモリ１１２から退避領域１２２を確保する。退避領域１２２は、ユーザ空間３１０以外となる未割当の空間から確保される。なお、退避領域１２２は、８、１６［Ｋバイト］といった領域でよい。なお、確保されたユーザ空間３１０の上限、下限アドレス、退避領域１２２の上限、下限アドレスは、ＲＡＭ２０３、フラッシュＲＯＭ２０４などの記憶領域に記憶される。
【００３５】
通知部３０２は、第１オペレーティングシステムでのアプリの起動に基づいてコンテキスト領域を確保するとともに第２オペレーティングシステムにコンテキスト領域の情報を通知する機能を有する。たとえば、通知部３０２は、シングルＯＳ１１３での検証対象アプリ１１５＿Ｓでの起動に応じて確保された検証対象アプリコンテキスト領域１２１を、マルチＯＳ１１４に通知する。
【００３６】
受付部３０３は、第１および第２オペレーティングシステムで実行されるアプリの状態変化を受け付ける機能を有する。たとえば、受付部３０３は、検証対象アプリ１１５＿Ｓの状態変化をシングルＯＳ１１３から受け付け、検証対象アプリ１１５＿Ｍの状態変化をマルチＯＳ１１４から受け付ける。なお、具体的な状態変化としては、排他制御処理、同期待ち処理、分岐処理、またはエラー処理の開始である。各処理の詳細については図４にて後述する。また、受付元ＯＳとなるシングルＯＳ１１３またはマルチＯＳ１１４の識別情報、受け付けた状態変化の種類については、ＲＡＭ２０３、フラッシュＲＯＭ２０４などの記憶領域に記憶される。
【００３７】
比較部３０４は、第２オペレーティングシステムで実行されるアプリの状態変化に基づいてコンテキスト領域と退避領域１２２とを比較する機能を有する。たとえば、比較部３０４は、マルチＯＳ１１４で実行される検証対象アプリ１１５＿Ｍの状態変化があった場合、検証対象アプリコンテキスト領域１２１内のマルチコア環境区間データ１２４と退避領域１２２内のシングルコア環境区間データ１２３とを比較する。なお、比較の結果は、ＲＡＭ２０３、フラッシュＲＯＭ２０４などの記憶領域に記憶される。
【００３８】
交換部３０５は、コンテキスト領域のデータと退避領域１２２のデータを交換する機能を有する。たとえば、交換部３０５は、検証対象アプリコンテキスト領域１２１内のマルチコア環境区間データ１２４と退避領域１２２内のシングルコア環境区間データ１２３とを交換する。なお、検証対象アプリ１１５が片方のＯＳでしか実行されていない場合、交換部３０５は、検証対象アプリコンテキスト領域１２１内のデータを退避領域１２２に退避するだけでよい。
【００３９】
切替部３０６は、アプリの実行を第１オペレーティングシステムから第２オペレーティングシステムに切り替える機能を有する。また、切替部３０６は、比較部３０４による比較の結果が一致を示すとき、アプリの実行を第２オペレーティングシステムから第１オペレーティングシステムに切り替える。たとえば、切替部３０６は、シングルコア環境区間データ１２３とマルチコア環境区間データ１２４が一致していた場合、マルチＯＳ１１４からシングルＯＳ１１３に切り替える。
【００４０】
また、切替部３０６は、比較部３０４による比較の結果が不一致を示し、かつ検証対象アプリ１１５の状態変化がエラー処理以外となる他の処理の開始であるとき、アプリの実行を第２オペレーティングシステムから第１オペレーティングシステムに切り替える。たとえば、切替部３０６は、シングルコア環境区間データ１２３とマルチコア環境区間データ１２４が不一致であり、かつ状態変化が排他制御処理、同期待ち処理、分岐処理のいずれかの開始である場合、マルチＯＳ１１４からシングルＯＳ１１３に切り替える。
【００４１】
出力部３０７は、比較部３０４による比較の結果が不一致を示す場合、アラートを出力する機能を有する。たとえば、出力部３０７は、シングルコア環境区間データ１２３とマルチコア環境区間データ１２４が不一致である場合、アラートを出力する。なお、出力されるアラートの内容としては、たとえば、状態変化を行う処理が呼ばれたコードのアドレスや、状態変化の種類や、不一致となったシングルコア環境区間データ１２３とマルチコア環境区間データ１２４のメモリダンプ等である。
【００４２】
また、出力部３０７は、比較部３０４による比較の結果が不一致を示し、かつ、アプリの状態変化がエラー処理の開始の場合、エラー処理に関する情報を出力してもよい。エラー処理に関する情報としては、たとえば、エラー処理のエラー要因や、状態変化を行う処理が呼ばれたコードのアドレスや、不一致となったシングルコア環境区間データ１２３とマルチコア環境区間データ１２４のメモリダンプ等である。
【００４３】
具体的に、シングルＯＳ１１３、マルチＯＳ１１４がＰＯＳＩＸ（Ｐｏｒｔａｂｌｅ  Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ  Ｉｎｔｅｒｆａｃｅ）に準拠している場合を想定する。このとき、シングルＯＳ１１３、マルチＯＳ１１４は、シグナルハンドラが実行される場合にデバッガＶＭ１１１にシグナルハンドラのシグナル番号などを通知する。具体的なエラー要因となるシグナル番号として、出力部３０７は、バスエラーを示すＳＩＧＢＵＳ（ＳＩＧｎａｌ  ＢＵＳ  ｅｒｒｏｒ）や無効なアドレスへのアクセスを行ったことを示すＳＩＧＳＥＧＶ（ＳＩＧｎａｌ  ＳＥＧｍｅｎｔａｔｉｏｎ  Ｖｉｏｌａｔｉｏｎ）を出力する。なお、出力形式としては、標準出力への出力、ディスプレイ２０７への表示、または、ＲＡＭ２０３、フラッシュＲＯＭ２０４などの記憶領域に格納してもよい。
【００４４】
図４と図５を用いて、マルチコアプロセッサシステム１００がシングルコア環境の状態と、マルチコア環境の状態について説明する。なお、本実施の形態では、検証対象アプリ１１５の実行順序として、初めにシングルコア環境で検証対象アプリ１１５＿Ｓを実行し、次にマルチコア環境で検証対象アプリ１１５＿Ｍを実行している。しかし、マルチコアプロセッサシステム１００は、初めにマルチコア環境で検証対象アプリ１１５＿Ｍを実行し、次に検証対象アプリ１１５＿Ｓを実行してもよい。
【００４５】
図４は、シングルＯＳ１１３動作中の状態例を示す説明図である。図４で示すマルチコアプロセッサシステム１００の状態は、状態１０１に等しい。ＣＰＵ＃０はシングルＯＳ１１３を実行し、ＣＰＵ＃１〜ＣＰＵ＃３は休止している。初めに、デバッガＶＭ１１１は、シングルＯＳ１１３とマルチＯＳ１１４のブート時に、ユーザ空間３１０と退避領域１２２とを共用メモリ１１２に確保する。
【００４６】
デバッガＶＭ１１１は、シングルＯＳ１１３からの状態変化の通知を受け付ける。状態変化の詳細としては、状態変化一覧４０１に示すとおり、排他制御処理、同期待ち処理、分岐処理、エラー処理、の開始である。シングルＯＳ１１３は、排他制御処理、同期待ち処理、分岐処理、エラー処理の開始を検出すると、状態変化としてデバッガＶＭ１１１に通知する。
【００４７】
排他制御処理は、一方のスレッドがリソース等の使用権を獲得すると、一方のスレッドがリソースの使用権を解放するまで、他のスレッドを待機させる処理である。同期待ち処理は、複数のスレッドの処理を特定のコード位置までで一旦停止させる処理である。全てのスレッドが特定のコード位置に到達した場合、同期待ち処理は、停止を解除し、次の処理を継続する。シングルＯＳ１１３は、検証対象アプリ１１５＿Ｓについて排他制御処理が行われることを、排他制御処理、同期待ち処理を行うシステムコールの呼び出しによって検出することができる。
【００４８】
分岐処理は、スレッドを分岐する処理である。たとえば、分岐処理として、ｆｏｒｋ関数、ＣｒｅａｔｅＴｈｒｅａｄ関数が存在する。シングルＯＳ１１３は、検証対象アプリ１１５＿Ｓについて分岐処理が行われることを、分岐処理を行うシステムコールの呼び出しによって検出することができる。エラー処理は、プログラム内で発生したエラーを通知する処理である。たとえば、エラーが発生した場合、シングルＯＳ１１３は、エラー割込を実行する場合、エラー処理が行われることを検出することができる。
【００４９】
デバッガＶＭ１１１は、状態変化一覧４０１に示す状態変化を受け付けた場合、シングルコア環境区間データ１２３とマルチコア環境区間データ１２４を交換する。具体的に、デバッガＶＭ１１１は、シングルコア環境区間データ１２３を退避領域１２２に退避する。また、デバッガＶＭ１１１は、退避領域１２２に存在するマルチコア環境区間データ１２４を検証対象アプリコンテキスト領域１２１に書き戻す。
【００５０】
図５は、マルチＯＳ１１４動作中の状態例を示す説明図である。図５で示すマルチコアプロセッサシステム１００は、状態１０２に等しい。ＣＰＵ＃０はカーネル３１１＃０を実行し、ＣＰＵ＃１はカーネル３１１＃１を実行し、ＣＰＵ＃２はカーネル３１１＃２を実行し、ＣＰＵ＃３はカーネル３１１＃３を実行する。
【００５１】
デバッガＶＭ１１１は、マルチＯＳ１１４から状態変化一覧４０１に示す状態変化を受け付けた場合、比較部３０４によってシングルコア環境区間データ１２３とマルチコア環境区間データ１２４とを比較する。比較結果が一致した場合、デバッガＶＭ１１１は、マルチＯＳ１１４からシングルＯＳ１１３に切り替える。比較結果が不一致であった場合、デバッガＶＭ１１１は、状態変化がエラー処理でない場合、アラートを出力し、シングルコア環境区間データ１２３とマルチコア環境区間データ１２４を交換し、マルチＯＳ１１４からシングルＯＳ１１３に切り替える。状態変化がエラー処理である場合、デバッガＶＭ１１１は、エラー処理に関する情報を出力し、検証対象アプリ１１５＿Ｍを停止する。
【００５２】
続けて、図４、図５の動作を行うフローチャートを、図６〜図９にて説明する。具体的に、図６では、シングルＯＳ１１３およびマルチＯＳ１１４起動時の処理を説明し、図７では、検証対象アプリ１１５起動時の処理を説明する。図８では、検証対象アプリ１１５の検証中におけるシングルＯＳ１１３での処理を説明し、図９では、検証対象アプリ１１５の検証中におけるマルチＯＳ１１４での処理を説明する。
【００５３】
図６は、シングルＯＳ１１３およびマルチＯＳ１１４起動時の処理手順の一例を示すフローチャートである。デバッガＶＭ１１１は、マルチＯＳ１１４をブートする（ステップＳ６０１）。デバッガＶＭ１１１は、マルチＯＳ１１４から通知を受け付けるまで待機する。マルチＯＳ１１４は、ユーザ空間３１０を確保し（ステップＳ６０２）、確保したユーザ空間３１０をデバッガＶＭ１１１に通知し（ステップＳ６０３）、起動時の処理を終了する。
【００５４】
通知を受け付けたデバッガＶＭ１１１は、ユーザ空間３１０を共用空間として定義する（ステップＳ６０４）。続けて、デバッガＶＭ１１１は、シングルＯＳ１１３をブートする（ステップＳ６０５）。このとき、デバッガＶＭ１１１は、定義した共用空間をシングルＯＳ１１３に通知する。また、デバッガＶＭ１１１は、シングルＯＳ１１３から通知を受け付けるまで待機する。シングルＯＳ１１３は、共用空間をユーザ空間３１０として確保し（ステップＳ６０６）、確保したユーザ空間３１０をデバッガＶＭ１１１に通知し（ステップＳ６０７）、起動時の処理を終了する。通知を受け付けたデバッガＶＭ１１１は、未割当の空間から、退避領域１２２を確保し（ステップＳ６０８）、起動時の処理を終了する。
【００５５】
なお、ステップＳ６０２、ステップＳ６０６の処理にて、シングルＯＳ１１３、マルチＯＳ１１４は、自身のカーネル空間も確保している。なお、カーネル空間は、１［Ｍバイト］程の領域となり、ユーザ空間３１０と比較すると狭い空間となる。
【００５６】
図７は、検証対象アプリ１１５起動時の処理手順の一例を示すフローチャートである。なお、図７では、初めにシングルＯＳ１１３にて検証対象アプリ１１５＿Ｓを起動した後に、マルチＯＳ１１４にて検証対象アプリ１１５＿Ｍを起動しているが、先に検証対象アプリ１１５＿Ｍを起動した後に、検証対象アプリ１１５＿Ｓを起動してもよい。
【００５７】
シングルＯＳ１１３は、検証対象アプリ１１５＿Ｓを起動し（ステップＳ７０１）、検証対象アプリ１１５＿Ｓの起動をデバッガＶＭ１１１に通知し（ステップＳ７０２）、検証対象アプリ１１５起動時の処理を終了する。
【００５８】
通知を受け付けたデバッガＶＭ１１１は、検証対象アプリコンテキスト領域１２１を保存する（ステップＳ７０３）。なお、具体的な保存内容として、デバッガＶＭ１１１は、検証対象アプリコンテキスト領域１２１の下限アドレスと上限アドレスを保存する。続けて、デバッガＶＭ１１１は、コンテキスト領域共用指示をマルチＯＳ１１４に通知する（ステップＳ７０４）。具体的に、デバッガＶＭ１１１は、検証対象アプリコンテキスト領域１２１のアドレスをマルチＯＳ１１４に通知する。通知後、デバッガＶＭ１１１は、検証対象アプリ１１５起動時の処理を終了する。
【００５９】
通知を受け付けたマルチＯＳ１１４は、検証対象アプリコンテキスト領域１２１を用いて検証対象アプリ１１５＿Ｍを起動し（ステップＳ７０５）、検証対象アプリ１１５起動時の処理を終了する。
【００６０】
図８は、検証対象アプリ１１５の検証中における処理手順の一例を示すフローチャート（その１）である。検証対象アプリ１１５＿Ｓは、通常実行を行い続ける（ステップＳ８０１）。通常実行中に行った状態変化は、シングルＯＳ１１３が検出する。また、検証対象アプリ１１５＿Ｓが実行される場合としては、実行ＯＳがシングルＯＳ１１３となる場合である。実行ＯＳがシングルＯＳ１１３となる場合として、たとえば、検証対象アプリ１１５＿Ｓ起動時点の場合や、後述するステップＳ９１２にて実行ＯＳがマルチＯＳ１１４からシングルＯＳ１１３に切り替わった場合である。
【００６１】
シングルＯＳ１１３は、検証対象アプリ１１５＿Ｓの状態変化を検出したか否かを判断する（ステップＳ８０２）。状態変化を検出した場合（ステップＳ８０２：Ｙｅｓ）、シングルＯＳ１１３は、状態変化をデバッガＶＭ１１１に通知し（ステップＳ８０３）、ステップＳ８０２の処理に移行する。状態変化を検出していない場合（ステップＳ８０２：Ｎｏ）、シングルＯＳ１１３は、一定時間経過後、ステップＳ８０２の処理を再び実行する。
【００６２】
デバッガＶＭ１１１は、通知を受け付ける（ステップＳ８０４）。次に、デバッガＶＭ１１１は、検証対象アプリコンテキスト領域１２１のシングルコア環境区間データ１２３と退避領域１２２のマルチコア環境区間データ１２４を交換する（ステップＳ８０５）。続けて、デバッガＶＭ１１１は、実行ＯＳをシングルＯＳ１１３からマルチＯＳ１１４に切り替え（ステップＳ８０６）、検証対象アプリ１１５の検証中における処理を終了する。
【００６３】
図９は、検証対象アプリ１１５の検証中における処理手順の一例を示すフローチャート（その２）である。検証対象アプリ１１５＿Ｍは、通常実行を行い続ける（ステップＳ９０１）。通常実行中に行った状態変化は、マルチＯＳ１１４が検出する。また、検証対象アプリ１１５＿Ｍが実行される場合としては、実行ＯＳがマルチＯＳ１１４となる場合である。実行ＯＳがマルチＯＳ１１４となる場合として、たとえば、ステップＳ８０６にて実行ＯＳがシングルＯＳ１１３からマルチＯＳ１１４に切り替わった場合である。
【００６４】
マルチＯＳ１１４は、検証対象アプリ１１５＿Ｍの状態変化を検出したか否かを判断する（ステップＳ９０２）。状態変化を検出した場合（ステップＳ９０２：Ｙｅｓ）、マルチＯＳ１１４は、状態変化をデバッガＶＭ１１１に通知し（ステップＳ９０３）、ステップＳ９０２の処理に移行する。状態変化を検出していない場合（ステップＳ９０２：Ｎｏ）、マルチＯＳ１１４は、一定時間経過後、ステップＳ９０２の処理を再び実行する。
【００６５】
デバッガＶＭ１１１は、通知を受け付ける（ステップＳ９０４）。次に、デバッガＶＭ１１１は、検証対象アプリコンテキスト領域１２１のマルチコア環境区間データ１２４と退避領域１２２のシングルコア環境区間データ１２３を比較する（ステップＳ９０５）。続けて、デバッガＶＭ１１１は、比較の結果が一致を示すか否かを判断する（ステップＳ９０６）。比較の結果が不一致を示す場合（ステップＳ９０６：Ｎｏ）、デバッガＶＭ１１１は、続けて、状態変化がエラー処理の開始か否かを判断する（ステップＳ９０７）。エラー処理の開始である場合（ステップＳ９０７：Ｙｅｓ）、デバッガＶＭ１１１は、エラー処理に関する情報を出力し（ステップＳ９０８）、検証対象アプリ１１５＿Ｍを停止し（ステップＳ９０９）、検証対象アプリ１１５の検証中における処理を終了する。
【００６６】
エラー処理の開始でない場合（ステップＳ９０７：Ｎｏ）、デバッガＶＭ１１１は、アラートを出力する（ステップＳ９１０）。アラートの出力後、デバッガＶＭ１１１は、検証対象アプリコンテキスト領域１２１のマルチコア環境区間データ１２４と退避領域１２２のシングルコア環境区間データ１２３を交換する（ステップＳ９１１）。交換後、または、比較の結果が一致を示す場合（ステップＳ９０６：Ｙｅｓ）、デバッガＶＭ１１１は、実行ＯＳをマルチＯＳ１１４からシングルＯＳ１１３に切り替え（ステップＳ９１２）、検証対象アプリ１１５の検証中における処理を終了する。
【００６７】
なお、検証対象アプリ１１５の検証中における処理において、シングルコア環境の検証対象アプリの実行位置と、マルチコア環境の検証対象アプリの実行位置とが異なる場合も存在する。異なり続けた結果、検証対象アプリ１１５＿Ｓ、または検証対象アプリ１１５＿Ｍのいずれかが先に終了する可能性も存在する。ステップＳ８０６、ステップＳ９１２の処理にて切替元ＯＳから切替先ＯＳへ切り替えた後、どちらかの検証対象アプリ１１５が終了していた場合、デバッガＶＭ１１１は、切替元ＯＳに再度切り替え、終了していない検証対象アプリ１１５を実行する。
【００６８】
図１０は、本実施の形態にかかるコンピュータを用いたシステムの適用例を示す説明図である。図１０において、ネットワークＮＷは、サーバ１００１、サーバ１００２とクライアント１０３１〜クライアント１０３４とが通信可能なネットワークであり、たとえば、ＬＡＮ、ＷＡＮ、インターネット、携帯電話網などを含む。
【００６９】
サーバ１００２は、クラウド１０２０を有するサーバ群（サーバ１０２１〜サーバ１０２５）の管理サーバである。クライアント１０３１はノート型ＰＣ（Ｐｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ）である。クライアント１０３２はデスクトップ型ＰＣ、クライアント１０３３は携帯電話機である。携帯電話機として、クライアント１０３３は、スマートフォンであってもよいし、ＰＨＳ（Ｐｅｒｓｏｎａｌ  Ｈａｎｄｙｐｈｏｎｅ  Ｓｙｓｔｅｍ）であってもよい。クライアント１０３４はタブレット型端末である。
【００７０】
図１０のサーバ１００１、サーバ１００２、サーバ１０２１〜サーバ１０２５、クライアント１０３１〜クライアント１０３４は、本実施の形態にかかるソフトウェア検証方法を実行する。たとえば、サーバ１０２１〜１０２５を管理するＶＭにて、サーバ１０２１のＣＰＵがシングルＯＳ１１３を実行し、サーバ１０２１〜サーバ１０２５のＣＰＵ群がマルチＯＳ１１４を実行し、検証対象アプリ１１５を実行する。
【００７１】
以上説明したように、ソフトウェア検証方法、およびソフトウェア検証システムによれば、シングルコア環境とマルチコア環境でアプリをそれぞれ実行し、２つのアプリの書込データの比較をアプリの状態変化時に行う。マルチコア環境での不具合は状態変化によって発生するため、ソフトウェア検証システムは、全てのステップをトレースせずに済み、マルチコア環境でのアプリ検証を容易にできる。また、ソフトウェア検証システムは、ＶＭを用いて複数の環境を切り替えることにより、ボード２枚によるデバッグを行わず、ボード１枚で検証を行うことができる。
【００７２】
また、ソフトウェア検証システムは、検証対象アプリのコンテキスト領域を２つの環境で共用してもよい。これにより、ソフトウェア検証システムは、使用メモリ量を少なくすることができる。
【００７３】
また、ソフトウェア検証システムは、コンテキスト領域と退避領域との比較が一致を示すとき、マルチコア環境からシングルコア環境に切り替えてもよい。比較が一致を示し、マルチコア環境が正常動作していることを示すため、ソフトウェア検証システムは、検証対象アプリの動作を続行することができる。
【００７４】
また、ソフトウェア検証システムは、退避領域のデータをコンテキスト領域に書き戻してもよい。このように、退避領域にあったシングルコア環境のデータを、コンテキスト領域に書き戻した後、シングルコア環境で検証対象アプリを実行することで、ソフトウェア検証システムは、シングルコア環境での検証対象アプリの動作を続行することができる。
【００７５】
また、ソフトウェア検証システムは、比較の結果が不一致を示すとき、アラートを出力してもよい。これにより、ソフトウェア検証システムは、状態変化の際の途中演算結果を記録しておくことができ、後にメモリ破壊が起こった際に、メモリ破壊の原因となったデータを追跡し易くなる。
【００７６】
また、状態変化は、排他制御処理、同期待ち処理、分岐処理、またはエラー処理のうちの少なくとも一の処理の開始を含んでもよい。マルチコア環境で発生する不具合は、排他制御処理、同期待ち処理、分岐処理を実行することにより発生するため、ソフトウェア検証システムは、各処理の開始ごとにデータの比較を行うことで、メモリ破壊の原因となるデータを確実に取得することができる。
【００７７】
また、ソフトウェア検証システムは、比較の結果が不一致を示し、かつ、状態変化がエラー処理以外となる他の処理であるとき、アラートを出力しつつ、マルチコア環境からシングルコア環境に切り替えてもよい。状態変化が起こった場合、シングルコア環境の検証対象アプリの実行位置と、マルチコア環境の検証対象アプリの実行位置とが異なる場合がある。異なる場合としては、たとえば、非同期スレッド間の分岐処理である。
【００７８】
実行位置がずれた場合に受け付ける状態変化は、エラー処理以外となる他の処理であるため、ソフトウェア検証システムは、アラートを出力し、検証対象アプリの検証を続行する。実行位置のずれは、検証対象アプリ内のスレッドの終了、またはｊｏｉｎ関数などによって、解消される。ずれが解消した際に比較の結果が一致を示した場合、ソフトウェア検証システムは、いままで出力されていたアラートがずれの結果で出力されており、不具合で出力していたわけではないという判断材料を提示することができる。
【００７９】
また、ソフトウェア検証システムは、比較の結果が不一致を示し、かつ、状態変化がエラー処理であるとき、エラー処理に関する情報を出力しつつ、検証対象アプリを停止してもよい。これにより、ソフトウェア検証システムは、出力され続けていたアラートのログによって、どの状態変化でメモリの不一致が発生していたかということを提示することができる。
【００８０】
また、ソフトウェア検証システムにて実行するＯＳは、シングルコア対応のＯＳとマルチコア対応のＯＳとであってもよい。また、実行するＯＳは、マルチコア対応であり、異なるコア数のＯＳ群であってもよい。具体的に、ソフトウェア検証システムにて実行するＯＳが、２コア対応のＯＳと、３コア対応のＯＳとであってもよい。
【００８１】
なお、本実施の形態で説明したソフトウェア検証方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本ソフトウェア検証方法を実行するプログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本ソフトウェア検証方法を実行するプログラムは、インターネット等のネットワークを介して配布してもよい。
【符号の説明】
【００８２】
１００  マルチコアプロセッサシステム
１１１  デバッガＶＭ
１１２  共用メモリ
１１３  シングルＯＳ
１１４  マルチＯＳ
１１５＿Ｓ、１１５＿Ｍ  検証対象アプリ
１２１  検証対象アプリコンテキスト領域
１２２  退避領域
１２３  シングルコア環境区間データ
１２４  マルチコア環境区間データ
３０１  確保部
３０２  通知部
３０３  受付部
３０４  比較部
３０５  交換部
３０６  切替部
３０７  出力部
３１０  ユーザ空間
３１１  カーネル
【図１】
2013008326.tif 000003
【図２】
2013008326.tif 000004
【図３】
2013008326.tif 000005
【図４】
2013008326.tif 000006
【図５】
2013008326.tif 000007
【図６】
2013008326.tif 000008
【図７】
2013008326.tif 000009
【図８】
2013008326.tif 000010
【図９】
2013008326.tif 000011
【図１０】
2013008326.tif 000012
【手続補正書】
【提出日】平成26年1月8日(2014.1.8)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
仮想マシンが、
第１オペレーティングシステムでのアプリケーションの起動に基づいてコンテキスト領域を確保するとともに第２オペレーティングシステムに前記コンテキスト領域の情報を通知し、
前記アプリケーションの状態変化に基づいて前記コンテキスト領域のデータを退避領域に退避するとともに、前記アプリケーションの実行を前記第１オペレーティングシステムから前記第２オペレーティングシステムに切り替え、
前記第２オペレーティングシステムで実行される前記アプリケーションの状態変化に基づいて前記コンテキスト領域と前記退避領域とを比較すること
を特徴とするソフトウェア検証方法。
【請求項２】
前記仮想マシンは、前記第２オペレーティングシステムに前記コンテキスト領域を前記第１オペレーティングシステムと共用するように指示すること
を特徴とする請求項１に記載のソフトウェア検証方法。
【請求項３】
前記比較の結果が一致を示すときは、前記仮想マシンは前記アプリケーションの実行を前記第２オペレーティングシステムから前記第１オペレーティングシステムに切り替えること
を特徴とする請求項１または請求項２に記載のソフトウェア検証方法。
【請求項４】
前記仮想マシンは、前記退避領域のデータを前記コンテキスト領域に書き戻すこと
を特徴とする請求項３に記載のソフトウェア検証方法。
【請求項５】
前記比較の結果が不一致を示すときは、前記仮想マシンはアラートを出力すること
を特徴とする請求項１乃至請求項３の何れか一に記載のソフトウェア検証方法。
【請求項６】
前記アプリケーションの状態変化は、排他制御処理、同期待ち処理、分岐処理、またはエラー処理のうちの少なくとも一の処理の開始を含むこと
を特徴とする請求項１乃至請求項５の何れか一に記載のソフトウェア検証方法。
【請求項７】
前記第１オペレーティングシステムはシングルコア対応であり、
前記第２オペレーティングシステムはマルチコア対応であること
を特徴とする請求項１乃至請求項６の何れか一に記載のソフトウェア検証方法。
【請求項８】
前記仮想マシンは、前記アプリケーションが起動される前に、前記第２オペレーティングシステムおよび前記第１オペレーティングシステムをブートするとともに、前記退避領域をメモリに確保すること
を特徴とする請求項１乃至請求項７の何れか一に記載のソフトウェア検証方法。
【請求項９】
第１オペレーティングシステムと、
第２オペレーティングシステムと、
前記第１オペレーティングシステムと前記第２オペレーティングシステムとを制御する制御ユニットと、
前記第１オペレーティングシステムおよび前記第２オペレーティングシステムで共用されるコンテキスト領域と退避領域とを含むメモリと、
を含み、
前記制御ユニットは、
前記退避領域に保持される第１オペレーティングシステムでのアプリケーションの実行結果と前記コンテキスト領域に保持される前記第２オペレーティングシステムでの前記アプリケーションの実行結果とを比較すること
を特徴とするソフトウェア検証システム。
【請求項１０】
前記制御ユニットは、
前記アプリケーションが所定の処理を開始するときに、前記アプリケーションを実行するシステムを前記第１オペレーティングシステムまたは前記第２オペレーティングシステムの間で切り替えること
を特徴とする請求項９に記載のソフトウェア検証システム。
【請求項１１】
前記所定の処理は、排他制御処理、同期待ち処理、分岐処理、またはエラー処理の何れかであること
を特徴とする請求項９または請求項１０に記載のソフトウェア検証システム。
【請求項１２】
前記制御ユニットはデバッガであること
を特徴とする請求項９乃至請求項１１の何れか一に記載のソフトウェア検証システム。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェアを検証するソフトウェア検証方法、およびソフトウェア検証システムに関する。
【背景技術】
【０００２】
近年、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）が１つ搭載されたコンピュータであるシングルコアプロセッサシステムに代わって、ＣＰＵが複数搭載されたコンピュータであるマルチコアプロセッサシステムを採用する装置が増えている。マルチコアプロセッサシステム環境（以下、「マルチコア環境」と称する）では、ソフトウェア内のスレッドを各ＣＰＵに割り当てることで、各スレッドを並列に実行することができ、ソフトウェアを高速に実行することができる。ここで、なお、スレッドとは、プログラムの実行単位である。
【０００３】
シングルコアプロセッサシステム環境（以下、「シングルコア環境」と称する）で動作していたソフトウェアをマルチコア環境で動作する場合、並列化に伴った副作用が発生していた。たとえば、動作タイミングの変化による潜在的な障害が顕著化するという副作用が発生していた。また、新たにマルチコア環境用に開発されるソフトウェアに関しても、全ての動作タイミングを検証することは、シングルコア環境より困難となっていた。
【０００４】
たとえば、ソフトウェアの検証方法として、ブレークポイントを設定することで、ソフトウェアのトレース情報を取得する技術が開示されている。また、シングルコア環境のソフトウェアとマルチコア環境のソフトウェアとを実行し、実行時データを比較する技術が開示されている。また、複数の環境を動作する技術として、コンピュータの資源を仮想化した仮想計算機上で複数の環境を実行し、複数の環境上で実行されるソフトウェアの実行結果を比較するという技術が開示されている（たとえば、下記特許文献１〜３を参照。）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平８−１８５３３６号公報
【特許文献２】特開平８−１３７７１４号公報
【特許文献３】特開２００４−３５５２３３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、上述した従来技術において、シングルコアプロセッサシステム環境とマルチコアプロセッサシステム環境の実行結果を比較する場合、ステップごとにブレークポイントを設定して比較することになるため、検証に時間がかかるという問題があった。また、ステップごとにブレークポイントを設定せず検証を行った場合、メモリ破壊が発生し、検証対象のソフトウェアを続行することでデバッグ情報も上書きされてしまうことがあり、メモリ破壊の原因を特定することが困難となる問題があった。また、メモリ破壊の問題が、検証対象のソフトウェアによる途中演算結果である場合も、途中演算を行っている箇所を特定することが困難であるという問題があった。
【０００７】
本発明は、上述した従来技術による問題点を解消するため、マルチコア環境でのソフトウェアの検証を容易にするソフトウェア検証方法、およびソフトウェア検証システムを提供することを目的とする。
【課題を解決するための手段】
【０００８】
上述した課題を解決し、目的を達成するため、本発明の一側面によれば、仮想マシンが、第１オペレーティングシステムでのアプリケーションの起動に基づいてコンテキスト領域を確保するとともに第２オペレーティングシステムにコンテキスト領域の情報を通知し、アプリケーションの状態変化に基づいてコンテキスト領域のデータを退避領域に退避するとともに、アプリケーションの実行を第１オペレーティングシステムから第２オペレーティングシステムに切り替え、第２オペレーティングシステムで実行されるアプリケーションの状態変化に基づいてコンテキスト領域と退避領域とを比較するソフトウェア検証方法、およびソフトウェア検証システムが提案される。
【発明の効果】
【０００９】
本発明の一側面によれば、マルチコア環境でのソフトウェアの検証を容易にできるという効果を奏する。
【図面の簡単な説明】
【００１０】
【図１】図１は、マルチコアプロセッサシステム１００の動作例を示す説明図である。
【図２】図２は、マルチコアプロセッサシステム１００のハードウェア例を示すブロック図である。
【図３】図３は、マルチコアプロセッサシステム１００の機能例を示すブロック図である。
【図４】図４は、シングルＯＳ１１３動作中の状態例を示す説明図である。
【図５】図５は、マルチＯＳ１１４動作中の状態例を示す説明図である。
【図６】図６は、シングルＯＳ１１３およびマルチＯＳ１１４起動時の処理手順の一例を示すフローチャートである。
【図７】図７は、検証対象アプリ１１５起動時の処理手順の一例を示すフローチャートである。
【図８】図８は、検証対象アプリ１１５の検証中における処理手順の一例を示すフローチャート（その１）である。
【図９】図９は、検証対象アプリ１１５の検証中における処理手順の一例を示すフローチャート（その２）である。
【図１０】図１０は、本実施の形態にかかるコンピュータを用いたシステムの適用例を示す説明図である。
【発明を実施するための形態】
【００１１】
以下に添付図面を参照して、開示のソフトウェア検証方法、およびソフトウェア検証システムの実施の形態を詳細に説明する。なお、本実施の形態にかかるソフトウェア検証システムの実施の形態の一例として、複数のＣＰＵを有するマルチコアプロセッサシステムにて説明を行う。マルチコアプロセッサとは、コアが複数搭載されたプロセッサである。コアが複数搭載されていれば、複数のコアが搭載された単一のプロセッサでもよく、シングルコアのプロセッサが並列されているプロセッサ群でもよい。なお、本実施の形態では、説明を単純化するため、シングルコアのプロセッサが並列されているプロセッサ群を例にあげて説明する。
【００１２】
図１は、マルチコアプロセッサシステム１００の動作例を示す説明図である。マルチコアプロセッサシステム１００は、ＣＰＵ＃０〜ＣＰＵ＃３と、共用メモリ１１２と、を含み、デバッガＶＭ（ｖｉｒｔｕａｌ  ｍａｃｈｉｎｅ）１１１の機能によって、シングルＯＳ（オペレーティングシステム：Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）１１３か、マルチＯＳ１１４か、のいずれかを実行している。
【００１３】
デバッガＶＭ１１１は、コンピュータの資源を仮想化した仮想計算機であり、さらにデバッガの機能を有している。具体的に、デバッガＶＭ１１１は、デバッガＶＭ１１１上にて動作するシングルＯＳ１１３とマルチＯＳ１１４を制御しており、実行ＯＳをシングルＯＳ１１３からマルチＯＳ１１４に、またはマルチＯＳ１１４からシングルＯＳ１１３に切り替える。また、デバッガＶＭ１１１は、デバッガの機能として、メモリダンプ、スタックトレース等が行えてもよい。共用メモリ１１２は、ＣＰＵ＃０〜ＣＰＵ＃３からアクセスされるメモリである。シングルＯＳ１１３は、１つのＣＰＵで動作するＯＳであり、マルチＯＳ１１４は、複数のＣＰＵで動作するＯＳである。
【００１４】
図１では、マルチコアプロセッサシステム１００の動作環境として、状態１０１と状態１０２を示している。状態１０１におけるマルチコアプロセッサシステム１００は、実行ＯＳとして、シングルＯＳ１１３を実行しているシングルコア環境となっている状態である。状態１０２におけるマルチコアプロセッサシステム１００は、マルチコアプロセッサシステム１００がマルチＯＳ１１４を実行しているマルチコア環境となっている状態である。
【００１５】
初めに、状態１０１と状態１０２で共通する説明を行う。シングルＯＳ１１３は、ＣＰＵ＃０で実行され、マルチＯＳ１１４は、ＣＰＵ＃０〜ＣＰＵ＃３で実行する。本実施の形態にかかるソフトウェア検証方法では、検証対象となるソフトウェアとして、アプリケーションソフトウェア（以下、「アプリ」と称する）である検証対象アプリ１１５＿Ｓ、検証対象アプリ１１５＿Ｍの検証を行う。検証対象アプリ１１５＿Ｓと検証対象アプリ１１５＿Ｍは、ソースコード１１６から生成されていることを想定する。
【００１６】
検証対象アプリ１１５＿Ｓはシングルコア環境で実行されるアプリであり、検証対象アプリ１１５＿Ｍはマルチコア環境で実行されるアプリである。検証対象アプリ１１５＿Ｓと検証対象アプリ１１５＿Ｍは、同一のオブジェクトコードであってもよいし、異なっていてもよい。ソースコード１１６は、引数なし戻り値ｉｎｔ型のメイン関数の内部に、同期待ち処理を実行することが記述されている。
【００１７】
また、検証対象アプリ１１５＿Ｓと検証対象アプリ１１５＿Ｍは、同一のソースコード１１６から生成されていると想定したが、異なっていてもよい。たとえば、検証対象アプリ１１５＿Ｍは、検証対象アプリ１１５＿Ｓのソースコードに対してマルチコア環境対応のコードが追加されたソースコードから生成されたオブジェクトコードであってもよい。
【００１８】
マルチコアプロセッサシステム１００は、検証対象アプリコンテキスト領域１２１と退避領域１２２を確保する。検証対象アプリコンテキスト領域１２１とは、検証対象となるソフトウェアが用いるコンテキスト領域である。また、コンテキスト領域とは、ＣＰＵのレジスタの値、プログラムカウンタ、スタックポインタなどといったアプリが使用するデータを格納する領域である。
【００１９】
状態１０１にて、ＣＰＵ＃０は、検証対象アプリ１１５＿Ｓを実行し、検証対象アプリ１１５＿Ｓの状態変化の一つである同期待ち処理に到達している。状態１０１に至るまでに、ＣＰＵ＃０は、検証対象アプリ１１５＿Ｓの実行結果であるシングルコア環境区間データ１２３を検証対象アプリコンテキスト領域１２１内に書き込む。
【００２０】
検証対象アプリ１１５＿Ｓの状態変化を受け付けたデバッガＶＭ１１１は、実行ＯＳをシングルＯＳ１１３からマルチＯＳ１１４に切り替える。このとき、デバッガＶＭ１１１は、シングルコア環境区間データ１２３を退避領域１２２に退避する。
【００２１】
続けて、状態１０２にて、ＣＰＵ＃０〜ＣＰＵ＃３は、検証対象アプリ１１５＿Ｍを実行し、検証対象アプリ１１５＿Ｍの状態変化の一つである同期待ち処理に到達している。状態１０２に至るまでに、ＣＰＵ＃０〜ＣＰＵ＃３は、検証対象アプリ１１５＿Ｍの実行結果であるマルチコア環境区間データ１２４を検証対象アプリコンテキスト領域１２１内に書き込む。
【００２２】
検証対象アプリ１１５＿Ｍの状態変化を受け付けたデバッガＶＭ１１１は、シングルコア環境区間データ１２３とマルチコア環境区間データ１２４を比較する。このように、マルチコアプロセッサシステム１００は、シングルコア環境とマルチコア環境で検証対象アプリをそれぞれ実行し、２つのアプリの書込データの比較をアプリの状態変化時に行う。これにより、マルチコアプロセッサシステム１００は、全てのステップをトレースせずに済み、マルチコア環境でのアプリ検証を容易にする。
【００２３】
（マルチコアプロセッサシステム１００のハードウェア）
図２は、マルチコアプロセッサシステム１００のハードウェア例を示すブロック図である。本実施の形態におけるマルチコアプロセッサシステム１００は、携帯電話などの携帯端末を想定している。図３において、マルチコアプロセッサシステム１００は、ＣＰＵｓ２０１と、ＲＯＭ（Ｒｅａｄ‐Ｏｎｌｙ  Ｍｅｍｏｒｙ）２０２と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）２０３と、を含む。
【００２４】
また、マルチコアプロセッサシステム１００は、フラッシュＲＯＭ２０４と、フラッシュＲＯＭコントローラ２０５と、フラッシュＲＯＭ２０６と、を含む。また、マルチコアプロセッサシステム１００は、ユーザやその他の機器との入出力装置として、ディスプレイ２０７と、Ｉ／Ｆ（Ｉｎｔｅｒｆａｃｅ）２０８と、キーボード２０９と、を含む。また、各部はバス２１０によってそれぞれ接続されている。なお、共用メモリ１１２の具体的な装置としては、ＲＡＭ２０３、フラッシュＲＯＭ２０４である。また、共用メモリ１１２に格納されるデータのうち、書込を行わないデータに関しては、ＲＯＭ２０２に格納されていてもよい。
【００２５】
ここで、ＣＰＵｓ２０１は、マルチコアプロセッサシステム１００の全体の制御を司る。ＣＰＵｓ２０１は、ＣＰＵ＃０〜ＣＰＵ＃３を含む。また、ＣＰＵｓ２０１は、専用のキャッシュメモリを有してもよい。
【００２６】
ＲＯＭ２０２は、ブートプログラムなどのプログラムを記憶している。ＲＡＭ２０３は、ＣＰＵｓ２０１のワークエリアとして使用される。フラッシュＲＯＭ２０４は、読出し速度が高速なフラッシュＲＯＭであり、たとえば、ＮＯＲ型フラッシュメモリである。たとえば、フラッシュＲＯＭ２０４は、ＯＳなどのシステムソフトウェアやアプリケーションソフトウェアなどを記憶している。たとえば、ＯＳを更新する場合、マルチコアプロセッサシステム１００は、Ｉ／Ｆ２０８によって新しいＯＳを受信し、フラッシュＲＯＭ２０４に格納されている古いＯＳを、受信した新しいＯＳに更新する。
【００２７】
フラッシュＲＯＭコントローラ２０５は、ＣＰＵｓ２０１の制御に従ってフラッシュＲＯＭ２０６に対するデータのリード／ライトを制御する。フラッシュＲＯＭ２０６は、データの保存、運搬を主に目的としたフラッシュＲＯＭであり、たとえば、ＮＡＮＤ型フラッシュメモリである。フラッシュＲＯＭ２０６は、フラッシュＲＯＭコントローラ２０５の制御で書き込まれたデータを記憶する。データの具体例としては、マルチコアプロセッサシステム１００を使用するユーザがＩ／Ｆ２０８を通して取得した画像データ、映像データや、また本実施の形態にかかるソフトウェア検証方法を実行するプログラムなどである。フラッシュＲＯＭ２０６は、たとえば、メモリカード、ＳＤカードなどを採用することができる。
【００２８】
ディスプレイ２０７は、カーソル、アイコンあるいはツールボックスを始め、文書、画像、機能情報などのデータを表示する。ディスプレイ２０７は、たとえば、ＴＦＴ（Ｔｈｉｎ  Ｆｉｌｍ  Ｔｒａｎｓｉｓｔｏｒ）液晶ディスプレイなどを採用することができる。
【００２９】
Ｉ／Ｆ２０８は、通信回線を通じてＬＡＮ、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワーク２１１に接続され、ネットワーク２１１を介して他の装置に接続される。そして、Ｉ／Ｆ２０８は、ネットワーク２１１と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ２０８には、たとえばモデムやＬＡＮアダプタなどを採用することができる。
【００３０】
キーボード２０９は、数字、各種指示などの入力のためのキーを有し、データの入力を行う。また、キーボード２０９は、タッチパネル式の入力パッドやテンキーなどであってもよい。
【００３１】
（マルチコアプロセッサシステム１００の機能）
次に、マルチコアプロセッサシステム１００の機能について説明する。図３は、マルチコアプロセッサシステム１００の機能例を示すブロック図である。マルチコアプロセッサシステム１００は、確保部３０１と、通知部３０２と、受付部３０３と、比較部３０４と、交換部３０５と、切替部３０６と、出力部３０７とを含む。この制御部となる機能（確保部３０１〜出力部３０７）は、記憶装置に記憶されたプログラムをＣＰＵｓ２０１が実行することにより、その機能を実現する。記憶装置とは、具体的には、たとえば、図２に示したＲＯＭ２０２、ＲＡＭ２０３、フラッシュＲＯＭ２０４、フラッシュＲＯＭ２０６などである。また、確保部３０１〜出力部３０７は、デバッガＶＭ１１１の機能に含まれる。
【００３２】
また、マルチコアプロセッサシステム１００は、ユーザ空間３１０を確保している。ユーザ空間３１０とは、アプリのコンテキスト領域を確保する空間である。さらに、マルチコアプロセッサシステム１００は、シングルコア環境実行中の場合、ＣＰＵ＃０がシングルＯＳ１１３を実行する。また、マルチコアプロセッサシステム１００は、マルチコア環境実行中の場合、ＣＰＵ＃０がカーネル３１１＃０を実行し、ＣＰＵ＃１はカーネル３１１＃１を実行し、ＣＰＵ＃２はカーネル３１１＃２を実行し、ＣＰＵ＃３はカーネル３１１＃３を実行する。カーネル３１１は、マルチＯＳ１１４の中核をなす機能を有するソフトウェアである。
【００３３】
確保部３０１は、第１オペレーティングシステムと第２オペレーティングシステムとで共用するユーザ空間３１０を確保する機能を有する。なお、第１オペレーティングシステムとは、シングルＯＳ１１３であり、第２オペレーティングシステムとは、マルチＯＳ１１４である。たとえば、確保部３０１は、シングルＯＳ１１３がユーザ空間３１０を確保した後、ユーザ空間３１０を共用するようにマルチＯＳ１１４に指示する。また、確保部３０１は、マルチＯＳ１１４が確保したユーザ空間３１０に関して、シングルＯＳ１１３に共用するように指示してもよい。
【００３４】
また、確保部３０１は、共用メモリ１１２から退避領域１２２を確保する。退避領域１２２は、ユーザ空間３１０以外となる未割当の空間から確保される。なお、退避領域１２２は、８、１６［Ｋバイト］といった領域でよい。なお、確保されたユーザ空間３１０の上限、下限アドレス、退避領域１２２の上限、下限アドレスは、ＲＡＭ２０３、フラッシュＲＯＭ２０４などの記憶領域に記憶される。
【００３５】
通知部３０２は、第１オペレーティングシステムでのアプリの起動に基づいてコンテキスト領域を確保するとともに第２オペレーティングシステムにコンテキスト領域の情報を通知する機能を有する。たとえば、通知部３０２は、シングルＯＳ１１３での検証対象アプリ１１５＿Ｓでの起動に応じて確保された検証対象アプリコンテキスト領域１２１を、マルチＯＳ１１４に通知する。
【００３６】
受付部３０３は、第１および第２オペレーティングシステムで実行されるアプリの状態変化を受け付ける機能を有する。たとえば、受付部３０３は、検証対象アプリ１１５＿Ｓの状態変化をシングルＯＳ１１３から受け付け、検証対象アプリ１１５＿Ｍの状態変化をマルチＯＳ１１４から受け付ける。なお、具体的な状態変化としては、排他制御処理、同期待ち処理、分岐処理、またはエラー処理の開始である。各処理の詳細については図４にて後述する。また、受付元ＯＳとなるシングルＯＳ１１３またはマルチＯＳ１１４の識別情報、受け付けた状態変化の種類については、ＲＡＭ２０３、フラッシュＲＯＭ２０４などの記憶領域に記憶される。
【００３７】
比較部３０４は、第２オペレーティングシステムで実行されるアプリの状態変化に基づいてコンテキスト領域と退避領域１２２とを比較する機能を有する。たとえば、比較部３０４は、マルチＯＳ１１４で実行される検証対象アプリ１１５＿Ｍの状態変化があった場合、検証対象アプリコンテキスト領域１２１内のマルチコア環境区間データ１２４と退避領域１２２内のシングルコア環境区間データ１２３とを比較する。なお、比較の結果は、ＲＡＭ２０３、フラッシュＲＯＭ２０４などの記憶領域に記憶される。
【００３８】
交換部３０５は、コンテキスト領域のデータと退避領域１２２のデータを交換する機能を有する。たとえば、交換部３０５は、検証対象アプリコンテキスト領域１２１内のマルチコア環境区間データ１２４と退避領域１２２内のシングルコア環境区間データ１２３とを交換する。なお、検証対象アプリ１１５が片方のＯＳでしか実行されていない場合、交換部３０５は、検証対象アプリコンテキスト領域１２１内のデータを退避領域１２２に退避するだけでよい。
【００３９】
切替部３０６は、アプリの実行を第１オペレーティングシステムから第２オペレーティングシステムに切り替える機能を有する。また、切替部３０６は、比較部３０４による比較の結果が一致を示すとき、アプリの実行を第２オペレーティングシステムから第１オペレーティングシステムに切り替える。たとえば、切替部３０６は、シングルコア環境区間データ１２３とマルチコア環境区間データ１２４が一致していた場合、マルチＯＳ１１４からシングルＯＳ１１３に切り替える。
【００４０】
また、切替部３０６は、比較部３０４による比較の結果が不一致を示し、かつ検証対象アプリ１１５の状態変化がエラー処理以外となる他の処理の開始であるとき、アプリの実行を第２オペレーティングシステムから第１オペレーティングシステムに切り替える。たとえば、切替部３０６は、シングルコア環境区間データ１２３とマルチコア環境区間データ１２４が不一致であり、かつ状態変化が排他制御処理、同期待ち処理、分岐処理のいずれかの開始である場合、マルチＯＳ１１４からシングルＯＳ１１３に切り替える。
【００４１】
出力部３０７は、比較部３０４による比較の結果が不一致を示す場合、アラートを出力する機能を有する。たとえば、出力部３０７は、シングルコア環境区間データ１２３とマルチコア環境区間データ１２４が不一致である場合、アラートを出力する。なお、出力されるアラートの内容としては、たとえば、状態変化を行う処理が呼ばれたコードのアドレスや、状態変化の種類や、不一致となったシングルコア環境区間データ１２３とマルチコア環境区間データ１２４のメモリダンプ等である。
【００４２】
また、出力部３０７は、比較部３０４による比較の結果が不一致を示し、かつ、アプリの状態変化がエラー処理の開始の場合、エラー処理に関する情報を出力してもよい。エラー処理に関する情報としては、たとえば、エラー処理のエラー要因や、状態変化を行う処理が呼ばれたコードのアドレスや、不一致となったシングルコア環境区間データ１２３とマルチコア環境区間データ１２４のメモリダンプ等である。
【００４３】
具体的に、シングルＯＳ１１３、マルチＯＳ１１４がＰＯＳＩＸ（Ｐｏｒｔａｂｌｅ  Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ  Ｉｎｔｅｒｆａｃｅ）に準拠している場合を想定する。このとき、シングルＯＳ１１３、マルチＯＳ１１４は、シグナルハンドラが実行される場合にデバッガＶＭ１１１にシグナルハンドラのシグナル番号などを通知する。具体的なエラー要因となるシグナル番号として、出力部３０７は、バスエラーを示すＳＩＧＢＵＳ（ＳＩＧｎａｌ  ＢＵＳ  ｅｒｒｏｒ）や無効なアドレスへのアクセスを行ったことを示すＳＩＧＳＥＧＶ（ＳＩＧｎａｌ  ＳＥＧｍｅｎｔａｔｉｏｎ  Ｖｉｏｌａｔｉｏｎ）を出力する。なお、出力形式としては、標準出力への出力、ディスプレイ２０７への表示、または、ＲＡＭ２０３、フラッシュＲＯＭ２０４などの記憶領域に格納してもよい。
【００４４】
図４と図５を用いて、マルチコアプロセッサシステム１００がシングルコア環境の状態と、マルチコア環境の状態について説明する。なお、本実施の形態では、検証対象アプリ１１５の実行順序として、初めにシングルコア環境で検証対象アプリ１１５＿Ｓを実行し、次にマルチコア環境で検証対象アプリ１１５＿Ｍを実行している。しかし、マルチコアプロセッサシステム１００は、初めにマルチコア環境で検証対象アプリ１１５＿Ｍを実行し、次に検証対象アプリ１１５＿Ｓを実行してもよい。
【００４５】
図４は、シングルＯＳ１１３動作中の状態例を示す説明図である。図４で示すマルチコアプロセッサシステム１００の状態は、状態１０１に等しい。ＣＰＵ＃０はシングルＯＳ１１３を実行し、ＣＰＵ＃１〜ＣＰＵ＃３は休止している。初めに、デバッガＶＭ１１１は、シングルＯＳ１１３とマルチＯＳ１１４のブート時に、ユーザ空間３１０と退避領域１２２とを共用メモリ１１２に確保する。
【００４６】
デバッガＶＭ１１１は、シングルＯＳ１１３からの状態変化の通知を受け付ける。状態変化の詳細としては、状態変化一覧４０１に示すとおり、排他制御処理、同期待ち処理、分岐処理、エラー処理、の開始である。シングルＯＳ１１３は、排他制御処理、同期待ち処理、分岐処理、エラー処理の開始を検出すると、状態変化としてデバッガＶＭ１１１に通知する。
【００４７】
排他制御処理は、一方のスレッドがリソース等の使用権を獲得すると、一方のスレッドがリソースの使用権を解放するまで、他のスレッドを待機させる処理である。同期待ち処理は、複数のスレッドの処理を特定のコード位置までで一旦停止させる処理である。全てのスレッドが特定のコード位置に到達した場合、同期待ち処理は、停止を解除し、次の処理を継続する。シングルＯＳ１１３は、検証対象アプリ１１５＿Ｓについて排他制御処理が行われることを、排他制御処理、同期待ち処理を行うシステムコールの呼び出しによって検出することができる。
【００４８】
分岐処理は、スレッドを分岐する処理である。たとえば、分岐処理として、ｆｏｒｋ関数、ＣｒｅａｔｅＴｈｒｅａｄ関数が存在する。シングルＯＳ１１３は、検証対象アプリ１１５＿Ｓについて分岐処理が行われることを、分岐処理を行うシステムコールの呼び出しによって検出することができる。エラー処理は、プログラム内で発生したエラーを通知する処理である。たとえば、エラーが発生した場合、シングルＯＳ１１３は、エラー割込を実行する場合、エラー処理が行われることを検出することができる。
【００４９】
デバッガＶＭ１１１は、状態変化一覧４０１に示す状態変化を受け付けた場合、シングルコア環境区間データ１２３とマルチコア環境区間データ１２４を交換する。具体的に、デバッガＶＭ１１１は、シングルコア環境区間データ１２３を退避領域１２２に退避する。また、デバッガＶＭ１１１は、退避領域１２２に存在するマルチコア環境区間データ１２４を検証対象アプリコンテキスト領域１２１に書き戻す。
【００５０】
図５は、マルチＯＳ１１４動作中の状態例を示す説明図である。図５で示すマルチコアプロセッサシステム１００は、状態１０２に等しい。ＣＰＵ＃０はカーネル３１１＃０を実行し、ＣＰＵ＃１はカーネル３１１＃１を実行し、ＣＰＵ＃２はカーネル３１１＃２を実行し、ＣＰＵ＃３はカーネル３１１＃３を実行する。
【００５１】
デバッガＶＭ１１１は、マルチＯＳ１１４から状態変化一覧４０１に示す状態変化を受け付けた場合、比較部３０４によってシングルコア環境区間データ１２３とマルチコア環境区間データ１２４とを比較する。比較結果が一致した場合、デバッガＶＭ１１１は、マルチＯＳ１１４からシングルＯＳ１１３に切り替える。比較結果が不一致であった場合、デバッガＶＭ１１１は、状態変化がエラー処理でない場合、アラートを出力し、シングルコア環境区間データ１２３とマルチコア環境区間データ１２４を交換し、マルチＯＳ１１４からシングルＯＳ１１３に切り替える。状態変化がエラー処理である場合、デバッガＶＭ１１１は、エラー処理に関する情報を出力し、検証対象アプリ１１５＿Ｍを停止する。
【００５２】
続けて、図４、図５の動作を行うフローチャートを、図６〜図９にて説明する。具体的に、図６では、シングルＯＳ１１３およびマルチＯＳ１１４起動時の処理を説明し、図７では、検証対象アプリ１１５起動時の処理を説明する。図８では、検証対象アプリ１１５の検証中におけるシングルＯＳ１１３での処理を説明し、図９では、検証対象アプリ１１５の検証中におけるマルチＯＳ１１４での処理を説明する。
【００５３】
図６は、シングルＯＳ１１３およびマルチＯＳ１１４起動時の処理手順の一例を示すフローチャートである。デバッガＶＭ１１１は、マルチＯＳ１１４をブートする（ステップＳ６０１）。デバッガＶＭ１１１は、マルチＯＳ１１４から通知を受け付けるまで待機する。マルチＯＳ１１４は、ユーザ空間３１０を確保し（ステップＳ６０２）、確保したユーザ空間３１０をデバッガＶＭ１１１に通知し（ステップＳ６０３）、起動時の処理を終了する。
【００５４】
通知を受け付けたデバッガＶＭ１１１は、ユーザ空間３１０を共用空間として定義する（ステップＳ６０４）。続けて、デバッガＶＭ１１１は、シングルＯＳ１１３をブートする（ステップＳ６０５）。このとき、デバッガＶＭ１１１は、定義した共用空間をシングルＯＳ１１３に通知する。また、デバッガＶＭ１１１は、シングルＯＳ１１３から通知を受け付けるまで待機する。シングルＯＳ１１３は、共用空間をユーザ空間３１０として確保し（ステップＳ６０６）、確保したユーザ空間３１０をデバッガＶＭ１１１に通知し（ステップＳ６０７）、起動時の処理を終了する。通知を受け付けたデバッガＶＭ１１１は、未割当の空間から、退避領域１２２を確保し（ステップＳ６０８）、起動時の処理を終了する。
【００５５】
なお、ステップＳ６０２、ステップＳ６０６の処理にて、シングルＯＳ１１３、マルチＯＳ１１４は、自身のカーネル空間も確保している。なお、カーネル空間は、１［Ｍバイト］程の領域となり、ユーザ空間３１０と比較すると狭い空間となる。
【００５６】
図７は、検証対象アプリ１１５起動時の処理手順の一例を示すフローチャートである。なお、図７では、初めにシングルＯＳ１１３にて検証対象アプリ１１５＿Ｓを起動した後に、マルチＯＳ１１４にて検証対象アプリ１１５＿Ｍを起動しているが、先に検証対象アプリ１１５＿Ｍを起動した後に、検証対象アプリ１１５＿Ｓを起動してもよい。
【００５７】
シングルＯＳ１１３は、検証対象アプリ１１５＿Ｓを起動し（ステップＳ７０１）、検証対象アプリ１１５＿Ｓの起動をデバッガＶＭ１１１に通知し（ステップＳ７０２）、検証対象アプリ１１５起動時の処理を終了する。
【００５８】
通知を受け付けたデバッガＶＭ１１１は、検証対象アプリコンテキスト領域１２１を保存する（ステップＳ７０３）。なお、具体的な保存内容として、デバッガＶＭ１１１は、検証対象アプリコンテキスト領域１２１の下限アドレスと上限アドレスを保存する。続けて、デバッガＶＭ１１１は、コンテキスト領域共用指示をマルチＯＳ１１４に通知する（ステップＳ７０４）。具体的に、デバッガＶＭ１１１は、検証対象アプリコンテキスト領域１２１のアドレスをマルチＯＳ１１４に通知する。通知後、デバッガＶＭ１１１は、検証対象アプリ１１５起動時の処理を終了する。
【００５９】
通知を受け付けたマルチＯＳ１１４は、検証対象アプリコンテキスト領域１２１を用いて検証対象アプリ１１５＿Ｍを起動し（ステップＳ７０５）、検証対象アプリ１１５起動時の処理を終了する。
【００６０】
図８は、検証対象アプリ１１５の検証中における処理手順の一例を示すフローチャート（その１）である。検証対象アプリ１１５＿Ｓは、通常実行を行い続ける（ステップＳ８０１）。通常実行中に行った状態変化は、シングルＯＳ１１３が検出する。また、検証対象アプリ１１５＿Ｓが実行される場合としては、実行ＯＳがシングルＯＳ１１３となる場合である。実行ＯＳがシングルＯＳ１１３となる場合として、たとえば、検証対象アプリ１１５＿Ｓ起動時点の場合や、後述するステップＳ９１２にて実行ＯＳがマルチＯＳ１１４からシングルＯＳ１１３に切り替わった場合である。
【００６１】
シングルＯＳ１１３は、検証対象アプリ１１５＿Ｓの状態変化を検出したか否かを判断する（ステップＳ８０２）。状態変化を検出した場合（ステップＳ８０２：Ｙｅｓ）、シングルＯＳ１１３は、状態変化をデバッガＶＭ１１１に通知し（ステップＳ８０３）、ステップＳ８０２の処理に移行する。状態変化を検出していない場合（ステップＳ８０２：Ｎｏ）、シングルＯＳ１１３は、一定時間経過後、ステップＳ８０２の処理を再び実行する。
【００６２】
デバッガＶＭ１１１は、通知を受け付ける（ステップＳ８０４）。次に、デバッガＶＭ１１１は、検証対象アプリコンテキスト領域１２１のシングルコア環境区間データ１２３と退避領域１２２のマルチコア環境区間データ１２４を交換する（ステップＳ８０５）。続けて、デバッガＶＭ１１１は、実行ＯＳをシングルＯＳ１１３からマルチＯＳ１１４に切り替え（ステップＳ８０６）、検証対象アプリ１１５の検証中における処理を終了する。
【００６３】
図９は、検証対象アプリ１１５の検証中における処理手順の一例を示すフローチャート（その２）である。検証対象アプリ１１５＿Ｍは、通常実行を行い続ける（ステップＳ９０１）。通常実行中に行った状態変化は、マルチＯＳ１１４が検出する。また、検証対象アプリ１１５＿Ｍが実行される場合としては、実行ＯＳがマルチＯＳ１１４となる場合である。実行ＯＳがマルチＯＳ１１４となる場合として、たとえば、ステップＳ８０６にて実行ＯＳがシングルＯＳ１１３からマルチＯＳ１１４に切り替わった場合である。
【００６４】
マルチＯＳ１１４は、検証対象アプリ１１５＿Ｍの状態変化を検出したか否かを判断する（ステップＳ９０２）。状態変化を検出した場合（ステップＳ９０２：Ｙｅｓ）、マルチＯＳ１１４は、状態変化をデバッガＶＭ１１１に通知し（ステップＳ９０３）、ステップＳ９０２の処理に移行する。状態変化を検出していない場合（ステップＳ９０２：Ｎｏ）、マルチＯＳ１１４は、一定時間経過後、ステップＳ９０２の処理を再び実行する。
【００６５】
デバッガＶＭ１１１は、通知を受け付ける（ステップＳ９０４）。次に、デバッガＶＭ１１１は、検証対象アプリコンテキスト領域１２１のマルチコア環境区間データ１２４と退避領域１２２のシングルコア環境区間データ１２３を比較する（ステップＳ９０５）。続けて、デバッガＶＭ１１１は、比較の結果が一致を示すか否かを判断する（ステップＳ９０６）。比較の結果が不一致を示す場合（ステップＳ９０６：Ｎｏ）、デバッガＶＭ１１１は、続けて、状態変化がエラー処理の開始か否かを判断する（ステップＳ９０７）。エラー処理の開始である場合（ステップＳ９０７：Ｙｅｓ）、デバッガＶＭ１１１は、エラー処理に関する情報を出力し（ステップＳ９０８）、検証対象アプリ１１５＿Ｍを停止し（ステップＳ９０９）、検証対象アプリ１１５の検証中における処理を終了する。
【００６６】
エラー処理の開始でない場合（ステップＳ９０７：Ｎｏ）、デバッガＶＭ１１１は、アラートを出力する（ステップＳ９１０）。アラートの出力後、デバッガＶＭ１１１は、検証対象アプリコンテキスト領域１２１のマルチコア環境区間データ１２４と退避領域１２２のシングルコア環境区間データ１２３を交換する（ステップＳ９１１）。交換後、または、比較の結果が一致を示す場合（ステップＳ９０６：Ｙｅｓ）、デバッガＶＭ１１１は、実行ＯＳをマルチＯＳ１１４からシングルＯＳ１１３に切り替え（ステップＳ９１２）、検証対象アプリ１１５の検証中における処理を終了する。
【００６７】
なお、検証対象アプリ１１５の検証中における処理において、シングルコア環境の検証対象アプリの実行位置と、マルチコア環境の検証対象アプリの実行位置とが異なる場合も存在する。異なり続けた結果、検証対象アプリ１１５＿Ｓ、または検証対象アプリ１１５＿Ｍのいずれかが先に終了する可能性も存在する。ステップＳ８０６、ステップＳ９１２の処理にて切替元ＯＳから切替先ＯＳへ切り替えた後、どちらかの検証対象アプリ１１５が終了していた場合、デバッガＶＭ１１１は、切替元ＯＳに再度切り替え、終了していない検証対象アプリ１１５を実行する。
【００６８】
図１０は、本実施の形態にかかるコンピュータを用いたシステムの適用例を示す説明図である。図１０において、ネットワークＮＷは、サーバ１００１、サーバ１００２とクライアント１０３１〜クライアント１０３４とが通信可能なネットワークであり、たとえば、ＬＡＮ、ＷＡＮ、インターネット、携帯電話網などを含む。
【００６９】
サーバ１００２は、クラウド１０２０を有するサーバ群（サーバ１０２１〜サーバ１０２５）の管理サーバである。クライアント１０３１はノート型ＰＣ（Ｐｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ）である。クライアント１０３２はデスクトップ型ＰＣ、クライアント１０３３は携帯電話機である。携帯電話機として、クライアント１０３３は、スマートフォンであってもよいし、ＰＨＳ（Ｐｅｒｓｏｎａｌ  Ｈａｎｄｙｐｈｏｎｅ  Ｓｙｓｔｅｍ）であってもよい。クライアント１０３４はタブレット型端末である。
【００７０】
図１０のサーバ１００１、サーバ１００２、サーバ１０２１〜サーバ１０２５、クライアント１０３１〜クライアント１０３４は、本実施の形態にかかるソフトウェア検証方法を実行する。たとえば、サーバ１０２１〜１０２５を管理するＶＭにて、サーバ１０２１のＣＰＵがシングルＯＳ１１３を実行し、サーバ１０２１〜サーバ１０２５のＣＰＵ群がマルチＯＳ１１４を実行し、検証対象アプリ１１５を実行する。
【００７１】
以上説明したように、ソフトウェア検証方法、およびソフトウェア検証システムによれば、シングルコア環境とマルチコア環境でアプリをそれぞれ実行し、２つのアプリの書込データの比較をアプリの状態変化時に行う。マルチコア環境での不具合は状態変化によって発生するため、ソフトウェア検証システムは、全てのステップをトレースせずに済み、マルチコア環境でのアプリ検証を容易にできる。また、ソフトウェア検証システムは、ＶＭを用いて複数の環境を切り替えることにより、ボード２枚によるデバッグを行わず、ボード１枚で検証を行うことができる。
【００７２】
また、ソフトウェア検証システムは、検証対象アプリのコンテキスト領域を２つの環境で共用してもよい。これにより、ソフトウェア検証システムは、使用メモリ量を少なくすることができる。
【００７３】
また、ソフトウェア検証システムは、コンテキスト領域と退避領域との比較が一致を示すとき、マルチコア環境からシングルコア環境に切り替えてもよい。比較が一致を示し、マルチコア環境が正常動作していることを示すため、ソフトウェア検証システムは、検証対象アプリの動作を続行することができる。
【００７４】
また、ソフトウェア検証システムは、退避領域のデータをコンテキスト領域に書き戻してもよい。このように、退避領域にあったシングルコア環境のデータを、コンテキスト領域に書き戻した後、シングルコア環境で検証対象アプリを実行することで、ソフトウェア検証システムは、シングルコア環境での検証対象アプリの動作を続行することができる。
【００７５】
また、ソフトウェア検証システムは、比較の結果が不一致を示すとき、アラートを出力してもよい。これにより、ソフトウェア検証システムは、状態変化の際の途中演算結果を記録しておくことができ、後にメモリ破壊が起こった際に、メモリ破壊の原因となったデータを追跡し易くなる。
【００７６】
また、状態変化は、排他制御処理、同期待ち処理、分岐処理、またはエラー処理のうちの少なくとも一の処理の開始を含んでもよい。マルチコア環境で発生する不具合は、排他制御処理、同期待ち処理、分岐処理を実行することにより発生するため、ソフトウェア検証システムは、各処理の開始ごとにデータの比較を行うことで、メモリ破壊の原因となるデータを確実に取得することができる。
【００７７】
また、ソフトウェア検証システムは、比較の結果が不一致を示し、かつ、状態変化がエラー処理以外となる他の処理であるとき、アラートを出力しつつ、マルチコア環境からシングルコア環境に切り替えてもよい。状態変化が起こった場合、シングルコア環境の検証対象アプリの実行位置と、マルチコア環境の検証対象アプリの実行位置とが異なる場合がある。異なる場合としては、たとえば、非同期スレッド間の分岐処理である。
【００７８】
実行位置がずれた場合に受け付ける状態変化は、エラー処理以外となる他の処理であるため、ソフトウェア検証システムは、アラートを出力し、検証対象アプリの検証を続行する。実行位置のずれは、検証対象アプリ内のスレッドの終了、またはｊｏｉｎ関数などによって、解消される。ずれが解消した際に比較の結果が一致を示した場合、ソフトウェア検証システムは、いままで出力されていたアラートがずれの結果で出力されており、不具合で出力していたわけではないという判断材料を提示することができる。
【００７９】
また、ソフトウェア検証システムは、比較の結果が不一致を示し、かつ、状態変化がエラー処理であるとき、エラー処理に関する情報を出力しつつ、検証対象アプリを停止してもよい。これにより、ソフトウェア検証システムは、出力され続けていたアラートのログによって、どの状態変化でメモリの不一致が発生していたかということを提示することができる。
【００８０】
また、ソフトウェア検証システムにて実行するＯＳは、シングルコア対応のＯＳとマルチコア対応のＯＳとであってもよい。また、実行するＯＳは、マルチコア対応であり、異なるコア数のＯＳ群であってもよい。具体的に、ソフトウェア検証システムにて実行するＯＳが、２コア対応のＯＳと、３コア対応のＯＳとであってもよい。
【００８１】
なお、本実施の形態で説明したソフトウェア検証方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本ソフトウェア検証方法を実行するプログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本ソフトウェア検証方法を実行するプログラムは、インターネット等のネットワークを介して配布してもよい。
【００８２】
上述した実施の形態に関し、さらに以下の付記を開示する。
【００８３】
（付記１）仮想マシンが、
第１オペレーティングシステムでのアプリケーションの起動に基づいてコンテキスト領域を確保するとともに第２オペレーティングシステムに前記コンテキスト領域の情報を通知し、
前記アプリケーションの状態変化に基づいて前記コンテキスト領域のデータを退避領域に退避するとともに、前記アプリケーションの実行を前記第１オペレーティングシステムから前記第２オペレーティングシステムに切り替え、
前記第２オペレーティングシステムで実行される前記アプリケーションの状態変化に基づいて前記コンテキスト領域と前記退避領域とを比較すること
を特徴とするソフトウェア検証方法。
【００８４】
（付記２）前記仮想マシンは、前記第２オペレーティングシステムに前記コンテキスト領域を前記第１オペレーティングシステムと共用するように指示すること
を特徴とする付記１に記載のソフトウェア検証方法。
【００８５】
（付記３）前記比較の結果が一致を示すときは、前記仮想マシンは前記アプリケーションの実行を前記第２オペレーティングシステムから前記第１オペレーティングシステムに切り替えること
を特徴とする付記１または付記２に記載のソフトウェア検証方法。
【００８６】
（付記４）前記仮想マシンは、前記退避領域のデータを前記コンテキスト領域に書き戻すこと
を特徴とする付記３に記載のソフトウェア検証方法。
【００８７】
（付記５）前記比較の結果が不一致を示すときは、前記仮想マシンはアラートを出力すること
を特徴とする付記１乃至付記３の何れか一に記載のソフトウェア検証方法。
【００８８】
（付記６）前記アプリケーションの状態変化は、排他制御処理、同期待ち処理、分岐処理、またはエラー処理のうちの少なくとも一の処理の開始を含むこと
を特徴とする付記１乃至付記５の何れか一に記載のソフトウェア検証方法。
【００８９】
（付記７）前記比較の結果が不一致を示し、かつ、前記アプリケーションの状態変化が前記エラー処理以外となる他の処理の開始であるときは、前記仮想マシンは前記アラートを出力しつつ、前記アプリケーションの実行を前記第２オペレーティングシステムから前記第１オペレーティングシステムに切り替えること
を特徴とする付記６に記載のソフトウェア検証方法。
【００９０】
（付記８）前記比較の結果が不一致を示し、かつ、前記アプリケーションの状態変化が前記エラー処理の開始であるときは、前記仮想マシンは前記エラー処理に関する情報を出力しつつ、前記アプリケーションを停止すること
を特徴とする付記６に記載のソフトウェア検証方法。
【００９１】
（付記９）前記第１オペレーティングシステムはシングルコア対応であり、
前記第２オペレーティングシステムはマルチコア対応であること
を特徴とする付記１乃至付記８の何れか一に記載のソフトウェア検証方法。
【００９２】
（付記１０）前記仮想マシンは、前記アプリケーションが起動される前に、前記第２オペレーティングシステムおよび前記第１オペレーティングシステムをブートするとともに、前記退避領域をメモリに確保すること
を特徴とする付記１乃至付記９の何れか一に記載のソフトウェア検証方法。
【００９３】
（付記１１）第１オペレーティングシステムと、
第２オペレーティングシステムと、
前記第１オペレーティングシステムと前記第２オペレーティングシステムとを制御する制御ユニットと、
前記第１オペレーティングシステムおよび前記第２オペレーティングシステムで共用されるコンテキスト領域と退避領域とを含むメモリと、
を含み、
前記制御ユニットは、
前記退避領域に保持される第１オペレーティングシステムでのアプリケーションの実行結果と前記コンテキスト領域に保持される前記第２オペレーティングシステムでの前記アプリケーションの実行結果とを比較すること
を特徴とするソフトウェア検証システム。
【００９４】
（付記１２）前記制御ユニットは、
前記アプリケーションが所定の処理を開始するときに、前記アプリケーションを実行するシステムを前記第１オペレーティングシステムまたは前記第２オペレーティングシステムの間で切り替えること
を特徴とする付記１１に記載のソフトウェア検証システム。
【００９５】
（付記１３）前記所定の処理は、排他制御処理、同期待ち処理、分岐処理、またはエラー処理の何れかであること
を特徴とする付記１１または付記１２に記載のソフトウェア検証システム。
【００９６】
（付記１４）前記制御ユニットはデバッガであること
を特徴とする付記１１乃至付記１３の何れか一に記載のソフトウェア検証システム。
【符号の説明】
【００９７】
１００  マルチコアプロセッサシステム
１１１  デバッガＶＭ
１１２  共用メモリ
１１３  シングルＯＳ
１１４  マルチＯＳ
１１５＿Ｓ、１１５＿Ｍ  検証対象アプリ
１２１  検証対象アプリコンテキスト領域
１２２  退避領域
１２３  シングルコア環境区間データ
１２４  マルチコア環境区間データ
３０１  確保部
３０２  通知部
３０３  受付部
３０４  比較部
３０５  交換部
３０６  切替部
３０７  出力部
３１０  ユーザ空間
３１１  カーネル
【国際調査報告】
2013008326.tif 000013
2013008326.tif 000014
2013008326.tif 000015
2013008326.tif 000016