JP4873423B2 - 仮想化プログラム、シミュレーション装置、仮想化方法 - Google Patents

仮想化プログラム、シミュレーション装置、仮想化方法 Download PDF

Info

Publication number
JP4873423B2
JP4873423B2 JP2007335724A JP2007335724A JP4873423B2 JP 4873423 B2 JP4873423 B2 JP 4873423B2 JP 2007335724 A JP2007335724 A JP 2007335724A JP 2007335724 A JP2007335724 A JP 2007335724A JP 4873423 B2 JP4873423 B2 JP 4873423B2
Authority
JP
Japan
Prior art keywords
task
register
tasks
target
state
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.)
Expired - Fee Related
Application number
JP2007335724A
Other languages
English (en)
Other versions
JP2009157684A (ja
Inventor
正悟 石井
浩司 由良
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.)
Toshiba Digital Solutions Corp
Original Assignee
Toshiba Solutions 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 Toshiba Solutions Corp filed Critical Toshiba Solutions Corp
Priority to JP2007335724A priority Critical patent/JP4873423B2/ja
Priority to US12/341,902 priority patent/US8290764B2/en
Priority to CN2008101906836A priority patent/CN101470622B/zh
Publication of JP2009157684A publication Critical patent/JP2009157684A/ja
Application granted granted Critical
Publication of JP4873423B2 publication Critical patent/JP4873423B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45537Provision of facilities of other operating environments, e.g. WINE

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)
  • Test And Diagnosis Of Digital Computers (AREA)

Description

本発明は、マルチタスク処理を行うことができるOSを含めたソフトウェアのシミュレーションにて、ターゲットOS上で生成されたマルチタスクをホストCPUのネイティブコードでシミュレーション実行する仮想化プログラム、シミュレーション装置、仮想化方法に関する。
一般的なシミュレーション方式として、ISS方式(Instruction Set Simulation:命令セットシミュレーション)と、ネイティブ・コード・シミュレーション方式がある。
ISS方式は、ターゲットCPU(シミュレーション対象となる計算機のCPU)(仮想CPU)のアーキテクチャに沿ったバイナリコードのタスクを実行時に解析して模擬実行する方式であるが、このISS方式では、シミュレーションの実行に長時間を要するため、OSを含めたソフトウェア全体を現実的な時間内でシミュレートすることはできない。一方、ネイティブ・コード・シミュレーション方式は、ホストCPU(シミュレーションを実行する計算機の演算処理装置)のアーキテクチャに沿ったバイナリコードのタスクを、ホストCPUで直接実行する方式であるため、ターゲットCPUのアーキテクチャに沿ったバイナリコードへの解析、変換が不要となり、シミュレーションの実行を高速化することが可能である。
また、ターゲットOS(ターゲットCPU上で稼動するシミュレーション対象となるOS)がマルチタスクOSの場合、ターゲットOSはターゲットCPUが有するスタックレジスタやPSR(Program Status Register)といった特殊な制御レジスタを操作することによって、タスクのコンテキスト(タスクの実行に必要なデータ)の保存、復元を行い、マルチタスクのコンテキスト・スイッチングを実現する。これらの特殊な制御レジスタの操作はアセンブラ言語で記述されている。
なお、本発明の関連ある従来技術として、タイミング検証の精度を低下させることなく、Cベースのネイティブ・コード・シミュレーションを実現することにより、シミュレーションの高速化を実現したハードウェア/ソフトウェア協調検証方法が開示されている(例えば特許文献1)。また、半導体装置に搭載されるハードウェア/ソフトウェアの協調検証を実行する際に必要なソフトウェア検証モデルを生成する方法に関し、バジェット処理の追加方法を最適化してシミュレーション精度を維持しつつ、その性能を向上させる方法が開示されている(例えば特許文献2)。
特開2004−234528号公報 特開2005−293219号公報
しかしながら、ネイティブ・コード・シミュレーションを実行するためには、ターゲットOSを含めたソフトウェアを全てC言語ベースに置き換えなければならない。
また、ネイティブ・コード・シミュレータでは上述のスタックレジスタがモデル化されてない。よって、ターゲットOSがタスク毎のコンテキストを保存および復元することができないため、マルチタスクの実行をする際には、そのタスクの管理をシミュレーションエンジンとターゲットOSが密に連携して行う必要がある。本来、ターゲットOS上のタスクはターゲットOSにて管理されるべきである。シミュレーションエンジンが提供する仮想CPU上でターゲットOSが稼動し、ターゲットOSの管理下でタスクが実行されるべきであるが、上述のようにシミュレーションエンジンとターゲットOSの密な連携によるタスクの管理では、本来の階層の整合がとれていない構成となり、ターゲットOS種別ごとにシミュレーションエンジン側の処理を用意しなければならない。
本発明は上述した課題を解決するためになされたものであり、ネイティブ・コード・シミュレータにおいて、ターゲットOS上のタスク毎に固有なスタック領域を持ち、タスク切替えのタイミングでターゲットOSによるコンテキスト・スイッチングを可能とすることで、マルチタスクOS上のタスクをネイティブコードシミュレーションを可能とするシミュレーション装置、仮想化プログラム、仮想化方法を提供することを目的とする。
上述した課題を解決するため、本発明は、仮想プログラムであって、マルチタスク処理を行うことができるOSのネイティブ・コード・シミュレーションにおいて、シミュレーション対象であるターゲットOS上で生成されたタスクのそれぞれがターゲットOS上で起動されるごとに、前記タスクのそれぞれが呼び出す関数順に関数呼び出し情報(Call Stack)をLIFO(後入れ先出し)構造でタスクごとに格納するスタック領域と、前記タスクのそれぞれが最後に実行中断したときのレジスタ内容を最新レジスタ情報としてタスクごとに格納するレジスタ保存領域と、前記タスクそれぞれの状態を示す状態情報をタスクごとに格納するタスク状態格納領域(タスク・コントロール・ブロック:TCB)とを生成し、所定のタイミングで、稼動しているタスクが最後に呼んだ関数の少なくとも一つ前に関数を呼び出した時点のレジスタ内容を前記最新レジスタ情報として前記レジスタ保存領域に格納するとともに、前記稼動しているタスクの状態を示す状態情報を前記タスク状態格納領域に格納し、格納されている次に稼動すべき待機中のタスクの最新レジスタ情報および状態情報に基づき、前記稼動しているタスクから前記待機中のタスクへとタスクの稼動を切替える処理をコンピュータに実行させるものである。
また、本発明は、上述に記載の仮想化プログラムにおいて、前記切替えは、前記待機中のタスクの最新レジスタ情報に基づいたレジスタ内容を、ホストCPUのスタックレジスタに格納することで、ネイティブ・コード・シミュレーションにおけるターゲットOS上のタスクの稼動を切替えることを特徴とするものである。
また、本発明は、上述に記載の仮想化プログラムにおいて、前記レジスタ保存領域への格納は、ホストCPUの所定のレジスタに格納された値を、前記稼動しているタスクの最新レジスタ情報として格納することを特徴とするものである。
また、本発明は、上述に記載の仮想化プログラムにおいて、前記切替えは、前記待機中のタスクの最新レジスタ情報を前記所定のレジスタに格納することでタスクの稼動を切替えることを特徴とするものである。
上述した課題を解決するため、本発明は、シミュレーション装置であって、マルチタスク処理を行うことができるOSのネイティブ・コード・シミュレーションにおいて、シミュレーション対象であるターゲットOS上で生成されたタスクのそれぞれがターゲットOS上で起動されるごとに、前記タスクのそれぞれが呼び出す関数順に関数呼び出し情報(Call Stack)をLIFO(後入れ先出し)構造でタスクごとに格納するスタック領域と、前記タスクのそれぞれが最後に実行中断したときのレジスタ内容を最新レジスタ情報としてタスクごとに格納するレジスタ保存領域と、前記タスクそれぞれの状態を示す状態情報をタスクごとに格納するタスク状態格納領域(タスク・コントロール・ブロック:TCB)とを生成するコンテキスト生成部と、所定のタイミングで、稼動しているタスクが最後に呼んだ関数の少なくとも一つ前に関数を呼び出した時点のレジスタ内容を前記最新レジスタ情報として前記レジスタ保存領域に格納するとともに、前記稼動しているタスクの状態を示す状態情報を前記タスク状態格納領域に格納するコンテキスト格納部と、格納されている次に稼動すべき待機中のタスクの最新レジスタ情報および状態情報に基づき、前記稼動しているタスクから前記待機中のタスクへとタスクの稼動を切替えるタスク切替え部と、を備えるものである。
また、本発明は、上述に記載のシミュレーション装置において、前記タスク切替え部は、前記待機中のタスクの最新レジスタ情報に基づいたレジスタ内容を、ホストCPUのスタックレジスタに格納することで、ネイティブ・コード・シミュレーションにおけるターゲットOS上のタスクの稼動を切替えることを特徴とするものである。
また、本発明は、上述に記載のシミュレーション装置において、前記コンテキスト格納部は、ホストCPUの所定のレジスタに格納された値を、前記稼動しているタスクの最新レジスタ情報として前記状態格納領域に格納することを特徴とするものである。
また、本発明は、上述に記載のシミュレーション装置において、前記タスク切替え部は、前記待機中のタスクの最新レジスタ情報を前記所定のホストCPUのレジスタに格納することでタスクの稼動を切替えることを特徴とするものである。
上述した課題を解決するため、本発明は、仮想化方法であって、マルチタスク処理を行うことができるOSのネイティブ・コード・シミュレーションにおいて、シミュレーション対象であるターゲットOS上で生成されたタスクのそれぞれがターゲットOS上で起動されるごとに、前記タスクのそれぞれが呼び出す関数順に関数呼び出し情報(Call Stack)をLIFO(後入れ先出し)構造でタスクごとに格納するスタック領域と、前記タスクのそれぞれが最後に実行中断したときのレジスタ内容を最新レジスタ情報としてタスクごとに格納するレジスタ保存領域と、前記タスクそれぞれの状態を示す状態情報をタスクごとに格納するタスク状態格納領域(タスク・コントロール・ブロック:TCB)とを生成し、所定のタイミングで、稼動しているタスクが最後に呼んだ関数の少なくとも一つ前に関数を呼び出した時点のレジスタ内容を前記最新レジスタ情報として前記レジスタ保存領域に格納するとともに、前記稼動しているタスクの状態を示す状態情報を前記タスク状態格納領域に格納し、格納されている次に稼動すべき待機中のタスクの最新レジスタ情報および状態情報に基づき、前記稼動しているタスクから前記待機中のタスクへとタスクの稼動を切替えるものである。
また、本発明は、上述に記載の仮想化方法において、前記切替えは、前記待機中のタスクの最新レジスタ情報に基づいたレジスタ内容を、ホストCPUのスタックレジスタに格納することで、ネイティブ・コード・シミュレーションにおけるターゲットOS上のタスクの稼動を切替えることを特徴とするものである。
また、本発明は、上述に記載の仮想化方法において、前記状態格納領域への格納は、ホストCPUの所定のレジスタに格納された値を、前記稼動しているタスクの最新レジスタ情報として格納することを特徴とするものである。
また、本発明は、上述に記載の仮想化方法において、前記切替えは、前記待機中のタスクの最新レジスタ情報を前記所定のホストCPUのレジスタに格納することでタスクの稼動を切替えることを特徴とするものである。
本発明によれば、マルチタスク処理を行うことが可能なOSに対し、複数のタスクを切替えて高速にシミュレーション実行することができる。
本実施の形態におけるシミュレーション装置の構成を図1を参照しつつ説明する。
シミュレーション装置100は、ホストCPU10(CPU:Central Processing Unit)、ホストOS11(OS:Operating System)、シミュレーションエンジン1、仮想CPU12、ターゲットOS13、タスク14A、タスク14B(タスクを総称するときはタスク14と記す)、HWモデル20(HW:HardWare)、を備える。
ホストCPU10は、シミュレーション装置100の所定のアーキテクチャに基づきハードウェアとして実装された演算処理装置であり、ホストOS11は、ホストCPU10のアーキテクチャ上で稼動するOSである。
シミュレーションエンジン1は、仮想CPU12とHWモデル20の実行環境を提供し、各モデルをスケジューリングするタイミングを調整しつつ、ソフトウェアおよびハードウェアをシミュレーション実行する仮想化プログラムである。
また、仮想CPU12は、ホストOS11上でターゲットCPUの動作を模擬実行する仮想CPUである。尚、本実施の形態では、仮想CPU12での実行モードは全て同一特権モードで実行されるものとする。尚、ネイティブ・コード・シミュレータではスタックレジスタがモデル化されていないが、仮想CPU12のスタックレジスタはホストCPU10のスタックレジスタをマッピングしている。つまり、ターゲットOS12が仮想CPU12のスタックレジスタを読み/書きすると、ホストCPU10のスタックレジスタが読み/書きされる。
ターゲットOS13は、仮想CPU12上で稼動するマルチタスク処理を行うことができるOSである。尚、本実施の形態におけるターゲットOS13は、多重仮想記憶OSではなく、モノリシック空間OSとする。
タスク14は、ターゲットOS13上で稼動する所定の処理を実行するユーザプログラムである。またタスク14は、ホストCPU10のアーキテクチャに準拠したネイティブコードで生成(コンパイル)されたプログラムである。
HWモデル20は、例えばCCDカメラ、スキャナ等、所定の周辺機器の動作をソフトウェアとしてモデル化したものである。
本実施の形態のシミュレーション装置100は、上述の仮想CPU12、ターゲットOS13、タスク14、HWモデル20に相当する構成のハードウェア/ソフトウェア環境の動作を検証するためのものである。以下、必要に応じこのモデル化された環境全体を検証対象と記す。
尚、シミュレーションエンジン1は、タスクのコンテキストの生成・退避(保存)・復元・消去の処理をAPIとして備え、例えばターゲットOS13にて各APIが呼ばれることで機能が実現される。ターゲットOS13のポーティングでは、シミュレーションエンジン1のAPIを呼び出すようにコードが一部変更されることで、タスク毎に固有なスタック領域が割り当てられる。タスク切替え時にはスタック領域の切替えが行われることで、コンテキストの切替えが可能となる。タスク14はネイティブコードを直接実行する方式なので、スタック領域の内部構造はホストCPU10上のホストOS11が使用するスタック領域の構造と同一とすることで、シミュレーションエンジン1はサポートするホストCPU10、ホストOS11毎のコンテキスト操作APIの処理を有することになる。
また、タスク14A、タスク14Bが並列して実行されるようにするために、シミュレーションエンジン1は、コンテキスト生成部2、コンテキスト保存部3(コンテキスト格納部)、およびコンテキスト復元部4(タスク切替え部)を備える。ここで、コンテキスト生成部2、コンテキスト保存部3、およびコンテキスト復元部4について説明するが、以下の説明では、現在稼働中のタスクをタスク14Aとし、次に稼動すべきタスク(待機中のタスク)をタスク14Bとすることで、タスク14Aからタスク14Bに稼動タスクを切替えることとして説明する。
コンテキスト生成部2は、タスク14のそれぞれが呼び出す関数順に関数呼び出し情報(Call Stack)をLIFO(後入れ先出し)構造でタスク14ごとに格納するためのスタック領域と、タスク14の最新レジスタ情報を格納するためのレジスタ保存領域とを生成し、またタスク14それぞれの状態を示すタスク状態情報をタスク14ごとに格納するタスク状態格納領域(以下、TCB(Task Control Block)と表記)を生成する。尚、本実施の形態の説明のように、レジスタ保存領域をTCB内部に持つこともあり、その場合TCBにはレジスタ保存領域とタスク状態情報領域が存在する。
コンテキスト保存部3は、現在稼動しているタスク14Aが最後に呼んだ関数を呼び出した時点のレジスタ内容を最新レジスタ情報としてタスク14AのTCBに格納するとともに、稼動しているタスク14Aの状態を示すタスク状態情報をタスク14AのTCBに格納する。尚、コンテキスト保存部3は、タスク14Bに対しても同様の処理をする。
コンテキスト復元部4は、次に稼動すべき待機中のタスク14Bに対するTCBに格納された最新レジスタ情報およびタスク状態情報に基づき、稼動しているタスク14Aから待機中のタスク14Bへとタスクの稼動を切替える。コンテキスト復元部4は、タスク14Bからタスク14Aへの切替えも同様の処理をする。
上述のコンテキスト保存部3と、コンテキスト復元部4との処理が所定のタイミング(例えば、ターゲットOS13の割り込みスケジューラ(IRS:Interrupt Routine Scheduler)による割り込みの発生や、ユーザのシステムコール呼び出しに伴う割り込み指示)により行われることで、マルチタスク処理を可能とするターゲットOS13上で、タスクの切替えが実現される。
次に、本実施の形態におけるシミュレーション装置100の処理を、図2のフローチャートに基づき説明する。尚、以下の説明においては、タスクの生成においてはタスク14Aがタスク14Bを生成し、またタスクの切替えにおいてはタスク14Aからタスク14Bに切り替わるものとして説明する。
タスク14Aからタスク14Bのタスク生成要求がなされた場合、コンテキスト生成部2は、タスク14Bに対応するTCB、スタック領域を生成し、生成したスタック領域のルートフレーム(タスク実行開始時に必要な情報が格納される管理領域)を生成する(ステップS1)。
ここで、タスク14Aの関数の構成および、タスク14A、タスク14Bのスタック領域、TCBについて、図3を参照しつつ説明する。
コンテキストを生成する際のタスク14Aの関数呼び出しが、図3の「タスク14Aの関数構造(コンテキスト生成)」に示すように、main()を主関数として、ユーザプログラムの関数func_a()があり、func_a()の中から、ターゲットOSにて用意されたタスクを生成するためのAPIであるCRE_TASK()を呼び出している。CRE_TASK()の中にさらにシミュレーションエンジン1にて用意された関数であり、コンテキスト生成部2の機能であるcontext_create()が呼び出される構造であるものとする。
ターゲットOSのタスク生成機能であるCRE_TASK()が呼ばれることで作成されるスタック領域には、図3の「スタック領域、TCB関係」にて示すように、LIFOのスタック構造にて、呼ばれる関数順に関数呼び出し情報が格納されていく。上述のタスク14Aでは、スタック領域のルートフレームがタスク起動時に作成され、その後、タスク14Aの処理が進むにつれ、関数が呼ばれた順にmain()フレーム、func_a()フレーム、CRE_TASK()フレーム、context_create()フレーム(フレーム:関数呼び出し情報を格納する単位)がスタック領域に積まれる。
尚、タスク生成機能であるCRE_TASK()によって、タスク14Bが生成され、コンテキスト生成部2のcontext_create()によって必要な設定がなされるが、ここで、CRE_TASK()と、その内部にて呼ばれるcontext_create()の処理について説明する。
CRE_TASK()は、タスク14Bを起動するとともにTCB(以下、タスク14Aに対応するTCBをTCB(A)と表記し、タスク14Bに対応するTCBをTCB(B)と表記する)を作成し、そのタスクに関する情報の初期値(レジスタの初期値、タスク状態情報の初期値)を設定する。また、CRE_TASK()は、起動されたタスクとして実行するプログラムを配置するためのアドレス空間(スタック領域を含む)を割り当てる。尚、本実施の形態におけるCRE_TASK()は、ターゲットOS13がモノリシック空間OSであるため、実メモリのアドレス空間を切り分けてスタック領域として割り当てる。一方、仮想記憶OSの場合は、ページテーブルなど仮想空間制御情報を作成する。
またcontext_create()は、スタック領域のルートフレームを作成し、起動されたタスク実行開始時に必要な情報(例えば、そのタスクの環境変数、main関数の開始アドレス等)をルートフレームに設定する。さらに、タスクスケジューリングの対象となるように、作成したTCBをターゲットOS13が管理するTCBキュー(タスク・レディ・キューなど)に登録する。
このようにタスク生成機能を実現するCRE_TASK()とその内部で呼び出すcontext_create()によって、タスク14Bのコンテキストを格納する領域を作成することができる。尚、作成されるスタック領域は、ホストOS11が検証対象のスレッドに割り当てたスタック領域を細分化してもよく、またはメモリアロケード関数(malloc関数等)などホストOS11のメモリ領域割り当てサービスで獲得した領域を使用しても良い。
このようにコンテキストの生成が完了すると、context_create()が終了し(context_create()呼び出しフレームがスタック領域から開放される)、CRE_TASK()が終了する(CRE_TASK()呼び出しフレームがスタック領域から開放される)。
尚、タスク14Aからタスク14Bのタスク生成要求が成され、タスク14Aがタスク14Bを動的にタスク生成したが、ターゲットOS13がOS構成情報に基づきタスク14Bを静的にタスク生成してもよい。
図2のフローチャートに説明を戻す。次に、上述のようにタスク14Bが生成された後のタスク14Aとタスク14Bを並列に実行するためのタスク切替え処理について説明する。
コンテキスト保存部3は、ホストCPU10のスタックに格納されている、カレントフレームから1フレーム分前のフレームをカレントフレームポインタとしてTCBに格納する。また、コンテキスト保存部3は、仮想CPUの制御レジスタであるPSR(タスクの状態を示す値を格納するレジスタ)に格納されている値(レジスタ情報)をTCBに格納する(ステップS2)。
このコンテキスト保存部3にて行われる処理を、図4に基づきタスク14Aを例として説明する。
コンテキストをTCBに保存する際のタスク14Aの関数呼び出しが、図4の「タスク14Aの関数構造(コンテキスト保存)」に示すような構造であるものとする。すなわち、main()を主関数として、ユーザプログラムの関数func_b()があり、func_b()の中からターゲットOS13が提供する何らかのシステムコールを呼び出し(syscall()関数が呼ばれる)、システムコールの中でタスク切替えを行うためにタスク切替え関数(Task_switch())が呼ばれ、さらにTask_switch()の内部関数として、コンテキスト保存部3の機能であるcontext_save()が呼ばれる構造であるとする。
上述の状況においては、仮想CPU12は、現在context_save()を実行しており、仮想CPU12のスタックレジスタは、context_save()フレームのアドレス(図中、fpと表記)が格納されている状態である。ここで、context_save()は、自身のcontext_save()フレームの一つ前の関数(すなわちTask_switch())のフレームのアドレスをTCB(A)に格納する。
また、context_save()は、現在仮想CPU12の制御レジスタに格納されているレジスタ情報をタスク14Aのレジスタ保存領域に保存することで、TCB(A)に格納する。
このような処理を行い、context_save()が終了すると、そのcontext_save()フレームも開放される。
このように、コンテキスト保存部3の機能であるcontext_save()は、context_save()を呼び出した関数の関数呼び出し情報のアドレスをカレントフレームポインタとしてTCB(A)に格納し、さらに、現在仮想CPU12の制御レジスタに格納されたレジスタ情報をTCB(A)に格納する。この格納された情報に基づき、後にタスク14Aからタスク14Bに切り替わりその後またタスク14Bからタスク14Aに切り替わるとき、タスク14Aは切り替わる前の状態から処理を継続実行できる。
次にタスク14AのコンテキストがTCB(A)に保存された後の処理を図2のフローチャートに戻り説明する。
コンテキスト復元部4は、現在稼動しているタスク14Aのスタック領域に格納された関数呼び出し情報のうち現在実行されている関数の呼び出しフレーム(カレントフレーム)の1フレーム分をタスク14B(次に稼動すべき待機中のタスク)のスタック領域にコピーする。また、コンテキスト復元部4は、TCB(B)に格納されたレジスタ情報を仮想CPU12の制御レジスタに格納し、さらにTCB(B)に格納されているアドレスに1フレーム分加えたアドレスをカレントフレームポインタとして仮想CPU12のスタックレジスタに格納する(ステップS3)。
このコンテキスト復元部4にて行われる処理を、図5に基づき説明する。
図5では、現在タスク14Aが実行されており、上述のコンテキスト保存部3の処理(context_save())が終了し、コンテキスト復元部4の機能であるcontext_restore()が呼ばれた状態を示している。
まず、タスク14Aでcontext_restore()がTask_switch()から呼ばれることで、context_restore()は、自身のcontext_restore()関数呼び出しフレーム(1フレーム分)をタスク14Bのスタック領域上にコピーする。その後、context_restore()は、TCB(B)に格納されているアドレスを、コピーした自身のcontext_restore()関数呼び出しフレームサイズ分だけ追加したアドレスに更新する。すなわち、context_restore()は、TCB(B)のスタックフレームポインタをTask_switch()関数呼び出しフレームのアドレスからcontext_restore()関数呼び出しフレームのアドレスに更新する。
その後、context_restore()は、更新されたポインタの内容を仮想CPU12のスタックレジスタに格納し、更に、TCB(B)内のレジスタ保存領域に格納されたレジスタ情報を仮想CPU12の制御レジスタに格納する(尚、図5においてはレジスタ情報に関しては図示せず)。
このようにすることで、仮想CPU12は、タスクが切り替わったことを何ら意識することなく自身のスタックレジスタに格納されているアドレスの処理(すなわち、タスク14Bのスタック領域に積まれたcontext_restore())をそのまま実行する。
その後、上述のように一連の切替え処理が完了したため、context_restore()の処理が終了し(context_restore()フレームが開放される)、タスク14BのTask_switch()の処理が終了する(Task_switch()フレームが開放される)。また、タスク14Bのシステムコール呼び出し(syscall())が終了することで(syscall()フレームが開放される)、タスク14Bは待機状態になる前の処理(図5においてはユーザ関数であるfunc_d())を継続実行する。
上述のcontext_save()、context_restore()の処理が、ターゲットOS13の割り込みスケジューラによる割り込み発生や、システムコール呼び出し(syscall())が発生するタイミングでTask_switch()から呼ばれることで、タスク14A、タスク14Bのタスクの切替えが行われる。
上述のようにタスク14Bが稼動状態になり、次にタスク14Bからタスク14Aに切り替わる場合は、タスク14Bの処理中にcontext_save()が呼ばれ、仮想CPU12の現在の制御レジスタ、およびスタックポインタ(1フレーム分減算したもの)をTCB(B)に保存する処理がなされる。その後、タスク14Bの処理としてcontext_restore()が呼ばれることで、context_restore()は、自身のcontext_restore()関数呼び出しフレームをタスク14Aにコピーし、TCB(A)に格納されたスタックフレームポインタに1フレーム分加えたもの(context_restore()関数呼び出しフレームのサイズ分を加えたもの)に更新し、更新後のスタックフレームポインタの内容をスタックレジスタに格納するとともにTCB(A)に格納された状態情報も制御レジスタに格納することで、タスク14Aにて、自身のcontext_restore()処理が引き続きなされるようにする。
図2のフローチャートに戻り、最後にタスクの終了について、タスク14Aを例に説明する。タスク14A内の関数が1つずつ終了し(スタック領域のフレームが1つずつ開放され)、最後のmain()が終了することで、ルートフレームとともにタスク14Aとして割り当てられたスタック領域が開放され、タスク14Aは終了する(ステップS4)。
尚、本実施の形態では、2つのタスクのコンテキストが生成され、2つのタスクの切替え処理について記したが、より多いタスクの生成、切替えも適用可能である。
また、本実施の形態におけるコンテキスト保存部3は、スタック領域に格納された最後に実行された関数の1フレーム分を減算したアドレスを格納アドレス情報としてTCBに格納し、コンテキスト復元部4は、格納アドレス情報に対しコピーした1フレーム分を加算したアドレスを仮想CPU12のスタックレジスタに格納したが、タスク切替えがどこのプログラムロケーションで発生したことにするのかによって、何フレーム分減算、加算するか、あるいは減算、加算を行わないかが異なる。本実施の形態ではTask_switch()関数の中でタスク切替えが発生したことにする場合とした。
また、本実施の形態では、仮想CPU12での実行モードは全て同一特権モードで実行されるものとしたが、割り込みスケジューラのみは別の特権モードとすることもできる。その場合は、割込み処理用のスタック領域をターゲットOS13起動時に作成し、割り込みスケジューラが割り込みハンドラをスケジュールするときに、にて割込み処理用スタックへの切替えを行えば良い。
また、本実施の形態では、ターゲットOS13を単一空間(モノリシック空間OS)のものとしたが、多重仮想記憶OSの場合には複数タスクのタスク固有な空間を同時に参照・操作することはできない。つまり、多重仮想記憶でのスタック・フレーム・コピー操作が上述の実施の形態のような直接コピーでは実現できない。その場合、コピー元タスクのコンテキストで一旦ターゲットOS13のシステム領域のようなタスク共通領域にコピーして、タスクのコンテキストを切替えてから、コピー先タスクのスタックへコピーを行うことにより、上述の実施の形態と同等のコンテキスト切替えが可能になる。よって、本発明は、多重仮想記憶OSにも適用可能である。
また、本実施の形態では仮想CPU12での実行モードは全て同一特権モードで実行されるものとしたが、システム保護を目的として、ターゲットCPUでの実行モードにはユーザ・モード/特権モード/例外モードなどの複数の実行モードがあり、バンク切替えなどの仕組みによって実行モード毎に使用するスタックを切替えるのが一般的である。
そして、実行モードを切替えるときには、切替え後の実行モード用スタック領域のフレームの中に、切替え前の実行モード用スタック領域のカレントフレームポインタが格納される。その結果、現在の実行モードから旧実行モードに復帰する際、実行モード切替え発生時のカレントフレームポインタを復元することが可能となる。
本実施の形態におけるシミュレーションエンジン1によって、仮想CPU12、ターゲットOS13、タスク14がシミュレーションエンジン1から見ると一つの実行単位であり、タスク14Aからタスク14Bへのタスク切替えタイミングやタスク切替え条件はターゲットOS13によってのみ決定され、シミュレーションエンジン1からは透過となる。よって、ターゲットOSのタスク切替えアルゴリズムが変わってもシミュレーションエンジン1への変更は不要である。
本実施の形態において、仮想化プログラムは上述したシミュレーション装置の内部に予めインストールされているものとして記載したが、本発明における仮想化プログラムは記憶媒体に記憶されたものも含まれる。ここで記憶媒体とは、磁気テープ、磁気ディスク(フロッピーディスク、ハードディスクドライブ等)、光ディスク(CD−ROM、DVDディスク等)、光磁気ディスク(MO等)、フラッシュメモリ等、シミュレーション装置に対し脱着可能な媒体や、さらにネットワークを介することで伝送可能な媒体等、上述したシミュレーション装置におけるコンピュータで読み取りや実行が可能な全ての媒体をいう。
本実施の形態におけるシミュレーション装置の構成の一例を示す図である。 本実施の形態におけるシミュレーション装置の処理の一例を示すフローチャートである。 本実施の形態におけるコンテキスト生成の処理におけるタスクの関数構成およびスタック領域構成を示す図である。 本実施の形態におけるコンテキスト保存の処理におけるタスクの関数構成およびスタック領域構成を示す図である。 本実施の形態におけるコンテキスト復元の処理におけるタスクの関数構成およびスタック領域構成を示す図である。
符号の説明
1 シミュレーションエンジン、2 コンテキスト生成部、3 コンテキスト保存部、4 コンテキスト復元部、10 ホストCPU、11 ホストOS、12 仮想CPU、13 ターゲットOS、14、14A、14B タスク、20 HWモデル、100 シミュレーション装置。

Claims (9)

  1. マルチタスク処理を行うことができるターゲットOSと前記ターゲットOS上で動く複数のタスクをホストCPU上のホストOSにて行うネイティブ・コード・シミュレーションにおいて、前記ターゲットOS上で動く前記複数のタスクのそれぞれが起動されるごとに、前記複数のタスクのそれぞれが呼び出す関数順に関数呼び出し情報をLIFO構造で前記複数のタスクのうちのタスクごとに格納する前記ホストCPU上のスタック領域と、前記複数のタスクのそれぞれが最後に実行中断したときのレジスタ内容を最新レジスタ情報として前記複数のタスクのうちのタスクごとに格納する前記ターゲットOS上に存在するレジスタ保存領域と、前記複数のタスクそれぞれの状態を示す状態情報を前記複数のタスクのうちのタスクごとに格納する前記ターゲットOS上に存在するタスク状態格納領域とを生成し、
    前記ターゲットOS上の前記複数のタスクのいずれかが割り込み発生もしくは割り込み指示により稼動状態から待機状態または待機状態から稼動状態に遷移するタイミングで、前記稼動状態のタスクが最後に呼んだ関数の少なくとも一つ前に関数を呼び出した時点のレジスタ内容を最新レジスタ情報として前記レジスタ保存領域に格納するとともに、前記稼動状態のタスクの状態を示す状態情報を前記タスク状態格納領域に格納し、
    格納されている次に稼動すべき前記複数のタスクのうちの待機状態のタスクの最新レジスタ情報を、前記タイミングで前記スタック領域に格納することにより、前記稼動状態のタスクから前記待機状態のタスクへとタスクの稼動を切替える処理をコンピュータに実行させる仮想化プログラム。
  2. 請求項1に記載の仮想化プログラムにおいて、
    前記レジスタ保存領域への格納は、前記ホストCPUの前記複数のタスクのうちのタスクごとに設けられた所定のレジスタに格納された値を、前記稼動状態のタスクの最新レジスタ情報として格納することを特徴とする仮想化プログラム。
  3. 請求項に記載の仮想化プログラムにおいて、
    前記切替えは、前記待機状態のタスクの最新レジスタ情報を前記ホストCPUのレジスタに格納することでタスクの稼動を切替えることを特徴とする仮想化プログラム。
  4. マルチタスク処理を行うことができるターゲットOSと前記ターゲットOS上で動く複数のタスクをホストCPU上のホストOSにて行うネイティブ・コード・シミュレーションにおいて、前記ターゲットOS上で動く前記複数のタスクのそれぞれが起動されるごとに、前記複数のタスクのそれぞれが呼び出す関数順に関数呼び出し情報をLIFO構造で前記複数のタスクのうちのタスクごとに格納する前記ホストCPU上のスタック領域と、前記複数のタスクのそれぞれが最後に実行中断したときのレジスタ内容を最新レジスタ情報として前記複数のタスクのうちのタスクごとに格納する前記ターゲットOS上に存在するレジスタ保存領域と、前記複数のタスクそれぞれの状態を示す状態情報を前記複数のタスクのうちのタスクごとに格納する前記ターゲットOS上に存在するタスク状態格納領域とを生成するコンテキスト生成部と、
    前記ターゲットOS上の前記複数のタスクのいずれかが割り込み発生もしくは割り込み指示により稼動状態から待機状態または待機状態から稼動状態に遷移するタイミングで、前記稼動状態のタスクが最後に呼んだ関数の少なくとも一つ前に関数を呼び出した時点のレジスタ内容を最新レジスタ情報として前記レジスタ保存領域に格納するとともに、前記稼動状態のタスクの状態を示す状態情報を前記タスク状態格納領域に格納するコンテキスト格納部と、
    格納されている次に稼動すべき前記複数のタスクのうちの待機状態のタスクの最新レジスタ情報を、前記タイミングで前記スタック領域に格納することにより、前記稼動状態のタスクから前記待機状態のタスクへとタスクの稼動を切替えるタスク切替え部と、
    を備えるシミュレーション装置。
  5. 請求項に記載のシミュレーション装置において、
    前記コンテキスト格納部は、前記ホストCPUの前記複数のタスクのうちのタスクごとに設けられた所定のレジスタに格納された値を、前記稼動状態のタスクの最新レジスタ情報として前記レジスタ保存領域に格納することを特徴とするシミュレーション装置。
  6. 請求項に記載のシミュレーション装置において、
    前記タスク切替え部は、前記待機状態のタスクの最新レジスタ情報を前記ホストCPUのレジスタに格納することでタスクの稼動を切替えることを特徴とするシミュレーション装置。
  7. マルチタスク処理を行うことができるターゲットOSと前記ターゲットOS上で動く複数のタスクをホストCPU上のホストOSにて行うネイティブ・コード・シミュレーションにおいて、前記ターゲットOS上で動く前記複数のタスクのそれぞれが起動されるごとに、前記複数のタスクのそれぞれが呼び出す関数順に関数呼び出し情報をLIFO構造で前記複数のタスクのうちのタスクごとに格納する前記ホストCPU上のスタック領域と、前記複数のタスクのそれぞれが最後に実行中断したときのレジスタ内容を最新レジスタ情報として前記複数のタスクのうちのタスクごとに格納する前記ターゲットOS上に存在するレジスタ保存領域と、前記複数のタスクそれぞれの状態を示す状態情報を前記複数のタスクのうちのタスクごとに格納する前記ターゲットOS上に存在するタスク状態格納領域とを生成し、
    前記ターゲットOS上の前記複数のタスクのいずれかが割り込み発生もしくは割り込み指示により稼動状態から待機状態または待機状態から稼動状態に遷移するタイミングで、前記稼動状態のタスクが最後に呼んだ関数の少なくとも一つ前に関数を呼び出した時点のレジスタ内容を最新レジスタ情報として前記レジスタ保存領域に格納するとともに、前記稼動状態のタスクの状態を示す状態情報を前記タスク状態格納領域に格納し、
    格納されている次に稼動すべき前記複数のタスクのうちの待機状態のタスクの最新レジスタ情報を、前記タイミングで前記スタック領域に格納することにより、前記稼動状態のタスクから前記待機状態のタスクへとタスクの稼動を切替える仮想化方法。
  8. 請求項に記載の仮想化方法において、
    前記レジスタ保存領域への格納は、前記ホストCPUの前記複数のタスクのうちのタスクごとに設けられた所定のレジスタに格納された値を、前記稼動状態のタスクの最新レジスタ情報として格納することを特徴とする仮想化方法。
  9. 請求項に記載の仮想化方法において、
    前記切替えは、前記待機状態のタスクの最新レジスタ情報を前記ホストCPUのレジスタに格納することでタスクの稼動を切替えることを特徴とする仮想化方法。
JP2007335724A 2007-12-27 2007-12-27 仮想化プログラム、シミュレーション装置、仮想化方法 Expired - Fee Related JP4873423B2 (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2007335724A JP4873423B2 (ja) 2007-12-27 2007-12-27 仮想化プログラム、シミュレーション装置、仮想化方法
US12/341,902 US8290764B2 (en) 2007-12-27 2008-12-22 Virtualization program, simulation apparatus and virtualization method
CN2008101906836A CN101470622B (zh) 2007-12-27 2008-12-26 模拟装置以及虚拟化方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2007335724A JP4873423B2 (ja) 2007-12-27 2007-12-27 仮想化プログラム、シミュレーション装置、仮想化方法

Publications (2)

Publication Number Publication Date
JP2009157684A JP2009157684A (ja) 2009-07-16
JP4873423B2 true JP4873423B2 (ja) 2012-02-08

Family

ID=40799540

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2007335724A Expired - Fee Related JP4873423B2 (ja) 2007-12-27 2007-12-27 仮想化プログラム、シミュレーション装置、仮想化方法

Country Status (3)

Country Link
US (1) US8290764B2 (ja)
JP (1) JP4873423B2 (ja)
CN (1) CN101470622B (ja)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101799767B (zh) * 2010-03-05 2013-03-06 中国人民解放军国防科学技术大学 一种利用模拟器多种运行模式反复切换进行并行模拟的方法
JP5450271B2 (ja) 2010-06-10 2014-03-26 株式会社東芝 シミュレーション装置、シミュレーションプログラム及び方法
CN102156632A (zh) * 2011-04-06 2011-08-17 北京北大众志微系统科技有限责任公司 数据访问方法和装置
CN102521042A (zh) * 2011-12-16 2012-06-27 中船重工(武汉)凌久电子有限责任公司 基于哈佛结构dsp的快速正文切换方法
US11003464B2 (en) * 2012-04-19 2021-05-11 Microsoft Technology Licensing, Llc Control flow integrity enforcement at scale
WO2017004269A1 (en) * 2015-06-30 2017-01-05 Vmware, Inc. Methods and apparatus for software lifecycle management of a virtual computing environment
JP6493190B2 (ja) * 2015-12-10 2019-04-03 株式会社デンソー 情報処理装置
MA44821A (fr) * 2016-02-27 2019-01-02 Kinzinger Automation Gmbh Procédé d'allocation d'une pile de registres virtuels dans une machine à pile
CN107729050B (zh) * 2017-09-22 2021-01-22 中国科学技术大学苏州研究院 基于let编程模型的实时系统及任务构建方法
CN113127100B (zh) * 2021-05-14 2022-07-12 武汉深之度科技有限公司 一种异构程序执行方法、装置、计算设备及可读存储介质

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS63127330A (ja) * 1986-11-17 1988-05-31 Nippon Telegr & Teleph Corp <Ntt> タスク開発方式
JP3137094B2 (ja) * 1997-11-11 2001-02-19 日本電気株式会社 シミュレーション方法、シミュレーション装置及びその記録媒体
JP2000066904A (ja) * 1998-08-21 2000-03-03 Canon Inc マルチタスク制御方法及び記憶媒体
JP2000259445A (ja) * 1999-03-05 2000-09-22 Nec Corp ソフトウェア/ハードウェア協調シミュレーション方法
US6672963B1 (en) * 2000-09-18 2004-01-06 Nintendo Co., Ltd. Software implementation of a handheld video game hardware platform
JP3951925B2 (ja) 2003-01-31 2007-08-01 セイコーエプソン株式会社 ハードウェア/ソフトウェア協調検証方法
JP4563669B2 (ja) * 2003-11-25 2010-10-13 三菱電機株式会社 命令模擬装置
JP4271072B2 (ja) 2004-03-31 2009-06-03 Okiセミコンダクタ株式会社 ソフトウェア検証モデル生成方法
KR100679050B1 (ko) * 2005-12-12 2007-02-06 삼성전자주식회사 태스크간 빠른 문맥 교환을 위해 레지스터 문맥을 저장,복구하는 방법 및 장치
JP2007257257A (ja) * 2006-03-23 2007-10-04 Matsushita Electric Ind Co Ltd マルチタスクシステムにおけるタスク実行環境切替え方法
WO2008023426A1 (fr) * 2006-08-24 2008-02-28 Netcleus Systems Corporation Dispositif de traitement de tâche
GB2471138B (en) * 2009-06-19 2014-08-13 Advanced Risc Mach Ltd Handling integer and floating point registers during a context switch

Also Published As

Publication number Publication date
JP2009157684A (ja) 2009-07-16
US20090171652A1 (en) 2009-07-02
CN101470622B (zh) 2012-08-29
CN101470622A (zh) 2009-07-01
US8290764B2 (en) 2012-10-16

Similar Documents

Publication Publication Date Title
JP4873423B2 (ja) 仮想化プログラム、シミュレーション装置、仮想化方法
US9164755B2 (en) Personal and pooled virtual machine update
US9753754B2 (en) Enforcing deterministic execution of threads of guest operating systems running in a virtual machine hosted on a multiprocessor machine
JP5295228B2 (ja) 複数のプロセッサを備えるシステム、ならびにその動作方法
JP2014006935A (ja) 仮想マシンをフォークまたはマイグレートするための方法
JP2004110809A (ja) マルチプロセッサ・ホスト・システム上でのマルチプロセッサ・エミュレーションのための方法およびシステム
Lim et al. NEVE: Nested virtualization extensions for ARM
US7089557B2 (en) Data processing system and method for high-efficiency multitasking
JP2017037370A (ja) 計算機、プロセス制御方法およびプロセス制御プログラム
JP2010108086A (ja) Cpuエミュレーションシステム、cpuエミュレーション方法及びcpuエミュレーションプログラム
JP5030647B2 (ja) 複数処理ノードを含むコンピュータ・システムでプログラムをロードする方法、該プログラムを含むコンピュータ可読媒体、及び、並列コンピュータ・システム
JP2008108075A (ja) タスク切替え制御方法及びコンピュータシステム
CN112306669A (zh) 一种基于多核系统的任务处理方法及装置
CN114253713A (zh) 一种基于reactor的异步批处理方法及系统
CN115033337A (zh) 虚拟机内存迁移方法、装置、设备及存储介质
Fu et al. Run-time techniques for exploiting irregular task parallelism on distributed memory architectures
US20090217014A1 (en) Processor, memory device, processing device, and method for processing instruction
JP2014191468A (ja) プロセスの待ち行列を共有する複数のプロセッサを有する計算機、及び、プロセスディスパッチ処理方法
CN111788555B (zh) 数据处理装置和方法
KR101433644B1 (ko) Arm 기반 운영체제의 가상화를 위한 정책 제공 시스템 및 방법
JP6439887B1 (ja) 情報処理装置
Reber et al. Checkpoint/restore in user-space with open mpi
JP2022055002A (ja) 情報処理装置、情報処理方法および情報処理プログラム
JP2020086871A (ja) 情報処理装置、プログラム、オペレーティングシステム、実行方法及びプログラムの修正方法
JP3918096B2 (ja) 動的リンク方式、動的リンク制御方法およびプログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20100301

A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A711

Effective date: 20100420

RD03 Notification of appointment of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7423

Effective date: 20100420

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20100420

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20100524

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20110720

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110726

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110926

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20111025

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20111115

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20141202

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Ref document number: 4873423

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

S531 Written request for registration of change of domicile

Free format text: JAPANESE INTERMEDIATE CODE: R313531

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

S533 Written request for registration of change of name

Free format text: JAPANESE INTERMEDIATE CODE: R313533

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

LAPS Cancellation because of no payment of annual fees