(57)【特許請求の範囲】
【請求項１】
コンピュータに、
ＯＳを動作させる仮想計算機を複数実行し、
前記ＯＳから起動完了したソフトウェアの起動数の変更を受け付け、
前記起動数の変更を受け付けた場合、前記起動数の変更後における前記ＯＳで起動完了したソフトウェアを記憶する第１のテーブルを更新し、
起動完了したソフトウェア群の組合せを記憶する第２のテーブルから、前記第１のテーブルで記憶されたソフトウェア群に応じた組合せを選択し、
前記組合せごとに記憶される各ソフトウェアの優先度を前記第２のテーブルから、前記選択された組み合わせに応じて抽出し、
前記第１のテーブルに記憶されたソフトウェアの優先度を、前記抽出された優先度に更新し、
更新された優先度を参照して実行ＯＳを動作させる仮想計算機を選択する、
処理を実行させるスケジューリングプログラム。
【請求項２】
前記コンピュータに、
前記第１のテーブルに記憶されたいずれかのソフトウェアが実行状態にあるか否かを判断し、
前記第１のテーブルに記憶されたいずれかのソフトウェアを実行するＯＳが実行ＯＳであるか否かを判断し、
前記第１のテーブルに記憶された実行前後のソフトウェアの優先度の高低を判断し、
判断された判断結果に基づいて、前記実行ＯＳを動作させる仮想計算機を選択する、
処理を実行させる請求項１に記載のスケジューリングプログラム。
【請求項３】
前記コンピュータに、
前記ＯＳで操作対象にあるソフトウェアの変更を受け付け、
前記操作対象にあるソフトウェアの変更を受け付けた場合、前記操作対象にあるソフトウェアを特定し、
操作対象のソフトウェアに対応する優先度を記憶する前記第２のテーブルから、前記特定されたソフトウェアに対応する優先度を前記第２のテーブルから抽出する、
処理を実行させる請求項１または２に記載のスケジューリングプログラム。
【請求項４】
前記コンピュータに、
操作対象ＯＳが変更されたことを検出し、
前記操作対象ＯＳの変更が検出された場合、前記操作対象ＯＳの変更後における操作対象ＯＳを特定し、
前記操作対象ＯＳに対応する優先度を記憶する前記第２のテーブルから、前記特定されたＯＳに対応する優先度を抽出する、
処理を実行させる請求項１〜３のいずれか一つに記載のスケジューリングプログラム。
【請求項５】
前記コンピュータに、
前記ＯＳで前記起動完了したソフトウェアの起動数を変更するシステムコールが発行されたことを検出し、
前記システムコールの発行が検出された場合、前記システムコールの発行に応じた前記起動完了したソフトウェアの起動数の変更を受け付ける、
処理を実行させる請求項１〜４のいずれか一つに記載のスケジューリングプログラム。
【請求項６】
前記コンピュータに、
操作対象ＯＳで操作対象にあるソフトウェアの優先度を指定し、
前記選択された組合せと前記指定された優先度とから、前記第１のテーブルで管理されたソフトウェアの優先度を抽出する、
処理を実行させる請求項１〜５のいずれか一つに記載のスケジューリングプログラム。
【請求項７】
前記コンピュータに、
前記ＯＳで実行状態にあるソフトウェアが切り替わったことを検出し、
前記実行状態にあるソフトウェアの切替が検出された場合、切替前のソフトウェアの優先度と切替後のソフトウェアの優先度との高低を判断し、
判断された判断結果に基づいて、実行ＯＳを動作させる仮想計算機を選択する、
処理を実行させる請求項１に記載のスケジューリングプログラム。
【請求項８】
自装置で動作するＯＳにより起動完了したソフトウェアを管理し、当該管理するソフトウェアの優先度を記憶する第１の記憶部と、
起動完了したソフトウェア群の組合せと、当該組み合わせごとにソフトウェアの優先度を記憶する第２の記憶部と、
ＯＳを動作させる複数の仮想計算機と、
前記ＯＳから前記起動完了したソフトウェアの起動数の変更を受け付ける受付部と、
前記受付部によって前記起動数の変更を受け付けた場合、前記起動数の変更後における前記ＯＳで起動完了したソフトウェアを記憶する前記第１の記憶部を更新する更新部と、
前記第１の記憶部に記憶されたソフトウェア群に応じた組合せを前記第２の記憶部から選択する選択部と、
前記選択部によって選択された組合せから、前記第１の記憶部に記憶されたソフトウェアの優先度を前記第２の記憶部から抽出する抽出部と、
前記第１の記憶部によって記憶されたソフトウェアの優先度を、前記抽出部によって抽出された優先度に更新する更新部と、
前記更新部によって更新された優先度を参照して実行ＯＳを動作させる仮想計算機を選択する選択部と、
を備えることを特徴とする情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＯＳをスケジューリングするスケジューリングプログラム、および情報処理装置に関する。
【背景技術】
【０００２】
近年、携帯電話等の携帯端末に、１台の計算機上で複数のＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）を動作させる仮想化技術の適用が見込まれている。仮想化技術の適用によって１台の携帯端末上で複数のＯＳが動作可能になると、複数台の携帯端末を持ち歩いていたユーザは、各携帯端末の機能を１台の携帯端末にまとめることができる。携帯端末は、複数のＯＳを切り替えて、各ＯＳで実行するアプリケーションソフトウェア（以下、「アプリ」と称する）を実行する。なお、仮想化技術には、ＯＳを制御するハイパーバイザがハードウェア上で直接動作し、ハイパーバイザが全てのＯＳを動作させる方法と、ホストＯＳが初めに動作し、ホストＯＳ上の１アプリとしてハイパーバイザが別のゲストＯＳを動作させる方法とがある。
【０００３】
このように、１つの装置内で複数のＯＳが実行しているため、仮想化技術を適用した携帯端末は、複数のＯＳのうちどのＯＳを実行させるかを決定するスケジューリング処理を実行する。ＯＳのスケジューリング技術として、たとえば、ＯＳからハイパーバイザに対して、各ＯＳで実行するアプリの優先度を通知することで、ＯＳ間で優先度を比較し、より優先度が高いアプリを実行するＯＳを選択するという技術が開示されている。また、各ＯＳの割込み処理に優先度を設定しておき、割込みに対応する優先度にＯＳの優先度を設定するという技術が開示されている（たとえば、下記特許文献１、２を参照。）。
【０００４】
また、ホストＯＳ型のハイパーバイザにおいて、ホスト上で実行するアプリのうち、高優先のアプリと高優先でないアプリに分類し、高優先でないアプリとハイパーバイザを同じ優先度にすることで、高優先のアプリを優先して実行可能にする技術が開示されている。また、ハイパーバイザと仮想化技術による仮想マシン（仮想計算機）上間での共通通信領域を確保することで、ハイパーバイザと仮想マシンでの制御の移行をなくし、処理を効率化する技術が開示されている（たとえば、下記特許文献３、４を参照。）。
【０００５】
また、各ＯＳが有するアプリの優先度は、基準が統一されていない場合がある。基準が統一されていない場合に対して、ハイパーバイザが各ＯＳの優先度を比較可能な共通の優先度に正規化して、ＯＳ間の優先度を比較するという技術が開示されている（たとえば、下記特許文献５を参照。）。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０００−３４７８８３号公報
【特許文献２】特開２００９−１７６１３９号公報
【特許文献３】特開昭５９−０５８５５３号公報
【特許文献４】特開２００６−１８８２０号公報
【特許文献５】特開２０００−２４２５１２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、上述した従来技術において、ハイパーバイザは、ＯＳから通知される優先度を用いてＯＳのスケジューリングを行っていた。ＯＳから通知される優先度は、個々のＯＳで実行されるアプリを効率的に動作させることは可能であるが、装置全体で動作しているアプリを効率的に動作させることが困難であるという問題があった。
【０００８】
本発明は、上述した従来技術による問題点を解消するため、装置全体で動作するアプリの実行状況に合わせて、ＯＳをスケジューリングできるスケジューリングプログラム、および情報処理装置を提供することを目的とする。
【課題を解決するための手段】
【０００９】
上述した課題を解決し、目的を達成するため、本発明の一側面によれば、ＯＳを動作させる仮想計算機を複数実行し、ＯＳから起動完了したソフトウェアの起動数の変更を受け付け、起動数の変更を受け付けた場合、起動数の変更後におけるＯＳで起動完了したソフトウェアを記憶する第１のテーブルを更新し、起動完了したソフトウェア群の組合せを記憶する第２のテーブルから、第１のテーブルで記憶されたソフトウェア群に応じた組合せを選択し、組合せごとに記憶される各ソフトウェアの優先度を第２のテーブルから、選択された組み合わせに応じて抽出し、第１のテーブルに記憶されたソフトウェアの優先度を、抽出された優先度に更新するスケジューリングプログラム、および情報処理装置が提案される。
【発明の効果】
【００１０】
本発明の一側面によれば、装置全体で動作するアプリの実行状況に合わせて、ＯＳをスケジューリングできるという効果を奏する。
【図面の簡単な説明】
【００１１】
【図１】図１は、実施の形態１にかかる情報処理装置１００の動作例を示す説明図である。
【図２】図２は、実施の形態１にかかる情報処理装置１００のハードウェア例を示すブロック図である。
【図３】図３は、情報処理装置１００の機能例を示すブロック図である。
【図４】図４は、実行可能アプリ情報テーブル３０１の記憶内容の一例を示す説明図である。
【図５】図５は、アプリ実行情報テーブル３０２の記憶内容の一例を示す説明図である。
【図６】図６は、優先アプリパターンテーブル１１３の記憶内容の一例を示す説明図である。
【図７】図７は、アプリ優先情報テーブル１１４の記憶内容の一例を示す説明図である。
【図８】図８は、アプリ優先情報テーブル１１４の更新方法の一例を示す説明図である。
【図９】図９は、既存スケジューラへの実施の形態１の適用例におけるアプリ切替前の状態を示す説明図である。
【図１０】図１０は、既存スケジューラへの実施の形態１の適用例におけるアプリ切替後の状態を示す説明図である。
【図１１】図１１は、アプリ通知部３１１の処理手順の一例を示すフローチャートである。
【図１２】図１２は、アプリ実行情報管理部３１２の処理手順の一例を示すフローチャートである。
【図１３】図１３は、優先情報設定部３１３の処理手順の一例を示すフローチャートである。
【図１４】図１４は、アプリ優先情報管理部３１４の処理手順の一例を示すフローチャートである。
【図１５】図１５は、実行アプリ特定部３１５の処理手順の一例を示すフローチャートである。
【図１６】図１６は、実行ＶＭ選択部３１６の処理手順の一例を示すフローチャートである。
【図１７】図１７は、実施の形態２にかかる情報処理装置１００の機能例を示すブロック図である。
【図１８】図１８は、実施の形態２にかかる実行可能アプリ情報テーブル１７０１の記憶内容の一例を示す説明図である。
【図１９】図１９は、実施の形態２にかかる優先アプリパターンテーブル１７０２の記憶内容の一例を示す説明図である。
【図２０】図２０は、優先アプリパターンテーブル１７０２からの優先情報の抽出例を示す説明図である。
【図２１】図２１は、操作ＶＭ切替部１７１７の処理手順の一例を示すフローチャートである。
【図２２】図２２は、実施の形態２にかかるアプリ通知部１７１１の処理手順の一例を示すフローチャートである。
【図２３】図２３は、実施の形態２にかかるアプリ実行情報管理部１７１２の処理手順の一例を示すフローチャートである。
【図２４】図２４は、実施の形態２にかかる優先情報設定部１７１３の処理手順の一例を示すフローチャートである。
【図２５】図２５は、実施の形態３にかかる情報処理装置１００の機能例を示すブロック図である。
【図２６】図２６は、実施の形態３にかかるアプリ通知部２５１１の処理手順の一例を示すフローチャートである。
【図２７】図２７は、実施の形態３にかかる実行アプリ特定部２５１５の処理手順の一例を示すフローチャートである。
【図２８】図２８は、実施の形態４にかかる情報処理装置１００の機能例を示すブロック図である。
【図２９】図２９は、実施の形態４にかかるアプリ通知部２８１１の処理手順の一例を示すフローチャートである。
【図３０】図３０は、実施の形態４にかかる優先情報設定部２８１３の処理手順の一例を示すフローチャートである。
【図３１】図３１は、実施の形態５にかかる情報処理装置１００の機能例を示すブロック図である。
【図３２】図３２は、実施の形態５にかかるアプリ起動またはアプリ終了の検出方法の一例を示す説明図である。
【図３３】図３３は、実施の形態５にかかるアプリ通知部３１１１の処理手順の一例を示すフローチャートである。
【図３４】図３４は、実施の形態６にかかる情報処理装置１００の機能例を示すブロック図である。
【図３５】図３５は、優先アプリ情報テーブル３４０５の記憶内容の一例を示す説明図である。
【図３６】図３６は、実施の形態６にかかる優先指定部３４１８の処理手順の一例を示すフローチャートである。
【図３７】図３７は、実施の形態６にかかる優先情報設定部３４１３の処理手順の一例を示すフローチャート（その１）である。
【図３８】図３８は、実施の形態６にかかる優先情報設定部３４１３の処理手順の一例を示すフローチャート（その２）である。
【発明を実施するための形態】
【００１２】
以下に添付図面を参照して、開示のスケジューリングプログラム、および情報処理装置の実施の形態を詳細に説明する。
【００１３】
（実施の形態１の説明）
図１は、実施の形態１にかかる情報処理装置１００の動作例を示す説明図である。情報処理装置１００は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１０１、メモリ１０２を含む。ＣＰＵ１０１とメモリ１０２は、バス１０３で接続されている。ＣＰＵ１０１は、情報処理装置１００を制御する。メモリ１０２は、ＣＰＵ１０１からアクセス可能な記憶装置である。
【００１４】
また、ＣＰＵ１０１は、ハイパーバイザ１１１を実行している。ハイパーバイザ１１１は、コンピュータを仮想化し、複数のＯＳを実行できるように制御するソフトウェアである。図１の例では、ハイパーバイザ１１１は、仮想マシンＶＭ（Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ）１、仮想マシンＶＭ２、優先制御ＶＭ１１２を稼働させる。また、ハイパーバイザ１１１は、仮想マシンＶＭ１、仮想マシンＶＭ２のうち、ＣＰＵ１０１に割り当てるＶＭを選択するスケジューリング処理を実行し、スケジューリング処理で選択されたＶＭをＣＰＵ１０１に割り当てる。
【００１５】
仮想マシンＶＭ１、仮想マシンＶＭ２は、情報処理装置１００で動作する仮想的なコンピュータである。たとえば、仮想マシンＶＭ１、仮想マシンＶＭ２は、情報処理装置１００のハードウェア資源となるＣＰＵ１０１、メモリ１０２等を仮想化し、仮想化された実行環境をＶＭ上で実行されるソフトウェアに提供するソフトウェアである。図１の例では、ＶＭ１上で実行されるソフトウェアがＯＳ１であり、ＯＳ１は、アプリＡとアプリＢを実行している。同様に、ＶＭ２上で実行されるソフトウェアがＯＳ２であり、ＯＳ２は、アプリＣを実行している。
【００１６】
なお、以下の説明において、アプリの状態として、実行可能状態と実行状態という用語を定義する。実行可能状態にあるアプリとは、ＯＳによってアプリの実行情報をメモリ１０２に展開され、ＯＳによって対象のアプリが起動完了しており、ＯＳのスケジュールリング処理の対象として存在している状態である。以下、実行可能状態にあるアプリを実行可能アプリと称する。実行状態にあるアプリとは、実行可能アプリ群のうち、スケジュールリング処理によってＣＰＵ１０１に割り当てられたアプリである。以下、実行状態にあるアプリを実行中アプリと称する。
【００１７】
なお、アプリの状態としては、実行可能状態と実行状態以外に、待機状態が存在する。待機状態にあるアプリとは、実行状態に入出力処理等が始まり、待機状態に遷移したアプリである。なお、待機状態にあるアプリは、入出力処理等が完了して実行できる状態になった場合、実行可能状態に遷移する。なお、本実施の形態では、実行可能アプリ群に待機状態にあるアプリを含めてもよい。
【００１８】
また、以下の説明において、ＯＳによってアプリの実行情報がメモリ１０２に展開され、起動処理が完了したアプリを、起動完了したアプリと定義する。起動完了したアプリは、実行可能状態、実行状態、待ち状態、のうちいずれかの状態に遷移する。以下の説明において、起動完了したアプリは、実行可能状態にあるアプリ、実行状態にあるアプリ、待ち状態にあるアプリを含む。
【００１９】
優先制御ＶＭ１１２は、各ＶＭでの実行可能アプリに応じて、実行可能アプリに対する優先情報をハイパーバイザ１１１に通知する機能を有する。なお、優先情報は、実行可能アプリに対する優先度を示している。また、優先情報には、アプリを特定しない場合のデフォルトの優先度が含まれていてもよい。優先制御ＶＭ１１２の機能は仮想マシンとして実装されているが、優先制御ＶＭ１１２の機能がハイパーバイザ１１１に含まれていてもよい。
【００２０】
また、情報処理装置１００は、優先アプリパターンテーブル１１３とアプリ優先情報テーブル１１４にアクセス可能である。優先アプリパターンテーブル１１３とアプリ優先情報テーブル１１４は、メモリ１０２に格納されている。優先アプリパターンテーブル１１３は、起動完了したソフトウェア群の組合せごとに起動完了したソフトウェア群の各ソフトウェアの優先度を記憶するテーブルである。なお、優先アプリパターンテーブル１１３の詳細は、図６にて後述する。アプリ優先情報テーブル１１４は、ＶＭごとに、実行中アプリと実行可能アプリとアプリの優先情報を組み合わせて保持するテーブルである。なお、アプリ優先情報テーブル１１４の詳細は、図７にて後述する。
【００２１】
上述の形態をとる情報処理装置１００において、ＯＳ１が新たにアプリＢを起動した状態を想定する。このとき、優先制御ＶＭ１１２は、１つ目のＶＭとなるＶＭ番号１でアプリＡ、アプリＢが実行可能アプリであり、２つ目のＶＭとなるＶＭ番号２でアプリＣが実行可能アプリであることを特定する。続けて、優先制御ＶＭ１１２は、特定結果に基づいて優先アプリパターンテーブル１１３に登録されたパターンのうち、最も適したパターンを選択する。図１の例では、ＶＭ番号１にアプリＢが含まれており、同様にパターン番号１にアプリＢが含まれているため、優先制御ＶＭ１１２は、パターン番号１を選択する。選択後、優先制御ＶＭは、選択されたパターンから、アプリの優先情報を抽出し、抽出された優先情報をハイパーバイザ１１１に通知する。
【００２２】
ハイパーバイザ１１１は、優先制御ＶＭ１１２より通知を受け付けると、アプリ優先情報テーブル１１４のうち、ＶＭ１の、アプリＢの優先情報を受け付けた値“１”に更新する。
【００２３】
更新後、ハイパーバイザ１１１は、アプリ優先情報テーブル１１４のＶＭ１の実行中アプリフィールドをアプリＢに更新する。続けて、ハイパーバイザ１１１は、全ＶＭ内で実行中アプリのうち、最高の優先情報が設定されたアプリを実行するＶＭを選択する。なお、アプリ優先情報テーブル１１４’は、アプリ優先情報テーブル１１４のレコードから全ＶＭ内で実行中アプリのみ表示したイメージである。図１の例では、アプリＣが、優先情報が最高のアプリであるため、ハイパーバイザ１１１は、実行可能ＶＭ群となるＶＭ１、ＶＭ２のうち、ＶＭ２を実行ＶＭとしてＣＰＵに割り当てて実行する。
【００２４】
このように、情報処理装置１００は、複数のＯＳの各々で実行可能状態のアプリが起動または終了したことを受け付けると、各ＯＳの実行可能アプリの組合せに応じてアプリの優先度を更新する。これにより、情報処理装置１００は、ＯＳが設定している優先度を用いずに、装置全体で動作するアプリの実行状況に合わせて、ＯＳをスケジューリングすることができる。以下、図２〜図１６において、実施の形態１にかかる情報処理装置１００の説明を行う。
【００２５】
（情報処理装置１００のハードウェア）
図２は、実施の形態１にかかる情報処理装置１００のハードウェア例を示すブロック図である。図２において、情報処理装置１００は、ＣＰＵ１０１と、ＲＯＭ（Ｒｅａｄ‐Ｏｎｌｙ  Ｍｅｍｏｒｙ）２０１と、ＲＡＭ２０２と、を含む。また、情報処理装置１００は、フラッシュＲＯＭ２０３と、フラッシュＲＯＭコントローラ２０４と、フラッシュＲＯＭ２０５と、を含む。また、情報処理装置１００は、ユーザやその他の機器との入出力装置として、ディスプレイ２０６と、Ｉ／Ｆ（Ｉｎｔｅｒｆａｃｅ）２０７と、キーボード２０８と、を含む。また、各部はバス１０３によってそれぞれ接続されている。なお、図１で示したメモリ１０２は、ＲＯＭ２０１、ＲＡＭ２０２、フラッシュＲＯＭ２０３、フラッシュＲＯＭ２０５の全て、あるいは一部となる。
【００２６】
ここで、ＣＰＵ１０１は、情報処理装置１００の全体の制御を司る。本実施の形態における情報処理装置１００は、ＣＰＵが一つであるシングルコアプロセッサシステムを想定しているが、複数のＣＰＵを含むマルチコアプロセッサシステムであってもよい。また、マルチコアプロセッサシステムとは、コアが複数搭載されたプロセッサを含むコンピュータのシステムである。コアが複数搭載されていれば、複数のコアが搭載された単一のプロセッサでもよく、シングルコアのプロセッサが並列されているプロセッサ群でもよい。また、ＣＰＵ１０１は、専用のキャッシュメモリを含んでもよい。また、ＣＰＵ１０１とバス１０３は、ＭＭＵ（Ｍｅｍｏｒｙ  Ｍａｎａｇｅｍｅｎｔ  Ｕｎｉｔ）２１０で接続されている。
【００２７】
ＭＭＵ２１０は、ＣＰＵ１０１の要求するメモリアクセスを処理する。具体的に、ＭＭＵ２１０は、アプリがアクセスする仮想アドレスとＲＡＭ２０２のアドレスである物理アドレスとを１エントリとするページテーブルにアクセスし、ＣＰＵ１０１から仮想アドレスのアクセスが発生すると、物理アドレスのアクセスに変換する。また、ＭＭＵ２１０は、ページテーブルのエントリをキャッシュするＴＬＢ（Ｔｒａｎｓｌａｔｉｏｎ  Ｌｏｏｋａｓｉｄｅ  Ｂｕｆｆｅｒ）にアクセス可能である。このページテーブルのエントリは、アプリごとに有してもよい。
【００２８】
さらに、ＴＬＢには、アプリごとの仮想アドレス空間を識別するＡＳＩＤ（Ａｄｄｒｅｓｓ  Ｓｐａｃｅ  ＩＤｅｎｔｉｆｉｅｒ）が含まれていてもよい。ＡＳＩＤは、同じ仮想アドレスに対するページテーブルのエントリを識別するＩＤである。ＡＳＩＤが存在しないＴＬＢは、複数のアプリのページエントリを混在させることができず、ＯＳがアプリを切り替えたときにＴＬＢのフラッシュが行われる。しかし、ＡＳＩＤを含むＴＬＢでは、ＡＳＩＤをアプリに対応づけることにより、ＯＳがアプリを切り替えたときにアプリＴＬＢのフラッシュを行わなくてもよく、アプリ切替によるコストを低減することができる。
【００２９】
ＲＯＭ２０１は、ブートプログラムなどのプログラムを記憶している。ＲＡＭ２０２は、ＣＰＵ１０１のワークエリアとして使用される。フラッシュＲＯＭ２０３は、読出し速度が高速なフラッシュＲＯＭであり、たとえば、ＮＯＲ型フラッシュメモリである。フラッシュＲＯＭ２０３は、ＯＳなどのシステムソフトウェアやアプリなどを記憶している。たとえば、ＯＳを更新する場合、情報処理装置１００は、Ｉ／Ｆ２０７によって新しいＯＳを受信し、フラッシュＲＯＭ２０３に格納されている古いＯＳを、受信した新しいＯＳに更新する。
【００３０】
フラッシュＲＯＭコントローラ２０４は、ＣＰＵ１０１の制御に従ってフラッシュＲＯＭ２０５に対するデータのリード／ライトを制御する。フラッシュＲＯＭ２０５は、データの保存、運搬を主に目的としたフラッシュＲＯＭであり、たとえば、ＮＡＮＤ型フラッシュメモリである。フラッシュＲＯＭ２０５は、フラッシュＲＯＭコントローラ２０４の制御で書き込まれたデータを記憶する。データの具体例としては、情報処理装置１００を使用するユーザがＩ／Ｆ２０７を通して取得した画像データ、映像データなどや、また本実施の形態にかかるスケジューリングプログラムなどを記憶してもよい。フラッシュＲＯＭ２０５は、たとえば、メモリカード、ＳＤカードなどを採用することができる。
【００３１】
ディスプレイ２０６は、カーソル、アイコンあるいはツールボックスを始め、文書、画像、機能情報などのデータを表示する。ディスプレイ２０６は、たとえば、ＴＦＴ（Ｔｈｉｎ  Ｆｉｌｍ  Ｔｒａｎｓｉｓｔｏｒ）液晶ディスプレイなどを採用することができる。
【００３２】
Ｉ／Ｆ２０７は、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワーク２０９に接続され、ネットワーク２０９を介して他の装置に接続される。そして、Ｉ／Ｆ２０７は、ネットワーク２０９と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ２０７には、たとえばモデムやＬＡＮアダプタなどを採用することができる。
【００３３】
キーボード２０８は、数字、各種指示などの入力のためのキーを有し、データの入力を行う。また、キーボード２０８は、タッチパネル式の入力パッドやテンキーなどであってもよい。
【００３４】
（情報処理装置１００の機能）
次に、情報処理装置１００の機能について説明する。図３は、情報処理装置１００の機能例を示すブロック図である。なお、情報処理装置１００は、各機能からアクセスされるテーブルとして、優先アプリパターンテーブル１１３と、アプリ優先情報テーブル１１４と、実行可能アプリ情報テーブル３０１と、アプリ実行情報テーブル３０２と、にアクセス可能である。また、優先アプリパターンテーブル１１３と、アプリ優先情報テーブル１１４と、実行可能アプリ情報テーブル３０１と、アプリ実行情報テーブル３０２と、はメモリ１０２に格納されている。なお、実行可能アプリ情報テーブル３０１と優先アプリパターンテーブル１１３は優先制御ＶＭ１１２によってアクセスされ、アプリ実行情報テーブル３０２とアプリ優先情報テーブル１１４は、ハイパーバイザ１１１によってアクセスされる。
【００３５】
情報処理装置１００は、アプリ通知部３１１とアプリ実行情報管理部３１２と優先情報設定部３１３とアプリ優先情報管理部３１４と実行アプリ特定部３１５と実行ＶＭ選択部３１６とを含む。さらに、情報処理装置１００は、アプリ通知部３１１〜実行ＶＭ選択部３１６内に、検出部３２１と受付部３２２と特定部３２３と特定部３２４と選択部３２５と抽出部３２６と更新部３２７と判断部３２８と検出部３２９と判断部３３０と選択部３３１を含む。この制御部となる機能（検出部３２１〜選択部３３１）は、記憶装置に記憶されたプログラムをＣＰＵ１０１が実行することにより、その機能を実現する。記憶装置とは、具体的には、たとえば、図２に示したＲＯＭ２０１、ＲＡＭ２０２、フラッシュＲＯＭ２０３、フラッシュＲＯＭ２０５などである。
【００３６】
なお、検出部３２１−１、検出部３２１−２は、それぞれ、アプリ通知部３１１−１、アプリ通知部３１１−２に含まれる。また、受付部３２２と特定部３２３はアプリ実行情報管理部３１２に含まれ、特定部３２４と選択部３２５と抽出部３２６は優先情報設定部３１３に含まれ、更新部３２７と判断部３２８はアプリ優先情報管理部３１４に含まれる。また、検出部３２９と判断部３３０は実行アプリ特定部３１５に含まれ、選択部３３１は実行ＶＭ選択部３１６に含まれる。
【００３７】
なお、アプリ通知部３１１は、仮想マシンＶＭ１、仮想マシンＶＭ２に含まれる機能である。具体的には、アプリ通知部３１１−１が仮想マシンＶＭ１に含まれる機能であり、アプリ通知部３１１−２が仮想マシンＶＭ２に含まれる機能である。アプリ実行情報管理部３１２、アプリ優先情報管理部３１４〜実行ＶＭ選択部３１６がハイパーバイザ１１１に含まれる機能であり、優先情報設定部３１３が優先制御ＶＭ１１２に含まれる機能である。なお、優先情報設定部３１３は、ハイパーバイザ１１１に含まれる機能であってもよい。
【００３８】
なお、仮想マシンＶＭ１、仮想マシンＶＭ２の実装方法として、２種類の方法が存在する。１つ目の仮想化方法は、ＯＳを修正することなくそのまま動作可能とする完全仮想化であり、２つ目の仮想化方法は、特権命令をハイパーバイザ１１１への呼び出しに修正してＯＳを動作させる準仮想化である。なお、ハイパーバイザ１１１への呼び出しは、ハイパーコールと称される。
【００３９】
実装方法が完全仮想化である場合、仮想マシンＶＭ１、仮想マシンＶＭ２のハイパーバイザ１１１への通知方法は、ＶＭ上で特権命令が実行されたときにＣＰＵ１０１が例外を発生させることで、ハイパーバイザ１１１への通知が可能である。
【００４０】
実装方法が準仮想化の場合、仮想マシンＶＭ１、仮想マシンＶＭ２のハイパーバイザ１１１への通知方法は、ハイパーコールを実行することにより可能である。なお、ハイパーコールは、ソフトウェア割込みなどのＣＰＵ１０１の機能を利用して実現される。また、実装方法が完全仮想化であるＶＭも、ハイパーコールによる通知が可能である。これらの通知機能を利用して、ＶＭは、ハイパーバイザ１１１に指示を出す。
【００４１】
実行可能アプリ情報テーブル３０１は、ＶＭごとに、ＶＭ上のＯＳで起動完了したアプリ群を記憶するテーブルである。実行可能アプリ情報テーブル３０１は、ＶＭとアプリの識別情報とを１レコードとして記憶している。実行可能アプリ情報テーブル３０１の詳細については、図４にて後述する。
【００４２】
アプリ実行情報テーブル３０２は、ＶＭごとに、アプリを特定可能なアプリＩＤとアプリ実行時情報を組合せとして保持するテーブルである。なお、アプリ実行時情報とは、ＯＳで実行中のアプリをハイパーバイザ１１１が特定可能な情報である。アプリ実行情報テーブル３０２の詳細については、図５にて後述する。
【００４３】
アプリ通知部３１１は、ＶＭ上のＯＳでアプリが起動され、起動完了した場合、または、アプリが終了する場合に、アプリ実行情報管理部３１２に通知する。アプリ実行情報管理部３１２に通知する情報は、アプリＩＤとアプリ実行時情報である。
【００４４】
アプリ実行情報管理部３１２は、アプリ通知部３１１からのアプリ起動とアプリ終了の通知を受け付け、アプリ起動時には、アプリＩＤとアプリ実行時情報をアプリ実行情報テーブル３０２に登録する。アプリ実行情報管理部３１２は、アプリ終了時に、通知を受け付けたアプリＩＤに対応するレコードをアプリ実行情報テーブル３０２から削除する。また、アプリ実行情報管理部３１２は、アプリの登録削除を優先情報設定部３１３へ通知する。なお、通知する情報は、登録または削除があったアプリが実行されているＶＭ  ＩＤと、アプリＩＤである。
【００４５】
優先情報設定部３１３は、アプリ実行情報管理部３１２からのアプリ起動とアプリ終了の通知を受け付け、アプリ起動時にＶＭ  ＩＤとアプリＩＤを実行可能アプリ情報テーブル３０１に登録する。また、優先情報設定部３１３は、アプリ終了時にＶＭ  ＩＤとアプリ  ＩＤのレコードを実行可能アプリ情報テーブル３０１から削除する。また、優先情報設定部３１３は、実行可能アプリ情報テーブル３０１と優先アプリパターンテーブル１１３から、実行可能アプリ情報テーブル３０１に登録されているアプリに対する優先情報を抽出する。抽出後、優先情報設定部３１３は、アプリ優先情報管理部３１４へ優先情報を通知する。
【００４６】
なお、優先情報設定部３１３は、ハイパーバイザ１１１の機能でもよい。優先情報設定部３１３が受けるアプリ実行情報管理部３１２からのアプリ起動とアプリ終了の通知は、優先情報設定部３１３が仮想マシンの機能である場合、割込みハンドラをコールバックすることにより可能である。
【００４７】
アプリ優先情報管理部３１４は、優先情報設定部３１３にて決定されたアプリごとの優先情報を受け付け、アプリ優先情報テーブル１１４を更新する。実行アプリ特定部３１５は、ＶＭ上のＯＳによるアプリ切替時に、アプリ実行情報テーブル３０２を参照して切替後のアプリを特定する。実行ＶＭ選択部３１６は、ハイパーバイザ１１１内のスケジューラであり、どのＶＭをスケジューリングするかを、アプリ優先情報を用いて決定する。
【００４８】
検出部３２１は、複数のＯＳのいずれかのＯＳで起動完了したソフトウェアの起動数が変更されたことを検出する機能を有する。起動数とは、起動完了したソフトウェアの数である。なお、起動完了したソフトウェアの起動数が変更される場合として、アプリが起動する場合、またはアプリが終了する場合が存在する。たとえば、検出部３２１は、ＶＭ１上のＯＳ１で、アプリＡが起動され起動完了すると、起動完了したソフトウェアの起動数が変更されたこととして検出する。なお、検出されたデータは、ＣＰＵ１０１のレジスタ、ＣＰＵ１０１のキャッシュメモリ、ＲＡＭ２０２、フラッシュＲＯＭ２０３などの記憶領域に記憶される。
【００４９】
受付部３２２は、複数のＯＳのいずれかのＯＳから起動完了したソフトウェアの起動数の変更を受け付ける機能を有する。たとえば、受付部３２２は、ＯＳ１からアプリＡが起動され起動完了し、起動完了したソフトウェアの起動数が増加したという通知を受け付ける。また、受付部３２２は、起動完了したソフトウェアの起動数が増加する原因となったアプリＡの情報を受け付けてもよい。なお、通知を受け付けたという結果は、ＣＰＵ１０１のレジスタ、ＣＰＵ１０１のキャッシュメモリ、ＲＡＭ２０２、フラッシュＲＯＭ２０３などの記憶領域に記憶されてもよい。
【００５０】
特定部３２３、特定部３２４は、起動数の変更を受け付けた場合、起動数の変更後における複数のＯＳの各々で起動完了したソフトウェア群を特定する機能を有する。たとえば、受付部３２２が、ＯＳ１内でアプリＡが起動され、起動完了したソフトウェアの起動数が増加したという通知を受け付けた場合を想定する。このとき、特定部３２３は、増加の原因となったアプリＡを起動したＶＭのＶＭ  ＩＤとアプリＡの識別情報をアプリ実行情報テーブル３０２に登録する。また、特定部３２４は、アプリＡを起動したＶＭのＶＭ  ＩＤとアプリＡの識別情報を実行可能アプリ情報テーブル３０１に登録する。
【００５１】
また、受付部３２２が、ＯＳ１内でアプリＡが終了し起動完了したソフトウェアの起動数が減少したという通知を受け付けた場合を想定する。このとき、特定部３２３は、アプリ実行情報テーブル３０２から、減少の原因となったアプリＡを実行していたＶＭのＶＭ  ＩＤとアプリＡの識別情報を有するレコードを削除する。同様に、特定部３２４は、実行可能アプリ情報テーブル３０１から、アプリＡを実行していたＶＭのＶＭ  ＩＤとアプリＡの識別情報を有するレコードを削除する。
【００５２】
このように、特定部３２３、特定部３２４は、アプリ実行情報テーブル３０２、実行可能アプリ情報テーブル３０１を更新することで、複数のＯＳで起動完了したアプリ群を特定した情報を保持し続けることができる。なお、特定を行ったという結果は、ＣＰＵ１０１のレジスタ、ＣＰＵ１０１のキャッシュメモリ、ＲＡＭ２０２、フラッシュＲＯＭ２０３などの記憶領域に記憶されてもよい。
【００５３】
選択部３２５は、第２のテーブルから、特定されたソフトウェア群に応じた組合せを選択する機能を有する。なお、第２のテーブルとは起動完了したソフトウェア群の組合せごとに起動完了したソフトウェア群の各ソフトウェアの優先度を記憶する優先アプリパターンテーブル１１３である。
【００５４】
たとえば、特定部３２４が、ＶＭ１上のＯＳ１でアプリＡ、アプリＢが起動完了しＶＭ２上のＯＳ２でアプリＣが起動完了していることを特定した場合を想定する。また、登録されているパターンが２つ存在しており、パターン番号１が、優先情報が１であるアプリＢとアプリＢを実行するＯＳとが登録されている状態を想定する。また、パターン番号２が、優先情報が５であるアプリＢと優先情報が４であるアプリＣとアプリＢおよびアプリＣを実行するＯＳとが登録されている状態を想定する。
【００５５】
このとき、選択部３２５は、優先アプリパターンテーブル１１３から、特定されたアプリ群に応じたパターン番号１を選択する。なお、パターンの選択方法については、図８にて後述する。また、選択されたパターンの番号、または選択されたパターンへのポインタ等が、ＣＰＵ１０１のレジスタ、ＣＰＵ１０１のキャッシュメモリ、ＲＡＭ２０２、フラッシュＲＯＭ２０３などの記憶領域に記憶される。
【００５６】
抽出部３２６は、選択された組合せから、特定されたソフトウェア群の各ソフトウェアの優先度を抽出する機能を有する。たとえば、選択部３２５が、アプリＢの優先情報として１が登録されたパターンを選択した場合を想定する。このとき、抽出部３２６は、選択したパターンからアプリＢの優先情報を抽出する。なお、抽出された優先情報は、ＣＰＵ１０１のレジスタ、ＣＰＵ１０１のキャッシュメモリ、ＲＡＭ２０２、フラッシュＲＯＭ２０３などの記憶領域に記憶される。
【００５７】
更新部３２７は、情報処理装置１００で動作する複数のＯＳのうちＯＳごとに起動完了したソフトウェアの優先度を記憶する第１のテーブル内における特定されたソフトウェア群の各ソフトウェアの優先度を、抽出された優先度に更新する機能を有する。なお、第１のテーブルとは、アプリ優先情報テーブル１１４のことを示している。
【００５８】
たとえば、抽出部３２６がアプリＢの優先情報として１を抽出した場合を想定する。このとき、更新部３２７は、アプリ優先情報テーブル１１４内のアプリＢの優先情報に抽出した優先情報を更新する。なお、更新を行ったという情報は、ＣＰＵ１０１のレジスタ、ＣＰＵ１０１のキャッシュメモリ、ＲＡＭ２０２、フラッシュＲＯＭ２０３などの記憶領域に記憶されてもよい。
【００５９】
判断部３２８は、更新部３２７による更新後、特定されたソフトウェア群のうちいずれかのソフトウェアが実行状態にあるか否かを判断する機能を有する。たとえば、判断部３２８は、ＶＭ１上のＯＳ１で実行されているアプリＢの優先情報が更新された場合、アプリＢが実行状態にあるか否かを判定する。
【００６０】
また、判断部３２８は、優先情報が更新されたソフトウェアを実行するＯＳが実行ＯＳであるか否かを判断してもよい。なお、実行ＯＳとは、実行ＶＭ上で動作しているＯＳのことである。たとえば、判断部３２８は、ＶＭ１上のＯＳ１で実行されているアプリＢの優先情報が更新された場合、ＯＳ１が実行ＯＳであるか否かを判断する。
【００６１】
また、判断部３２８は、優先情報が更新されたソフトウェアの更新後の優先度と優先情報が更新されたソフトウェアの更新前の優先度との高低を判断してもよい。たとえば、判断部３２８は、アプリＢの更新後の優先情報が更新前の優先情報より高いか否かを判断する。なお、判断結果は、ＣＰＵ１０１のレジスタ、ＣＰＵ１０１のキャッシュメモリ、ＲＡＭ２０２、フラッシュＲＯＭ２０３などの記憶領域に記憶される。
【００６２】
検出部３２９は、情報処理装置１００で動作する複数のＯＳのうちいずれかのＯＳで実行状態にあるソフトウェアが切り替わったことを検出する機能を有する。たとえば、検出部３２９は、ＶＭ１上のＯＳ１で、実行状態にあるアプリがアプリＡからアプリＢに切り替わったことを検出する。なお、具体的な切り替わったアプリの特定方法として、ページテーブルアドレスを用いた方法や、ＡＳＩＤを用いた方法が存在する。なお、検出された切替後の実行状態にあるアプリの情報は、アプリ優先情報テーブル１１４に登録される他、ＣＰＵ１０１のレジスタ、ＣＰＵ１０１のキャッシュメモリなどの記憶領域に記憶されてもよい。
【００６３】
判断部３３０は、検出部３２９によって実行状態にあるソフトウェアの切替が検出された場合、切替前のソフトウェアの優先度と切替後のソフトウェアの優先度との高低を判断する機能を有する。たとえば、検出部３２９がアプリＡからアプリＢに切り替わった場合を想定する。このとき、判断部３３０は、変更前であるアプリＡの優先度と変更後であるアプリＢの優先度との高低を判断する。なお、判断結果は、ＣＰＵ１０１のレジスタ、ＣＰＵ１０１のキャッシュメモリ、ＲＡＭ２０２、フラッシュＲＯＭ２０３などの記憶領域に記憶される。
【００６４】
選択部３３１は、更新部３２７によって第１のテーブルが更新された場合に、第１のテーブルを参照して複数のＯＳのうち操作対象ＯＳを選択する機能を有する。たとえば、選択部３３１は、アプリ優先情報テーブル１１４内の実行中アプリのうち、優先情報が最高の実行中アプリを実行するＯＳを選択する。
【００６５】
また、選択部３３１は、判断部３２８の判断による判断結果に基づいて、実行ＯＳを選択してもよい。たとえば、ＶＭ１上のＯＳ１で実行されているアプリＢの優先情報が更新された場合を想定する。このとき、判断結果として、アプリＢが実行状態にあり、かつ、アプリＢを実行するＯＳ１が実行ＯＳであると判断され、かつ、アプリＢの更新後の優先情報が更新前の優先情報より低いと判断された場合、選択部３３１は、実行ＯＳを選択する。また、別の判断結果として、アプリＢが実行状態にあり、かつ、アプリＢを実行するＯＳ１が実行ＯＳでないと判断され、かつ、アプリＢの更新後の優先情報が更新前の優先情報より高いと判断された場合、選択部３３１は、実行ＯＳを選択する。
【００６６】
また、選択部３３１は、検出部３２９によって実行状態にあるソフトウェアが変更されたことが検出された場合に、実行ＯＳを選択してもよい。また、選択部３３１は、判断部３３０による判断結果に基づいて、実行ＯＳを選択してもよい。たとえば、判断部３３０による判断結果が切替後のアプリの優先度が切替前のアプリの優先度より低い場合に、選択部３３１は、実行ＯＳを選択する。なお、選択された実行ＯＳの識別情報は、ＣＰＵ１０１のレジスタ、ＣＰＵ１０１のキャッシュメモリ、ＲＡＭ２０２、フラッシュＲＯＭ２０３などの記憶領域に記憶される。
【００６７】
図４は、実行可能アプリ情報テーブル３０１の記憶内容の一例を示す説明図である。実行可能アプリ情報テーブル３０１は、ＶＭ  ＩＤ、アプリＩＤという２つのフィールドを含む。ＶＭ  ＩＤフィールドには、ＶＭを識別する識別情報が格納される。ＶＭを識別する識別情報として、具体的には、ＶＭの名称でもよいし、一意に採番された番号などでもよい。
【００６８】
アプリＩＤフィールドには、ＶＭ  ＩＤで指定されるＶＭ上で動作するＯＳでの実行可能アプリを識別する識別情報が格納される。なお、アプリＩＤに設定される値は、一つのＯＳに閉じたＩＤではなく、ハイパーバイザ１１１や他のＯＳからも識別可能なＩＤである。アプリを識別する識別情報として、具体的には、アプリの名称でもよいし、アプリの名称からなんらかの変換によってアプリＩＤを算出してもよいし、アプリのファイル内に識別情報が埋め込まれていてもよい。また、アプリを識別しない場合に、アプリＩＤフィールドは、“ｕｎｋｎｏｗｎ”を格納していてもよい。たとえば、図４の例では、ＶＭ１は、アプリＡ、アプリＢ、アプリＡまたはアプリＢ以外の他のアプリを実行している。ＶＭ２は、何らかのアプリを実行している。
【００６９】
なお、図４で示す実行可能アプリ情報テーブル３０１では、先頭のレコード〜３番目のレコードのＶＭ  ＩＤフィールドが結合されており、結合されたフィールドにＶＭ１が格納されている。実行可能アプリ情報テーブル３０１は、このようなデータ形態をとってもよいし、各レコードのフィールドに同一の値が格納されていてもよい。以降説明を行う他のテーブルも同様である。
【００７０】
図５は、アプリ実行情報テーブル３０２の記憶内容の一例を示す説明図である。図５では、アプリ実行情報テーブル３０２が取り得る形態として、符号５０１で示す説明図と符号５０２で示す説明図と、の２種類のアプリ実行情報テーブル３０２が取り得る形態を説明する。アプリ実行情報テーブル３０２は、ＶＭ  ＩＤ、アプリＩＤ、アプリ実行時情報という３つのフィールドを含む。ＶＭ  ＩＤフィールドには、ＶＭを識別する識別情報が格納される。アプリＩＤフィールドには、ＶＭ  ＩＤで指定されるＶＭ上で動作するＯＳでの実行可能アプリを識別する識別情報が格納される。アプリ実行時情報フィールドには、アプリＩＤフィールドにて識別されるアプリをハイパーバイザ１１１が特定可能な情報が格納される。なお、実行中アプリを特定せず、どのアプリであってもよい場合、アプリ実行時情報フィールドには、“ＡＮＹ”が格納される。
【００７１】
符号５０１で示す説明図では、アプリ実行時情報フィールドにページテーブルアドレスが採用された例である。ページテーブルは、アプリに対して用意される仮想アドレスであり、アプリごとに異なる。したがって、ハイパーバイザ１１１は、アプリ切替に伴うページテーブルの切替要求時に、切替後のページアドレスとアプリ実行情報テーブル３０２のアプリ実行時情報とを比較することで、切替後のアプリを特定することができる。
【００７２】
たとえば、符号５０１で示すアプリ実行情報テーブル３０２では、ＶＭ１がアプリＡ、アプリＢ、アプリＡまたはアプリＢ以外の他のアプリを起動している。アプリＡは、ページテーブルを２つ使用しており、アドレスが０ｘ１２３４５６７８から始まるページテーブルと、アドレスが０ｘ２３４５６７８８から始まるページテーブルを使用している。アプリＢは、アドレスが０ｘ３４５６７８９Ｃから始まるページテーブルを使用している。アプリＡまたはアプリＢ以外の他のアプリは、特定されないアプリである。ページテーブルとして、アドレスが０ｘ４５６７８９ＡＣから始まるページテーブルを使用しているアプリと、前述の４つのページテーブルアドレス以外のページテーブルを使用しているアプリは特定されない。
【００７３】
また、ＶＭ２のレコードは、ＶＭ２が起動された時点での初期状態を示している。このような場合、ＶＭ２ではアプリを特定できない状態である。ハイパーバイザ１１１によってアプリＩＤとアプリ実行時情報が登録されると、レコードが追加される。
【００７４】
符号５０２で示す説明図では、アプリ実行時情報フィールドにＡＳＩＤが採用された例である。ＡＳＩＤがアプリに対応づけられている場合、ハイパーバイザ１１１は、アプリ切替に伴うＡＳＩＤ切替時に、切替後のＡＳＩＤとアプリ実行情報テーブル３０２のアプリ実行時情報とを比較することで、切替後のアプリを特定することができる。
【００７５】
たとえば、符号５０２で示すアプリ実行情報テーブル３０２では、ＶＭ１がアプリＡ、アプリＢ、アプリＡまたはアプリＢ以外の他のアプリを起動している。アプリＡは、ＡＳＩＤを２つ使用しており、ＡＳＩＤ：１とＡＳＩＤ：２を使用している。アプリＢは、ＡＳＩＤ：３を使用している。アプリＡまたはアプリＢ以外の他のアプリは、特定されないアプリである。ＡＳＩＤとして、ＡＳＩＤ：４を使用しているアプリと、前述のＡＳＩＤ：１〜４以外のＩＤを使用しているアプリは特定されない。また、ＶＭ２は、ＶＭ２が起動された時点での初期状態を示している。
【００７６】
図６は、優先アプリパターンテーブル１１３の記憶内容の一例を示す説明図である。テーブルは、パターン番号、ＶＭ番号、アプリＩＤ、優先情報という４つのフィールドを含む。パターン番号フィールドには、パターンを識別する識別情報が格納される。ＶＭ番号フィールドには、アプリを実行しているＶＭを区別するための番号が格納される。このように、ＶＭ番号とＶＭ  ＩＤフィールドは異なる情報である。アプリＩＤフィールドには、対象パターン時にて実行しているアプリの識別情報が格納される。
【００７７】
優先情報フィールドには、アプリＩＤフィールドに格納されているアプリの優先度が格納される。なお、優先情報フィールドには、数字が大きい程優先度が高くなるように設定してもよいし、数字が小さい程優先度が高くなるように設定してもよい。本実施の形態にかかる優先情報フィールドの設定は、０が最も優先度が低く、数字が大きい程優先度が高くなる設定であると想定する。
【００７８】
たとえば、図６で示す優先アプリパターンテーブル１１３では、３つのパターンが登録されている。パターン番号１は、あるＶＭにて、優先情報が１となるアプリＢが実行可能アプリである状態を示している。パターン番号２は、あるＶＭにて、優先情報が５となるアプリＡと優先情報が４となるアプリＢが実行可能アプリである状態を示している。パターン番号３は、あるＶＭにて、優先情報が５となるアプリＡと優先情報が３となるアプリＢが実行可能アプリであり、別のＶＭにて、優先情報が４となるアプリＣと優先情報が２となるアプリＤが実行可能アプリとなっている。
【００７９】
なお、アプリＩＤがｕｎｋｎｏｗｎの優先情報については、デフォルトの優先情報を用意しておいてもよい。デフォルト以外の優先情報を設定する場合、優先アプリパターンテーブル１１３は、アプリＩＤフィールドがｕｎｋｎｏｗｎのレコードを登録しておく。たとえば、パターン番号２は、アプリＡ、アプリＢ以外のアプリの優先情報が０である。パターン番号３は、あるＶＭで実行可能アプリである、アプリＡ、アプリＢ以外のアプリの優先情報が１であり、他のＶＭで実行可能アプリである、アプリＣ、アプリＤ以外のアプリの優先情報が０である。
【００８０】
たとえば、アプリＢは、パターン番号１で示すように単独で実行している際には優先度が低いが、パターン番号２で示すようにアプリＡが実行可能アプリである際には優先度が高くなる。このような設定は、アプリＡとアプリＢが連携して動作する際に有効である。
【００８１】
たとえば、アプリＢが位置情報を取得するアプリであり、アプリＡが現在地から特定の位置までの経路を案内するアプリであることを想定する。このとき、アプリＢが実行可能アプリでありアプリＡが起動していない場合、位置情報を積極的に取得しなくてよいため、情報処理装置１００は、アプリＢの優先度を低く設定する。しかし、アプリＢが実行可能アプリであり、アプリＡが起動完了し実行可能アプリとなった場合、位置情報を頻繁に取得することで、アプリＡにて示される現在地がより正確となる。したがって、情報処理装置１００は、アプリＢとアプリＡの優先度を他のアプリより高くすることで、ユーザに対してより実用的な優先度制御を行うことができる。
【００８２】
図７は、アプリ優先情報テーブル１１４の記憶内容の一例を示す説明図である。図７では、アプリ優先情報テーブル１１４が取り得る形態として、符号７０１で示す説明図と符号７０２で示す説明図と、の２種類のアプリ優先情報テーブル１１４が取り得る形態を説明する。
【００８３】
符号７０１の説明図で示すアプリ優先情報テーブル１１４は、ＶＭ１〜ＶＭ３がシングルコア用のＶＭである場合を示している。アプリ優先情報テーブル１１４は、ＶＭ  ＩＤ、実行中アプリ、アプリＩＤ、優先情報という４つのフィールドを含む。ＶＭ  ＩＤフィールドには、ＶＭを識別する識別情報が格納される。実行中アプリフィールドには、対象ＶＭで実行中アプリの識別情報が格納される。アプリＩＤフィールドには、対象ＶＭで実行可能アプリを識別する識別情報が格納される。優先情報フィールドには、実行可能アプリの優先情報が格納される。
【００８４】
たとえば、符号７０１の説明図で示すアプリ優先情報テーブル１１４にて、ＶＭ１は、優先情報が３であるアプリＡと優先情報が５であるアプリＢと優先情報が０であるアプリＩＤを特定しない何らかのアプリを起動しており（起動していない場合もある）、そのうちアプリＡを実行している。同様に、ＶＭ２は、優先情報が４であるアプリＣと優先情報が０であるアプリＩＤを特定しない何らかのアプリを起動しており（起動していない場合もある）、そのうちアプリＣを実行している。また、ＶＭ３は、優先情報が１となるアプリＩＤを特定しない何らかのアプリを実行している。
【００８５】
符号７０２の説明図で示すアプリ優先情報テーブル１１４は、ＶＭがマルチコアプロセッサシステムに対応している場合の記憶内容の一例である。符号７０２の説明図で示すアプリ優先情報テーブル１１４は、実行中アプリフィールドが、実行中アプリ０フィールドと実行中アプリ１フィールドに拡張されている。符号７０２で示す例では、ＶＭ１が２プロセッサに対応している状態を示している。ＶＭ１は、アプリＡとアプリＢを実行している。なお、ＶＭ２、ＶＭ３は、シングルコアプロセッサシステム用のＶＭであることを想定しているため、実行中アプリ０フィールドにアプリＩＤが設定され、実行中アプリ１フィールドには値が設定されない。
【００８６】
なお、符号７０１および符号７０２で示したアプリ優先情報テーブル１１４が取り得る２種類の形態とは異なる形態として、アプリ優先情報テーブル１１４は、実行中アプリフィールドの代わりに、実行中アプリフラグを有していてもよい。実行中アプリフラグフィールドは、アプリＩＤフィールドに格納されたアプリが実行中である場合に、フラグがオンに設定される。マルチコアプロセッサシステム対応のＶＭであれば、実行中アプリに対応するレコード分、実行中アプリフラグフィールドのフラグがオンに設定される。このようなデータ形態をもつことで、情報処理装置１００内に含まれるＣＰＵ１０１がいくつであっても、アプリ優先情報テーブル１１４のフィールド数を一定にすることができる。
【００８７】
図８は、アプリ優先情報テーブル１１４の更新方法の一例を示す説明図である。初めに、優先制御ＶＭ１１２は、実行可能アプリ情報テーブル３０１を参照して、情報処理装置１００のアプリの起動状態が、優先アプリパターンテーブル１１３に登録されているパターンのうち最も当てはまるパターンを選択する。具体的な選択方法としては、それぞれのパターンが、実行可能アプリ情報テーブル３０１の部分集合であるか否かで選択する。次に、優先制御ＶＭ１１２は、選択されたパターンから、全実行可能アプリに対する優先情報を抽出し、抽出された優先情報をハイパーバイザ１１１に通知する。
【００８８】
たとえば、パターン番号１は、あるＶＭにてアプリＢが実行可能状態にある状態である。このとき、実行可能アプリ情報テーブル３０１ではアプリＢが実行状態アプリであることを示しているため、パターン番号１は、実行可能アプリ情報テーブル３０１の部分集合となる。同様に、パターン番号２は、あるＶＭにてアプリＡとアプリＢが実行可能アプリである状態である。このとき、実行可能アプリ情報テーブル３０１がアプリＡとアプリＢが同一のＶＭとなるＶＭ１で実行している状態を示しているため、パターン番号２は、実行可能アプリ情報テーブル３０１の部分集合となる。
【００８９】
パターン番号３は、あるＶＭにてアプリＡとアプリＢが実行可能アプリであり、別のＶＭでアプリＣとアプリＤが実行可能アプリである状態である。このとき、実行可能アプリ情報テーブル３０１がアプリＡとアプリＢが同一のＶＭとなるＶＭ１で実行している状態を示しているが、別のＶＭとなるＶＭ２ではアプリＣとアプリＤを実行していない。したがって、パターン番号３は、実行可能アプリ情報テーブル３０１の部分集合ではない。
【００９０】
以上より、パターン番号１とパターン番号２が実行可能アプリ情報テーブル３０１の部分集合となる。このように、複数のパターンが選択された場合に、さらに１つのパターンをどのように選択するかという方法については、たとえば、下記２つの選択方法が存在する。
【００９１】
１つ目の選択方法は、優先アプリパターンテーブル１１３に登録されているパターンについて、優先順位が高いパターンを先頭に登録しておき、最初に当てはまったパターンを選択する方法である。１つ目の方法であれば、優先制御ＶＭ１１２は、優先アプリパターンテーブル１１３のうち、パターン番号１を選択する。１つ目の選択方法は、選択にかかる時間を短くすることができる。
【００９２】
２つ目の選択方法は、抽出されたパターンのうち、最も大きな部分集合となるパターンを選択する方法である。２つ目の方法であれば、優先制御ＶＭ１１２は、優先アプリパターンテーブル１１３のうち、パターン番号２を選択する。２つ目の選択方法は、より情報処理装置１００の実行状況にあったパターンを選択することができる。
【００９３】
１つ目または２つ目の選択方法によって選択されたパターンから、優先制御ＶＭ１１２は、全実行可能アプリに対する優先情報を決定する。なお、選択されたパターンに登録されていないアプリの優先情報については、デフォルト値の優先情報を設定してもよいし、アプリＩＤにｕｎｋｎｏｗｎが設定された優先情報を設定してもよい。
【００９４】
なお、優先アプリパターンテーブル１１３に登録されているパターンが実行可能アプリ情報テーブル３０１の部分集合とならない場合も存在する。この場合、実行可能アプリ情報テーブル３０１が優先アプリパターンテーブル１１３に登録されているパターンのうち、部分集合となるパターンを選択してもよい。または、選択対象となるパターンが存在しなかったということで、優先制御ＶＭ１１２は、全てのアプリＩＤに対してｕｎｋｎｏｗｎに設定されている優先情報をハイパーバイザ１１１に通知する。
【００９５】
選択されたパターンに登録されたアプリに対する優先情報が通知されたハイパーバイザ１１１は、対応する優先情報を更新する。図８の例では、パターン番号１に登録されたアプリに対する優先情報が通知された場合による更新例として、アプリ優先情報テーブル１１４−１を図示している。同様に、パターン番号２に登録されたアプリに対する優先情報が通知された場合による更新例として、アプリ優先情報テーブル１１４−２を図示している。
【００９６】
パターン番号１に登録されたアプリに対する優先情報が通知された場合、ハイパーバイザ１１１は、アプリＢの優先情報を５から１に更新し、その他のアプリの優先情報をデフォルト値の０に更新する。また、パターン番号２に登録されたアプリに対する優先情報が通知された場合、ハイパーバイザ１１１は、アプリＡの優先情報を３から５に更新し、アプリＢの優先情報を５から４に更新し、その他のアプリの優先情報をデフォルト値の０に更新する。更新後にアプリ切替の通知を受けたハイパーバイザ１１１は、各ＶＭのうち、実行中アプリの優先情報が最も高いＶＭを選択する。
【００９７】
たとえば、アプリ優先情報テーブル１１４−１の例では、ハイパーバイザ１１１は、ＶＭ１の実行中アプリであるアプリＢの優先情報１と、ＶＭ２の実行中アプリであるアプリＣの優先情報０とから、ＶＭ１を選択する。同様に、アプリ優先情報テーブル１１４−２の例では、ハイパーバイザ１１１は、ＶＭ１の実行中アプリであるアプリＢの優先情報４と、ＶＭ２の実行中アプリであるアプリＣの優先情報０とから、ＶＭ１を選択する。
【００９８】
このように、情報処理装置１００は、ＯＳが保持するアプリの優先度に影響されることなく、アプリの優先度を設定でき、ＯＳに依存しない効率的なスケジューリングを行うことができる。
【００９９】
次に、図９、図１０にて、既存スケジューラへの実施の形態１の適用例を示す。図９、図１０では、仮想マシンを提供するソフトウェアの一つであるＸｅｎ（登録商標）が採用するｃｒｅｄｉｔスケジューラに対して実施の形態１を適用する場合について説明を行う。なお、図９、図１０の説明の前に、ｃｒｅｄｉｔスケジューラの動作について説明を行う。
【０１００】
ｃｒｅｄｉｔスケジューラは、情報処理装置１００で動作中のＶＭに対して、定期的にｃｒｅｄｉｔという数値を配布する。続けて、ｃｒｅｄｉｔスケジューラは、ｃｒｅｄｉｔの保持量に応じて、動作中のＶＭに対してＵＮＤＥＲとＯＶＥＲという二つの優先度を設定する。優先度の関係としては、ＵＮＤＥＲがＯＶＥＲよりも優先度が高い。設定された優先度により、ｃｒｅｄｉｔスケジューラは、ＵＮＤＥＲ、ＯＶＥＲの順に、ランキューを並び替える。ランキューとは、実行可能なＶＭを実行順に並べたものである。ｃｒｅｄｉｔスケジューラは、このランキューから順にＶＭを選択する。ＶＭは、一定期間ＣＰＵ１０１に割り当てられる。
【０１０１】
ＶＭは、一定期間全てＣＰＵ１０１を占有して実行してもよいが、デバイスからの割込み待ちなどでアイドルになった場合、ＣＰＵ１０１を明け渡してもよい。ＣＰＵ１０１を明け渡した場合、ｃｒｅｄｉｔスケジューラは、ランキューから次のＶＭを選択する。その際、ｃｒｅｄｉｔスケジューラは、実行した期間のｃｒｅｄｉｔを減算する。
【０１０２】
このように、ｃｒｅｄｉｔスケジューラは、ｃｒｅｄｉｔの消費が供給を上回らなければ、優先度が高いままでＣＰＵ１０１に割り当てられ、ｃｒｅｄｉｔを消費すると優先度が下がり、実行が後回しになるというアルゴリズムである。
【０１０３】
なお、ｃｒｅｄｉｔスケジューラには、ＵＮＤＥＲとＯＶＥＲ以外にＢＯＯＳＴという優先度があるが、本実施の形態におけるスケジューリングプログラムでは直接適用しないため、説明を省略する。また、情報処理装置１００がマルチコアプロセッサシステムである場合、ランキューはＣＰＵ１０１ごとに存在するが、説明の簡略化のため、情報処理装置１００がシングルコアプロセッサシステムであることを想定し、ランキューが１つであると想定する。なお、実行しているＶＭはランキューから外され、再度実行待ちになったときにランキューに登録される。
【０１０４】
図９は、既存スケジューラへの実施の形態１の適用例におけるアプリ切替前の状態を示す説明図である。符号９０１で示す説明図は、情報処理装置１００のアプリ切替前の実行中ＶＭとランキューの状態を示している。情報処理装置１００は、ＶＭとして、ＶＭ１、ＶＭ２、ＶＭ３の三つのＶＭを動作しており、ＶＭ１とＶＭ２が優先度ＵＮＤＥＲで、ＶＭ３が優先度ＯＶＥＲである。図９、図１０の例では、ｃｒｅｄｉｔスケジューラ上で同一の優先度である場合に、実施の形態１によるスケジューリングを適用する。
【０１０５】
符号９０２で示す説明図は、アプリ切替前のアプリ優先情報テーブル１１４を示している。各ＶＭのアプリの実行状態は、図７で示した状態と同一であるため説明を省略する。ｃｒｅｄｉｔスケジューラによる優先度ＵＮＤＥＲのＶＭ１の優先情報は、実行中アプリであるアプリＡの優先情報である３となり、ＶＭ２の優先情報は、実行中アプリであるアプリＣの優先情報である４となる。したがって、ハイパーバイザ１１１は、ＶＭ２を選択し、実行ＶＭをＶＭ２に設定する。また、ランキューには、符号９０１で示すように優先度ＵＮＤＥＲとＯＶＥＲにより、ＶＭ１、ＶＭ３の順序で格納される。
【０１０６】
図１０は、既存スケジューラへの実施の形態１の適用例におけるアプリ切替後の状態を示す説明図である。図１０では、ＶＭ２にてアプリが切り替えられたときの、操作対象ＶＭの選択例を示している。符号１００１で示す説明図は、切替後のアプリ優先情報テーブル１１４を示している。各ＶＭのアプリの実行状態については、符号９０２で示したアプリ優先情報テーブル１１４と等しいので説明を省略する。
【０１０７】
符号１００１の説明図で示すアプリ優先情報テーブル１１４のように、ＶＭ２の実行中アプリがアプリＣからｕｎｋｎｏｗｎに切り替わり、優先情報が２に変更となる。この場合、ハイパーバイザ１１１は、実行アプリ特定部３１５を実行し、続けて、実行ＶＭ選択部３１６を実行する。実行ＶＭ選択部３１６の機能により、ハイパーバイザ１１１は、ｃｒｅｄｉｔスケジューラによる優先度ＵＮＤＥＲであるＶＭ２とＶＭ１を対象に、実行ＶＭを選択する。
【０１０８】
具体的な選択の様子を、符号１００２で示す説明図にて示す。ハイパーバイザ１１１は、比較対象となる優先度ＵＮＤＥＲであるＶＭ１とＶＭ２について、優先情報を比較する。比較結果、ＶＭ１の方が優先情報が高いため、ハイパーバイザ１１１は、ＶＭ１を選択し、ＶＭ１を実行ＶＭに設定する。続けて、ハイパーバイザ１１１は、ＶＭ２をランキューに登録する。なお、ＶＭ２とＶＭ３ではｃｒｅｄｉｔスケジューラの優先度によってＶＭ２の方が優先度が高いため、ハイパーバイザ１１１は、ＶＭ２、ＶＭ３の順にランキューに登録する。
【０１０９】
なお、図９、図１０では、ハイパーバイザ１１１は同じ優先度に対して比較を行っていたが、ＵＮＤＥＲとＯＶＥＲの全ての優先度のＶＭを対象として、実行ＶＭを選択してもよい。その際に、ハイパーバイザ１１１は、そのまま優先情報を比較してもよいし、または、ＯＶＥＲとＵＮＤＥＲを比較するため、優先度がＯＶＥＲであるＶＭの優先情報からある一定値を減算して、残りの値をＵＮＤＥＲのＶＭの優先情報と比較してもよい。また、ｃｒｅｄｉｔスケジューラは、優先度が２種類であったが、３種類以上の優先度を有したスケジューラにも適用することが可能である。
【０１１０】
また、ハイパーバイザ１１１は、ＶＭ上のＯＳが、ユーザモードで動作しているか、カーネルモードで動作しているかによって、アプリの優先情報を適用するかどうかを変更してもよい。ＯＳは、ユーザモードで動作しているときはアプリが実際に動作しているが、カーネルモードで動作しているときはシステムコールやデバイスアクセス、アプリ切替といった処理を行っている。ＯＳがカーネルモードで動作しているときに、アプリ切替が行われるため、より優先したいアプリに切り替わる可能性がある。このような場合も、ハイパーバイザ１１１がアプリの優先情報によって、スケジューリングを行ってしまうと、優先したいアプリの実行を遅らせてしまう。
【０１１１】
したがって、ＯＳがカーネルモードで動作している場合、ハイパーバイザ１１１は、アプリの優先情報を利用せずに、ｃｒｅｄｉｔスケジューラの動作そのままとする。これにより、情報処理装置１００は、優先したいアプリをタイミングよく実行することができる。
【０１１２】
以下、図１１〜図１６にて、図３〜図７で示した機能、テーブルを用いて実施の形態１にかかる情報処理装置１００の処理を示す。各処理は、ハイパーバイザ１１１の機能、優先制御ＶＭ１１２の機能、ＶＭ１、ＶＭ２の機能をＣＰＵ１０１が実行することで実現している。下記説明では、各処理がどのソフトウェアで実現されているかを記載するために、ハイパーバイザ１１１、優先制御ＶＭ１１２、ＶＭ１、ＶＭ２を実行主体として記述する。
【０１１３】
図１１は、アプリ通知部３１１の処理手順の一例を示すフローチャートである。アプリ通知部３１１は、仮想マシンであるＶＭ１、ＶＭ２が実行する。図１１の説明では、ＶＭ１が実行する場合を想定して説明を行う。なお、アプリ通知部３１１は、アプリの起動もしくは終了を契機に動作を開始する。フローチャートの説明の前に、アプリの起動時に実行される起動処理、アプリ終了時に実行される終了処理について説明を行う。
【０１１４】
ＶＭ上のＯＳにおいて、アプリ起動は、システムコールにより、実行可能アプリのファイル名を含むコマンドを指定して行われる。起動処理は、簡略すると以下のような処理を実行する。初めに、ＯＳは、プロセスを生成し、仮想アドレス空間を用意する。続けて、ＯＳは、実行可能アプリのファイルを仮想アドレス空間に展開し、プログラムカウンタなどのレジスタを設定することで、アプリの実行を開始する。この過程において、プロセスＩＤやアプリの名称などの情報は、ＯＳが保持する。以上がアプリ起動処理である。
【０１１５】
次に、終了処理の説明を行う。ＯＳは、メモリなどの資源を解放し、プロセスを削除する。この過程において、プロセスＩＤやプログラム名などの情報はゲストＯＳから削除される。アプリ通知部３１１は、これらのアプリの起動処理、終了処理に含まれてもよい。
【０１１６】
ＶＭ１は、アプリが起動されたか否かを判断する（ステップＳ１１０１）。アプリが起動された場合（ステップＳ１１０１：Ｙｅｓ）、ＶＭ１は、アプリの名称をアプリＩＤとして取得する（ステップＳ１１０２）。取得後、ＶＭ１は、ページテーブルアドレスをアプリ実行時情報として取得し（ステップＳ１１０３）、アプリ実行情報管理部３１２へアプリ起動を通知し（ステップＳ１１０４）、アプリ通知部３１１の処理を終了する。
【０１１７】
アプリが終了する場合（ステップＳ１１０１：Ｎｏ）、ＶＭ１は、アプリの名称をアプリＩＤとして取得し（ステップＳ１１０５）、アプリ実行情報管理部３１２へアプリ終了を通知し（ステップＳ１１０６）、アプリ通知部３１１の処理を終了する。
【０１１８】
図１２は、アプリ実行情報管理部３１２の処理手順の一例を示すフローチャートである。アプリ実行情報管理部３１２は、ハイパーバイザ１１１が実行する。また、アプリ実行情報管理部３１２は、アプリ通知部３１１からの通知を契機に動作を開始する。
【０１１９】
ハイパーバイザ１１１は、通知元のＶＭ  ＩＤを取得する（ステップＳ１２０１）。なお、ハイパーバイザ１１１は、現在動作中のＶＭのＩＤを取得することで、通知元のＶＭ  ＩＤを取得することができる。たとえば、ＶＭ１が実行中であり、アプリ通知部３１１−１から通知されてきた場合、ハイパーバイザ１１１は、ＶＭ１を取得する。同様に、ＶＭ２が実行中であり、アプリ通知部３１１−２から通知されてきた場合、ハイパーバイザ１１１は、ＶＭ２を取得する。
【０１２０】
取得後、ハイパーバイザ１１１は、アプリ起動を受け付けたか否かを判断する（ステップＳ１２０２）。アプリ起動を受け付けた場合（ステップＳ１２０２：Ｙｅｓ）、ハイパーバイザ１１１は、アプリＩＤとアプリ実行時情報と通知元のＶＭ  ＩＤをアプリ実行情報テーブル３０２に登録する（ステップＳ１２０３）。登録後、ハイパーバイザ１１１は、優先情報設定部３１３へアプリ起動を通知し（ステップＳ１２０４）、アプリ実行情報管理部３１２の処理を終了する。
【０１２１】
アプリ終了を受け付けた場合（ステップＳ１２０２：Ｎｏ）、ハイパーバイザ１１１は、アプリ実行情報テーブル３０２から通知元のＶＭ  ＩＤとアプリＩＤとに一致するレコードを削除する（ステップＳ１２０５）。削除後、ハイパーバイザ１１１は、優先情報設定部３１３へアプリ終了を通知し（ステップＳ１２０６）、アプリ実行情報管理部３１２の処理を終了する。
【０１２２】
図１３は、優先情報設定部３１３の処理手順の一例を示すフローチャートである。優先情報設定部３１３は、優先制御ＶＭ１１２が実行する。また、優先情報設定部３１３は、アプリ実行情報管理部３１２からの通知を契機に動作を開始する。
【０１２３】
優先制御ＶＭ１１２は、アプリ起動を受け付けたか否かを判断する（ステップＳ１３０１）。アプリ起動を受け付けた場合（ステップＳ１３０１：Ｙｅｓ）、優先制御ＶＭ１１２は、ＶＭ  ＩＤとアプリＩＤを実行可能アプリ情報テーブル３０１に登録する（ステップＳ１３０２）。また、アプリ終了を受け付けた場合（ステップＳ１３０１：Ｎｏ）、優先制御ＶＭ１１２は、実行可能アプリ情報テーブル３０１からＶＭ  ＩＤとアプリＩＤが一致するレコードを削除する（ステップＳ１３０３）。
【０１２４】
登録後、または削除後、優先制御ＶＭ１１２は、実行可能アプリ情報テーブル３０１と優先アプリパターンテーブル１１３から、全実行可能アプリに応じたパターンを選択する（ステップＳ１３０４）。選択後、優先制御ＶＭ１１２は、選択されたパターンから、全実行可能アプリの優先情報を抽出する（ステップＳ１３０５）。決定後、優先制御ＶＭ１１２は、アプリ終了を受け付けたか否かを判断する（ステップＳ１３０６）。アプリ終了以外を受け付けた場合（ステップＳ１３０６：Ｎｏ）、優先制御ＶＭ１１２は、アプリ優先情報管理部３１４へ優先情報と更新要求を通知し（ステップＳ１３０７）、優先情報設定部３１３の処理を終了する。
【０１２５】
アプリ終了を受け付けた場合（ステップＳ１３０６：Ｙｅｓ）、優先制御ＶＭ１１２は、アプリ優先情報管理部３１４へ優先情報と削除要求を通知し（ステップＳ１３０８）、優先情報設定部３１３の処理を終了する。なお、通知される優先情報は、アプリ単位で通知してもよいし、またはＶＭ単位、全実行可能アプリ、変更の差分、といった形で通知されてもよい。
【０１２６】
図１４は、アプリ優先情報管理部３１４の処理手順の一例を示すフローチャートである。アプリ優先情報管理部３１４は、ハイパーバイザ１１１が実行する。また、アプリ優先情報管理部３１４は、優先情報設定部３１３からの通知を契機に動作を開始する。ここでは、優先情報設定部３１３からの通知が、１レコードずつ行われる例を示す。優先情報設定部３１３からの通知は、複数レコードでも、ＶＭごとのレコードでも、全てのレコードであってもよい。また、優先情報設定部３１３からの通知は、変更分のレコードであってもよい。通知される１レコード分の情報とは、ＶＭ  ＩＤとアプリＩＤと優先情報を一組とした情報である。
【０１２７】
ハイパーバイザ１１１は、ＶＭ  ＩＤ、アプリＩＤ、優先情報を取得する（ステップＳ１４０１）。取得後、ハイパーバイザ１１１は、アプリ優先情報テーブル１１４のうち、取得したＶＭ  ＩＤとＶＭ  ＩＤフィールドの値とが一致し、取得したアプリＩＤとアプリＩＤフィールドの値が一致するレコードを選択する（ステップＳ１４０２）。選択後、ハイパーバイザ１１１は、更新要求を受け付けたか否かを判断する（ステップＳ１４０３）。更新要求を受け付けた場合（ステップＳ１４０３：Ｙｅｓ）、ハイパーバイザ１１１は、続けて、レコードが選択できたか否かを判断する（ステップＳ１４０４）。
【０１２８】
レコードが選択できた場合（ステップＳ１４０４：Ｙｅｓ）、ハイパーバイザ１１１は、選択したレコードに対して、取得した優先情報を更新する（ステップＳ１４０５）。レコードが選択できなかった場合（ステップＳ１４０４：Ｎｏ）、ハイパーバイザ１１１は、アプリ優先情報テーブル１１４に、取得したＶＭ  ＩＤ、アプリＩＤ、優先情報となるレコードを登録する（ステップＳ１４０６）。削除要求を受け付けた場合（ステップＳ１４０３：Ｎｏ）、ハイパーバイザ１１１は、選択したレコードをアプリ優先情報テーブル１１４から削除する（ステップＳ１４０７）。
【０１２９】
更新、登録、削除のいずれかを行った後、ハイパーバイザ１１１は、取得したアプリＩＤが実行アプリと一致するか否かを判断する（ステップＳ１４０８）。一致する場合（ステップＳ１４０８：Ｙｅｓ）、ハイパーバイザ１１１は、取得したＶＭ  ＩＤが実行ＶＭか否かを判断する（ステップＳ１４０９）。実行ＶＭである場合（ステップＳ１４０９：Ｙｅｓ）、ハイパーバイザ１１１は、続けて、取得した優先情報が更新前の優先情報より低いか否かを判断する（ステップＳ１４１０）。実行ＶＭであり、更新前の優先情報より低い場合（ステップＳ１４１０：Ｙｅｓ）、ハイパーバイザ１１１は、実行ＶＭ選択部３１６を呼び出し（ステップＳ１４１２）、アプリ優先情報管理部３１４の処理を終了する。
【０１３０】
実行ＶＭでない場合（ステップＳ１４０９：Ｎｏ）、ハイパーバイザ１１１は、取得した優先情報が更新前の優先情報より高いか否かを判断する（ステップＳ１４１１）。更新前の優先情報より高い場合（ステップＳ１４１１：Ｙｅｓ）、ハイパーバイザ１１１は、ステップＳ１４１２の処理に移行する。実行ＶＭであり、更新前の優先情報以上である場合（ステップＳ１４１０：Ｎｏ）、または、実行ＶＭでなく、更新前の優先情報以下である場合（ステップＳ１４１１：Ｎｏ）、ハイパーバイザ１１１は、アプリ優先情報管理部３１４の処理を終了する。
【０１３１】
一致しない場合（ステップＳ１４０８：Ｎｏ）、ハイパーバイザ１１１は、アプリ優先情報管理部３１４の処理を終了する。なお、ステップＳ１４０８の処理について、優先情報設定部３１３から削除要求が通知されてきた場合、アプリＩＤが実行アプリと一致することはない。したがって、ハイパーバイザ１１１は、削除要求が通知されてきた場合にステップＳ１４０８の処理を実行せずに、ステップＳ１４０８：Ｎｏのルートを実行してもよい。
【０１３２】
また、ハイパーバイザ１１１は、ステップＳ１４０８：Ｙｅｓとなった場合に、ステップＳ１４０９〜ステップＳ１４１１の判断処理を行わず、ステップＳ１４１２の処理を実行してもよい。この場合、ハイパーバイザ１１１は、判断にかかる時間を省くことができる。また、ステップＳ１４０９〜ステップＳ１４１１の判断処理を行った場合、ハイパーバイザ１１１は、実行ＶＭ選択部３１６の呼び出しを制限することができ、無駄なスケジューリング処理を抑えることができる。
【０１３３】
図１５は、実行アプリ特定部３１５の処理手順の一例を示すフローチャートである。実行アプリ特定部３１５は、ハイパーバイザ１１１が実行する。また、実行アプリ特定部３１５は、ＶＭ上ＯＳのアプリ切替を契機に動作を開始する。
【０１３４】
ハイパーバイザ１１１は、アプリ切替を検出し（ステップＳ１５０１）、アプリ切替を行ったＯＳのＶＭ  ＩＤを取得する（ステップＳ１５０２）。取得後、ハイパーバイザ１１１は、切替後のページテーブルアドレスを取得する（ステップＳ１５０３）。
【０１３５】
なお、ページテーブルアドレスの取得方法については、仮想マシンの実装方法が完全仮想化されたＯＳである場合、情報処理装置１００は、ページテーブルの設定を行う命令により、ＯＳからハイパーバイザ１１１に処理を遷移する。このとき、処理の遷移する原因となったページテーブル設定命令を解析することで、ハイパーバイザ１１１は、ページテーブルアドレスを取得できる。仮想マシンの実装方法が準仮想化されたＯＳである場合、ハイパーコールの引数として、切替後のページテーブルアドレスが指定されるため、ハイパーバイザ１１１は、引数からページテーブルアドレスを取得できる。
【０１３６】
なお、ページテーブルアドレスとしては、物理アドレスが指定される。しかし、仮想ソフトウェアによって仮想化されている場合、仮想マシン上のＯＳは、実際の物理アドレスとは異なる仮想的な物理アドレスを使用している。このため、アプリ実行情報テーブル３０２に登録されているアプリ実行時情報のアドレス種類は、ステップＳ１５０３で取得するアドレスと同じ種類のアドレスが登録される。アドレスの種類としては、実際の物理アドレス、仮想的な物理アドレス、仮想アドレスが存在する。
【０１３７】
ページテーブルアドレスを取得後、ハイパーバイザ１１１は、アプリ実行情報テーブル３０２のうち、取得したＶＭ  ＩＤとＶＭ  ＩＤフィールドの値が一致するレコード群を選択する（ステップＳ１５０４）。選択後、ハイパーバイザ１１１は、選択したレコード群のうち、切替後のページテーブルアドレスとアプリ実行時情報フィールドが一致するレコードのアプリＩＤを取得する（ステップＳ１５０５）。
【０１３８】
取得後、ハイパーバイザ１１１は、選択されたレコード群の実行中アプリフィールドを取得したアプリＩＤに更新し（ステップＳ１５０６）、切替後の実行アプリの優先情報が切替前の実行アプリの優先情報より低いか否かを判断する（ステップＳ１５０７）。切替後の実行アプリの優先情報が低い場合（ステップＳ１５０７：Ｙｅｓ）、ハイパーバイザ１１１は、実行ＶＭ選択部３１６を呼び出し（ステップＳ１５０８）、実行アプリ特定部３１５の処理を終了する。切替後の実行アプリの優先情報が低くない場合（ステップＳ１５０７：Ｎｏ）、ハイパーバイザ１１１は、実行アプリ特定部３１５の処理を終了する。
【０１３９】
なお、ハイパーバイザ１１１は、ステップＳ１５０７の判断処理を行わず、ステップＳ１５０７：Ｙｅｓのルートを選択してステップＳ１５０８の処理を実行してもよい。この場合、ハイパーバイザ１１１は、判断にかかる時間を省くことができる。また、ステップＳ１５０７の判断処理を行った場合、ハイパーバイザ１１１は、実行ＶＭ選択部３１６の呼び出しを制限することができ、無駄なスケジューリング処理を抑えることができる。
【０１４０】
図１６は、実行ＶＭ選択部３１６の処理手順の一例を示すフローチャートである。実行ＶＭ選択部３１６は、スケジューラ機能の一部であるため、ハイパーバイザ１１１のＶＭスケジューラが動作するときに動作を開始する。また、実行ＶＭ選択部３１６は、実行アプリ特定部３１５によって実行アプリが変更された場合、またはアプリ優先情報管理部３１４によって優先情報が更新された場合に、呼び出される場合もある。
【０１４１】
ハイパーバイザ１１１は、選択ＶＭと選択優先情報を−１に設定する（ステップＳ１６０１）。なお、選択ＶＭと選択優先情報は、選択するＶＭと選択するＶＭの優先情報を一時的に保持する変数である。設定後、ハイパーバイザ１１１は、アプリ優先情報テーブル１１４のＶＭ  ＩＤと同一の値が格納されたレコード群を対象レコード群に設定する（ステップＳ１６０２）。続けて、ハイパーバイザ１１１は、対象レコード群から実行中アプリを取得し（ステップＳ１６０３）、実行中アプリのアプリＩＤに対応する優先情報を取得する（ステップＳ１６０４）。
【０１４２】
取得後、ハイパーバイザ１１１は、取得した優先情報が選択優先情報より高いか否かを判断する（ステップＳ１６０５）。取得した優先情報が選択優先情報より高い場合（ステップＳ１６０５：Ｙｅｓ）、ハイパーバイザ１１１は、選択ＶＭに対象レコード群のＶＭ  ＩＤを設定し、選択優先情報に取得した優先情報を設定する（ステップＳ１６０６）。設定後、または取得した優先情報が選択優先情報以下の場合（ステップＳ１６０５：Ｎｏ）、ハイパーバイザ１１１は、現在の対象レコード群のＶＭ  ＩＤとは異なるＶＭ  ＩＤと同一の値が格納されたレコード群を対象レコード群に設定する（ステップＳ１６０７）。
【０１４３】
設定後、ハイパーバイザ１１１は、全てのＶＭ  ＩＤを処理したか否かを判断する（ステップＳ１６０８）。処理していないＶＭ  ＩＤが存在する場合（ステップＳ１６０８：Ｎｏ）、ハイパーバイザ１１１は、ステップＳ１６０３の処理に移行する。全てのＶＭ  ＩＤを処理した場合（ステップＳ１６０８：Ｙｅｓ）、ハイパーバイザ１１１は、実行ＶＭを選択ＶＭのＶＭ  ＩＤに決定し（ステップＳ１６０９）、実行ＶＭ選択部３１６の処理を終了する。
【０１４４】
以上説明したように、スケジューリングプログラム、および情報処理装置によれば、複数のＯＳの各々で実行可能アプリが起動または終了した場合、各ＯＳの実行可能アプリの組合せに応じてアプリの優先度を更新する。これにより、情報処理装置は、各アプリの実行状況に合わせた優先度制御が行える。また、本実施の形態１にかかる情報処理装置は、各ＯＳに設定されている優先度を用いないため、一方のＯＳ内で設定された優先度によって、他のＯＳの動作を妨げる可能性を排除することができる。
【０１４５】
また、情報処理装置は、優先情報の更新後、更新対象アプリが実行状態か否かと、更新対象アプリが実行ＯＳで実行されているか否かと、更新対象アプリの更新前の優先度と更新後の優先度との高低と、に基づいて実行ＯＳを選択してもよい。これにより、本実施の形態１にかかる情報処理装置は、無駄なスケジューリング処理を抑えることができる。
【０１４６】
また、情報処理装置は、いずれかのＯＳで実行状態にあるアプリが切り替わったことを検出した場合、切替前のソフトウェアの優先度と切替後のソフトウェアの優先度との高低を判断した判断結果に基づいて、実行ＯＳを選択してもよい。
【０１４７】
（実施の形態２の説明）
実施の形態２にかかる情報処理装置１００は、優先情報を決定するために、ＶＭの切替や、ＶＭ上のＯＳにおけるフォアグラウンドアプリ変更の情報を利用する。なお、フォアグラウンドアプリとは、ユーザのキーボード２０８等による操作対象となっているアプリである。なお、操作対象ＶＭ上で動作する操作対象ＯＳのフォアグラウンドアプリは、ディスプレイ２０６に表示される。また、切り替えられたアプリはバックグラウンドアプリとなる。バックグラウンドアプリは、ユーザから操作されない非操作対象のアプリとなる。
【０１４８】
なお、操作対象ＶＭとは、ユーザからの操作の対象となるＶＭである。また、操作対象ＯＳは、操作対象ＶＭ上で実行されているＯＳであり、具体的には、キーボード２０８からの入力を受け付け、処理を行うＯＳである。
【０１４９】
以下、図１７〜図２４において、実施の形態２にかかる情報処理装置１００の説明を行う。なお、実施の形態２にかかる情報処理装置１００のハードウェア例は、図２に示した実施の形態１にかかる情報処理装置１００と同一であるため、説明を省略する。
【０１５０】
図１７は、実施の形態２にかかる情報処理装置１００の機能例を示すブロック図である。実施の形態２にかかる情報処理装置１００は、各機能からアクセスされるテーブルとして、実行可能アプリ情報テーブル１７０１、優先アプリパターンテーブル１７０２、アプリ実行情報テーブル１７０３、アプリ優先情報テーブル１７０４にアクセス可能である。なお、アプリ実行情報テーブル１７０３、アプリ優先情報テーブル１７０４は、アプリ実行情報テーブル３０２、アプリ優先情報テーブル１１４と同一の情報を格納しているため、説明を省略する。
【０１５１】
情報処理装置１００は、アプリ通知部１７１１〜実行ＶＭ選択部１７１６、操作ＶＭ切替部１７１７を含む。なお、アプリ優先情報管理部１７１４〜実行ＶＭ選択部１７１６は、アプリ優先情報管理部３１４〜実行ＶＭ選択部３１６と同一の機能であるため、説明を省略する。さらに、情報処理装置１００は、アプリ通知部１７１１〜操作ＶＭ切替部１７１７内に、検出部１７２１〜選択部１７３１、検出部１７３２、を含む。なお、特定部１７２３、更新部１７２７〜選択部１７３１は、特定部３２３、更新部３２７〜選択部３３１と同一の機能であるため、説明を省略する。また、検出部１７３２は、操作ＶＭ切替部１７１７に含まれる。また、操作ＶＭ切替部１７１７は、ハイパーバイザ１１１に含まれる機能である。
【０１５２】
実行可能アプリ情報テーブル１７０１は、実行可能アプリ情報テーブル３０１が記憶する情報に加えて、操作対象ＶＭと、各ＶＭでフォアグラウンドで動作しているアプリと、をさらに記憶するテーブルである。なお、実行可能アプリ情報テーブル１７０１の詳細については、図１８にて後述する。
【０１５３】
優先アプリパターンテーブル１７０２は、優先アプリパターンテーブル１１３が記憶するパターンにおいて、パターン内の対象ソフトウェアがフォアグラウンドにあり操作対象時の優先度およびバックグラウンドにあり非操作対象時の優先度を記憶する。さらに、優先アプリパターンテーブル１７０２は、パターン内の対象アプリを実行するＯＳが操作対象ＶＭである場合の優先度と操作対象ＶＭでない場合の優先度とを記憶する。なお、優先アプリパターンテーブル１７０２の詳細については、図１９にて後述する。
【０１５４】
アプリ通知部１７１１は、アプリ起動、アプリ終了の通知に加え、フォアグラウンドアプリの変更を通知する。アプリ実行情報管理部１７１２は、アプリ通知部１７１１から、アプリ起動とアプリ終了に加えてフォアグラウンド変更を受け付ける。フォアグラウンド変更時、アプリ実行情報管理部１７１２は、優先情報設定部１７１３へフォアグラウンド変更を通知する。
【０１５５】
優先情報設定部１７１３は、優先情報設定部３１３の機能に加え、アプリ実行情報管理部１７１２からフォアグラウンドアプリ変更を受け付け、さらに、操作ＶＭ切替部１７１７からの操作ＶＭ切替を受け付ける。
【０１５６】
操作ＶＭ切替部１７１７は、ユーザが操作するＶＭの切替を行い、切替先のＶＭを優先情報設定部１７１３へ通知する。たとえば、情報処理装置１００がサーバである場合、複数のＶＭがそれぞれ別のユーザによって使用される場合がある。この場合、情報処理装置１００は、ディスプレイ２０６やキーボード２０８等のインターフェースが使用されずに、ユーザによってリモートからログインしている装置のインターフェースが使用されるケースがある。これに対し、情報処理装置１００が携帯端末である場合、携帯端末は一人のユーザが占有して使用することを想定している。したがって、情報処理装置１００は、複数のＶＭにより複数のＯＳが動作しても、操作対象ＶＭを切り替えて、１つのＯＳを使用するように制御することになる。
【０１５７】
なお、操作ＶＭ切替部１７１７は、入出力用のデバイスを使用できるＶＭを切り替えることも行う。入出力用のデバイスとしては、ディスプレイ２０６やキーボード２０８等といったデバイスである。ＶＭからデバイスへアクセスする方法には、たとえば、下記３つの方法が存在する。
【０１５８】
１つ目の方法は、デバイスへのアクセスを行うドライバを有するＶＭに対して、メッセージを送ることでデバイスアクセスを行う方法である。１つ目の方法は、実際のデバイスドライバとメッセージを送るだけのデバイスドライバの二つに分けて実現することから、スプリットドライバと呼称される。２つ目の方法としては、ＶＭがデバイスへ直接アクセスする方法である。また、３つ目の方法としては、エミュレートによってデバイスをＶＭに提供し、エミュレートの結果を用いてデバイスアクセスする方法である。
【０１５９】
いずれの方法を採用しても、情報処理装置１００は、複数のＶＭのうち、操作対象ＶＭにデバイスへのアクセス許可を与えることで、操作対象ＶＭを設定している。操作対象ＶＭの切替の契機としては、たとえば、キーボード２０８のうち、特別なボタンをあらかじめ決定しておき、あらかじめ決定されたボタンが押下されることにより、操作対象ＶＭを切り替えてもよい。また、操作対象ＶＭの切替の他の契機としては、タッチパネルに対する特別な操作によって操作対象ＶＭを切り替えてもよい。
【０１６０】
検出部１７２１は、複数のＯＳのいずれかのＯＳで操作対象にあるソフトウェアが変更されたことを検出する機能を有する。たとえば、検出部１７２１は、フォアグラウンドアプリがアプリＡからアプリＢに変更されたことを検出する。なお、検出されたデータは、ＣＰＵ１０１のレジスタ、ＣＰＵ１０１のキャッシュメモリ、ＲＡＭ２０２、フラッシュＲＯＭ２０３などの記憶領域に記憶される。
【０１６１】
受付部１７２２は、複数のＯＳのいずれかのＯＳから当該ＯＳで操作対象にあるソフトウェアの変更を受け付ける機能を有する。たとえば、受付部１７２２は、フォアグラウンドアプリがアプリＢに変更されたという通知を受け付ける。なお、通知を受け付けたという結果は、ＣＰＵ１０１のレジスタ、ＣＰＵ１０１のキャッシュメモリ、ＲＡＭ２０２、フラッシュＲＯＭ２０３などの記憶領域に記憶されてもよい。
【０１６２】
特定部１７２４は、受付部１７２２によって操作対象にあるソフトウェアの変更が検出された場合、操作対象にあるソフトウェアの変更後における複数のＯＳの各々で操作対象にあるソフトウェア群と起動完了したソフトウェア群とを特定する機能を有する。たとえば、特定部１７２４は、フォアグラウンドアプリがアプリＡからアプリＢに変更された通知を受け付けた場合、あるＯＳで操作対象にあるアプリＢと、実行可能アプリであるアプリＡとアプリＢとを特定する。
【０１６３】
また、特定部１７２４は、検出部１７３２によって操作対象ＯＳの変更が検出された場合、操作対象ＯＳの変更後における操作対象ＯＳと複数のＯＳの各々で起動完了したソフトウェア群とを特定してもよい。たとえば、特定部１７２４は、操作対象ＯＳがＯＳ１からＯＳ２へ変更されたことが検出された場合、操作対象ＯＳであるＯＳ２と、操作対象以外のＯＳで実行可能アプリであるアプリＡとアプリＢとを特定する。
【０１６４】
選択部１７２５は、第２のテーブルから、特定部１７２４によって特定されたソフトウェア群に応じた組合せを選択する。なお、ここでの第２のテーブルの記憶内容は、実施の形態１にかかる優先アプリパターンテーブル１１３のパターン内の対象アプリの優先度に関して、対象アプリが操作対象時の優先度および非操作対象時の優先度を記憶した状態となる。また、第２のテーブルの記憶内容として、優先アプリパターンテーブル１１３の各レコードの対象アプリの優先度に関して、対象アプリを実行するＯＳが操作対象ＯＳであるときの優先度および操作対象ＯＳでないときの優先度を記憶していてもよい。
【０１６５】
たとえば、第２のテーブルに登録されているパターンとして、パターン番号１とパターン番号２が登録されている状態を想定する。パターン番号１は、フォアグラウンド時の優先情報が３であり、バックグラウンド時の優先情報が１であるアプリＢとアプリＢを実行するＯＳとが登録されている。パターン番号２は、フォアグラウンド時の優先情報が５であり、バックグラウンド時の優先情報が４であるアプリＡとアプリＡを実行するＯＳとが登録されている。このとき、選択部１７２５は、登録されているパターンから、特定されたアプリ群に応じたパターン番号１を選択する。
【０１６６】
なお、選択されたパターンの番号、または選択されたパターンへのポインタ等が、ＣＰＵ１０１のレジスタ、ＣＰＵ１０１のキャッシュメモリ、ＲＡＭ２０２、フラッシュＲＯＭ２０３などの記憶領域に記憶される。
【０１６７】
抽出部１７２６は、選択部１７２５によって選択された組合せから、特定されたソフトウェア群の各ソフトウェアの優先度を、特定されたソフトウェア群の各ソフトウェアが操作対象にあるか否かに応じて抽出する機能を有する。たとえば、選択部１７２５が、フォアグラウンド時の優先情報が３であり、バックグラウンド時の優先情報が１であるアプリＢとアプリＢを実行するＯＳとが登録されているパターンを選択した場合を想定する。抽出部１７２６は、アプリＢがフォアグラウンドである場合、アプリＢの優先情報を３として抽出する。なお、抽出された優先情報は、ＣＰＵ１０１のレジスタ、ＣＰＵ１０１のキャッシュメモリ、ＲＡＭ２０２、フラッシュＲＯＭ２０３などの記憶領域に記憶される。
【０１６８】
検出部１７３２は、操作対象ＯＳが変更されたことを検出する機能を有する。たとえば、検出部１７３２は、操作対象ＶＭがＶＭ１からＶＭ２に変更された結果、操作対象ＯＳがＯＳ１からＯＳ２に変更されたことを検出する。なお、検出されたデータは、ＣＰＵ１０１のレジスタ、ＣＰＵ１０１のキャッシュメモリ、ＲＡＭ２０２、フラッシュＲＯＭ２０３などの記憶領域に記憶される。
【０１６９】
図１８は、実施の形態２にかかる実行可能アプリ情報テーブル１７０１の記憶内容の一例を示す説明図である。実行可能アプリ情報テーブル１７０１は、実行可能アプリ情報テーブル３０１に操作対象ＶＭフィールドとフォアグラウンドアプリフィールドをさらに含むテーブルである。なお、ＶＭ  ＩＤフィールドとアプリＩＤフィールドに格納される値については、実行可能アプリ情報テーブル３０１と同一であるので、説明を省略する。
【０１７０】
操作対象ＶＭフィールドには、現在操作対象ＶＭとなるＶＭ  ＩＤが格納される。フォアグラウンドアプリフィールドには、現在フォアグラウンドのアプリＩＤが格納される。たとえば、図１８に示す実行可能アプリ情報テーブル１７０１は、現在ＶＭ１が操作対象ＶＭであり、ＶＭ１でのフォアグラウンドアプリがアプリＡであることを示している。
【０１７１】
図１９は、実施の形態２にかかる優先アプリパターンテーブル１７０２の記憶内容の一例を示す説明図である。優先アプリパターンテーブル１７０２は、優先アプリパターンテーブル１１３の優先情報フィールドがサブフィールドとして対象ＶＭ操作中フィールドと対象ＶＭ非操作中フィールドとを含む。さらに、対象ＶＭ操作中フィールドは、フォアグラウンドフィールドとバックグラウンドフィールドを含む。同様に、対象ＶＭ非操作中フィールドも、フォアグラウンドフィールドとバックグラウンドフィールドを含む。なお、パターン番号フィールド、ＶＭ番号フィールド、アプリＩＤフィールドに格納される値については、優先アプリパターンテーブル１１３と同一であるので、説明を省略する。
【０１７２】
対象ＶＭ操作中フィールドにおけるフォアグラウンドフィールドには、対象アプリを実行するＶＭが操作中であり、かつ、対象アプリがフォアグラウンドであるときの優先情報が格納されている。同様に、対象ＶＭ操作中フィールドにおけるバックグラウンドフィールドには、対象アプリを実行するＶＭが操作中であり、かつ、対象アプリがバックグラウンドであるときの優先情報が格納されている。
【０１７３】
また、対象ＶＭ非操作中フィールドにおけるフォアグラウンドフィールドには、対象アプリを実行するＶＭが非操作中であり、かつ、対象アプリがフォアグラウンドであるときの優先情報が格納されている。最後に、対象ＶＭ非操作中フィールドにおけるバックグラウンドフィールドには、対象アプリを実行するＶＭが非操作中であり、かつ、対象アプリがバックグラウンドであるときの優先情報が格納されている。
【０１７４】
たとえば、図１９に示す優先アプリパターンテーブル１７０２では、３つのパターンが登録されている。パターン番号１は、あるＶＭにて、アプリＢが起動している状態を示している。パターン番号１が抽出された場合、アプリＢを実行する対象ＶＭが操作中であれば、アプリＢの優先情報は、アプリＢがフォアグラウンドであるとき３となり、アプリＢがバックグラウンドであるとき１となる。また、対象ＶＭが非操作中であれば、アプリＢの優先情報は、アプリＢがフォアグラウンドであるとき３となり、アプリＢがバックグラウンドであるとき１となる。
【０１７５】
同様に、パターン番号２が抽出され、アプリＡ、アプリＢを実行する対象ＶＭが操作中である場合を想定する。このとき、アプリＡ、アプリＢ、アプリＡとアプリＢ以外のアプリのいずれかがフォアグラウンドである場合、フォアグラウンドとなるアプリの優先情報は、それぞれ、５、４、２となる。同様に、アプリＡ、アプリＢ、アプリＡとアプリＢ以外のアプリがバックグラウンドとなる場合、各アプリの優先情報は、それぞれ、４、３、１となる。また、アプリＡ、アプリＢを実行する対象ＶＭが非操作中であり、アプリＡ、アプリＢ、アプリＡとアプリＢ以外のアプリのいずれかがフォアグラウンドである場合、フォアグラウンドであるアプリの優先情報は、それぞれ、５、４、０となる。同様に、アプリＡ、アプリＢ、アプリＡとアプリＢ以外のアプリがバックグラウンドである場合、優先情報は、それぞれ、３、３、０となる。
【０１７６】
同様に、パターン番号３が抽出され、アプリＡ、アプリＢを実行する対象ＶＭが操作中であり、かつ、アプリＡ、アプリＢのいずれかがフォアグラウンドである場合、フォアグラウンドとなるアプリの優先情報は、それぞれ、５、４となる。また、アプリＡ、アプリＢがバックグラウンドである場合、各アプリの優先情報は、それぞれ、５、３となる。また、アプリＡ、アプリＢを実行する対象ＶＭが非操作中であり、かつ、アプリＡ、アプリＢのいずれかがフォアグラウンドである場合、フォアグラウンドとなるアプリの優先情報は、それぞれ、５、４となる。また、アプリＡ、アプリＢがバックグラウンドである場合、各アプリの優先情報は、それぞれ、４、３となる。
【０１７７】
また、パターン番号３が抽出され、アプリＣ、アプリＤを実行する対象ＶＭが操作中であり、かつ、アプリＣ、アプリＤのいずれかがフォアグラウンドである場合、フォアグラウンドとなるアプリの優先情報は、それぞれ、５、５となる。また、アプリＣ、アプリＤがバックグラウンドである場合、各アプリの優先情報は、それぞれ、４、２となる。アプリＣ、アプリＤを実行する対象ＶＭが非操作中であり、かつ、アプリＣ、アプリＤのいずれかがフォアグラウンドである場合、フォアグラウンドとなるアプリの優先情報は、それぞれ、５、４となる。また、アプリＣ、アプリＤがバックグラウンドである場合、各アプリの優先情報は、それぞれ、４、２となる。
【０１７８】
図２０は、優先アプリパターンテーブル１７０２からの優先情報の抽出例を示す説明図である。図２０では、実行可能アプリ情報テーブル１７０１と優先アプリパターンテーブル１７０２に基づいて、優先情報の抽出例について説明を行う。なお、パターンの選択方法については、図８で示した方法と同一であるため、説明を省略し、図２０では、パターン番号２が選択された場合を例として説明を行う。
【０１７９】
優先制御ＶＭ１１２は、選択されたパターンに対して、各アプリが操作対象ＶＭで実行しているか否かとフォアグラウンドか否かとに応じて優先度を抽出する。具体的には、パターン番号２が選択された場合、優先制御ＶＭ１１２は、ＶＭ１で起動しているアプリＡ、アプリＢ、アプリＡまたはアプリＢ以外のアプリの優先情報を、優先アプリパターンテーブル１７０２の対象ＶＭ操作中フィールドから決定する。さらに、優先制御ＶＭ１１２は、実行可能アプリ情報テーブル１７０１よりフォアグラウンドアプリであるアプリＡの優先情報を、対象ＶＭ操作中フィールド内のフォアグラウンドフィールドにより５に決定する。同様に、優先制御ＶＭ１１２は、実行可能アプリ情報テーブル１７０１によりバックグラウンドアプリであるアプリＢ、ｕｎｋｎｏｗｎの優先情報を、対象ＶＭ操作中フィールド内のバックグラウンドフィールドにより、それぞれ、３、１に決定する。
【０１８０】
また、ＶＭ２で実行している何らかのアプリに関して、優先制御ＶＭ１１２は、パターン番号２に設定値がないため、デフォルトとしてアプリＩＤフィールドにｕｎｋｎｏｗｎが設定されているレコードに、優先情報０を設定している。
【０１８１】
図２１は、操作ＶＭ切替部１７１７の処理手順の一例を示すフローチャートである。操作ＶＭ切替部１７１７は、ハイパーバイザ１１１が実行する。また、操作ＶＭ切替部１７１７は、切替の操作を行い、ＶＭが切り替わった後に実行される。ハイパーバイザ１１１は、優先情報設定部１７１３へ操作対象ＶＭのＶＭ  ＩＤを操作ＶＭ変更として通知し（ステップＳ２１０１）、操作ＶＭ切替部１７１７の処理を終了する。
【０１８２】
図２２は、実施の形態２にかかるアプリ通知部１７１１の処理手順の一例を示すフローチャートである。アプリ通知部１７１１は、仮想マシンであるＶＭ１、ＶＭ２が実行する。なお、図２２で示す説明では、ＶＭ１が実行する場合を想定して説明を行う。また、図２２のステップＳ２２０４〜ステップＳ２２０９の処理は、図１１に示したアプリ通知部３１１のステップＳ１１０１〜ステップＳ１１０６の処理と等しいため、説明を省略する。なお、ステップＳ１１０４、ステップＳ１１０６での処理対象となるアプリ実行情報管理部３１２に関して、ステップＳ２２０７、ステップＳ２２０９の処理では、アプリ実行情報管理部１７１２に置き換わる。
【０１８３】
ＶＭ１は、フォアグラウンドのアプリが変更されたか否かを判断する（ステップＳ２２０１）。変更されていない場合（ステップＳ２２０１：Ｎｏ）、ＶＭ１は、ステップＳ２２０４の処理に移行する。変更されている場合（ステップＳ２２０１：Ｙｅｓ）、ＶＭ１は、アプリの名称をアプリＩＤとして取得する（ステップＳ２２０２）。取得後、ＶＭ１は、アプリ実行情報管理部１７１２へフォアグラウンド変更を通知し、アプリ通知部１７１１の処理を終了する。
【０１８４】
図２３は、実施の形態２にかかるアプリ実行情報管理部１７１２の処理手順の一例を示すフローチャートである。アプリ実行情報管理部１７１２は、ハイパーバイザ１１１が実行する。また、図２３で示すステップＳ２３０４〜ステップＳ２３０８の処理は、図１１に示したアプリ実行情報管理部３１２のステップＳ１２０２〜ステップＳ１２０６の処理と等しいため、説明を省略する。
【０１８５】
なお、ステップＳ１２０３、ステップＳ１２０５での処理対象となるアプリ実行情報テーブル３０２に関して、ステップＳ２３０５、ステップＳ２３０７の処理では、アプリ実行情報テーブル１７０３に置き換わる。同様に、ステップＳ１２０４、ステップＳ１２０６での処理対象となる優先情報設定部３１３に関して、ステップＳ２３０６、ステップＳ２３０８の処理では、優先情報設定部１７１３に置き換わる。
【０１８６】
ハイパーバイザ１１１は、通知元のＶＭ  ＩＤを取得する（ステップＳ２３０１）。取得後、ハイパーバイザ１１１は、フォアグラウンド変更を受け付けたか否かを判断する（ステップＳ２３０２）。フォアグラウンド変更以外を受け付けた場合（ステップＳ２３０２：Ｎｏ）、ハイパーバイザ１１１は、ステップＳ２３０４の処理に移行する。フォアグラウンド変更を受け付けた場合（ステップＳ２３０２：Ｙｅｓ）、ハイパーバイザ１１１は、優先情報設定部１７１３へフォアグラウンド変更を通知し（ステップＳ２３０３）、アプリ実行情報管理部１７１２の処理を終了する。
【０１８７】
図２４は、実施の形態２にかかる優先情報設定部１７１３の処理手順の一例を示すフローチャートである。優先情報設定部１７１３は、優先制御ＶＭ１１２が実行する。また、図２４で示すステップＳ２４０５〜ステップＳ２４１２の処理は、ステップＳ２４０９を除いて図１３に示した優先情報設定部３１３のステップＳ１３０１〜ステップＳ１３０８の処理と等しいため、説明を省略する。
【０１８８】
なお、ステップＳ１３０２、ステップＳ１３０３での処理対象となる実行可能アプリ情報テーブル３０１に関して、ステップＳ２４０６、ステップＳ２４０７の処理では、実行可能アプリ情報テーブル１７０１に置き換わる。また、ステップＳ１３０７、ステップＳ１３０８での処理対象となるアプリ優先情報管理部３１４に関して、ステップＳ２４１１、ステップＳ２４１２の処理では、アプリ優先情報管理部１７１４に置き換わる。
【０１８９】
優先制御ＶＭ１１２は、操作ＶＭ変更を受け付けたか否かを判断する（ステップＳ２４０１）。操作ＶＭ変更を受け付けた場合（ステップＳ２４０１：Ｙｅｓ）、優先制御ＶＭ１１２は、実行可能アプリ情報テーブル１７０１の操作ＶＭフィールドを取得した操作対象ＶＭのＶＭ  ＩＤに更新し（ステップＳ２４０２）、ステップＳ２４０８の処理に移行する。
【０１９０】
操作ＶＭ変更を受け付けていない場合（ステップＳ２４０１：Ｎｏ）、優先制御ＶＭ１１２は、フォアグラウンド変更を受け付けたか否かを判断する（ステップＳ２４０３）。フォアグラウンド変更を受け付けていない場合（ステップＳ２４０３：Ｎｏ）、優先制御ＶＭ１１２は、ステップＳ２４０５の処理に移行する。フォアグラウンド変更を受け付けた場合（ステップＳ２４０３：Ｙｅｓ）、優先制御ＶＭ１１２は、実行可能アプリ情報テーブル１７０１のＶＭ  ＩＤフィールドが取得したＶＭ  ＩＤと一致するレコードのフォアグラウンドアプリフィールドをアプリＩＤに更新する（ステップＳ２４０４）。更新後、優先制御ＶＭ１１２は、ステップＳ２４０８の処理に移行する。
【０１９１】
ステップＳ２４０８の処理後、優先制御ＶＭ１１２は、選択されたパターンから、全実行可能アプリの優先情報を、各アプリが操作対象ＶＭで実行しているか否かとフォアグラウンドか否かとに応じて抽出する（ステップＳ２４０９）。抽出後、優先制御ＶＭ１１２は、ステップＳ２４１０の処理に移行する。
【０１９２】
以上説明したように、スケジューリングプログラム、および情報処理装置によれば、操作対象にあるアプリが変更されたことを検出し、アプリが操作対象にあるか否かに応じてアプリの優先度を更新する。これにより、実施の形態２にかかる情報処理装置は、ＯＳ内の利用状況を反映したアプリの優先関係を用いて、ＶＭのスケジューリングを行える。
【０１９３】
たとえば、ユーザからの要求に対する応答処理を行うアプリは、一般的に高い優先度が設定されている。しかしながら、携帯端末等で採用されるＱＶＧＡ（Ｑｕａｒｔｅｒ  Ｖｉｄｅｏ  Ｇｒａｐｈｉｃｓ  Ａｒｒａｙ）といった表示領域が狭いディスプレイを有する装置は、フォアグラウンドにあるアプリのみがディスプレイに表示されていることが多い。この場合、応答処理を行うアプリがバックグラウンドに遷移した場合、応答処理を行うアプリが要求を受けることがないため、情報処理装置は、優先度を低く設定し、他のアプリを高くすることで、利用状況を反映することができる。
【０１９４】
また、情報処理装置は、操作対象ＶＭが切り替わったことを検出し、アプリが操作対象ＶＭのＯＳで実行されているか否かに応じてアプリの優先度を更新する。これにより、実施の形態２にかかる情報処理装置は、複数のＯＳの利用状況を反映したアプリの優先情報を用いて、ＶＭのスケジューリングを行える。
【０１９５】
たとえば、情報処理装置で動作するＯＳ１が、ゲームアプリと音楽再生アプリを実行し、ＯＳ２が、ダウンロードアプリとメール作成アプリを実行する場合を想定する。このとき、実施の形態２にかかる情報処理装置は、ＯＳ１が操作対象ＯＳである場合、ゲームアプリ、音楽再生アプリ、ダウンロードアプリ、メール作成アプリといった優先度でアプリを実行することができる。このように、実施の形態２にかかる情報処理装置は、応答を受けることのないメール作成アプリと、多少時間を要してもよいダウンロードアプリの優先度を下げることで、音楽再生の音飛びを防ぐことができる。
【０１９６】
また、実施の形態２にかかる情報処理装置は、ＯＳ２が操作対象ＯＳである場合、メール作成アプリ、音楽再生アプリ、ダウンロードアプリ、ゲームアプリといった優先度でアプリを実行することができる。このように、実施の形態２にかかる情報処理装置は、応答を受けることのないゲームアプリと、多少時間を要してもよいダウンロードアプリの優先度を下げることで、メール作成時の文字入力対応が遅くなることを回避することができる。以上より、実施の形態２にかかる情報処理装置は、端末全体として効率的にアプリを動作させることができる。
【０１９７】
（実施の形態３の説明）
実施の形態３にかかる情報処理装置１００は、アプリ通知部２５１１が、実行アプリ特定部２５１５にアプリ切替を通知する例である。以下、図２５〜図２７において、実施の形態３にかかる情報処理装置１００の説明を行う。なお、実施の形態３にかかる情報処理装置１００のハードウェア例は、図２に示した実施の形態１にかかる情報処理装置１００と同一であるため、説明を省略する。また、実施の形態３にかかる情報処理装置１００の説明では、実施の形態１にかかる情報処理装置１００からの変更について説明を行う。なお、実施の形態２にかかる情報処理装置１００に対しても、実施の形態３を適用することが可能である。
【０１９８】
図２５は、実施の形態３にかかる情報処理装置１００の機能例を示すブロック図である。実施の形態３にかかる情報処理装置１００は、各機能からアクセスされるテーブルとして、実行可能アプリ情報テーブル２５０１〜アプリ優先情報テーブル２５０４にアクセス可能である。なお、実行可能アプリ情報テーブル２５０１〜アプリ優先情報テーブル２５０４の記憶内容は、実行可能アプリ情報テーブル３０１、優先アプリパターンテーブル１１３、アプリ実行情報テーブル３０２、アプリ優先情報テーブル１１４と等しいため説明を省略する。
【０１９９】
情報処理装置１００は、アプリ通知部２５１１〜実行ＶＭ選択部２５１６を含む。なお、アプリ実行情報管理部２５１２〜アプリ優先情報管理部２５１４、実行ＶＭ選択部２５１６は、アプリ実行情報管理部３１２〜アプリ優先情報管理部３１４、実行ＶＭ選択部３１６と同一の機能であるため、説明を省略する。さらに、情報処理装置１００は、アプリ通知部２５１１〜実行ＶＭ選択部２５１６内に、検出部２５２１〜判断部２５２８、受付部２５２９、判断部２５３０、選択部２５３１を含む。なお、受付部２５２２〜判断部２５２８、選択部２５３１は、特定部３２３〜判断部３２８、選択部３３１と同一の機能であるため、説明を省略する。また、受付部２５２９は、実行アプリ特定部２５１５に含まれる。
【０２００】
アプリ通知部２５１１は、アプリ起動、アプリ終了の通知に加え、ＶＭ上のＯＳにおけるアプリ切替時にアプリ切替の通知を実行アプリ特定部２５１５に行う。実行アプリ特定部２５１５は、アプリ通知部２５１１からの通知を受け付けて実行アプリの特定を行う。なお、アプリ通知部２５１１は、実行アプリ特定部２５１５への通知にアプリＩＤを用いた場合、アプリ実行時情報をアプリ実行情報管理部２５１２へ通知しなくてよくなる。この場合、情報処理装置１００は、アプリ実行情報テーブル２５０３を保持しなくてもよい。また、アプリ通知部２５１１は、実行アプリ特定部２５１５への通知に、ページテーブルアドレスを用いてもよい。
【０２０１】
検出部２５２１は、検出部３２１の機能に検出部３２９の機能が含まれた機能を有する。受付部２５２９は、実行状態にあるソフトウェアの切替を受け付ける。判断部２５３０は、受付部２５２９によって実行状態にあるソフトウェアの切替を受け付けた場合、切替前のソフトウェアの優先度と切替後のソフトウェアの優先度との高低を判断する。
【０２０２】
図２６は、実施の形態３にかかるアプリ通知部２５１１の処理手順の一例を示すフローチャートである。アプリ通知部２５１１は、仮想マシンであるＶＭ１、ＶＭ２が実行する。図２６の説明では、ＶＭ１が実行する場合を想定して説明を行う。なお、アプリ通知部２５１１は、アプリの起動もしくは終了、またはアプリ切替を契機に動作を開始する。また、図２６で示すステップＳ２６０４〜ステップＳ２６０９の処理は、図１１に示したアプリ通知部３１１のステップＳ１１０１〜ステップＳ１１０６の処理と等しいため、説明を省略する。なお、ステップＳ１１０４、ステップＳ１１０５での処理対象となるアプリ実行情報管理部３１２に関して、ステップＳ２６０７、ステップＳ２６０９の処理では、アプリ実行情報管理部２５１２に置き換わる。
【０２０３】
ＶＭ１は、アプリ切替が発生したか否かを判断する（ステップＳ２６０１）。アプリ切替が発生していない場合（ステップＳ２６０１：Ｎｏ）、ＶＭ１は、ステップＳ２６０４の処理に移行する。アプリ切替が発生した場合（ステップＳ２６０１：Ｙｅｓ）、ＶＭ１は、アプリの名称をアプリＩＤとして取得する（ステップＳ２６０２）。取得後、ＶＭ１は、実行アプリ特定部２５１５へアプリＩＤを通知し（ステップＳ２６０３）、アプリ通知部２５１１の処理を終了する。
【０２０４】
図２７は、実施の形態３にかかる実行アプリ特定部２５１５の処理手順の一例を示すフローチャートである。実行アプリ特定部２５１５は、ハイパーバイザ１１１が実行する。実行アプリ特定部２５１５は、アプリ通知部２５１１からの通知を契機に動作を開始する。なお、アプリ通知部２５１１からの通知には、アプリＩＤが含まれる。
【０２０５】
ハイパーバイザ１１１は、アプリＩＤを受け付け（ステップＳ２７０１）、アプリ切替を行ったＯＳのＶＭ  ＩＤを取得する（ステップＳ２７０２）。取得後、ハイパーバイザ１１１は、アプリ優先情報テーブル２５０４のうち、取得したＶＭ  ＩＤとＶＭ  ＩＤフィールドの値が一致するレコードの実行アプリフィールドを取得したアプリＩＤに更新する（ステップＳ２７０３）。更新後、ハイパーバイザ１１１は、切替後の実行アプリの優先情報が切替前の実行アプリの優先情報より低いか否かを判断する（ステップＳ２７０４）。
【０２０６】
切替後の実行アプリの優先情報が低い場合（ステップＳ２７０４：Ｙｅｓ）、ハイパーバイザ１１１は、実行ＶＭ選択部２５１６を呼び出し（ステップＳ２７０５）、実行アプリ特定部２５１５の処理を終了する。切替後の実行アプリの優先情報が低くない場合（ステップＳ２７０４：Ｎｏ）、ハイパーバイザ１１１は、実行アプリ特定部２５１５の処理を終了する。
【０２０７】
以上説明したように、スケジューリングプログラム、および情報処理装置によれば、アプリ切替が発生した際に、ハイパーバイザに通知する。たとえば、実施の形態１、２にかかるハイパーバイザは、複数の要因から発生する例外のうち、ページテーブルの切替による例外であることを特定する処理が行われていた。しかし、実施の形態３にかかるハイパーバイザは、アプリが切り替えられたという通知をＯＳから待てばよく、ハイパーバイザ内の処理を高速にすることができる。
【０２０８】
また、実施の形態３にかかるスケジューリングプログラムは、ＯＳ側を改変するため、改変を行い易いＯＳが採用されている場合は、実施の形態３を適用してもよい。また、改変を行い難いＯＳが採用されている場合は、実施の形態１を適用してもよい。このように、実施の形態３にかかる情報処理装置は、採用されたＯＳによって適用する形態を変えてもよい。
【０２０９】
（実施の形態４の説明）
実施の形態４にかかる情報処理装置１００は、アプリ通知部２８１１が優先情報設定部２８１３に対して通知を行う例である。アプリ実行情報管理部２８１２への通知は、優先情報設定部２８１３が行う。以下、図２８〜図３０において、実施の形態４にかかる情報処理装置１００の説明を行う。なお、実施の形態４にかかる情報処理装置１００のハードウェア例は、図２に示した実施の形態１にかかる情報処理装置１００と同一であるため、説明を省略する。また、実施の形態４にかかる情報処理装置１００の説明では、実施の形態１にかかる情報処理装置１００からの変更について説明を行う。なお、実施の形態２にかかる情報処理装置１００に対しても、実施の形態４を適用することが可能である。
【０２１０】
図２８は、実施の形態４にかかる情報処理装置１００の機能例を示すブロック図である。実施の形態４にかかる情報処理装置１００は、各機能からアクセスされるテーブルとして、実行可能アプリ情報テーブル２８０１〜アプリ優先情報テーブル２８０４にアクセス可能である。なお、実行可能アプリ情報テーブル２８０１〜アプリ優先情報テーブル２８０４の記憶内容は、実行可能アプリ情報テーブル３０１、優先アプリパターンテーブル１１３、アプリ実行情報テーブル３０２、アプリ優先情報テーブル１１４と等しいため説明を省略する。
【０２１１】
情報処理装置１００は、アプリ通知部２８１１〜実行ＶＭ選択部２８１６を含む。なお、アプリ実行情報管理部２８１２、アプリ優先情報管理部２８１４〜実行ＶＭ選択部２８１６は、アプリ実行情報管理部３１２、アプリ優先情報管理部３１４〜実行ＶＭ選択部３１６と同一の機能であるため、説明を省略する。さらに、情報処理装置１００は、アプリ通知部２８１１〜実行ＶＭ選択部２８１６内に、検出部２８２１〜選択部２８３１を含む。なお、検出部２８２１、特定部２８２２、特定部２８２４〜選択部２８３１は、検出部３２１、特定部３２３〜選択部３３１と同一の機能であるため、説明を省略する。アプリ通知部２８１１は、アプリ起動とアプリ終了の通知先が優先情報設定部２８１３となる。また、優先情報設定部２８１３は、アプリ通知部２８１１から通知を受ける。また、受付部２８２３は、優先情報設定部２８１３に含まれる。
【０２１２】
受付部２８２３は、複数のＯＳのいずれかのＯＳから起動完了したソフトウェアの起動数の変更を受け付ける。たとえば、受付部２８２３は、検出部２８２１からＯＳ１からアプリＡが起動され実行可能アプリとなり、起動完了したソフトウェアの起動数が増加したという通知を受け付ける。
【０２１３】
図２９は、実施の形態４にかかるアプリ通知部２８１１の処理手順の一例を示すフローチャートである。アプリ通知部２８１１は、仮想マシンであるＶＭ１、ＶＭ２が実行する。図２９の説明では、ＶＭ１が実行する場合を想定して説明を行う。また、図２９で示すステップＳ２９０１〜ステップＳ２９０３、ステップＳ２９０５の処理は、図１１に示したアプリ通知部３１１のステップＳ１１０１〜ステップＳ１１０３、ステップＳ１１０５の処理と等しいため、説明を省略する。
【０２１４】
ステップＳ２９０３の処理終了後、ＶＭ１は、優先情報設定部２８１３へアプリ起動を通知し（ステップＳ２９０４）、アプリ通知部２８１１の処理を終了する。また、ステップＳ２９０５の処理終了後、ＶＭ１は、優先情報設定部２８１３へアプリ終了を通知し（ステップＳ２９０６）、アプリ通知部２８１１の処理を終了する。
【０２１５】
図３０は、実施の形態４にかかる優先情報設定部２８１３の処理手順の一例を示すフローチャートである。優先情報設定部２８１３は、優先制御ＶＭ１１２が実行する。また、優先情報設定部２８１３は、アプリ通知部２８１１からの通知を契機に動作を開始する。なお、アプリ通知部２８１１からの通知内容は、ＶＭ  ＩＤ、アプリＩＤと、アプリ実行時情報である。また、図３０で示すステップＳ３００１、ステップＳ３００２、ステップＳ３００４、ステップＳ３００６〜ステップＳ３０１０の処理は、図１３に示した優先情報設定部３１３のステップＳ１３０１〜ステップＳ１３０８の処理と等しいため、説明を省略する。
【０２１６】
なお、ステップＳ１３０２〜ステップＳ１３０４での処理対象となる実行可能アプリ情報テーブル３０１に関して、ステップＳ３００２、ステップＳ３００４、ステップＳ３００６の処理では、実行可能アプリ情報テーブル２８０１に置き換わる。また、ステップＳ１３０４での処理対象となる優先アプリパターンテーブル１１３に関して、ステップＳ３００６の処理では、優先アプリパターンテーブル２８０２に置き換わる。また、ステップＳ１３０７、ステップＳ１３０８での処理対象となるアプリ優先情報管理部３１４に関して、ステップＳ３００９、ステップＳ３０１０の処理では、アプリ優先情報管理部２８１４に置き換わる。
【０２１７】
ステップＳ３００２の処理終了後、優先制御ＶＭ１１２は、アプリ実行情報管理部２８１２へアプリ起動を通知し（ステップＳ３００３）、ステップＳ３００６の処理に移行する。また、ステップＳ３００４の処理終了後、優先制御ＶＭ１１２は、アプリ実行情報管理部２８１２へアプリ終了を通知し（ステップＳ３００５）、ステップＳ３００６の処理に移行する。
【０２１８】
以上説明したように、スケジューリングプログラム、および情報処理装置によれば、ＶＭからの通知を、優先制御ＶＭが受ける。実施の形態２にかかる情報処理装置では、フォアグラウンドかバックグラウンドかという情報を、ハイパーバイザに一旦蓄えていた。しかし、実施の形態４にかかる情報処理装置は、ＶＭ  ＩＤ、アプリＩＤ、優先情報をハイパーバイザが管理する記憶領域に記憶しておき、優先制御ＶＭのみを変更することで、動作を変えることができる。
【０２１９】
（実施の形態５の説明）
実施の形態５にかかる情報処理装置１００は、アプリ通知部３１１１がハイパーバイザ１１１内に含まれる場合の例である。以下、図３１〜図３３において、実施の形態５にかかる情報処理装置１００の説明を行う。なお、実施の形態５にかかる情報処理装置１００のハードウェア例は、図２に示した実施の形態１にかかる情報処理装置１００と同一であるため、説明を省略する。また、実施の形態５にかかる情報処理装置１００の説明では、実施の形態１にかかる情報処理装置１００からの変更について説明を行う。なお、実施の形態２にかかる情報処理装置１００に対しても、実施の形態５を適用することが可能である。
【０２２０】
図３１は、実施の形態５にかかる情報処理装置１００の機能例を示すブロック図である。実施の形態５にかかる情報処理装置１００は、各機能からアクセスされるテーブルとして、実行可能アプリ情報テーブル３１０１〜アプリ優先情報テーブル３１０４にアクセス可能である。なお、実行可能アプリ情報テーブル３１０１〜アプリ優先情報テーブル３１０４の記憶内容は、実行可能アプリ情報テーブル３０１、優先アプリパターンテーブル１１３、アプリ実行情報テーブル３０２、アプリ優先情報テーブル１１４と等しいため説明を省略する。
【０２２１】
情報処理装置１００は、アプリ通知部３１１１〜実行ＶＭ選択部３１１６を含む。なお、アプリ通知部３１１１〜実行ＶＭ選択部３１１６は、アプリ通知部３１１〜実行ＶＭ選択部３１６と同一の機能であるため、説明を省略する。さらに、情報処理装置１００は、アプリ通知部３１１１〜実行ＶＭ選択部３１１６内に、検出部３１２１〜選択部３１３１を含む。なお、特定部３１２３〜選択部３１３１は、特定部３２３〜選択部３３１と同一の機能であるため、説明を省略する。また、検出部３１２１は、アプリ通知部３１１１に含まれる。また、アプリ通知部３１１１は、ハイパーバイザ１１１に含まれる機能である。
【０２２２】
検出部３１２１は、複数のＯＳのいずれかのＯＳで起動完了したソフトウェアの起動数が変更するシステムコールが発行されたことを検出する機能を有する。たとえば、検出部３１２１は、アプリ起動のシステムコール、アプリ終了のシステムコールが発行されたことを検出する。なお、検出されたデータは、ＣＰＵ１０１のレジスタ、ＣＰＵ１０１のキャッシュメモリ、ＲＡＭ２０２、フラッシュＲＯＭ２０３などの記憶領域に記憶される。
【０２２３】
受付部３１２２は、システムコールの発行に応じた起動完了したソフトウェアの起動数の変更を受け付ける機能を有する。たとえば、検出部３１２１がアプリ起動のシステムコールの発行を検出した場合、受付部３１２２は、起動完了したソフトウェアの起動数が増加したことを受け付ける。なお、変更を受け付けたという結果は、ＣＰＵ１０１のレジスタ、ＣＰＵ１０１のキャッシュメモリ、ＲＡＭ２０２、フラッシュＲＯＭ２０３などの記憶領域に記憶されてもよい。
【０２２４】
図３２は、実施の形態５にかかるアプリ起動またはアプリ終了の検出方法の一例を示す説明図である。ＶＭ１上のＯＳ１がアプリに含まれるプロセスを生成する場合、ＯＳが提供するサービスを実行するシステムコールが呼ばれる。図３２では、ＯＳ内でシステムコールが呼ばれた場合に、アプリ起動またはアプリ終了の検出方法について例を示す。
【０２２５】
初めに、システムコールについての動作を説明する。ＣＰＵ１０１は、複数の動作モードを有しており、少なくとも、ユーザプロセスが動作するユーザモードと、カーネルが動作する特権モードを有している。システムコールは、ＣＰＵの動作モードをユーザモードから特権モードへ遷移し、特権モードでないとできない処理を行うための仕組みである。たとえば、Ｌｉｎｕｘ（登録商標）などのＯＳは、ｆｏｒｋシステムコールによってプロセスの複製を作る。続けて、ＯＳは、複製先のプロセスに対してｅｘｅｃｖｅシステムコールを実行することで、指定されたファイル名のプログラムを展開し、複製先のプロセスにプログラムを実行させる。
【０２２６】
ＶＭ上のＯＳも、プロセス生成にシステムコールの仕組みを利用するが、ユーザモードで動作中のプロセスがシステムコールを発行すると、ＯＳのカーネルへ処理が遷移するのではなく、ハイパーバイザ１１１に処理が遷移する。
【０２２７】
完全仮想化によるＯＳの場合は、ＣＰＵの動作モードに関して、ユーザモードと特権モード以外に、ハイパーバイザ用のモードが追加されている。システムコールが呼ばれると、ＣＰＵ１０１は、ユーザモードから特権モードに直接遷移するのではなく、ハイパーバイザ用のモードへ遷移する。この場合、ハイパーバイザ１１１は、ＯＳを特権モードで動作させるという処理を行うことで、システムコールの処理を可能にしている。
【０２２８】
また、準仮想化によるＯＳの場合は、カーネルが動作するモードが特権モードではなくユーザモードで動作するため、特権モードで動作するハイパーバイザに処理が遷移する。したがって、ハイパーバイザ１１１は、ＯＳに対してシステムコールを処理するためのエントリポイントへコールバックを行うことで、ＯＳがシステムコールの処理を行うことを可能にしている。
【０２２９】
このように、情報処理装置１００は、ＶＭ上でシステムコールが実行されると処理がハイパーバイザ１１１に遷移する。ハイパーバイザ１１１は、アプリ通知部３１１１によって、通知されたシステムコールのうち、アプリ起動に関わるシステムコールとアプリ終了に関わるシステムコールを抽出して、アプリ実行情報管理部３１１２に通知する。
【０２３０】
たとえば、図３２では、ＯＳ１がｅｘｅｃｖｅシステムコール、ｅｘｉｔシステムコール、その他のシステムコールを呼び出し、ハイパーバイザ１１１に処理遷移した場合を想定する。このとき、アプリ通知部３１１１は、アプリ起動に関するシステムコールであるｅｘｅｃｖｅシステムコール、アプリ終了に関するシステムコールであるｅｘｉｔシステムコールを抽出する。また、アプリ通知部３１１１は、システムコールの引数から、アプリの名称を取得する。なお、引数が格納されている記憶領域は、ＣＰＵ１０１のレジスタ、プロセスのスタック領域等に格納されている。具体的にどの記憶領域に格納されるかは、ＯＳのＡＢＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｂｉｎａｒｙ  Ｉｎｔｅｒｆａｃｅ）によって決定される。
【０２３１】
たとえば、ｅｘｅｃｖｅシステムコールがＡＲＭ（登録商標）アーキテクチャの元で実行される場合を想定する。このとき、ｅｘｅｃｖｅシステムコールの呼び元となる処理は、アプリ実行ファイルの名称へのポインタを汎用レジスタｒ０に格納し、アプリへ通知する引数群が格納された配列へのポインタを汎用レジスタｒ１に格納する。さらに、ｅｘｅｃｖｅシステムコールの呼び元となる処理は、アプリへ通知する環境変数が格納された配列へのポインタを汎用レジスタｒ２に格納し、ｅｘｅｃｖｅシステムコールのシステムコール番号を示す１１という即値を汎用レジスタｒ７に格納する。
【０２３２】
アプリ通知部３１１１は、システムコールによる処理遷移を受けると、汎用レジスタｒ７が１１であるか否かで、アプリ起動のシステムコールが呼ばれたことを判断する。判断後、アプリ通知部３１１１は、汎用レジスタｒ０に格納されたポインタを参照してアプリの名称を取得する。なお、アプリ実行時情報の取得方法は、現在操作対象ＶＭに設定されているページテーブルアドレス、ＡＳＩＤを取得する。
【０２３３】
同様に、ｅｘｉｔシステムコールがＡＲＭアーキテクチャの元で実行される場合を想定する。このとき、ｅｘｉｔシステムコールの呼び元となる処理は、プロセス終了の戻り値となる終了コードを汎用レジスタｒ０に格納し、ｅｘｉｔシステムコールのシステムコール番号を示す１という即値を汎用レジスタｒ７に格納する。
【０２３４】
アプリ通知部３１１１は、システムコールによる処理遷移を受けると、汎用レジスタｒ７が１であるか否かで、アプリ終了のシステムコールが呼ばれたことを判断する。判断後、アプリ通知部３１１１は、現在のアプリ実行時情報から、アプリ実行情報テーブル３１０３内の対応するアプリＩＤを取得する。
【０２３５】
このように、アプリ起動、アプリ終了において、アプリ通知部３１１で設定していた情報をハイパーバイザ１１１が全て取得することが可能であるため、アプリ通知部３１１をアプリ通知部３１１１としてハイパーバイザ１１１内に移行することが可能である。
【０２３６】
図３３は、実施の形態５にかかるアプリ通知部３１１１の処理手順の一例を示すフローチャートである。アプリ通知部３１１１は、ハイパーバイザ１１１が実行する。ハイパーバイザ１１１は、抽出対象のシステムコールを検出したか否かを判断する（ステップＳ３３０１）。抽出対象のシステムコールを検出していない場合（ステップＳ３３０１：Ｎｏ）、ハイパーバイザ１１１は、アプリ通知部３１１１の処理を終了する。
【０２３７】
抽出対象のシステムコールを検出した場合（ステップＳ３３０１：Ｙｅｓ）、ハイパーバイザ１１１は、検出されたシステムコールがアプリ起動のシステムコールか否かを判断する（ステップＳ３３０２）。アプリ起動のシステムコールである場合（ステップＳ３３０２：Ｙｅｓ）、ハイパーバイザ１１１は、引数に設定されているアプリの名称をアプリＩＤとして取得する（ステップＳ３３０３）。続けて、ハイパーバイザ１１１は、ページテーブルアドレスをアプリ実行時情報として取得する（ステップＳ３３０４）。取得後、ハイパーバイザ１１１は、アプリ実行情報管理部３１１２へアプリ起動を通知し（ステップＳ３３０５）、アプリ通知部３１１１の処理を終了する。
【０２３８】
アプリ終了のシステムコールである場合（ステップＳ３３０２：Ｎｏ）、ハイパーバイザ１１１は、ページテーブルアドレスを取得して、アプリ実行情報テーブル３１０３のアプリ実行時情報と一致するレコードから、アプリＩＤを取得する（ステップＳ３３０６）。取得後、ハイパーバイザ１１１は、アプリ実行情報管理部３１１２へアプリ終了を通知し（ステップＳ３３０７）、アプリ通知部３１１１の処理を終了する。
【０２３９】
以上説明したように、スケジューリングプログラム、および情報処理装置によれば、実行可能アプリの起動数が変更するシステムコールの発行を検出する。これにより、実施の形態５にかかる情報処理装置は、ＯＳの変更を行わずに本スケジューリングプログラムを適用することができる。
【０２４０】
（実施の形態６の説明）
実施の形態６にかかる情報処理装置は、ユーザが指定したアプリを優先可能とする例である。以下、図３４〜図３８において、実施の形態６にかかる情報処理装置１００の説明を行う。なお、実施の形態６にかかる情報処理装置１００のハードウェア例は、図２に示した実施の形態１にかかる情報処理装置１００と同一であるため、説明を省略する。また、実施の形態６にかかる情報処理装置１００の説明では、実施の形態２にかかる情報処理装置１００からの変更について説明を行う。なお、実施の形態１にかかる情報処理装置１００に対しても、実施の形態６を適用することが可能である。
【０２４１】
図３４は、実施の形態６にかかる情報処理装置１００の機能例を示すブロック図である。実施の形態６にかかる情報処理装置１００は、各機能からアクセスされるテーブルとして、実行可能アプリ情報テーブル３４０１〜アプリ優先情報テーブル３４０４、優先アプリ情報テーブル３４０５にアクセス可能である。なお、実行可能アプリ情報テーブル３４０１〜アプリ優先情報テーブル３４０４の記憶内容は、実行可能アプリ情報テーブル１７０１〜アプリ優先情報テーブル１７０４と等しいため説明を省略する。
【０２４２】
情報処理装置１００は、アプリ通知部３４１１〜操作ＶＭ切替部３４１７、優先指定部３４１８を含む。なお、優先情報設定部３４１３を除いたアプリ通知部３４１１〜操作ＶＭ切替部３４１７は、優先情報設定部１７１３を除いたアプリ通知部１７１１〜操作ＶＭ切替部１７１７と同一の機能であるため、説明を省略する。さらに、情報処理装置１００は、アプリ通知部３４１１〜優先指定部３４１８内に、検出部３４２１〜検出部３４３２、指定部３４３３を含む。なお、抽出部３４２６を除いた検出部３４２１〜検出部３４３２は、検出部１７２１〜検出部１７３２と同一の機能であるため、説明を省略する。また、指定部３４３３は、優先指定部３４１８に含まれる。また、優先指定部３４１８は、ハイパーバイザ１１１に含まれる機能である。
【０２４３】
優先アプリ情報テーブル３４０５は、優先指定部３４１８によって指定された優先指定を記憶するテーブルである。優先アプリ情報テーブル３４０５の詳細は、図３５にて後述する。
【０２４４】
優先指定部３４１８は、あらかじめ指定されたボタンが押下された場合に、操作対象ＯＳのフォアグラウンドのアプリに対する優先情報を指定する。また、優先指定部３４１８は、指定された優先指定を優先情報設定部３４１３に通知する。
【０２４５】
優先情報設定部３４１３は、優先指定が通知された場合、実行可能アプリ情報テーブル３４０１から、操作対象ＶＭのフォアグラウンドアプリを取得し、取得されたアプリに対する優先情報を抽出する。優先情報設定部３４１３は、優先情報を抽出する際に、優先アプリパターンテーブル３４０２より優先指定によって作成された優先アプリ情報テーブル３４０５を優先して参照する。
【０２４６】
指定部３４３３は、操作対象ＯＳで操作対象にあるソフトウェアの優先度を指定する機能を有する。たとえば、指定部３４３３は、操作対象ＯＳであるＯＳ１で実行するアプリＢの優先度を指定する。なお、指定された優先度は、ＣＰＵ１０１のレジスタ、ＣＰＵ１０１のキャッシュメモリ、ＲＡＭ２０２、フラッシュＲＯＭ２０３などの記憶領域に記憶される。
【０２４７】
抽出部３４２６は、選択部３４２５によって選択された組合せと指定部３４３３によって指定された優先度から、特定されたソフトウェア群の各ソフトウェアの優先度を抽出する機能を有する。
【０２４８】
たとえば、選択部３４２５が、フォアグラウンド時の優先情報が３であり、バックグラウンド時の優先情報が１であるアプリＢとアプリＢを実行するＯＳとが登録されているパターンを選択した場合を想定する。さらに、指定部３４３３がアプリＢの優先指定として、優先情報５を指定した状態を想定する。このとき、抽出部３４２６は、指定部３４３３による優先指定を優先し、アプリＢの優先情報を５であるとして抽出する。
【０２４９】
図３５は、優先アプリ情報テーブル３４０５の記憶内容の一例を示す説明図である。優先アプリ情報テーブル３４０５に含まれるフィールドは、優先アプリパターンテーブル１７０２が有するフィールドから、パターン番号フィールドを除いたフィールド群となる。優先アプリ情報テーブル３４０５に含まれるフィールドに格納される値は、優先アプリパターンテーブル１７０２と同様であるため、説明を省略する。
【０２５０】
また、図３５で示す優先アプリ情報テーブル３４０５は、優先情報の指定内容に関して４種類示している。４種類の優先情報の指定内容を、図３５ではそれぞれ、優先指定１〜優先指定４で示す。なお、優先指定が指定される契機としては、キーボード２０８の各ボタンのうち、あらかじめ決定されていたボタンが押下されることによって優先情報が指定される。また、情報処理装置１００は、優先情報を指定するボタンを４つ用意しておき、それぞれのボタンを優先指定１〜優先指定４に割り当ててもよい。
【０２５１】
優先指定１は、対象のアプリがどのような状態であっても、優先情報が指定された指定方法である。優先指定１における具体的な指定内容は、優先アプリ情報テーブル３４０５−１で示すように、対象ＶＭ操作中フィールド内のフォアグラウンドフィールド、対象ＶＭ操作中フィールド内のバックグラウンドフィールドに所定数となる５が格納された状態である。同様に、優先アプリ情報テーブル３４０５−１には、対象ＶＭ非操作中フィールド内のフォアグラウンドフィールド、対象ＶＭ非操作中フィールド内のバックグラウンドフィールドにも５が設定される。
【０２５２】
優先指定２は、対象のアプリが、操作対象ＶＭで実行可能アプリとなっており、かつフォアグラウンドとなる場合の優先情報が指定された指定方法である。優先指定２における具体的な指定内容は、優先アプリ情報テーブル３４０５−２で示すように、対象ＶＭ操作中フィールド内のフォアグラウンドフィールドに５が格納された状態である。
【０２５３】
優先指定３は、対象のアプリがフォアグラウンドとなる場合の優先情報が指定された指定方法である。優先指定３における具体的な指定内容は、優先アプリ情報テーブル３４０５−３で示すように、対象ＶＭ操作中フィールド内のフォアグラウンドフィールドと対象ＶＭ非操作中フィールド内のフォアグラウンドフィールドに５が格納された状態である。
【０２５４】
優先指定４は、対象のアプリが操作対象ＶＭで実行可能アプリとなっている場合の優先情報が指定された指定方法である。優先指定４における具体的な指定内容は、優先アプリ情報テーブル３４０５−４の対象ＶＭ操作中フィールド内のフォアグラウンドフィールドとバックグラウンドフィールドに５が格納される状態である。
【０２５５】
なお、優先アプリ情報テーブル３４０５−１〜優先アプリ情報テーブル３４０５−４で格納されていた所定数は、あらかじめ決定されていてもよいし、あらかじめ決定されていたボタンが押下されるたびに、定数分加算されていってもよい。また、キーボード２０８の各ボタンのうち、優先情報の指定を解除するボタンが決定されていてもよい。
【０２５６】
図３６は、実施の形態６にかかる優先指定部３４１８の処理手順の一例を示すフローチャートである。優先指定部３４１８は、ハイパーバイザ１１１が実行する。また、優先指定部３４１８は、キーボード２０８内のいずれかのボタンが押下されたことを契機に実行される。
【０２５７】
ハイパーバイザ１１１は、優先指定として決定されているボタンが押下されたか否かを判断する（ステップＳ３６０１）。優先指定として決定されているボタンが押下された場合（ステップＳ３６０１：Ｙｅｓ）、ハイパーバイザ１１１は、優先情報設定部３４１３に優先指定を通知し（ステップＳ３６０２）、優先指定部３４１８の処理を終了する。なお、図３５で示したように、優先指定１〜優先指定４として決定されている４つのボタンが存在する場合、ハイパーバイザ１１１は、ステップＳ３６０２の処理にて、対応する優先指定を通知してもよい。
【０２５８】
優先指定として決定されているボタンが押下されていない場合（ステップＳ３６０１：Ｎｏ）、ハイパーバイザ１１１は、優先指定解除として決定されているボタンが押下されたか否かを判断する（ステップＳ３６０３）。優先指定解除として決定されているボタンが押下された場合（ステップＳ３６０３：Ｙｅｓ）、ハイパーバイザ１１１は、優先情報設定部３４１３に優先指定解除を通知し（ステップＳ３６０４）、優先指定部３４１８の処理を終了する。優先指定解除として決定されているボタンが押下されていない場合（ステップＳ３６０３：Ｎｏ）、ハイパーバイザ１１１は、優先指定部３４１８の処理を終了する。
【０２５９】
図３７、図３８にて、優先情報設定部３４１３の処理手順の一例を示すフローチャートの説明を行う。優先情報設定部３４１３は、優先制御ＶＭ１１２が実行する。また、図３８で示すステップＳ３８０１〜ステップＳ３８１１の処理は、ステップＳ３８０９を除いて、図２４に示した優先情報設定部３１３のステップＳ２４０１〜ステップＳ２４１２の処理と等しいため、説明を省略する。
【０２６０】
なお、ステップＳ２４０２、ステップＳ２４０４での処理対象となる実行可能アプリ情報テーブル１７０１に関して、ステップＳ３８０２、ステップＳ３８０４の処理では、実行可能アプリ情報テーブル３４０１に置き換わる。同様に、ステップＳ２４０６〜ステップＳ２４０８での処理対象となる実行可能アプリ情報テーブル１７０１に関して、ステップＳ３８０６〜ステップＳ３８０８の処理では、実行可能アプリ情報テーブル３４０１に置き換わる。また、ステップＳ２４０８での処理対象となる優先アプリパターンテーブル１７０２に関して、ステップＳ３８０８の処理では、優先アプリパターンテーブル３４０２に置き換わる。
【０２６１】
また、ステップＳ２４１１、ステップＳ２４１２での処理対象となるアプリ優先情報管理部１７１４に関して、ステップＳ３８１１、ステップＳ３８１２の処理では、アプリ優先情報管理部３４１４に置き換わる。
【０２６２】
図３７は、実施の形態６にかかる優先情報設定部３４１３の処理手順の一例を示すフローチャート（その１）である。優先制御ＶＭ１１２は、優先指定を受け付けたか否かを判断する（ステップＳ３７０１）。優先指定を受け付けた場合（ステップＳ３７０１：Ｙｅｓ）、優先制御ＶＭ１１２は、実行可能アプリ情報テーブル３４０１から、操作対象ＶＭと、操作対象ＶＭにてフォアグラウンドフィールドに設定されたアプリＩＤを取得する（ステップＳ３７０２）。取得後、優先制御ＶＭ１１２は、優先アプリ情報テーブル３４０５の取得した操作対象ＶＭとＶＭ  ＩＤフィールドの値が一致し、かつ取得したアプリＩＤとアプリＩＤフィールドが一致するレコードを選択する（ステップＳ３７０３）。
【０２６３】
続けて、優先制御ＶＭ１１２は、レコードが選択できたか否かを判断する（ステップＳ３７０４）。レコードが選択できた場合（ステップＳ３７０４：Ｙｅｓ）、優先制御ＶＭ１１２は、選択したレコードの優先情報フィールドを所定数に更新し（ステップＳ３７０５）、ステップＳ３８０８の処理に移行する。レコードが選択できなかった場合（ステップＳ３７０４：Ｎｏ）、優先制御ＶＭ１１２は、優先アプリ情報テーブル３４０５に、取得した操作対象ＶＭ、取得したアプリＩＤ、所定数となるレコードを登録する（ステップＳ３７０６）。登録後、優先制御ＶＭ１１２は、ステップＳ３８０８の処理に移行する。
【０２６４】
なお、優先情報フィールド内の、どのサブフィールドに所定数が格納されるかについては、通知された優先指定の種別に応じて変更してもよい。たとえば、優先制御ＶＭ１１２は、優先指定１が通知されてきた場合、優先情報フィールド内の全てのサブフィールドに所定数を格納する。
【０２６５】
優先指定を受け付けていない場合（ステップＳ３７０１：Ｎｏ）、優先制御ＶＭ１１２は、優先指定解除を受け付けたか否かを判断する（ステップＳ３７０７）。優先指定解除を受け付けた場合（ステップＳ３７０７：Ｙｅｓ）、優先制御ＶＭ１１２は、優先アプリ情報テーブル３４０５のうち、取得した操作対象ＶＭとＶＭ  ＩＤフィールドの値が一致し、かつ取得したアプリＩＤとアプリＩＤフィールドが一致するレコードを削除する（ステップＳ３７０８）。削除後、優先制御ＶＭ１１２は、ステップＳ３８０８の処理に移行する。優先指定解除を受け付けていない場合（ステップＳ３７０７：Ｎｏ）、優先制御ＶＭ１１２は、ステップＳ３８０１の処理に移行する。
【０２６６】
図３８は、実施の形態６にかかる優先情報設定部３４１３の処理手順の一例を示すフローチャート（その２）である。ステップＳ３８０８の処理後、優先制御ＶＭ１１２は、優先アプリ情報テーブル３４０５と選択されたパターンから、全実行可能アプリの優先情報を、各アプリが操作対象ＶＭで実行しているか否かとフォアグラウンドか否かとに応じて抽出する（ステップＳ３８０９）。抽出後、優先制御ＶＭ１１２は、ステップＳ３８１０の処理に移行する。
【０２６７】
以上説明したように、スケジューリングプログラム、および情報処理装置によれば、優先指定に応じて、アプリの優先度を更新する。これにより、実施の形態６にかかる情報処理装置は、ユーザがより優先して実行させたいアプリを優先的に実行することができる。
【０２６８】
なお、本実施の形態で説明したスケジューリング方法は、あらかじめ用意されたスケジューリングプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本スケジューリングプログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本スケジューリングプログラムは、インターネット等のネットワークを介して配布してもよい。
【符号の説明】
【０２６９】
１００  情報処理装置
１０１  ＣＰＵ
１０２  メモリ
２１０  ＭＭＵ
１１１  ハイパーバイザ
１１２  優先制御ＶＭ
１１３  優先アプリパターンテーブル
１１４  アプリ優先情報テーブル
３２１、３２９、１７３２、３１２１  検出部
３２２、１７２２、３１２２  受付部
３２３、３２４  特定部
３２５  選択部
３２６  抽出部
３２７  更新部
３２８、３３０  判断部
３３１  選択部
３４３３  指定部
【図１】
0005648544.tif 000002
【図２】
0005648544.tif 000003
【図３】
0005648544.tif 000004
【図４】
0005648544.tif 000005
【図５】
0005648544.tif 000006
【図６】
0005648544.tif 000007
【図７】
0005648544.tif 000008
【図８】
0005648544.tif 000009
【図９】
0005648544.tif 000010
【図１０】
0005648544.tif 000011
【図１１】
0005648544.tif 000012
【図１２】
0005648544.tif 000013
【図１３】
0005648544.tif 000014
【図１４】
0005648544.tif 000015
【図１５】
0005648544.tif 000016
【図１６】
0005648544.tif 000017
【図１７】
0005648544.tif 000018
【図１８】
0005648544.tif 000019
【図１９】
0005648544.tif 000020
【図２０】
0005648544.tif 000021
【図２１】
0005648544.tif 000022
【図２２】
0005648544.tif 000023
【図２３】
0005648544.tif 000024
【図２４】
0005648544.tif 000025
【図２５】
0005648544.tif 000026
【図２６】
0005648544.tif 000027
【図２７】
0005648544.tif 000028
【図２８】
0005648544.tif 000029
【図２９】
0005648544.tif 000030
【図３０】
0005648544.tif 000031
【図３１】
0005648544.tif 000032
【図３２】
0005648544.tif 000033
【図３３】
0005648544.tif 000034
【図３４】
0005648544.tif 000035
【図３５】
0005648544.tif 000036
【図３６】
0005648544.tif 000037
【図３７】
0005648544.tif 000038
【図３８】
0005648544.tif 000039