(57)【要約】  共有デバイス６０１の管理権を有しない非特権ＯＳ２００に特定の共有デバイスを指定デバイスとして対応付け、非特権ＯＳ２００の起動までは特権ＯＳ１００に指定デバイスの管理権を与え、非特権ＯＳ２００の起動時に、指定デバイスの管理権を特権ＯＳ１００から非特権ＯＳ２００に移し、非特権ＯＳ２００が指定デバイスを使用する場合に、非特権ＯＳ２００は直接指定デバイスに対して使用要求を出すことができ、ＶＭ３００及び特権ＯＳ１００の処理を待つ必要がなく、非特権ＯＳ２００に必要なリアルタイム応答性を確保することができる。
2011039887.tif 000002
【特許請求の範囲】
【請求項１】
１つ以上のデバイスが接続されている計算機装置において、
各デバイスの管理権が付与されている特権ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）と、
いずれのデバイスの管理権も付与されていない１つ以上の非特権ＯＳと、
非特権ＯＳと、前記非特権ＯＳに対して指定されている指定デバイスとが示される指定デバイス情報を記憶する情報記憶部と、
前記特権ＯＳが起動した後、いずれかの非特権ＯＳが起動する際に、前記指定デバイス情報を参照し、起動する非特権ＯＳに指定デバイスがある場合に、起動する非特権ＯＳの指定デバイスの管理権を前記特権ＯＳから起動する非特権ＯＳに移す管理権制御部とを有することを特徴とする計算機装置。
【請求項２】
前記特権ＯＳは、
デバイスごとに、優先度が設定されており、
前記情報記憶部は、
非特権ＯＳと、指定デバイスと、前記指定デバイスに対する前記非特権ＯＳの優先度とが示される指定デバイス情報を記憶し、
前記管理権制御部は、
前記特権ＯＳが起動した後、いずれかの非特権ＯＳが起動する際に、前記指定デバイス情報を参照し、起動する非特権ＯＳに指定デバイスがある場合に、起動する非特権ＯＳの指定デバイスに対する優先度と前記特権ＯＳの前記指定デバイスに対する優先度を比較し、起動する非特権ＯＳの優先度の方が高い場合に、起動する非特権ＯＳに前記指定デバイスの管理権を移すことを特徴とする請求項１に記載の計算機装置。
【請求項３】
前記管理権制御部は、
いずれかデバイスの管理権をいずれかの非特権ＯＳに移した後に、指定デバイス情報に前記デバイスが指定デバイスとして示されている非特権ＯＳが起動する際に、起動する非特権ＯＳの前記デバイスに対する優先度と管理権を有している非特権ＯＳの前記デバイスに対する優先度を比較し、起動する非特権ＯＳの優先度の方が高い場合に、起動する非特権ＯＳに前記デバイスの管理権を移すことを特徴とする請求項２に記載の計算機装置。
【請求項４】
各非特権ＯＳは、
前記特権ＯＳが管理権を有しているデバイスを使用する場合は、使用対象デバイスに対する使用要求を前記特権ＯＳを介して前記使用対象デバイスに出力した後に前記使用対象デバイスを使用し、前記管理権制御部により管理権が自ＯＳに移り自ＯＳが管理権を有しているデバイスを使用する場合は、使用対象デバイスに対する使用要求を前記特権ＯＳ及び他のいずれの非特権ＯＳも介さずに前記使用対象デバイスに出力した後に前記使用対象デバイスを使用することを特徴とする請求項１に記載の計算機装置。
【請求項５】
各非特権ＯＳは、
他の非特権ＯＳが管理権を有しているデバイスを使用する場合は、使用対象デバイスに対する使用要求を前記他の非特権ＯＳを介して前記使用対象デバイスに出力した後に前記使用対象デバイスを使用することを特徴とする請求項４に記載の計算機装置。
【請求項６】
各非特権ＯＳは、
自ＯＳが管理権を有する管理デバイスに対する他のＯＳからの使用要求を入力した際に、入力した使用要求を前記管理デバイスに出力することを特徴とする請求項５に記載の計算機装置。
【請求項７】
前記計算機装置は、更に、
いずれかのＯＳから出力されたいずれかのデバイスに対する使用要求を入力し、デバイスごとにいずれのＯＳが管理権を有しているのかを示すデバイス管理権情報を参照して、入力した前記使用要求が対象とするデバイスの管理権を有しているＯＳを判別し、判別したＯＳに前記使用要求を出力するＯＳ判別部を有することを特徴とする請求項５に記載の計算機装置。
【請求項８】
前記管理権制御部は、
デバイスの管理権を移す度に、前記デバイス管理権情報を更新することを特徴とする請求項７に記載の計算機装置。
【請求項９】
前記特権ＯＳ及び各非特権ＯＳには、デバイスごとに優先度が設定されており、
前記計算機装置は、更に、
いずれかのＯＳから発行されたいずれかのデバイスに対する使用要求が実行されている際に他のＯＳから前記デバイスに対する使用要求が発行された場合に、新たに発行された使用要求の発行元のＯＳの前記デバイスに対する優先度と、実行中の使用要求の発行元のＯＳの前記デバイスに対する優先度とを比較し、新たに発行された使用要求の発行元のＯＳの優先度の方が高い場合に、実行中の使用要求の実行を停止させ、新たに発行された使用要求の実行を開始させる実行制御部を有することを特徴とする請求項１に記載の計算機装置。
【請求項１０】
前記計算機装置は、
前記特権ＯＳ及び各非特権ＯＳの動作させる仮想マシンを有し、
前記管理権制御部は、
前記仮想マシンに含まれていることを特徴とする請求項１に記載の計算機装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）を搭載する計算機装置に関する。
【背景技術】
【０００２】
近年、ファクトリオートメーション機器や車載機器などの組込み機器をはじめとする計算機装置では、従来機種に対する付加機能の追加や、システムの高機能化のため、処理能力の向上に対する要求がある。
こうした要求に対して、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）の演算処理部（コア）を複数にすることで、消費電力を抑えながら、処理能力の向上を図る、マルチコアが導入されている。
マルチコアを搭載した計算機を効率的に利用するには、処理の並列度を向上させ、各コアに処理を分散させる必要がある。
この実現方法として、リアルタイム応答性の高いリアルタイムオペレーティングシステム（Ｒｅａｌ−Ｔｉｍｅ  Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）（以下ＲＴＯＳ）と豊富なアプリケーションを搭載した汎用ＯＳといった、複数のＯＳにより構成する方法が考えられる。
従来、こうした複数のＯＳを搭載する組込み機器では、各ＯＳがネットワーク用デバイスやシリアル通信用デバイスなどの入出力デバイスを占有して使用しており、こうしたデバイスを共有することはできなかった。
そこで、組込み機器向けにも、汎用機やＰＣサーバで培われたＶＭ（Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ）による仮想化を行うことにより、ＲＴＯＳと汎用ＯＳ間でデバイスの共有を行う取り組みがなされている。【０００３】
図１３は、従来のＶＭを搭載した計算機装置１０００の構成を示すものである。計算機装置１０００は、例えば、組み込み機器である。【０００４】
なお、特権ＯＳとは、機器上の全てのデバイスの管理権を保有するＯＳを示す。
逆に、非特権ＯＳとは、機器上の全てのデバイスの利用に対して、制限が設けられているＯＳを示す。
つまり、図１３において、特権ＯＳ１１００は、計算機装置１０００で使用する全てのデバイスの管理権を保有するＯＳである。
また、非特権ＯＳ１２００および非特権ＯＳ１２５０は、計算機装置１０００で使用されるデバイスへのアクセスが制限されているＯＳである。
以下、特権ＯＳ１１００、非特権ＯＳ１２００、非特権ＯＳ１２５０の各々の詳細を説明する。【０００５】
特権ＯＳ１１００は、特権ＯＳ共有デバイス処理部１１０１を保有する。
特権ＯＳ１１００はシステム上に存在する全ての実デバイスを利用するための特権が与えられたＯＳである。
ここでは、特権ＯＳ１１００として、実デバイスに対する豊富なデバイス処理機能を持つＬｉｎｕｘ（登録商標）などの汎用ＯＳを想定している。
特権ＯＳ共有デバイス処理部１１０１は、自ＯＳからのＩＯ要求及び、ＶＭ１３００上のＯＳ間通信処理部１３０１からのＩＯ要求を受け取り、共有デバイス１６０１へＩＯ要求を送信する機能を備える。
なお、ＩＯ要求とは、共有デバイス１６０１の使用要求である。【０００６】
非特権ＯＳ１２００は、非特権ＯＳ仮想デバイス処理部１２０１を保有する。
非特権ＯＳ１２００は実デバイスへのアクセスが制限されたＯＳである。
ここでは、非特権ＯＳ１２００として、リアルタイムＯＳを想定している。
非特権ＯＳ仮想デバイス処理部１２０１は、ＶＭ１３００上の仮想デバイス１３５０に対し、ＩＯ要求を送信する機能を備える。【０００７】
非特権ＯＳ１２５０は、非特権ＯＳ仮想デバイス処理部１２５１を保有する。
非特権ＯＳ１２５０は実デバイスへのアクセスが制限されたＯＳである。
ここでは、非特権ＯＳ１２５０として、汎用ＯＳを想定している。
非特権ＯＳ仮想デバイス処理部１２５１は、ＶＭ１３００上の仮想デバイス１３５０に対し、ＩＯ要求を送信する機能を備える。【０００８】
ハードウェア１４００は、計算機装置１で使用されるデバイス群である。
ハードウェア１４００は、二次記憶装置１５００と共有デバイス１６０１と主メモリ１７０１を保有する。
主メモリ１７０１は、ＯＳ起動時に二次記憶装置上に保持されたＯＳイメージがロードされる領域である。
二次記憶装置１５００は非特権ＯＳを起動するためのファイルである、非特権ＯＳイメージファイル１５０１及び、非特権ＯＳ起動情報ファイル１５０２を保有する。
非特権ＯＳイメージファイル１５０１は非特権ＯＳを起動する際に使用するバイナリファイルである。
非特権ＯＳ起動情報ファイル１５０２は非特権ＯＳの起動に必要な情報が記載されている。
非特権ＯＳ起動情報ファイル１５０２には、必要なメモリサイズ、ページサイズ、ＣＰＵ数、タイマ数、ＯＳ名、エントリアドレス等が含まれる。
共有デバイス１６０１は例えば、ネットワークデバイス、グラフィックデバイス、キーボード、シリアルインタフェース、マウス、赤外線インタフェース、ＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）ポートなど、ＲＴＯＳと汎用ＯＳで共有される可能性のあるデバイスである。
非特権ＯＳイメージファイル１５０１、非特権ＯＳ起動情報ファイル１５０２は、非特権ＯＳごとに用意されている。
図１３の例では、非特権ＯＳ１２００の非特権ＯＳイメージファイル１５０１、非特権ＯＳ起動情報ファイル１５０２があり、また、非特権ＯＳ１２５０の非特権ＯＳイメージファイル１５０１、非特権ＯＳ起動情報ファイル１５０２がある。【０００９】
ＶＭ１３００は、ＯＳ間の通信機能および仮想デバイスを保有するＶＭである。
ＶＭ１３００は、ＯＳ間通信処理部１３０１とＯＳ起動処理部１３０２とデバイス要求変換処理部１３０３と仮想デバイス１３５０を保有する。
ＯＳ間通信処理部１３０１は、非特権ＯＳ１２００又は非特権ＯＳ１２５０からのＩＯ要求を特権ＯＳ１１００に送信する機能を備える。
ＯＳ起動処理部１３０２は、特権ＯＳ１１００の指示により、非特権ＯＳ１２００および非特権ＯＳ１２５０を起動する機能を備える。
デバイス要求変換処理部１３０３は、非特権ＯＳ１２００又は非特権ＯＳ１２５０から仮想デバイス１３５０へのＩＯ要求を、共有デバイス１６０１に対するＩＯ要求に変換する機能を備える。
仮想デバイス１３５０は、非特権ＯＳ１２００及び非特権ＯＳ１２５０に対して共有デバイス１６０１をエミュレートする。
つまり、仮想デバイス１３５０は、非特権ＯＳ１２００又は非特権ＯＳ１２５０からＩＯ要求を受け取り、デバイス要求変換処理部１３０３を使用して共有デバイス１６０１に対するＩＯ要求に変換し、ＯＳ間通信処理部１３０１を介して、変換後のＩＯ要求を特権ＯＳ１１００に送信する機能を備える。【００１０】
次に、従来技術における、特権ＯＳ１１００上のアプリケーションプログラム（以下、単にアプリケーションという）が非特権ＯＳ１２００を起動する手順を図１４を用いて説明する。【００１１】
まず、ステップＳ６０１において、特権ＯＳ１１００上のアプリケーションは、ＶＭ３００上のＯＳ起動処理部１３０２に非特権ＯＳ１２００の起動を依頼する。
その際、特権ＯＳ１１００上のアプリケーションは、二次記憶装置１５００上に存在する非特権ＯＳ１２００の非特権ＯＳイメージファイル１５０１及び非特権ＯＳ起動情報ファイル１５０２を指定する。
次に、ステップＳ６０２において、ＶＭ３００上のＯＳ起動処理部１３０２は、非特権ＯＳ起動情報ファイル１５０２から、ＯＳの起動に必要なメモリサイズ、ページサイズ、ＣＰＵ数、タイマ数、ＯＳ名、エントリアドレスを取得する。
次に、ステップＳ６０３において、ＶＭ１３００上のＯＳ起動処理部１３０２は、ＯＳの起動に必要なデバイスの情報を取得した後、非特権ＯＳ１２００に対しデバイスを割り当てる。
割り当てるデバイスはメモリ、ＣＰＵ、タイマである。
次に、ステップＳ６０４において、ＶＭ１３００上のＯＳ起動処理部１３０２は、非特権ＯＳイメージファイル１５０１を主メモリ１７０１に展開する。
次に、ステップＳ６０５において、ＶＭ１３００上のＯＳ起動処理部１３０２は、非特権ＯＳ１２００のＣＰＵに対し起動処理を行う。
これは例えば、非特権ＯＳ１２００に割り当てたＣＰＵのリセットベクタに対して、Ｓ６０２で取得したエントリアドレスを指定し、ＣＰＵにハードウェアリセットを送信することに相当する。
以上により、特権ＯＳ１１００上のアプリケーションによる、非特権ＯＳ１２００の起動が完了する。【００１２】
次に、従来技術における、ＶＭ１３００によるデバイス共有の手順を図１５を用いて説明する。【００１３】
まず、ステップＳ７０１において、非特権ＯＳ１２５０上のアプリケーションは、非特権ＯＳ仮想デバイス処理部１２５１にＩＯ要求を行う。
次に、ステップＳ７０２において、非特権ＯＳ１２５０上の非特権ＯＳ仮想デバイス処理部１２５１は、ＶＭ３００上のＯＳ間通信処理部１３０１を介して、ＶＭ１３００上の仮想デバイス１３５０にＩＯ要求を行う。
次に、ステップＳ７０３において、ＶＭ１３００は、仮想デバイス１３５０へのＩＯ要求に対して、デバイス要求変換処理部１３０３を呼び出し、仮想デバイス１３５０へのＩＯ要求から共有デバイス１６０１へのＩＯ要求に変換する。
次に、ステップＳ７０４において、ＶＭ１３００は、ＯＳ間通信処理部１３０１を介して、特権ＯＳ１１００上の特権ＯＳ共有デバイス処理部１１０１に実ＩＯ要求を行う。
次に、ステップＳ７０５において、特権ＯＳ１１００上の特権ＯＳ共有デバイス処理部１１０１は、共有デバイス１６０１に実ＩＯ要求を行う。
以上の処理により、デバイスの共有を行う。【００１４】
次に、従来技術における、非特権ＯＳ１２５０からのＩＯ要求と、非特権ＯＳ１２００からのＩＯ要求が競合した場合の、ＶＭ１３００による処理を図１６を用いて説明する。【００１５】
まず、ステップＳ１６０１において、非特権ＯＳ１２５０上のアプリケーションは、非特権ＯＳ仮想デバイス処理部１２５１にＩＯ要求を行う。
次に、ステップＳ１６０２において、非特権ＯＳ１２５０上の非特権ＯＳ仮想デバイス処理部１２５１は、ＶＭ１３００上のＯＳ間通信処理部１３０１を介して、ＶＭ１３００上の仮想デバイス１３５０にＩＯ要求を行う。
次に、ステップＳ１６０３において、ＶＭ１３００は、仮想デバイス１３５０へのＩＯ要求に対して、デバイス要求変換処理部１３０３を呼び出し、仮想デバイス１３５０へのＩＯ要求から共有デバイス１６０１へのＩＯ要求に変換する。
次に、ステップＳ１６０４において、ＶＭ１３００は、ＯＳ間通信処理部１３０１を介して、特権ＯＳ１１００上の特権ＯＳ共有デバイス処理部１１０１に実ＩＯ要求を行う。
ここで、ステップＳ１６０５において、非特権ＯＳ１２００上のアプリケーションが、非特権ＯＳ仮想デバイス処理部１２０１にＩＯ要求を行う。
これを受け、ステップＳ１６０６において、非特権ＯＳ１２００上の非特権ＯＳ仮想デバイス処理部１２０１は、ＶＭ１３００上のＯＳ間通信処理部１３０１を介して、ＶＭ１３００上の仮想デバイス１３５０にＩＯ要求を行う。
次に、ステップＳ１６０７において、ＶＭ１３００は、仮想デバイス１３５０へのＩＯ要求に対して、デバイス要求変換処理部１３０３を呼び出し、仮想デバイス１３５０へのＩＯ要求から共有デバイス１６０１へのＩＯ要求に変換する。
次に、ステップＳ１６０８において、ＶＭ１３００は、ＯＳ間通信処理部１３０１を介して、特権ＯＳ１１００上の特権ＯＳ共有デバイス処理部１１０１に実ＩＯ要求を行う。
これを受け、ステップＳ１６０９において、特権ＯＳ１１００上の特権ＯＳ共有デバイス処理部１１０１は、ＩＯ要求の到着順に処理を実施する。
図１６の場合は、非特権ＯＳ１２５０からのＩＯ要求を先に処理する。
最後に、ステップＳ１６１０において、特権ＯＳ１１００上の特権ＯＳ共有デバイス処理部１１０１は、非特権ＯＳ１２００のＩＯ要求を処理する。
以上のように、ＩＯ要求が競合した場合、ＩＯ要求の到着順に実施される。
【先行技術文献】
【特許文献】
【００１６】
【特許文献１】特開昭６２−７８６３１号公報
【発明の概要】
【発明が解決しようとする課題】
【００１７】
図１３に示す構成では、非特権ＯＳ１２００からのＩＯ要求は、全てＶＭ１３００上の仮想デバイス１３５０を介して、特権ＯＳ１１００上の特権ＯＳ共有デバイス処理部１０１で処理される。
特権ＯＳ１１００に対しては、デバイスドライバが豊富なＬｉｎｕｘ（登録商標）などの汎用ＯＳを利用することが一般的である。
図１３の構成において、非特権ＯＳ１２００がＲＴＯＳの場合、非特権ＯＳ１２００からのＩＯ要求が、汎用ＯＳである特権ＯＳ１１００上の特権ＯＳ共有デバイス処理部１１０１で実施される。このため、非特権ＯＳ１２００が要求するリアルタイム応答性が保てないという課題がある。
つまり、非特権ＯＳ１２００は直接共有デバイス１６０１にＩＯ要求を行うことができず、非特権ＯＳ１２００からのＩＯ要求はＶＭ１３００及びＲＴＯＳではない特権ＯＳ１１００の処理を経由して共有デバイス１６０１に伝達されるため、リアルタイム応答性を確保できない。【００１８】
この課題に対する一つ目の解決方法として、特権ＯＳ１１００としてＲＴＯＳを利用することが考えられる。
しかし、一般的に、ＲＴＯＳのデバイス対応は貧弱であり、特権ＯＳ１１００としてＲＴＯＳを利用する場合には、ＲＴＯＳ上に計算機装置１０００で共有される全てのデバイスに対するデバイス処理用のモジュールを追加する必要があるという課題がある。【００１９】
二つ目の解決方法として、特権ＯＳ１１００上の特権ＯＳ共有デバイス処理部１１０１のみをリアルタイム化する方式も考えられる。
しかし、一般的に、汎用ＯＳ上で動作する特定のデバイス処理部のみをリアルタイム化することはできず、汎用ＯＳの内部構造を修正し、ＯＳ全体をリアルタイム化する必要がある。
図１３の例では、特権ＯＳ１１００全体のリアルタイム化が必要になる。
すなわち、共有デバイスのリアルタイム応答性確保のために、汎用ＯＳ全体をリアルタイム化しなければならないという課題がある。【００２０】
本発明は、これらの課題を解決することを主な目的の一つとしており、非特権ＯＳの要求するリアルタイム応答性を満足しながら、複数のＯＳ間で効率的にデバイスを共有することを主な目的とする。
【課題を解決するための手段】
【００２１】
本発明に係る計算機装置は、
１つ以上のデバイスが接続されている計算機装置において、
各デバイスの管理権が付与されている特権ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）と、
いずれのデバイスの管理権も付与されていない１つ以上の非特権ＯＳと、
非特権ＯＳと、前記非特権ＯＳに対して指定されている指定デバイスとが示される指定デバイス情報を記憶する情報記憶部と、
前記特権ＯＳが起動した後、いずれかの非特権ＯＳが起動する際に、前記指定デバイス情報を参照し、起動する非特権ＯＳに指定デバイスがある場合に、起動する非特権ＯＳの指定デバイスの管理権を前記特権ＯＳから起動する非特権ＯＳに移す管理権制御部とを有することを特徴とする。
【発明の効果】
【００２２】
本発明によれば、非特権ＯＳに特定のデバイスを指定デバイスとして対応付けておき、当該非特権ＯＳの起動時に指定デバイスの管理権を特権ＯＳから非特権ＯＳに移すので、当該非特権ＯＳは、直接指定デバイスに対して使用要求を出すことができ、特権ＯＳの処理を待つ必要がなく、当該非特権ＯＳに必要なリアルタイム応答性を確保することができる。
【図面の簡単な説明】
【００２３】
【図１】実施の形態１に係る計算機装置の構成例を示す図。
【図２】実施の形態１に係るデバイス管理権テーブルの例を示す図。
【図３】実施の形態１に係るデバイス管理権テーブルの例を示す図。
【図４】実施の形態１に係る非特権ＯＳ起動情報ファイルの例を示す図。
【図５】実施の形態１に係る非特権ＯＳデバイス起動情報ファイルの例を示す図。
【図６】実施の形態１に係る計算機装置の構成例を示す図。
【図７】実施の形態１に係る非特権ＯＳの起動手順の例を示すフローチャート図。
【図８】実施の形態１に係るＩＯ要求の出力手順、ＩＯ要求の受付手順の例を示すフローチャート図。
【図９】実施の形態１に係るＩＯ要求の出力手順、ＩＯ要求の受付手順の例を示すフローチャート図。
【図１０】実施の形態１に係るＩＯ要求の出力手順、ＩＯ要求の受付手順の例を示すフローチャート図。
【図１１】実施の形態２に係るＩＯ要求の出力手順、ＩＯ要求の受付手順の例を示すフローチャート図。
【図１２】実施の形態１〜３に係る計算機装置のハードウェア構成例を示す図。
【図１３】従来の計算機装置の構成例を示す図。
【図１４】従来の非特権ＯＳの起動手順の例を示すフローチャート図。
【図１５】従来のＩＯ要求の出力手順、ＩＯ要求の受付手順の例を示すフローチャート図。
【図１６】従来のＩＯ要求の出力手順、ＩＯ要求の受付手順の例を示すフローチャート図。
【発明を実施するための形態】
【００２４】
実施の形態１．
本実施の形態では、非特権ＯＳにデバイス共有のための機能のみを追加することで、非特権ＯＳの要求するリアルタイム応答性を満足しながら、デバイスの共有を図る方式を説明する。
より具体的には、本実施の形態では、共有デバイスの管理権を有しない非特権ＯＳに特定の共有デバイスを指定デバイスとして対応付け、当該非特権ＯＳの起動までは特権ＯＳに指定デバイスの管理権を与え、当該非特権ＯＳの起動時に、指定デバイスの管理権を特権ＯＳから非特権ＯＳに移す。
指定デバイスは、例えば、当該非特権ＯＳでの使用頻度の高い共有デバイスである。
この管理権の移動により、当該非特権ＯＳは、直接指定デバイスに対してＩＯ要求を出すことができ、仮想マシン及び特権ＯＳの処理を待つ必要がなく、当該非特権ＯＳに必要なリアルタイム応答性を確保することができる。
なお、非特権ＯＳに管理権が移動した後の指定デバイスを管理デバイスともいう。
また、ＩＯ要求とは、共有デバイスの使用要求である。
【００２５】
図１は、本実施の形態に係る計算機装置１の構成例を示す。
計算機装置１は例えば、組み込み機器である。
【００２６】
ハードウェア４００は、計算機装置１で使用されるデバイス群である。
ＶＭ３００は、ＯＳ間の通信機能および仮想デバイスを保有するＶＭである。
特権ＯＳ１００は、計算機装置１で使用する全てのデバイスの管理権を保有するＯＳである。
非特権ＯＳ２００および非特権ＯＳ２５０は、デバイスへのアクセスが制限されたＯＳである。
【００２７】
まず、ハードウェア４００について説明する。
ハードウェア４００は、二次記憶装置５００と共有デバイス６０１と主メモリ７０１を保有する。
【００２８】
主メモリ７０１は、ＯＳ起動時に二次記憶装置５００上に保持されたＯＳイメージがロードされる領域である。
共有デバイス６０１は、例えば、ネットワークデバイス、グラフィックデバイス、キーボード、シリアルインタフェース、マウス、赤外線インタフェース、ＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）ポートなど、ＲＴＯＳと汎用ＯＳで共有される可能性のあるデバイスである。
共有デバイス６０１は複数存在してもよい。
また、共有デバイス６０１へのＩＯ要求とは、共有デバイス１６０１の使用要求である。
【００２９】
二次記憶装置５００は、非特権ＯＳ２００及び非特権ＯＳ２５０を起動するために使用される、非特権ＯＳイメージファイル５０１及び、非特権ＯＳ起動情報ファイル５０２を保有する。二次記憶装置５００は情報記憶部の例である。
非特権ＯＳイメージファイル５０１は、ＯＳを起動する際に使用するバイナリファイルである。
非特権ＯＳ起動情報ファイル５０２は、ＯＳの起動に必要な情報が記載されている。情報の内容としては、必要なメモリサイズ、ページサイズ、ＣＰＵ数、タイマ数、ＯＳ名、エントリアドレスである。非ＯＳ起動情報ファイル５０２の例を図４に示す。
非特権ＯＳイメージファイル５０１、非特権ＯＳ起動情報ファイル５０２は、非特権ＯＳごとに用意されている。
図１の例では、非特権ＯＳ２００の非特権ＯＳイメージファイル５０１、非特権ＯＳ起動情報ファイル５０２があり、また、非特権ＯＳ２５０の非特権ＯＳイメージファイル５０１、非特権ＯＳ起動情報ファイル５０２がある。
また、二次記憶装置５００は、更に、非特権ＯＳデバイス起動情報ファイル５０３を保有している。
非特権ＯＳデバイス起動情報ファイル５０３には、非特権ＯＳと、非特権ＯＳに対して指定されているデバイス（指定デバイス）及び優先度が記載されている。
非特権ＯＳデバイス起動情報ファイル５０３は指定デバイス情報の例であり、二次記憶装置５００は情報記憶部の例である。
非特権ＯＳデバイス起動情報ファイル５０３は、例えば図５に示す情報である。
非特権ＯＳデバイス起動情報ファイル５０３は非特権ＯＳごとに用意されている訳ではなく、１つの非特権ＯＳにだけ非特権ＯＳデバイス起動情報ファイル５０３が用意されている場合もある。
【００３０】
次に、ＶＭ３００（仮想マシン）について説明する。
ＶＭ３００は、ＯＳ間通信処理部３０１とＯＳ起動処理部３０２とデバイス要求変換処理部３０３と仮想デバイス３５０に加え、デバイス割り当て処理部３０４、デバイス要求転送処理部３０５を保有する。
【００３１】
ＯＳ間通信処理部３０１は、非特権ＯＳ２００からのＩＯ要求を特権ＯＳ１００に送信する機能を備える。
【００３２】
ＯＳ起動処理部３０２は、特権ＯＳ１００の指示により、非特権ＯＳ２００および非特権ＯＳ２５０を起動する機能を備える。
【００３３】
デバイス要求変換処理部３０３は、非特権ＯＳから仮想デバイス３５０へのＩＯ要求を、共有デバイス６０１に対するＩＯ要求に変換する機能を備える。
【００３４】
仮想デバイス３５０は、非特権ＯＳ２００及び非特権ＯＳ２５０に対して共有デバイス６０１をエミュレートする。
仮想デバイス３５０は、共有デバイス６０１の数と同じだけ存在する。
つまり、仮想デバイス３５０は非特権ＯＳ２００及び非特権ＯＳ２５０からＩＯ要求を受け取り、デバイス要求変換処理部３０３を使用して共有デバイス６０１に対するＩＯ要求に変換し、デバイス要求転送処理部３０５にＩＯ要求の処理を依頼する。
【００３５】
デバイス割り当て処理部３０４は、ＶＭ３００上のＯＳ起動処理部３０２から、非特権ＯＳへのデバイス割り当て依頼を受け取り、非特権ＯＳに共有デバイスを割り当てる。
例えば、ＶＭ３００上のＯＳ起動処理部３０２から、非特権ＯＳ２００へのデバイス割り当て依頼を受け取り、二次記憶装置５００上の非特権ＯＳ２００の非特権ＯＳデバイス起動情報ファイル５０３を読み出し、非特権ＯＳ２００へ共有デバイス６０１を割り当てる。
【００３６】
デバイス要求転送処理部３０５は、デバイス管理権テーブル３６０から共有デバイス６０１の管理権を持つＯＳを特定し、該当するＯＳへＩＯ要求を転送する。
【００３７】
ＶＭ３００は、デバイス管理権テーブル３６０を管理する。
デバイス管理権テーブル３６０は、現在どのＯＳがどの共有デバイスの管理権を有するかを示すテーブルである。デバイス管理権テーブル３６０はデバイス管理権情報の例である。
つまり、デバイス管理権テーブル３６０は共有デバイス６０１ごとにいずれのＯＳが管理権を有しているのかを示すテーブルである。
デバイス管理権テーブル３６０はデバイス管理権情報の例である。
デバイス管理権テーブル３６０は、例えば図２に示す情報である。
【００３８】
またＶＭ３００において、デバイス割り当て処理部３０４は、特権ＯＳ１００が起動した後、いずれかの非特権ＯＳが起動する際に、非特権ＯＳデバイス起動情報ファイル５０３を参照し、起動する非特権ＯＳに指定デバイスがある場合に、起動する非特権ＯＳの指定デバイスの管理権を特権ＯＳ１００から起動する非特権ＯＳに移す。
また、ＯＳ間通信処理部３０１、デバイス要求転送処理部３０５及び仮想デバイス３５０は、協働により、いずれかのＯＳから出力されたいずれかの共有デバイス６０１に対するＩＯ要求（使用要求）を入力し、デバイス管理権テーブル３６０を参照して、入力したＩＯ要求が対象とする共有デバイス６０１の管理権を有しているＯＳを判別し、判別したＯＳにＩＯ要求を出力する。
ＯＳ間通信処理部３０１、デバイス要求転送処理部３０５及び仮想デバイス３５０は、ＯＳ判別部の機能を実現する。
【００３９】
次に、特権ＯＳ１００について説明する。
特権ＯＳ１００は、特権ＯＳ共有デバイス処理部１０１に加え、特権ＯＳ共有デバイス削除処理部１０２と特権ＯＳ仮想デバイス処理部１０３と特権ＯＳ仮想デバイス追加処理部１０４を保有する。
特権ＯＳ１００はシステム上に存在する全ての実デバイスを利用するための特権が与えられたＯＳである。
つまり、特権ＯＳ１００は、初期状態において、全ての共有デバイス６０１の管理権が付与されている。
特権ＯＳ１００は、実デバイスに対する豊富なデバイス処理用モジュールを持つＬｉｎｕｘ（登録商標）などの汎用ＯＳを想定している。
【００４０】
特権ＯＳ共有デバイス処理部１０１は、自ＯＳからのＩＯ要求及び、ＶＭ３００上のＯＳ間通信処理部３０１からのＩＯ要求を受け取り、共有デバイス６０１へＩＯ要求を送信する機能を備える。
特権ＯＳ共有デバイス削除処理部１０２は、ＶＭ３００からの指示により、特権ＯＳ１００に管理権が割り当てられている共有デバイス６０１を特権ＯＳ１００から切り離す処理を行う。
特権ＯＳ仮想デバイス処理部１０３は、ＶＭ３００上の仮想デバイス３５０に対しＩＯ要求を行う。
特権ＯＳ仮想デバイス追加処理部１０４は、ＶＭ３００からの指示により、特権ＯＳ１００に対し、ＶＭ３００上の仮想デバイス３５０を割り当てる処理を行う。
【００４１】
次に、非特権ＯＳ２００について説明する。
非特権ＯＳ２００は、非特権ＯＳ共有デバイス処理部２０２を保有する。
非特権ＯＳ２００はリアルタイムＯＳを想定している。
なお、本実施の形態では、非特権ＯＳ２００には指定デバイスがあり、非特権ＯＳ２５０には指定デバイスがない例を説明する。
つまり、非特権ＯＳ２００は、非特権ＯＳデバイス起動情報ファイル５０３に自ＯＳが示され、また、指定デバイスが指定されており、指定デバイスに対する管理権が付与される。
一方、非特権ＯＳ２５０は、非特権ＯＳデバイス起動情報ファイル５０３に自ＯＳが示されておらず、また、指定デバイスが指定されていない。
なお、以下では、非特権ＯＳ２００の指定デバイスを共有デバイスＡ６０１ａとして説明する。
【００４２】
非特権ＯＳ共有デバイス処理部２０２は、ＩＯ要求保持キュー３７０を管理し、ＩＯ要求が競合した場合は、ＩＯ要求の送信元ＯＳの優先度に応じて、ハードウェア４００上の共有デバイス６０１に対し、ＩＯ要求を送信する機能を備える。
非特権ＯＳ共有デバイス処理部２０２は、実施の形態２において実行制御部として動作する。
ＩＯ要求保持キュー３７０は、ＶＭ３００上のデバイス要求転送処理部３０５及び自ＯＳである非特権ＯＳ２００からのＩＯ要求を一時的に保有する機能を持つ。
非特権ＯＳ共有デバイス処理部２０２は、ＩＯ要求の送信元ＯＳの優先度に応じて、キューの順番を変更する。
ＩＯ要求の送信元ＯＳの優先度は、非特権ＯＳデバイス起動情報ファイル５０３の共有デバイス６０１に対する優先度を使用する。
なお、非特権ＯＳデバイス起動情報ファイル５０３が存在しない場合は最低優先度とする。
【００４３】
次に、非特権ＯＳ２５０について説明する。
非特権ＯＳ２５０は実デバイスへのアクセスが制限されたＯＳである。
非特権ＯＳ２５０は汎用ＯＳを想定している。
非特権ＯＳ２５０は、非特権ＯＳ仮想デバイス処理部２５１を保有する。
非特権ＯＳ仮想デバイス処理部２５１は、ＶＭ３００上の仮想デバイス３５０に対し、ＩＯ要求を送信する機能を備える。
【００４４】
前述のように、本実施の形態では、非特権ＯＳ２００には指定デバイスがあり、非特権ＯＳ２５０には指定デバイスがないため、非特権ＯＳ２００には非特権ＯＳ共有デバイス処理部２０２が存在するが、非特権ＯＳ２５０には非特権ＯＳ共有デバイス処理部２０２に相当する要素がない。
代わりに、非特権ＯＳ２５０には、共有デバイス６０１に対するＩＯ要求を仮想デバイス３５０に送信するための非特権ＯＳ仮想デバイス処理部２５１が設けられている。
【００４５】
図２は、ＶＭ３００が備えるデバイス管理権テーブル３６０の内容の例を示している。
デバイス管理権テーブル３６０は、共有デバイスごとに、管理権を持つＯＳを示す。
デバイス管理権テーブル３６０のテーブルの項目としては、共有デバイス名、管理権を持つＯＳ名、管理権を持つＯＳの優先度、現在の管理状況を示す管理権フラグである。
図２の例では、共有デバイスＡ６０１ａについて、特権ＯＳ１００が管理中であり、特権ＯＳ１００の優先度が０であることを示している。
【００４６】
図５は、非特権ＯＳデバイス起動情報ファイル５０３の例を示す。
非特権ＯＳデバイス起動情報ファイル５０３のテーブルの項目としては、ＯＳ名、共有デバイス名、優先度がある。
図５の例では、非特権ＯＳ２００に共有デバイスＡ６０１ａについての優先度１００が設定されていることが示されている。
なお、本実施の形態では優先度は値が大きいほど優先度が高いとする。
【００４７】
次に、本実施の形態における、特権ＯＳ１００上のアプリケーションが非特権ＯＳ２００を起動する手順を図７を用いて説明する。
【００４８】
まず、ステップＳ８０１において、特権ＯＳ１００は、ＶＭ３００上のＯＳ起動処理部３０２に非特権ＯＳ２００の起動を依頼する。
その際、特権ＯＳ１００は、二次記憶装置５００上に存在する非特権ＯＳ２００の非特権ＯＳイメージファイル５０１、非特権ＯＳ起動情報ファイル５０２および非特権ＯＳデバイス起動情報ファイル５０３を指定する。
次に、ステップＳ８０２において、ＶＭ３００上のＯＳ起動処理部３０２は、非特権ＯＳ起動情報ファイル５０２（図４）から、非特権ＯＳ２００の起動に必要なメモリサイズ、ページサイズ、ＣＰＵ数、タイマ数、ＯＳ名、エントリアドレスを取得する。
次に、ステップＳ８０３において、ＶＭ３００上のＯＳ起動処理部３０２は、非特権ＯＳ２００の起動に必要なデバイスの情報を取得した後、非特権ＯＳ２００に対しデバイスを割り当てる。
割り当てるデバイスはメモリ、ＣＰＵ、タイマである。
次に、ステップＳ８０４において、ＶＭ３００上のＯＳ起動処理部３０２は、非特権ＯＳイメージファイル５０１を主メモリ７０１に展開し、非特権ＯＳ２００に割り当てたＣＰＵのプログラムカウンタにエントリアドレスを指定する。
次に、ステップＳ８０５において、ＶＭ３００上のデバイス割り当て処理部３０４は、非特権ＯＳデバイス起動情報ファイル５０３（図５）から、非特権ＯＳ２００の指定デバイス及び非特権ＯＳ２００の優先度を取得する。
図５の場合は、非特権ＯＳ２００の指定デバイスは共有デバイスＡ６０１ａであり、非特権ＯＳ２００に共有デバイスＡ６０１ａについての優先度１００が設定されている。
【００４９】
次に、ステップＳ８０６において、ＶＭ３００上のデバイス割り当て処理部３０４は、ステップＳ８０５で取得した起動中の非特権ＯＳ２００の指定デバイス（共有デバイスＡ６０１ａ）をキーとして、デバイス管理権テーブル３６０（図２）から、当該デバイスの管理権を持つＯＳ及びデバイスの管理権の変更が必要かどうかを判断する。
図２の例では、共有デバイスＡ６０１ａの管理権を現在持っているＯＳは特権ＯＳ１００であり、特権ＯＳ１００の優先度は０である。
一方、図５に示すように、現在起動中の非特権ＯＳ２００の共有デバイスＡ６０１ａについての優先度は１００であり、特権ＯＳ１００の優先度よりも高い。
このため、デバイス割り当て処理部３０４は、非特権ＯＳ２００に共有デバイスＡ６０１ａの管理権を割り当てることを決定し、管理権の変更が必要と判断する。
管理権の変更が必要な場合はステップＳ８０７に処理が移行し、管理権の変更が必要でない場合はステップＳ８１２に処理が移行する。
【００５０】
ステップＳ８０７では、ＶＭ３００上のデバイス割り当て処理部３０４が、特権ＯＳ１００上の特権ＯＳ共有デバイス削除処理部１０２を呼び出す。
次に、ステップＳ８０８において、特権ＯＳ１００上の特権ＯＳ共有デバイス削除処理部１０２は、特権ＯＳ１００の動作を継続したまま、特権ＯＳ１００から共有デバイスＡ６０１ａを切り離し、ＶＭ３００上のデバイス割り当て処理部３０４に通知する。
次に、ステップＳ８０９において、ＶＭ３００上のデバイス割り当て処理部３０４は、特権ＯＳ１００上の特権ＯＳ仮想デバイス追加処理部１０４を呼び出す。
次に、ステップＳ８１０において、特権ＯＳ仮想デバイス追加処理部１０４は、特権ＯＳ１００の動作を継続したまま、特権ＯＳ１００と共有デバイスＡ６０１ａに対応する仮想デバイス３５０とを対応付け、ＶＭ３００上のデバイス割り当て処理部３０４に通知する。
次に、ステップＳ８１１において、ＶＭ３００上のデバイス割り当て処理部３０４は、デバイス管理権テーブル３６０を更新する。
本例では、共有デバイスＡ６０１ａの管理権が、特権ＯＳ１００から非特権ＯＳ２００へ移動したので、デバイス管理権テーブル３６０は図２から図３に変更になる。
最後に、ステップＳ８１２において、ＶＭ３００上のＯＳ起動処理部３０２は、非特権ＯＳ２００のＣＰＵに対し起動命令を行う。
以上により非特権ＯＳ２００の起動が完了する。
【００５１】
なお、以上では、特権ＯＳ１００から非特権ＯＳ２００に共有デバイスＡ６０１ａの管理権が移動する場合を説明したが、非特権ＯＳから別の非特権ＯＳに共有デバイスの管理権が移動することも可能である。
例えば、以上の手順により共有デバイスＡ６０１ａの管理権が非特権ＯＳ２００に移動した後に、非特権ＯＳ２５０が起動され、非特権ＯＳ２５０の共有デバイスＡ６０１についての優先度が２００である場合は、非特権ＯＳ２５０の優先度の方が高いので、共有デバイスＡ６０１ａの管理権が非特権ＯＳ２５０に移動する。
【００５２】
次に本実施の形態における、デバイスを共有する方法を図８を用いて説明する。
ここでは、非特権ＯＳ２５０が共有デバイスＡ６０１ａを使用する場合について説明する。
【００５３】
まず、ステップＳ９０１において、非特権ＯＳ２５０上のアプリケーションは、非特権ＯＳ仮想デバイス処理部２５１に対して、共有デバイスＡ６０１ａのＩＯ要求を行う。
次に、ステップＳ９０２において、非特権ＯＳ２５０上の非特権ＯＳ仮想デバイス処理部２５１は、ＶＭ３００上のＯＳ間通信処理部３０１を介して、ＶＭ３００上の共有デバイスＡ６０１ａに対応する仮想デバイス３５０にＩＯ要求を行う。
次に、ステップＳ９０３において、ＶＭ３００上の仮想デバイス３５０は、自身へのＩＯ要求に対して、デバイス要求変換処理部３０３を呼び出し、デバイス要求変換処理部３０３が、仮想デバイス３５０へのＩＯ要求から共有デバイスＡ６０１ａへのＩＯ要求に変換し、次に仮想デバイス３５０が、ＶＭ３００上のデバイス要求転送処理部３０５を呼び出す。
次に、ステップＳ９０４において、ＶＭ３００上のデバイス要求転送処理部３０５は、デバイス管理権テーブル３６０を参照し、共有デバイスＡ６０１ａがどのＯＳに割り当てられているか調べ、仮想デバイス３５０に通知する。
デバイス管理権テーブル３６０が図３の状態であるとすると、デバイス要求転送処理部３０５は、共有デバイスＡ６０１ａの管理権は非特権ＯＳ２００に割り当てられていることを通知する。
次に、ステップＳ９０５において、ＶＭ３００の仮想デバイス３５０は、ＯＳ間通信処理部３０１を介して、共有デバイスＡ６０１ａの管理権を持つＯＳ、すなわち非特権ＯＳ２００上の非特権ＯＳ共有デバイス処理部２０２に実ＩＯ要求を行う。
非特権ＯＳ２００上の非特権ＯＳ共有デバイス処理部２０２では、仮想デバイス３５０からの実ＩＯ要求（非特権ＯＳ２５０のＩＯ要求）及び非特権ＯＳ２５０の優先度をＩＯ要求保持キュー３７０に格納し、他のＯＳ（特権ＯＳ１００、非特権ＯＳ２００）からの実ＩＯ要求の出力有無を調査する。
そして、他のＯＳからの実ＩＯ要求がないことを確認した後に、ステップＳ９０６において、非特権ＯＳ２００上の非特権ＯＳ共有デバイス処理部２０２は、管理デバイスである共有デバイスＡ６０１ａに実ＩＯ要求を行う。この後、非特権ＯＳ２５０上のアプリケーションは共有デバイスＡ６０１ａを使用することができる。
なお、他のＯＳから実ＩＯ要求が出力されている場合の処理は図１０を参照して後述する。
以上の処理により、デバイスの共有が行われる。
なお、特権ＯＳ１００上のアプリケーションが共有デバイスＡ６０１のＩＯ要求を出力する場合も、上記の非特権ＯＳ２５０の場合と同様の処理手順となる。
【００５４】
次に、非特権ＯＳ２００が共有デバイスＡ６０１ａを使用する際の処理手順を図９を用いて説明する。
【００５５】
まず、ステップＳ１００１において、非特権ＯＳ２００上のアプリケーションは、非特権ＯＳ共有デバイス処理部２０２に共有デバイスＡ６０１ａのＩＯ要求を行う。なお、非特権ＯＳ２００では、共有デバイスＡ６０１ａの管理権が非特権ＯＳ２００にあることを認識している。
次に、ステップＳ１００２において、非特権ＯＳ共有デバイス処理部２０２は、非特権ＯＳ２００上のアプリケーションからのＩＯ要求と非特権ＯＳ２００の優先度をＩＯ要求保持キュー３７０に格納し、他のＯＳ（特権ＯＳ１００、非特権ＯＳ２５０）からの実ＩＯ要求の出力有無を調査する。
そして、他のＯＳからの実ＩＯ要求がないことを確認した後に、ステップＳ１００３において、非特権ＯＳ共有デバイス処理部２０２は、共有デバイスＡ６０１ａに実ＩＯ要求を行う。この後、非特権ＯＳ２００上のアプリケーションは共有デバイスＡ６０１ａを使用することができる。
なお、他のＯＳから実ＩＯ要求が出力されている場合の処理は図１０を参照して後述する。
以上の処理により、デバイスの共有が行われる。
【００５６】
次に本実施の形態における、非特権ＯＳ２００と非特権ＯＳ２５０のＩＯ要求が競合した場合の処理を図１０を用いて説明する。
【００５７】
まず、ステップＳ１１０１において、非特権ＯＳ２５０上のアプリケーションは、非特権ＯＳ仮想デバイス処理部２５１に共有デバイスＡ６０１ａのＩＯ要求を行う。
次に、ステップＳ１１０２において、非特権ＯＳ２５０上の非特権ＯＳ仮想デバイス処理部２５１は、ＶＭ３００上のＯＳ間通信処理部３０１を介して、ＶＭ３００上の共有デバイスＡ６０１ａに対応する仮想デバイス３５０にＩＯ要求を行う。
次に、ステップＳ１１０３において、ＶＭ３００上の仮想デバイス３５０は、自身へのＩＯ要求に対して、デバイス要求変換処理部３０３を呼び出し、デバイス要求変換処理部３０３が、仮想デバイス３５０へのＩＯ要求から共有デバイスＡ６０１ａへのＩＯ要求に変換し、次に仮想デバイス３５０が、ＶＭ３００上のデバイス要求転送処理部３０５を呼び出す。
次に、ステップＳ１１０４において、ＶＭ３００上のデバイス要求転送処理部３０５は、デバイス管理権テーブル３６０を参照し、共有デバイスＡ６０１ａがどのＯＳに割り当てられているか調べ、仮想デバイス３５０に通知する。
デバイス管理権テーブル３６０が図３の状態であるとすると、デバイス要求転送処理部３０５は、共有デバイスＡ６０１ａの管理権は非特権ＯＳ２００に割り当てられていることを通知する。
次に、ステップＳ１１０５において、ＶＭ３００上の仮想デバイス３５０は、ＯＳ間通信処理部３０１を介して、共有デバイスＡ６０１ａの管理権を持つＯＳ、すなわち非特権ＯＳ２００上の非特権ＯＳ共有デバイス処理部２０２に実ＩＯ要求を行う。
次に、ステップＳ１１０６において、非特権ＯＳ２００上の非特権ＯＳ共有デバイス処理部２０２は、仮想デバイス３５０からの実ＩＯ要求（非特権ＯＳ２５０のＩＯ要求）及び非特権ＯＳ２５０の優先度をＩＯ要求保持キュー３７０に格納し、他のＯＳ（特権ＯＳ１００、非特権ＯＳ２００）からの実ＩＯ要求の出力有無を調査する。
ここでは、ＩＯ要求保持キュー３７０には他のＯＳからのＩＯ要求は存在していないので、ステップＳ１１０６のＩＯ要求が先頭に格納される。
ＩＯ要求保持キュー３７０に格納するＯＳ優先度は、非特権ＯＳデバイス起動情報ファイル５０３の共有デバイス６０１に対する優先度を使用する。なお、非特権ＯＳデバイス起動情報ファイル５０３が存在しない場合は最低優先度とする。
本例の場合、非特権ＯＳ２５０用の非特権ＯＳデバイス起動情報ファイル５０３は存在していないので、最低優先度（０）とする。また、特権ＯＳ１００の場合は、全ての共有デバイス６０１において最低優先度（０）とする。
【００５８】
ここで、ステップＳ１１０７において、非特権ＯＳ２００上のアプリケーションが、非特権ＯＳ共有デバイス処理部２０２に共有デバイスＡ６０１ａのＩＯ要求を行ったとする。なお、非特権ＯＳ２００では、共有デバイスＡ６０１ａの管理権が非特権ＯＳ２００にあることを認識している。
非特権ＯＳ２００上の非特権ＯＳ共有デバイス処理部２０２は非特権ＯＳ２００上のアプリケーションからのＩＯ要求と非特権ＯＳ２００の優先度をＩＯ要求保持キュー３７０に格納し、他のＯＳ（特権ＯＳ１００、非特権ＯＳ２５０）からの実ＩＯ要求の出力有無を調査する。
図１０の例では、非特権ＯＳ２５０からのＩＯ要求がＩＯ要求保持キュー３７０に先に格納されている。
このため、非特権ＯＳ共有デバイス処理部２０２は、ＯＳ優先度に基づいてＩＯ要求保持キュー３７０内のＩＯ要求の順序を入れ替える。
より具体的には、共有デバイスＡ６０１ａに対する非特権ＯＳ２５０の優先度は最低であり、非特権ＯＳ２００の優先度は１００であるため、先行する非特権ＯＳ２５０の優先度よりも、非特権ＯＳ２００の優先度の方が高い。
そのため、ステップＳ１１０８において、非特権ＯＳ２００上の非特権ＯＳ共有デバイス処理部２０２は、ＩＯ要求の送信元のＯＳ優先度に応じてＩＯ要求保持キュー３７０へのＩＯ要求の格納順序を変更する。
つまり、非特権ＯＳ共有デバイス処理部２０２は、非特権ＯＳ２００からのＩＯ要求をＩＯ要求保持キュー３７０の先頭に格納する。
最後に、ステップＳ１１０９において、非特権ＯＳ２００上の非特権ＯＳ共有デバイス処理部２０２は、ＩＯ要求保持キュー３７０の先頭に格納されているＩＯ要求から順に管理デバイスである共有デバイスＡ６０１ａに処理を依頼する。
図１０の例の場合、まず、非特権ＯＳ２００からのＩＯ要求から共有デバイスＡ６０１ａに依頼され、次に、非特権ＯＳ２５０からのＩＯ要求が共有デバイスＡ６０１ａに依頼される。
【００５９】
なお、特権ＯＳ１００が管理権を有する共有デバイスに非特権ＯＳ２００及び非特権ＯＳ２５０がＩＯ要求を行う場合の処理手順は、図１５及び図１６に示したものと同じであり、説明を省略する。
【００６０】
また、以上では、非特権ＯＳ２００に指定デバイスとして共有デバイスＡ６０１ａが設定され、非特権ＯＳ２００に非特権ＯＳ共有デバイス処理部２０２が設けられ、非特権ＯＳ２５０に非特権ＯＳ仮想デバイス処理部２５１が設けられている構成（図１）を説明した。
一方、非特権ＯＳ２００に指定デバイスとして共有デバイスＡ６０１ａが設定され、非特権ＯＳ２５０に指定デバイスとして共有デバイスＢ６０１ｂが設定されるようにしてもよい。
この場合は、図６に示すように、非特権ＯＳ２００に非特権ＯＳ仮想デバイス処理部２０１と非特権ＯＳ共有デバイス処理部２０２が設けられ、非特権ＯＳ２５０に非特権ＯＳ仮想デバイス処理部２５１と非特権ＯＳ共有デバイス処理部２５２が設けられることになる。
図６の構成では、非特権ＯＳ２００上のアプリケーションが共有デバイスＢ６０１ｂを使用する場合は、ＩＯ要求を非特権ＯＳ仮想デバイス処理部２０１に出力する。そして、非特権ＯＳ仮想デバイス処理部２０１が共有デバイスＢ６０１ｂのＩＯ要求をＶＭ３００上の仮想デバイス３５０に出力する。
ＶＭ３００上での処理は前述した通りであり、仮想デバイス３５０から非特権ＯＳ２５０上の非特権ＯＳ共有デバイス処理部２５２に共有デバイスＢ６０１ｂのＩＯ要求が出力される。
非特権ＯＳ共有デバイス処理部２５２の処理自体は、非特権ＯＳ共有デバイス処理部２０２と同様であるため、説明を省略する。
【００６１】
このように、本実施の形態のデバイス共有方式では、非特権ＯＳに特定の共有デバイスを指定デバイスとして対応付けておき、当該非特権ＯＳの起動時に指定デバイスの管理権を特権ＯＳから非特権ＯＳに移すので、当該非特権ＯＳは、直接指定デバイスに対して使用要求を出すことができ、ＶＭおよび特権ＯＳの処理を待つ必要がなく、当該非特権ＯＳに必要なリアルタイム応答性を確保することができる。
【００６２】
また、本実施の形態のデバイス共有方式では、非特権ＯＳが使用するハードウェア情報を保有する領域と、ＩＯ要求の送信先ＯＳを管理する領域と、ＩＯ要求及び要求元ＯＳ優先度を保有する領域を備え、非特権ＯＳ起動時に非特権ＯＳに対しデバイスを割り当て、さらに、他のＯＳからのＩＯ要求をデバイス管理権を持つ非特権ＯＳへ送信し、ＩＯ要求が競合した場合には、ＩＯ要求送信元のＯＳ優先度に応じてＩＯ要求を実施する。
このため、共有デバイスへのＩＯ要求が競合した場合でも、共有デバイスの管理権を持つＯＳへのリアルタイム応答性を確保することができる。
【００６３】
本実施の形態では、
（１）複数個のデバイスの共有が可能な仮想マシン（ＶＭ）、
（２）システム上の全てのデバイスを操作可能な一つのＯＳ（特権ＯＳ）、
（３）システム上のあるデバイスを操作可能な複数個のＯＳ（非特権ＯＳ）、
（４）各種データを保有する二次記憶装置、
（５）ハードウェア資源であるＣＰＵ、メモリ、
（６）共有デバイスに対するＶＭ上の仮想デバイス、
を備えた構成において、以下の構成要素を備えた計算機装置を説明した。
（Ａ）各共有デバイスに対するＯＳの優先度およびデバイスの管理状態が示されたデバイス管理権テーブル、
（Ｂ）非特権ＯＳの使用する共有デバイス及び優先度が記述された非特権ＯＳデバイス起動情報ファイル、
（Ｃ）非特権ＯＳが起動する際に、被起動ＯＳが使用するデバイスを割り当てるデバイス割り当て処理部、
（Ｄ）共有デバイスがどのＯＳへ割り当てられているかを判断し、該当するＯＳへＩＯ要求を転送するデバイス要求転送処理部、
（Ｅ）ＩＯ要求の送信元ＯＳの優先度とＩＯ要求が格納されているＩＯ要求保持キュー、
（Ｆ）ＩＯ要求の送信元ＯＳの優先度に基づき共有デバイスにＩＯ要求の処理を依頼する共有デバイス処理部。
【００６４】
また、本実施の形態では、
デバイス割り当て処理部は、非特権ＯＳ起動の際に、非特権ＯＳデバイス起動情報ファイルから非特権ＯＳが使用するデバイスおよびそのデバイスに対する優先度を取得し、デバイス管理権テーブルから現在のデバイスの管理権を持つＯＳとそのＯＳの優先度を特定し、優先度に応じて現在使用中のＯＳからデバイスを削除し、起動中の非特権ＯＳへデバイスを割り当て、非特権ＯＳに対し、デバイスの管理権を委譲し、デバイス管理権テーブルに管理権の移動を含む更新を行う計算機装置を説明した。
【００６５】
また、本実施の形態では、ＶＭ上のデバイス要求転送処理部は、デバイス管理権テーブルを利用し、共有デバイスがどのＯＳに割り当てられているかをチェックし、ＶＭ上のＯＳ間通信処理部を介して、非特権ＯＳ上の非特権ＯＳ共有デバイス処理部に実ＩＯ要求を行うことで、ＯＳ間でデバイスの共有が可能となる計算機装置を説明した。
【００６６】
また、本実施の形態では、共有デバイス処理部は、ＩＯ要求の送信元ＯＳの優先度により、ＩＯ要求を優先度順にＩＯ要求保持キューに格納し、複数ＯＳからのＩＯ要求が競合した場合に、ＩＯ要求保持キューの先頭からＩＯ要求を処理することで、共有デバイスに対するＩＯ要求が競合した場合でも、デバイス管理権を所持する非特権ＯＳのＩＯ要求を優先的に実施する計算機装置を説明した。
【００６７】
実施の形態２．
次に、実施の形態２に係る計算機装置を説明する。
本実施の形態に係る計算機装置の構成は図１又は図６と同じである。
本実施の形態では、非特権ＯＳ共有デバイス処理部２０２の動作および共有デバイス６０１の動作以外は実施の形態１と同様である。
なお、本実施の形態では、非特権ＯＳ共有デバイス処理部２０２は実行制御部の例として動作する。
また、図６に示す構成では、非特権ＯＳ共有デバイス処理部２５２も実行制御部の例として動作する。
以下では、図１の構成に従って説明を進める。
【００６８】
本実施の形態では、共有デバイス６０１は、非特権ＯＳ共有デバイス処理部２０２から指示により、実行中のＩＯ要求の実行をキャンセルする。
【００６９】
本実施の形態では、非特権ＯＳ共有デバイス処理部２０２は、いずれかのＯＳから発行されたＩＯ要求が共有デバイスＡ６０１ａで実行されている際に他のＯＳから共有デバイスＡ６０１ａに対するＩＯ要求が発行された場合に、新たに発行されたＩＯ要求の発行元のＯＳの共有デバイスＡ６０１ａに対する優先度と、実行中のＩＯ要求の発行元のＯＳの共有デバイスＡ６０１ａに対する優先度とを比較する。
そして、非特権ＯＳ共有デバイス処理部２０２は、新たに発行されたＩＯ要求の発行元のＯＳの優先度の方が高い場合に、実行中のＩＯ要求の実行を停止させ、新たに発行されたＩＯ要求の実行を開始させる。
【００７０】
より具体的には、本実施の形態における非特権ＯＳ共有デバイス処理部２０２は、ＶＭ３００及び自ＯＳ２００からのＩＯ要求を受け付けると、まずＩＯ要求保持キュー３７０にＩＯ要求とＩＯ要求の送信元ＯＳのＯＳ優先度を格納する。
その後、非特権ＯＳ共有デバイス処理部２０２は、以前の他ＯＳからのＩＯ要求を共有デバイスＡ６０１ａが処理中かチェックし、処理していない場合は、共有デバイスＡ６０ａ１に対しＩＯ要求の実行を依頼する。
既に共有デバイスＡ６０１ａが他のＯＳからのＩＯ要求を実行中の場合には、非特権ＯＳ共有デバイス処理部２０２は、共有デバイスＡ６０１ａが実行しているＩＯ要求の要求元ＯＳの優先度と、新たに受け付けたＩＯ要求の要求元ＯＳの優先度を比較する。
新たに受け付けたＩＯ要求の要求元ＯＳの優先度が高い場合には、非特権ＯＳ共有デバイス処理部２０２は、現在実行中のＩＯ要求のキャンセルを共有デバイスＡ６０１ａに指示し、優先度の高いＩＯ要求の実施を共有デバイスＡ６０１ａに指示する。
更に、非特権ＯＳ共有デバイス処理部２０２は、キャンセルの対象となったＩＯ要求をＩＯ要求保持キュー３７０から削除し、所定の退避領域にキャンセルの対象となったＩＯ要求を退避させる。
次に、優先度の高いＩＯ要求の実行が終了した後、非特権ＯＳ共有デバイス処理部２０２は、退避領域にあるＩＯ要求を再度ＩＯ要求保持キュー３７０に格納し、キャンセルされたＩＯ要求の実行を共有デバイスＡ６０１ａに指示する。
【００７１】
本実施の形態における特権ＯＳ１００上のアプリケーションが非特権ＯＳ２００を起動する手順は図７と同様であり説明を割愛する。
また、本実施の形態におけるデバイスを共有する方法は、図８及び図９と同様であり説明を割愛する。
【００７２】
次に、本実施の形態における、非特権ＯＳ２００と非特権ＯＳ２５０のＩＯ要求が競合した場合の処理について図１１を用いて示す。
なお、ステップＳ１２０１〜Ｓ１２０６は、図１０のステップＳ１１０１〜Ｓ１１０６と同様である。
また、ステップＳ１２０８は、図１０のステップＳ１１０７と同様である。
図１０との重複部分を含め、以下にて、ステップＳ１２０１〜Ｓ１２１３を説明する。
【００７３】
まず、ステップＳ１２０１において、非特権ＯＳ２５０上のアプリケーションは、非特権ＯＳ仮想デバイス処理部２５１に共有デバイスＡ６０１ａのＩＯ要求を行う。
次に、ステップＳ１２０２において、非特権ＯＳ２５０上の非特権ＯＳ仮想デバイス処理部２５１は、ＶＭ３００上のＯＳ間通信処理部３０１を介して、ＶＭ３００上の共有デバイスＡ６０１ａに対応する仮想デバイス３５０にＩＯ要求を行う。
次に、ステップＳ１２０３において、ＶＭ３００上の仮想デバイス３５０は、自身へのＩＯ要求に対して、デバイス要求変換処理部３０３を呼び出し、デバイス要求変換処理部３０３が、仮想デバイス３５０へのＩＯ要求から共有デバイスＡ６０１ａへのＩＯ要求に変換し、次に仮想デバイス３５０が、ＶＭ３００上のデバイス要求転送処理部３０５を呼び出す。
次に、ステップＳ１２０４において、ＶＭ３００上のデバイス要求転送処理部３０５は、デバイス管理権テーブル３６０を参照し、共有デバイスＡ６０１ａがどのＯＳに割り当てられているか調べ、仮想デバイス３５０に通知する。
デバイス管理権テーブル３６０が図３の状態であるとすると、デバイス要求転送処理部３０５は、共有デバイスＡ６０１ａの管理権は非特権ＯＳ２００に割り当てられていることを通知する。
次に、ステップＳ１２０５において、ＶＭ３００上の仮想デバイス３５０は、ＯＳ間通信処理部３０１を介して、共有デバイスＡ６０１ａの管理権を持つＯＳ、すなわち非特権ＯＳ２００上の非特権ＯＳ共有デバイス処理部２０２に実ＩＯ要求を行う。
次に、ステップＳ１２０６において、非特権ＯＳ２００上の非特権ＯＳ共有デバイス処理部２０２は、仮想デバイス３５０からの実ＩＯ要求（非特権ＯＳ２５０のＩＯ要求）及び非特権ＯＳ２５０の優先度をＩＯ要求保持キュー３７０に格納し、他のＯＳ（特権ＯＳ１００、非特権ＯＳ２００）からの実ＩＯ要求の出力有無を調査する。
ＩＯ要求保持キュー３７０に格納するＯＳ優先度は、非特権ＯＳデバイス起動情報ファイル５０３の共有デバイス６０１に対する優先度を使用する。なお、非特権ＯＳデバイス起動情報ファイル５０３が存在しない場合は最低優先度とする。
本例の場合、非特権ＯＳ２５０用の非特権ＯＳデバイス起動情報ファイル５０３は存在していないので、最低優先度（０）とする。また、特権ＯＳ１００の場合は、全ての共有デバイス６０１において最低優先度（０）とする。
【００７４】
その後、ステップＳ１２０７において、非特権ＯＳ２００上の非特権ＯＳ共有デバイス処理部２０２は、共有デバイスＡ６０１ａが既に他のＩＯ要求を実施中か否か判断する。
ここでは、共有デバイスＡ６０１ａは他のＩＯ要求を実施していないとする。
そのため、非特権ＯＳ共有デバイス処理部２０２は非特権ＯＳ２５０からのＩＯ要求を共有デバイスＡ６０１ａに依頼する。
【００７５】
ここで、ステップＳ１２０８において、非特権ＯＳ２００上のアプリケーションが、非特権ＯＳ共有デバイス処理部２０２に共有デバイスＡ６０１ａのＩＯ要求を行ったとする。
なお、非特権ＯＳ２００では、共有デバイスＡ６０１ａの管理権が非特権ＯＳ２００にあることを認識している。
次に、ステップＳ１２０９において、非特権ＯＳ２００上の非特権ＯＳ共有デバイス処理部２０２は、ＩＯ要求を受け付けると、ＩＯ要求保持キュー３７０にＩＯ要求およびＩＯ要求の送信元のＯＳ優先度を格納する。
ＩＯ要求の送信元のＯＳ優先度は、非特権ＯＳデバイス起動情報ファイル５０３の共有デバイスＡ６０１ａに対する優先度を使用する。今回の場合、図５の非特権ＯＳデバイス起動情報ファイル５０３をチェックし、ＯＳ優先度１００を設定する。
次に、ステップＳ１２１０において、非特権ＯＳ２００上の非特権ＯＳ共有デバイス処理部２０２は、共有デバイスＡ６０１ａが既に他のＩＯ要求を実施中か否かを判断する。
ここでは、共有デバイスＡ６０１ａは既に非特権ＯＳ２５０からのＩＯ要求を実施中なので、非特権ＯＳ共有デバイス処理部２０２は共有デバイスＡ６０１ａに対し非特権ＯＳ２５０からのＩＯ要求のキャンセルを依頼する。
このとき、非特権ＯＳ共有デバイス処理部２０２は、キャンセルの対象となったＩＯ要求をＩＯ要求保持キュー３７０から削除し、所定の退避領域にキャンセルの対象となったＩＯ要求を退避させる。
【００７６】
ステップＳ１２１１において、共有デバイスＡ６０１ａは、非特権ＯＳ２００上の非特権ＯＳ共有デバイス処理部２０２からのＩＯ要求のキャンセル依頼に応じて、これまで実施していたＩＯ要求の実施を停止し、非特権ＯＳ共有デバイス処理部２０２に対しキャンセル完了を通知する。
次に、ステップＳ１２１２において、非特権ＯＳ２００上の非特権ＯＳ共有デバイス処理部２０２は、共有デバイスＡ６０１ａに自ＯＳである非特権ＯＳ２００からのＩＯ要求を依頼する。
最後に、非特権ＯＳ２００からのＩＯ要求の実行が終了した後、ステップＳ１２１３において、非特権ＯＳ共有デバイス処理部２０２は、退避領域にあるＩＯ要求を再度ＩＯ要求保持キュー３７０に格納し、キャンセルされたＩＯ要求の実行を共有デバイスＡ６０１ａに指示する。
【００７７】
このように、本実施の形態のデバイス共有方式では、非特権ＯＳが使用するハードウェア情報を保有する領域と、ＩＯ要求の送信先ＯＳを管理する領域と、ＩＯ要求及び要求元ＯＳ優先度を保有する領域を備え、非特権ＯＳ起動時に非特権ＯＳに対しデバイスを割り当て、さらに、他のＯＳからのＩＯ要求をデバイス管理権を持つ非特権ＯＳへ送信する。
そして、ＩＯ要求が競合した場合には、ＩＯ要求送信元のＯＳ優先度をチェックし、優先度が低いＩＯ要求をキャンセルし、優先度の高いＯＳからのＩＯ要求を優先的に実施するようにしたので、共有デバイスへのＩＯ要求が競合した場合でも、共有デバイス管理権を持つＯＳへのリアルタイム応答性を確保することができる。
【００７８】
以上、本実施の形態では、以下の機能を備える計算機を説明した。
（１）共有デバイスは共有デバイス処理部からの要求により、これまで実施していたＩＯ要求をキャンセルする機能を持つ。
（２）共有デバイス処理部は、ＩＯ要求の送信元ＯＳの優先度と、共有デバイス上で実施されているＩＯ要求の送信元ＯＳのＯＳ優先度を比較し、共有デバイス上で実施されているＩＯ要求の送信元ＯＳのＯＳ優先度が低い場合には、共有デバイスに対し、それまで実施していた処理のキャンセルを依頼し、より優先度の高いＯＳからのＩＯ要求を優先的に処理させることで、共有デバイスに対するＩＯ要求が競合した場合でも、ＯＳへのリアルタイム応答性を確保することができる。
【００７９】
実施の形態３．
実施の形態１及び実施の形態２では、非特権ＯＳ２００は自ＯＳが共有デバイスＡ６０１ａの管理権を有していることを認識しているが、本実施の形態では、非特権ＯＳ２００が共有デバイスＡ６０１ａの管理権を有しているＯＳを認識していない例を説明する。
【００８０】
本実施の形態に係る計算機装置１の構成例は図６に示すものと同じである。
つまり、非特権ＯＳ２００には、非特権ＯＳ仮想デバイス処理部２０１、非特権ＯＳ共有デバイス処理部２０２の両者が含まれている。
【００８１】
次に、本実施の形態に係る動作例を説明する。
【００８２】
非特権ＯＳ２００上のアプリケーションは、どのＯＳが共有デバイスＡ６０１ａの管理権を取得しているかを知らないので、非特権ＯＳ仮想デバイス処理部２０１に共有デバイスＡ６０１ａのＩＯ要求を行う。
非特権ＯＳ仮想デバイス処理部２０１は、デバイス管理権テーブル３６０の情報を読み出し、どのＯＳが共有デバイスＡ６０１ａの管理権を持つかを判断する。
非特権ＯＳ仮想デバイス処理部２０１は、デバイス管理権テーブル３６０の参照の結果、自ＯＳ（非特権ＯＳ２００）が共有デバイスＡ６０１ａの管理権を持つことを検知し、非特権ＯＳ共有デバイス処理部２０２に対し、共有デバイスＡ６０１ａの実Ｉ／Ｏ要求を行う。
また、非特権ＯＳ２００上のアプリケーションが共有デバイスＢ６０１ｂのＩＯ要求を行う場合は、非特権ＯＳ仮想デバイス処理部２０１がデバイス管理権テーブル３６０の参照の結果、他方の非特権ＯＳ２５０が共有デバイスＢ６０１ｂの管理権を持つことを検知し、非特権ＯＳ仮想デバイス処理部２０１は、他方の非特権ＯＳ２５０の非特権ＯＳ共有デバイス処理部２５２に対し、共有デバイスＢ６０１ｂの実Ｉ／Ｏ要求を行う。
【００８３】
また、非特権ＯＳ２５０においても同様であり、非特権ＯＳ２５０上のアプリケーションが共有デバイスＢ６０１ｂのＩＯ要求を行う場合は、非特権ＯＳ仮想デバイス処理部２５１がデバイス管理権テーブル３６０の参照の結果、自ＯＳ（非特権ＯＳ２５０）が共有デバイスＢ６０１ｂの管理権を持つことを検知し、非特権ＯＳ共有デバイス処理部２５２に対し、共有デバイスＢ６０１ｂの実Ｉ／Ｏ要求を行う。
また、非特権ＯＳ２５０上のアプリケーションが共有デバイスＡ６０１ａのＩＯ要求を行う場合は、非特権ＯＳ仮想デバイス処理部２５１がデバイス管理権テーブル３６０の参照の結果、他方の非特権ＯＳ２００が共有デバイスＡ６０１ａの管理権を持つことを検知し、非特権ＯＳ仮想デバイス処理部２５１は、他方の非特権ＯＳ２００の非特権ＯＳ共有デバイス処理部２０２に対し、共有デバイスＡ６０１ａの実Ｉ／Ｏ要求を行う。
【００８４】
このように、非特権ＯＳにおいて、共有デバイスの管理権を有するＯＳを把握していなくても、デバイス管理権テーブルを参照することで、共有デバイスの管理権を有するＯＳを知ることができ、適切なＯＳにＩＯ要求を行うことができる。
【００８５】
最後に、実施の形態１〜３に示した計算機装置１のハードウェア構成例について説明する。
図１２は、実施の形態１〜３に示す計算機装置１のハードウェア資源の一例を示す図である。
なお、図１２の構成は、あくまでも計算機装置１のハードウェア構成の一例を示すものであり、計算機装置１のハードウェア構成は図１２に記載の構成に限らず、他の構成であってもよい。
【００８６】
図１２において、計算機装置１は、プログラムを実行するＣＰＵ９１１（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ、中央処理装置、処理装置、演算装置、マイクロプロセッサ、マイクロコンピュータ、プロセッサともいう）を備えている。
ＣＰＵ９１１は、バス９１２を介して、例えば、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）９１３、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）９１４、通信ボード９１５、表示装置９０１、キーボード９０２、マウス９０３、磁気ディスク装置９２０と接続され、これらのハードウェアデバイスを制御する。
更に、ＣＰＵ９１１は、ＦＤＤ９０４（Ｆｌｅｘｉｂｌｅ  Ｄｉｓｋ  Ｄｒｉｖｅ）、コンパクトディスク装置９０５（ＣＤＤ）、プリンタ装置９０６、スキャナ装置９０７と接続していてもよい。また、磁気ディスク装置９２０の代わりに、光ディスク装置、メモリカード（登録商標）読み書き装置などの記憶装置でもよい。
ＲＡＭ９１４は、揮発性メモリの一例である。ＲＯＭ９１３、ＦＤＤ９０４、ＣＤＤ９０５、磁気ディスク装置９２０の記憶媒体は、不揮発性メモリの一例である。これらは、記憶装置の一例である。
実施の形態１〜３で説明した「主メモリ７０１」は、例えば、ＲＡＭ９１４により実現され、「二次記憶装置５００」は磁気ディスク装置９２０により実現される。
通信ボード９１５、キーボード９０２、マウス９０３、スキャナ装置９０７、ＦＤＤ９０４などは、入力部、入力装置の一例である。
また、通信ボード９１５、表示装置９０１、プリンタ装置９０６などは、出力装置の一例である。
【００８７】
通信ボード９１５は、ネットワークに接続されている。例えば、通信ボード９１５は、ＬＡＮ（ローカルエリアネットワーク）、インターネット、ＷＡＮ（ワイドエリアネットワーク）、ＳＡＮ（ストレージエリアネットワーク）などに接続されていても構わない。
【００８８】
また、ＲＡＭ９１４には、ＣＰＵ９１１に実行させるプログラムの少なくとも一部が一時的に格納される。
また、ＲＡＭ９１４には、ＣＰＵ９１１による処理に必要な各種データが格納される。
【００８９】
また、ＲＯＭ９１３には、ＢＩＯＳ（Ｂａｓｉｃ  Ｉｎｐｕｔ  Ｏｕｔｐｕｔ  Ｓｙｓｔｅｍ）プログラムが格納され、磁気ディスク装置９２０にはブートプログラムが格納されている。
計算機装置１の起動時には、ＲＯＭ９１３のＢＩＯＳプログラム及び磁気ディスク装置９２０のブートプログラムが実行され、ＢＩＯＳプログラム及びブートプログラムにより仮想マシン９２１（ＶＭ）が起動される。
【００９０】
磁気ディスク装置９２０には、仮想マシン９２１（ＶＭ）、特権ＯＳ９２２、プログラム群９２３、ファイル群９２４が記憶されている。
プログラム群９２３のプログラムは、ＣＰＵ９１１が仮想マシン９２１、特権ＯＳ９２２を利用しながら実行する。
【００９１】
仮想マシン９２１（ＶＭ）には、図１や図６のＶＭ３００に含まれる要素である、ＯＳ間通信処理部３０１、ＯＳ起動処理部３０２、デバイス要求変換処理部３０３、デバイス割り当て処理部３０４、仮想デバイス要求転送処理部３０５、仮想デバイス３５０を実現するプログラムが記憶されている。
また、特権ＯＳ９２２には、図１や図６の特権ＯＳ１００に含まれる要素である、特権ＯＳ共有デバイス処理部１０１、特権ＯＳ共有デバイス削除処理部１０２、特権ＯＳ仮想デバイス処理部１０３、特権ＯＳ仮想デバイス追加処理部１０４を実現するプログラムが記憶されている。
【００９２】
また、プログラム群９２３には、図１や図６の非特権ＯＳ２００及び非特権ＯＳ２５０に含まれる要素である、非特権ＯＳ仮想デバイス処理部２０１、非特権ＯＳ共有デバイス処理部２０２、非特権ＯＳ仮想デバイス処理部２５１、非特権ＯＳ共有デバイス処理部２５２を実現するプログラムが記憶されている。
また、プログラム群９２３には、特権ＯＳ及び非特権ＯＳで実施されるアプリケーションプログラムも記憶されている。
仮想マシン９２１（ＶＭ）のプログラム、特権ＯＳ９２２のプログラム、プログラム群９２３のプログラムは、ＣＰＵ９１１により読み出され実行される。
【００９３】
ファイル群９２４には、図１や図６で示した非特権ＯＳイメージファイル５０１、非特権ＯＳ起動情報ファイル５０２、非特権ＯＳデバイス起動情報ファイル５０３、デバイス管理権テーブル３６０、ＩＯ要求保持キュー３７０が含まれる。
【００９４】
また、ファイル群９２４には、実施の形態１〜３の説明において、「〜の判断」、「〜の判定」、「〜の計算」、「〜の比較」、「〜の更新」、「〜の設定」、「〜の登録」、「〜の選択」、「〜の変更」等として説明している処理の結果を示す情報やデータや信号値や変数値やパラメータが、「〜ファイル」や「〜データベース」の各項目として記憶されている。
【００９５】
「〜ファイル」や「〜データベース」は、ディスクやメモリなどの記録媒体に記憶される。ディスクやメモリなどの記憶媒体に記憶された情報やデータや信号値や変数値やパラメータは、読み書き回路を介してＣＰＵ９１１によりメインメモリやキャッシュメモリに読み出され、抽出・検索・参照・比較・演算・計算・処理・編集・出力・印刷・表示などのＣＰＵの動作に用いられる。
抽出・検索・参照・比較・演算・計算・処理・編集・出力・印刷・表示のＣＰＵの動作の間、情報やデータや信号値や変数値やパラメータは、メインメモリ、レジスタ、キャッシュメモリ、バッファメモリ等に一時的に記憶される。
また、実施の形態１〜３で説明しているフローチャートの矢印の部分は主としてデータや信号の入出力を示し、データや信号値は、ＲＡＭ９１４のメモリ、ＦＤＤ９０４のフレキシブルディスク、ＣＤＤ９０５のコンパクトディスク、磁気ディスク装置９２０の磁気ディスク、その他光ディスク、ミニディスク、ＤＶＤ等の記録媒体に記録される。また、データや信号は、バス９１２や信号線やケーブルその他の伝送媒体によりオンライン伝送される。
【００９６】
このように、実施の形態１〜３に示す計算機装置１は、処理装置たるＣＰＵ、記憶装置たるメモリ、磁気ディスク等、入力装置たるキーボード、マウス、通信ボード等、出力装置たる表示装置、通信ボード等を備えるコンピュータであり、上記したように「〜部」として示された機能をこれら処理装置、記憶装置、入力装置、出力装置を用いて実現するものである。
【符号の説明】
【００９７】
１  計算機装置、１００  特権ＯＳ、１０１  特権ＯＳ共有デバイス処理部、１０２  特権ＯＳ共有デバイス削除処理部、１０３  特権ＯＳ仮想デバイス処理部、１０４  特権ＯＳ仮想デバイス追加処理部、２００  非特権ＯＳ、２０１  非特権ＯＳ仮想デバイス処理部、２０２  非特権ＯＳ共有デバイス処理部、２５１  非特権ＯＳ仮想デバイス処理部、２５２  非特権ＯＳ共有デバイス処理部、３００  ＶＭ、３０１  ＯＳ間通信処理部、３０２  ＯＳ起動処理部、３０３  デバイス要求変換処理部、３０４  デバイス割り当て処理部、３０５  デバイス要求転送処理部、３５０  仮想デバイス、３６０  デバイス管理権テーブル、３７０  ＩＯ要求保持キュー、４００  ハードウェア、５００  二次記憶装置、５０１  非特権ＯＳイメージファイル、５０２  非特権ＯＳ起動情報ファイル、５０３  非特権ＯＳデバイス起動情報ファイル、６０１  共有デバイス、７０１  主メモリ。
【図１】
2011039887.tif 000003
【図２】
2011039887.tif 000004
【図３】
2011039887.tif 000005
【図４】
2011039887.tif 000006
【図５】
2011039887.tif 000007
【図６】
2011039887.tif 000008
【図７】
2011039887.tif 000009
【図８】
2011039887.tif 000010
【図９】
2011039887.tif 000011
【図１０】
2011039887.tif 000012
【図１１】
2011039887.tif 000013
【図１２】
2011039887.tif 000014
【図１３】
2011039887.tif 000015
【図１４】
2011039887.tif 000016
【図１５】
2011039887.tif 000017
【図１６】
2011039887.tif 000018
【手続補正書】
【提出日】平成24年1月19日(2012.1.19)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
１つ以上のデバイスが接続されている計算機装置において、
各デバイスの管理権が付与されている特権ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）と、
いずれのデバイスの管理権も付与されていない１つ以上の非特権ＯＳと、
非特権ＯＳと、前記非特権ＯＳに対して指定されている指定デバイスとが示される指定デバイス情報を記憶する情報記憶部と、
前記特権ＯＳが起動した後、いずれかの非特権ＯＳが起動する際に、前記指定デバイス情報を参照し、起動する非特権ＯＳに指定デバイスがある場合に、起動する非特権ＯＳの指定デバイスの管理権を前記特権ＯＳから起動する非特権ＯＳに移す管理権制御部とを有し、
いずれかの非特権ＯＳが、前記特権ＯＳが管理権を有しているデバイスを使用する場合に、
使用対象デバイスに対する使用要求を、前記非特権ＯＳが前記特権ＯＳを介して前記使用対象デバイスに出力した後に、前記非特権ＯＳに前記使用対象デバイスを使用させ、
前記管理権制御部により指定デバイスの管理権が前記特権ＯＳから移された結果、前記指定デバイスの管理権を有している非特権ＯＳが、前記指定デバイスを使用する場合に、
前記指定デバイスに対する使用要求を、前記非特権ＯＳが前記特権ＯＳ及び他のいずれの非特権ＯＳも介さずに前記指定デバイスに出力した後に、前記非特権ＯＳに前記指定デバイスを使用させることを特徴とする計算機装置。
【請求項２】
前記計算機装置は、
２つ以上の非特権ＯＳを有し、
いずれかの非特権ＯＳが、他の非特権ＯＳが管理権を有しているデバイスを使用する場合に、
使用対象デバイスに対する使用要求を、前記使用対象デバイスを使用する非特権ＯＳであるデバイス使用非特権ＯＳが、前記他の非特権ＯＳを介して前記使用対象デバイスに出力した後に、前記デバイス使用非特権ＯＳに前記使用対象デバイスを使用させることを特徴とする請求項１に記載の計算機装置。
【請求項３】
前記計算機装置は、
前記管理権制御部により指定デバイスの管理権が前記特権ＯＳから移された結果、前記指定デバイスの管理権を有している非特権ＯＳが、前記指定デバイスに対する他のＯＳからの使用要求を入力した際に、
前記非特権ＯＳに、入力した使用要求を前記管理デバイスに出力させることを特徴とする請求項２に記載の計算機装置。
【請求項４】
前記計算機装置は、更に、
いずれかのＯＳから出力されたいずれかのデバイスに対する使用要求を入力し、デバイスごとにいずれのＯＳが管理権を有しているのかを示すデバイス管理権情報を参照して、入力した前記使用要求が対象とするデバイスの管理権を有しているＯＳを判別し、判別したＯＳに前記使用要求を出力するＯＳ判別部を有することを特徴とする請求項１に記載の計算機装置。
【請求項５】
前記管理権制御部は、
デバイスの管理権を移す度に、前記デバイス管理権情報を更新することを特徴とする請求項４に記載の計算機装置。
【請求項６】
前記特権ＯＳ及び各非特権ＯＳには、デバイスごとに優先度が設定されており、
前記計算機装置は、更に、
いずれかのＯＳから発行されたいずれかのデバイスに対する使用要求が実行されている際に他のＯＳから前記デバイスに対する使用要求が発行された場合に、新たに発行された使用要求の発行元のＯＳの前記デバイスに対する優先度と、実行中の使用要求の発行元のＯＳの前記デバイスに対する優先度とを比較し、新たに発行された使用要求の発行元のＯＳの優先度の方が高い場合に、実行中の使用要求の実行を停止させ、新たに発行された使用要求の実行を開始させる実行制御部を有することを特徴とする請求項１に記載の計算機装置。
【国際調査報告】
2011039887.tif 000019
2011039887.tif 000020
2011039887.tif 000021
2011039887.tif 000022