(57)【特許請求の範囲】
【請求項１】
複数のオペレーティングシステム（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ、以下ＯＳという）を実行する計算機において、
前記複数のＯＳのうちのいずれかの前記ＯＳが再起動処理を開始した場合に前記再起動処理の開始を検出する検出部と、
前記検出部によって前記再起動処理の開始が検出されると、前記ＯＳと、前記ＯＳによる使用中のデバイスとの対応関係が登録された固有デバイス管理情報を参照することにより、前記再起動処理の開始が検出された前記ＯＳである再起動ＯＳ以外のＯＳが使用しているデバイスである使用中デバイスを特定するデバイス特定部と、
前記再起動ＯＳに対する前記再起動処理の一部として実行されるハードウェアリセットであって前記複数のＯＳによって使用されるデバイスの有する内部情報のリセット処理であるハードウェアリセット前に、前記デバイス特定部によって特定された前記使用中デバイスの前記内部情報を、退避すべき退避対象情報として、退避元から所定の退避領域である退避先に退避させるデバイス関連情報転送部と、
前記退避対象情報の一部をなす情報であって、前記使用中デバイスを一意に特定する接続情報を保持する共有デバイスと
を備え、
前記デバイス関連情報転送部は、
前記共有デバイスの保持する前記接続情報を、前記ハードウェアリセット前に、前記所定の退避領域である前記退避先に退避させることを特徴とする計算機。
【請求項２】
前記デバイス関連情報転送部は、
前記使用中デバイスの前記内部情報として、前記使用中デバイスのコンテキストを退避させることを特徴とする請求項１記載の計算機。
【請求項３】
前記検出部は、
前記再起動ＯＳの前記再起動処理の完了を検出し、
前記デバイス関連情報転送部は、
前記検出部によって前記再起動ＯＳの前記再起動処理の完了が検出されると、前記退避先に退避された前記退避対象情報を前記退避元に復帰させることを特徴とする請求項１または２のいずれかに記載の計算機。
【請求項４】
前記検出部は、
前記再起動ＯＳの前記再起動処理の最中に、前記再起動ＯＳ以外の他のＯＳから前記他のＯＳの前記使用中デバイスに対してアクセスがあると前記アクセスを検出し、
前記計算機は、さらに、
前記検出部により前記アクセスが検出されると、前記アクセスをブロックするデバイスアクセスブロック処理部を備えたことを特徴とする請求項１〜３のいずれかに記載の計算機。
【請求項５】
前記デバイス特定部は、
前記複数のＯＳの各ＯＳから、各ＯＳの使用するデバイスの使用開始と使用終了との通知を受信し、受信した内容を前記固有デバイス管理情報に登録することを特徴とする請求項１〜４のいずれかに記載の計算機。
【請求項６】
前記デバイス特定部は、
いずれかのＯＳから所定のデバイスの使用開始の通知を受信すると前記固有デバイス管理情報を参照し、参照の結果、前記所定のデバイスが他のＯＳによって使用中の場合には、受信した前記通知を破棄することを特徴とする請求項５記載の計算機。
【請求項７】
前記デバイス特定部は、
各ＯＳごとの優先度を保有すると共に各ＯＳからデバイスの使用開始の通知を受信すると、前記優先度に基づいて、前記固有デバイス管理情報を更新することを特徴とする請求項５または６のいずれかに記載の計算機。
【請求項８】
複数のオペレーティングシステム（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ、以下ＯＳという）を実行するコンピュータに、
前記複数のＯＳのうちのいずれかの前記ＯＳが再起動処理を開始した場合に前記再起動処理の開始を検出する処理、
前記再起動処理の開始が検出されると、前記ＯＳと、前記ＯＳによる使用中のデバイスとの対応関係が登録された固有デバイス管理情報を参照することにより、前記再起動処理の開始が検出された前記ＯＳである再起動ＯＳ以外のＯＳが使用しているデバイスである使用中デバイスを特定する処理、
前記再起動ＯＳに対する前記再起動処理の一部として実行されるハードウェアリセットであって前記複数のＯＳによって使用されるデバイスの有する内部情報のリセット処理であるハードウェアリセット前に、特定された前記使用中デバイスの前記内部情報を、退避すべき退避対象情報として、退避元から所定の退避領域である退避先に退避させる処理、
前記退避対象情報の一部をなす情報であって、前記使用中デバイスを一意に特定する接続情報を保持する共有デバイスの前記接続情報を、前記ハードウェアリセット前に、前記所定の退避領域である前記退避先に退避させる処理、
を実行させるための転送プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、複数のＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）を実行する計算機に関する。
【背景技術】
【０００２】
近年、ファクトリオートメーション機器や車載機器などの組込み機器では、従来機種に対する付加機能の追加や、システムの高機能化のため、処理能力の向上に対する要求がある。こうした要求に対して、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）の演算処理部（コア）を複数にすることで、消費電力を抑えながら、処理能力の向上を図る、マルチコアが導入されている。マルチコアを搭載した計算機を効率的に利用するには、処理の並列度を向上させ、各コアに処理を分散させる必要がある。この実現方法として、リアルタイム応答性の高いリアルタイムオペレーティングシステム（Ｒｅａｌ−Ｔｉｍｅ  Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）（以下ＲＴＯＳ）と豊富なアプリケーションを搭載した汎用ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）といった、複数のＯＳにより構成する方法が考えられる。
【０００３】
近年、こうした複数ＯＳが動作する状況において、各ＯＳがデバイスを使用する場合、バーチャルマシンモニタ（以下、ＶＭＭ：Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ  Ｍｏｎｉｔｏｒ）を用いて、各デバイスの管理が行われている。このような構成において、ＯＳ処理に不具合が生じた場合に、不具合を生じたＯＳが他のＯＳに影響を与えることなく、再起動を行う手法が提案されている。
【０００４】
図１２は、従来のＶＭ（Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ）を搭載した組込み機器の構成において、ＯＳの再起動を行う例である。組込み機器１はＯＳ１００、ＯＳ２００、ＶＭ３００、ハードウェア４００を保有する。ＯＳ１００はデバイスドライバ１０１及びＯＳ起動処理部１０２を保有する。デバイスドライバ１０１は固有デバイス７０１用のドライバである。ＯＳ起動処理部１０２は、ＯＳの起動及び停止を行う。ＯＳの起動とは、二次記憶装置９００上のＯＳイメージファイルからＯＳイメージを取得し、メモリ５０１にロードし、ＯＳのスタートアドレスにジャンプすることを指す。本処理はＯＳ内部の処理としているが、ＶＭにあってもよい。ＯＳ２００はデバイスドライバ２０１を保有する。デバイスドライバ２０１は固有デバイス７０２用のドライバである。
【０００５】
ＶＭ３００は割込み振分け処理３１１及び割込みテーブル３１２を保有する。割込み振分け処理３１１はデバイスの割込みを管理する処理である。例えば、割込みテーブル３１２の情報に応じて、固有デバイス７０１からの割込みをＯＳ１００に通知する。割込みテーブル３１２はＯＳと固有デバイスとの組を保持するテーブルである。例えば、ＯＳ１００と固有デバイス７０１の組、及び、ＯＳ２００と固有デバイス７０２との組を保持する。
【０００６】
ハードウェア４００は固有デバイス７０１、７０２、二次記憶装置９００を保有する。固有デバイス７０１、７０２は各ＯＳに割り当てるデバイスである。二次記憶装置９００はＯＳイメージを格納するデバイスである。今回の例ではＯＳ用イメージファイル９０１を保有する。
【０００７】
従来手法ではＯＳ再起動を行う前に、ＯＳ初期化処理等のＯＳ再起動前に、ＶＭに対し、ドライバが使用するデバイスの登録を行う。例として、ＯＳ１００起動する際に固有デバイス７０１を登録する手順について図１３を用いて示す。
【０００８】
（再起動前）
まず、ステップＳ３０１にて、ＯＳ１００上のデバイスドライバ１０１はＶＭ上の割込み振分け処理３１１に対し、固有デバイス７０１を使用することを通知する。次に、ステップＳ３０２にて、ＶＭ上の割込み振分け処理３１１は、割込みテーブル３１２に対し、どのＯＳがどのデバイスを使用しているかを登録する。次に、ステップＳ３０３にて、ＶＭ上の割込み振分け処理３１１は、デバイスドライバ１０１に対し、登録完了を通知する。
【０００９】
以上がデバイス登録の手法である。ＯＳ２００も上記手順により、固有デバイス７０２の登録が可能である。
【００１０】
（再起動時）
以上の状態において、ＯＳ１００が単独で再起動する手順について図１４を用いて示す。まず、ステップＳ４０１にて、ＯＳ１００上のＯＳ起動処理部１０２は、二次記憶上のＯＳ用イメージファイルをメモリ５０１にロードする。次に、ステップＳ４０２にて、ＯＳ１００上のＯＳ起動処理部１０２は、ＶＭ上の割込み振分け処理３１１に対し、ＯＳ１００が使用するデバイスを問い合わせる。次に、ステップＳ４０３にて、ＶＭ３００上の割込み振分け処理３１１は、割込みテーブル３１２を参照し、ＯＳ１００が使用するデバイスを通知する。今回の例では固有デバイス７０１が使用可能であると通知する。次に、ステップＳ４０４にて、ＯＳ１００上のＯＳ起動処理部１０２は、割込み振分け処理３１１から通知されたデバイスに適したドライバをロードする。今回の例では、固有デバイス７０１用のデバイスドライバ１０１がロードされる。
【００１１】
以上によりＯＳ２００及び固有デバイス７０２に影響を与えることなく、ＯＳ１００の再起動が可能となる。
【先行技術文献】
【特許文献】
【００１２】
【特許文献１】特表２００１−０９３０３２号公報、第２３頁から２４頁、第９図
【発明の概要】
【発明が解決しようとする課題】
【００１３】
図２において、例えば固有デバイス７０１及び固有デバイス７０２がＰＣＩ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ）バス用のデバイスであった場合、固有デバイス７０１及び固有デバイス７０２のデバイス情報を管理している共有デバイス（コンフィグレーション空間）が存在する。コンフィグレーション空間では、各デバイスをどのメモリ領域に割り当てるかを一括管理している。そのため、ＯＳを再起動する場合、ＰＣＩバスに接続された個々のデバイスに対してハードウェアリセットを送付せず、ＰＣＩバス全体に対しハードウェアリセットを送信する。この場合、コンフィグレーション空間に設定された管理情報、及び、ＰＣＩバスに接続されている全てのデバイスの内部状態もリセットされてしまう。
【００１４】
こうしたことから、図１２に示す先行技術では、ＰＣＩバスに対し、ハードウェアリセットを送付できないという課題がある。
【００１５】
本発明は、共有デバイスに対しリセットを発行すると固有デバイスに対してもリセットが発行される環境において、他のＯＳに影響を与えることなく、ＯＳ再起動の際に、共有デバイスへのハードウェアリセットの発行を可能にする技術の提供を目的とする。
【課題を解決するための手段】
【００１６】
この発明の計算機は、
複数のオペレーティングシステム（Ｏｐｅｒａｔｉｎｎｇ  Ｓｙｓｔｅｍ、以下ＯＳという）を実行する計算機において、
前記複数のＯＳのうちのいずれかの前記ＯＳが再起動処理を開始した場合に前記再起動処理の開始を検出する検出部と、
前記検出部によって前記再起動処理の開始が検出されると、前記ＯＳと、前記ＯＳによる使用中のデバイスとの対応関係が登録された固有デバイス管理情報を参照することにより、前記再起動処理の開始が検出された前記ＯＳである再起動ＯＳ以外のＯＳが使用しているデバイスである使用中デバイスを特定するデバイス特定部と、
前記再起動ＯＳに対する前記再起動処理の一部として実行されるハードウェアリセットであって前記複数のＯＳによって使用されるデバイスに関するデバイス関連情報のリセット処理であるハードウェアリセット前に、前記デバイス特定部によって特定された前記使用中デバイスの前記デバイス関連情報を、退避すべき退避対象情報として、退避元から所定の退避領域である退避先に退避させるデバイス関連情報転送部と
を備えたことを特徴とする。
【発明の効果】
【００１７】
本発明により、共有デバイスに対しリセットを発行すると固有デバイスに対してもリセットが発行される環境において、他のＯＳに影響を与えることなく、ＯＳ再起動の際に、共有デバイスへのハードウェアリセットの発行を可能にする技術を提供できる。
【図面の簡単な説明】
【００１８】
【図１】実施の形態１における組込み機器１０００のブロック図。
【図２】実施の形態１における固有デバイス管理テーブル３０３を示す図。
【図３】実施の形態１における共有デバイス管理テーブル３０７を示す図。
【図４】実施の形態１におけるＯＳ再起動処理を示すフロー（退避処理）。
【図５】実施の形態１におけるＯＳ再起動処理を示すフロー（復帰処理）。
【図６】図４をシーケンス化した図。
【図７】図５をシーケンス化した図。
【図８】実施の形態１におけるデバイスブロック処理のフロー。
【図９】実施の形態２におけるデバイス使用の通知のフロー。
【図１０】実施の形態２におけるデバイス使用停止の通知のフロー。
【図１１】実施の形態３における組込み機器１０００のハードウェア構成例。
【図１２】従来技術を示す図。
【図１３】従来技術を示す別の図。
【図１４】従来技術を示すさらに別の図。
【発明を実施するための形態】
【００１９】
実施の形態１．
図１は、実施の形態１の組込み機器１０００のブロック図である。以下、組込み機器１０００を説明する。実施の形態１では、従来のＶＭ機能に対し、割込み振分け処理を削除し、共有デバイス及び固有デバイスの内部状態を保存（退避）及び復帰する機能を追加する。この機能により、ＰＣＩバスのように、固有デバイスが共有デバイスに接続されており、共有デバイスに対しリセットを発行すると、固有デバイスに対してもリセットが発行されるような環境においても、他のＯＳに影響を与えることなく、ＯＳ再起動の際に、共有デバイスへのハードウェアリセットの発行が可能になる。
【００２０】
（組込み機器１０００）
組込み機器１０００は、ＯＳ１００、ＯＳ２００、ＶＭ３００、ハードウェア４００を保有する。
【００２１】
（ＯＳ１００）
ＯＳ１００は、デバイスドライバ１０１及びＯＳ起動処理部１０２を保有する。デバイスドライバ１０１は、固有デバイス７０１用のドライバである。固有デバイス７０１の割込みは、ＶＭ層で振分けせず、直接ＯＳに割込みを通知する。ＯＳ起動処理部１０２は、ＯＳ１００の起動処理を行う。ＯＳの起動とは、二次記憶装置９００上のＯＳイメージファイルからＯＳイメージを取得し、メモリ５０１にロードし、ＯＳのスタートアドレスにジャンプすることをさす。本処理はＯＳ内部の処理としているが、ＶＭにあってもよい。
【００２２】
（ＯＳ２００）
ＯＳ２００はデバイスドライバ２０１を保有する。デバイスドライバ２０１は、固有デバイス７０２用のドライバである。デバイスドライバ２０１は固有デバイス７０２に対し、ＶＭを介さず、ＯＳ２００に直接割込みを通知するように設定する。
【００２３】
（ＶＭ３００）
ＶＭ３００は、ＯＳ起動フック処理部３０１（検出部）、デバイス管理処理部３０２（デバイス特定部）、固有デバイス管理テーブル３０３（固有デバイス管理情報）、デバイス内部情報保存処理部３０４、デバイス内部情報復帰処理部３０５、デバイス内部情報保持領域３０６、共有デバイス管理テーブル３０７、デバイスアクセスブロック処理部３０８を保有する。
なお、デバイス内部情報保存処理部３０４と、デバイス内部情報復帰処理部３０５とは、デバイス関連情報転送部３１０を構成する。
デバイス関連情報転送部３１０は、後述のように、再起動ＯＳ以外のＯＳが使用している固有デバイスに内蔵されるデバイス内部情報（コンテキスト）と、共有デバイス８０１に保持されている接続情報であって、再起動ＯＳ以外のＯＳが使用している固有デバイスの接続続報との両方の情報（デバイス関連情報）を、退避対象情報としてデバイス内部情報保持領域３０６へ一時的に退避させ、再起動ＯＳの再起動が完了すると元の場所に復帰させる。
【００２４】
（１）ＯＳ起動フック処理部３０１は、ＯＳの再起動要求を横取りする。横取りの方法は例えば、ＣＰＵからのリセット命令をフックする。
（２）デバイス管理処理部３０２は、ＯＳ起動フック処理部３０１からの問い合わせに応じて、ＯＳが使用しているデバイスを通知する。
（３）固有デバイス管理テーブル３０３は、各ＯＳが使用している固有デバイスとＯＳの組を保持する。
図２は固有デバイス管理テーブル３０３の例を示す。ここではＯＳ１００と固有デバイス７０１の組、及び、ＯＳ２００と固有デバイス７０２との組を保持する。なお、固有デバイス管理テーブル３０３は、管理する内容は従来技術の割込み管理テーブルと同様であるが、割込み管理には使用せず、ＯＳ再起動の際に、各ＯＳが管理するデバイスの問い合わせにのみ使用する。本テーブルは、今回の例では、ハードウェア構成に応じて静的に情報を保持する。なお、動的に保持する場合を実施の形態２で後述する。
（４）デバイス内部情報保存処理部３０４は、指定されたＯＳの固有デバイス、及び、共有デバイスの内、固有デバイスに関連する内部情報をデバイス内部情報保持領域３０６に保存する。デバイスの内部情報とは、例えば、デバイスのレジスタ情報、デバイスに内蔵されたメモリの情報などである。
（５）デバイス内部情報復帰処理部３０５は、デバイス内部情報保持領域３０６から、指定されたデバイスの内部情報復帰を行う。
（６）デバイス内部情報保持領域３０６は、デバイスの内部情報を保持する領域である。
（７）共有デバイス管理テーブル３０７は、共有デバイス８０１と各固有デバイスの接続情報を保持する。
ここで接続情報とは、「ハードウェアリセットの発生前後で不変な、デバイスを一意に特定することが可能な」情報を意味する。
図３は共有デバイス管理テーブル３０７の例を示す。例えば、固有デバイス７０１がバス番号０、デバイス番号０、ファンクション番号で接続されていることを示す。本設定はシステム起動時に、ＶＭが設定する。つまり、各ＯＳが使用しているデバイスの接続情報として、バス番号、デバイス番号、ファンクション番号を使用する。これらの情報はハードウェアリセット発生前後にかかわらず、変更されない。そのため、これらの情報は、各ＯＳが使用しているデバイスを一意に特定することが可能である。「デバイスを一意に特定することが可能な」別の情報があればその情報を接続情報として用いてもかまわない。
たとえば、あるシステムに接続されているデバイスに必ず一意の番号が割り振られており、共有デバイスがこの番号を管理している場合は、この番号を接続情報として使用してもよい。具体的には、あるシステムにネットワークデバイスだけが接続されている環境の場合、ＭＡＣアドレスには一意性が担保されているため、この用途に使用することが可能と考えられる。
（８）デバイスアクセスブロック処理部３０８は、デバイスへのアクセスをブロックする。詳細は後述する。
【００２５】
（ハードウェア４００）
ハードウェア４００は、メモリ５０１、固有デバイス７０１、固有デバイス７０２、共有デバイス８０１、二次記憶装置９００、ＯＳ用イメージファイル９０１を保有する。
（１）メモリ５０１はＯＳ及びＶＭイメージがロードされる。
（２）固有デバイス７０１、７０２は、あるＯＳに割り当てられるデバイスである。今回の例では、ハードウェア構成に応じて、ＯＳ１００に静的に割り当てる。この際、デバイスからの割込みもＯＳ１００に割り当てる。これによりリアルタイム応答性を向上させる。固有デバイスは例えばネットワークコントローラ、ＵＳＢホストコントローラ、マウスなどの入出力コントローラ、ディスプレイコントローラなどである。共有デバイス８０１は、固有デバイス７０１、７０２のデバイス情報を保持するデバイスである。例えば、ＰＣＩバスの場合におけるコンフィグレーション空間である。コンフィグレーション空間では、例えば、各デバイスに割り当てるベースアドレスなどを管理する。
（３）二次記憶装置９００はＯＳ用イメージファイル９０１を保有する。
（４）ＯＳ用イメージファイル９０１は各ＯＳのバイナリイメージを保持する。今回の例ではＯＳ１００のバイナリイメージを保持する。
【００２６】
（動作の説明）
次に図４〜図７を参照して動作を説明する。
図４は、ＯＳ再起動処理を示すフロー（退避処理）である。
図５は、ＯＳ再起動処理を示すフロー（復帰処理）である。
図６は図４をシーケンス化した図である。
図７は図５をシーケンス化した図である。
【００２７】
（１）まず、ステップＳ７０１にて、ＯＳ１００のＯＳ起動処理部１０２はＯＳの再起動を開始する。
（２）次に、ステップＳ７０２にて、ＶＭ３００上のＯＳ起動フック処理部３０１は、ＯＳ１００の再起動開始をフックする。これは例えば、ＯＳ１００からＣＰＵに対するリセット命令をＶＭでフックする。
（３）次に、ステップＳ７０３にて、ＯＳ起動フック処理部３０１は、再起動を試みているＯＳ（再起動ＯＳ）を除いたＯＳが使用中のデバイス（使用デバイス）を、デバイス管理処理部３０２に問い合わせる。今回の例ではＯＳ１００を除いたＯＳが使用中のデバイスを問い合わせる。
（４）次に、ステップＳ７０４にて、デバイス管理処理部３０２は、固有デバイス管理テーブル３０３を使用し、再起動中以外のＯＳが使用しているデバイスを調査し、ＯＳ起動フック処理部３０１に通知する。今回の場合、ＯＳ１００を除いたＯＳは、ＯＳ２００なので、デバイス管理処理部３０２は、ＯＳ２００が使用中のデバイスとして、固有デバイス管理テーブル３０３から固有デバイス７０２の情報を取得し、ＯＳ起動フック処理部３０１に通知する。
（５）次に、ステップＳ７０５にて、デバイス管理処理部３０２は、デバイス内部情報保存処理部３０４に対し、「固有デバイスの内部情報」（デバイス関連情報の一例、退避対象情報の一例）を保持するように依頼する。今回の例では、デバイス管理処理部３０２は、固有デバイス７０２の内部情報を保持するように依頼する。
（６）次に、ステップＳ７０６にて、デバイス内部情報保存処理部３０４は、固有デバイスの内部情報を、デバイス内部情報保持領域３０６に保存する。今回の例では固有デバイス７０２の内部情報として、レジスタの状態、及び、デバイス内蔵のメモリの情報を保持する。
（７）さらに、ステップＳ７０７にて、デバイス内部情報保存処理部３０４は、共有デバイス管理テーブル３０７に対し、固有デバイスの接続情報を問い合わせる。今回の例では、固有デバイス７０２に関連する共有デバイス８０３の情報として、バス番号１、デバイス番号０、ファンクション番号０が通知される。
（８）次に、ステップＳ７０８にて、デバイス内部情報保存処理部３０４は、共有デバイスから、「固有デバイスに関連する接続情報」（デバイス関連情報の一例、退避対象情報の一例）をデバイス内部情報保持領域３０６に保存する。今回の例では、固有デバイス７０２に関連する情報は、共有デバイス８０１のバス番号１、デバイス番号０、ファンクション番号０で参照されるため、この情報を取得する。情報としては、固有デバイス７０２が現在使用しているベースアドレスの情報等をデバイス内部情報保持領域３０６に保持する。
【００２８】
（９）次に、ステップＳ７０９にて、ＯＳ１００はＯＳの再起動により、共有デバイス８０１、固有デバイス７０１、固有デバイス７０２のハードウェアリセットを行う。
【００２９】
（１０）次に、ステップＳ７１０にて、ＯＳ１００は再起動処理を完了する。
【００３０】
（１１）次に、ステップＳ７１１にて、ＶＭ上のＯＳ起動フック処理部３０１はＯＳ１００の再起動処理完了をフックする。これは、例えば、Ｓ７０１にてＯＳ１００上でＯＳ再起動フック後、最初に実行されたアイドル命令をフックする。
（１２）次に、ステップＳ７１２にて、ＶＭ上のＯＳ起動フック処理部３０１は再起動を完了したＯＳ１００を除いたＯＳが使用中のデバイスを、デバイス管理処理部３０２に問い合わせる。
（１３）次に、ステップＳ７１３にて、デバイス管理処理部３０２は、固有デバイス管理テーブル３０３を使用し、通知されたＯＳ以外が使用しているデバイスを調査し、通知する。今回の場合、ＯＳ１００を除いたＯＳは、ＯＳ２００なので、ＯＳ２００が使用中のデバイスとして、固有デバイス７０２及び、共有デバイス８０１の内、固有デバイス７０２に関連する情報を通知する。
（１４）次に、ステップＳ７１４にて、デバイス管理処理部３０２は、デバイス内部情報復帰処理部３０５に対し、固有デバイスの内部情報を復帰するように通知する。今回の例では、固有デバイス７０２に関する情報を復帰するように通知する。
（１５）次に、ステップＳ７１５にて、デバイス内部情報復帰処理部３０５は、固有デバイスの内部情報を、デバイス内部情報保持領域３０６から取得し、固有デバイスに設定する。今回の例では、固有デバイス７０２の情報を、固有デバイス内部情報保持領域３０６から取得し、固有デバイス７０２に設定する。
（１６）さらに、ステップＳ７１６にて、デバイス内部情報復帰処理部３０５は、共有デバイス管理テーブル３０７に対し、固有デバイスに関連する共有デバイスの情報を問い合わせる。今回の例では、固有デバイス７０２に関連する共有デバイス８０３の情報として、バス番号１、デバイス番号０、ファンクション番号０が通知される。
（１７）次に、ステップＳ７１７にて、デバイス内部情報復帰処理部３０５は、デバイス内部情報保持領域３０６から共有デバイスに設定すべき固有デバイスの情報を取得し、共有デバイスに設定する。今回の例では、ステップＳ７０８で保存した、固有デバイス７０２のベースアドレスの情報等をデバイス内部情報保持領域３０６から取得し、共有デバイス８０１のバス番号１、デバイス番号０、ファンクション番号０で参照される領域に、ベースアドレスなどの情報を設定する。
【００３１】
以上により、ＯＳ１００の再起動処理が完了する。
【００３２】
（デバイスアクセスブロック処理）
ここで、ＯＳ１００が再起動中にＯＳ２００が固有デバイス７０２にアクセスした場合を考える。ＯＳ１００が再起動中は、適当なタイミングでＯＳ２００が使用している固有デバイス７０２に対し、ハードウェアリセットが発生する可能性がある。そのため、このアクセスをブロックする必要がある。
図８は、アクセスブロックのフローである。ＯＳ１００が再起動中に、ＯＳ２００が固有デバイス７０２にアクセスした場合に、デバイスアクセスブロック処理部３０８によってデバイスアクセスをブロックする手順を示す。
【００３３】
（１）まず、ステップＳ８０１にて、ＯＳ２００上のデバイスドライバ２０１は固有デバイス７０２にアクセスを試みる。
（２）次に、ステップＳ８０２にて、ＶＭ上のＯＳ起動フック処理部３０１はＯＳ１００が再起動中であるので、ＯＳ２００から全てのデバイスへのアクセスをフックする。
（３）次に、ステップＳ８０３にて、ＯＳ起動フック処理部３０１は、共有デバイス管理テーブル３０７及び、固有デバイス管理テーブル３０３から、ＯＳ２００がアクセスしていたデバイスがハードウェアリセット対象か判断し、ハードウェアリセット対象でない場合は処理を終了する。今回の例では、まず、ＯＳ２００がアクセスしていたデバイスは固有デバイス７０２であり、このデバイスは共有デバイス管理テーブル３０７に存在しているので、ＯＳ１００によってハードウェアリセットされる可能性があると判断し処理を継続する。
（４）次に、ステップＳ８０４にて、ＯＳ起動フック処理部３０１は、ハードウェアリセット対象のデバイスへのアクセスと判断した場合、デバイスアクセスブロック処理部３０８を呼び出す。
（５）次に、ステップＳ８０５にて、デバイスアクセスブロック処理部３０８は、ＯＳから固有デバイスへのアクセスをブロックする。これは例えば、ＯＳ２００から固有デバイス７０２へのレジスタアクセスに対し、返り値をＢＵＳＹに設定する。別の例では、ＯＳ２００から固有デバイス７０２へのレジスタアクセスに対し、ＯＳ１００の再起動完了までＣＰＵの処理を一時的に止め、ｓｌｅｅｐさせる。
【００３４】
以上により、ＯＳ再起動中に他ＯＳからデバイスのアクセスが発生した場合に、デバイスアクセスをブロックすることが可能となる。なお、この処理はＯＳが再起動中にのみ実施し、ＯＳが再起動中でない場合は一切フックを行わないため、デバイスの応答性に影響を与えない。
【００３５】
この実施の形態１による組込み機器では、再起動を行わないＯＳが利用しているデバイスの内部情報を保持する領域を備え、ＯＳの再起動処理開始前に、本領域に、デバイスの内部情報を保存し、システム上の全デバイスへのハードウェアリセット、及び、ＯＳの再起動完了後に、本デバイスの内部情報を復帰するようにしたので、ＯＳの再起動中に、別ＯＳが使用中のデバイスへのハードウェアリセットが発生した場合でも、別ＯＳの動作を止めることなく、単独でＯＳの再起動を可能にするという効果がある。
【００３６】
以上の実施の形態１では、
（１）仮想マシン（ＶＭ）、
（２）固有のデバイスを保有するＯＳ、
（３）ＯＳイメージを保有する二次記憶、
（４）ハードウェア資源として、ＣＰＵ、メモリ、
（５）各ＯＳに固有に割り当てる固有デバイス、
（６）各固有デバイスの情報を保持する共有ハードウェア、
以上を備えた構成において、以下の構成要素を備えた計算機を説明した。
・ＯＳ再起動処理を横取りする「ＯＳ起動フック処理」
・各ＯＳの固有デバイス使用状況を通知する「デバイス管理処理」
・共有デバイスの中で固有デバイスがどのように接続されているかを示す「共有デバイス管理テーブル」
・各ＯＳの固有デバイス使用状況を保持する「固有デバイス管理テーブル」
・ＶＭからの指示に応じてデバイス内部の状態を保存する「デバイス内部情報保存処理」
・ＶＭからの指示に応じてデバイス内部の状態を復帰する「デバイス内部情報復帰処理」
・デバイス内部の状態を保持する「デバイス内部情報保持領域」
・ＯＳ再起動中に他のＯＳからデバイスのアクセスをブロックする「デバイスアクセスブロック処理」
【００３７】
以上の実施の形態１では以下の計算機を説明した。
ハードウェアリセットを実施前に、「ＯＳ起動フック処理」が、ＯＳの再起動開始を横取りし、「デバイス管理処理」に対し、「共有デバイス管理テーブル」と「固有デバイス管理テーブル」から、ＯＳ再起動を行わない固有デバイス及び共有デバイスの情報を取得し、さらに、「デバイス内部情報保存処理」が、そのデバイスのレジスタ情報や内部メモリの情報を「デバイス内部情報保持領域」に保持することで、ハードウェアリセット前の固有デバイス及び共有デバイスのレジスタ情報や内部メモリの情報を保持する計算機。
【００３８】
以上の実施の形態１では以下の計算機を説明した。
ハードウェアリセットを実施後、「ＯＳ起動フック処理」が、ＯＳの再起動完了を横取りし、「デバイス管理処理」に対し、「共有デバイス管理テーブル」と「固有デバイス管理テーブル」からＯＳの再起動を行わないＯＳが使用しているデバイスの取得を指示し、さらに、「デバイス内部情報復帰処理」が「デバイス内部情報保持領域」に保持した、ハードウェアリセット前の固有デバイス及び共有デバイスのレジスタ情報や内部メモリの情報を復帰することにより、再起動しないＯＳの動作を妨げることなく、共有デバイスのハードウェアリセットを実施可能とする計算機。
【００３９】
以上の実施の形態１では以下の計算機を説明した。
ＯＳ再起動時に、他のＯＳが固有デバイスにアクセスした際に、「ＯＳ起動フック手段」がデバイスアクセスを横取りし、ＯＳからデバイスへのアクセスをブロックすることにより、ＯＳ再起動時のハードウェアリセットを妨げない計算機。
【００４０】
実施の形態２．
実施の形態２における組込み機器１０００を説明する。組込み機器１０００の構成は実施の形態１と同様であり、図１で示される。本実施の形態２では、ＯＳ２０１のデバイスドライバ２０１及び固有デバイス管理テーブル３０３、デバイス管理処理部３０２以外の機能は実施の形態１と同様である。
【００４１】
本実施の形態２では、ＶＭがシステム起動時に静的に決めていた固有デバイスとＯＳの使用状況の設定を、ＯＳが起動する際に自由に設定できることを特徴とする。これにより、システム起動後に動作していたＯＳ以外のＯＳが固有デバイスを使用することも可能となる。例えば、実施の形態１において、ＯＳ２００の動作を停止し、他ＯＳを動作させた際に、固有デバイス７０２を使用することが可能となる。
【００４２】
図９は、ＯＳ２００が固有デバイス７０２の使用を通知する例を示す。
【００４３】
（１）まず、ステップＳ９０１にて、ＯＳ２００上のデバイスドライバ２０１はＶＭ３００上のデバイス管理処理部３０２に対し、固有デバイス７０２を使用することを通知する。
（２）次に、ステップＳ９０２にて、デバイス管理処理部３０２は固有デバイス管理テーブル３０３の内容に関して、固有デバイス７０２はＯＳ２００が使用すると設定（登録）する。このように、ＯＳから、各ＯＳの使用するデバイスの使用開始と使用終了との通知を受信し、受信した内容を前記固有デバイス管理情報に登録する。なお、他のＯＳがすでに固有デバイス７０２を使用中の場合は設定できないようにする。このように、デバイス管理処理部３０２は、いずれかのＯＳから所定のデバイスの使用開始の通知を受信すると固有デバイス管理テーブル３０３を参照し、参照の結果、所定のデバイスが他のＯＳによって使用中の場合には、受信した通知を破棄する。
【００４４】
図１０は、ＯＳ２００が固有デバイス７０２の使用停止を通知する例を示す。
【００４５】
（１）まず、ステップＳ１００１にて、ＯＳ２００上のデバイスドライバ２０１は、ＶＭ３００上のデバイス管理処理部３０２に対し、固有デバイス７０２の使用を停止することを通知する。
（２）次に、ステップＳ１００２にて、デバイス管理処理部３０２は、固有デバイス管理テーブル３０３の内容に関して、固有デバイス７０２はＯＳ２００が使用しておらず、未使用状態であると設定する。
【００４６】
なお、ステップＳ９０１にて、すでに他のＯＳが固有デバイスを使用中の場合は設定できないようにした。他の方法として、動作中のＯＳ毎に優先度を設定し、強制的に固有デバイスを使用させてもよい。すなわち、デバイス管理処理部３０２は、各ＯＳごとの優先度を保有すると共に各ＯＳからデバイスの使用開始の通知を受信すると、優先度に基づいて、固有デバイス管理テーブル３０３を更新する。
【００４７】
さらに他の方法として、待ち状態のキューに挿入し、ステップＳ１００２にて、デバイスの仕様が終了したら、デバイス待ち状態のＯＳに対しデバイスが使用可能になったことを通知してもよい。
【００４８】
以上により、ＯＳ２００が動作を停止する際に、デバイス管理処理部３０２に対し、固有デバイス７０２を未使用状態にするように通知し、他のＯＳが固有デバイス７０２を使用状態と通知するので、他のＯＳが固有デバイス７０２を使用することが可能となる。
【００４９】
以上の実施の形態２では以下の計算機を説明した。
ＯＳ動作開始時、及び、ＯＳ動作終了時に、ドライバがＶＭ上のデバイス管理処理にデバイスの使用状態を通知するようにすることで、他ＯＳが動作開始する際に、未使用デバイスを使用可能とする計算機。
【００５０】
実施の形態３．
実施の形態３は、コンピュータである組込み機器１０００のハードウェア構成を説明する。
図１１は、組込み機器１０００のハードウェア資源の一例を示す図である。組込み機器１０００は、プログラムを実行するＣＰＵ８１０（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）を備えている。ＣＰＵ８１０は、バス８２５を介してＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）８１１、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）８１２、ネットワークコントローラ８１３、ＵＳＢホストコントローラ８１４、入出力コントローラ８１５、ディスプレイコントローラ８１６、磁器ディスク装置８２０等と接続され、これらのハードウェアデバイスを制御する。ネットワークコントローラ８１３〜ディスプレイコントローラ８１６、及び磁器ディスク装置８２０は固有デバイスである。磁気ディスク装置８２０の代わりに、フラッシュメモリなどの記憶装置でもよい。
【００５１】
ＲＡＭ８１２は、揮発性メモリの一例である。ＲＯＭ８１１、磁気ディスク装置８２０等の記憶媒体は、不揮発性メモリの一例である。これらは、「記憶装置」あるいは記憶部、格納部、バッファの一例である。
【００５２】
磁気ディスク装置８２０には、プログラム群８２３、ファイル群８２４が記憶されている。プログラム群８２３のプログラムは、ＣＰＵ８１０により実行される。
【００５３】
上記プログラム群８２３には、以上の実施の形態の説明において「〜部」として説明した機能を実行するプログラムが記憶されている。プログラムは、ＣＰＵ８１０により読み出され実行される。
【００５４】
ファイル群８２４には、以上の実施の形態の説明において、「〜テーブル」として説明した情報や、「〜の判定結果」、「〜の算出結果」、「〜の抽出結果」、「〜の生成結果」、「〜の処理結果」として説明した情報や、データや信号値や変数値やパラメータなどが、「〜ファイル」や「〜データベース」の各項目として記憶されている。「〜ファイル」や「〜データベース」は、ディスクやメモリなどの記録媒体に記憶される。
【００５５】
また、以上に述べた実施の形態の説明において、データや信号値は、ＲＡＭ８１２のメモリ、磁気ディスク装置８２０の磁気ディスク等の記録媒体に記録される。
【００５６】
また、以上の実施の形態の説明において、「〜部」として説明したものは、「〜手段」、「〜ステップ」、「〜手順」、「〜処理」であってもよい。すなわち、「〜部」として説明したものは、ＲＯＭ８１１に記憶されたファームウェアで実現されていても構わない。或いは、ソフトウェアのみで実施されても構わない。ファームウェアとソフトウェアは、プログラムとして、磁気ディスク、ＲＯＭ等の記録媒体に記憶されている。プログラムはＣＰＵ８１０により読み出され、ＣＰＵ８１０により実行される。すなわち、プログラムは、以上に述べた「〜部」としてコンピュータを機能させるものである。あるいは、以上に述べた「〜部」の手順や方法をコンピュータに実行させるものである。
【００５７】
以上の実施の形態では、組込み機器１０００を説明したが、組込み機器１０００の動作をコンピュータに実行させるデバイス関連情報転送プログラムとして把握することも可能である。あるいは、このプログラムを記録したコンピュータ読み取り可能な記録媒体として把握することも可能である。さらに、組込み機器１０００の動作を方法として把握することも可能である。
【符号の説明】
【００５８】
１０００  組込み機器、１００，２００  ＯＳ、１０１，２０１  デバイスドライバ、１０２  ＯＳ起動処理部、３００  ＶＭ、３０１  ＯＳ起動フック処理部、３０２  デバイス管理処理部、３０３  固有デバイス管理テーブル、３０４  デバイス内部情報保存処理部、３０５  デバイス内部情報復帰処理部、３０６  デバイス内部情報保持領域、３０７  共有デバイス管理テーブル、３１０  デバイス関連情報転送部、４００  ハードウェア、７０１，７０２  固有デバイス、８０１  共有デバイス、５０１  メモリ、９００  二次記憶装置、９０１  ＯＳ用イメージファイル。
【図１】
0005557612.tif 000002
【図２】
0005557612.tif 000003
【図３】
0005557612.tif 000004
【図４】
0005557612.tif 000005
【図５】
0005557612.tif 000006
【図６】
0005557612.tif 000007
【図７】
0005557612.tif 000008
【図８】
0005557612.tif 000009
【図９】
0005557612.tif 000010
【図１０】
0005557612.tif 000011
【図１１】
0005557612.tif 000012
【図１２】
0005557612.tif 000013
【図１３】
0005557612.tif 000014
【図１４】
0005557612.tif 000015