本発明は、一つの物理計算機において、複数の仮想計算機の実行を制御する仮想計算機制御装置、仮想計算機制御方法及び仮想計算機制御プログラムに関し、特に、複数の仮想計算機を切り替える仮想計算機制御装置、仮想計算機制御方法及び仮想計算機制御プログラムに関するものである。
マイクロプロセッサの性能向上に伴い、ハードウェアを効率的に利用する技術として、1つの物理的計算機で複数の仮想計算機(ソフトウェアによる仮想的な計算機)を実行する仮想化技術が利用されている。なお、以下、この物理的計算機を、情報処理装置と記載する。
家電機器などの組み込み機器において、GUI(Graphical User Interface)やマルチメディア処理などの多機能性と、デバイス制御や同期通信などのリアルタイム性との両立が求められている。そのため、マルチメディア処理などの多機能性に適した仮想計算機と、リアルタイム性に適した仮想計算機とを、1つの情報処理装置上で切り替えながら実行することで、2つの処理の両立を実現している。
従来の仮想計算機を切り替える方法としては、リアルタイム性を重視したOS(オペレーティング・システム)を備えた仮想計算機を優先して実行し、このOSがアイドル状態の時に、現在動作中の仮想計算機を他の仮想計算機に切り替えて実行する方法があった。また、複数の仮想計算機に固定の優先度を割り当て、この優先度を用いて仮想計算機のスケジュールを行う方法があった。
リアルタイム性を重視したOSを備えた仮想計算機を常に優先させる方法では、他の仮想計算機に重要な処理が発生しても、即座にその重要な処理を実行することができなかった。また、固定の優先度を用いて仮想計算機のスケジュールを行う方法では、複数の仮想計算機の両方でリアルタイム性を重視する処理を実行することは困難であった。
この課題を解決する従来の方法として、実行する処理に基づいて、仮想計算機の優先度を変化させる技術がある(例えば、特許文献1参照)。つまり、従来技術では、仮想計算機の優先度を、その仮想計算機で実行するタスクの優先度に設定することになる。タスクの優先度とは、OSのタスクスケジューリングで使用される値である。ある仮想計算機が優先度の高いタスクを実行する場合、その仮想計算機の優先度も高くなるので、優先度の高い仮想計算機へ切り替わり、優先度の高いタスクが実行されることになる。
しかしながら、前記従来の構成では、OSがタスクスケジュールを行う度に、実行中の仮想計算機(OS)が中断し、複数の仮想計算機の切り替えを制御するOS切り替えプログラムが動作して次に実行する仮想計算機が決定される。つまり、従来技術では、中断した同じ仮想計算機に処理が戻る場合でも、仮想計算機の中断と復帰との処理が発生するという課題を有している。
本発明は、上記の問題を解決するためになされたもので、仮想計算機の切り替えに要するオーバーヘッドを削減することができる仮想計算機制御装置、仮想計算機制御方法及び仮想計算機制御プログラムを提供することを目的とするものである。
本発明の一局面に係る仮想計算機制御装置は、タスクの優先度に基づき実行するタスクのスケジューリングを行うオペレーションシステムをそれぞれ含む複数の仮想計算機と、前記複数の仮想計算機の切り替えを制御する仮想計算機制御部とを備え、前記複数の仮想計算機の各々は、現在動作中の仮想計算機を切り替え対象である他の仮想計算機に切り替える切り替え処理を実行するための切り替えタスクを実行するタスク実行部と、現在動作中の仮想計算機自身の実行可能なタスクの中から最も優先度の高いタスクの優先度を取得する優先度取得部と、前記切り替えタスクの優先度を、前記他の仮想計算機の前記優先度取得部によって取得された前記優先度に設定する優先度設定部とを含み、前記タスク実行部は、前記オペレーティングシステムのタスクスケジューリングにより前記切り替えタスクを実行した場合、前記仮想計算機制御部に対し、前記優先度取得部によって取得された前記優先度と、現在動作中の仮想計算機を前記他の仮想計算機に切り替える切り替え指示とを通知し、前記仮想計算機制御部は、前記タスク実行部によって通知される前記優先度と切り替え指示とを受け取り、現在動作中の仮想計算機を前記他の仮想計算機に切り替える。
この構成によれば、複数の仮想計算機は、タスクの優先度に基づき実行するタスクのスケジューリングを行うオペレーションシステムをそれぞれ含み、仮想計算機制御部は、複数の仮想計算機の切り替えを制御する。タスク実行部は、現在動作中の仮想計算機を切り替え対象である他の仮想計算機に切り替える切り替え処理を実行するための切り替えタスクを実行し、優先度取得部は、現在動作中の仮想計算機自身の実行可能なタスクの中から最も優先度の高いタスクの優先度を取得し、優先度設定部は、切り替えタスクの優先度を、他の仮想計算機の優先度取得部によって取得された優先度に設定する。タスク実行部は、オペレーティングシステムのタスクスケジューリングにより切り替えタスクを実行した場合、仮想計算機制御部に対し、優先度取得部によって取得された優先度と、現在動作中の仮想計算機を他の仮想計算機に切り替える切り替え指示とを通知する。仮想計算機制御部は、タスク実行部によって通知される優先度と切り替え指示とを受け取り、現在動作中の仮想計算機を他の仮想計算機に切り替える。
本発明によれば、切り替えタスクの優先度が、他の仮想計算機における最も優先度の高いタスクの優先度に設定され、仮想計算機が切り替える場合にのみ、切り替えタスクが実行されるので、仮想計算機の中断と復帰との処理回数が削減され、仮想計算機の切り替えに要するオーバーヘッドを削減することができる。
本発明の目的、特徴及び利点は、以下の詳細な説明と添付図面とによって、より明白となる。
本発明の実施の形態1における情報処理装置の構成を示すブロック図である。
本発明の実施の形態1におけるタスク管理テーブルの一例を示す図である。
本発明の実施の形態1における仮想計算機識別子テーブルの一例を示す図である。
本発明の実施の形態1における第1の仮想計算機による切り替え処理の一例を示すフローチャートである。
本発明の実施の形態1における仮想計算機制御部による切り替え処理の一例を示すフローチャートである。
本発明の実施の形態1における第2の仮想計算機による切り替え処理の一例を示す図である。
本発明の実施の形態2における情報処理装置の構成を示すブロック図である。
本発明の実施の形態2における割り込みテーブルの一例を示す図である。
本発明の実施の形態2における仮想計算機制御部による割り込み処理の一例を示すフローチャートである。
本発明の実施の形態2における優先度テーブルの一例を示す図である。
本発明の実施の形態3における実行コンテキスト記憶部の構成を示す図である。
本発明の実施の形態4における情報処理装置の構成を示すブロック図である。
以下添付図面を参照しながら、本発明の実施の形態について説明する。尚、以下の実施の形態は、本発明を具体化した一例であって、本発明の技術的範囲を限定する性格のものではない。
(実施の形態1)
図1は、本発明の実施の形態1における情報処理装置の構成を示すブロック図である。
図1に示す情報処理装置は、CPU(中央演算装置)1、割り込みコントローラ2、周辺デバイス3及びメモリ4を備えている。
CPU1は、処理能力が十分であれば任意のものが利用可能である。割り込みコントローラ2は、周辺デバイス3が出力する割り込み要求をCPU1に通知する。
周辺デバイス3は、各種の入出力装置であり、情報処理装置の使用目的に応じたものを利用する。例えば、周辺デバイス3は、キーデバイス、通信デバイス、表示デバイス、デコーダ、エンコーダ、DSP(Digital Signal Processor)又はDMA(Direct Memory Access)コントローラなどである。
メモリ4は、第1の仮想計算機10、第2の仮想計算機20、仮想計算機制御部30、仮想計算機優先度記憶部40及び実行コンテキスト記憶部50を備えている。メモリ4は、リードオンリーメモリ(ROM)、ランダムアクセスメモリ(RAM)又はフラッシュメモリなどの、任意のタイプを使用することができる。また、メモリ4は、単一のメモリ装置で構成されている必要はなく、同種の複数のメモリの組み合わせ又は異なる種類の複数のメモリの組み合わせであってもよい。さらに、メモリ4以外に、例えばハードディスクのような外部記憶装置を設け、情報処理装置の動作に問題のない範囲で、外部記憶装置にメモリ4の内容を移動させてもよい。
また、第1の仮想計算機10、第2の仮想計算機20、仮想計算機制御部30、仮想計算機優先度記憶部40及び実行コンテキスト記憶部50は、メモリ4上に存在する場合は仮想計算機制御プログラムとして存在しており、CPU1が当該仮想計算機制御プログラムを実行することによって、第1の仮想計算機10、第2の仮想計算機20、仮想計算機制御部30、仮想計算機優先度記憶部40及び実行コンテキスト記憶部50として機能する。
第1の仮想計算機10は、擬似タスク110を含む1つ以上のタスクを実行するタスク実行部100と、第1のOS120とを備えている。擬似タスク110を含む全てのタスクは、それぞれ優先度が設定されている。第1のOS120は、タスクの優先度に基づき実行するタスクのスケジューリングを行う。
タスク実行部100は、各タスクに予め設定された優先度に応じてタスクを順次実行する。また、タスク実行部100は、現在動作中の仮想計算機を切り替え対象である他の仮想計算機に切り替える切り替え処理を実行するための擬似タスク110を実行する。
擬似タスク110は、第2の仮想計算機20の優先度を反映したタスクであり、仮想計算機切り替え通知部111と、優先度設定要求部112とを備えている。
仮想計算機切り替え通知部111は、第1のOS120に、最優先タスク優先度取得要求を出力し、第1のOS120は、タスクの中から最も優先して実行する最優先タスクの優先度を取得する。次に、仮想計算機切り替え通知部111は、仮想計算機制御部30に仮想計算機切り替え通知を出力し、第1の仮想計算機10を中断して、仮想計算機制御部30に処理を移す。なお、仮想計算機切り替え通知は、取得した最優先タスクの優先度と、切り替え元の仮想計算機(ここでは、第1の仮想計算機10)の識別子と、切り替え先の仮想計算機(ここでは、第2の仮想計算機20)の識別子とを含んでいる。
これにより、第1のOS120のタスクスケジューリングによって、擬似タスク110の実行順となったタイミングで、第1の仮想計算機10から第2の仮想計算機20への切り替え処理が行われることになる。なお、最優先タスクとは、実行状態のタスクを除く、次にスケジューリングされる可能性があるタスクを対象とする。つまり、実行状態の擬似タスクは、最優先タスクにはならない。
優先度設定要求部112は、擬似タスク110(第1の仮想計算機10)が中断から復帰した際に、第1のOS120に、擬似タスク110の優先度を設定するための優先度設定要求を送信する。また、優先度設定要求部112は、擬似タスク110の優先度の設定が完了すると、第1のOS120から優先度設定完了通知を受け取り、擬似タスク110の処理を終了する。この後、第1のOS120のタスクスケジューリングにより、次に実行するタスクの処理が開始されることになる。終了時の擬似タスク110の優先度は、第2の仮想計算機20から第1の仮想計算機10への切り替えが発生したタイミングにおける、第2の仮想計算機20の最優先タスクの優先度が設定されている。
第1のOS120は、タスクスケジューラ121と、優先度取得部122と、優先度設定部123とを備えている。
タスクスケジューラ121は、第1のOS120の配下のタスクの実行順序のスケジューリングを行う。スケジューリング対象のタスクには、擬似タスク110が含まれている。また、タスクスケジューラ121は、タスクを管理するための、タスク管理テーブルを保持している。
図2は、本発明の実施の形態1におけるタスク管理テーブルの一例を示す図である。図2に示すタスク管理テーブルは、各タスクの管理情報として、タスクID、タスク状態及びタスク優先度を有している例である。タスクIDは、各タスクを識別可能な識別子であり、一意にタスクを決定できればよい。タスク状態は、現在のタスクの状態を表しており、“実行状態”と“実行可能状態”と“待ち状態”との3つの状態が存在する。“実行状態”は、タスクが実行中であることを示しており、複数のタスクが同時に“実行状態”となることはない。“実行可能状態”は、他のタスクの実行が終了した際に、タスクスケジューラ121が実行させることができることを示している。“待ち状態”とは、タスクが、セマフォ、イベント又は一定時間待ちなどの条件が満たされるまで自ら休止した状態である。
タスク優先度は、タスクの優先度を表している。なお、図2では、タスク優先度を数値で示しており、数値が小さいほど優先度としては高いとしている。なお、タスク優先度は、数値以外の情報で表現してもよい。また、タスク優先度は、OSのサービス、例えば、UNIX(登録商標)OSにおけるpsコマンドを利用してタスク構造体から取得され、タスク管理テーブルに格納される。
優先度取得部122は、擬似タスク110から、最優先タスク優先度取得要求を受け取り、前述したタスク管理テーブルを参照して、自身が属する第1の仮想計算機10の実行可能なタスクの中から最も優先度の高い最優先タスクの優先度を取得し、擬似タスク110に取得した優先度を返す。なお、最優先タスクは、タスク状態が“実行状態”のタスクを除いたタスクの中から選択される。そのため、擬似タスク110は、常に最優先タスクから除外される。
優先度設定部123は、擬似タスク110から優先度設定要求を受け取り、擬似タスク110の優先度を設定する。優先度設定部123は、擬似タスク110の優先度を、第2の仮想計算機20の優先度取得部222によって取得された優先度に設定する。具体的には、優先度設定部123は、仮想計算機優先度記憶部40に格納されている第2の仮想計算機20の最優先タスクの優先度を取得し、前述したタスク管理テーブルの擬似タスク110の優先度を、取得した優先度に更新する。また、優先度設定部123は、擬似タスク110の優先度の設定が完了すると、擬似タスク110に優先度設定完了通知を送信する。
仮想計算機切り替え通知部111は、オペレーティングシステムのタスクスケジューリングにより擬似タスク110を実行した場合、仮想計算機制御部30に対し、優先度取得部122によって取得された優先度と、現在動作中の第1の仮想計算機10を第2の仮想計算機20に切り替える切り替え指示とを通知する。
第2の仮想計算機20は、擬似タスク210を含む1つ以上のタスクを実行するタスク実行部200と、第2のOS220とを備えている。擬似タスク210を含む全てのタスクは、それぞれ優先度が設定されている。第2のOS220は、タスクの優先度に基づき実行するタスクのスケジューリングを行う。
タスク実行部200は、各タスクに予め設定された優先度に応じてタスクを順次実行する。また、タスク実行部200は、現在動作中の仮想計算機を切り替え対象である他の仮想計算機に切り替える切り替え処理を実行するための擬似タスク210を実行する。
擬似タスク210は、第1の仮想計算機10の優先度を反映したタスクであり、仮想計算機切り替え通知部211と、優先度設定要求部212とを備えている。仮想計算機切り替え通知部211は、前述した仮想計算機切り替え通知部111と同じ機能を有している。また、優先度設定要求部212は、前述した優先度設定要求部112と同じ機能を有している。
第2のOS220は、タスクスケジューラ221と、優先度取得部222と、優先度設定部223とを備えている。タスクスケジューラ221は、前述したタスクスケジューラ121と同じ機能を有している。また、優先度取得部222は、前述した優先度取得部122と同じ機能を有している。また、優先度設定部223は、前述した優先度設定部123と同じ機能を有している。
これにより、第2のOS220のタスクスケジューリングにより、擬似タスク210の実行順となったタイミングで、第2の仮想計算機20から第1の仮想計算機10への切り替え処理が行われることになる。また、終了時の擬似タスク210の優先度は、第1の仮想計算機10から第2の仮想計算機20への切り替えが発生したタイミングにおける、第1の仮想計算機10の最優先タスクの優先度が設定されている。
なお、擬似タスク110,210は、第1及び第2の仮想計算機10,20の起動時に生成される。また、生成時の擬似タスク110,210の優先度は、最も高い優先度に設定される。タスク実行部100は、第1及び第2の仮想計算機10,20の起動時に擬似タスク110,210を生成し、生成した擬似タスク110,210の優先度を最も高い優先度に設定する。これにより、仮想計算機内の擬似タスク110,210を他のタスクに比べて優先的に動作させることになり、切り替え先の仮想計算機の最優先タスクの優先度を、擬似タスクの優先度として設定することが可能になる。
また、優先度取得部122,222及び優先度設定部123,223は、第1及び第2のOS110,210の内部機能としてではなく、モジュール形式のデバイスドライバ又はライブラリとして、後から追加することができる。
また、本実施の形態1では、仮想計算機切り替え通知は、タスクの優先度と、切り替え元の仮想計算機の識別子と、切り替え先の仮想計算機の識別子とを含むとしているが、2つの仮想計算機の切り替えを制御する場合は、これに限らない。2つの仮想計算機の切り替えを制御する場合、仮想計算機切り替え通知は、切り替え元の仮想計算機の識別子又は切り替え先の仮想計算機の識別子のいずれか一方のみを含めばよい。
仮想計算機制御部30は、仮想計算機切り替え部301と、仮想計算機優先度設定部302とを備え、複数の仮想計算機の切り替えを制御する。仮想計算機制御部30は、タスク実行部100によって通知される優先度と切り替え指示とを受け取り、現在動作中の第1の仮想計算機10を第2の仮想計算機20に切り替える。また、仮想計算機制御部30は、タスク実行部200によって通知される優先度と切り替え指示とを受け取り、現在動作中の第2の仮想計算機20を第1の仮想計算機10に切り替える。
仮想計算機切り替え部301は、第1及び第2の仮想計算機10,20から仮想計算機切り替え通知を受け取り、仮想計算機の実行コンテキストの退避と復帰とを行うことで、仮想計算機を切り替える。仮想計算機切り替え部301は、仮想計算機切り替え通知を用いて、切り替え元の仮想計算機と、切り替え先の仮想計算機とを特定することができる。仮想計算機切り替え部301は、切り替え元の仮想計算機の実行コンテキストをCPUレジスタから実行コンテキスト記憶部50に退避させ、切り替え先の仮想計算機の実行コンテキストを実行コンテキスト記憶部50からCPUレジスタに復帰させる。さらに、仮想計算機切り替え部301は、仮想計算機優先度設定部302に対し、切り替え元の仮想計算機の優先度の設定を指示する。なお、仮想計算機切り替え部301は、仮想計算機の識別子と、識別子に対応する対象仮想計算機とを組にした、仮想計算機識別子テーブルを保持している。
図3は、本発明の実施の形態1における仮想計算機識別子テーブルの一例を示す図である。図3に示す仮想計算機識別子テーブルには、識別子と、仮想計算機とが対応付けて記憶されている。図3に示すように、“A”という識別子には、第1の仮想計算機10が対応付けられており、“B”という識別子には、第2の仮想計算機20が対応付けられている。
仮想計算機優先度設定部302は、仮想計算機切り替え部301からの指示を受け取り、仮想計算機切り替え通知に含まれる優先度を、切り替え元の仮想計算機の優先度として、仮想計算機優先度記憶部40に格納する。
仮想計算機優先度記憶部40は、仮想計算機の切り替えが発生したタイミングでの、切り替え元の仮想計算機の優先度を記憶する。仮想計算機優先度記憶部40に記憶される仮想計算機の優先度は、切り替え元の仮想計算機のタスクの中の、最も優先して実行される最優先タスクの優先度である。なお、最優先タスクとは、実行状態のタスクを除く、次にスケジューリングされる可能性があるタスクを対象とする。つまり、擬似タスクは、最優先タスクにはならない。
実行コンテキスト記憶部50は、切り替え元の仮想計算機の実行コンテキストを記憶する。仮想計算機切り替え部301は、切り替え元の仮想計算機の実行コンテキストをCPUレジスタから実行コンテキスト記憶部50に記憶することにより、切り替え元の仮想計算機の実行コンテキストを退避させる。また、仮想計算機切り替え部301は、切り替え先の仮想計算機の実行コンテキストを実行コンテキスト記憶部50からCPUレジスタに読み出すことにより、切り替え先の仮想計算機の実行コンテキストを復帰させる。なお、実行コンテキスト記憶部50は、実行コンテキストを仮想計算機毎に記憶する。
仮想計算機切り替え部301は、タスク実行部100によって通知される優先度と切り替え指示とを受け取った場合、切り替え前の第1の仮想計算機10に対応する実行コンテキストを実行コンテキスト記憶部50に退避させ、タスク実行部100によって通知される優先度を仮想計算機優先度記憶部400に記憶し、切り替え後の第2の仮想計算機20に対応する実行コンテキストを実行コンテキスト記憶部50から復帰させる。
切り替え後の第2の仮想計算機20に含まれるタスク実行部200は、中断された擬似タスク210を再度実行する。切り替え後の第2の仮想計算機20に含まれる優先度設定部223は、仮想計算機優先度記憶部400に記憶されている切り替え前の第1の仮想計算機11の優先度を取得し、取得した優先度を擬似タスク210の優先度として設定する。
以上の構成により、本実施の形態1における情報処理装置は、実行中の仮想計算機より、他の仮想計算機の優先度が高くなったタイミングで、仮想計算機制御部30が動作し、仮想計算機の切り替え処理が行なわれることになる。つまり、OSがタスクスケジュールを行うたびに、実行中の仮想計算機を中断して切り替えを行うか否かを判断する必要がない。実行中の仮想計算機を中断した場合は、常に他の仮想計算機への切り替えが発生することとなり、中断する前に動作していた同じ仮想計算機に即時に復帰する処理を減らすことができる。これにより、不要な実行コンテキストの中断と復帰とによるオーバーヘッドを削減することが可能となる。
また、実行コンテキストの退避と復帰だけでなく、より安全性を高めるためにメモリ空間の切り替えを行った場合、仮想計算機の切り替えによるオーバーヘッドは更に大きくなるが、本実施の形態1では、このメモリ空間の切り替えによるオーバーヘッドも減らすことができる。
また、本実施の形態1は、情報処理装置が、リアルタイム性を重視した仮想計算機と、リアルタイム性を重視しない仮想計算機とを実装している場合、特に有効である。例えば、リアルタイム性が要求される処理は、第1の仮想計算機10のタスクとして実装し、第1のOS120にリアルタイム性に優れたRTOS(リアルタイムOS)を用いる。同時に、リアルタイム性が要求されないユーザインターフェイスに関する処理は、第2の仮想計算機20のタスクとして実装し、第2のOS220にグラフィック処理機能を豊富に有するOSを用いる。
従来の方法では、リアルタイム性を重視した仮想計算機を中断して切り替えを行うか否かを判断した結果、再度リアルタイム性を重視した仮想計算機に処理が戻されるケースが多く、余分な実行コンテキストの退避と復帰とが発生することになる。しかし、本実施の形態1の情報処理装置は、不要な実行コンテキストの中断と復帰とによるオーバーヘッドを削減し、リアルタイム性能と、豊富なグラフィック処理機能を用いた優れたユーザインターフェイスとを同時に実現することができる。
なお、第1のOS120と第2のOS220とは、異なる性能のOSにする必要は必ずしもなく、第1のOS120と第2のOS220とに同じ性能のOSを用いてもよい。
なお、例えば第1の仮想計算機10から第2の仮想計算機20に切り替える場合、仮想計算機制御部30は、動作していた第1の仮想計算機10のIP(インストラクションポインタ)、スタックポインタ、汎用のレジスタ、ベースポインタ又はフラグなどの実行コンテキストを、第1の仮想計算機10用に保存することで、実行コンテキストをCPUレジスタから退避させる。また、仮想計算機制御部30は、第2の仮想計算機20用に保存していた実行コンテキストをCPUレジスタに復帰させる。これにより、仮想計算機制御部30は、第1及び第2の仮想計算機10,20の切り替えを実現している。
本実施の形態1において、情報処理装置が仮想計算機制御装置の一例に相当し、第1の仮想計算機10及び第2の仮想計算機20が複数の仮想計算機の一例に相当し、仮想計算機制御部30が仮想計算機制御部の一例に相当し、タスク実行部100,200がタスク実行部の一例に相当し、優先度取得部122が優先度取得部の一例に相当し、優先度設定部123が優先度設定部の一例に相当し、実行コンテキスト記憶部50が実行コンテキスト記憶部の一例に相当し、仮想計算機優先度記憶部40が優先度記憶部の一例に相当し、擬似タスク110,210が切り替えタスクの一例に相当する。
図4〜図6は、本発明の実施の形態1における情報処理装置の処理の流れを示すフローチャートである。ここでは、図1における、第1の仮想計算機10から第2の仮想計算機20に切り替える切り替え動作の一例を示している。また、図4は、本発明の実施の形態1における第1の仮想計算機10による切り替え処理の一例を示すフローチャートであり、図5は、本発明の実施の形態1における仮想計算機制御部30による切り替え処理の一例を示すフローチャートであり、図6は、本発明の実施の形態1における第2の仮想計算機20による切り替え処理の一例を示すフローチャートである。
まず、図4において、CPU1は、第1の仮想計算機10を実行する。第1の仮想計算機10の実行中において、第1のOS120のタスクスケジューラ121は、タスク管理テーブルにおけるタスク優先度に基づいてタスクスケジューリングする。そして、タスクスケジューラ121は、次に実行するタスクとして擬似タスク110を選択し、タスク管理テーブルにおける擬似タスクのタスク状態を実行状態にする。タスクスケジューラ121は、擬似タスク110の実行をタスク実行部100に指示する。タスク実行部100は、タスクスケジューラ121からの指示に基づき、擬似タスク110を実行する。これにより、擬似タスク110の処理が開始される(ステップS1)。
次に、擬似タスク110の仮想計算機切り替え通知部111は、第1のOS120に最優先タスク優先度取得要求を送信する(ステップS2)。
次に、第1のOS120の優先度取得部122は、擬似タスク110の仮想計算機切り替え通知部111によって送信された最優先タスク優先度取得要求を受信する(ステップS3)。次に、優先度取得部122は、タスク管理テーブルを参照して、最も優先度の高いタスクの優先度、すなわちタスク実行部100が擬似タスク110の次に実行させるタスクの優先度(最優先タスク優先度)を取得する(ステップS4)。
次に、優先度取得部122は、取得した最優先タスク優先度を擬似タスク110に通知する(ステップS5)。例えば、タスクスケジューラ121が図2に示すタスク管理テーブルを有する場合、優先度取得部122は、タスク状態が実行可能状態のタスクの中で、最も優先度の高い第3のタスクの優先度を、擬似タスク110に送信する。
次に、擬似タスク110の仮想計算機切り替え通知部111は、第1のOS120の優先度取得部122によって送信された最優先タスク優先度を受信する(ステップS6)。次に、仮想計算機切り替え通知部111は、受け取った最優先タスク優先度を用いて、仮想計算機切り替え通知を生成し、生成した仮想計算機切り替え通知を仮想計算機制御部30に送信する(ステップS7)。これで、擬似タスク110から仮想計算機制御部30に処理が移ることになる。例えば、仮想計算機切り替え通知部111は、ソフトウェア割り込みを使用する。CPU1は、割込みコントローラ2から切り替え割込みの発生通知を受けてソフトウェア割込みを検知した場合、例外ベクターにジャンプ(移行)する。このジャンプ先である例外ベクターが、仮想計算機制御部30に設定される。これにより、仮想計算機切り替え通知発生時に、仮想計算機制御部30を動作させることが可能となる。
次に、図5において、仮想計算機制御部30の仮想計算機切り替え部301は、仮想計算機切り替え通知部111によって送信された仮想計算機切り替え通知を受け取る(ステップS11)。次に、仮想計算機切り替え部301は、切り替え元の第1の仮想計算機10の実行コンテキストをCPUレジスタから実行コンテキスト記憶部50に退避させる(ステップS12)。
次に、仮想計算機切り替え部301は、仮想計算機優先度設定部302に対し、切り替え元の第1の仮想計算機10の優先度の設定を指示する(ステップS13)。
次に、仮想計算機優先度設定部302は、仮想計算機切り替え部301からの指示を受け取り、仮想計算機切り替え通知に含まれる優先度(最優先タスク優先度)を、切り替え元の仮想計算機(第1の仮想計算機10)の優先度として、仮想計算機優先度記憶部40に格納する(ステップS14)。なお、設定する優先度は、仮想計算機切り替え通知に含まれるとしたが、本発明は特にこれに限定されず、ソフトウェア割り込みの引数、又は、共有メモリ上の予め決められた領域のデータを優先度として取得してもよい。
次に、仮想計算機切り替え部301は、切り替え先の第2の仮想計算機20の実行コンテキストを実行コンテキスト記憶部50からCPUレジスタに復帰させる(ステップS15)。
仮想計算機制御部30によって、第2の仮想計算機20の実行コンテキストが復帰されることにより、中断していた第2の仮想計算機20が復帰する。第2の仮想計算機20は、擬似タスク210の処理途中で中断していたため、擬似タスク210の中断箇所から処理を再開することになる。
次に、図6において、擬似タスク210の優先度設定要求部212は、第2のOS220に優先度設定要求を送信する(ステップS21)。
次に、第2のOS220の優先度設定部223は、擬似タスク210の優先度設定要求部212によって送信された優先度設定要求を受け取る(ステップS22)。優先度設定部223は、仮想計算機優先度記憶部40に格納されている第1の仮想計算機10の最優先タスク優先度を取得する(ステップS23)。次に、優先度設定部223は、タスク管理テーブルの擬似タスク210のタスク優先度を、取得した最優先タスク優先度に更新(設定)する(ステップS24)。次に、優先度設定部223は、擬似タスク210に優先度設定完了通知を送信する(ステップS25)。
次に、擬似タスク210の優先度設定要求部212は、第2のOS220の優先度設定部223によって送信された優先度設定完了通知を受け取る(ステップS26)。次に、優先度設定要求部212は、擬似タスク210の実行を終了する(ステップS27)。これにより、第2のOS220のタスクスケジューラ221は、第2の仮想計算機20におけるタスクスケジューリングを行い、実行が終了した擬似タスク210の次に実行するタスクを決定する。
以上により、本実施の形態1における情報処理装置は、切り替え対象である他の仮想計算機を擬似的に表す擬似タスクを生成し、この擬似タスクの優先度を、切り替え対象である他の仮想計算機の最も優先度の高いタスクの優先度に設定する。OSのタスクスケジューラは、実行中の仮想計算機より他の仮想計算機の優先度が高くなったタイミングで、擬似タスクを実行状態にし、タスク実行部は、擬似タスクを実行する。これにより、仮想計算機制御部30が動作して、切り替え処理が行なわれる。つまり、OSがタスクスケジュールを行うたびに、実行中の仮想計算機を中断して切り替えを行うか否かを判断する必要がない。実行中の仮想計算機を中断した場合は、常に他の仮想計算機への切り替えが発生することとなり、中断する前に動作していた同じ仮想計算機に即時に復帰する処理を減らすことができる。つまり、不要な実行コンテキストの中断と復帰とによるオーバーヘッドを削減することが可能となる。
本実施の形態1では、第1の仮想計算機10から第2の仮想計算機20に切り替える際に、第1の仮想計算機10における最優先タスク優先度を第2の仮想計算機20の擬似タスクの優先度に設定しているが、第2の仮想計算機20の擬似タスクの優先度を途中で変更してもよい。
例えば、第1の仮想計算機10が有する第1のOS120をRTOSとし、第2の仮想計算機20が有する第2のOS220をLinuxOSとした場合、RTOSによってデータをダウンロードした後、LinuxOSによって当該データをエンコード及び再生処理させる。このように、第1の仮想計算機10で処理したデータを、当該データの処理に適した第2の仮想計算機20で処理する場合、第1の仮想計算機10で処理を行った後、第1の仮想計算機10を第2の仮想計算機20に切り替える必要がある。
この場合、図5のステップS13において、仮想計算機優先度設定部302に対し、切り替え元の第1の仮想計算機10の優先度の設定を指示する場合に、仮想計算機切り替え部301は、仮想計算機優先度設定部302に通知する優先度を、第1の仮想計算機10のタスク管理テーブルに格納されている擬似タスクの優先度よりも低くなるように変更する。そして、仮想計算機優先度設定部302は、仮想計算機切り替え部301からの指示を受け取り、変更した優先度を、切り替え元の仮想計算機(第1の仮想計算機10)の優先度として、仮想計算機優先度記憶部40に格納する。
変更した優先度が、第2の仮想計算機20の擬似タスクの優先度として設定される。この変更した優先度は、第1の仮想計算機10の擬似タスクの優先度よりも低いので、切り替え先である第2の仮想計算機20を優先的に動作させることができる。
(実施の形態2)
図7は、本発明の実施の形態2における情報処理装置の構成を示すブロック図である。なお、図7に示す実施の形態2に係る情報処理装置において、図1に示す実施の形態1に係る情報処理装置と同じ構成については同じ符号を付し、詳細な説明を省略する。
図7に示す情報処理装置は、実施の形態1と同様に、CPU(中央演算装置)1、割り込みコントローラ2、周辺デバイス3及びメモリ4を備えている。
メモリ4は、第1の仮想計算機11、第2の仮想計算機21、仮想計算機制御部300、仮想計算機優先度記憶部400及び実行コンテキスト記憶部50を備えている。
第1の仮想計算機11は、擬似タスク110を含む1つ以上のタスクを実行するタスク実行部100と、第1のOS150とを備えている。擬似タスク110を含む全てのタスクは、それぞれ優先度が設定されている。第1のOS150は、タスクの優先度に基づき実行するタスクのスケジューリングを行う。また、擬似タスク110は、第2の仮想計算機21の優先度を反映したタスクであり、仮想計算機切り替え通知部111と、優先度設定要求部112とを備えている。この擬似タスク110は、実施の形態1で説明した構成と同じである。
第1のOS150は、タスクスケジューラ121と、優先度取得部122と、優先度設定部123と、割り込み処理部130とを備えている。割り込み処理部130以外は、実施の形態1で説明した構成と同じである。ここでは、異なる構成要素である割り込み処理部130についてのみ、詳細を説明する。
割り込み処理部130は、1つ以上の割り込みハンドラ140を備えている。割り込みハンドラ140は、割り込み後に実行される処理を表しており、それぞれ優先度が設定されている。また、割り込みが発生すると、第1のOS150の割り込み処理部130は、割り込みコントローラ2が通知する割り込み通知を受け取り、割込みの要因に応じた割り込みハンドラ140を実行する。
なお、実施の形態2におけるタスクスケジューラ121は、タスク及び割り込みハンドラを管理するためのタスク管理テーブルを記憶している。タスク管理テーブルは、各タスクの管理情報と、各割り込みハンドラの管理情報とを有している。具体的に、タスク管理テーブルは、タスクID、タスク状態及びタスク優先度に加えて、割り込みハンドラを識別するための割り込みハンドラID、割り込みハンドラの状態を表す割り込みハンドラ状態及び割り込みハンドラの優先度を表す割り込みハンドラ優先度をさらに有している。
第2の仮想計算機21は、擬似タスク210を含む1つ以上のタスクを実行するタスク実行部200と、第2のOS250とを備えている。擬似タスク210を含む全てのタスクは、それぞれ優先度が設定されている。第2のOS250は、タスクの優先度に基づき実行するタスクのスケジューリングを行う。また、擬似タスク210は、第1の仮想計算機11の優先度を反映したタスクであり、仮想計算機切り替え通知部211と、優先度設定要求部212とを備えている。この擬似タスク210は、実施の形態1で説明した構成と同じである。
第2のOS250は、タスクスケジューラ221と、優先度取得部222と、優先度設定部223と、割り込み処理部230とを備えている。割り込み処理部230以外は、実施の形態1で説明した構成と同じである。また、割り込み処理部230は、前述した割り込み処理部130と同じ機能を有している。
仮想計算機制御部300は、仮想計算機切り替え部301と、仮想計算機優先度設定部302と、割り込み受取部303と、割り込み優先度格納判断部304とを備えている。仮想計算機制御部300は、タスクスケジューリングによる仮想計算機の切り替えに加えて、割り込み発生による仮想計算機の切り替えを制御する。
割り込み受取部303は、複数の仮想計算機への割り込みを通知するための割り込み通知を受け取り、割り込み通知に含まれる割り込み要因を用いて、複数の仮想計算機の中から割り込み対象の仮想計算機を判断する。割り込み受取部303は、割り込みコントローラ2からCPU1を介して割り込みの発生を通知する割り込み通知を受け取る。割り込み受取部303は、受け取った割り込み通知に含まれる割り込み要因から、割り込み対象の仮想計算機(第1の仮想計算機11又は第2の仮想計算機21)を判断し、割り込み対象の仮想計算機(第1の仮想計算機11又は第2の仮想計算機21)への割り込み通知設定を行う。なお、割り込み受取部303は、割り込み要因と、割り込み対象の仮想計算機とを組にした割り込みテーブルを保持している。割り込み受取部303は、この割り込みテーブルを参照して割り込み対象の仮想計算機を判断する。
図8は、本発明の実施の形態2における割り込みテーブルの一例を示す図である。図8に示す割り込みテーブルでは、“A”、“B”及び“C”という割り込み要因には、割り込み対象の仮想計算機として第1の仮想計算機11が対応付けられており、“D”という割り込み要因には、割り込み対象の仮想計算機として第2の仮想計算機21が対応付けられている。なお、図8に示すように本実施の形態2では、割り込み要因と割り込み対象の仮想計算機とをテーブル形式で対応付けて記憶しているが、本発明は特にこれに限定されず、割り込み要因と割り込み対象の仮想計算機とは、関数又はリンク形式など、割り込み対象の仮想計算機を仮想計算機制御部が一意に決定可能なデータ形式で記憶すればよい。
割り込み優先度格納判断部304は、割り込み要因に対応付けられている優先度を、割り込み対象の仮想計算機に対する優先度として設定するか否かを判断する。割り込み優先度格納判断部304は、割り込みが発生した時点で、動作中の仮想計算機(第1の仮想計算機11又は第2の仮想計算機21)と、割り込み対象の仮想計算機(第1の仮想計算機11又は第2の仮想計算機21)とが一致しているか否かを判断する。現在動作中の仮想計算機と割り込み対象の仮想計算機とが一致していない場合、割り込み優先度格納判断部304は、仮想計算機優先度設定部302に対し、発生した割り込みに対応する優先度を仮想計算機優先度記憶部400へ格納するよう指示する。
また、割込み優先度格納判断部304は、割り込み受取部303によって判断された割り込み対象の仮想計算機が、割り込み前に動作していた仮想計算機と同じであるか否かを判断する。割り込み対象の仮想計算機が、割り込み前に動作していた仮想計算機と同じではないと判断された場合、仮想計算機優先度設定部302は、割り込み要因に対応付けられている優先度を、割り込み対象の仮想計算機に対する優先度として設定する。
仮想計算機優先度記憶部400は、仮想計算機の切り替えが発生したタイミングにおいて記憶された切り替え元の仮想計算機の優先度に加えて、割り込みが発生したタイミングにおいて発生した割り込みの優先度を記憶する。仮想計算機の優先度は、その仮想計算機のタスクの中の、最も優先して実行する最優先タスクの優先度である。なお、最優先タスクとは、実行状態のタスクを除く、次にスケジューリングされる可能性があるタスクを対象とする。つまり、擬似タスクは、最優先タスクにはならない。
以上の構成により、本実施の形態2における情報処理装置は、実行中の仮想計算機より、他の仮想計算機の優先度が高くなったタイミングで、仮想計算機制御部30が動作し、仮想計算機の切り替え処理が行なわれることになる。また、割り込み発生時に、仮想計算機制御部30が動作し、実行中でない他の仮想計算機向けの割り込みである場合に、割り込みの優先度を仮想計算機優先度として仮想計算機優先度記憶部400に格納する。これにより、割り込みとタスクの優先度に従った仮想計算機の切り替えを実現することが可能となる。つまり、OSがタスクスケジュールを行うたびに、実行中の仮想計算機を中断して切り替え処理を行うか否かを判断する必要がない。実行中の仮想計算機を中断した場合は、常に他の仮想計算機への切り替えが発生することとなり、中断する前に動作していた同じ仮想計算機に即時に復帰する処理を減らすことができる。これにより、不要な実行コンテキストの中断と復帰とによるオーバーヘッドを削減することが可能となる。
本実施の形態2において、情報処理装置が仮想計算機制御装置の一例に相当し、第1の仮想計算機11及び第2の仮想計算機21が複数の仮想計算機の一例に相当し、仮想計算機制御部300が仮想計算機制御部の一例に相当し、仮想計算機優先度設定部302が仮想計算機優先度設定部の一例に相当し、割り込み受取部303が割り込み受取部の一例に相当し、割込み優先度格納判断部304が割込み優先度格納判断部の一例に相当し、仮想計算機優先度記憶部400が優先度記憶部の一例に相当する。
図9は、本発明の実施の形態2における仮想計算機制御部による割り込み処理の一例を示すフローチャートである。図9では、割り込みが発生した場合の、仮想計算機制御部300の動作の一例を示している。
周辺デバイス3による割り込みが発生すると、割り込みコントローラ2は、CPU1に対して割り込みの発生を通知する割り込み通知を出力する。これにより、割り込み処理が開始される。例えば、CPU1は、割込みコントローラ2から割り込みの発生通知を受けて、割込みを検知した場合、割り込みベクターにジャンプ(移行)する。このジャンプ先である割り込みベクターが、仮想計算機制御部300に設定される。これにより、割り込み発生時に、仮想計算機制御部300を動作させることが可能となる。
まず、仮想計算機制御部300の割り込み受取部303は、割り込みコントローラ2から割り込み通知を受け取る(ステップS31)。割り込み通知を受け取った場合、割り込み受取部303は、仮想計算機切り替え部301に実行コンテキストの退避を指示する。
次に、仮想計算機切り替え部301は、動作中の仮想計算機の実行コンテキストをCPUレジスタから実行コンテキスト記憶部50に退避させ、割り込み受取部303に実行コンテキストの退避の完了を通知する(ステップS32)。
次に、割り込み受取部303は、受け取った割り込み通知に含まれている割込み要因を用いて、割り込み対象の仮想計算機(第1の仮想計算機11又は第2の仮想計算機21)を判断し、割り込み対象の仮想計算機への割込み通知設定を行い、割り込み優先度格納判断部304に、割り込み対象の仮想計算機の識別子を通知する(ステップS33)。
次に、割り込み優先度格納判断部304は、割り込み受取部303から通知された割り込み対象の仮想計算機の識別子を用いて、割り込み対象の仮想計算機が、割り込み発生前に動作していた仮想計算機と同じであるか否かを判断する(ステップS34)。
割り込み対象の仮想計算機と、割り込み発生前に動作していた仮想計算機とが異なると判断された場合(ステップS34でNO)、割り込み優先度格納判断部304は、仮想計算機優先度設定部302に対し、発生した割り込みに対応する優先度を仮想計算機優先度記憶部400に格納するよう指示する(ステップS35)。次に、仮想計算機優先度設定部302は、割り込み優先度格納判断部304からの指示を受け取り、発生した割り込みに対応する優先度を、仮想計算機優先度記憶部400に格納する(ステップS36)。
なお、割り込み優先度格納判断部304は、各割り込みハンドラに対する優先度を優先度テーブルとして仮想計算機毎に保持している。割り込み優先度格納判断部304は、優先度テーブルを参照し、設定する優先度の値を仮想計算機優先度設定部302に指示する。
図10は、本発明の実施の形態2における優先度テーブルの一例を示す図である。割り込み優先度格納判断部304は、第1の仮想計算機用優先度テーブルT1と第2の仮想計算機用優先度テーブルT2とを有している。第1の仮想計算機用優先度テーブルT1は、第1の仮想計算機11の割り込み処理部130が実行する第1〜第3の割り込みハンドラと、第1〜第3の割り込みハンドラに予め設定されている優先度とを対応付けている。第2の仮想計算機用優先度テーブルT2は、第2の仮想計算機21の割り込み処理部230が実行する第4〜第6の割り込みハンドラと、第4〜第6の割り込みハンドラに予め設定されている優先度とを対応付けている。
割り込み対象の仮想計算機と、割り込み発生前に動作していた仮想計算機とが同じであると判断された場合(ステップS34でYES)、又は割り込み対象の仮想計算機と、割り込み発生前に動作していた仮想計算機とが異なると判断された後、割り込みに対応する優先度が仮想計算機優先度記憶部400に格納された場合、割り込み受取部303は、仮想計算機切り替え部301に対し、ステップS32で退避した実行コンテキストの復帰を指示する。仮想計算機切り替え部301は、実行を中断した仮想計算機の実行コンテキストを実行コンテキスト記憶部50からCPUレジスタに復帰させ、割り込み処理を完了する(ステップS37)。
なお、ステップS36において、仮想計算機優先度設定部302は、発生した割り込みに対応する優先度と、既に仮想計算機優先度記憶部400に記憶されている最優先タスクの優先度とを比較し、発生した割り込みに対応する優先度が既に記憶されている最優先タスクの優先度よりも高い場合のみ、仮想計算機優先度記憶部400を更新してもよい。
すなわち、仮想計算機優先度設定部302は、割り込み要因に対応付けられている優先度と、仮想計算機優先度記憶部400に記憶されている優先度とを比較し、割り込み要因に対応付けられている優先度が仮想計算機優先度記憶部400に記憶されている優先度よりも高い場合、割り込み要因に対応付けられている優先度を、割り込み対象の仮想計算機に対する優先度として設定する。
また、ステップS36において、仮想計算機優先度設定部302は、発生した割り込みに対応する優先度と、所定の閾値とを比較し、発生した割り込みに対応する優先度が所定の閾値よりも高い場合のみ、仮想計算機優先度記憶部400を更新してもよい。
続いて、本実施の形態2における割り込み処理後の動作について説明する。なお、第1の仮想計算機11の動作中に割り込み処理が発生した場合について説明する。
割り込み対象の仮想計算機が第1の仮想計算機11である場合、ステップS37において実行コンテキストが復帰された後、割り込み処理部130は、割り込みに対応した割り込みハンドラを実行する。そして、割り込みハンドラの実行が終了すると、タスクスケジューラ121は、実行すべき第1の仮想計算機11のタスクを優先度に応じて決定する。
一方、割り込み対象の仮想計算機が第2の仮想計算機21である場合、ステップS37において実行コンテキストが復帰された後、タスク実行部100は、第1の仮想計算機11のタスクを優先度に応じて順次実行する。そして、擬似タスク110を実行するタイミングで、図4〜図6に示す切り替え処理が開始される。切り替え処理では、図4〜図6に示すステップS1〜S22の処理が実行される。なお、ステップS14において、仮想計算機優先度記憶部400は、既に格納されている割り込みに対応する優先度とともに、仮想計算機切り替え通知に含まれる優先度を格納する。
ステップS23において、優先度設定部223は、仮想計算機優先度記憶部40に格納されている第1の仮想計算機10の最優先タスク優先度と、割り込みに対応する優先度とを取得する。次に、ステップS24において、優先度設定部223は、タスク管理テーブルの擬似タスク210のタスク優先度を、取得した最優先タスク優先度に更新するとともに、タスク管理テーブルの割り込みハンドラのタスク優先度を、取得した割り込みに対応する優先度に更新する。その後、ステップS25〜S27の処理が実行され、擬似タスク210の実行が終了される。
擬似タスク210の実行が終了すると、タスクスケジューラ221は、実行すべき第2の仮想計算機21のタスクを優先度に応じて決定する。そして、タスク管理テーブルに設定されている割り込みハンドラの実行タイミングで、割り込み処理部230は、割り込みに対応した割り込みハンドラを実行する。そして、割り込みハンドラの実行が終了すると、タスクスケジューラ221は、実行すべき第2の仮想計算機21のタスクを優先度に応じて決定する。
以上により、本実施の形態2における情報処理装置は、切り替え対象である他の仮想計算機を擬似的に表す擬似タスクを生成し、この擬似タスクの優先度を、切り替え対象である他の仮想計算機の最も優先度の高いタスクの優先度に設定する。OSのタスクスケジューラは、実行中の仮想計算機より他の仮想計算機の優先度が高くなったタイミングで、擬似タスクを実行状態にし、タスク実行部は、擬似タスクを実行する。これにより、仮想計算機制御部300が動作して、切り替え処理が行なわれる。つまり、OSがタスクスケジュールを行うたびに、実行中の仮想計算機を中断して切り替え処理を行うか否かを判断する必要がない。実行中の仮想計算機を中断した場合は、常に他の仮想計算機への切り替えが発生することとなり、中断する前に動作していた同じ仮想計算機に即時に復帰する処理を減らすことができる。つまり、不要な実行コンテキストの中断と復帰とによるオーバーヘッドを削減することが可能となる。
さらに、割り込み発生時において、実行中の仮想計算機への割り込みである場合は、実行中の仮想計算機のOSに割り込み通知が行われ、実行中でない他の仮想計算機への割り込みである場合は、割り込みの優先度が仮想計算機の優先度に設定され、割り込み前の仮想計算機が動作される。これにより、割り込みの優先度とタスクの優先度とに従った仮想計算機の切り替えを実現することができる。つまり、OSがタスクスケジュールを行うたびに、実行中の仮想計算機を中断して切り替えを行うか否かを判断する必要がない。実行中の仮想計算機を中断した場合は、常に他の仮想計算機への切り替えが発生することとなり、中断する前に動作していた同じ仮想計算機に即時に復帰する処理を減らすことができる。これにより、不要な実行コンテキストの中断と復帰とによるオーバーヘッドを削減することが可能となる。
なお、実施の形態1及び2では、仮想計算機が2つの場合について説明したが、本発明は特にこれに限定されず、3つ以上の仮想計算機を設けてもよい。
(実施の形態3)
次に、本発明の実施の形態3に係る情報処理装置について説明する。本実施の形態3では、ウィルス障害又はOS障害の発生時において、仮想計算機が所定の優先度を仮想計算機制御部に通知することにより、正常に動作していた状態に復元する。
なお、実施の形態3に係る情報処理装置は、図1に示す実施の形態1に係る情報処理装置とほぼ同じ構成であるので、異なる構成についてのみ説明する。実施の形態3と実施の形態1とでは、実行コンテキスト記憶部50の構成が異なっている。
図11は、本発明の実施の形態3における実行コンテキスト記憶部の構成を示す図である。
実行コンテキスト記憶部50は、仮想計算機制御部30によって退避された実行コンテキストを仮想計算機毎に記憶する。実行コンテキスト記憶部50は、仮想計算機の数に応じて、第1の実行コンテキスト記憶部50−1〜第Nの実行コンテキスト記憶部50−Nを備える。なお、図11では、情報処理装置が3つ以上の仮想計算機を有する場合について示しているが、本発明は特にこれに限定されず、情報処理装置は図1に示すように2つの仮想計算機を有していてもよい。
第1の実行コンテキスト記憶部50−1は、第1の仮想計算機の実行コンテキストを記憶し、第2の実行コンテキスト記憶部50−2は、第2の仮想計算機の実行コンテキストを記憶し、第Nの実行コンテキスト記憶部50−Nは、第Nの仮想計算機の実行コンテキストを記憶する。
実施の形態1では、実行コンテキスト記憶部50は、仮想計算機毎に1つの実行コンテキストのみを記憶しており、実行コンテキストが退避されるたびに上書きして記憶される。これに対し、実施の形態3では、実行コンテキスト記憶部50は、実行コンテキストが退避されるたびに、当該実行コンテキストを異なる領域に格納し、仮想計算機毎に複数の実行コンテキストを記憶している。
すなわち、第1の実行コンテキスト記憶部50−1は、第1の実行コンテキストデータ51−1〜第Mの実行コンテキストデータ51−Mを記憶しており、第2の実行コンテキスト記憶部50−2は、第1の実行コンテキストデータ52−1〜第Mの実行コンテキストデータ52−Mを記憶しており、第Nの実行コンテキスト記憶部50−Nは、第1の実行コンテキストデータ53−1〜第Mの実行コンテキストデータ53−Mを記憶している。
なお、第1の実行コンテキスト記憶部50−1〜第Nの実行コンテキスト記憶部50−Nが記憶する実行コンテキストの数Mは、メモリの容量などに応じて予め設定されている。
仮想計算機切り替え部301は、切り替え元の仮想計算機の実行コンテキストをCPUレジスタから実行コンテキスト記憶部50に退避させる。このとき、仮想計算機切り替え部301は、切り替え元の仮想計算機の実行コンテキストを、実行コンテキスト記憶部50の切り替え元の仮想計算機に対応する領域(第1の実行コンテキスト記憶部50−1〜第Nの実行コンテキスト記憶部50−Nの何れか)に記憶する。なお、初回は、実行コンテキストを第1の実行コンテキストデータとして保存し、次回は、実行コンテキストを第2の実行コンテキストデータとして保存する。そして、保存するデータの数が1つの仮想計算機の退避用に確保している数Mを越えた場合、再度第1の実行コンテキストデータとして保存する。
システム異常又はシステム障害が検知された場合、優先度に関係なく擬似タスクが動作される。なお、システム異常又はシステム障害が検知された場合に、擬似タスクが動作可能であることが前提である。
仮想計算機切り替え部通知部111は、現在動作中の仮想計算機に障害が発生した場合、仮想計算機優先度設定部302に対し、切り替え元の第1の仮想計算機10の最優先タスク優先度を通知するのではなく、現在動作中の仮想計算機に障害が発生したことを表す障害優先度を通知する。
次に、仮想計算機優先度設定部302は、仮想計算機切り替え通知部111からの指示を受け取り、当該指示にシステム異常又はシステム障害が発生したことを表す障害優先度が含まれている場合、障害優先度を仮想計算機優先度記憶部40に格納することなく、仮想計算機切り替え部301に処理を移す。
次に、仮想計算機切り替え部301は、仮想計算機切り替え通知を行った仮想計算機の実行コンテキストを実行コンテキスト記憶部50からCPUレジスタに復帰させる。ここで、仮想計算機切り替え部301は、実行コンテキスト記憶部50に記憶されている実行コンテキストの中から最も古い実行コンテキストをCPUレジスタに復帰させる。
なお、本実施の形態3では、実行コンテキスト記憶部50に記憶されている実行コンテキストの中から最も古い実行コンテキストをCPUレジスタに復帰させているが、本発明は特にこれに限定されず、最も新しい実行コンテキストをCPUレジスタに復帰させてもよく、任意の実行コンテキストをCPUレジスタに復帰させてもよい。
また、擬似タスクが実行できない状態の場合、仮想計算機制御部30は、ウォッチドッグタイマなどにより異常状態を検出し、強制的に正常時の実行コンテキストをCPUレジスタに復帰させてもよい。
以上の構成により、仮想計算機にウィルス障害又はOS障害が発生したとしても、正常に動作していた状態に復元することが可能である。
(実施の形態4)
上記の実施の形態1では、1つのCPU1を第1の仮想計算機10及び第2の仮想計算機20として機能させているが、本発明は特にこれに限定されず、複数のCPUをそれぞれ異なる仮想計算機として機能させてもよい。
図12は、本発明の実施の形態4における情報処理装置の構成を示すブロック図である。なお、図12に示す実施の形態4に係る情報処理装置において、図1に示す実施の形態1に係る情報処理装置と同じ構成については同じ符号を付し、詳細な説明を省略する。
図12に示す情報処理装置は、第1のCPU5、第2のCPU6、割り込みコントローラ2、周辺デバイス3及びメモリ4を備えている。通常状態において、第1のCPU5は、第1の仮想計算機10として動作し、第2のCPU6は、第2の仮想計算機20として動作する。しかしながら、第1のCPU5及び第2のCPU6のうちの一方のCPUの負荷量が大きくなり、アイドル状態となった場合、他方のCPUが、第1の仮想計算機10及び第2の仮想計算機20として動作する。このとき、他方のCPUは、実施の形態1で説明した切り替え処理を実行する。なお、仮想計算機制御部30、仮想計算機優先度記憶部40及び実行コンテキスト記憶部50は、第1のCPU5及び第2のCPU6のうちのいずれかによって動作される。
以上の構成により、複数のCPUにより複数の仮想計算機が動作される場合であっても、複数の仮想計算機を切り替えることができ、不要な実行コンテキストの中断と復帰とによるオーバーヘッドを削減することが可能となる。
なお、本実施の形態1〜4における情報処理装置の各構成要素は典型的にはソフトウェアとして実現されるが、集積回路であるLSIとして実現してもよい。各構成要素は個別に1チップ化されても良いし、一部又は全てを含むように1チップ化されても良い。ここでは、LSIとしたが、集積度の違いにより、IC、システムLSI、スーパーLSI、ウルトラLSIと呼称されることもある。また、集積回路化の手法はLSIに限るものではなく、専用回路又は汎用プロセッサで実現してもよい。LSI製造後に、プログラムすることが可能なFPGA(Field ProgrammableGate Array)、又はLSI内部の回路セルの接続や設定を再構成可能なリコンフィギュラブル・プロセッサを利用してもよい。さらには、半導体技術の進歩又は派生する別技術によりLSIに置き換わる集積回路化の技術が登場すれば、当然、その技術を用いて機能ブロックの集積化を行ってもよい。
なお、上述した具体的実施形態には以下の構成を有する発明が主に含まれている。
本発明の一局面に係る仮想計算機制御装置は、タスクの優先度に基づき実行するタスクのスケジューリングを行うオペレーションシステムをそれぞれ含む複数の仮想計算機と、前記複数の仮想計算機の切り替えを制御する仮想計算機制御部とを備え、前記複数の仮想計算機の各々は、現在動作中の仮想計算機を切り替え対象である他の仮想計算機に切り替える切り替え処理を実行するための切り替えタスクを実行するタスク実行部と、現在動作中の仮想計算機自身の実行可能なタスクの中から最も優先度の高いタスクの優先度を取得する優先度取得部と、前記切り替えタスクの優先度を、前記他の仮想計算機の前記優先度取得部によって取得された前記優先度に設定する優先度設定部とを含み、前記タスク実行部は、前記オペレーティングシステムのタスクスケジューリングにより前記切り替えタスクを実行した場合、前記仮想計算機制御部に対し、前記優先度取得部によって取得された前記優先度と、現在動作中の仮想計算機を前記他の仮想計算機に切り替える切り替え指示とを通知し、前記仮想計算機制御部は、前記タスク実行部によって通知される前記優先度と切り替え指示とを受け取り、現在動作中の仮想計算機を前記他の仮想計算機に切り替える。
この構成によれば、複数の仮想計算機は、タスクの優先度に基づき実行するタスクのスケジューリングを行うオペレーションシステムをそれぞれ含み、仮想計算機制御部は、複数の仮想計算機の切り替えを制御する。タスク実行部は、現在動作中の仮想計算機を切り替え対象である他の仮想計算機に切り替える切り替え処理を実行するための切り替えタスクを実行し、優先度取得部は、現在動作中の仮想計算機自身の実行可能なタスクの中から最も優先度の高いタスクの優先度を取得し、優先度設定部は、切り替えタスクの優先度を、他の仮想計算機の優先度取得部によって取得された優先度に設定する。タスク実行部は、オペレーティングシステムのタスクスケジューリングにより切り替えタスクを実行した場合、仮想計算機制御部に対し、優先度取得部によって取得された優先度と、現在動作中の仮想計算機を他の仮想計算機に切り替える切り替え指示とを通知する。仮想計算機制御部は、タスク実行部によって通知される優先度と切り替え指示とを受け取り、現在動作中の仮想計算機を他の仮想計算機に切り替える。
したがって、切り替えタスクの優先度が、他の仮想計算機における最も優先度の高いタスクの優先度に設定され、仮想計算機が切り替える場合にのみ、切り替えタスクが実行されるので、仮想計算機の中断と復帰との処理回数が削減され、仮想計算機の切り替えに要するオーバーヘッドを削減することができる。
また、上記の仮想計算機制御装置において、前記タスク実行部は、前記複数の仮想計算機の起動時に前記切り替えタスクを生成し、生成した前記切り替えタスクの優先度を最も高い優先度に設定することが好ましい。
この構成によれば、複数の仮想計算機の起動時に切り替えタスクが生成され、生成された切り替えタスクの優先度が最も高い優先度に設定されるので、複数の仮想計算機の起動時にまず切り替えタスクが実行され、当該切り替えタスクの優先度を設定することができる。
また、上記の仮想計算機制御装置において、前記仮想計算機制御部は、前記複数の仮想計算機への割り込みを通知するための割り込み通知を受け取り、前記割り込み通知に含まれる割り込み要因を用いて、前記複数の仮想計算機の中から割り込み対象の仮想計算機を判断する割り込み受取部と、前記割り込み要因に対応付けられている優先度を、前記割り込み対象の仮想計算機に対する優先度として設定するか否かを判断する割込み優先度格納判断部とを含むことが好ましい。
この構成によれば、割り込み受取部は、複数の仮想計算機への割り込みを通知するための割り込み通知を受け取り、割り込み通知に含まれる割り込み要因を用いて、複数の仮想計算機の中から割り込み対象の仮想計算機を判断する。また、割込み優先度格納判断部は、割り込み要因に対応付けられている優先度を、割り込み対象の仮想計算機に対する優先度として設定するか否かを判断する。
したがって、割り込みが発生した場合、割り込み要因に対応付けられている優先度を、割り込み対象の仮想計算機に対する優先度として設定するか否かが判断されるので、割り込み対象の仮想計算機を優先して実行することができる。
また、上記の仮想計算機制御装置において、前記割込み優先度格納判断部は、前記割り込み受取部によって判断された割り込み対象の仮想計算機が、割り込み前に動作していた仮想計算機と同じであるか否かを判断し、前記仮想計算機制御部は、割り込み対象の仮想計算機が、割り込み前に動作していた仮想計算機と同じではないと判断された場合、前記割り込み要因に対応付けられている優先度を、前記割り込み対象の仮想計算機に対する優先度として設定する仮想計算機優先度設定部をさらに含むことが好ましい。
この構成によれば、割り込み受取部によって判断された割り込み対象の仮想計算機が、割り込み前に動作していた仮想計算機と同じであるか否かが判断される。そして、割り込み対象の仮想計算機が、割り込み前に動作していた仮想計算機と同じではないと判断された場合、割り込み要因に対応付けられている優先度が、割り込み対象の仮想計算機に対する優先度として設定される。
したがって、割り込み対象の仮想計算機が、割り込み前に動作していた仮想計算機と同じではない場合、割り込み前に動作していた仮想計算機とは異なる割り込み対象の他の仮想計算機を優先して実行することができる。
また、上記の仮想計算機制御装置において、前記タスク実行部によって通知される前記優先度を記憶する優先度記憶部をさらに備え、前記仮想計算機制御部は、前記割り込み要因に対応付けられている優先度と、前記優先度記憶部に記憶されている優先度とを比較し、前記割り込み要因に対応付けられている優先度が前記優先度記憶部に記憶されている優先度よりも高い場合、前記割り込み要因に対応付けられている優先度を、前記割り込み対象の仮想計算機に対する優先度として設定する仮想計算機優先度設定部をさらに含むことが好ましい。
この構成によれば、優先度記憶部には、タスク実行部によって通知される優先度が記憶されている。そして、割り込み要因に対応付けられている優先度と、優先度記憶部に記憶されている優先度とが比較され、割り込み要因に対応付けられている優先度が優先度記憶部に記憶されている優先度よりも高い場合、割り込み要因に対応付けられている優先度が、割り込み対象の仮想計算機に対する優先度として設定される。
したがって、割り込み要因に対応付けられている優先度が優先度記憶部に記憶されている優先度よりも高い場合、割り込み要因に対応付けられている優先度が、割り込み対象の仮想計算機に対する優先度として設定されるので、割り込みが発生した場合に、必ずしも割り込みを実行するのではなく、より優先度の高いタスクを優先して実行することができる。
また、上記の仮想計算機制御装置において、各仮想計算機の実行コンテキストを記憶する実行コンテキスト記憶部をさらに備え、前記仮想計算機制御部は、切り替え前の仮想計算機に対応する実行コンテキストを前記実行コンテキスト記憶部に退避させ、切り替え後の仮想計算機に対応する実行コンテキストを前記実行コンテキスト記憶部から復帰させることが好ましい。
この構成によれば、実行コンテキスト記憶部には、各仮想計算機の実行コンテキストが記憶されている。そして、切り替え前の仮想計算機に対応する実行コンテキストが実行コンテキスト記憶部に退避され、切り替え後の仮想計算機に対応する実行コンテキストが実行コンテキスト記憶部から復帰される。
したがって、仮想計算機が切り替わる前に、切り替え前の仮想計算機に対応する実行コンテキストが退避されるので、中断時の状態から切り替えタスクを実行することができる。
また、上記の仮想計算機制御装置において、前記タスク実行部によって通知される前記優先度を記憶する優先度記憶部をさらに備え、前記仮想計算機制御部は、前記タスク実行部によって通知される前記優先度と切り替え指示とを受け取った場合、切り替え前の仮想計算機に対応する実行コンテキストを前記実行コンテキスト記憶部に退避させ、前記タスク実行部によって通知される前記優先度を前記優先度記憶部に記憶し、切り替え後の仮想計算機に対応する実行コンテキストを前記実行コンテキスト記憶部から復帰させ、切り替え後の仮想計算機に含まれる前記タスク実行部は、中断された切り替えタスクを再度実行し、切り替え後の仮想計算機に含まれる前記優先度設定部は、前記優先度記憶部に記憶されている切り替え前の仮想計算機の前記優先度を取得し、取得した前記優先度を切り替えタスクの優先度として設定することが好ましい。
この構成によれば、優先度記憶部には、タスク実行部によって通知される優先度が記憶されている。そして、仮想計算機制御部は、タスク実行部によって通知される優先度と切り替え指示とを受け取った場合、切り替え前の仮想計算機に対応する実行コンテキストを実行コンテキスト記憶部に退避させ、タスク実行部によって通知される優先度を優先度記憶部に記憶する。その後、仮想計算機制御部は、切り替え後の仮想計算機に対応する実行コンテキストを実行コンテキスト記憶部から復帰させる。切り替え後の仮想計算機に含まれるタスク実行部は、中断された切り替えタスクを再度実行し、切り替え後の仮想計算機に含まれる優先度設定部は、優先度記憶部に記憶されている切り替え前の仮想計算機の優先度を取得し、取得した優先度を切り替えタスクの優先度として設定する。
したがって、切り替え後の仮想計算機に対応する実行コンテキストが実行コンテキスト記憶部から復帰した後、切り替え後の仮想計算機の中断されていた切り替えタスクが再度実行され、切り替え前の仮想計算機の優先度が切り替えタスクの優先度として設定されるので、切り替え後の仮想計算機の切り替えタスクの優先度を、切り替え前の仮想計算機の最も優先度の高いタスクの優先度に設定することができる。
また、上記の仮想計算機制御装置において、前記実行コンテキスト記憶部は、前記仮想計算機制御部によって退避された実行コンテキストを仮想計算機毎に記憶し、前記タスク実行部は、現在動作中の仮想計算機に障害が発生した場合、前記仮想計算機制御部に対し、現在動作中の仮想計算機に障害が発生したことを表す障害優先度を通知し、前記仮想計算機制御部は、前記タスク実行部によって通知される前記障害優先度を受け取った場合、前記実行コンテキスト記憶部に記憶されている最も古い実行コンテキストを復帰させることが好ましい。
この構成によれば、実行コンテキスト記憶部には、仮想計算機制御部によって退避された実行コンテキストが仮想計算機毎に記憶されている。そして、タスク実行部は、現在動作中の仮想計算機に障害が発生した場合、仮想計算機制御部に対し、現在動作中の仮想計算機に障害が発生したことを表す障害優先度を通知する。仮想計算機制御部は、タスク実行部によって通知される障害優先度を受け取った場合、実行コンテキスト記憶部に記憶されている最も古い実行コンテキストを復帰させる。
したがって、現在動作中の仮想計算機に障害が発生した場合であっても、実行コンテキスト記憶部に記憶されている最も古い実行コンテキストが復帰されるので、仮想計算機を障害が発生する前の状態に戻すことができる。
本発明の他の局面に係る仮想計算機制御方法は、タスクの優先度に基づき実行するタスクのスケジューリングを行うオペレーションシステムをそれぞれ含む複数の仮想計算機の切り替えを制御する仮想計算機制御方法であって、現在動作中の仮想計算機を切り替え対象である他の仮想計算機に切り替える切り替え処理を実行するための切り替えタスクを実行するタスク実行ステップと、現在動作中の仮想計算機自身の実行可能なタスクの中から最も優先度の高いタスクの優先度を取得する優先度取得ステップと、前記切り替えタスクの優先度を、前記他の仮想計算機の前記優先度取得ステップにおいて取得された前記優先度に設定する優先度設定ステップと、前記オペレーティングシステムのタスクスケジューリングにより前記切り替えタスクを実行した場合、前記優先度取得ステップにおいて取得された前記優先度と、現在動作中の仮想計算機を前記他の仮想計算機に切り替える切り替え指示とを通知する通知ステップと、前記タスク実行ステップにおいて通知される前記優先度と切り替え指示とを受け取り、現在動作中の仮想計算機を前記他の仮想計算機に切り替える切り替えステップとを含む。
この構成によれば、タスク実行ステップは、現在動作中の仮想計算機を切り替え対象である他の仮想計算機に切り替える切り替え処理を実行するための切り替えタスクを実行する。優先度取得ステップは、現在動作中の仮想計算機自身の実行可能なタスクの中から最も優先度の高いタスクの優先度を取得する。優先度設定ステップは、切り替えタスクの優先度を、他の仮想計算機の優先度取得ステップにおいて取得された優先度に設定する。通知ステップは、オペレーティングシステムのタスクスケジューリングにより切り替えタスクを実行した場合、優先度取得ステップにおいて取得された優先度と、現在動作中の仮想計算機を他の仮想計算機に切り替える切り替え指示とを通知する。切り替えステップは、タスク実行ステップにおいて通知される優先度と切り替え指示とを受け取り、現在動作中の仮想計算機を他の仮想計算機に切り替える。
したがって、切り替えタスクの優先度が、他の仮想計算機における最も優先度の高いタスクの優先度に設定され、仮想計算機が切り替える場合にのみ、切り替えタスクが実行されるので、仮想計算機の中断と復帰との処理回数が削減され、仮想計算機の切り替えに要するオーバーヘッドを削減することができる。
本発明の他の局面に係る仮想計算機制御プログラムは、タスクの優先度に基づき実行するタスクのスケジューリングを行うオペレーションシステムをそれぞれ含む複数の仮想計算機と、前記複数の仮想計算機の切り替えを制御する仮想計算機制御部としてコンピュータを機能させ、前記複数の仮想計算機の各々は、現在動作中の仮想計算機を切り替え対象である他の仮想計算機に切り替える切り替え処理を実行するための切り替えタスクを実行するタスク実行部と、現在動作中の仮想計算機自身の実行可能なタスクの中から最も優先度の高いタスクの優先度を取得する優先度取得部と、前記切り替えタスクの優先度を、前記他の仮想計算機の前記優先度取得部によって取得された前記優先度に設定する優先度設定部とを含み、前記タスク実行部は、前記オペレーティングシステムのタスクスケジューリングにより前記切り替えタスクを実行した場合、前記仮想計算機制御部に対し、前記優先度取得部によって取得された前記優先度と、現在動作中の仮想計算機を前記他の仮想計算機に切り替える切り替え指示とを通知し、前記仮想計算機制御部は、前記タスク実行部から通知される前記優先度と切り替え指示とを受け取り、現在動作中の仮想計算機を前記他の仮想計算機に切り替える。
この構成によれば、複数の仮想計算機は、タスクの優先度に基づき実行するタスクのスケジューリングを行うオペレーションシステムをそれぞれ含み、仮想計算機制御部は、複数の仮想計算機の切り替えを制御する。タスク実行部は、現在動作中の仮想計算機を切り替え対象である他の仮想計算機に切り替える切り替え処理を実行するための切り替えタスクを実行し、優先度取得部は、自仮想計算機の実行可能なタスクの中から最も優先度の高いタスクの優先度を取得し、優先度設定部は、切り替えタスクの優先度を、他の仮想計算機の優先度取得部によって取得された優先度に設定する。タスク実行部は、オペレーティングシステムのタスクスケジューリングにより切り替えタスクを実行した場合、仮想計算機制御部に対し、優先度取得部によって取得された優先度と、現在動作中の仮想計算機を他の仮想計算機に切り替える切り替え指示とを通知する。仮想計算機制御部は、タスク実行部によって通知される優先度と切り替え指示とを受け取り、現在動作中の仮想計算機を他の仮想計算機に切り替える。
したがって、切り替えタスクの優先度が、他の仮想計算機における最も優先度の高いタスクの優先度に設定され、仮想計算機が切り替える場合にのみ、切り替えタスクが実行されるので、仮想計算機の中断と復帰との処理回数が削減され、仮想計算機の切り替えに要するオーバーヘッドを削減することができる。
なお、発明を実施するための形態の項においてなされた具体的な実施態様又は実施例は、あくまでも、本発明の技術内容を明らかにするものであって、そのような具体例にのみ限定して狭義に解釈されるべきものではなく、本発明の精神と特許請求事項との範囲内で、種々変更して実施することができるものである。
本発明にかかる仮想計算機制御装置、仮想計算機制御方法及び仮想計算機制御プログラムは、複数の仮想計算機を有する大型計算機及びパーソナルコンピュータ等に有用である。また、本発明にかかる仮想計算機制御装置、仮想計算機制御方法及び仮想計算機制御プログラムは、AV機器などの家電機器、携帯電話のような通信機器、産業機器及び乗用機器等の用途にも有用である。
本発明は、一つの物理計算機において、複数の仮想計算機の実行を制御する仮想計算機制御装置、仮想計算機制御方法及び仮想計算機制御プログラムに関し、特に、複数の仮想計算機を切り替える仮想計算機制御装置、仮想計算機制御方法及び仮想計算機制御プログラムに関するものである。
マイクロプロセッサの性能向上に伴い、ハードウェアを効率的に利用する技術として、1つの物理的計算機で複数の仮想計算機(ソフトウェアによる仮想的な計算機)を実行する仮想化技術が利用されている。なお、以下、この物理的計算機を、情報処理装置と記載する。
家電機器などの組み込み機器において、GUI(Graphical User Interface)やマルチメディア処理などの多機能性と、デバイス制御や同期通信などのリアルタイム性との両立が求められている。そのため、マルチメディア処理などの多機能性に適した仮想計算機と、リアルタイム性に適した仮想計算機とを、1つの情報処理装置上で切り替えながら実行することで、2つの処理の両立を実現している。
従来の仮想計算機を切り替える方法としては、リアルタイム性を重視したOS(オペレーティング・システム)を備えた仮想計算機を優先して実行し、このOSがアイドル状態の時に、現在動作中の仮想計算機を他の仮想計算機に切り替えて実行する方法があった。また、複数の仮想計算機に固定の優先度を割り当て、この優先度を用いて仮想計算機のスケジュールを行う方法があった。
リアルタイム性を重視したOSを備えた仮想計算機を常に優先させる方法では、他の仮想計算機に重要な処理が発生しても、即座にその重要な処理を実行することができなかった。また、固定の優先度を用いて仮想計算機のスケジュールを行う方法では、複数の仮想計算機の両方でリアルタイム性を重視する処理を実行することは困難であった。
この課題を解決する従来の方法として、実行する処理に基づいて、仮想計算機の優先度を変化させる技術がある(例えば、特許文献1参照)。つまり、従来技術では、仮想計算機の優先度を、その仮想計算機で実行するタスクの優先度に設定することになる。タスクの優先度とは、OSのタスクスケジューリングで使用される値である。ある仮想計算機が優先度の高いタスクを実行する場合、その仮想計算機の優先度も高くなるので、優先度の高い仮想計算機へ切り替わり、優先度の高いタスクが実行されることになる。
しかしながら、前記従来の構成では、OSがタスクスケジュールを行う度に、実行中の仮想計算機(OS)が中断し、複数の仮想計算機の切り替えを制御するOS切り替えプログラムが動作して次に実行する仮想計算機が決定される。つまり、従来技術では、中断した同じ仮想計算機に処理が戻る場合でも、仮想計算機の中断と復帰との処理が発生するという課題を有している。
本発明は、上記の問題を解決するためになされたもので、仮想計算機の切り替えに要するオーバーヘッドを削減することができる仮想計算機制御装置、仮想計算機制御方法及び仮想計算機制御プログラムを提供することを目的とするものである。
本発明の一局面に係る仮想計算機制御装置は、タスクの優先度に基づき実行するタスクのスケジューリングを行うオペレーティングシステムをそれぞれ含む複数の仮想計算機と、前記複数の仮想計算機の切り替えを制御する仮想計算機制御部とを備え、前記複数の仮想計算機の各々は、現在動作中の仮想計算機を切り替え対象である他の仮想計算機に切り替える切り替え処理を実行するための切り替えタスクを実行するタスク実行部と、現在動作中の仮想計算機自身の実行可能なタスクの中から最も優先度の高いタスクの優先度を取得する優先度取得部と、前記切り替えタスクの優先度を、前記他の仮想計算機の前記優先度取得部によって取得された前記優先度に設定する優先度設定部とを含み、前記タスク実行部は、前記オペレーティングシステムのタスクスケジューリングにより前記切り替えタスクを実行した場合、前記仮想計算機制御部に対し、前記優先度取得部によって取得された前記優先度と、現在動作中の仮想計算機を前記他の仮想計算機に切り替える切り替え指示とを通知し、前記仮想計算機制御部は、前記タスク実行部によって通知される前記優先度と切り替え指示とを受け取り、現在動作中の仮想計算機を前記他の仮想計算機に切り替える。
この構成によれば、複数の仮想計算機は、タスクの優先度に基づき実行するタスクのスケジューリングを行うオペレーティングシステムをそれぞれ含み、仮想計算機制御部は、複数の仮想計算機の切り替えを制御する。タスク実行部は、現在動作中の仮想計算機を切り替え対象である他の仮想計算機に切り替える切り替え処理を実行するための切り替えタスクを実行し、優先度取得部は、現在動作中の仮想計算機自身の実行可能なタスクの中から最も優先度の高いタスクの優先度を取得し、優先度設定部は、切り替えタスクの優先度を、他の仮想計算機の優先度取得部によって取得された優先度に設定する。タスク実行部は、オペレーティングシステムのタスクスケジューリングにより切り替えタスクを実行した場合、仮想計算機制御部に対し、優先度取得部によって取得された優先度と、現在動作中の仮想計算機を他の仮想計算機に切り替える切り替え指示とを通知する。仮想計算機制御部は、タスク実行部によって通知される優先度と切り替え指示とを受け取り、現在動作中の仮想計算機を他の仮想計算機に切り替える。
本発明によれば、切り替えタスクの優先度が、他の仮想計算機における最も優先度の高いタスクの優先度に設定され、仮想計算機が切り替える場合にのみ、切り替えタスクが実行されるので、仮想計算機の中断と復帰との処理回数が削減され、仮想計算機の切り替えに要するオーバーヘッドを削減することができる。
本発明の実施の形態1における情報処理装置の構成を示すブロック図である。
本発明の実施の形態1におけるタスク管理テーブルの一例を示す図である。
本発明の実施の形態1における仮想計算機識別子テーブルの一例を示す図である。
本発明の実施の形態1における第1の仮想計算機による切り替え処理の一例を示すフローチャートである。
本発明の実施の形態1における仮想計算機制御部による切り替え処理の一例を示すフローチャートである。
本発明の実施の形態1における第2の仮想計算機による切り替え処理の一例を示す図である。
本発明の実施の形態2における情報処理装置の構成を示すブロック図である。
本発明の実施の形態2における割り込みテーブルの一例を示す図である。
本発明の実施の形態2における仮想計算機制御部による割り込み処理の一例を示すフローチャートである。
本発明の実施の形態2における優先度テーブルの一例を示す図である。
本発明の実施の形態3における実行コンテキスト記憶部の構成を示す図である。
本発明の実施の形態4における情報処理装置の構成を示すブロック図である。
以下添付図面を参照しながら、本発明の実施の形態について説明する。尚、以下の実施の形態は、本発明を具体化した一例であって、本発明の技術的範囲を限定する性格のものではない。
(実施の形態1)
図1は、本発明の実施の形態1における情報処理装置の構成を示すブロック図である。
図1に示す情報処理装置は、CPU(中央演算装置)1、割り込みコントローラ2、周辺デバイス3及びメモリ4を備えている。
CPU1は、処理能力が十分であれば任意のものが利用可能である。割り込みコントローラ2は、周辺デバイス3が出力する割り込み要求をCPU1に通知する。
周辺デバイス3は、各種の入出力装置であり、情報処理装置の使用目的に応じたものを利用する。例えば、周辺デバイス3は、キーデバイス、通信デバイス、表示デバイス、デコーダ、エンコーダ、DSP(Digital Signal Processor)又はDMA(Direct Memory Access)コントローラなどである。
メモリ4は、第1の仮想計算機10、第2の仮想計算機20、仮想計算機制御部30、仮想計算機優先度記憶部40及び実行コンテキスト記憶部50を備えている。メモリ4は、リードオンリーメモリ(ROM)、ランダムアクセスメモリ(RAM)又はフラッシュメモリなどの、任意のタイプを使用することができる。また、メモリ4は、単一のメモリ装置で構成されている必要はなく、同種の複数のメモリの組み合わせ又は異なる種類の複数のメモリの組み合わせであってもよい。さらに、メモリ4以外に、例えばハードディスクのような外部記憶装置を設け、情報処理装置の動作に問題のない範囲で、外部記憶装置にメモリ4の内容を移動させてもよい。
また、第1の仮想計算機10、第2の仮想計算機20、仮想計算機制御部30、仮想計算機優先度記憶部40及び実行コンテキスト記憶部50は、メモリ4上に存在する場合は仮想計算機制御プログラムとして存在しており、CPU1が当該仮想計算機制御プログラムを実行することによって、第1の仮想計算機10、第2の仮想計算機20、仮想計算機制御部30、仮想計算機優先度記憶部40及び実行コンテキスト記憶部50として機能する。
第1の仮想計算機10は、擬似タスク110を含む1つ以上のタスクを実行するタスク実行部100と、第1のOS120とを備えている。擬似タスク110を含む全てのタスクは、それぞれ優先度が設定されている。第1のOS120は、タスクの優先度に基づき実行するタスクのスケジューリングを行う。
タスク実行部100は、各タスクに予め設定された優先度に応じてタスクを順次実行する。また、タスク実行部100は、現在動作中の仮想計算機を切り替え対象である他の仮想計算機に切り替える切り替え処理を実行するための擬似タスク110を実行する。
擬似タスク110は、第2の仮想計算機20の優先度を反映したタスクであり、仮想計算機切り替え通知部111と、優先度設定要求部112とを備えている。
仮想計算機切り替え通知部111は、第1のOS120に、最優先タスク優先度取得要求を出力し、第1のOS120は、タスクの中から最も優先して実行する最優先タスクの優先度を取得する。次に、仮想計算機切り替え通知部111は、仮想計算機制御部30に仮想計算機切り替え通知を出力し、第1の仮想計算機10を中断して、仮想計算機制御部30に処理を移す。なお、仮想計算機切り替え通知は、取得した最優先タスクの優先度と、切り替え元の仮想計算機(ここでは、第1の仮想計算機10)の識別子と、切り替え先の仮想計算機(ここでは、第2の仮想計算機20)の識別子とを含んでいる。
これにより、第1のOS120のタスクスケジューリングによって、擬似タスク110の実行順となったタイミングで、第1の仮想計算機10から第2の仮想計算機20への切り替え処理が行われることになる。なお、最優先タスクとは、実行状態のタスクを除く、次にスケジューリングされる可能性があるタスクを対象とする。つまり、実行状態の擬似タスクは、最優先タスクにはならない。
優先度設定要求部112は、擬似タスク110(第1の仮想計算機10)が中断から復帰した際に、第1のOS120に、擬似タスク110の優先度を設定するための優先度設定要求を送信する。また、優先度設定要求部112は、擬似タスク110の優先度の設定が完了すると、第1のOS120から優先度設定完了通知を受け取り、擬似タスク110の処理を終了する。この後、第1のOS120のタスクスケジューリングにより、次に実行するタスクの処理が開始されることになる。終了時の擬似タスク110の優先度は、第2の仮想計算機20から第1の仮想計算機10への切り替えが発生したタイミングにおける、第2の仮想計算機20の最優先タスクの優先度が設定されている。
第1のOS120は、タスクスケジューラ121と、優先度取得部122と、優先度設定部123とを備えている。
タスクスケジューラ121は、第1のOS120の配下のタスクの実行順序のスケジューリングを行う。スケジューリング対象のタスクには、擬似タスク110が含まれている。また、タスクスケジューラ121は、タスクを管理するための、タスク管理テーブルを保持している。
図2は、本発明の実施の形態1におけるタスク管理テーブルの一例を示す図である。図2に示すタスク管理テーブルは、各タスクの管理情報として、タスクID、タスク状態及びタスク優先度を有している例である。タスクIDは、各タスクを識別可能な識別子であり、一意にタスクを決定できればよい。タスク状態は、現在のタスクの状態を表しており、“実行状態”と“実行可能状態”と“待ち状態”との3つの状態が存在する。“実行状態”は、タスクが実行中であることを示しており、複数のタスクが同時に“実行状態”となることはない。“実行可能状態”は、他のタスクの実行が終了した際に、タスクスケジューラ121が実行させることができることを示している。“待ち状態”とは、タスクが、セマフォ、イベント又は一定時間待ちなどの条件が満たされるまで自ら休止した状態である。
タスク優先度は、タスクの優先度を表している。なお、図2では、タスク優先度を数値で示しており、数値が小さいほど優先度としては高いとしている。なお、タスク優先度は、数値以外の情報で表現してもよい。また、タスク優先度は、OSのサービス、例えば、UNIX(登録商標)OSにおけるpsコマンドを利用してタスク構造体から取得され、タスク管理テーブルに格納される。
優先度取得部122は、擬似タスク110から、最優先タスク優先度取得要求を受け取り、前述したタスク管理テーブルを参照して、自身が属する第1の仮想計算機10の実行可能なタスクの中から最も優先度の高い最優先タスクの優先度を取得し、擬似タスク110に取得した優先度を返す。なお、最優先タスクは、タスク状態が“実行状態”のタスクを除いたタスクの中から選択される。そのため、擬似タスク110は、常に最優先タスクから除外される。
優先度設定部123は、擬似タスク110から優先度設定要求を受け取り、擬似タスク110の優先度を設定する。優先度設定部123は、擬似タスク110の優先度を、第2の仮想計算機20の優先度取得部222によって取得された優先度に設定する。具体的には、優先度設定部123は、仮想計算機優先度記憶部40に格納されている第2の仮想計算機20の最優先タスクの優先度を取得し、前述したタスク管理テーブルの擬似タスク110の優先度を、取得した優先度に更新する。また、優先度設定部123は、擬似タスク110の優先度の設定が完了すると、擬似タスク110に優先度設定完了通知を送信する。
仮想計算機切り替え通知部111は、オペレーティングシステムのタスクスケジューリングにより擬似タスク110を実行した場合、仮想計算機制御部30に対し、優先度取得部122によって取得された優先度と、現在動作中の第1の仮想計算機10を第2の仮想計算機20に切り替える切り替え指示とを通知する。
第2の仮想計算機20は、擬似タスク210を含む1つ以上のタスクを実行するタスク実行部200と、第2のOS220とを備えている。擬似タスク210を含む全てのタスクは、それぞれ優先度が設定されている。第2のOS220は、タスクの優先度に基づき実行するタスクのスケジューリングを行う。
タスク実行部200は、各タスクに予め設定された優先度に応じてタスクを順次実行する。また、タスク実行部200は、現在動作中の仮想計算機を切り替え対象である他の仮想計算機に切り替える切り替え処理を実行するための擬似タスク210を実行する。
擬似タスク210は、第1の仮想計算機10の優先度を反映したタスクであり、仮想計算機切り替え通知部211と、優先度設定要求部212とを備えている。仮想計算機切り替え通知部211は、前述した仮想計算機切り替え通知部111と同じ機能を有している。また、優先度設定要求部212は、前述した優先度設定要求部112と同じ機能を有している。
第2のOS220は、タスクスケジューラ221と、優先度取得部222と、優先度設定部223とを備えている。タスクスケジューラ221は、前述したタスクスケジューラ121と同じ機能を有している。また、優先度取得部222は、前述した優先度取得部122と同じ機能を有している。また、優先度設定部223は、前述した優先度設定部123と同じ機能を有している。
これにより、第2のOS220のタスクスケジューリングにより、擬似タスク210の実行順となったタイミングで、第2の仮想計算機20から第1の仮想計算機10への切り替え処理が行われることになる。また、終了時の擬似タスク210の優先度は、第1の仮想計算機10から第2の仮想計算機20への切り替えが発生したタイミングにおける、第1の仮想計算機10の最優先タスクの優先度が設定されている。
なお、擬似タスク110,210は、第1及び第2の仮想計算機10,20の起動時に生成される。また、生成時の擬似タスク110,210の優先度は、最も高い優先度に設定される。タスク実行部100は、第1及び第2の仮想計算機10,20の起動時に擬似タスク110,210を生成し、生成した擬似タスク110,210の優先度を最も高い優先度に設定する。これにより、仮想計算機内の擬似タスク110,210を他のタスクに比べて優先的に動作させることになり、切り替え先の仮想計算機の最優先タスクの優先度を、擬似タスクの優先度として設定することが可能になる。
また、優先度取得部122,222及び優先度設定部123,223は、第1及び第2のOS110,210の内部機能としてではなく、モジュール形式のデバイスドライバ又はライブラリとして、後から追加することができる。
また、本実施の形態1では、仮想計算機切り替え通知は、タスクの優先度と、切り替え元の仮想計算機の識別子と、切り替え先の仮想計算機の識別子とを含むとしているが、2つの仮想計算機の切り替えを制御する場合は、これに限らない。2つの仮想計算機の切り替えを制御する場合、仮想計算機切り替え通知は、切り替え元の仮想計算機の識別子又は切り替え先の仮想計算機の識別子のいずれか一方のみを含めばよい。
仮想計算機制御部30は、仮想計算機切り替え部301と、仮想計算機優先度設定部302とを備え、複数の仮想計算機の切り替えを制御する。仮想計算機制御部30は、タスク実行部100によって通知される優先度と切り替え指示とを受け取り、現在動作中の第1の仮想計算機10を第2の仮想計算機20に切り替える。また、仮想計算機制御部30は、タスク実行部200によって通知される優先度と切り替え指示とを受け取り、現在動作中の第2の仮想計算機20を第1の仮想計算機10に切り替える。
仮想計算機切り替え部301は、第1及び第2の仮想計算機10,20から仮想計算機切り替え通知を受け取り、仮想計算機の実行コンテキストの退避と復帰とを行うことで、仮想計算機を切り替える。仮想計算機切り替え部301は、仮想計算機切り替え通知を用いて、切り替え元の仮想計算機と、切り替え先の仮想計算機とを特定することができる。仮想計算機切り替え部301は、切り替え元の仮想計算機の実行コンテキストをCPUレジスタから実行コンテキスト記憶部50に退避させ、切り替え先の仮想計算機の実行コンテキストを実行コンテキスト記憶部50からCPUレジスタに復帰させる。さらに、仮想計算機切り替え部301は、仮想計算機優先度設定部302に対し、切り替え元の仮想計算機の優先度の設定を指示する。なお、仮想計算機切り替え部301は、仮想計算機の識別子と、識別子に対応する対象仮想計算機とを組にした、仮想計算機識別子テーブルを保持している。
図3は、本発明の実施の形態1における仮想計算機識別子テーブルの一例を示す図である。図3に示す仮想計算機識別子テーブルには、識別子と、仮想計算機とが対応付けて記憶されている。図3に示すように、“A”という識別子には、第1の仮想計算機10が対応付けられており、“B”という識別子には、第2の仮想計算機20が対応付けられている。
仮想計算機優先度設定部302は、仮想計算機切り替え部301からの指示を受け取り、仮想計算機切り替え通知に含まれる優先度を、切り替え元の仮想計算機の優先度として、仮想計算機優先度記憶部40に格納する。
仮想計算機優先度記憶部40は、仮想計算機の切り替えが発生したタイミングでの、切り替え元の仮想計算機の優先度を記憶する。仮想計算機優先度記憶部40に記憶される仮想計算機の優先度は、切り替え元の仮想計算機のタスクの中の、最も優先して実行される最優先タスクの優先度である。なお、最優先タスクとは、実行状態のタスクを除く、次にスケジューリングされる可能性があるタスクを対象とする。つまり、擬似タスクは、最優先タスクにはならない。
実行コンテキスト記憶部50は、切り替え元の仮想計算機の実行コンテキストを記憶する。仮想計算機切り替え部301は、切り替え元の仮想計算機の実行コンテキストをCPUレジスタから実行コンテキスト記憶部50に記憶することにより、切り替え元の仮想計算機の実行コンテキストを退避させる。また、仮想計算機切り替え部301は、切り替え先の仮想計算機の実行コンテキストを実行コンテキスト記憶部50からCPUレジスタに読み出すことにより、切り替え先の仮想計算機の実行コンテキストを復帰させる。なお、実行コンテキスト記憶部50は、実行コンテキストを仮想計算機毎に記憶する。
仮想計算機切り替え部301は、タスク実行部100によって通知される優先度と切り替え指示とを受け取った場合、切り替え前の第1の仮想計算機10に対応する実行コンテキストを実行コンテキスト記憶部50に退避させ、タスク実行部100によって通知される優先度を仮想計算機優先度記憶部40に記憶し、切り替え後の第2の仮想計算機20に対応する実行コンテキストを実行コンテキスト記憶部50から復帰させる。
切り替え後の第2の仮想計算機20に含まれるタスク実行部200は、中断された擬似タスク210を再度実行する。切り替え後の第2の仮想計算機20に含まれる優先度設定部223は、仮想計算機優先度記憶部40に記憶されている切り替え前の第1の仮想計算機10の優先度を取得し、取得した優先度を擬似タスク210の優先度として設定する。
以上の構成により、本実施の形態1における情報処理装置は、実行中の仮想計算機より、他の仮想計算機の優先度が高くなったタイミングで、仮想計算機制御部30が動作し、仮想計算機の切り替え処理が行なわれることになる。つまり、OSがタスクスケジュールを行うたびに、実行中の仮想計算機を中断して切り替えを行うか否かを判断する必要がない。実行中の仮想計算機を中断した場合は、常に他の仮想計算機への切り替えが発生することとなり、中断する前に動作していた同じ仮想計算機に即時に復帰する処理を減らすことができる。これにより、不要な実行コンテキストの中断と復帰とによるオーバーヘッドを削減することが可能となる。
また、実行コンテキストの退避と復帰だけでなく、より安全性を高めるためにメモリ空間の切り替えを行った場合、仮想計算機の切り替えによるオーバーヘッドは更に大きくなるが、本実施の形態1では、このメモリ空間の切り替えによるオーバーヘッドも減らすことができる。
また、本実施の形態1は、情報処理装置が、リアルタイム性を重視した仮想計算機と、リアルタイム性を重視しない仮想計算機とを実装している場合、特に有効である。例えば、リアルタイム性が要求される処理は、第1の仮想計算機10のタスクとして実装し、第1のOS120にリアルタイム性に優れたRTOS(リアルタイムOS)を用いる。同時に、リアルタイム性が要求されないユーザインターフェイスに関する処理は、第2の仮想計算機20のタスクとして実装し、第2のOS220にグラフィック処理機能を豊富に有するOSを用いる。
従来の方法では、リアルタイム性を重視した仮想計算機を中断して切り替えを行うか否かを判断した結果、再度リアルタイム性を重視した仮想計算機に処理が戻されるケースが多く、余分な実行コンテキストの退避と復帰とが発生することになる。しかし、本実施の形態1の情報処理装置は、不要な実行コンテキストの中断と復帰とによるオーバーヘッドを削減し、リアルタイム性能と、豊富なグラフィック処理機能を用いた優れたユーザインターフェイスとを同時に実現することができる。
なお、第1のOS120と第2のOS220とは、異なる性能のOSにする必要は必ずしもなく、第1のOS120と第2のOS220とに同じ性能のOSを用いてもよい。
なお、例えば第1の仮想計算機10から第2の仮想計算機20に切り替える場合、仮想計算機制御部30は、動作していた第1の仮想計算機10のIP(インストラクションポインタ)、スタックポインタ、汎用のレジスタ、ベースポインタ又はフラグなどの実行コンテキストを、第1の仮想計算機10用に保存することで、実行コンテキストをCPUレジスタから退避させる。また、仮想計算機制御部30は、第2の仮想計算機20用に保存していた実行コンテキストをCPUレジスタに復帰させる。これにより、仮想計算機制御部30は、第1及び第2の仮想計算機10,20の切り替えを実現している。
本実施の形態1において、情報処理装置が仮想計算機制御装置の一例に相当し、第1の仮想計算機10及び第2の仮想計算機20が複数の仮想計算機の一例に相当し、仮想計算機制御部30が仮想計算機制御部の一例に相当し、タスク実行部100,200がタスク実行部の一例に相当し、優先度取得部122が優先度取得部の一例に相当し、優先度設定部123が優先度設定部の一例に相当し、実行コンテキスト記憶部50が実行コンテキスト記憶部の一例に相当し、仮想計算機優先度記憶部40が優先度記憶部の一例に相当し、擬似タスク110,210が切り替えタスクの一例に相当する。
図4〜図6は、本発明の実施の形態1における情報処理装置の処理の流れを示すフローチャートである。ここでは、図1における、第1の仮想計算機10から第2の仮想計算機20に切り替える切り替え動作の一例を示している。また、図4は、本発明の実施の形態1における第1の仮想計算機10による切り替え処理の一例を示すフローチャートであり、図5は、本発明の実施の形態1における仮想計算機制御部30による切り替え処理の一例を示すフローチャートであり、図6は、本発明の実施の形態1における第2の仮想計算機20による切り替え処理の一例を示すフローチャートである。
まず、図4において、CPU1は、第1の仮想計算機10を実行する。第1の仮想計算機10の実行中において、第1のOS120のタスクスケジューラ121は、タスク管理テーブルにおけるタスク優先度に基づいてタスクスケジューリングする。そして、タスクスケジューラ121は、次に実行するタスクとして擬似タスク110を選択し、タスク管理テーブルにおける擬似タスクのタスク状態を実行状態にする。タスクスケジューラ121は、擬似タスク110の実行をタスク実行部100に指示する。タスク実行部100は、タスクスケジューラ121からの指示に基づき、擬似タスク110を実行する。これにより、擬似タスク110の処理が開始される(ステップS1)。
次に、擬似タスク110の仮想計算機切り替え通知部111は、第1のOS120に最優先タスク優先度取得要求を送信する(ステップS2)。
次に、第1のOS120の優先度取得部122は、擬似タスク110の仮想計算機切り替え通知部111によって送信された最優先タスク優先度取得要求を受信する(ステップS3)。次に、優先度取得部122は、タスク管理テーブルを参照して、最も優先度の高いタスクの優先度、すなわちタスク実行部100が擬似タスク110の次に実行させるタスクの優先度(最優先タスク優先度)を取得する(ステップS4)。
次に、優先度取得部122は、取得した最優先タスク優先度を擬似タスク110に通知する(ステップS5)。例えば、タスクスケジューラ121が図2に示すタスク管理テーブルを有する場合、優先度取得部122は、タスク状態が実行可能状態のタスクの中で、最も優先度の高い第3のタスクの優先度を、擬似タスク110に送信する。
次に、擬似タスク110の仮想計算機切り替え通知部111は、第1のOS120の優先度取得部122によって送信された最優先タスク優先度を受信する(ステップS6)。次に、仮想計算機切り替え通知部111は、受け取った最優先タスク優先度を用いて、仮想計算機切り替え通知を生成し、生成した仮想計算機切り替え通知を仮想計算機制御部30に送信する(ステップS7)。これで、擬似タスク110から仮想計算機制御部30に処理が移ることになる。例えば、仮想計算機切り替え通知部111は、ソフトウェア割り込みを使用する。CPU1は、割込みコントローラ2から切り替え割込みの発生通知を受けてソフトウェア割込みを検知した場合、例外ベクターにジャンプ(移行)する。このジャンプ先である例外ベクターが、仮想計算機制御部30に設定される。これにより、仮想計算機切り替え通知発生時に、仮想計算機制御部30を動作させることが可能となる。
次に、図5において、仮想計算機制御部30の仮想計算機切り替え部301は、仮想計算機切り替え通知部111によって送信された仮想計算機切り替え通知を受け取る(ステップS11)。次に、仮想計算機切り替え部301は、切り替え元の第1の仮想計算機10の実行コンテキストをCPUレジスタから実行コンテキスト記憶部50に退避させる(ステップS12)。
次に、仮想計算機切り替え部301は、仮想計算機優先度設定部302に対し、切り替え元の第1の仮想計算機10の優先度の設定を指示する(ステップS13)。
次に、仮想計算機優先度設定部302は、仮想計算機切り替え部301からの指示を受け取り、仮想計算機切り替え通知に含まれる優先度(最優先タスク優先度)を、切り替え元の仮想計算機(第1の仮想計算機10)の優先度として、仮想計算機優先度記憶部40に格納する(ステップS14)。なお、設定する優先度は、仮想計算機切り替え通知に含まれるとしたが、本発明は特にこれに限定されず、ソフトウェア割り込みの引数、又は、共有メモリ上の予め決められた領域のデータを優先度として取得してもよい。
次に、仮想計算機切り替え部301は、切り替え先の第2の仮想計算機20の実行コンテキストを実行コンテキスト記憶部50からCPUレジスタに復帰させる(ステップS15)。
仮想計算機制御部30によって、第2の仮想計算機20の実行コンテキストが復帰されることにより、中断していた第2の仮想計算機20が復帰する。第2の仮想計算機20は、擬似タスク210の処理途中で中断していたため、擬似タスク210の中断箇所から処理を再開することになる。
次に、図6において、擬似タスク210の優先度設定要求部212は、第2のOS220に優先度設定要求を送信する(ステップS21)。
次に、第2のOS220の優先度設定部223は、擬似タスク210の優先度設定要求部212によって送信された優先度設定要求を受け取る(ステップS22)。優先度設定部223は、仮想計算機優先度記憶部40に格納されている第1の仮想計算機10の最優先タスク優先度を取得する(ステップS23)。次に、優先度設定部223は、タスク管理テーブルの擬似タスク210のタスク優先度を、取得した最優先タスク優先度に更新(設定)する(ステップS24)。次に、優先度設定部223は、擬似タスク210に優先度設定完了通知を送信する(ステップS25)。
次に、擬似タスク210の優先度設定要求部212は、第2のOS220の優先度設定部223によって送信された優先度設定完了通知を受け取る(ステップS26)。次に、優先度設定要求部212は、擬似タスク210の実行を終了する(ステップS27)。これにより、第2のOS220のタスクスケジューラ221は、第2の仮想計算機20におけるタスクスケジューリングを行い、実行が終了した擬似タスク210の次に実行するタスクを決定する。
以上により、本実施の形態1における情報処理装置は、切り替え対象である他の仮想計算機を擬似的に表す擬似タスクを生成し、この擬似タスクの優先度を、切り替え対象である他の仮想計算機の最も優先度の高いタスクの優先度に設定する。OSのタスクスケジューラは、実行中の仮想計算機より他の仮想計算機の優先度が高くなったタイミングで、擬似タスクを実行状態にし、タスク実行部は、擬似タスクを実行する。これにより、仮想計算機制御部30が動作して、切り替え処理が行なわれる。つまり、OSがタスクスケジュールを行うたびに、実行中の仮想計算機を中断して切り替えを行うか否かを判断する必要がない。実行中の仮想計算機を中断した場合は、常に他の仮想計算機への切り替えが発生することとなり、中断する前に動作していた同じ仮想計算機に即時に復帰する処理を減らすことができる。つまり、不要な実行コンテキストの中断と復帰とによるオーバーヘッドを削減することが可能となる。
本実施の形態1では、第1の仮想計算機10から第2の仮想計算機20に切り替える際に、第1の仮想計算機10における最優先タスク優先度を第2の仮想計算機20の擬似タスクの優先度に設定しているが、第2の仮想計算機20の擬似タスクの優先度を途中で変更してもよい。
例えば、第1の仮想計算機10が有する第1のOS120をRTOSとし、第2の仮想計算機20が有する第2のOS220をLinuxOSとした場合、RTOSによってデータをダウンロードした後、LinuxOSによって当該データをエンコード及び再生処理させる。このように、第1の仮想計算機10で処理したデータを、当該データの処理に適した第2の仮想計算機20で処理する場合、第1の仮想計算機10で処理を行った後、第1の仮想計算機10を第2の仮想計算機20に切り替える必要がある。
この場合、図5のステップS13において、仮想計算機優先度設定部302に対し、切り替え元の第1の仮想計算機10の優先度の設定を指示する場合に、仮想計算機切り替え部301は、仮想計算機優先度設定部302に通知する優先度を、第1の仮想計算機10のタスク管理テーブルに格納されている擬似タスクの優先度よりも低くなるように変更する。そして、仮想計算機優先度設定部302は、仮想計算機切り替え部301からの指示を受け取り、変更した優先度を、切り替え元の仮想計算機(第1の仮想計算機10)の優先度として、仮想計算機優先度記憶部40に格納する。
変更した優先度が、第2の仮想計算機20の擬似タスクの優先度として設定される。この変更した優先度は、第1の仮想計算機10の擬似タスクの優先度よりも低いので、切り替え先である第2の仮想計算機20を優先的に動作させることができる。
(実施の形態2)
図7は、本発明の実施の形態2における情報処理装置の構成を示すブロック図である。なお、図7に示す実施の形態2に係る情報処理装置において、図1に示す実施の形態1に係る情報処理装置と同じ構成については同じ符号を付し、詳細な説明を省略する。
図7に示す情報処理装置は、実施の形態1と同様に、CPU(中央演算装置)1、割り込みコントローラ2、周辺デバイス3及びメモリ4を備えている。
メモリ4は、第1の仮想計算機11、第2の仮想計算機21、仮想計算機制御部300、仮想計算機優先度記憶部400及び実行コンテキスト記憶部50を備えている。
第1の仮想計算機11は、擬似タスク110を含む1つ以上のタスクを実行するタスク実行部100と、第1のOS150とを備えている。擬似タスク110を含む全てのタスクは、それぞれ優先度が設定されている。第1のOS150は、タスクの優先度に基づき実行するタスクのスケジューリングを行う。また、擬似タスク110は、第2の仮想計算機21の優先度を反映したタスクであり、仮想計算機切り替え通知部111と、優先度設定要求部112とを備えている。この擬似タスク110は、実施の形態1で説明した構成と同じである。
第1のOS150は、タスクスケジューラ121と、優先度取得部122と、優先度設定部123と、割り込み処理部130とを備えている。割り込み処理部130以外は、実施の形態1で説明した構成と同じである。ここでは、異なる構成要素である割り込み処理部130についてのみ、詳細を説明する。
割り込み処理部130は、1つ以上の割り込みハンドラ140を備えている。割り込みハンドラ140は、割り込み後に実行される処理を表しており、それぞれ優先度が設定されている。また、割り込みが発生すると、第1のOS150の割り込み処理部130は、割り込みコントローラ2が通知する割り込み通知を受け取り、割込みの要因に応じた割り込みハンドラ140を実行する。
なお、実施の形態2におけるタスクスケジューラ121は、タスク及び割り込みハンドラを管理するためのタスク管理テーブルを記憶している。タスク管理テーブルは、各タスクの管理情報と、各割り込みハンドラの管理情報とを有している。具体的に、タスク管理テーブルは、タスクID、タスク状態及びタスク優先度に加えて、割り込みハンドラを識別するための割り込みハンドラID、割り込みハンドラの状態を表す割り込みハンドラ状態及び割り込みハンドラの優先度を表す割り込みハンドラ優先度をさらに有している。
第2の仮想計算機21は、擬似タスク210を含む1つ以上のタスクを実行するタスク実行部200と、第2のOS250とを備えている。擬似タスク210を含む全てのタスクは、それぞれ優先度が設定されている。第2のOS250は、タスクの優先度に基づき実行するタスクのスケジューリングを行う。また、擬似タスク210は、第1の仮想計算機11の優先度を反映したタスクであり、仮想計算機切り替え通知部211と、優先度設定要求部212とを備えている。この擬似タスク210は、実施の形態1で説明した構成と同じである。
第2のOS250は、タスクスケジューラ221と、優先度取得部222と、優先度設定部223と、割り込み処理部230とを備えている。割り込み処理部230以外は、実施の形態1で説明した構成と同じである。また、割り込み処理部230は、前述した割り込み処理部130と同じ機能を有している。
仮想計算機制御部300は、仮想計算機切り替え部301と、仮想計算機優先度設定部302と、割り込み受取部303と、割り込み優先度格納判断部304とを備えている。仮想計算機制御部300は、タスクスケジューリングによる仮想計算機の切り替えに加えて、割り込み発生による仮想計算機の切り替えを制御する。
割り込み受取部303は、複数の仮想計算機への割り込みを通知するための割り込み通知を受け取り、割り込み通知に含まれる割り込み要因を用いて、複数の仮想計算機の中から割り込み対象の仮想計算機を判断する。割り込み受取部303は、割り込みコントローラ2からCPU1を介して割り込みの発生を通知する割り込み通知を受け取る。割り込み受取部303は、受け取った割り込み通知に含まれる割り込み要因から、割り込み対象の仮想計算機(第1の仮想計算機11又は第2の仮想計算機21)を判断し、割り込み対象の仮想計算機(第1の仮想計算機11又は第2の仮想計算機21)への割り込み通知設定を行う。なお、割り込み受取部303は、割り込み要因と、割り込み対象の仮想計算機とを組にした割り込みテーブルを保持している。割り込み受取部303は、この割り込みテーブルを参照して割り込み対象の仮想計算機を判断する。
図8は、本発明の実施の形態2における割り込みテーブルの一例を示す図である。図8に示す割り込みテーブルでは、“A”、“B”及び“C”という割り込み要因には、割り込み対象の仮想計算機として第1の仮想計算機11が対応付けられており、“D”という割り込み要因には、割り込み対象の仮想計算機として第2の仮想計算機21が対応付けられている。なお、図8に示すように本実施の形態2では、割り込み要因と割り込み対象の仮想計算機とをテーブル形式で対応付けて記憶しているが、本発明は特にこれに限定されず、割り込み要因と割り込み対象の仮想計算機とは、関数又はリンク形式など、割り込み対象の仮想計算機を仮想計算機制御部が一意に決定可能なデータ形式で記憶すればよい。
割り込み優先度格納判断部304は、割り込み要因に対応付けられている優先度を、割り込み対象の仮想計算機に対する優先度として設定するか否かを判断する。割り込み優先度格納判断部304は、割り込みが発生した時点で、動作中の仮想計算機(第1の仮想計算機11又は第2の仮想計算機21)と、割り込み対象の仮想計算機(第1の仮想計算機11又は第2の仮想計算機21)とが一致しているか否かを判断する。現在動作中の仮想計算機と割り込み対象の仮想計算機とが一致していない場合、割り込み優先度格納判断部304は、仮想計算機優先度設定部302に対し、発生した割り込みに対応する優先度を仮想計算機優先度記憶部400へ格納するよう指示する。
また、割込み優先度格納判断部304は、割り込み受取部303によって判断された割り込み対象の仮想計算機が、割り込み前に動作していた仮想計算機と同じであるか否かを判断する。割り込み対象の仮想計算機が、割り込み前に動作していた仮想計算機と同じではないと判断された場合、仮想計算機優先度設定部302は、割り込み要因に対応付けられている優先度を、割り込み対象の仮想計算機に対する優先度として設定する。
仮想計算機優先度記憶部400は、仮想計算機の切り替えが発生したタイミングにおいて記憶された切り替え元の仮想計算機の優先度に加えて、割り込みが発生したタイミングにおいて発生した割り込みの優先度を記憶する。仮想計算機の優先度は、その仮想計算機のタスクの中の、最も優先して実行する最優先タスクの優先度である。なお、最優先タスクとは、実行状態のタスクを除く、次にスケジューリングされる可能性があるタスクを対象とする。つまり、擬似タスクは、最優先タスクにはならない。
以上の構成により、本実施の形態2における情報処理装置は、実行中の仮想計算機より、他の仮想計算機の優先度が高くなったタイミングで、仮想計算機制御部30が動作し、仮想計算機の切り替え処理が行なわれることになる。また、割り込み発生時に、仮想計算機制御部30が動作し、実行中でない他の仮想計算機向けの割り込みである場合に、割り込みの優先度を仮想計算機優先度として仮想計算機優先度記憶部400に格納する。これにより、割り込みとタスクの優先度に従った仮想計算機の切り替えを実現することが可能となる。つまり、OSがタスクスケジュールを行うたびに、実行中の仮想計算機を中断して切り替え処理を行うか否かを判断する必要がない。実行中の仮想計算機を中断した場合は、常に他の仮想計算機への切り替えが発生することとなり、中断する前に動作していた同じ仮想計算機に即時に復帰する処理を減らすことができる。これにより、不要な実行コンテキストの中断と復帰とによるオーバーヘッドを削減することが可能となる。
本実施の形態2において、情報処理装置が仮想計算機制御装置の一例に相当し、第1の仮想計算機11及び第2の仮想計算機21が複数の仮想計算機の一例に相当し、仮想計算機制御部300が仮想計算機制御部の一例に相当し、仮想計算機優先度設定部302が仮想計算機優先度設定部の一例に相当し、割り込み受取部303が割り込み受取部の一例に相当し、割込み優先度格納判断部304が割込み優先度格納判断部の一例に相当し、仮想計算機優先度記憶部400が優先度記憶部の一例に相当する。
図9は、本発明の実施の形態2における仮想計算機制御部による割り込み処理の一例を示すフローチャートである。図9では、割り込みが発生した場合の、仮想計算機制御部300の動作の一例を示している。
周辺デバイス3による割り込みが発生すると、割り込みコントローラ2は、CPU1に対して割り込みの発生を通知する割り込み通知を出力する。これにより、割り込み処理が開始される。例えば、CPU1は、割込みコントローラ2から割り込みの発生通知を受けて、割込みを検知した場合、割り込みベクターにジャンプ(移行)する。このジャンプ先である割り込みベクターが、仮想計算機制御部300に設定される。これにより、割り込み発生時に、仮想計算機制御部300を動作させることが可能となる。
まず、仮想計算機制御部300の割り込み受取部303は、割り込みコントローラ2から割り込み通知を受け取る(ステップS31)。割り込み通知を受け取った場合、割り込み受取部303は、仮想計算機切り替え部301に実行コンテキストの退避を指示する。
次に、仮想計算機切り替え部301は、動作中の仮想計算機の実行コンテキストをCPUレジスタから実行コンテキスト記憶部50に退避させ、割り込み受取部303に実行コンテキストの退避の完了を通知する(ステップS32)。
次に、割り込み受取部303は、受け取った割り込み通知に含まれている割込み要因を用いて、割り込み対象の仮想計算機(第1の仮想計算機11又は第2の仮想計算機21)を判断し、割り込み対象の仮想計算機への割込み通知設定を行い、割り込み優先度格納判断部304に、割り込み対象の仮想計算機の識別子を通知する(ステップS33)。
次に、割り込み優先度格納判断部304は、割り込み受取部303から通知された割り込み対象の仮想計算機の識別子を用いて、割り込み対象の仮想計算機が、割り込み発生前に動作していた仮想計算機と同じであるか否かを判断する(ステップS34)。
割り込み対象の仮想計算機と、割り込み発生前に動作していた仮想計算機とが異なると判断された場合(ステップS34でNO)、割り込み優先度格納判断部304は、仮想計算機優先度設定部302に対し、発生した割り込みに対応する優先度を仮想計算機優先度記憶部400に格納するよう指示する(ステップS35)。次に、仮想計算機優先度設定部302は、割り込み優先度格納判断部304からの指示を受け取り、発生した割り込みに対応する優先度を、仮想計算機優先度記憶部400に格納する(ステップS36)。
なお、割り込み優先度格納判断部304は、各割り込みハンドラに対する優先度を優先度テーブルとして仮想計算機毎に保持している。割り込み優先度格納判断部304は、優先度テーブルを参照し、設定する優先度の値を仮想計算機優先度設定部302に指示する。
図10は、本発明の実施の形態2における優先度テーブルの一例を示す図である。割り込み優先度格納判断部304は、第1の仮想計算機用優先度テーブルT1と第2の仮想計算機用優先度テーブルT2とを有している。第1の仮想計算機用優先度テーブルT1は、第1の仮想計算機11の割り込み処理部130が実行する第1〜第3の割り込みハンドラと、第1〜第3の割り込みハンドラに予め設定されている優先度とを対応付けている。第2の仮想計算機用優先度テーブルT2は、第2の仮想計算機21の割り込み処理部230が実行する第4〜第6の割り込みハンドラと、第4〜第6の割り込みハンドラに予め設定されている優先度とを対応付けている。
割り込み対象の仮想計算機と、割り込み発生前に動作していた仮想計算機とが同じであると判断された場合(ステップS34でYES)、又は割り込み対象の仮想計算機と、割り込み発生前に動作していた仮想計算機とが異なると判断された後、割り込みに対応する優先度が仮想計算機優先度記憶部400に格納された場合、割り込み受取部303は、仮想計算機切り替え部301に対し、ステップS32で退避した実行コンテキストの復帰を指示する。仮想計算機切り替え部301は、実行を中断した仮想計算機の実行コンテキストを実行コンテキスト記憶部50からCPUレジスタに復帰させ、割り込み処理を完了する(ステップS37)。
なお、ステップS36において、仮想計算機優先度設定部302は、発生した割り込みに対応する優先度と、既に仮想計算機優先度記憶部400に記憶されている最優先タスクの優先度とを比較し、発生した割り込みに対応する優先度が既に記憶されている最優先タスクの優先度よりも高い場合のみ、仮想計算機優先度記憶部400を更新してもよい。
すなわち、仮想計算機優先度設定部302は、割り込み要因に対応付けられている優先度と、仮想計算機優先度記憶部400に記憶されている優先度とを比較し、割り込み要因に対応付けられている優先度が仮想計算機優先度記憶部400に記憶されている優先度よりも高い場合、割り込み要因に対応付けられている優先度を、割り込み対象の仮想計算機に対する優先度として設定する。
また、ステップS36において、仮想計算機優先度設定部302は、発生した割り込みに対応する優先度と、所定の閾値とを比較し、発生した割り込みに対応する優先度が所定の閾値よりも高い場合のみ、仮想計算機優先度記憶部400を更新してもよい。
続いて、本実施の形態2における割り込み処理後の動作について説明する。なお、第1の仮想計算機11の動作中に割り込み処理が発生した場合について説明する。
割り込み対象の仮想計算機が第1の仮想計算機11である場合、ステップS37において実行コンテキストが復帰された後、割り込み処理部130は、割り込みに対応した割り込みハンドラを実行する。そして、割り込みハンドラの実行が終了すると、タスクスケジューラ121は、実行すべき第1の仮想計算機11のタスクを優先度に応じて決定する。
一方、割り込み対象の仮想計算機が第2の仮想計算機21である場合、ステップS37において実行コンテキストが復帰された後、タスク実行部100は、第1の仮想計算機11のタスクを優先度に応じて順次実行する。そして、擬似タスク110を実行するタイミングで、図4〜図6に示す切り替え処理が開始される。切り替え処理では、図4〜図6に示すステップS1〜S22の処理が実行される。なお、ステップS14において、仮想計算機優先度記憶部400は、既に格納されている割り込みに対応する優先度とともに、仮想計算機切り替え通知に含まれる優先度を格納する。
ステップS23において、優先度設定部223は、仮想計算機優先度記憶部400に格納されている第1の仮想計算機11の最優先タスク優先度と、割り込みに対応する優先度とを取得する。次に、ステップS24において、優先度設定部223は、タスク管理テーブルの擬似タスク210のタスク優先度を、取得した最優先タスク優先度に更新するとともに、タスク管理テーブルの割り込みハンドラのタスク優先度を、取得した割り込みに対応する優先度に更新する。その後、ステップS25〜S27の処理が実行され、擬似タスク210の実行が終了される。
擬似タスク210の実行が終了すると、タスクスケジューラ221は、実行すべき第2の仮想計算機21のタスクを優先度に応じて決定する。そして、タスク管理テーブルに設定されている割り込みハンドラの実行タイミングで、割り込み処理部230は、割り込みに対応した割り込みハンドラを実行する。そして、割り込みハンドラの実行が終了すると、タスクスケジューラ221は、実行すべき第2の仮想計算機21のタスクを優先度に応じて決定する。
以上により、本実施の形態2における情報処理装置は、切り替え対象である他の仮想計算機を擬似的に表す擬似タスクを生成し、この擬似タスクの優先度を、切り替え対象である他の仮想計算機の最も優先度の高いタスクの優先度に設定する。OSのタスクスケジューラは、実行中の仮想計算機より他の仮想計算機の優先度が高くなったタイミングで、擬似タスクを実行状態にし、タスク実行部は、擬似タスクを実行する。これにより、仮想計算機制御部300が動作して、切り替え処理が行なわれる。つまり、OSがタスクスケジュールを行うたびに、実行中の仮想計算機を中断して切り替え処理を行うか否かを判断する必要がない。実行中の仮想計算機を中断した場合は、常に他の仮想計算機への切り替えが発生することとなり、中断する前に動作していた同じ仮想計算機に即時に復帰する処理を減らすことができる。つまり、不要な実行コンテキストの中断と復帰とによるオーバーヘッドを削減することが可能となる。
さらに、割り込み発生時において、実行中の仮想計算機への割り込みである場合は、実行中の仮想計算機のOSに割り込み通知が行われ、実行中でない他の仮想計算機への割り込みである場合は、割り込みの優先度が仮想計算機の優先度に設定され、割り込み前の仮想計算機が動作される。これにより、割り込みの優先度とタスクの優先度とに従った仮想計算機の切り替えを実現することができる。つまり、OSがタスクスケジュールを行うたびに、実行中の仮想計算機を中断して切り替えを行うか否かを判断する必要がない。実行中の仮想計算機を中断した場合は、常に他の仮想計算機への切り替えが発生することとなり、中断する前に動作していた同じ仮想計算機に即時に復帰する処理を減らすことができる。これにより、不要な実行コンテキストの中断と復帰とによるオーバーヘッドを削減することが可能となる。
なお、実施の形態1及び2では、仮想計算機が2つの場合について説明したが、本発明は特にこれに限定されず、3つ以上の仮想計算機を設けてもよい。
(実施の形態3)
次に、本発明の実施の形態3に係る情報処理装置について説明する。本実施の形態3では、ウィルス障害又はOS障害の発生時において、仮想計算機が所定の優先度を仮想計算機制御部に通知することにより、正常に動作していた状態に復元する。
なお、実施の形態3に係る情報処理装置は、図1に示す実施の形態1に係る情報処理装置とほぼ同じ構成であるので、異なる構成についてのみ説明する。実施の形態3と実施の形態1とでは、実行コンテキスト記憶部50の構成が異なっている。
図11は、本発明の実施の形態3における実行コンテキスト記憶部の構成を示す図である。
実行コンテキスト記憶部50は、仮想計算機制御部30によって退避された実行コンテキストを仮想計算機毎に記憶する。実行コンテキスト記憶部50は、仮想計算機の数に応じて、第1の実行コンテキスト記憶部50−1〜第Nの実行コンテキスト記憶部50−Nを備える。なお、図11では、情報処理装置が3つ以上の仮想計算機を有する場合について示しているが、本発明は特にこれに限定されず、情報処理装置は図1に示すように2つの仮想計算機を有していてもよい。
第1の実行コンテキスト記憶部50−1は、第1の仮想計算機の実行コンテキストを記憶し、第2の実行コンテキスト記憶部50−2は、第2の仮想計算機の実行コンテキストを記憶し、第Nの実行コンテキスト記憶部50−Nは、第Nの仮想計算機の実行コンテキストを記憶する。
実施の形態1では、実行コンテキスト記憶部50は、仮想計算機毎に1つの実行コンテキストのみを記憶しており、実行コンテキストが退避されるたびに上書きして記憶される。これに対し、実施の形態3では、実行コンテキスト記憶部50は、実行コンテキストが退避されるたびに、当該実行コンテキストを異なる領域に格納し、仮想計算機毎に複数の実行コンテキストを記憶している。
すなわち、第1の実行コンテキスト記憶部50−1は、第1の実行コンテキストデータ51−1〜第Mの実行コンテキストデータ51−Mを記憶しており、第2の実行コンテキスト記憶部50−2は、第1の実行コンテキストデータ52−1〜第Mの実行コンテキストデータ52−Mを記憶しており、第Nの実行コンテキスト記憶部50−Nは、第1の実行コンテキストデータ53−1〜第Mの実行コンテキストデータ53−Mを記憶している。
なお、第1の実行コンテキスト記憶部50−1〜第Nの実行コンテキスト記憶部50−Nが記憶する実行コンテキストの数Mは、メモリの容量などに応じて予め設定されている。
仮想計算機切り替え部301は、切り替え元の仮想計算機の実行コンテキストをCPUレジスタから実行コンテキスト記憶部50に退避させる。このとき、仮想計算機切り替え部301は、切り替え元の仮想計算機の実行コンテキストを、実行コンテキスト記憶部50の切り替え元の仮想計算機に対応する領域(第1の実行コンテキスト記憶部50−1〜第Nの実行コンテキスト記憶部50−Nの何れか)に記憶する。なお、初回は、実行コンテキストを第1の実行コンテキストデータとして保存し、次回は、実行コンテキストを第2の実行コンテキストデータとして保存する。そして、保存するデータの数が1つの仮想計算機の退避用に確保している数Mを越えた場合、再度第1の実行コンテキストデータとして保存する。
システム異常又はシステム障害が検知された場合、優先度に関係なく擬似タスクが動作される。なお、システム異常又はシステム障害が検知された場合に、擬似タスクが動作可能であることが前提である。
仮想計算機切り替え部通知部111は、現在動作中の仮想計算機に障害が発生した場合、仮想計算機優先度設定部302に対し、切り替え元の第1の仮想計算機10の最優先タスク優先度を通知するのではなく、現在動作中の仮想計算機に障害が発生したことを表す障害優先度を通知する。
次に、仮想計算機優先度設定部302は、仮想計算機切り替え通知部111からの指示を受け取り、当該指示にシステム異常又はシステム障害が発生したことを表す障害優先度が含まれている場合、障害優先度を仮想計算機優先度記憶部40に格納することなく、仮想計算機切り替え部301に処理を移す。
次に、仮想計算機切り替え部301は、仮想計算機切り替え通知を行った仮想計算機の実行コンテキストを実行コンテキスト記憶部50からCPUレジスタに復帰させる。ここで、仮想計算機切り替え部301は、実行コンテキスト記憶部50に記憶されている実行コンテキストの中から最も古い実行コンテキストをCPUレジスタに復帰させる。
なお、本実施の形態3では、実行コンテキスト記憶部50に記憶されている実行コンテキストの中から最も古い実行コンテキストをCPUレジスタに復帰させているが、本発明は特にこれに限定されず、最も新しい実行コンテキストをCPUレジスタに復帰させてもよく、任意の実行コンテキストをCPUレジスタに復帰させてもよい。
また、擬似タスクが実行できない状態の場合、仮想計算機制御部30は、ウォッチドッグタイマなどにより異常状態を検出し、強制的に正常時の実行コンテキストをCPUレジスタに復帰させてもよい。
以上の構成により、仮想計算機にウィルス障害又はOS障害が発生したとしても、正常に動作していた状態に復元することが可能である。
(実施の形態4)
上記の実施の形態1では、1つのCPU1を第1の仮想計算機10及び第2の仮想計算機20として機能させているが、本発明は特にこれに限定されず、複数のCPUをそれぞれ異なる仮想計算機として機能させてもよい。
図12は、本発明の実施の形態4における情報処理装置の構成を示すブロック図である。なお、図12に示す実施の形態4に係る情報処理装置において、図1に示す実施の形態1に係る情報処理装置と同じ構成については同じ符号を付し、詳細な説明を省略する。
図12に示す情報処理装置は、第1のCPU5、第2のCPU6、割り込みコントローラ2、周辺デバイス3及びメモリ4を備えている。通常状態において、第1のCPU5は、第1の仮想計算機10として動作し、第2のCPU6は、第2の仮想計算機20として動作する。しかしながら、第1のCPU5及び第2のCPU6のうちの一方のCPUの負荷量が大きくなり、アイドル状態となった場合、他方のCPUが、第1の仮想計算機10及び第2の仮想計算機20として動作する。このとき、他方のCPUは、実施の形態1で説明した切り替え処理を実行する。なお、仮想計算機制御部30、仮想計算機優先度記憶部40及び実行コンテキスト記憶部50は、第1のCPU5及び第2のCPU6のうちのいずれかによって動作される。
以上の構成により、複数のCPUにより複数の仮想計算機が動作される場合であっても、複数の仮想計算機を切り替えることができ、不要な実行コンテキストの中断と復帰とによるオーバーヘッドを削減することが可能となる。
なお、本実施の形態1〜4における情報処理装置の各構成要素は典型的にはソフトウェアとして実現されるが、集積回路であるLSIとして実現してもよい。各構成要素は個別に1チップ化されても良いし、一部又は全てを含むように1チップ化されても良い。ここでは、LSIとしたが、集積度の違いにより、IC、システムLSI、スーパーLSI、ウルトラLSIと呼称されることもある。また、集積回路化の手法はLSIに限るものではなく、専用回路又は汎用プロセッサで実現してもよい。LSI製造後に、プログラムすることが可能なFPGA(Field ProgrammableGate Array)、又はLSI内部の回路セルの接続や設定を再構成可能なリコンフィギュラブル・プロセッサを利用してもよい。さらには、半導体技術の進歩又は派生する別技術によりLSIに置き換わる集積回路化の技術が登場すれば、当然、その技術を用いて機能ブロックの集積化を行ってもよい。
なお、上述した具体的実施形態には以下の構成を有する発明が主に含まれている。
本発明の一局面に係る仮想計算機制御装置は、タスクの優先度に基づき実行するタスクのスケジューリングを行うオペレーティングシステムをそれぞれ含む複数の仮想計算機と、前記複数の仮想計算機の切り替えを制御する仮想計算機制御部とを備え、前記複数の仮想計算機の各々は、現在動作中の仮想計算機を切り替え対象である他の仮想計算機に切り替える切り替え処理を実行するための切り替えタスクを実行するタスク実行部と、現在動作中の仮想計算機自身の実行可能なタスクの中から最も優先度の高いタスクの優先度を取得する優先度取得部と、前記切り替えタスクの優先度を、前記他の仮想計算機の前記優先度取得部によって取得された前記優先度に設定する優先度設定部とを含み、前記タスク実行部は、前記オペレーティングシステムのタスクスケジューリングにより前記切り替えタスクを実行した場合、前記仮想計算機制御部に対し、前記優先度取得部によって取得された前記優先度と、現在動作中の仮想計算機を前記他の仮想計算機に切り替える切り替え指示とを通知し、前記仮想計算機制御部は、前記タスク実行部によって通知される前記優先度と切り替え指示とを受け取り、現在動作中の仮想計算機を前記他の仮想計算機に切り替える。
この構成によれば、複数の仮想計算機は、タスクの優先度に基づき実行するタスクのスケジューリングを行うオペレーティングシステムをそれぞれ含み、仮想計算機制御部は、複数の仮想計算機の切り替えを制御する。タスク実行部は、現在動作中の仮想計算機を切り替え対象である他の仮想計算機に切り替える切り替え処理を実行するための切り替えタスクを実行し、優先度取得部は、現在動作中の仮想計算機自身の実行可能なタスクの中から最も優先度の高いタスクの優先度を取得し、優先度設定部は、切り替えタスクの優先度を、他の仮想計算機の優先度取得部によって取得された優先度に設定する。タスク実行部は、オペレーティングシステムのタスクスケジューリングにより切り替えタスクを実行した場合、仮想計算機制御部に対し、優先度取得部によって取得された優先度と、現在動作中の仮想計算機を他の仮想計算機に切り替える切り替え指示とを通知する。仮想計算機制御部は、タスク実行部によって通知される優先度と切り替え指示とを受け取り、現在動作中の仮想計算機を他の仮想計算機に切り替える。
したがって、切り替えタスクの優先度が、他の仮想計算機における最も優先度の高いタスクの優先度に設定され、仮想計算機が切り替える場合にのみ、切り替えタスクが実行されるので、仮想計算機の中断と復帰との処理回数が削減され、仮想計算機の切り替えに要するオーバーヘッドを削減することができる。
また、上記の仮想計算機制御装置において、前記タスク実行部は、前記複数の仮想計算機の起動時に前記切り替えタスクを生成し、生成した前記切り替えタスクの優先度を最も高い優先度に設定することが好ましい。
この構成によれば、複数の仮想計算機の起動時に切り替えタスクが生成され、生成された切り替えタスクの優先度が最も高い優先度に設定されるので、複数の仮想計算機の起動時にまず切り替えタスクが実行され、当該切り替えタスクの優先度を設定することができる。
また、上記の仮想計算機制御装置において、前記仮想計算機制御部は、前記複数の仮想計算機への割り込みを通知するための割り込み通知を受け取り、前記割り込み通知に含まれる割り込み要因を用いて、前記複数の仮想計算機の中から割り込み対象の仮想計算機を判断する割り込み受取部と、前記割り込み要因に対応付けられている優先度を、前記割り込み対象の仮想計算機に対する優先度として設定するか否かを判断する割込み優先度格納判断部とを含むことが好ましい。
この構成によれば、割り込み受取部は、複数の仮想計算機への割り込みを通知するための割り込み通知を受け取り、割り込み通知に含まれる割り込み要因を用いて、複数の仮想計算機の中から割り込み対象の仮想計算機を判断する。また、割込み優先度格納判断部は、割り込み要因に対応付けられている優先度を、割り込み対象の仮想計算機に対する優先度として設定するか否かを判断する。
したがって、割り込みが発生した場合、割り込み要因に対応付けられている優先度を、割り込み対象の仮想計算機に対する優先度として設定するか否かが判断されるので、割り込み対象の仮想計算機を優先して実行することができる。
また、上記の仮想計算機制御装置において、前記割込み優先度格納判断部は、前記割り込み受取部によって判断された割り込み対象の仮想計算機が、割り込み前に動作していた仮想計算機と同じであるか否かを判断し、前記仮想計算機制御部は、割り込み対象の仮想計算機が、割り込み前に動作していた仮想計算機と同じではないと判断された場合、前記割り込み要因に対応付けられている優先度を、前記割り込み対象の仮想計算機に対する優先度として設定する仮想計算機優先度設定部をさらに含むことが好ましい。
この構成によれば、割り込み受取部によって判断された割り込み対象の仮想計算機が、割り込み前に動作していた仮想計算機と同じであるか否かが判断される。そして、割り込み対象の仮想計算機が、割り込み前に動作していた仮想計算機と同じではないと判断された場合、割り込み要因に対応付けられている優先度が、割り込み対象の仮想計算機に対する優先度として設定される。
したがって、割り込み対象の仮想計算機が、割り込み前に動作していた仮想計算機と同じではない場合、割り込み前に動作していた仮想計算機とは異なる割り込み対象の他の仮想計算機を優先して実行することができる。
また、上記の仮想計算機制御装置において、前記タスク実行部によって通知される前記優先度を記憶する優先度記憶部をさらに備え、前記仮想計算機制御部は、前記割り込み要因に対応付けられている優先度と、前記優先度記憶部に記憶されている優先度とを比較し、前記割り込み要因に対応付けられている優先度が前記優先度記憶部に記憶されている優先度よりも高い場合、前記割り込み要因に対応付けられている優先度を、前記割り込み対象の仮想計算機に対する優先度として設定する仮想計算機優先度設定部をさらに含むことが好ましい。
この構成によれば、優先度記憶部には、タスク実行部によって通知される優先度が記憶されている。そして、割り込み要因に対応付けられている優先度と、優先度記憶部に記憶されている優先度とが比較され、割り込み要因に対応付けられている優先度が優先度記憶部に記憶されている優先度よりも高い場合、割り込み要因に対応付けられている優先度が、割り込み対象の仮想計算機に対する優先度として設定される。
したがって、割り込み要因に対応付けられている優先度が優先度記憶部に記憶されている優先度よりも高い場合、割り込み要因に対応付けられている優先度が、割り込み対象の仮想計算機に対する優先度として設定されるので、割り込みが発生した場合に、必ずしも割り込みを実行するのではなく、より優先度の高いタスクを優先して実行することができる。
また、上記の仮想計算機制御装置において、各仮想計算機の実行コンテキストを記憶する実行コンテキスト記憶部をさらに備え、前記仮想計算機制御部は、切り替え前の仮想計算機に対応する実行コンテキストを前記実行コンテキスト記憶部に退避させ、切り替え後の仮想計算機に対応する実行コンテキストを前記実行コンテキスト記憶部から復帰させることが好ましい。
この構成によれば、実行コンテキスト記憶部には、各仮想計算機の実行コンテキストが記憶されている。そして、切り替え前の仮想計算機に対応する実行コンテキストが実行コンテキスト記憶部に退避され、切り替え後の仮想計算機に対応する実行コンテキストが実行コンテキスト記憶部から復帰される。
したがって、仮想計算機が切り替わる前に、切り替え前の仮想計算機に対応する実行コンテキストが退避されるので、中断時の状態から切り替えタスクを実行することができる。
また、上記の仮想計算機制御装置において、前記タスク実行部によって通知される前記優先度を記憶する優先度記憶部をさらに備え、前記仮想計算機制御部は、前記タスク実行部によって通知される前記優先度と切り替え指示とを受け取った場合、切り替え前の仮想計算機に対応する実行コンテキストを前記実行コンテキスト記憶部に退避させ、前記タスク実行部によって通知される前記優先度を前記優先度記憶部に記憶し、切り替え後の仮想計算機に対応する実行コンテキストを前記実行コンテキスト記憶部から復帰させ、切り替え後の仮想計算機に含まれる前記タスク実行部は、中断された切り替えタスクを再度実行し、切り替え後の仮想計算機に含まれる前記優先度設定部は、前記優先度記憶部に記憶されている切り替え前の仮想計算機の前記優先度を取得し、取得した前記優先度を切り替えタスクの優先度として設定することが好ましい。
この構成によれば、優先度記憶部には、タスク実行部によって通知される優先度が記憶されている。そして、仮想計算機制御部は、タスク実行部によって通知される優先度と切り替え指示とを受け取った場合、切り替え前の仮想計算機に対応する実行コンテキストを実行コンテキスト記憶部に退避させ、タスク実行部によって通知される優先度を優先度記憶部に記憶する。その後、仮想計算機制御部は、切り替え後の仮想計算機に対応する実行コンテキストを実行コンテキスト記憶部から復帰させる。切り替え後の仮想計算機に含まれるタスク実行部は、中断された切り替えタスクを再度実行し、切り替え後の仮想計算機に含まれる優先度設定部は、優先度記憶部に記憶されている切り替え前の仮想計算機の優先度を取得し、取得した優先度を切り替えタスクの優先度として設定する。
したがって、切り替え後の仮想計算機に対応する実行コンテキストが実行コンテキスト記憶部から復帰した後、切り替え後の仮想計算機の中断されていた切り替えタスクが再度実行され、切り替え前の仮想計算機の優先度が切り替えタスクの優先度として設定されるので、切り替え後の仮想計算機の切り替えタスクの優先度を、切り替え前の仮想計算機の最も優先度の高いタスクの優先度に設定することができる。
また、上記の仮想計算機制御装置において、前記実行コンテキスト記憶部は、前記仮想計算機制御部によって退避された実行コンテキストを仮想計算機毎に記憶し、前記タスク実行部は、現在動作中の仮想計算機に障害が発生した場合、前記仮想計算機制御部に対し、現在動作中の仮想計算機に障害が発生したことを表す障害優先度を通知し、前記仮想計算機制御部は、前記タスク実行部によって通知される前記障害優先度を受け取った場合、前記実行コンテキスト記憶部に記憶されている最も古い実行コンテキストを復帰させることが好ましい。
この構成によれば、実行コンテキスト記憶部には、仮想計算機制御部によって退避された実行コンテキストが仮想計算機毎に記憶されている。そして、タスク実行部は、現在動作中の仮想計算機に障害が発生した場合、仮想計算機制御部に対し、現在動作中の仮想計算機に障害が発生したことを表す障害優先度を通知する。仮想計算機制御部は、タスク実行部によって通知される障害優先度を受け取った場合、実行コンテキスト記憶部に記憶されている最も古い実行コンテキストを復帰させる。
したがって、現在動作中の仮想計算機に障害が発生した場合であっても、実行コンテキスト記憶部に記憶されている最も古い実行コンテキストが復帰されるので、仮想計算機を障害が発生する前の状態に戻すことができる。
本発明の他の局面に係る仮想計算機制御方法は、タスクの優先度に基づき実行するタスクのスケジューリングを行うオペレーティングシステムをそれぞれ含む複数の仮想計算機の切り替えを制御する仮想計算機制御方法であって、現在動作中の仮想計算機を切り替え対象である他の仮想計算機に切り替える切り替え処理を実行するための切り替えタスクを実行するタスク実行ステップと、現在動作中の仮想計算機自身の実行可能なタスクの中から最も優先度の高いタスクの優先度を取得する優先度取得ステップと、前記切り替えタスクの優先度を、前記他の仮想計算機の前記優先度取得ステップにおいて取得された前記優先度に設定する優先度設定ステップと、前記オペレーティングシステムのタスクスケジューリングにより前記切り替えタスクを実行した場合、前記優先度取得ステップにおいて取得された前記優先度と、現在動作中の仮想計算機を前記他の仮想計算機に切り替える切り替え指示とを通知する通知ステップと、前記通知ステップにおいて通知される前記優先度と切り替え指示とを受け取り、現在動作中の仮想計算機を前記他の仮想計算機に切り替える切り替えステップとを含む。
この構成によれば、タスク実行ステップは、現在動作中の仮想計算機を切り替え対象である他の仮想計算機に切り替える切り替え処理を実行するための切り替えタスクを実行する。優先度取得ステップは、現在動作中の仮想計算機自身の実行可能なタスクの中から最も優先度の高いタスクの優先度を取得する。優先度設定ステップは、切り替えタスクの優先度を、他の仮想計算機の優先度取得ステップにおいて取得された優先度に設定する。通知ステップは、オペレーティングシステムのタスクスケジューリングにより切り替えタスクを実行した場合、優先度取得ステップにおいて取得された優先度と、現在動作中の仮想計算機を他の仮想計算機に切り替える切り替え指示とを通知する。切り替えステップは、通知ステップにおいて通知される優先度と切り替え指示とを受け取り、現在動作中の仮想計算機を他の仮想計算機に切り替える。
したがって、切り替えタスクの優先度が、他の仮想計算機における最も優先度の高いタスクの優先度に設定され、仮想計算機が切り替える場合にのみ、切り替えタスクが実行されるので、仮想計算機の中断と復帰との処理回数が削減され、仮想計算機の切り替えに要するオーバーヘッドを削減することができる。
本発明の他の局面に係る仮想計算機制御プログラムは、タスクの優先度に基づき実行するタスクのスケジューリングを行うオペレーティングシステムをそれぞれ含む複数の仮想計算機と、前記複数の仮想計算機の切り替えを制御する仮想計算機制御部としてコンピュータを機能させ、前記複数の仮想計算機の各々は、現在動作中の仮想計算機を切り替え対象である他の仮想計算機に切り替える切り替え処理を実行するための切り替えタスクを実行するタスク実行部と、現在動作中の仮想計算機自身の実行可能なタスクの中から最も優先度の高いタスクの優先度を取得する優先度取得部と、前記切り替えタスクの優先度を、前記他の仮想計算機の前記優先度取得部によって取得された前記優先度に設定する優先度設定部とを含み、前記タスク実行部は、前記オペレーティングシステムのタスクスケジューリングにより前記切り替えタスクを実行した場合、前記仮想計算機制御部に対し、前記優先度取得部によって取得された前記優先度と、現在動作中の仮想計算機を前記他の仮想計算機に切り替える切り替え指示とを通知し、前記仮想計算機制御部は、前記タスク実行部から通知される前記優先度と切り替え指示とを受け取り、現在動作中の仮想計算機を前記他の仮想計算機に切り替える。
この構成によれば、複数の仮想計算機は、タスクの優先度に基づき実行するタスクのスケジューリングを行うオペレーティングシステムをそれぞれ含み、仮想計算機制御部は、複数の仮想計算機の切り替えを制御する。タスク実行部は、現在動作中の仮想計算機を切り替え対象である他の仮想計算機に切り替える切り替え処理を実行するための切り替えタスクを実行し、優先度取得部は、自仮想計算機の実行可能なタスクの中から最も優先度の高いタスクの優先度を取得し、優先度設定部は、切り替えタスクの優先度を、他の仮想計算機の優先度取得部によって取得された優先度に設定する。タスク実行部は、オペレーティングシステムのタスクスケジューリングにより切り替えタスクを実行した場合、仮想計算機制御部に対し、優先度取得部によって取得された優先度と、現在動作中の仮想計算機を他の仮想計算機に切り替える切り替え指示とを通知する。仮想計算機制御部は、タスク実行部によって通知される優先度と切り替え指示とを受け取り、現在動作中の仮想計算機を他の仮想計算機に切り替える。
したがって、切り替えタスクの優先度が、他の仮想計算機における最も優先度の高いタスクの優先度に設定され、仮想計算機が切り替える場合にのみ、切り替えタスクが実行されるので、仮想計算機の中断と復帰との処理回数が削減され、仮想計算機の切り替えに要するオーバーヘッドを削減することができる。
なお、発明を実施するための形態の項においてなされた具体的な実施態様又は実施例は、あくまでも、本発明の技術内容を明らかにするものであって、そのような具体例にのみ限定して狭義に解釈されるべきものではなく、本発明の精神と特許請求事項との範囲内で、種々変更して実施することができるものである。
本発明にかかる仮想計算機制御装置、仮想計算機制御方法及び仮想計算機制御プログラムは、複数の仮想計算機を有する大型計算機及びパーソナルコンピュータ等に有用である。また、本発明にかかる仮想計算機制御装置、仮想計算機制御方法及び仮想計算機制御プログラムは、AV機器などの家電機器、携帯電話のような通信機器、産業機器及び乗用機器等の用途にも有用である。