以下に添付図面を参照して、開示のスケジューリングプログラム、および情報処理装置の実施の形態を詳細に説明する。
(実施の形態1の説明)
図1は、実施の形態1にかかる情報処理装置100の動作例を示す説明図である。情報処理装置100は、CPU(Central Processing Unit)101、メモリ102を含む。CPU101とメモリ102は、バス103で接続されている。CPU101は、情報処理装置100を制御する。メモリ102は、CPU101からアクセス可能な記憶装置である。
また、CPU101は、ハイパーバイザ111を実行している。ハイパーバイザ111は、コンピュータを仮想化し、複数のOSを実行できるように制御するソフトウェアである。図1の例では、ハイパーバイザ111は、仮想マシンVM(Virtual Machine)1、仮想マシンVM2、優先制御VM112を稼働させる。また、ハイパーバイザ111は、仮想マシンVM1、仮想マシンVM2のうち、CPU101に割り当てるVMを選択するスケジューリング処理を実行し、スケジューリング処理で選択されたVMをCPU101に割り当てる。
仮想マシンVM1、仮想マシンVM2は、情報処理装置100で動作する仮想的なコンピュータである。たとえば、仮想マシンVM1、仮想マシンVM2は、情報処理装置100のハードウェア資源となるCPU101、メモリ102等を仮想化し、仮想化された実行環境をVM上で実行されるソフトウェアに提供するソフトウェアである。図1の例では、VM1上で実行されるソフトウェアがOS1であり、OS1は、アプリAとアプリBを実行している。同様に、VM2上で実行されるソフトウェアがOS2であり、OS2は、アプリCを実行している。
なお、以下の説明において、アプリの状態として、実行可能状態と実行状態という用語を定義する。実行可能状態にあるアプリとは、OSによってアプリの実行情報をメモリ102に展開され、OSによって対象のアプリが起動完了しており、OSのスケジュールリング処理の対象として存在している状態である。以下、実行可能状態にあるアプリを実行可能アプリと称する。実行状態にあるアプリとは、実行可能アプリ群のうち、スケジュールリング処理によってCPU101に割り当てられたアプリである。以下、実行状態にあるアプリを実行中アプリと称する。
なお、アプリの状態としては、実行可能状態と実行状態以外に、待機状態が存在する。待機状態にあるアプリとは、実行状態に入出力処理等が始まり、待機状態に遷移したアプリである。なお、待機状態にあるアプリは、入出力処理等が完了して実行できる状態になった場合、実行可能状態に遷移する。なお、本実施の形態では、実行可能アプリ群に待機状態にあるアプリを含めてもよい。
また、以下の説明において、OSによってアプリの実行情報がメモリ102に展開され、起動処理が完了したアプリを、起動完了したアプリと定義する。起動完了したアプリは、実行可能状態、実行状態、待ち状態、のうちいずれかの状態に遷移する。以下の説明において、起動完了したアプリは、実行可能状態にあるアプリ、実行状態にあるアプリ、待ち状態にあるアプリを含む。
優先制御VM112は、各VMでの実行可能アプリに応じて、実行可能アプリに対する優先情報をハイパーバイザ111に通知する機能を有する。なお、優先情報は、実行可能アプリに対する優先度を示している。また、優先情報には、アプリを特定しない場合のデフォルトの優先度が含まれていてもよい。優先制御VM112の機能は仮想マシンとして実装されているが、優先制御VM112の機能がハイパーバイザ111に含まれていてもよい。
また、情報処理装置100は、優先アプリパターンテーブル113とアプリ優先情報テーブル114にアクセス可能である。優先アプリパターンテーブル113とアプリ優先情報テーブル114は、メモリ102に格納されている。優先アプリパターンテーブル113は、起動完了したソフトウェア群の組合せごとに起動完了したソフトウェア群の各ソフトウェアの優先度を記憶するテーブルである。なお、優先アプリパターンテーブル113の詳細は、図6にて後述する。アプリ優先情報テーブル114は、VMごとに、実行中アプリと実行可能アプリとアプリの優先情報を組み合わせて保持するテーブルである。なお、アプリ優先情報テーブル114の詳細は、図7にて後述する。
上述の形態をとる情報処理装置100において、OS1が新たにアプリBを起動した状態を想定する。このとき、優先制御VM112は、1つ目のVMとなるVM番号1でアプリA、アプリBが実行可能アプリであり、2つ目のVMとなるVM番号2でアプリCが実行可能アプリであることを特定する。続けて、優先制御VM112は、特定結果に基づいて優先アプリパターンテーブル113に登録されたパターンのうち、最も適したパターンを選択する。図1の例では、VM番号1にアプリBが含まれており、同様にパターン番号1にアプリBが含まれているため、優先制御VM112は、パターン番号1を選択する。選択後、優先制御VMは、選択されたパターンから、アプリの優先情報を抽出し、抽出された優先情報をハイパーバイザ111に通知する。
ハイパーバイザ111は、優先制御VM112より通知を受け付けると、アプリ優先情報テーブル114のうち、VM1の、アプリBの優先情報を受け付けた値“1”に更新する。
更新後、ハイパーバイザ111は、アプリ優先情報テーブル114のVM1の実行中アプリフィールドをアプリBに更新する。続けて、ハイパーバイザ111は、全VM内で実行中アプリのうち、最高の優先情報が設定されたアプリを実行するVMを選択する。なお、アプリ優先情報テーブル114’は、アプリ優先情報テーブル114のレコードから全VM内で実行中アプリのみ表示したイメージである。図1の例では、アプリCが、優先情報が最高のアプリであるため、ハイパーバイザ111は、実行可能VM群となるVM1、VM2のうち、VM2を実行VMとしてCPUに割り当てて実行する。
このように、情報処理装置100は、複数のOSの各々で実行可能状態のアプリが起動または終了したことを受け付けると、各OSの実行可能アプリの組合せに応じてアプリの優先度を更新する。これにより、情報処理装置100は、OSが設定している優先度を用いずに、装置全体で動作するアプリの実行状況に合わせて、OSをスケジューリングすることができる。以下、図2〜図16において、実施の形態1にかかる情報処理装置100の説明を行う。
(情報処理装置100のハードウェア)
図2は、実施の形態1にかかる情報処理装置100のハードウェア例を示すブロック図である。図2において、情報処理装置100は、CPU101と、ROM(Read‐Only Memory)201と、RAM202と、を含む。また、情報処理装置100は、フラッシュROM203と、フラッシュROMコントローラ204と、フラッシュROM205と、を含む。また、情報処理装置100は、ユーザやその他の機器との入出力装置として、ディスプレイ206と、I/F(Interface)207と、キーボード208と、を含む。また、各部はバス103によってそれぞれ接続されている。なお、図1で示したメモリ102は、ROM201、RAM202、フラッシュROM203、フラッシュROM205の全て、あるいは一部となる。
ここで、CPU101は、情報処理装置100の全体の制御を司る。本実施の形態における情報処理装置100は、CPUが一つであるシングルコアプロセッサシステムを想定しているが、複数のCPUを含むマルチコアプロセッサシステムであってもよい。また、マルチコアプロセッサシステムとは、コアが複数搭載されたプロセッサを含むコンピュータのシステムである。コアが複数搭載されていれば、複数のコアが搭載された単一のプロセッサでもよく、シングルコアのプロセッサが並列されているプロセッサ群でもよい。また、CPU101は、専用のキャッシュメモリを含んでもよい。また、CPU101とバス103は、MMU(Memory Management Unit)210で接続されている。
MMU210は、CPU101の要求するメモリアクセスを処理する。具体的に、MMU210は、アプリがアクセスする仮想アドレスとRAM202のアドレスである物理アドレスとを1エントリとするページテーブルにアクセスし、CPU101から仮想アドレスのアクセスが発生すると、物理アドレスのアクセスに変換する。また、MMU210は、ページテーブルのエントリをキャッシュするTLB(Translation Lookaside Buffer)にアクセス可能である。このページテーブルのエントリは、アプリごとに有してもよい。
さらに、TLBには、アプリごとの仮想アドレス空間を識別するASID(Address Space IDentifier)が含まれていてもよい。ASIDは、同じ仮想アドレスに対するページテーブルのエントリを識別するIDである。ASIDが存在しないTLBは、複数のアプリのページエントリを混在させることができず、OSがアプリを切り替えたときにTLBのフラッシュが行われる。しかし、ASIDを含むTLBでは、ASIDをアプリに対応づけることにより、OSがアプリを切り替えたときにアプリTLBのフラッシュを行わなくてもよく、アプリ切替によるコストを低減することができる。
ROM201は、ブートプログラムなどのプログラムを記憶している。RAM202は、CPU101のワークエリアとして使用される。フラッシュROM203は、読出し速度が高速なフラッシュROMであり、たとえば、NOR型フラッシュメモリである。フラッシュROM203は、OSなどのシステムソフトウェアやアプリなどを記憶している。たとえば、OSを更新する場合、情報処理装置100は、I/F207によって新しいOSを受信し、フラッシュROM203に格納されている古いOSを、受信した新しいOSに更新する。
フラッシュROMコントローラ204は、CPU101の制御に従ってフラッシュROM205に対するデータのリード/ライトを制御する。フラッシュROM205は、データの保存、運搬を主に目的としたフラッシュROMであり、たとえば、NAND型フラッシュメモリである。フラッシュROM205は、フラッシュROMコントローラ204の制御で書き込まれたデータを記憶する。データの具体例としては、情報処理装置100を使用するユーザがI/F207を通して取得した画像データ、映像データなどや、また本実施の形態にかかるスケジューリングプログラムなどを記憶してもよい。フラッシュROM205は、たとえば、メモリカード、SDカードなどを採用することができる。
ディスプレイ206は、カーソル、アイコンあるいはツールボックスを始め、文書、画像、機能情報などのデータを表示する。ディスプレイ206は、たとえば、TFT(Thin Film Transistor)液晶ディスプレイなどを採用することができる。
I/F207は、通信回線を通じてLAN(Local Area Network)、WAN(Wide Area Network)、インターネットなどのネットワーク209に接続され、ネットワーク209を介して他の装置に接続される。そして、I/F207は、ネットワーク209と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。I/F207には、たとえばモデムやLANアダプタなどを採用することができる。
キーボード208は、数字、各種指示などの入力のためのキーを有し、データの入力を行う。また、キーボード208は、タッチパネル式の入力パッドやテンキーなどであってもよい。
(情報処理装置100の機能)
次に、情報処理装置100の機能について説明する。図3は、情報処理装置100の機能例を示すブロック図である。なお、情報処理装置100は、各機能からアクセスされるテーブルとして、優先アプリパターンテーブル113と、アプリ優先情報テーブル114と、実行可能アプリ情報テーブル301と、アプリ実行情報テーブル302と、にアクセス可能である。また、優先アプリパターンテーブル113と、アプリ優先情報テーブル114と、実行可能アプリ情報テーブル301と、アプリ実行情報テーブル302と、はメモリ102に格納されている。なお、実行可能アプリ情報テーブル301と優先アプリパターンテーブル113は優先制御VM112によってアクセスされ、アプリ実行情報テーブル302とアプリ優先情報テーブル114は、ハイパーバイザ111によってアクセスされる。
情報処理装置100は、アプリ通知部311とアプリ実行情報管理部312と優先情報設定部313とアプリ優先情報管理部314と実行アプリ特定部315と実行VM選択部316とを含む。さらに、情報処理装置100は、アプリ通知部311〜実行VM選択部316内に、検出部321と受付部322と特定部323と特定部324と選択部325と抽出部326と更新部327と判断部328と検出部329と判断部330と選択部331を含む。この制御部となる機能(検出部321〜選択部331)は、記憶装置に記憶されたプログラムをCPU101が実行することにより、その機能を実現する。記憶装置とは、具体的には、たとえば、図2に示したROM201、RAM202、フラッシュROM203、フラッシュROM205などである。
なお、検出部321−1、検出部321−2は、それぞれ、アプリ通知部311−1、アプリ通知部311−2に含まれる。また、受付部322と特定部323はアプリ実行情報管理部312に含まれ、特定部324と選択部325と抽出部326は優先情報設定部313に含まれ、更新部327と判断部328はアプリ優先情報管理部314に含まれる。また、検出部329と判断部330は実行アプリ特定部315に含まれ、選択部331は実行VM選択部316に含まれる。
なお、アプリ通知部311は、仮想マシンVM1、仮想マシンVM2に含まれる機能である。具体的には、アプリ通知部311−1が仮想マシンVM1に含まれる機能であり、アプリ通知部311−2が仮想マシンVM2に含まれる機能である。アプリ実行情報管理部312、アプリ優先情報管理部314〜実行VM選択部316がハイパーバイザ111に含まれる機能であり、優先情報設定部313が優先制御VM112に含まれる機能である。なお、優先情報設定部313は、ハイパーバイザ111に含まれる機能であってもよい。
なお、仮想マシンVM1、仮想マシンVM2の実装方法として、2種類の方法が存在する。1つ目の仮想化方法は、OSを修正することなくそのまま動作可能とする完全仮想化であり、2つ目の仮想化方法は、特権命令をハイパーバイザ111への呼び出しに修正してOSを動作させる準仮想化である。なお、ハイパーバイザ111への呼び出しは、ハイパーコールと称される。
実装方法が完全仮想化である場合、仮想マシンVM1、仮想マシンVM2のハイパーバイザ111への通知方法は、VM上で特権命令が実行されたときにCPU101が例外を発生させることで、ハイパーバイザ111への通知が可能である。
実装方法が準仮想化の場合、仮想マシンVM1、仮想マシンVM2のハイパーバイザ111への通知方法は、ハイパーコールを実行することにより可能である。なお、ハイパーコールは、ソフトウェア割込みなどのCPU101の機能を利用して実現される。また、実装方法が完全仮想化であるVMも、ハイパーコールによる通知が可能である。これらの通知機能を利用して、VMは、ハイパーバイザ111に指示を出す。
実行可能アプリ情報テーブル301は、VMごとに、VM上のOSで起動完了したアプリ群を記憶するテーブルである。実行可能アプリ情報テーブル301は、VMとアプリの識別情報とを1レコードとして記憶している。実行可能アプリ情報テーブル301の詳細については、図4にて後述する。
アプリ実行情報テーブル302は、VMごとに、アプリを特定可能なアプリIDとアプリ実行時情報を組合せとして保持するテーブルである。なお、アプリ実行時情報とは、OSで実行中のアプリをハイパーバイザ111が特定可能な情報である。アプリ実行情報テーブル302の詳細については、図5にて後述する。
アプリ通知部311は、VM上のOSでアプリが起動され、起動完了した場合、または、アプリが終了する場合に、アプリ実行情報管理部312に通知する。アプリ実行情報管理部312に通知する情報は、アプリIDとアプリ実行時情報である。
アプリ実行情報管理部312は、アプリ通知部311からのアプリ起動とアプリ終了の通知を受け付け、アプリ起動時には、アプリIDとアプリ実行時情報をアプリ実行情報テーブル302に登録する。アプリ実行情報管理部312は、アプリ終了時に、通知を受け付けたアプリIDに対応するレコードをアプリ実行情報テーブル302から削除する。また、アプリ実行情報管理部312は、アプリの登録削除を優先情報設定部313へ通知する。なお、通知する情報は、登録または削除があったアプリが実行されているVM IDと、アプリIDである。
優先情報設定部313は、アプリ実行情報管理部312からのアプリ起動とアプリ終了の通知を受け付け、アプリ起動時にVM IDとアプリIDを実行可能アプリ情報テーブル301に登録する。また、優先情報設定部313は、アプリ終了時にVM IDとアプリ IDのレコードを実行可能アプリ情報テーブル301から削除する。また、優先情報設定部313は、実行可能アプリ情報テーブル301と優先アプリパターンテーブル113から、実行可能アプリ情報テーブル301に登録されているアプリに対する優先情報を抽出する。抽出後、優先情報設定部313は、アプリ優先情報管理部314へ優先情報を通知する。
なお、優先情報設定部313は、ハイパーバイザ111の機能でもよい。優先情報設定部313が受けるアプリ実行情報管理部312からのアプリ起動とアプリ終了の通知は、優先情報設定部313が仮想マシンの機能である場合、割込みハンドラをコールバックすることにより可能である。
アプリ優先情報管理部314は、優先情報設定部313にて決定されたアプリごとの優先情報を受け付け、アプリ優先情報テーブル114を更新する。実行アプリ特定部315は、VM上のOSによるアプリ切替時に、アプリ実行情報テーブル302を参照して切替後のアプリを特定する。実行VM選択部316は、ハイパーバイザ111内のスケジューラであり、どのVMをスケジューリングするかを、アプリ優先情報を用いて決定する。
検出部321は、複数のOSのいずれかのOSで起動完了したソフトウェアの起動数が変更されたことを検出する機能を有する。起動数とは、起動完了したソフトウェアの数である。なお、起動完了したソフトウェアの起動数が変更される場合として、アプリが起動する場合、またはアプリが終了する場合が存在する。たとえば、検出部321は、VM1上のOS1で、アプリAが起動され起動完了すると、起動完了したソフトウェアの起動数が変更されたこととして検出する。なお、検出されたデータは、CPU101のレジスタ、CPU101のキャッシュメモリ、RAM202、フラッシュROM203などの記憶領域に記憶される。
受付部322は、複数のOSのいずれかのOSから起動完了したソフトウェアの起動数の変更を受け付ける機能を有する。たとえば、受付部322は、OS1からアプリAが起動され起動完了し、起動完了したソフトウェアの起動数が増加したという通知を受け付ける。また、受付部322は、起動完了したソフトウェアの起動数が増加する原因となったアプリAの情報を受け付けてもよい。なお、通知を受け付けたという結果は、CPU101のレジスタ、CPU101のキャッシュメモリ、RAM202、フラッシュROM203などの記憶領域に記憶されてもよい。
特定部323、特定部324は、起動数の変更を受け付けた場合、起動数の変更後における複数のOSの各々で起動完了したソフトウェア群を特定する機能を有する。たとえば、受付部322が、OS1内でアプリAが起動され、起動完了したソフトウェアの起動数が増加したという通知を受け付けた場合を想定する。このとき、特定部323は、増加の原因となったアプリAを起動したVMのVM IDとアプリAの識別情報をアプリ実行情報テーブル302に登録する。また、特定部324は、アプリAを起動したVMのVM IDとアプリAの識別情報を実行可能アプリ情報テーブル301に登録する。
また、受付部322が、OS1内でアプリAが終了し起動完了したソフトウェアの起動数が減少したという通知を受け付けた場合を想定する。このとき、特定部323は、アプリ実行情報テーブル302から、減少の原因となったアプリAを実行していたVMのVM IDとアプリAの識別情報を有するレコードを削除する。同様に、特定部324は、実行可能アプリ情報テーブル301から、アプリAを実行していたVMのVM IDとアプリAの識別情報を有するレコードを削除する。
このように、特定部323、特定部324は、アプリ実行情報テーブル302、実行可能アプリ情報テーブル301を更新することで、複数のOSで起動完了したアプリ群を特定した情報を保持し続けることができる。なお、特定を行ったという結果は、CPU101のレジスタ、CPU101のキャッシュメモリ、RAM202、フラッシュROM203などの記憶領域に記憶されてもよい。
選択部325は、第2のテーブルから、特定されたソフトウェア群に応じた組合せを選択する機能を有する。なお、第2のテーブルとは起動完了したソフトウェア群の組合せごとに起動完了したソフトウェア群の各ソフトウェアの優先度を記憶する優先アプリパターンテーブル113である。
たとえば、特定部324が、VM1上のOS1でアプリA、アプリBが起動完了しVM2上のOS2でアプリCが起動完了していることを特定した場合を想定する。また、登録されているパターンが2つ存在しており、パターン番号1が、優先情報が1であるアプリBとアプリBを実行するOSとが登録されている状態を想定する。また、パターン番号2が、優先情報が5であるアプリBと優先情報が4であるアプリCとアプリBおよびアプリCを実行するOSとが登録されている状態を想定する。
このとき、選択部325は、優先アプリパターンテーブル113から、特定されたアプリ群に応じたパターン番号1を選択する。なお、パターンの選択方法については、図8にて後述する。また、選択されたパターンの番号、または選択されたパターンへのポインタ等が、CPU101のレジスタ、CPU101のキャッシュメモリ、RAM202、フラッシュROM203などの記憶領域に記憶される。
抽出部326は、選択された組合せから、特定されたソフトウェア群の各ソフトウェアの優先度を抽出する機能を有する。たとえば、選択部325が、アプリBの優先情報として1が登録されたパターンを選択した場合を想定する。このとき、抽出部326は、選択したパターンからアプリBの優先情報を抽出する。なお、抽出された優先情報は、CPU101のレジスタ、CPU101のキャッシュメモリ、RAM202、フラッシュROM203などの記憶領域に記憶される。
更新部327は、情報処理装置100で動作する複数のOSのうちOSごとに起動完了したソフトウェアの優先度を記憶する第1のテーブル内における特定されたソフトウェア群の各ソフトウェアの優先度を、抽出された優先度に更新する機能を有する。なお、第1のテーブルとは、アプリ優先情報テーブル114のことを示している。
たとえば、抽出部326がアプリBの優先情報として1を抽出した場合を想定する。このとき、更新部327は、アプリ優先情報テーブル114内のアプリBの優先情報に抽出した優先情報を更新する。なお、更新を行ったという情報は、CPU101のレジスタ、CPU101のキャッシュメモリ、RAM202、フラッシュROM203などの記憶領域に記憶されてもよい。
判断部328は、更新部327による更新後、特定されたソフトウェア群のうちいずれかのソフトウェアが実行状態にあるか否かを判断する機能を有する。たとえば、判断部328は、VM1上のOS1で実行されているアプリBの優先情報が更新された場合、アプリBが実行状態にあるか否かを判定する。
また、判断部328は、優先情報が更新されたソフトウェアを実行するOSが実行OSであるか否かを判断してもよい。なお、実行OSとは、実行VM上で動作しているOSのことである。たとえば、判断部328は、VM1上のOS1で実行されているアプリBの優先情報が更新された場合、OS1が実行OSであるか否かを判断する。
また、判断部328は、優先情報が更新されたソフトウェアの更新後の優先度と優先情報が更新されたソフトウェアの更新前の優先度との高低を判断してもよい。たとえば、判断部328は、アプリBの更新後の優先情報が更新前の優先情報より高いか否かを判断する。なお、判断結果は、CPU101のレジスタ、CPU101のキャッシュメモリ、RAM202、フラッシュROM203などの記憶領域に記憶される。
検出部329は、情報処理装置100で動作する複数のOSのうちいずれかのOSで実行状態にあるソフトウェアが切り替わったことを検出する機能を有する。たとえば、検出部329は、VM1上のOS1で、実行状態にあるアプリがアプリAからアプリBに切り替わったことを検出する。なお、具体的な切り替わったアプリの特定方法として、ページテーブルアドレスを用いた方法や、ASIDを用いた方法が存在する。なお、検出された切替後の実行状態にあるアプリの情報は、アプリ優先情報テーブル114に登録される他、CPU101のレジスタ、CPU101のキャッシュメモリなどの記憶領域に記憶されてもよい。
判断部330は、検出部329によって実行状態にあるソフトウェアの切替が検出された場合、切替前のソフトウェアの優先度と切替後のソフトウェアの優先度との高低を判断する機能を有する。たとえば、検出部329がアプリAからアプリBに切り替わった場合を想定する。このとき、判断部330は、変更前であるアプリAの優先度と変更後であるアプリBの優先度との高低を判断する。なお、判断結果は、CPU101のレジスタ、CPU101のキャッシュメモリ、RAM202、フラッシュROM203などの記憶領域に記憶される。
選択部331は、更新部327によって第1のテーブルが更新された場合に、第1のテーブルを参照して複数のOSのうち操作対象OSを選択する機能を有する。たとえば、選択部331は、アプリ優先情報テーブル114内の実行中アプリのうち、優先情報が最高の実行中アプリを実行するOSを選択する。
また、選択部331は、判断部328の判断による判断結果に基づいて、実行OSを選択してもよい。たとえば、VM1上のOS1で実行されているアプリBの優先情報が更新された場合を想定する。このとき、判断結果として、アプリBが実行状態にあり、かつ、アプリBを実行するOS1が実行OSであると判断され、かつ、アプリBの更新後の優先情報が更新前の優先情報より低いと判断された場合、選択部331は、実行OSを選択する。また、別の判断結果として、アプリBが実行状態にあり、かつ、アプリBを実行するOS1が実行OSでないと判断され、かつ、アプリBの更新後の優先情報が更新前の優先情報より高いと判断された場合、選択部331は、実行OSを選択する。
また、選択部331は、検出部329によって実行状態にあるソフトウェアが変更されたことが検出された場合に、実行OSを選択してもよい。また、選択部331は、判断部330による判断結果に基づいて、実行OSを選択してもよい。たとえば、判断部330による判断結果が切替後のアプリの優先度が切替前のアプリの優先度より低い場合に、選択部331は、実行OSを選択する。なお、選択された実行OSの識別情報は、CPU101のレジスタ、CPU101のキャッシュメモリ、RAM202、フラッシュROM203などの記憶領域に記憶される。
図4は、実行可能アプリ情報テーブル301の記憶内容の一例を示す説明図である。実行可能アプリ情報テーブル301は、VM ID、アプリIDという2つのフィールドを含む。VM IDフィールドには、VMを識別する識別情報が格納される。VMを識別する識別情報として、具体的には、VMの名称でもよいし、一意に採番された番号などでもよい。
アプリIDフィールドには、VM IDで指定されるVM上で動作するOSでの実行可能アプリを識別する識別情報が格納される。なお、アプリIDに設定される値は、一つのOSに閉じたIDではなく、ハイパーバイザ111や他のOSからも識別可能なIDである。アプリを識別する識別情報として、具体的には、アプリの名称でもよいし、アプリの名称からなんらかの変換によってアプリIDを算出してもよいし、アプリのファイル内に識別情報が埋め込まれていてもよい。また、アプリを識別しない場合に、アプリIDフィールドは、“unknown”を格納していてもよい。たとえば、図4の例では、VM1は、アプリA、アプリB、アプリAまたはアプリB以外の他のアプリを実行している。VM2は、何らかのアプリを実行している。
なお、図4で示す実行可能アプリ情報テーブル301では、先頭のレコード〜3番目のレコードのVM IDフィールドが結合されており、結合されたフィールドにVM1が格納されている。実行可能アプリ情報テーブル301は、このようなデータ形態をとってもよいし、各レコードのフィールドに同一の値が格納されていてもよい。以降説明を行う他のテーブルも同様である。
図5は、アプリ実行情報テーブル302の記憶内容の一例を示す説明図である。図5では、アプリ実行情報テーブル302が取り得る形態として、符号501で示す説明図と符号502で示す説明図と、の2種類のアプリ実行情報テーブル302が取り得る形態を説明する。アプリ実行情報テーブル302は、VM ID、アプリID、アプリ実行時情報という3つのフィールドを含む。VM IDフィールドには、VMを識別する識別情報が格納される。アプリIDフィールドには、VM IDで指定されるVM上で動作するOSでの実行可能アプリを識別する識別情報が格納される。アプリ実行時情報フィールドには、アプリIDフィールドにて識別されるアプリをハイパーバイザ111が特定可能な情報が格納される。なお、実行中アプリを特定せず、どのアプリであってもよい場合、アプリ実行時情報フィールドには、“ANY”が格納される。
符号501で示す説明図では、アプリ実行時情報フィールドにページテーブルアドレスが採用された例である。ページテーブルは、アプリに対して用意される仮想アドレスであり、アプリごとに異なる。したがって、ハイパーバイザ111は、アプリ切替に伴うページテーブルの切替要求時に、切替後のページアドレスとアプリ実行情報テーブル302のアプリ実行時情報とを比較することで、切替後のアプリを特定することができる。
たとえば、符号501で示すアプリ実行情報テーブル302では、VM1がアプリA、アプリB、アプリAまたはアプリB以外の他のアプリを起動している。アプリAは、ページテーブルを2つ使用しており、アドレスが0x12345678から始まるページテーブルと、アドレスが0x23456788から始まるページテーブルを使用している。アプリBは、アドレスが0x3456789Cから始まるページテーブルを使用している。アプリAまたはアプリB以外の他のアプリは、特定されないアプリである。ページテーブルとして、アドレスが0x456789ACから始まるページテーブルを使用しているアプリと、前述の4つのページテーブルアドレス以外のページテーブルを使用しているアプリは特定されない。
また、VM2のレコードは、VM2が起動された時点での初期状態を示している。このような場合、VM2ではアプリを特定できない状態である。ハイパーバイザ111によってアプリIDとアプリ実行時情報が登録されると、レコードが追加される。
符号502で示す説明図では、アプリ実行時情報フィールドにASIDが採用された例である。ASIDがアプリに対応づけられている場合、ハイパーバイザ111は、アプリ切替に伴うASID切替時に、切替後のASIDとアプリ実行情報テーブル302のアプリ実行時情報とを比較することで、切替後のアプリを特定することができる。
たとえば、符号502で示すアプリ実行情報テーブル302では、VM1がアプリA、アプリB、アプリAまたはアプリB以外の他のアプリを起動している。アプリAは、ASIDを2つ使用しており、ASID:1とASID:2を使用している。アプリBは、ASID:3を使用している。アプリAまたはアプリB以外の他のアプリは、特定されないアプリである。ASIDとして、ASID:4を使用しているアプリと、前述のASID:1〜4以外のIDを使用しているアプリは特定されない。また、VM2は、VM2が起動された時点での初期状態を示している。
図6は、優先アプリパターンテーブル113の記憶内容の一例を示す説明図である。テーブルは、パターン番号、VM番号、アプリID、優先情報という4つのフィールドを含む。パターン番号フィールドには、パターンを識別する識別情報が格納される。VM番号フィールドには、アプリを実行しているVMを区別するための番号が格納される。このように、VM番号とVM IDフィールドは異なる情報である。アプリIDフィールドには、対象パターン時にて実行しているアプリの識別情報が格納される。
優先情報フィールドには、アプリIDフィールドに格納されているアプリの優先度が格納される。なお、優先情報フィールドには、数字が大きい程優先度が高くなるように設定してもよいし、数字が小さい程優先度が高くなるように設定してもよい。本実施の形態にかかる優先情報フィールドの設定は、0が最も優先度が低く、数字が大きい程優先度が高くなる設定であると想定する。
たとえば、図6で示す優先アプリパターンテーブル113では、3つのパターンが登録されている。パターン番号1は、あるVMにて、優先情報が1となるアプリBが実行可能アプリである状態を示している。パターン番号2は、あるVMにて、優先情報が5となるアプリAと優先情報が4となるアプリBが実行可能アプリである状態を示している。パターン番号3は、あるVMにて、優先情報が5となるアプリAと優先情報が3となるアプリBが実行可能アプリであり、別のVMにて、優先情報が4となるアプリCと優先情報が2となるアプリDが実行可能アプリとなっている。
なお、アプリIDがunknownの優先情報については、デフォルトの優先情報を用意しておいてもよい。デフォルト以外の優先情報を設定する場合、優先アプリパターンテーブル113は、アプリIDフィールドがunknownのレコードを登録しておく。たとえば、パターン番号2は、アプリA、アプリB以外のアプリの優先情報が0である。パターン番号3は、あるVMで実行可能アプリである、アプリA、アプリB以外のアプリの優先情報が1であり、他のVMで実行可能アプリである、アプリC、アプリD以外のアプリの優先情報が0である。
たとえば、アプリBは、パターン番号1で示すように単独で実行している際には優先度が低いが、パターン番号2で示すようにアプリAが実行可能アプリである際には優先度が高くなる。このような設定は、アプリAとアプリBが連携して動作する際に有効である。
たとえば、アプリBが位置情報を取得するアプリであり、アプリAが現在地から特定の位置までの経路を案内するアプリであることを想定する。このとき、アプリBが実行可能アプリでありアプリAが起動していない場合、位置情報を積極的に取得しなくてよいため、情報処理装置100は、アプリBの優先度を低く設定する。しかし、アプリBが実行可能アプリであり、アプリAが起動完了し実行可能アプリとなった場合、位置情報を頻繁に取得することで、アプリAにて示される現在地がより正確となる。したがって、情報処理装置100は、アプリBとアプリAの優先度を他のアプリより高くすることで、ユーザに対してより実用的な優先度制御を行うことができる。
図7は、アプリ優先情報テーブル114の記憶内容の一例を示す説明図である。図7では、アプリ優先情報テーブル114が取り得る形態として、符号701で示す説明図と符号702で示す説明図と、の2種類のアプリ優先情報テーブル114が取り得る形態を説明する。
符号701の説明図で示すアプリ優先情報テーブル114は、VM1〜VM3がシングルコア用のVMである場合を示している。アプリ優先情報テーブル114は、VM ID、実行中アプリ、アプリID、優先情報という4つのフィールドを含む。VM IDフィールドには、VMを識別する識別情報が格納される。実行中アプリフィールドには、対象VMで実行中アプリの識別情報が格納される。アプリIDフィールドには、対象VMで実行可能アプリを識別する識別情報が格納される。優先情報フィールドには、実行可能アプリの優先情報が格納される。
たとえば、符号701の説明図で示すアプリ優先情報テーブル114にて、VM1は、優先情報が3であるアプリAと優先情報が5であるアプリBと優先情報が0であるアプリIDを特定しない何らかのアプリを起動しており(起動していない場合もある)、そのうちアプリAを実行している。同様に、VM2は、優先情報が4であるアプリCと優先情報が0であるアプリIDを特定しない何らかのアプリを起動しており(起動していない場合もある)、そのうちアプリCを実行している。また、VM3は、優先情報が1となるアプリIDを特定しない何らかのアプリを実行している。
符号702の説明図で示すアプリ優先情報テーブル114は、VMがマルチコアプロセッサシステムに対応している場合の記憶内容の一例である。符号702の説明図で示すアプリ優先情報テーブル114は、実行中アプリフィールドが、実行中アプリ0フィールドと実行中アプリ1フィールドに拡張されている。符号702で示す例では、VM1が2プロセッサに対応している状態を示している。VM1は、アプリAとアプリBを実行している。なお、VM2、VM3は、シングルコアプロセッサシステム用のVMであることを想定しているため、実行中アプリ0フィールドにアプリIDが設定され、実行中アプリ1フィールドには値が設定されない。
なお、符号701および符号702で示したアプリ優先情報テーブル114が取り得る2種類の形態とは異なる形態として、アプリ優先情報テーブル114は、実行中アプリフィールドの代わりに、実行中アプリフラグを有していてもよい。実行中アプリフラグフィールドは、アプリIDフィールドに格納されたアプリが実行中である場合に、フラグがオンに設定される。マルチコアプロセッサシステム対応のVMであれば、実行中アプリに対応するレコード分、実行中アプリフラグフィールドのフラグがオンに設定される。このようなデータ形態をもつことで、情報処理装置100内に含まれるCPU101がいくつであっても、アプリ優先情報テーブル114のフィールド数を一定にすることができる。
図8は、アプリ優先情報テーブル114の更新方法の一例を示す説明図である。初めに、優先制御VM112は、実行可能アプリ情報テーブル301を参照して、情報処理装置100のアプリの起動状態が、優先アプリパターンテーブル113に登録されているパターンのうち最も当てはまるパターンを選択する。具体的な選択方法としては、それぞれのパターンが、実行可能アプリ情報テーブル301の部分集合であるか否かで選択する。次に、優先制御VM112は、選択されたパターンから、全実行可能アプリに対する優先情報を抽出し、抽出された優先情報をハイパーバイザ111に通知する。
たとえば、パターン番号1は、あるVMにてアプリBが実行可能状態にある状態である。このとき、実行可能アプリ情報テーブル301ではアプリBが実行状態アプリであることを示しているため、パターン番号1は、実行可能アプリ情報テーブル301の部分集合となる。同様に、パターン番号2は、あるVMにてアプリAとアプリBが実行可能アプリである状態である。このとき、実行可能アプリ情報テーブル301がアプリAとアプリBが同一のVMとなるVM1で実行している状態を示しているため、パターン番号2は、実行可能アプリ情報テーブル301の部分集合となる。
パターン番号3は、あるVMにてアプリAとアプリBが実行可能アプリであり、別のVMでアプリCとアプリDが実行可能アプリである状態である。このとき、実行可能アプリ情報テーブル301がアプリAとアプリBが同一のVMとなるVM1で実行している状態を示しているが、別のVMとなるVM2ではアプリCとアプリDを実行していない。したがって、パターン番号3は、実行可能アプリ情報テーブル301の部分集合ではない。
以上より、パターン番号1とパターン番号2が実行可能アプリ情報テーブル301の部分集合となる。このように、複数のパターンが選択された場合に、さらに1つのパターンをどのように選択するかという方法については、たとえば、下記2つの選択方法が存在する。
1つ目の選択方法は、優先アプリパターンテーブル113に登録されているパターンについて、優先順位が高いパターンを先頭に登録しておき、最初に当てはまったパターンを選択する方法である。1つ目の方法であれば、優先制御VM112は、優先アプリパターンテーブル113のうち、パターン番号1を選択する。1つ目の選択方法は、選択にかかる時間を短くすることができる。
2つ目の選択方法は、抽出されたパターンのうち、最も大きな部分集合となるパターンを選択する方法である。2つ目の方法であれば、優先制御VM112は、優先アプリパターンテーブル113のうち、パターン番号2を選択する。2つ目の選択方法は、より情報処理装置100の実行状況にあったパターンを選択することができる。
1つ目または2つ目の選択方法によって選択されたパターンから、優先制御VM112は、全実行可能アプリに対する優先情報を決定する。なお、選択されたパターンに登録されていないアプリの優先情報については、デフォルト値の優先情報を設定してもよいし、アプリIDにunknownが設定された優先情報を設定してもよい。
なお、優先アプリパターンテーブル113に登録されているパターンが実行可能アプリ情報テーブル301の部分集合とならない場合も存在する。この場合、実行可能アプリ情報テーブル301が優先アプリパターンテーブル113に登録されているパターンのうち、部分集合となるパターンを選択してもよい。または、選択対象となるパターンが存在しなかったということで、優先制御VM112は、全てのアプリIDに対してunknownに設定されている優先情報をハイパーバイザ111に通知する。
選択されたパターンに登録されたアプリに対する優先情報が通知されたハイパーバイザ111は、対応する優先情報を更新する。図8の例では、パターン番号1に登録されたアプリに対する優先情報が通知された場合による更新例として、アプリ優先情報テーブル114−1を図示している。同様に、パターン番号2に登録されたアプリに対する優先情報が通知された場合による更新例として、アプリ優先情報テーブル114−2を図示している。
パターン番号1に登録されたアプリに対する優先情報が通知された場合、ハイパーバイザ111は、アプリBの優先情報を5から1に更新し、その他のアプリの優先情報をデフォルト値の0に更新する。また、パターン番号2に登録されたアプリに対する優先情報が通知された場合、ハイパーバイザ111は、アプリAの優先情報を3から5に更新し、アプリBの優先情報を5から4に更新し、その他のアプリの優先情報をデフォルト値の0に更新する。更新後にアプリ切替の通知を受けたハイパーバイザ111は、各VMのうち、実行中アプリの優先情報が最も高いVMを選択する。
たとえば、アプリ優先情報テーブル114−1の例では、ハイパーバイザ111は、VM1の実行中アプリであるアプリBの優先情報1と、VM2の実行中アプリであるアプリCの優先情報0とから、VM1を選択する。同様に、アプリ優先情報テーブル114−2の例では、ハイパーバイザ111は、VM1の実行中アプリであるアプリBの優先情報4と、VM2の実行中アプリであるアプリCの優先情報0とから、VM1を選択する。
このように、情報処理装置100は、OSが保持するアプリの優先度に影響されることなく、アプリの優先度を設定でき、OSに依存しない効率的なスケジューリングを行うことができる。
次に、図9、図10にて、既存スケジューラへの実施の形態1の適用例を示す。図9、図10では、仮想マシンを提供するソフトウェアの一つであるXen(登録商標)が採用するcreditスケジューラに対して実施の形態1を適用する場合について説明を行う。なお、図9、図10の説明の前に、creditスケジューラの動作について説明を行う。
creditスケジューラは、情報処理装置100で動作中のVMに対して、定期的にcreditという数値を配布する。続けて、creditスケジューラは、creditの保持量に応じて、動作中のVMに対してUNDERとOVERという二つの優先度を設定する。優先度の関係としては、UNDERがOVERよりも優先度が高い。設定された優先度により、creditスケジューラは、UNDER、OVERの順に、ランキューを並び替える。ランキューとは、実行可能なVMを実行順に並べたものである。creditスケジューラは、このランキューから順にVMを選択する。VMは、一定期間CPU101に割り当てられる。
VMは、一定期間全てCPU101を占有して実行してもよいが、デバイスからの割込み待ちなどでアイドルになった場合、CPU101を明け渡してもよい。CPU101を明け渡した場合、creditスケジューラは、ランキューから次のVMを選択する。その際、creditスケジューラは、実行した期間のcreditを減算する。
このように、creditスケジューラは、creditの消費が供給を上回らなければ、優先度が高いままでCPU101に割り当てられ、creditを消費すると優先度が下がり、実行が後回しになるというアルゴリズムである。
なお、creditスケジューラには、UNDERとOVER以外にBOOSTという優先度があるが、本実施の形態におけるスケジューリングプログラムでは直接適用しないため、説明を省略する。また、情報処理装置100がマルチコアプロセッサシステムである場合、ランキューはCPU101ごとに存在するが、説明の簡略化のため、情報処理装置100がシングルコアプロセッサシステムであることを想定し、ランキューが1つであると想定する。なお、実行しているVMはランキューから外され、再度実行待ちになったときにランキューに登録される。
図9は、既存スケジューラへの実施の形態1の適用例におけるアプリ切替前の状態を示す説明図である。符号901で示す説明図は、情報処理装置100のアプリ切替前の実行中VMとランキューの状態を示している。情報処理装置100は、VMとして、VM1、VM2、VM3の三つのVMを動作しており、VM1とVM2が優先度UNDERで、VM3が優先度OVERである。図9、図10の例では、creditスケジューラ上で同一の優先度である場合に、実施の形態1によるスケジューリングを適用する。
符号902で示す説明図は、アプリ切替前のアプリ優先情報テーブル114を示している。各VMのアプリの実行状態は、図7で示した状態と同一であるため説明を省略する。creditスケジューラによる優先度UNDERのVM1の優先情報は、実行中アプリであるアプリAの優先情報である3となり、VM2の優先情報は、実行中アプリであるアプリCの優先情報である4となる。したがって、ハイパーバイザ111は、VM2を選択し、実行VMをVM2に設定する。また、ランキューには、符号901で示すように優先度UNDERとOVERにより、VM1、VM3の順序で格納される。
図10は、既存スケジューラへの実施の形態1の適用例におけるアプリ切替後の状態を示す説明図である。図10では、VM2にてアプリが切り替えられたときの、操作対象VMの選択例を示している。符号1001で示す説明図は、切替後のアプリ優先情報テーブル114を示している。各VMのアプリの実行状態については、符号902で示したアプリ優先情報テーブル114と等しいので説明を省略する。
符号1001の説明図で示すアプリ優先情報テーブル114のように、VM2の実行中アプリがアプリCからunknownに切り替わり、優先情報が2に変更となる。この場合、ハイパーバイザ111は、実行アプリ特定部315を実行し、続けて、実行VM選択部316を実行する。実行VM選択部316の機能により、ハイパーバイザ111は、creditスケジューラによる優先度UNDERであるVM2とVM1を対象に、実行VMを選択する。
具体的な選択の様子を、符号1002で示す説明図にて示す。ハイパーバイザ111は、比較対象となる優先度UNDERであるVM1とVM2について、優先情報を比較する。比較結果、VM1の方が優先情報が高いため、ハイパーバイザ111は、VM1を選択し、VM1を実行VMに設定する。続けて、ハイパーバイザ111は、VM2をランキューに登録する。なお、VM2とVM3ではcreditスケジューラの優先度によってVM2の方が優先度が高いため、ハイパーバイザ111は、VM2、VM3の順にランキューに登録する。
なお、図9、図10では、ハイパーバイザ111は同じ優先度に対して比較を行っていたが、UNDERとOVERの全ての優先度のVMを対象として、実行VMを選択してもよい。その際に、ハイパーバイザ111は、そのまま優先情報を比較してもよいし、または、OVERとUNDERを比較するため、優先度がOVERであるVMの優先情報からある一定値を減算して、残りの値をUNDERのVMの優先情報と比較してもよい。また、creditスケジューラは、優先度が2種類であったが、3種類以上の優先度を有したスケジューラにも適用することが可能である。
また、ハイパーバイザ111は、VM上のOSが、ユーザモードで動作しているか、カーネルモードで動作しているかによって、アプリの優先情報を適用するかどうかを変更してもよい。OSは、ユーザモードで動作しているときはアプリが実際に動作しているが、カーネルモードで動作しているときはシステムコールやデバイスアクセス、アプリ切替といった処理を行っている。OSがカーネルモードで動作しているときに、アプリ切替が行われるため、より優先したいアプリに切り替わる可能性がある。このような場合も、ハイパーバイザ111がアプリの優先情報によって、スケジューリングを行ってしまうと、優先したいアプリの実行を遅らせてしまう。
したがって、OSがカーネルモードで動作している場合、ハイパーバイザ111は、アプリの優先情報を利用せずに、creditスケジューラの動作そのままとする。これにより、情報処理装置100は、優先したいアプリをタイミングよく実行することができる。
以下、図11〜図16にて、図3〜図7で示した機能、テーブルを用いて実施の形態1にかかる情報処理装置100の処理を示す。各処理は、ハイパーバイザ111の機能、優先制御VM112の機能、VM1、VM2の機能をCPU101が実行することで実現している。下記説明では、各処理がどのソフトウェアで実現されているかを記載するために、ハイパーバイザ111、優先制御VM112、VM1、VM2を実行主体として記述する。
図11は、アプリ通知部311の処理手順の一例を示すフローチャートである。アプリ通知部311は、仮想マシンであるVM1、VM2が実行する。図11の説明では、VM1が実行する場合を想定して説明を行う。なお、アプリ通知部311は、アプリの起動もしくは終了を契機に動作を開始する。フローチャートの説明の前に、アプリの起動時に実行される起動処理、アプリ終了時に実行される終了処理について説明を行う。
VM上のOSにおいて、アプリ起動は、システムコールにより、実行可能アプリのファイル名を含むコマンドを指定して行われる。起動処理は、簡略すると以下のような処理を実行する。初めに、OSは、プロセスを生成し、仮想アドレス空間を用意する。続けて、OSは、実行可能アプリのファイルを仮想アドレス空間に展開し、プログラムカウンタなどのレジスタを設定することで、アプリの実行を開始する。この過程において、プロセスIDやアプリの名称などの情報は、OSが保持する。以上がアプリ起動処理である。
次に、終了処理の説明を行う。OSは、メモリなどの資源を解放し、プロセスを削除する。この過程において、プロセスIDやプログラム名などの情報はゲストOSから削除される。アプリ通知部311は、これらのアプリの起動処理、終了処理に含まれてもよい。
VM1は、アプリが起動されたか否かを判断する(ステップS1101)。アプリが起動された場合(ステップS1101:Yes)、VM1は、アプリの名称をアプリIDとして取得する(ステップS1102)。取得後、VM1は、ページテーブルアドレスをアプリ実行時情報として取得し(ステップS1103)、アプリ実行情報管理部312へアプリ起動を通知し(ステップS1104)、アプリ通知部311の処理を終了する。
アプリが終了する場合(ステップS1101:No)、VM1は、アプリの名称をアプリIDとして取得し(ステップS1105)、アプリ実行情報管理部312へアプリ終了を通知し(ステップS1106)、アプリ通知部311の処理を終了する。
図12は、アプリ実行情報管理部312の処理手順の一例を示すフローチャートである。アプリ実行情報管理部312は、ハイパーバイザ111が実行する。また、アプリ実行情報管理部312は、アプリ通知部311からの通知を契機に動作を開始する。
ハイパーバイザ111は、通知元のVM IDを取得する(ステップS1201)。なお、ハイパーバイザ111は、現在動作中のVMのIDを取得することで、通知元のVM IDを取得することができる。たとえば、VM1が実行中であり、アプリ通知部311−1から通知されてきた場合、ハイパーバイザ111は、VM1を取得する。同様に、VM2が実行中であり、アプリ通知部311−2から通知されてきた場合、ハイパーバイザ111は、VM2を取得する。
取得後、ハイパーバイザ111は、アプリ起動を受け付けたか否かを判断する(ステップS1202)。アプリ起動を受け付けた場合(ステップS1202:Yes)、ハイパーバイザ111は、アプリIDとアプリ実行時情報と通知元のVM IDをアプリ実行情報テーブル302に登録する(ステップS1203)。登録後、ハイパーバイザ111は、優先情報設定部313へアプリ起動を通知し(ステップS1204)、アプリ実行情報管理部312の処理を終了する。
アプリ終了を受け付けた場合(ステップS1202:No)、ハイパーバイザ111は、アプリ実行情報テーブル302から通知元のVM IDとアプリIDとに一致するレコードを削除する(ステップS1205)。削除後、ハイパーバイザ111は、優先情報設定部313へアプリ終了を通知し(ステップS1206)、アプリ実行情報管理部312の処理を終了する。
図13は、優先情報設定部313の処理手順の一例を示すフローチャートである。優先情報設定部313は、優先制御VM112が実行する。また、優先情報設定部313は、アプリ実行情報管理部312からの通知を契機に動作を開始する。
優先制御VM112は、アプリ起動を受け付けたか否かを判断する(ステップS1301)。アプリ起動を受け付けた場合(ステップS1301:Yes)、優先制御VM112は、VM IDとアプリIDを実行可能アプリ情報テーブル301に登録する(ステップS1302)。また、アプリ終了を受け付けた場合(ステップS1301:No)、優先制御VM112は、実行可能アプリ情報テーブル301からVM IDとアプリIDが一致するレコードを削除する(ステップS1303)。
登録後、または削除後、優先制御VM112は、実行可能アプリ情報テーブル301と優先アプリパターンテーブル113から、全実行可能アプリに応じたパターンを選択する(ステップS1304)。選択後、優先制御VM112は、選択されたパターンから、全実行可能アプリの優先情報を抽出する(ステップS1305)。決定後、優先制御VM112は、アプリ終了を受け付けたか否かを判断する(ステップS1306)。アプリ終了以外を受け付けた場合(ステップS1306:No)、優先制御VM112は、アプリ優先情報管理部314へ優先情報と更新要求を通知し(ステップS1307)、優先情報設定部313の処理を終了する。
アプリ終了を受け付けた場合(ステップS1306:Yes)、優先制御VM112は、アプリ優先情報管理部314へ優先情報と削除要求を通知し(ステップS1308)、優先情報設定部313の処理を終了する。なお、通知される優先情報は、アプリ単位で通知してもよいし、またはVM単位、全実行可能アプリ、変更の差分、といった形で通知されてもよい。
図14は、アプリ優先情報管理部314の処理手順の一例を示すフローチャートである。アプリ優先情報管理部314は、ハイパーバイザ111が実行する。また、アプリ優先情報管理部314は、優先情報設定部313からの通知を契機に動作を開始する。ここでは、優先情報設定部313からの通知が、1レコードずつ行われる例を示す。優先情報設定部313からの通知は、複数レコードでも、VMごとのレコードでも、全てのレコードであってもよい。また、優先情報設定部313からの通知は、変更分のレコードであってもよい。通知される1レコード分の情報とは、VM IDとアプリIDと優先情報を一組とした情報である。
ハイパーバイザ111は、VM ID、アプリID、優先情報を取得する(ステップS1401)。取得後、ハイパーバイザ111は、アプリ優先情報テーブル114のうち、取得したVM IDとVM IDフィールドの値とが一致し、取得したアプリIDとアプリIDフィールドの値が一致するレコードを選択する(ステップS1402)。選択後、ハイパーバイザ111は、更新要求を受け付けたか否かを判断する(ステップS1403)。更新要求を受け付けた場合(ステップS1403:Yes)、ハイパーバイザ111は、続けて、レコードが選択できたか否かを判断する(ステップS1404)。
レコードが選択できた場合(ステップS1404:Yes)、ハイパーバイザ111は、選択したレコードに対して、取得した優先情報を更新する(ステップS1405)。レコードが選択できなかった場合(ステップS1404:No)、ハイパーバイザ111は、アプリ優先情報テーブル114に、取得したVM ID、アプリID、優先情報となるレコードを登録する(ステップS1406)。削除要求を受け付けた場合(ステップS1403:No)、ハイパーバイザ111は、選択したレコードをアプリ優先情報テーブル114から削除する(ステップS1407)。
更新、登録、削除のいずれかを行った後、ハイパーバイザ111は、取得したアプリIDが実行アプリと一致するか否かを判断する(ステップS1408)。一致する場合(ステップS1408:Yes)、ハイパーバイザ111は、取得したVM IDが実行VMか否かを判断する(ステップS1409)。実行VMである場合(ステップS1409:Yes)、ハイパーバイザ111は、続けて、取得した優先情報が更新前の優先情報より低いか否かを判断する(ステップS1410)。実行VMであり、更新前の優先情報より低い場合(ステップS1410:Yes)、ハイパーバイザ111は、実行VM選択部316を呼び出し(ステップS1412)、アプリ優先情報管理部314の処理を終了する。
実行VMでない場合(ステップS1409:No)、ハイパーバイザ111は、取得した優先情報が更新前の優先情報より高いか否かを判断する(ステップS1411)。更新前の優先情報より高い場合(ステップS1411:Yes)、ハイパーバイザ111は、ステップS1412の処理に移行する。実行VMであり、更新前の優先情報以上である場合(ステップS1410:No)、または、実行VMでなく、更新前の優先情報以下である場合(ステップS1411:No)、ハイパーバイザ111は、アプリ優先情報管理部314の処理を終了する。
一致しない場合(ステップS1408:No)、ハイパーバイザ111は、アプリ優先情報管理部314の処理を終了する。なお、ステップS1408の処理について、優先情報設定部313から削除要求が通知されてきた場合、アプリIDが実行アプリと一致することはない。したがって、ハイパーバイザ111は、削除要求が通知されてきた場合にステップS1408の処理を実行せずに、ステップS1408:Noのルートを実行してもよい。
また、ハイパーバイザ111は、ステップS1408:Yesとなった場合に、ステップS1409〜ステップS1411の判断処理を行わず、ステップS1412の処理を実行してもよい。この場合、ハイパーバイザ111は、判断にかかる時間を省くことができる。また、ステップS1409〜ステップS1411の判断処理を行った場合、ハイパーバイザ111は、実行VM選択部316の呼び出しを制限することができ、無駄なスケジューリング処理を抑えることができる。
図15は、実行アプリ特定部315の処理手順の一例を示すフローチャートである。実行アプリ特定部315は、ハイパーバイザ111が実行する。また、実行アプリ特定部315は、VM上OSのアプリ切替を契機に動作を開始する。
ハイパーバイザ111は、アプリ切替を検出し(ステップS1501)、アプリ切替を行ったOSのVM IDを取得する(ステップS1502)。取得後、ハイパーバイザ111は、切替後のページテーブルアドレスを取得する(ステップS1503)。
なお、ページテーブルアドレスの取得方法については、仮想マシンの実装方法が完全仮想化されたOSである場合、情報処理装置100は、ページテーブルの設定を行う命令により、OSからハイパーバイザ111に処理を遷移する。このとき、処理の遷移する原因となったページテーブル設定命令を解析することで、ハイパーバイザ111は、ページテーブルアドレスを取得できる。仮想マシンの実装方法が準仮想化されたOSである場合、ハイパーコールの引数として、切替後のページテーブルアドレスが指定されるため、ハイパーバイザ111は、引数からページテーブルアドレスを取得できる。
なお、ページテーブルアドレスとしては、物理アドレスが指定される。しかし、仮想ソフトウェアによって仮想化されている場合、仮想マシン上のOSは、実際の物理アドレスとは異なる仮想的な物理アドレスを使用している。このため、アプリ実行情報テーブル302に登録されているアプリ実行時情報のアドレス種類は、ステップS1503で取得するアドレスと同じ種類のアドレスが登録される。アドレスの種類としては、実際の物理アドレス、仮想的な物理アドレス、仮想アドレスが存在する。
ページテーブルアドレスを取得後、ハイパーバイザ111は、アプリ実行情報テーブル302のうち、取得したVM IDとVM IDフィールドの値が一致するレコード群を選択する(ステップS1504)。選択後、ハイパーバイザ111は、選択したレコード群のうち、切替後のページテーブルアドレスとアプリ実行時情報フィールドが一致するレコードのアプリIDを取得する(ステップS1505)。
取得後、ハイパーバイザ111は、選択されたレコード群の実行中アプリフィールドを取得したアプリIDに更新し(ステップS1506)、切替後の実行アプリの優先情報が切替前の実行アプリの優先情報より低いか否かを判断する(ステップS1507)。切替後の実行アプリの優先情報が低い場合(ステップS1507:Yes)、ハイパーバイザ111は、実行VM選択部316を呼び出し(ステップS1508)、実行アプリ特定部315の処理を終了する。切替後の実行アプリの優先情報が低くない場合(ステップS1507:No)、ハイパーバイザ111は、実行アプリ特定部315の処理を終了する。
なお、ハイパーバイザ111は、ステップS1507の判断処理を行わず、ステップS1507:Yesのルートを選択してステップS1508の処理を実行してもよい。この場合、ハイパーバイザ111は、判断にかかる時間を省くことができる。また、ステップS1507の判断処理を行った場合、ハイパーバイザ111は、実行VM選択部316の呼び出しを制限することができ、無駄なスケジューリング処理を抑えることができる。
図16は、実行VM選択部316の処理手順の一例を示すフローチャートである。実行VM選択部316は、スケジューラ機能の一部であるため、ハイパーバイザ111のVMスケジューラが動作するときに動作を開始する。また、実行VM選択部316は、実行アプリ特定部315によって実行アプリが変更された場合、またはアプリ優先情報管理部314によって優先情報が更新された場合に、呼び出される場合もある。
ハイパーバイザ111は、選択VMと選択優先情報を−1に設定する(ステップS1601)。なお、選択VMと選択優先情報は、選択するVMと選択するVMの優先情報を一時的に保持する変数である。設定後、ハイパーバイザ111は、アプリ優先情報テーブル114のVM IDと同一の値が格納されたレコード群を対象レコード群に設定する(ステップS1602)。続けて、ハイパーバイザ111は、対象レコード群から実行中アプリを取得し(ステップS1603)、実行中アプリのアプリIDに対応する優先情報を取得する(ステップS1604)。
取得後、ハイパーバイザ111は、取得した優先情報が選択優先情報より高いか否かを判断する(ステップS1605)。取得した優先情報が選択優先情報より高い場合(ステップS1605:Yes)、ハイパーバイザ111は、選択VMに対象レコード群のVM IDを設定し、選択優先情報に取得した優先情報を設定する(ステップS1606)。設定後、または取得した優先情報が選択優先情報以下の場合(ステップS1605:No)、ハイパーバイザ111は、現在の対象レコード群のVM IDとは異なるVM IDと同一の値が格納されたレコード群を対象レコード群に設定する(ステップS1607)。
設定後、ハイパーバイザ111は、全てのVM IDを処理したか否かを判断する(ステップS1608)。処理していないVM IDが存在する場合(ステップS1608:No)、ハイパーバイザ111は、ステップS1603の処理に移行する。全てのVM IDを処理した場合(ステップS1608:Yes)、ハイパーバイザ111は、実行VMを選択VMのVM IDに決定し(ステップS1609)、実行VM選択部316の処理を終了する。
以上説明したように、スケジューリングプログラム、および情報処理装置によれば、複数のOSの各々で実行可能アプリが起動または終了した場合、各OSの実行可能アプリの組合せに応じてアプリの優先度を更新する。これにより、情報処理装置は、各アプリの実行状況に合わせた優先度制御が行える。また、本実施の形態1にかかる情報処理装置は、各OSに設定されている優先度を用いないため、一方のOS内で設定された優先度によって、他のOSの動作を妨げる可能性を排除することができる。
また、情報処理装置は、優先情報の更新後、更新対象アプリが実行状態か否かと、更新対象アプリが実行OSで実行されているか否かと、更新対象アプリの更新前の優先度と更新後の優先度との高低と、に基づいて実行OSを選択してもよい。これにより、本実施の形態1にかかる情報処理装置は、無駄なスケジューリング処理を抑えることができる。
また、情報処理装置は、いずれかのOSで実行状態にあるアプリが切り替わったことを検出した場合、切替前のソフトウェアの優先度と切替後のソフトウェアの優先度との高低を判断した判断結果に基づいて、実行OSを選択してもよい。
(実施の形態2の説明)
実施の形態2にかかる情報処理装置100は、優先情報を決定するために、VMの切替や、VM上のOSにおけるフォアグラウンドアプリ変更の情報を利用する。なお、フォアグラウンドアプリとは、ユーザのキーボード208等による操作対象となっているアプリである。なお、操作対象VM上で動作する操作対象OSのフォアグラウンドアプリは、ディスプレイ206に表示される。また、切り替えられたアプリはバックグラウンドアプリとなる。バックグラウンドアプリは、ユーザから操作されない非操作対象のアプリとなる。
なお、操作対象VMとは、ユーザからの操作の対象となるVMである。また、操作対象OSは、操作対象VM上で実行されているOSであり、具体的には、キーボード208からの入力を受け付け、処理を行うOSである。
以下、図17〜図24において、実施の形態2にかかる情報処理装置100の説明を行う。なお、実施の形態2にかかる情報処理装置100のハードウェア例は、図2に示した実施の形態1にかかる情報処理装置100と同一であるため、説明を省略する。
図17は、実施の形態2にかかる情報処理装置100の機能例を示すブロック図である。実施の形態2にかかる情報処理装置100は、各機能からアクセスされるテーブルとして、実行可能アプリ情報テーブル1701、優先アプリパターンテーブル1702、アプリ実行情報テーブル1703、アプリ優先情報テーブル1704にアクセス可能である。なお、アプリ実行情報テーブル1703、アプリ優先情報テーブル1704は、アプリ実行情報テーブル302、アプリ優先情報テーブル114と同一の情報を格納しているため、説明を省略する。
情報処理装置100は、アプリ通知部1711〜実行VM選択部1716、操作VM切替部1717を含む。なお、アプリ優先情報管理部1714〜実行VM選択部1716は、アプリ優先情報管理部314〜実行VM選択部316と同一の機能であるため、説明を省略する。さらに、情報処理装置100は、アプリ通知部1711〜操作VM切替部1717内に、検出部1721〜選択部1731、検出部1732、を含む。なお、特定部1723、更新部1727〜選択部1731は、特定部323、更新部327〜選択部331と同一の機能であるため、説明を省略する。また、検出部1732は、操作VM切替部1717に含まれる。また、操作VM切替部1717は、ハイパーバイザ111に含まれる機能である。
実行可能アプリ情報テーブル1701は、実行可能アプリ情報テーブル301が記憶する情報に加えて、操作対象VMと、各VMでフォアグラウンドで動作しているアプリと、をさらに記憶するテーブルである。なお、実行可能アプリ情報テーブル1701の詳細については、図18にて後述する。
優先アプリパターンテーブル1702は、優先アプリパターンテーブル113が記憶するパターンにおいて、パターン内の対象ソフトウェアがフォアグラウンドにあり操作対象時の優先度およびバックグラウンドにあり非操作対象時の優先度を記憶する。さらに、優先アプリパターンテーブル1702は、パターン内の対象アプリを実行するOSが操作対象VMである場合の優先度と操作対象VMでない場合の優先度とを記憶する。なお、優先アプリパターンテーブル1702の詳細については、図19にて後述する。
アプリ通知部1711は、アプリ起動、アプリ終了の通知に加え、フォアグラウンドアプリの変更を通知する。アプリ実行情報管理部1712は、アプリ通知部1711から、アプリ起動とアプリ終了に加えてフォアグラウンド変更を受け付ける。フォアグラウンド変更時、アプリ実行情報管理部1712は、優先情報設定部1713へフォアグラウンド変更を通知する。
優先情報設定部1713は、優先情報設定部313の機能に加え、アプリ実行情報管理部1712からフォアグラウンドアプリ変更を受け付け、さらに、操作VM切替部1717からの操作VM切替を受け付ける。
操作VM切替部1717は、ユーザが操作するVMの切替を行い、切替先のVMを優先情報設定部1713へ通知する。たとえば、情報処理装置100がサーバである場合、複数のVMがそれぞれ別のユーザによって使用される場合がある。この場合、情報処理装置100は、ディスプレイ206やキーボード208等のインターフェースが使用されずに、ユーザによってリモートからログインしている装置のインターフェースが使用されるケースがある。これに対し、情報処理装置100が携帯端末である場合、携帯端末は一人のユーザが占有して使用することを想定している。したがって、情報処理装置100は、複数のVMにより複数のOSが動作しても、操作対象VMを切り替えて、1つのOSを使用するように制御することになる。
なお、操作VM切替部1717は、入出力用のデバイスを使用できるVMを切り替えることも行う。入出力用のデバイスとしては、ディスプレイ206やキーボード208等といったデバイスである。VMからデバイスへアクセスする方法には、たとえば、下記3つの方法が存在する。
1つ目の方法は、デバイスへのアクセスを行うドライバを有するVMに対して、メッセージを送ることでデバイスアクセスを行う方法である。1つ目の方法は、実際のデバイスドライバとメッセージを送るだけのデバイスドライバの二つに分けて実現することから、スプリットドライバと呼称される。2つ目の方法としては、VMがデバイスへ直接アクセスする方法である。また、3つ目の方法としては、エミュレートによってデバイスをVMに提供し、エミュレートの結果を用いてデバイスアクセスする方法である。
いずれの方法を採用しても、情報処理装置100は、複数のVMのうち、操作対象VMにデバイスへのアクセス許可を与えることで、操作対象VMを設定している。操作対象VMの切替の契機としては、たとえば、キーボード208のうち、特別なボタンをあらかじめ決定しておき、あらかじめ決定されたボタンが押下されることにより、操作対象VMを切り替えてもよい。また、操作対象VMの切替の他の契機としては、タッチパネルに対する特別な操作によって操作対象VMを切り替えてもよい。
検出部1721は、複数のOSのいずれかのOSで操作対象にあるソフトウェアが変更されたことを検出する機能を有する。たとえば、検出部1721は、フォアグラウンドアプリがアプリAからアプリBに変更されたことを検出する。なお、検出されたデータは、CPU101のレジスタ、CPU101のキャッシュメモリ、RAM202、フラッシュROM203などの記憶領域に記憶される。
受付部1722は、複数のOSのいずれかのOSから当該OSで操作対象にあるソフトウェアの変更を受け付ける機能を有する。たとえば、受付部1722は、フォアグラウンドアプリがアプリBに変更されたという通知を受け付ける。なお、通知を受け付けたという結果は、CPU101のレジスタ、CPU101のキャッシュメモリ、RAM202、フラッシュROM203などの記憶領域に記憶されてもよい。
特定部1724は、受付部1722によって操作対象にあるソフトウェアの変更が検出された場合、操作対象にあるソフトウェアの変更後における複数のOSの各々で操作対象にあるソフトウェア群と起動完了したソフトウェア群とを特定する機能を有する。たとえば、特定部1724は、フォアグラウンドアプリがアプリAからアプリBに変更された通知を受け付けた場合、あるOSで操作対象にあるアプリBと、実行可能アプリであるアプリAとアプリBとを特定する。
また、特定部1724は、検出部1732によって操作対象OSの変更が検出された場合、操作対象OSの変更後における操作対象OSと複数のOSの各々で起動完了したソフトウェア群とを特定してもよい。たとえば、特定部1724は、操作対象OSがOS1からOS2へ変更されたことが検出された場合、操作対象OSであるOS2と、操作対象以外のOSで実行可能アプリであるアプリAとアプリBとを特定する。
選択部1725は、第2のテーブルから、特定部1724によって特定されたソフトウェア群に応じた組合せを選択する。なお、ここでの第2のテーブルの記憶内容は、実施の形態1にかかる優先アプリパターンテーブル113のパターン内の対象アプリの優先度に関して、対象アプリが操作対象時の優先度および非操作対象時の優先度を記憶した状態となる。また、第2のテーブルの記憶内容として、優先アプリパターンテーブル113の各レコードの対象アプリの優先度に関して、対象アプリを実行するOSが操作対象OSであるときの優先度および操作対象OSでないときの優先度を記憶していてもよい。
たとえば、第2のテーブルに登録されているパターンとして、パターン番号1とパターン番号2が登録されている状態を想定する。パターン番号1は、フォアグラウンド時の優先情報が3であり、バックグラウンド時の優先情報が1であるアプリBとアプリBを実行するOSとが登録されている。パターン番号2は、フォアグラウンド時の優先情報が5であり、バックグラウンド時の優先情報が4であるアプリAとアプリAを実行するOSとが登録されている。このとき、選択部1725は、登録されているパターンから、特定されたアプリ群に応じたパターン番号1を選択する。
なお、選択されたパターンの番号、または選択されたパターンへのポインタ等が、CPU101のレジスタ、CPU101のキャッシュメモリ、RAM202、フラッシュROM203などの記憶領域に記憶される。
抽出部1726は、選択部1725によって選択された組合せから、特定されたソフトウェア群の各ソフトウェアの優先度を、特定されたソフトウェア群の各ソフトウェアが操作対象にあるか否かに応じて抽出する機能を有する。たとえば、選択部1725が、フォアグラウンド時の優先情報が3であり、バックグラウンド時の優先情報が1であるアプリBとアプリBを実行するOSとが登録されているパターンを選択した場合を想定する。抽出部1726は、アプリBがフォアグラウンドである場合、アプリBの優先情報を3として抽出する。なお、抽出された優先情報は、CPU101のレジスタ、CPU101のキャッシュメモリ、RAM202、フラッシュROM203などの記憶領域に記憶される。
検出部1732は、操作対象OSが変更されたことを検出する機能を有する。たとえば、検出部1732は、操作対象VMがVM1からVM2に変更された結果、操作対象OSがOS1からOS2に変更されたことを検出する。なお、検出されたデータは、CPU101のレジスタ、CPU101のキャッシュメモリ、RAM202、フラッシュROM203などの記憶領域に記憶される。
図18は、実施の形態2にかかる実行可能アプリ情報テーブル1701の記憶内容の一例を示す説明図である。実行可能アプリ情報テーブル1701は、実行可能アプリ情報テーブル301に操作対象VMフィールドとフォアグラウンドアプリフィールドをさらに含むテーブルである。なお、VM IDフィールドとアプリIDフィールドに格納される値については、実行可能アプリ情報テーブル301と同一であるので、説明を省略する。
操作対象VMフィールドには、現在操作対象VMとなるVM IDが格納される。フォアグラウンドアプリフィールドには、現在フォアグラウンドのアプリIDが格納される。たとえば、図18に示す実行可能アプリ情報テーブル1701は、現在VM1が操作対象VMであり、VM1でのフォアグラウンドアプリがアプリAであることを示している。
図19は、実施の形態2にかかる優先アプリパターンテーブル1702の記憶内容の一例を示す説明図である。優先アプリパターンテーブル1702は、優先アプリパターンテーブル113の優先情報フィールドがサブフィールドとして対象VM操作中フィールドと対象VM非操作中フィールドとを含む。さらに、対象VM操作中フィールドは、フォアグラウンドフィールドとバックグラウンドフィールドを含む。同様に、対象VM非操作中フィールドも、フォアグラウンドフィールドとバックグラウンドフィールドを含む。なお、パターン番号フィールド、VM番号フィールド、アプリIDフィールドに格納される値については、優先アプリパターンテーブル113と同一であるので、説明を省略する。
対象VM操作中フィールドにおけるフォアグラウンドフィールドには、対象アプリを実行するVMが操作中であり、かつ、対象アプリがフォアグラウンドであるときの優先情報が格納されている。同様に、対象VM操作中フィールドにおけるバックグラウンドフィールドには、対象アプリを実行するVMが操作中であり、かつ、対象アプリがバックグラウンドであるときの優先情報が格納されている。
また、対象VM非操作中フィールドにおけるフォアグラウンドフィールドには、対象アプリを実行するVMが非操作中であり、かつ、対象アプリがフォアグラウンドであるときの優先情報が格納されている。最後に、対象VM非操作中フィールドにおけるバックグラウンドフィールドには、対象アプリを実行するVMが非操作中であり、かつ、対象アプリがバックグラウンドであるときの優先情報が格納されている。
たとえば、図19に示す優先アプリパターンテーブル1702では、3つのパターンが登録されている。パターン番号1は、あるVMにて、アプリBが起動している状態を示している。パターン番号1が抽出された場合、アプリBを実行する対象VMが操作中であれば、アプリBの優先情報は、アプリBがフォアグラウンドであるとき3となり、アプリBがバックグラウンドであるとき1となる。また、対象VMが非操作中であれば、アプリBの優先情報は、アプリBがフォアグラウンドであるとき3となり、アプリBがバックグラウンドであるとき1となる。
同様に、パターン番号2が抽出され、アプリA、アプリBを実行する対象VMが操作中である場合を想定する。このとき、アプリA、アプリB、アプリAとアプリB以外のアプリのいずれかがフォアグラウンドである場合、フォアグラウンドとなるアプリの優先情報は、それぞれ、5、4、2となる。同様に、アプリA、アプリB、アプリAとアプリB以外のアプリがバックグラウンドとなる場合、各アプリの優先情報は、それぞれ、4、3、1となる。また、アプリA、アプリBを実行する対象VMが非操作中であり、アプリA、アプリB、アプリAとアプリB以外のアプリのいずれかがフォアグラウンドである場合、フォアグラウンドであるアプリの優先情報は、それぞれ、5、4、0となる。同様に、アプリA、アプリB、アプリAとアプリB以外のアプリがバックグラウンドである場合、優先情報は、それぞれ、3、3、0となる。
同様に、パターン番号3が抽出され、アプリA、アプリBを実行する対象VMが操作中であり、かつ、アプリA、アプリBのいずれかがフォアグラウンドである場合、フォアグラウンドとなるアプリの優先情報は、それぞれ、5、4となる。また、アプリA、アプリBがバックグラウンドである場合、各アプリの優先情報は、それぞれ、5、3となる。また、アプリA、アプリBを実行する対象VMが非操作中であり、かつ、アプリA、アプリBのいずれかがフォアグラウンドである場合、フォアグラウンドとなるアプリの優先情報は、それぞれ、5、4となる。また、アプリA、アプリBがバックグラウンドである場合、各アプリの優先情報は、それぞれ、4、3となる。
また、パターン番号3が抽出され、アプリC、アプリDを実行する対象VMが操作中であり、かつ、アプリC、アプリDのいずれかがフォアグラウンドである場合、フォアグラウンドとなるアプリの優先情報は、それぞれ、5、5となる。また、アプリC、アプリDがバックグラウンドである場合、各アプリの優先情報は、それぞれ、4、2となる。アプリC、アプリDを実行する対象VMが非操作中であり、かつ、アプリC、アプリDのいずれかがフォアグラウンドである場合、フォアグラウンドとなるアプリの優先情報は、それぞれ、5、4となる。また、アプリC、アプリDがバックグラウンドである場合、各アプリの優先情報は、それぞれ、4、2となる。
図20は、優先アプリパターンテーブル1702からの優先情報の抽出例を示す説明図である。図20では、実行可能アプリ情報テーブル1701と優先アプリパターンテーブル1702に基づいて、優先情報の抽出例について説明を行う。なお、パターンの選択方法については、図8で示した方法と同一であるため、説明を省略し、図20では、パターン番号2が選択された場合を例として説明を行う。
優先制御VM112は、選択されたパターンに対して、各アプリが操作対象VMで実行しているか否かとフォアグラウンドか否かとに応じて優先度を抽出する。具体的には、パターン番号2が選択された場合、優先制御VM112は、VM1で起動しているアプリA、アプリB、アプリAまたはアプリB以外のアプリの優先情報を、優先アプリパターンテーブル1702の対象VM操作中フィールドから決定する。さらに、優先制御VM112は、実行可能アプリ情報テーブル1701よりフォアグラウンドアプリであるアプリAの優先情報を、対象VM操作中フィールド内のフォアグラウンドフィールドにより5に決定する。同様に、優先制御VM112は、実行可能アプリ情報テーブル1701によりバックグラウンドアプリであるアプリB、unknownの優先情報を、対象VM操作中フィールド内のバックグラウンドフィールドにより、それぞれ、3、1に決定する。
また、VM2で実行している何らかのアプリに関して、優先制御VM112は、パターン番号2に設定値がないため、デフォルトとしてアプリIDフィールドにunknownが設定されているレコードに、優先情報0を設定している。
図21は、操作VM切替部1717の処理手順の一例を示すフローチャートである。操作VM切替部1717は、ハイパーバイザ111が実行する。また、操作VM切替部1717は、切替の操作を行い、VMが切り替わった後に実行される。ハイパーバイザ111は、優先情報設定部1713へ操作対象VMのVM IDを操作VM変更として通知し(ステップS2101)、操作VM切替部1717の処理を終了する。
図22は、実施の形態2にかかるアプリ通知部1711の処理手順の一例を示すフローチャートである。アプリ通知部1711は、仮想マシンであるVM1、VM2が実行する。なお、図22で示す説明では、VM1が実行する場合を想定して説明を行う。また、図22のステップS2204〜ステップS2209の処理は、図11に示したアプリ通知部311のステップS1101〜ステップS1106の処理と等しいため、説明を省略する。なお、ステップS1104、ステップS1106での処理対象となるアプリ実行情報管理部312に関して、ステップS2207、ステップS2209の処理では、アプリ実行情報管理部1712に置き換わる。
VM1は、フォアグラウンドのアプリが変更されたか否かを判断する(ステップS2201)。変更されていない場合(ステップS2201:No)、VM1は、ステップS2204の処理に移行する。変更されている場合(ステップS2201:Yes)、VM1は、アプリの名称をアプリIDとして取得する(ステップS2202)。取得後、VM1は、アプリ実行情報管理部1712へフォアグラウンド変更を通知し、アプリ通知部1711の処理を終了する。
図23は、実施の形態2にかかるアプリ実行情報管理部1712の処理手順の一例を示すフローチャートである。アプリ実行情報管理部1712は、ハイパーバイザ111が実行する。また、図23で示すステップS2304〜ステップS2308の処理は、図11に示したアプリ実行情報管理部312のステップS1202〜ステップS1206の処理と等しいため、説明を省略する。
なお、ステップS1203、ステップS1205での処理対象となるアプリ実行情報テーブル302に関して、ステップS2305、ステップS2307の処理では、アプリ実行情報テーブル1703に置き換わる。同様に、ステップS1204、ステップS1206での処理対象となる優先情報設定部313に関して、ステップS2306、ステップS2308の処理では、優先情報設定部1713に置き換わる。
ハイパーバイザ111は、通知元のVM IDを取得する(ステップS2301)。取得後、ハイパーバイザ111は、フォアグラウンド変更を受け付けたか否かを判断する(ステップS2302)。フォアグラウンド変更以外を受け付けた場合(ステップS2302:No)、ハイパーバイザ111は、ステップS2304の処理に移行する。フォアグラウンド変更を受け付けた場合(ステップS2302:Yes)、ハイパーバイザ111は、優先情報設定部1713へフォアグラウンド変更を通知し(ステップS2303)、アプリ実行情報管理部1712の処理を終了する。
図24は、実施の形態2にかかる優先情報設定部1713の処理手順の一例を示すフローチャートである。優先情報設定部1713は、優先制御VM112が実行する。また、図24で示すステップS2405〜ステップS2412の処理は、ステップS2409を除いて図13に示した優先情報設定部313のステップS1301〜ステップS1308の処理と等しいため、説明を省略する。
なお、ステップS1302、ステップS1303での処理対象となる実行可能アプリ情報テーブル301に関して、ステップS2406、ステップS2407の処理では、実行可能アプリ情報テーブル1701に置き換わる。また、ステップS1307、ステップS1308での処理対象となるアプリ優先情報管理部314に関して、ステップS2411、ステップS2412の処理では、アプリ優先情報管理部1714に置き換わる。
優先制御VM112は、操作VM変更を受け付けたか否かを判断する(ステップS2401)。操作VM変更を受け付けた場合(ステップS2401:Yes)、優先制御VM112は、実行可能アプリ情報テーブル1701の操作VMフィールドを取得した操作対象VMのVM IDに更新し(ステップS2402)、ステップS2408の処理に移行する。
操作VM変更を受け付けていない場合(ステップS2401:No)、優先制御VM112は、フォアグラウンド変更を受け付けたか否かを判断する(ステップS2403)。フォアグラウンド変更を受け付けていない場合(ステップS2403:No)、優先制御VM112は、ステップS2405の処理に移行する。フォアグラウンド変更を受け付けた場合(ステップS2403:Yes)、優先制御VM112は、実行可能アプリ情報テーブル1701のVM IDフィールドが取得したVM IDと一致するレコードのフォアグラウンドアプリフィールドをアプリIDに更新する(ステップS2404)。更新後、優先制御VM112は、ステップS2408の処理に移行する。
ステップS2408の処理後、優先制御VM112は、選択されたパターンから、全実行可能アプリの優先情報を、各アプリが操作対象VMで実行しているか否かとフォアグラウンドか否かとに応じて抽出する(ステップS2409)。抽出後、優先制御VM112は、ステップS2410の処理に移行する。
以上説明したように、スケジューリングプログラム、および情報処理装置によれば、操作対象にあるアプリが変更されたことを検出し、アプリが操作対象にあるか否かに応じてアプリの優先度を更新する。これにより、実施の形態2にかかる情報処理装置は、OS内の利用状況を反映したアプリの優先関係を用いて、VMのスケジューリングを行える。
たとえば、ユーザからの要求に対する応答処理を行うアプリは、一般的に高い優先度が設定されている。しかしながら、携帯端末等で採用されるQVGA(Quarter Video Graphics Array)といった表示領域が狭いディスプレイを有する装置は、フォアグラウンドにあるアプリのみがディスプレイに表示されていることが多い。この場合、応答処理を行うアプリがバックグラウンドに遷移した場合、応答処理を行うアプリが要求を受けることがないため、情報処理装置は、優先度を低く設定し、他のアプリを高くすることで、利用状況を反映することができる。
また、情報処理装置は、操作対象VMが切り替わったことを検出し、アプリが操作対象VMのOSで実行されているか否かに応じてアプリの優先度を更新する。これにより、実施の形態2にかかる情報処理装置は、複数のOSの利用状況を反映したアプリの優先情報を用いて、VMのスケジューリングを行える。
たとえば、情報処理装置で動作するOS1が、ゲームアプリと音楽再生アプリを実行し、OS2が、ダウンロードアプリとメール作成アプリを実行する場合を想定する。このとき、実施の形態2にかかる情報処理装置は、OS1が操作対象OSである場合、ゲームアプリ、音楽再生アプリ、ダウンロードアプリ、メール作成アプリといった優先度でアプリを実行することができる。このように、実施の形態2にかかる情報処理装置は、応答を受けることのないメール作成アプリと、多少時間を要してもよいダウンロードアプリの優先度を下げることで、音楽再生の音飛びを防ぐことができる。
また、実施の形態2にかかる情報処理装置は、OS2が操作対象OSである場合、メール作成アプリ、音楽再生アプリ、ダウンロードアプリ、ゲームアプリといった優先度でアプリを実行することができる。このように、実施の形態2にかかる情報処理装置は、応答を受けることのないゲームアプリと、多少時間を要してもよいダウンロードアプリの優先度を下げることで、メール作成時の文字入力対応が遅くなることを回避することができる。以上より、実施の形態2にかかる情報処理装置は、端末全体として効率的にアプリを動作させることができる。
(実施の形態3の説明)
実施の形態3にかかる情報処理装置100は、アプリ通知部2511が、実行アプリ特定部2515にアプリ切替を通知する例である。以下、図25〜図27において、実施の形態3にかかる情報処理装置100の説明を行う。なお、実施の形態3にかかる情報処理装置100のハードウェア例は、図2に示した実施の形態1にかかる情報処理装置100と同一であるため、説明を省略する。また、実施の形態3にかかる情報処理装置100の説明では、実施の形態1にかかる情報処理装置100からの変更について説明を行う。なお、実施の形態2にかかる情報処理装置100に対しても、実施の形態3を適用することが可能である。
図25は、実施の形態3にかかる情報処理装置100の機能例を示すブロック図である。実施の形態3にかかる情報処理装置100は、各機能からアクセスされるテーブルとして、実行可能アプリ情報テーブル2501〜アプリ優先情報テーブル2504にアクセス可能である。なお、実行可能アプリ情報テーブル2501〜アプリ優先情報テーブル2504の記憶内容は、実行可能アプリ情報テーブル301、優先アプリパターンテーブル113、アプリ実行情報テーブル302、アプリ優先情報テーブル114と等しいため説明を省略する。
情報処理装置100は、アプリ通知部2511〜実行VM選択部2516を含む。なお、アプリ実行情報管理部2512〜アプリ優先情報管理部2514、実行VM選択部2516は、アプリ実行情報管理部312〜アプリ優先情報管理部314、実行VM選択部316と同一の機能であるため、説明を省略する。さらに、情報処理装置100は、アプリ通知部2511〜実行VM選択部2516内に、検出部2521〜判断部2528、受付部2529、判断部2530、選択部2531を含む。なお、受付部2522〜判断部2528、選択部2531は、特定部323〜判断部328、選択部331と同一の機能であるため、説明を省略する。また、受付部2529は、実行アプリ特定部2515に含まれる。
アプリ通知部2511は、アプリ起動、アプリ終了の通知に加え、VM上のOSにおけるアプリ切替時にアプリ切替の通知を実行アプリ特定部2515に行う。実行アプリ特定部2515は、アプリ通知部2511からの通知を受け付けて実行アプリの特定を行う。なお、アプリ通知部2511は、実行アプリ特定部2515への通知にアプリIDを用いた場合、アプリ実行時情報をアプリ実行情報管理部2512へ通知しなくてよくなる。この場合、情報処理装置100は、アプリ実行情報テーブル2503を保持しなくてもよい。また、アプリ通知部2511は、実行アプリ特定部2515への通知に、ページテーブルアドレスを用いてもよい。
検出部2521は、検出部321の機能に検出部329の機能が含まれた機能を有する。受付部2529は、実行状態にあるソフトウェアの切替を受け付ける。判断部2530は、受付部2529によって実行状態にあるソフトウェアの切替を受け付けた場合、切替前のソフトウェアの優先度と切替後のソフトウェアの優先度との高低を判断する。
図26は、実施の形態3にかかるアプリ通知部2511の処理手順の一例を示すフローチャートである。アプリ通知部2511は、仮想マシンであるVM1、VM2が実行する。図26の説明では、VM1が実行する場合を想定して説明を行う。なお、アプリ通知部2511は、アプリの起動もしくは終了、またはアプリ切替を契機に動作を開始する。また、図26で示すステップS2604〜ステップS2609の処理は、図11に示したアプリ通知部311のステップS1101〜ステップS1106の処理と等しいため、説明を省略する。なお、ステップS1104、ステップS1105での処理対象となるアプリ実行情報管理部312に関して、ステップS2607、ステップS2609の処理では、アプリ実行情報管理部2512に置き換わる。
VM1は、アプリ切替が発生したか否かを判断する(ステップS2601)。アプリ切替が発生していない場合(ステップS2601:No)、VM1は、ステップS2604の処理に移行する。アプリ切替が発生した場合(ステップS2601:Yes)、VM1は、アプリの名称をアプリIDとして取得する(ステップS2602)。取得後、VM1は、実行アプリ特定部2515へアプリIDを通知し(ステップS2603)、アプリ通知部2511の処理を終了する。
図27は、実施の形態3にかかる実行アプリ特定部2515の処理手順の一例を示すフローチャートである。実行アプリ特定部2515は、ハイパーバイザ111が実行する。実行アプリ特定部2515は、アプリ通知部2511からの通知を契機に動作を開始する。なお、アプリ通知部2511からの通知には、アプリIDが含まれる。
ハイパーバイザ111は、アプリIDを受け付け(ステップS2701)、アプリ切替を行ったOSのVM IDを取得する(ステップS2702)。取得後、ハイパーバイザ111は、アプリ優先情報テーブル2504のうち、取得したVM IDとVM IDフィールドの値が一致するレコードの実行アプリフィールドを取得したアプリIDに更新する(ステップS2703)。更新後、ハイパーバイザ111は、切替後の実行アプリの優先情報が切替前の実行アプリの優先情報より低いか否かを判断する(ステップS2704)。
切替後の実行アプリの優先情報が低い場合(ステップS2704:Yes)、ハイパーバイザ111は、実行VM選択部2516を呼び出し(ステップS2705)、実行アプリ特定部2515の処理を終了する。切替後の実行アプリの優先情報が低くない場合(ステップS2704:No)、ハイパーバイザ111は、実行アプリ特定部2515の処理を終了する。
以上説明したように、スケジューリングプログラム、および情報処理装置によれば、アプリ切替が発生した際に、ハイパーバイザに通知する。たとえば、実施の形態1、2にかかるハイパーバイザは、複数の要因から発生する例外のうち、ページテーブルの切替による例外であることを特定する処理が行われていた。しかし、実施の形態3にかかるハイパーバイザは、アプリが切り替えられたという通知をOSから待てばよく、ハイパーバイザ内の処理を高速にすることができる。
また、実施の形態3にかかるスケジューリングプログラムは、OS側を改変するため、改変を行い易いOSが採用されている場合は、実施の形態3を適用してもよい。また、改変を行い難いOSが採用されている場合は、実施の形態1を適用してもよい。このように、実施の形態3にかかる情報処理装置は、採用されたOSによって適用する形態を変えてもよい。
(実施の形態4の説明)
実施の形態4にかかる情報処理装置100は、アプリ通知部2811が優先情報設定部2813に対して通知を行う例である。アプリ実行情報管理部2812への通知は、優先情報設定部2813が行う。以下、図28〜図30において、実施の形態4にかかる情報処理装置100の説明を行う。なお、実施の形態4にかかる情報処理装置100のハードウェア例は、図2に示した実施の形態1にかかる情報処理装置100と同一であるため、説明を省略する。また、実施の形態4にかかる情報処理装置100の説明では、実施の形態1にかかる情報処理装置100からの変更について説明を行う。なお、実施の形態2にかかる情報処理装置100に対しても、実施の形態4を適用することが可能である。
図28は、実施の形態4にかかる情報処理装置100の機能例を示すブロック図である。実施の形態4にかかる情報処理装置100は、各機能からアクセスされるテーブルとして、実行可能アプリ情報テーブル2801〜アプリ優先情報テーブル2804にアクセス可能である。なお、実行可能アプリ情報テーブル2801〜アプリ優先情報テーブル2804の記憶内容は、実行可能アプリ情報テーブル301、優先アプリパターンテーブル113、アプリ実行情報テーブル302、アプリ優先情報テーブル114と等しいため説明を省略する。
情報処理装置100は、アプリ通知部2811〜実行VM選択部2816を含む。なお、アプリ実行情報管理部2812、アプリ優先情報管理部2814〜実行VM選択部2816は、アプリ実行情報管理部312、アプリ優先情報管理部314〜実行VM選択部316と同一の機能であるため、説明を省略する。さらに、情報処理装置100は、アプリ通知部2811〜実行VM選択部2816内に、検出部2821〜選択部2831を含む。なお、検出部2821、特定部2822、特定部2824〜選択部2831は、検出部321、特定部323〜選択部331と同一の機能であるため、説明を省略する。アプリ通知部2811は、アプリ起動とアプリ終了の通知先が優先情報設定部2813となる。また、優先情報設定部2813は、アプリ通知部2811から通知を受ける。また、受付部2823は、優先情報設定部2813に含まれる。
受付部2823は、複数のOSのいずれかのOSから起動完了したソフトウェアの起動数の変更を受け付ける。たとえば、受付部2823は、検出部2821からOS1からアプリAが起動され実行可能アプリとなり、起動完了したソフトウェアの起動数が増加したという通知を受け付ける。
図29は、実施の形態4にかかるアプリ通知部2811の処理手順の一例を示すフローチャートである。アプリ通知部2811は、仮想マシンであるVM1、VM2が実行する。図29の説明では、VM1が実行する場合を想定して説明を行う。また、図29で示すステップS2901〜ステップS2903、ステップS2905の処理は、図11に示したアプリ通知部311のステップS1101〜ステップS1103、ステップS1105の処理と等しいため、説明を省略する。
ステップS2903の処理終了後、VM1は、優先情報設定部2813へアプリ起動を通知し(ステップS2904)、アプリ通知部2811の処理を終了する。また、ステップS2905の処理終了後、VM1は、優先情報設定部2813へアプリ終了を通知し(ステップS2906)、アプリ通知部2811の処理を終了する。
図30は、実施の形態4にかかる優先情報設定部2813の処理手順の一例を示すフローチャートである。優先情報設定部2813は、優先制御VM112が実行する。また、優先情報設定部2813は、アプリ通知部2811からの通知を契機に動作を開始する。なお、アプリ通知部2811からの通知内容は、VM ID、アプリIDと、アプリ実行時情報である。また、図30で示すステップS3001、ステップS3002、ステップS3004、ステップS3006〜ステップS3010の処理は、図13に示した優先情報設定部313のステップS1301〜ステップS1308の処理と等しいため、説明を省略する。
なお、ステップS1302〜ステップS1304での処理対象となる実行可能アプリ情報テーブル301に関して、ステップS3002、ステップS3004、ステップS3006の処理では、実行可能アプリ情報テーブル2801に置き換わる。また、ステップS1304での処理対象となる優先アプリパターンテーブル113に関して、ステップS3006の処理では、優先アプリパターンテーブル2802に置き換わる。また、ステップS1307、ステップS1308での処理対象となるアプリ優先情報管理部314に関して、ステップS3009、ステップS3010の処理では、アプリ優先情報管理部2814に置き換わる。
ステップS3002の処理終了後、優先制御VM112は、アプリ実行情報管理部2812へアプリ起動を通知し(ステップS3003)、ステップS3006の処理に移行する。また、ステップS3004の処理終了後、優先制御VM112は、アプリ実行情報管理部2812へアプリ終了を通知し(ステップS3005)、ステップS3006の処理に移行する。
以上説明したように、スケジューリングプログラム、および情報処理装置によれば、VMからの通知を、優先制御VMが受ける。実施の形態2にかかる情報処理装置では、フォアグラウンドかバックグラウンドかという情報を、ハイパーバイザに一旦蓄えていた。しかし、実施の形態4にかかる情報処理装置は、VM ID、アプリID、優先情報をハイパーバイザが管理する記憶領域に記憶しておき、優先制御VMのみを変更することで、動作を変えることができる。
(実施の形態5の説明)
実施の形態5にかかる情報処理装置100は、アプリ通知部3111がハイパーバイザ111内に含まれる場合の例である。以下、図31〜図33において、実施の形態5にかかる情報処理装置100の説明を行う。なお、実施の形態5にかかる情報処理装置100のハードウェア例は、図2に示した実施の形態1にかかる情報処理装置100と同一であるため、説明を省略する。また、実施の形態5にかかる情報処理装置100の説明では、実施の形態1にかかる情報処理装置100からの変更について説明を行う。なお、実施の形態2にかかる情報処理装置100に対しても、実施の形態5を適用することが可能である。
図31は、実施の形態5にかかる情報処理装置100の機能例を示すブロック図である。実施の形態5にかかる情報処理装置100は、各機能からアクセスされるテーブルとして、実行可能アプリ情報テーブル3101〜アプリ優先情報テーブル3104にアクセス可能である。なお、実行可能アプリ情報テーブル3101〜アプリ優先情報テーブル3104の記憶内容は、実行可能アプリ情報テーブル301、優先アプリパターンテーブル113、アプリ実行情報テーブル302、アプリ優先情報テーブル114と等しいため説明を省略する。
情報処理装置100は、アプリ通知部3111〜実行VM選択部3116を含む。なお、アプリ通知部3111〜実行VM選択部3116は、アプリ通知部311〜実行VM選択部316と同一の機能であるため、説明を省略する。さらに、情報処理装置100は、アプリ通知部3111〜実行VM選択部3116内に、検出部3121〜選択部3131を含む。なお、特定部3123〜選択部3131は、特定部323〜選択部331と同一の機能であるため、説明を省略する。また、検出部3121は、アプリ通知部3111に含まれる。また、アプリ通知部3111は、ハイパーバイザ111に含まれる機能である。
検出部3121は、複数のOSのいずれかのOSで起動完了したソフトウェアの起動数が変更するシステムコールが発行されたことを検出する機能を有する。たとえば、検出部3121は、アプリ起動のシステムコール、アプリ終了のシステムコールが発行されたことを検出する。なお、検出されたデータは、CPU101のレジスタ、CPU101のキャッシュメモリ、RAM202、フラッシュROM203などの記憶領域に記憶される。
受付部3122は、システムコールの発行に応じた起動完了したソフトウェアの起動数の変更を受け付ける機能を有する。たとえば、検出部3121がアプリ起動のシステムコールの発行を検出した場合、受付部3122は、起動完了したソフトウェアの起動数が増加したことを受け付ける。なお、変更を受け付けたという結果は、CPU101のレジスタ、CPU101のキャッシュメモリ、RAM202、フラッシュROM203などの記憶領域に記憶されてもよい。
図32は、実施の形態5にかかるアプリ起動またはアプリ終了の検出方法の一例を示す説明図である。VM1上のOS1がアプリに含まれるプロセスを生成する場合、OSが提供するサービスを実行するシステムコールが呼ばれる。図32では、OS内でシステムコールが呼ばれた場合に、アプリ起動またはアプリ終了の検出方法について例を示す。
初めに、システムコールについての動作を説明する。CPU101は、複数の動作モードを有しており、少なくとも、ユーザプロセスが動作するユーザモードと、カーネルが動作する特権モードを有している。システムコールは、CPUの動作モードをユーザモードから特権モードへ遷移し、特権モードでないとできない処理を行うための仕組みである。たとえば、Linux(登録商標)などのOSは、forkシステムコールによってプロセスの複製を作る。続けて、OSは、複製先のプロセスに対してexecveシステムコールを実行することで、指定されたファイル名のプログラムを展開し、複製先のプロセスにプログラムを実行させる。
VM上のOSも、プロセス生成にシステムコールの仕組みを利用するが、ユーザモードで動作中のプロセスがシステムコールを発行すると、OSのカーネルへ処理が遷移するのではなく、ハイパーバイザ111に処理が遷移する。
完全仮想化によるOSの場合は、CPUの動作モードに関して、ユーザモードと特権モード以外に、ハイパーバイザ用のモードが追加されている。システムコールが呼ばれると、CPU101は、ユーザモードから特権モードに直接遷移するのではなく、ハイパーバイザ用のモードへ遷移する。この場合、ハイパーバイザ111は、OSを特権モードで動作させるという処理を行うことで、システムコールの処理を可能にしている。
また、準仮想化によるOSの場合は、カーネルが動作するモードが特権モードではなくユーザモードで動作するため、特権モードで動作するハイパーバイザに処理が遷移する。したがって、ハイパーバイザ111は、OSに対してシステムコールを処理するためのエントリポイントへコールバックを行うことで、OSがシステムコールの処理を行うことを可能にしている。
このように、情報処理装置100は、VM上でシステムコールが実行されると処理がハイパーバイザ111に遷移する。ハイパーバイザ111は、アプリ通知部3111によって、通知されたシステムコールのうち、アプリ起動に関わるシステムコールとアプリ終了に関わるシステムコールを抽出して、アプリ実行情報管理部3112に通知する。
たとえば、図32では、OS1がexecveシステムコール、exitシステムコール、その他のシステムコールを呼び出し、ハイパーバイザ111に処理遷移した場合を想定する。このとき、アプリ通知部3111は、アプリ起動に関するシステムコールであるexecveシステムコール、アプリ終了に関するシステムコールであるexitシステムコールを抽出する。また、アプリ通知部3111は、システムコールの引数から、アプリの名称を取得する。なお、引数が格納されている記憶領域は、CPU101のレジスタ、プロセスのスタック領域等に格納されている。具体的にどの記憶領域に格納されるかは、OSのABI(Application Binary Interface)によって決定される。
たとえば、execveシステムコールがARM(登録商標)アーキテクチャの元で実行される場合を想定する。このとき、execveシステムコールの呼び元となる処理は、アプリ実行ファイルの名称へのポインタを汎用レジスタr0に格納し、アプリへ通知する引数群が格納された配列へのポインタを汎用レジスタr1に格納する。さらに、execveシステムコールの呼び元となる処理は、アプリへ通知する環境変数が格納された配列へのポインタを汎用レジスタr2に格納し、execveシステムコールのシステムコール番号を示す11という即値を汎用レジスタr7に格納する。
アプリ通知部3111は、システムコールによる処理遷移を受けると、汎用レジスタr7が11であるか否かで、アプリ起動のシステムコールが呼ばれたことを判断する。判断後、アプリ通知部3111は、汎用レジスタr0に格納されたポインタを参照してアプリの名称を取得する。なお、アプリ実行時情報の取得方法は、現在操作対象VMに設定されているページテーブルアドレス、ASIDを取得する。
同様に、exitシステムコールがARMアーキテクチャの元で実行される場合を想定する。このとき、exitシステムコールの呼び元となる処理は、プロセス終了の戻り値となる終了コードを汎用レジスタr0に格納し、exitシステムコールのシステムコール番号を示す1という即値を汎用レジスタr7に格納する。
アプリ通知部3111は、システムコールによる処理遷移を受けると、汎用レジスタr7が1であるか否かで、アプリ終了のシステムコールが呼ばれたことを判断する。判断後、アプリ通知部3111は、現在のアプリ実行時情報から、アプリ実行情報テーブル3103内の対応するアプリIDを取得する。
このように、アプリ起動、アプリ終了において、アプリ通知部311で設定していた情報をハイパーバイザ111が全て取得することが可能であるため、アプリ通知部311をアプリ通知部3111としてハイパーバイザ111内に移行することが可能である。
図33は、実施の形態5にかかるアプリ通知部3111の処理手順の一例を示すフローチャートである。アプリ通知部3111は、ハイパーバイザ111が実行する。ハイパーバイザ111は、抽出対象のシステムコールを検出したか否かを判断する(ステップS3301)。抽出対象のシステムコールを検出していない場合(ステップS3301:No)、ハイパーバイザ111は、アプリ通知部3111の処理を終了する。
抽出対象のシステムコールを検出した場合(ステップS3301:Yes)、ハイパーバイザ111は、検出されたシステムコールがアプリ起動のシステムコールか否かを判断する(ステップS3302)。アプリ起動のシステムコールである場合(ステップS3302:Yes)、ハイパーバイザ111は、引数に設定されているアプリの名称をアプリIDとして取得する(ステップS3303)。続けて、ハイパーバイザ111は、ページテーブルアドレスをアプリ実行時情報として取得する(ステップS3304)。取得後、ハイパーバイザ111は、アプリ実行情報管理部3112へアプリ起動を通知し(ステップS3305)、アプリ通知部3111の処理を終了する。
アプリ終了のシステムコールである場合(ステップS3302:No)、ハイパーバイザ111は、ページテーブルアドレスを取得して、アプリ実行情報テーブル3103のアプリ実行時情報と一致するレコードから、アプリIDを取得する(ステップS3306)。取得後、ハイパーバイザ111は、アプリ実行情報管理部3112へアプリ終了を通知し(ステップS3307)、アプリ通知部3111の処理を終了する。
以上説明したように、スケジューリングプログラム、および情報処理装置によれば、実行可能アプリの起動数が変更するシステムコールの発行を検出する。これにより、実施の形態5にかかる情報処理装置は、OSの変更を行わずに本スケジューリングプログラムを適用することができる。
(実施の形態6の説明)
実施の形態6にかかる情報処理装置は、ユーザが指定したアプリを優先可能とする例である。以下、図34〜図38において、実施の形態6にかかる情報処理装置100の説明を行う。なお、実施の形態6にかかる情報処理装置100のハードウェア例は、図2に示した実施の形態1にかかる情報処理装置100と同一であるため、説明を省略する。また、実施の形態6にかかる情報処理装置100の説明では、実施の形態2にかかる情報処理装置100からの変更について説明を行う。なお、実施の形態1にかかる情報処理装置100に対しても、実施の形態6を適用することが可能である。
図34は、実施の形態6にかかる情報処理装置100の機能例を示すブロック図である。実施の形態6にかかる情報処理装置100は、各機能からアクセスされるテーブルとして、実行可能アプリ情報テーブル3401〜アプリ優先情報テーブル3404、優先アプリ情報テーブル3405にアクセス可能である。なお、実行可能アプリ情報テーブル3401〜アプリ優先情報テーブル3404の記憶内容は、実行可能アプリ情報テーブル1701〜アプリ優先情報テーブル1704と等しいため説明を省略する。
情報処理装置100は、アプリ通知部3411〜操作VM切替部3417、優先指定部3418を含む。なお、優先情報設定部3413を除いたアプリ通知部3411〜操作VM切替部3417は、優先情報設定部1713を除いたアプリ通知部1711〜操作VM切替部1717と同一の機能であるため、説明を省略する。さらに、情報処理装置100は、アプリ通知部3411〜優先指定部3418内に、検出部3421〜検出部3432、指定部3433を含む。なお、抽出部3426を除いた検出部3421〜検出部3432は、検出部1721〜検出部1732と同一の機能であるため、説明を省略する。また、指定部3433は、優先指定部3418に含まれる。また、優先指定部3418は、ハイパーバイザ111に含まれる機能である。
優先アプリ情報テーブル3405は、優先指定部3418によって指定された優先指定を記憶するテーブルである。優先アプリ情報テーブル3405の詳細は、図35にて後述する。
優先指定部3418は、あらかじめ指定されたボタンが押下された場合に、操作対象OSのフォアグラウンドのアプリに対する優先情報を指定する。また、優先指定部3418は、指定された優先指定を優先情報設定部3413に通知する。
優先情報設定部3413は、優先指定が通知された場合、実行可能アプリ情報テーブル3401から、操作対象VMのフォアグラウンドアプリを取得し、取得されたアプリに対する優先情報を抽出する。優先情報設定部3413は、優先情報を抽出する際に、優先アプリパターンテーブル3402より優先指定によって作成された優先アプリ情報テーブル3405を優先して参照する。
指定部3433は、操作対象OSで操作対象にあるソフトウェアの優先度を指定する機能を有する。たとえば、指定部3433は、操作対象OSであるOS1で実行するアプリBの優先度を指定する。なお、指定された優先度は、CPU101のレジスタ、CPU101のキャッシュメモリ、RAM202、フラッシュROM203などの記憶領域に記憶される。
抽出部3426は、選択部3425によって選択された組合せと指定部3433によって指定された優先度から、特定されたソフトウェア群の各ソフトウェアの優先度を抽出する機能を有する。
たとえば、選択部3425が、フォアグラウンド時の優先情報が3であり、バックグラウンド時の優先情報が1であるアプリBとアプリBを実行するOSとが登録されているパターンを選択した場合を想定する。さらに、指定部3433がアプリBの優先指定として、優先情報5を指定した状態を想定する。このとき、抽出部3426は、指定部3433による優先指定を優先し、アプリBの優先情報を5であるとして抽出する。
図35は、優先アプリ情報テーブル3405の記憶内容の一例を示す説明図である。優先アプリ情報テーブル3405に含まれるフィールドは、優先アプリパターンテーブル1702が有するフィールドから、パターン番号フィールドを除いたフィールド群となる。優先アプリ情報テーブル3405に含まれるフィールドに格納される値は、優先アプリパターンテーブル1702と同様であるため、説明を省略する。
また、図35で示す優先アプリ情報テーブル3405は、優先情報の指定内容に関して4種類示している。4種類の優先情報の指定内容を、図35ではそれぞれ、優先指定1〜優先指定4で示す。なお、優先指定が指定される契機としては、キーボード208の各ボタンのうち、あらかじめ決定されていたボタンが押下されることによって優先情報が指定される。また、情報処理装置100は、優先情報を指定するボタンを4つ用意しておき、それぞれのボタンを優先指定1〜優先指定4に割り当ててもよい。
優先指定1は、対象のアプリがどのような状態であっても、優先情報が指定された指定方法である。優先指定1における具体的な指定内容は、優先アプリ情報テーブル3405−1で示すように、対象VM操作中フィールド内のフォアグラウンドフィールド、対象VM操作中フィールド内のバックグラウンドフィールドに所定数となる5が格納された状態である。同様に、優先アプリ情報テーブル3405−1には、対象VM非操作中フィールド内のフォアグラウンドフィールド、対象VM非操作中フィールド内のバックグラウンドフィールドにも5が設定される。
優先指定2は、対象のアプリが、操作対象VMで実行可能アプリとなっており、かつフォアグラウンドとなる場合の優先情報が指定された指定方法である。優先指定2における具体的な指定内容は、優先アプリ情報テーブル3405−2で示すように、対象VM操作中フィールド内のフォアグラウンドフィールドに5が格納された状態である。
優先指定3は、対象のアプリがフォアグラウンドとなる場合の優先情報が指定された指定方法である。優先指定3における具体的な指定内容は、優先アプリ情報テーブル3405−3で示すように、対象VM操作中フィールド内のフォアグラウンドフィールドと対象VM非操作中フィールド内のフォアグラウンドフィールドに5が格納された状態である。
優先指定4は、対象のアプリが操作対象VMで実行可能アプリとなっている場合の優先情報が指定された指定方法である。優先指定4における具体的な指定内容は、優先アプリ情報テーブル3405−4の対象VM操作中フィールド内のフォアグラウンドフィールドとバックグラウンドフィールドに5が格納される状態である。
なお、優先アプリ情報テーブル3405−1〜優先アプリ情報テーブル3405−4で格納されていた所定数は、あらかじめ決定されていてもよいし、あらかじめ決定されていたボタンが押下されるたびに、定数分加算されていってもよい。また、キーボード208の各ボタンのうち、優先情報の指定を解除するボタンが決定されていてもよい。
図36は、実施の形態6にかかる優先指定部3418の処理手順の一例を示すフローチャートである。優先指定部3418は、ハイパーバイザ111が実行する。また、優先指定部3418は、キーボード208内のいずれかのボタンが押下されたことを契機に実行される。
ハイパーバイザ111は、優先指定として決定されているボタンが押下されたか否かを判断する(ステップS3601)。優先指定として決定されているボタンが押下された場合(ステップS3601:Yes)、ハイパーバイザ111は、優先情報設定部3413に優先指定を通知し(ステップS3602)、優先指定部3418の処理を終了する。なお、図35で示したように、優先指定1〜優先指定4として決定されている4つのボタンが存在する場合、ハイパーバイザ111は、ステップS3602の処理にて、対応する優先指定を通知してもよい。
優先指定として決定されているボタンが押下されていない場合(ステップS3601:No)、ハイパーバイザ111は、優先指定解除として決定されているボタンが押下されたか否かを判断する(ステップS3603)。優先指定解除として決定されているボタンが押下された場合(ステップS3603:Yes)、ハイパーバイザ111は、優先情報設定部3413に優先指定解除を通知し(ステップS3604)、優先指定部3418の処理を終了する。優先指定解除として決定されているボタンが押下されていない場合(ステップS3603:No)、ハイパーバイザ111は、優先指定部3418の処理を終了する。
図37、図38にて、優先情報設定部3413の処理手順の一例を示すフローチャートの説明を行う。優先情報設定部3413は、優先制御VM112が実行する。また、図38で示すステップS3801〜ステップS3811の処理は、ステップS3809を除いて、図24に示した優先情報設定部313のステップS2401〜ステップS2412の処理と等しいため、説明を省略する。
なお、ステップS2402、ステップS2404での処理対象となる実行可能アプリ情報テーブル1701に関して、ステップS3802、ステップS3804の処理では、実行可能アプリ情報テーブル3401に置き換わる。同様に、ステップS2406〜ステップS2408での処理対象となる実行可能アプリ情報テーブル1701に関して、ステップS3806〜ステップS3808の処理では、実行可能アプリ情報テーブル3401に置き換わる。また、ステップS2408での処理対象となる優先アプリパターンテーブル1702に関して、ステップS3808の処理では、優先アプリパターンテーブル3402に置き換わる。
また、ステップS2411、ステップS2412での処理対象となるアプリ優先情報管理部1714に関して、ステップS3811、ステップS3812の処理では、アプリ優先情報管理部3414に置き換わる。
図37は、実施の形態6にかかる優先情報設定部3413の処理手順の一例を示すフローチャート(その1)である。優先制御VM112は、優先指定を受け付けたか否かを判断する(ステップS3701)。優先指定を受け付けた場合(ステップS3701:Yes)、優先制御VM112は、実行可能アプリ情報テーブル3401から、操作対象VMと、操作対象VMにてフォアグラウンドフィールドに設定されたアプリIDを取得する(ステップS3702)。取得後、優先制御VM112は、優先アプリ情報テーブル3405の取得した操作対象VMとVM IDフィールドの値が一致し、かつ取得したアプリIDとアプリIDフィールドが一致するレコードを選択する(ステップS3703)。
続けて、優先制御VM112は、レコードが選択できたか否かを判断する(ステップS3704)。レコードが選択できた場合(ステップS3704:Yes)、優先制御VM112は、選択したレコードの優先情報フィールドを所定数に更新し(ステップS3705)、ステップS3808の処理に移行する。レコードが選択できなかった場合(ステップS3704:No)、優先制御VM112は、優先アプリ情報テーブル3405に、取得した操作対象VM、取得したアプリID、所定数となるレコードを登録する(ステップS3706)。登録後、優先制御VM112は、ステップS3808の処理に移行する。
なお、優先情報フィールド内の、どのサブフィールドに所定数が格納されるかについては、通知された優先指定の種別に応じて変更してもよい。たとえば、優先制御VM112は、優先指定1が通知されてきた場合、優先情報フィールド内の全てのサブフィールドに所定数を格納する。
優先指定を受け付けていない場合(ステップS3701:No)、優先制御VM112は、優先指定解除を受け付けたか否かを判断する(ステップS3707)。優先指定解除を受け付けた場合(ステップS3707:Yes)、優先制御VM112は、優先アプリ情報テーブル3405のうち、取得した操作対象VMとVM IDフィールドの値が一致し、かつ取得したアプリIDとアプリIDフィールドが一致するレコードを削除する(ステップS3708)。削除後、優先制御VM112は、ステップS3808の処理に移行する。優先指定解除を受け付けていない場合(ステップS3707:No)、優先制御VM112は、ステップS3801の処理に移行する。
図38は、実施の形態6にかかる優先情報設定部3413の処理手順の一例を示すフローチャート(その2)である。ステップS3808の処理後、優先制御VM112は、優先アプリ情報テーブル3405と選択されたパターンから、全実行可能アプリの優先情報を、各アプリが操作対象VMで実行しているか否かとフォアグラウンドか否かとに応じて抽出する(ステップS3809)。抽出後、優先制御VM112は、ステップS3810の処理に移行する。
以上説明したように、スケジューリングプログラム、および情報処理装置によれば、優先指定に応じて、アプリの優先度を更新する。これにより、実施の形態6にかかる情報処理装置は、ユーザがより優先して実行させたいアプリを優先的に実行することができる。
なお、本実施の形態で説明したスケジューリング方法は、あらかじめ用意されたスケジューリングプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本スケジューリングプログラムは、ハードディスク、フレキシブルディスク、CD−ROM、MO、DVD等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本スケジューリングプログラムは、インターネット等のネットワークを介して配布してもよい。