(57)【要約】【課題】複数のＯＳが動作する情報処理装置にあって、共有メモリ内にあるプログラムからそのプログラムが動作しているＯＳが提供するプログラムを呼び出せるようにした情報処理装置を提供する。【解決手段】共有メモリ設定手段は、第１のＯＳにおける仮想メモリ空間と第２のＯＳにおける仮想メモリ空間で共有されているメモリであって、それぞれの仮想メモリ空間における同じアドレスでメモリをアクセスできる共有メモリを設定し、呼出手段は、第１のＯＳが提供する第１のプログラムと第２のＯＳが提供する第２のプログラムを呼び出し、呼出手段が呼び出す第１のプログラムと第２のプログラムは、同じ機能を有しているが、異なる実装方法であり、呼出手段は、共有メモリにあって、第１のＯＳ又は第２のＯＳで動作している第３のプログラムからの呼び出しによって、第３のプログラムが動作しているＯＳに応じて第１又は第２のプログラムのいずれかを呼び出す。【選択図】図２
2011221848.tif 000002
【特許請求の範囲】
【請求項１】
第１のオペレーティングシステムにおける仮想メモリ空間と第２のオペレーティングシステムにおける仮想メモリ空間で共有されているメモリであって、それぞれの仮想メモリ空間における同じアドレスで該メモリをアクセスできる共有メモリを設定する共有メモリ設定手段と、
前記第１のオペレーティングシステムが提供する第１のプログラムと前記第２のオペレーティングシステムが提供する第２のプログラムを呼び出す呼出手段
を具備し、
前記呼出手段が呼び出す第１のプログラムと第２のプログラムは、同じ機能を有しているが、異なる実装方法であり、
前記呼出手段は、前記共有メモリ設定手段によって設定された共有メモリにあって、前記第１のオペレーティングシステム又は前記第２のオペレーティングシステムで動作している第３のプログラムからの呼び出しによって、該第３のプログラムが動作しているオペレーティングシステムに応じて前記第１のプログラム又は前記第２のプログラムのいずれかを呼び出す
ことを特徴とする情報処理装置。
【請求項２】
前記共有メモリ設定手段によって設定された共有メモリ内にある前記第３のプログラムが動作しているオペレーティングシステムを異なるオペレーティングシステムに変更する場合は、該第３のプログラムの動作を変更後のオペレーティングシステムで継続させる動作継続手段
を更に具備することを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記第１のプログラムを動作させるのに必要なデータの構造と前記第２のプログラムを動作させるのに必要なデータの構造は異なっており、
前記第３のプログラムが動作しているオペレーティングシステムが異なるオペレーティングシステムに変更になった場合は、変更前のオペレーティングシステムが提供している第１のプログラム又は第２のプログラムを動作させるのに必要なデータの構造を、変更後のオペレーティングシステムが提供している第２のプログラム又は第１のプログラムを動作させるのに必要なデータの構造に変換するデータ構造変換手段
を更に具備することを特徴とする請求項１又は２に記載の情報処理装置。
【請求項４】
前記第１のプログラムを動作させるのに必要なデータの構造と前記第２のプログラムを動作させるのに必要なデータの構造は異なっており、
前記第３のプログラムが動作しているオペレーティングシステムが異なるオペレーティングシステムに変更になり、該第３のプログラムが前記呼出手段を介して変更後のオペレーティングシステムが提供している第２のプログラム又は第１のプログラムを呼び出した場合は、変更前のオペレーティングシステムが提供している第１のプログラム又は第２のプログラムを動作させるのに必要なデータの構造を、変更後のオペレーティングシステムが提供している第２のプログラム又は第１のプログラムを動作させるのに必要なデータの構造に変換するデータ構造変換手段
を更に具備することを特徴とする請求項１又は２に記載の情報処理装置。
【請求項５】
コンピュータを、
第１のオペレーティングシステムにおける仮想メモリ空間と第２のオペレーティングシステムにおける仮想メモリ空間で共有されているメモリであって、それぞれの仮想メモリ空間における同じアドレスで該メモリをアクセスできる共有メモリを設定する共有メモリ設定手段と、
前記第１のオペレーティングシステムが提供する第１のプログラムと前記第２のオペレーティングシステムが提供する第２のプログラムを呼び出す呼出手段
として機能させ、
前記呼出手段が呼び出す第１のプログラムと第２のプログラムは、同じ機能を有しているが、異なる実装方法であり、
前記呼出手段は、前記共有メモリ設定手段によって設定された共有メモリにあって、前記第１のオペレーティングシステム又は前記第２のオペレーティングシステムで動作している第３のプログラムからの呼び出しによって、該第３のプログラムが動作しているオペレーティングシステムに応じて前記第１のプログラム又は前記第２のプログラムのいずれかを呼び出す
ことを特徴とする情報処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置及び情報処理プログラムに関する。
【背景技術】
【０００２】
１つの計算機の上で複数のオペレーティングシステムを動作させる技術がある。
これに関連する技術として、例えば、特許文献１には、計算機システムのＯＳ（オペレーティングシステム）入れ替えや管理を自動的に行い、操作者の負担を軽減し、計算機システムの保守性を向上させることを目的とし、演算処理装置（ＣＰＵ：Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）と、主記憶装置と、補助記憶装置とを備え、主記憶装置と補助記憶装置との間にデータ転送機能を有する計算機システムを使用し、そのオペレーティングシステムを自動的に入れ替えることを可能にするため、補助記憶装置は、更に、新ＯＳ及び現ＯＳを含む複数のＯＳを格納するためのＯＳ格納領域を備え、一方、主記憶装置は、補助記憶装置に格納された複数のＯＳの中から一つを計算機システムを制御するＯＳとしてローディングするローディング手段と、それら補助記憶装置内に格納されたＯＳを管理するための管理テーブルとを備えており、新ＯＳのインストールした場合には、主記憶装置は新ＯＳを自動的に生成した後、新ＯＳを補助記憶装置のＯＳ格納領域内へ格納し、同時に管理テーブルへそのアドレスを登録することが開示されている。
【０００３】
また、例えば、特許文献２には、大がかりなシステムを構築しなくとも、制御側がダウンしたような場合における待機側プロセッサ装置への制御動作の切替えを、継続性を維持しながら即座に行うことができるようにすることを目的とし、各プロセッサ装置に、ＯＳ実行メモリ手段と、ＯＳの機能を使用しながら動作するアプリケーションプログラムを格納したプログラム実行メモリ手段と、ＣＰＵ装置と、自身が実作業に関与しているとき、プログラム実行メモリ手段の内容を待機状態にある相手のプロセッサ装置内のプログラム実行メモリ手段に転送するデータ等値化手段と、自身が実作業に関与しているとき受けた割り込みを待機状態にある相手のプロセッサ装置側に行うプロセス装置間割り込み発生手段と、アプリケーションプログラムがシステムコールを行った際制御側プロセッサ装置と待機側プロセッサ装置とでその動作が同期するように待ち合わせを行うための待ち合わせ手段とを設け、プログラム間でのデータの授受処理及び通信処理をすべてオペレーティングシステムを経由して行うように構成したことが開示されている。
【０００４】
また、例えば、特許文献３には、プログラムが正常に動作しなくても、そのことを自動的に判断し、バックアッププログラムないしデフォルトプログラムを自動的に実行し、装置の動作を正常に保つことを課題とし、フラッシュＲＯＭ内に、前回にＯＳプログラムが正常に動作したか否かを示す状態フラグを設け、ＯＳプログラムを実行するときには、状態フラグの状態をチェックし、前回にＯＳプログラムが正常に動作した場合には、カレントＯＳプログラムを実行し、前回にＯＳプログラムが正常に動作しなかった場合には、バックアップＯＳプログラムを実行することが開示されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平０７−０２８６３２号公報
【特許文献２】特開平０６−２３０９９５号公報
【特許文献３】特開２００４−２２７１４３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
本発明は、複数のオペレーティングシステムが動作する情報処理装置にあって、共有メモリ内にあるプログラムからそのプログラムが動作しているオペレーティングシステムが提供するプログラムを呼び出せるようにした情報処理装置及び情報処理プログラムを提供することを目的としている。
【課題を解決するための手段】
【０００７】
かかる目的を達成するための本発明の要旨とするところは、次の各項の発明に存する。
請求項１の発明は、第１のオペレーティングシステムにおける仮想メモリ空間と第２のオペレーティングシステムにおける仮想メモリ空間で共有されているメモリであって、それぞれの仮想メモリ空間における同じアドレスで該メモリをアクセスできる共有メモリを設定する共有メモリ設定手段と、前記第１のオペレーティングシステムが提供する第１のプログラムと前記第２のオペレーティングシステムが提供する第２のプログラムを呼び出す呼出手段を具備し、前記呼出手段が呼び出す第１のプログラムと第２のプログラムは、同じ機能を有しているが、異なる実装方法であり、前記呼出手段は、前記共有メモリ設定手段によって設定された共有メモリにあって、前記第１のオペレーティングシステム又は前記第２のオペレーティングシステムで動作している第３のプログラムからの呼び出しによって、該第３のプログラムが動作しているオペレーティングシステムに応じて前記第１のプログラム又は前記第２のプログラムのいずれかを呼び出すことを特徴とする情報処理装置である。
【０００８】
請求項２の発明は、前記共有メモリ設定手段によって設定された共有メモリ内にある前記第３のプログラムが動作しているオペレーティングシステムを異なるオペレーティングシステムに変更する場合は、該第３のプログラムの動作を変更後のオペレーティングシステムで継続させる動作継続手段を更に具備することを特徴とする請求項１に記載の情報処理装置である。
【０００９】
請求項３の発明は、前記第１のプログラムを動作させるのに必要なデータの構造と前記第２のプログラムを動作させるのに必要なデータの構造は異なっており、前記第３のプログラムが動作しているオペレーティングシステムが異なるオペレーティングシステムに変更になった場合は、変更前のオペレーティングシステムが提供している第１のプログラム又は第２のプログラムを動作させるのに必要なデータの構造を、変更後のオペレーティングシステムが提供している第２のプログラム又は第１のプログラムを動作させるのに必要なデータの構造に変換するデータ構造変換手段を更に具備することを特徴とする請求項１又は２に記載の情報処理装置である。
【００１０】
請求項４の発明は、前記第１のプログラムを動作させるのに必要なデータの構造と前記第２のプログラムを動作させるのに必要なデータの構造は異なっており、前記第３のプログラムが動作しているオペレーティングシステムが異なるオペレーティングシステムに変更になり、該第３のプログラムが前記呼出手段を介して変更後のオペレーティングシステムが提供している第２のプログラム又は第１のプログラムを呼び出した場合は、変更前のオペレーティングシステムが提供している第１のプログラム又は第２のプログラムを動作させるのに必要なデータの構造を、変更後のオペレーティングシステムが提供している第２のプログラム又は第１のプログラムを動作させるのに必要なデータの構造に変換するデータ構造変換手段を更に具備することを特徴とする請求項１又は２に記載の情報処理装置である。
【００１１】
請求項５の発明は、コンピュータを、第１のオペレーティングシステムにおける仮想メモリ空間と第２のオペレーティングシステムにおける仮想メモリ空間で共有されているメモリであって、それぞれの仮想メモリ空間における同じアドレスで該メモリをアクセスできる共有メモリを設定する共有メモリ設定手段と、前記第１のオペレーティングシステムが提供する第１のプログラムと前記第２のオペレーティングシステムが提供する第２のプログラムを呼び出す呼出手段として機能させ、前記呼出手段が呼び出す第１のプログラムと第２のプログラムは、同じ機能を有しているが、異なる実装方法であり、前記呼出手段は、前記共有メモリ設定手段によって設定された共有メモリにあって、前記第１のオペレーティングシステム又は前記第２のオペレーティングシステムで動作している第３のプログラムからの呼び出しによって、該第３のプログラムが動作しているオペレーティングシステムに応じて前記第１のプログラム又は前記第２のプログラムのいずれかを呼び出すことを特徴とする情報処理プログラムである。
【発明の効果】
【００１２】
請求項１の情報処理装置によれば、複数のオペレーティングシステムが動作する情報処理装置にあって、共有メモリ内にあるプログラムからそのプログラムが動作しているオペレーティングシステムが提供するプログラムを呼び出すことができる。
【００１３】
請求項２の情報処理装置によれば、あるオペレーティングシステムから他のオペレーティングシステムへ変更する場合に、前者のオペレーティングシステムで動作していたプログラムを後者のオペレーティングシステムでも継続して動作させることができる。
【００１４】
請求項３の情報処理装置によれば、第１のプログラムを動作させるのに必要なデータの構造と第２のプログラムを動作させるのに必要なデータの構造は異なっている場合に、第３のプログラムが動作しているオペレーティングシステムが異なるオペレーティングシステムに変更になっても、その動作を後者のオペレーティングシステムで継続させることができる。
【００１５】
請求項４の情報処理装置によれば、第１のプログラムを動作させるのに必要なデータの構造と第２のプログラムを動作させるのに必要なデータの構造は異なっている場合に、第３のプログラムが動作しているオペレーティングシステムが異なるオペレーティングシステムに変更になっても、その動作を後者のオペレーティングシステムで継続させることができる。
【００１６】
請求項５の情報処理プログラムによれば、複数のオペレーティングシステムが動作する情報処理装置にあって、共有メモリ内にあるプログラムからそのプログラムが動作しているオペレーティングシステムが提供するプログラムを呼び出すことができる。
【図面の簡単な説明】
【００１７】
【図１】仮想化技術を実現するための構造例を模式的に示す説明図である。
【図２】本実施の形態の構成例についての概念的なモジュール構成図である。
【図３】物理メモリと複数のオペレーティングシステムにおける仮想メモリ空間との関係例を示す説明図である。
【図４】複数のオペレーティングシステムにおける共有メモリと仮想メモリ空間との関係例を示す説明図である。
【図５】複数のオペレーティングシステムにおけるライブラリのリンクと共有メモリとの関係例を示す説明図である。
【図６】複数のオペレーティングシステムにおけるライブラリとライブラリ変換とのリンクと共有メモリとの関係例を示す説明図である。
【図７】オペレーティングシステムの変更があった場合の処理例を示すフローチャートである。
【図８】オペレーティングシステムの変更があった後にライブラリの呼び出しがあった場合の処理例を示すフローチャートである。
【図９】複数のオペレーティングシステムが動作している場合に、ライブラリの呼び出しがあった場合の処理例を示すフローチャートである。
【図１０】一方のオペレーティングシステムから他方のオペレーティングシステムへ変更する場合のタスクの継続処理例を示すフローチャートである。
【図１１】本実施の形態を実現するコンピュータのハードウェア構成例を示すブロック図である。
【発明を実施するための形態】
【００１８】
まず、実施の形態を説明する前に１つの計算機の上で複数のオペレーティングシステム（以下、ＯＳともいう）を動作させる技術について説明する。
近年のＣＰＵの高機能化とＯＳ技術の発展により、一つの物理的なハードウェアをあたかも複数あるように見せかける仮想化技術が実用的になってきている。図１は、仮想化技術を実現するための構造例を模式的に示す説明図である。１つの計算機のハードウェア資源１１０がある。ハードウェア資源１１０には、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）が少なくとも含まれており、一般的にはハードディスク等のデバイスも含まれる。そして、このハードウェア資源１１０を制御して複数のＯＳを動作させるハイパーバイザーＯＳ１２０がある。ハイパーバイザーＯＳ１２０は、ハードウェア資源１１０を仮想的に見せるためのマイクロＯＳである。この場合、２つのＯＳ（ＯＳ−Ａ  １３０−ＡとＯＳ−Ｂ  １３０−Ｂ）がお互いに独立に動作することができるように、ハイパーバイザーＯＳ１２０が制御する。つまり、ＯＳ−Ａ  １３０−Ａ上でアプリケーション−Ａ  １４０−Ａ、ＯＳ−Ｂ  １３０−Ｂ上でアプリケーション−Ｂ  １４０−Ｂが、それぞれ独立に動作する。図１には、２つのＯＳの例を示したが、もちろんのことながら３つ以上のＯＳであってもよい。
【００１９】
また、片方のＯＳが何らかの理由で正常に動作しなくなった場合でも、ハードウェア資源１１０やハイパーバイザーＯＳ１２０が正常であれば、もう片方のＯＳとアプリケーションは影響を受けることなく動作することができるようにハイパーバイザーＯＳ１２０は制御する。
特にＤｕａｌ  ＣｏｒｅやＱｕａｄ  Ｃｏｒｅなど複数のＣｏｒｅ（コア、プロセッサコア）を持つ高機能ＣＰＵの登場により、仮想化技術で効率的に使う需要が増えている。例えば、一台の高機能サーバ上で複数のＯＳを仮想的に実行することで、ユーザーにはあたかも専用のサーバを提供しているようにするなど、ハードウェア資源を効率的に利用するために使われる。
【００２０】
また、組み込みシステムでも、Ｗｉｎｄ  Ｒｉｖｅｒ（登録商標）社のＶｘＷｏｒｋｓ（登録商標）６５３等のように組み込み機器向けのＯＳが提供されていることから、機能の安定性を高めるために仮想化技術が求められている。
例えば、前述の背景技術で挙げた特許文献に記載の技術は、冗長なシステム（複数のプロセッサや複数のＯＳ等）を用いた障害リカバリに関するものである。これらの技術は、システム全体のリカバリを行うことができるが、例えば、仮想化技術を搭載した複合機（スキャナ、プリンタ、複写機、ファックス等のいずれか２つ以上の機能を有している画像処理装置）において、コピー中やプリント中などに障害が発生した場合、その作業（ジョブ）を継続することができない。また、継続するためには、ハードディスクや不揮発性メモリ（ＮＶＲＡＭ）などにジョブ情報を残しておき、復旧後に退避しておいたジョブ情報から、ジョブをやり直す必要がある。結果、ユーザーが実行したいジョブの継続又はリカバリには時間が必要となってしまう。なお、この作業（ジョブ）とは、図１に例示したアプリケーション−Ａ  １４０−Ａ又はアプリケーション−Ｂ  １４０−Ｂに該当する。
【００２１】
以下、図面に基づき本発明を実現するにあたっての好適な一実施の形態の例を説明する。
図２は、本実施の形態の構成例についての概念的なモジュール構成図を示している。
なお、モジュールとは、一般的に論理的に分離可能なソフトウェア（コンピュータ・プログラム）、ハードウェア等の部品を指す。したがって、本実施の形態におけるモジュールはコンピュータ・プログラムにおけるモジュールのことだけでなく、ハードウェア構成におけるモジュールも指す。それゆえ、本実施の形態は、それらのモジュールとして機能させるためのコンピュータ・プログラム、システム及び方法の説明をも兼ねている。ただし、説明の都合上、「記憶する」、「記憶させる」、これらと同等の文言を用いるが、これらの文言は、実施の形態がコンピュータ・プログラムの場合は、記憶装置に記憶させる、又は記憶装置に記憶させるように制御するの意である。また、モジュールは機能に一対一に対応していてもよいが、実装においては、１モジュールを１プログラムで構成してもよいし、複数モジュールを１プログラムで構成してもよく、逆に１モジュールを複数プログラムで構成してもよい。また、複数モジュールは１コンピュータによって実行されてもよいし、分散又は並列環境におけるコンピュータによって１モジュールが複数コンピュータで実行されてもよい。なお、１つのモジュールに他のモジュールが含まれていてもよい。また、以下、「接続」とは物理的な接続の他、論理的な接続（データの授受、指示、データ間の参照関係等）の場合にも用いる。「予め定められた」とは、対象としている処理の前に定まっていることをいい、本実施の形態による処理が始まる前はもちろんのこと、本実施の形態による処理が始まった後であっても、対象としている処理の前であれば、そのときの状況・状態に応じて、又はそれまでの状況・状態に応じて定まることの意を含めて用いる。
また、システム又は装置とは、複数のコンピュータ、ハードウェア、装置等がネットワーク（一対一対応の通信接続を含む）等の通信手段で接続されて構成されるほか、１つのコンピュータ、ハードウェア、装置等によって実現される場合も含まれる。「装置」と「システム」とは、互いに同義の用語として用いる。もちろんのことながら、「システム」には、人為的な取り決めである社会的な「仕組み」（社会システム）にすぎないものは含まない。
また、各モジュールによる処理毎に又はモジュール内で複数の処理を行う場合はその処理毎に、対象となる情報を記憶装置から読み込み、その処理を行った後に、処理結果を記憶装置に書き出すものである。したがって、処理前の記憶装置からの読み込み、処理後の記憶装置への書き出しについては、説明を省略する場合がある。なお、ここでの記憶装置としては、ハードディスク、ＲＡＭ、外部記憶媒体、通信回線を介した記憶装置、ＣＰＵ内のレジスタ等を含んでいてもよい。
【００２２】
本実施の形態である情報処理装置は、１つの計算機のハードウェア資源の上で複数のＯＳを動作させるものであって、図２の例に示すように、共有メモリ設定モジュール２１０、プログラム変換モジュール２２０を有している。
共有メモリ設定モジュール２１０、プログラム変換モジュール２２０のいずれか一方又は両方は、図１に例示するハイパーバイザーＯＳ１２０内に構成されていてもよいが、ハイパーバイザーＯＳ１２０とは別に構成されていてもよい。例えば、プログラム呼出モジュール２２２はＯＳ内の動的リンカーの一部として構成されていてもよい。
【００２３】
共有メモリ設定モジュール２１０は、第１のＯＳにおける仮想メモリ空間と第２のＯＳにおける仮想メモリ空間で共有されているメモリであって、それぞれの仮想メモリ空間における同じアドレスでそのメモリをアクセスできる共有メモリを設定する。つまり、ハードウェア資源である物理メモリにおける同じ部分（あるアドレスから予め定められた領域のメモリ空間）を、第１のＯＳにおける仮想メモリ空間と第２のＯＳにおける仮想メモリ空間で共有しており、共有している部分は、第１のＯＳにおける仮想メモリ空間及び第２のＯＳにおける仮想メモリ空間においても、同じアドレスである。つまり、共有メモリの先頭アドレスは、第１のＯＳにおける仮想メモリ空間及び第２のＯＳにおける仮想メモリ空間において同じであり、共有メモリの最後尾アドレスは、第１のＯＳにおける仮想メモリ空間及び第２のＯＳにおける仮想メモリ空間において同じである。したがって、第１のＯＳ及び第２のＯＳは、その共有メモリについては互いにアクセスが可能である。
ただし、物理メモリ空間におけるアドレスと仮想メモリ空間におけるアドレスは必ずしも一致している必要はない。
【００２４】
なお、第１のＯＳは第２のＯＳと異なったものである。しかし、その相違点は、ＯＳ自体が異なることであってもよく、例えば、第１のＯＳとしてＬｉｎｕｘ、第２のＯＳとしてＶｘＷｏｒｋｓ等がある。また、相違点は、ＯＳのバージョン（版）が異なることであってもよく、例えば、第１のＯＳとしてあるＯＳのＶｅｒｓｉｏｎ１．１、第２のＯＳとして同じＯＳと前記第２のＶｅｒｓｉｏｎ２．１等がある。また、相違点は、ＯＳが提供しているプログラム（例えば、ライブラリ、ＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍ  Ｉｎｔｅｒｆａｃｅ）等）が異なっている場合であってもよい。
ただし、プログラムが異なっているとは、その機能が同じであっても、その実装方法が異なっていることをいう。
【００２５】
「機能が同じ」とは、そのプログラムを利用するアプリケーション側からみた場合は同じであることをいい、具体的には、例えば、第１のＯＳと第２のＯＳとで採用している標準化されたライブラリ等が該当し、より具体的にはＰＯＳＩＸライブラリ等が該当する。ＰＯＳＩＸライブラリは、ＯＳが提供するライブラリであって、ＩＥＥＥによって定められた、ＵＮＩＸ（登録商標）ベースのＯＳが備えるべき最低限の仕様のライブラリのセットである。
【００２６】
「実装方法が異なっている」とは、第１のＯＳが提供している第１のプログラムは第２のＯＳでは動作せず、第２のＯＳが提供している第２のプログラムは第１のＯＳでは動作しないことをいう。具体的には、例えば、ライブラリのバージョンが異なること等によって相違が生じ、より具体的にはライブラリの実行形態であるバイナリが異なること等がある。前述のＰＯＳＩＸライブラリでは、その実装は各ＯＳによって任せられているので、通常その実装は異なり、バイナリでの互換性はないのが普通である。
【００２７】
プログラム変換モジュール２２０は、プログラム呼出モジュール２２２、データ構造変換モジュール２２４、動作継続モジュール２２６を有している。
プログラム呼出モジュール２２２は、第１のＯＳが提供する第１のプログラムと第２のＯＳが提供する第２のプログラムを呼び出す。ここで、プログラム呼出モジュール２２２が呼び出す第１のプログラムと第２のプログラムは、同じ機能を有しているが、異なる実装方法である。ここでの「同じ機能」、「異なる実装方法」は前述した通りである。
【００２８】
また、プログラム呼出モジュール２２２は、共有メモリ設定モジュール２１０によって設定された共有メモリにあって、第１のＯＳ又は第２のＯＳで動作している第３のプログラムからの呼び出しによって、その第３のプログラムが動作しているＯＳに応じて第１のプログラム又は第２のプログラムのいずれかを呼び出す。ここで、第３のプログラムとは、図１に例示したアプリケーション−Ａ  １４０−Ａ、アプリケーション−Ｂ  １４０−Ｂに該当する。また、第３のプログラムは、共有メモリに実装されている。また、第１のプログラム又は第２のプログラムは、図１に例示したＯＳ−Ａ  １３０−Ａ又はＯＳ−Ｂ  １３０−Ｂに構成されており、共有メモリ以外の場所に実装されている。
第３のプログラムは、直接第１のプログラム又は第２のプログラムを呼び出すのではなく、プログラム呼出モジュール２２２を介して第１のプログラム又は第２のプログラムを呼び出すことしかできないようになっている。
なお、プログラムＡを呼び出すとは、あるプログラムからプログラムＡに処理を移行することであり、例えば、リンクが該当する。
具体的には、例えば、プログラム呼出モジュール２２２は、ＯＳとそのＯＳが提供しているプログラム（第１のプログラム、第２のプログラム）の呼び出し先（例えば、関数名、そのＯＳにおけるプログラムの仮想アドレス等）とを対応させたテーブルを記憶しておき、第３のプログラムからの呼び出しがあった場合は、そのテーブルを用いて、第３のプログラムが動作しているＯＳでの呼び出し先のプログラムを呼び出す。
【００２９】
第１のプログラムを動作させるのに必要なデータの構造と第２のプログラムを動作させるのに必要なデータの構造は異なっている。これに対応するために、データ構造変換モジュール２２４が次の動作を行う。
データ構造変換モジュール２２４は、第３のプログラムが動作しているＯＳが異なるＯＳに変更になった場合は、変更前のＯＳが提供している第１のプログラム又は第２のプログラムを動作させるのに必要なデータの構造を、変更後のＯＳが提供している第２のプログラム又は第１のプログラムを動作させるのに必要なデータの構造に変換する。つまり、ＯＳが変更されたときに、データ構造を変換するものである。
「ＯＳが異なるＯＳに変更になる」場合として、異常事態である障害が発生して、そのリカバリのためにＯＳを変更する場合、正常に動作しているが対象としているＯＳの負荷が高くなり、負荷分散を図るために第３のプログラムを他のＯＳでの動作させるようにする場合等がある。
【００３０】
また、データ構造変換モジュール２２４は、第３のプログラムが動作しているＯＳが異なるＯＳに変更になり、その第３のプログラムがプログラム呼出モジュール２２２を介して変更後のＯＳが提供している第２のプログラム又は第１のプログラムを呼び出した場合は、変更前のＯＳが提供している第１のプログラム又は第２のプログラムを動作させるのに必要なデータの構造を、変更後のＯＳが提供している第２のプログラム又は第１のプログラムを動作させるのに必要なデータの構造に変換する。つまり、ＯＳが変更された後であって、第１のプログラム又は第２のプログラムが呼び出されたときに、データ構造を変換するものである。
具体的には、例えば、データ構造変換モジュール２２４は、データ構造変換のルールを有しており、第１のＯＳから第２のＯＳへ変更になった場合、又は逆に第２のＯＳから第１のＯＳへ変更になった場合、データ構造の違いを吸収し、ＯＳが変更になった後でも、第３のプログラムが継続して動作できるように、データ構造の変換を行う。
【００３１】
動作継続モジュール２２６は、共有メモリ設定モジュール２１０によって設定された共有メモリ内にある第３のプログラムが動作しているＯＳを異なるＯＳに変更する場合は、その第３のプログラムの動作を変更後のＯＳで継続させる。図１の例で示すと、アプリケーション−Ａ  １４０−ＡをＯＳ−Ｂ  １３０−Ｂ上で動作させる必要（ＯＳ−Ａ  １３０−Ａに障害が発生してしまった場合を含む）が生じ、ＯＳ−Ａ  １３０−Ａ上で動作していたアプリケーション−Ａ  １４０−ＡをＯＳ−Ｂ  １３０−Ｂでも継続して動作させるものである。具体的には、図１０の例を用いて後述する。
【００３２】
図３は、物理メモリと複数のＯＳにおける仮想メモリ空間との関係例を示す説明図である。これは、本実施の形態における例ではなく、共有メモリを実現していない場合の例である。つまり、一般的なハイパーバイザーＯＳを用いた場合の物理メモリと仮想メモリ空間との関係例を示したものである。
物理メモリ３００は、３ＧＢのメモリ空間（０ｘ００００＿００００から０ｘＢＦＦＦ＿ＦＦＦＦまでのアドレス空間（先頭の０ｘはそれに続く数値は１６進数であることを示しており、１６進数で４桁毎に「＿」で区切って示している））を有しており、その中にハイパーバイザーＯＳ用領域３１０、ＯＳ−Ａ専用領域３２０、ＯＳ−Ｂ専用領域３３０を配置している。ＯＳ−Ａ専用領域３２０とＯＳ−Ｂ専用領域３３０は重なってはいない。例えば、ＯＳ−ＡはＬｉｎｕｘであり、ＯＳ−ＢはＶｘＷｏｒｋｓである。ＯＳ−Ａ専用領域３２０は１ＧＢのメモリ空間を有しており、これをＯＳ−Ａに仮想メモリ空間として０ｘＣ０００＿００００から０ｘＦＦＦＦ＿ＦＦＦＦまでのアドレス空間のＯＳ−Ａカーネルメモリ３２０Ａを割り当てている。同様に、ＯＳ−Ｂ専用領域３３０は５１２ＭＢのメモリ空間を有しており、これをＯＳ−Ｂに仮想メモリ空間として０ｘ００００＿００００から０ｘ１ＦＦＦ＿ＦＦＦＦまでのアドレス空間のＯＳ−Ｂカーネルメモリ３３０Ｂを割り当てている。
【００３３】
この状態では、両ＯＳは独立であり、ＯＳ−ＡからＯＳ−Ｂを検知することができず、逆にＯＳ−ＢからＯＳ−Ａを検知することはできない。つまり、自ＯＳ上で動作しているアプリケーションプログラムを他ＯＳで継続して動作させたくても、動作させることはできない。また、ＯＳ−ＡとＯＳ−Ｂの仮想アドレスの体系は異なる（独立したアドレス体系をもっているので、仮想メモリ空間内でたとえ同じアドレスであったとしても同じ物理メモリのアドレスを指していると保証できない）ため、両ＯＳ間でプログラムやデータを共有することはできない。
【００３４】
図４は、複数のＯＳにおける共有メモリと仮想メモリ空間との関係例を示す説明図である。これは、本実施の形態における例であり、共有メモリを実現した場合の例である。
物理メモリ３００は、ハイパーバイザーＯＳ用領域３１０、ＯＳ−Ａ専用領域３２０、ＯＳ−Ｂ専用領域３３０、共有メモリ３４０を配置している。つまり、図３の例に比べて、物理メモリ３００内に共有メモリ３４０を新たに配置している。共有メモリ設定モジュール２１０がこの共有メモリ３４０を設定している。
【００３５】
そして、物理メモリ３００内の共有メモリ３４０を、ＯＳ−ＡとＯＳ−Ｂとから同じアドレスでアクセス可能とするために、ＯＳ−ＡにＯＳ−Ａカーネルメモリ３２０Ａの他に共有メモリ３４０Ａを仮想メモリ空間として０ｘ８０００＿００００から０ｘＡ０００＿００００までのアドレス空間を割り当てており、ＯＳ−ＢにＯＳ−Ｂカーネルメモリ３３０Ｂの他に共有メモリ３４０Ｂを仮想メモリ空間として０ｘ８０００＿００００から０ｘＡ０００＿００００までのアドレス空間を割り当てている。したがって、ＯＳ−Ａに割り当てられた仮想メモリ空間（ＯＳ−Ａカーネルメモリ３２０Ａ、共有メモリ３４０Ａ）は、０ｘＣ０００＿００００から０ｘＦＦＦＦ＿ＦＦＦＦまでと、０ｘ８０００＿００００から０ｘＡ０００＿００００までであり、ＯＳ−Ｂに割り当てられた仮想メモリ空間（ＯＳ−Ｂカーネルメモリ３３０Ｂ、共有メモリ３４０Ｂ）は、０ｘ００００＿００００から０ｘ１ＦＦＦ＿ＦＦＦＦまでと、０ｘ８０００＿００００から０ｘＡ０００＿００００までである。これによって、ＯＳ−ＡとＯＳ−Ｂは、それぞれが仮想メモリ空間内の共有メモリ３４０Ａ、共有メモリ３４０Ｂを介して物理メモリ３００内の共有メモリ３４０に同じアドレスでアクセス可能となる。
なお、物理メモリ３００内の共有メモリ３４０は、必ずしも０ｘ８０００＿００００から０ｘＡ０００＿００００までに割り当てる必要はない。
【００３６】
図４の例に示すような共有メモリを実現させた場合は、ＯＳ−ＡとＯＳ−Ｂから共有できるメモリ領域を確保でき、この共有メモリ内で動作するプログラム、データは、両ＯＳで共有可能となる。
【００３７】
図５は、複数のＯＳにおけるライブラリのリンクと共有メモリとの関係例を示す説明図である。ＯＳが提供しているプログラムとして、ライブラリを例として説明するものである。この例は、共有メモリを実現させているが、アプリケーションは各ＯＳが提供しているライブラリを直接にリンクしている場合である。例えば、ライブラリとして、ｐｔｈｒｅａｄ＿ｃｒｅａｔｅ（）、ｐｔｈｒｅａｄ＿ｊｏｉｎ（）等の関数がある。
ＯＳ−Ａにおいて、共有メモリ３４０Ａ内に配置されているアプリケーション領域３４２Ａ内のアプリケーションは、ＯＳ−Ａが提供しているライブラリをＯＳ−Ａカーネルメモリ３２０Ａ内に配置されているライブラリ領域３２２Ａ内のライブラリを直接リンクしており、そのライブラリを動作させるのに必要なデータが格納されていているＯＳ−Ａカーネルメモリ３２０Ａ内に配置されている変数領域３２４Ａ内のデータ（例えば、ｐｔｈｒｅａｄ＿ａｔｔｒ変数等）を初期化等するアクセスを行う。
また、同様に、ＯＳ−Ｂにおいて、共有メモリ３４０Ｂ内に配置されているアプリケーション領域３４２Ｂ内のアプリケーションは、ＯＳ−Ｂが提供しているライブラリをＯＳ−Ｂカーネルメモリ３３０Ｂ内に配置されているライブラリ領域３３２Ｂ内のライブラリを直接リンクしており、そのライブラリを動作させるのに必要なデータが格納されていているＯＳ−Ｂカーネルメモリ３３０Ｂ内に配置されている変数領域３３４Ｂ内のデータ（例えば、ｐｔｈｒｅａｄ＿ａｔｔｒ変数等）を初期化等するアクセスを行う。
【００３８】
このような例では、ＯＳ−ＡとＯＳ−Ｂのライブラリは、同じインタフェース（関数名、引数等）を持つが、実装方法が各ＯＳに依存するため、実行形態であるバイナリの互換性はない。
また、ライブラリを動作させるのに必要なデータの構造体定義等が異なる。例えば、メンバー変数の定義順番が異なる、実装依存のプライベートなメンバー変数が定義されている、データのデータサイズが異なる、データのパディングが異なる（データを表現するバイト数の区切りが異なる）、セマフォやスレッドの構造体の内容とサイズが異なる、等がある。つまり、ライブラリの実装が異なることの他に、そのライブラリを動作させるために必要なデータにおいても互換性がない。
【００３９】
図６は、複数のＯＳにおけるライブラリとライブラリ変換とのリンクと共有メモリとの関係例を示す説明図である。これは、本実施の形態においてプログラム呼出モジュール２２２、データ構造変換モジュール２２４が動作した場合の例である。
ＯＳ−Ａにおいて、共有メモリ３４０Ａ内には、ライブラリ変換領域３４４Ａ、変数領域３４６Ａ、アプリケーション領域３４８Ａを配置している。同様に、ＯＳ−Ｂにおいて、共有メモリ３４０Ｂ内には、ライブラリ変換領域３４４Ｂ、変数領域３４６Ｂ、アプリケーション領域３４８Ｂを配置している。ただし、これらは共有メモリ内であり、アプリケーションが動作しているＯＳによって、いずれかの状態となる。
また、共有メモリ内に配置されるアプリケーションは、他のＯＳへ変更になった場合に、その変更になったＯＳでも動作を継続させたいアプリケーションである。
【００４０】
アプリケーション領域３４８Ａ（３４８Ｂ）内のアプリケーションはライブラリ変換領域３４４Ａ（３４４Ｂ）を介して、ＯＳ−ＡにおけるＯＳ−Ａカーネルメモリ３２０Ａのライブラリ領域３２２Ａ内のライブラリを呼び出すか、ＯＳ−ＢにおけるＯＳ−Ｂカーネルメモリ３３０Ｂのライブラリ領域３３２Ｂ内のライブラリを呼び出す。いずれを呼び出すかは、そのアプリケーションが動作しているＯＳによる。つまり、アプリケーションがＯＳ−Ａ上で動作している場合は、ＯＳ−Ａのライブラリ（ライブラリ領域３２２Ａ内のライブラリ）を呼び出し、アプリケーションがＯＳ−Ｂ上で動作している場合は、ＯＳ−Ｂのライブラリ（ライブラリ領域３３２Ｂ内のライブラリ）を呼び出す。これは、ライブラリ変換領域３４４Ａ（３４４Ｂ）内のプログラム呼出モジュール２２２が判断し、呼び出す。これによって、アプリケーションはプログラム呼出モジュール２２２に対してライブラリを呼び出しているだけであるが、プログラム呼出モジュール２２２はアプリケーションが動作しているＯＳに応じて、ライブラリ（そのＯＳにおけるライブラリの実関数）を呼び出している。
【００４１】
また、ＯＳ−Ａにおいて動作している場合は、そのライブラリを動作させるのに必要なデータが格納されている共有メモリ３４０Ａ内に配置されている変数領域３４６Ａ内のデータ（例えば、ｐｔｈｒｅａｄ＿ａｔｔｒ変数等）を初期化等するアクセスを行う。同様に、ＯＳ−Ｂにおいて動作している場合は、そのライブラリを動作させるのに必要なデータが格納されている共有メモリ３４０Ｂ内に配置されている変数領域３４６Ｂ内のデータ（例えば、ｐｔｈｒｅａｄ＿ａｔｔｒ変数等）を初期化等するアクセスを行う。なお、変数領域３４６Ａと変数領域３４６Ｂは共有メモリ内に配置されており、図６の例では、両方の仮想メモリ空間で配置されているが、アプリケーションがいずれか一方のＯＳで動作している場合は、変数領域３４６Ａ又は変数領域３４６Ｂのいずれか一方が配置されていればよい。また、データ構造変換モジュール２２４は、アプリケーションが動作しているＯＳが変更になった場合、変数領域内のデータ構造を変換する。したがって、図６の例では、変数領域のアドレスは重ならないように配置されているが、変換の際にバッファを用いて変換するのであれば、ＯＳ変更前と同じアドレスにＯＳ変更後の変数領域を配置するようにしてもよい。そして、ライブラリを動作させるのに必要なデータを格納する変数領域（変数領域３４６Ａ、変数領域３４６Ｂ）は、データ構造変換モジュール２２４が確保するようにしてもよい。
データ構造の変換として、具体的には、例えば、メンバー変数の定義順の変更、プライベートなメンバー変数の削除／変換／追加、データサイズの変更、データのパディングの変更、セマフォやスレッドの構造体の内容とサイズの変更等がある。変更前のＯＳと変更後のＯＳとの組み合わせ毎に、これらが変換ルールとして予め記憶されており、変換の際はこの変換ルールにしたがって変換を行う。
【００４２】
このようにすることによって、アプリケーションはライブラリ変換領域３４４Ａ（３４４Ｂ）内のプログラム呼出モジュール２２２を介して、そのアプリケーションが実行されているＯＳのライブラリを呼び出す。つまり、アプリケーションがＯＳ−Ａ上で動作していれば、ＯＳ−Ａのライブラリを呼び出すようにプログラム呼出モジュール２２２がブリッジし、アプリケーションがＯＳ−Ｂ上で動作していれば、ＯＳ−Ｂのライブラリを呼び出すようにプログラム呼出モジュール２２２がブリッジする。
また、変数領域３４６Ａ（３４６Ｂ）は、各ＯＳのライブラリの定義にしたがったデータ構造を有している。そして、アプリケーションが動作しているＯＳが変更になった場合は、データ構造変換モジュール２２４がデータ構造の変換を行う。
【００４３】
図７、図８の例に示すフローチャートは、ＯＳの変更があった場合に一括に処理するものである。
図７は、ＯＳの変更があった場合の処理例を示すフローチャートである。
ステップＳ７０２では、データ構造変換モジュール２２４は、ＯＳ変更前のＯＳ資源情報（ライブラリを動作させるのに必要なデータ）を変更後のＯＳ用に変換する。
つまり、ＯＳの変更があった場合に一括してデータ構造の変換を行うものである。
【００４４】
図８は、ＯＳの変更があった後にライブラリの呼び出しがあった場合の処理例を示すフローチャートである。
ステップＳ８０２では、プログラム呼出モジュール２２２は、ライブラリを呼び出しているアプリケーションが動作しているＯＳが提供しているライブラリを呼び出す。
つまり、図７の例に示すフローチャートによる処理が終了しており、その後にアプリケーションはプログラム呼出モジュール２２２を介してライブラリを呼び出す。
【００４５】
図９は、複数のＯＳが動作している場合に、ライブラリの呼び出しがあった場合の処理例を示すフローチャートである。アプリケーションがライブラリを呼び出す都度に処理を行うものである。
ステップＳ９０２では、プログラム呼出モジュール２２２は、アプリケーションがＯＳ−Ａで動作しているか否かを判断し、ＯＳ−Ａで動作している場合はステップＳ９０４へ進み、それ以外の場合はステップＳ９１２へ進む。
ステップＳ９０４では、データ構造変換モジュール２２４は、ＯＳ資源情報をＯＳ−Ａ用に変換する。
ステップＳ９０６では、プログラム呼出モジュール２２２は、ＯＳ−Ａの実関数（ライブラリ）を実行する。
ステップＳ９０８では、データ構造変換モジュール２２４は、ＯＳ資源情報が更新されたか否かを判断し、更新された場合はステップＳ９１０へ進み、それ以外の場合は処理を完了する（ステップＳ９９９）。
ステップＳ９１０では、データ構造変換モジュール２２４は、ＯＳ−ＡのＯＳ資源情報の更新を、共通ＯＳ資源情報に反映し、処理を完了する（ステップＳ９９９）。
【００４６】
ステップＳ９１２では、プログラム呼出モジュール２２２は、アプリケーションがＯＳ−Ｂで動いているか否かを判断し、ＯＳ−Ｂで動いている場合はステップＳ９１４へ進み、それ以外の場合はエラー処理を行う（ステップＳ９２２）。
ステップＳ９１４では、データ構造変換モジュール２２４は、ＯＳ資源情報をＯＳ−Ｂ用に変換する。
ステップＳ９１６では、プログラム呼出モジュール２２２は、ＯＳ−Ｂの実関数（ライブラリ）を実行する。
ステップＳ９１８では、データ構造変換モジュール２２４は、ＯＳ資源情報が更新されたか否かを判断し、更新された場合はステップＳ９２０へ進み、それ以外の場合は処理を完了する（ステップＳ９９９）。
ステップＳ９２０では、データ構造変換モジュール２２４は、ＯＳ−ＢのＯＳ資源情報の更新を、共通ＯＳ資源情報に反映し、処理を完了する（ステップＳ９９９）。
【００４７】
図１０は、一方のＯＳから他方のＯＳへ変更する場合のタスクの継続処理例を示すフローチャートである。この処理は動作継続モジュール２２６が行う。
ステップＳ１００２では、相手ゲストＯＳ（アプリケーションが動作しているＯＳ）が正常か否かを判断し、正常の場合はステップＳ１００２へ戻り、それ以外の場合はステップＳ１００４へ進む。つまり、障害が発生した場合は、ステップＳ１００４へ進む。
ここでの処理は、片方のＯＳで障害が発生した場合、共有メモリ上に存在する情報を用いて、正常なＯＳで処理を続行するための処理である。障害検知として下記のものが例として挙げられる。
（１）ソフトウェアによる例外検知
（２）不正なメモリアクセス検知
（３）タスクのスタックオーバーフロー・アンダーフロー検知
（４）メインＯＳ側のカーネル障害による突然リブート検知
（５）特定の割り込みが処理されない・発生しない検知
（６）特定のタスクが動作しないデッドロック状態の検知
また、障害発生だけでなく、他の理由によって、一方のＯＳから他のＯＳへタスク（アプリケーション）の動作を継続させるようにしてもよい。例えば、一方のＯＳの負荷が大きくなってきたら、別のＯＳへと負荷分散を図るようにしてもよい。また、マルチコアＣＰＵでＯＳをＣＰＵに割り当てている場合、負荷の少ないＯＳ（コア）へ移行することにより負荷分散を図るようにしてもよい。また、アプリケーションのプライオリティが変更され、そのプライオリティに合わせた処理ができるＯＳへ移行するようにしてもよい。
【００４８】
ステップＳ１００４では、タスクを作成し、共有メモリ内で動作していたアプリケーションのタスク制御情報を作成する。ここで作成するタスクはいわゆる空のタスクである。つまり、タスクの内容はなく、タスクを生成できる準備を行う。
ステップＳ１００６では、共有メモリに残っているＯＳ資源情報から、タスク管理情報（プログラムカウンタやスタックポインタなど）をステップＳ１００４で作ったタスク制御情報に変換する。
ステップＳ１００８では、共有メモリに残っているＯＳ資源情報から、セマフォなどのＯＳ資源を生成する。
ステップＳ１０１０では、タスクを再開する（移行先のＯＳ上で処理を続行する）。
【００４９】
図１１を参照して、本実施の形態の情報処理装置のハードウェア構成例について説明する。図１１に示す構成は、例えばパーソナルコンピュータ（ＰＣ）などによって構成されるものであり、スキャナ等のデータ読み取り部１１１７と、プリンタなどのデータ出力部１１１８を備えたハードウェア構成例を示している。
【００５０】
ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１１０１は、前述の実施の形態において説明した各種のモジュール、すなわち、共有メモリ設定モジュール２１０、プログラム変換モジュール２２０、ハイパーバイザーＯＳ１２０、ＯＳ−Ａ  １３０−Ａ、ＯＳ−Ｂ  １３０−Ｂ、アプリケーション−Ａ  １４０−Ａ、アプリケーション−Ｂ  １４０−Ｂ等の各モジュールの実行シーケンスを記述したコンピュータ・プログラムにしたがった処理を実行する制御部である。
【００５１】
ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）１１０２は、ＣＰＵ１１０１が使用するプログラムや演算パラメータ等を格納する。ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）１１０３は、ＣＰＵ１１０１の実行において使用するプログラムや、その実行において適宜変化するパラメータ等を格納する。これらはＣＰＵバスなどから構成されるホストバス１１０４により相互に接続されている。
【００５２】
ホストバス１１０４は、ブリッジ１１０５を介して、ＰＣＩ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ／Ｉｎｔｅｒｆａｃｅ）バスなどの外部バス１１０６に接続されている。
【００５３】
キーボード１１０８、マウス等のポインティングデバイス１１０９は、操作者により操作される入力デバイスである。ディスプレイ１１１０は、液晶表示装置又はＣＲＴ（Ｃａｔｈｏｄｅ  Ｒａｙ  Ｔｕｂｅ）などがあり、各種情報をテキストやイメージ情報として表示する。
【００５４】
ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）１１１１は、ハードディスクを内蔵し、ハードディスクを駆動し、ＣＰＵ１１０１によって実行するプログラムや情報を記録又は再生させる。ハードディスクには、アプリケーション−Ａ  １４０−Ａ、ライブラリプログラムなどが格納される。更に、その他の各種のデータ処理プログラム等、各種コンピュータ・プログラムが格納される。
【００５５】
ドライブ１１１２は、装着されている磁気ディスク、光ディスク、光磁気ディスク、又は半導体メモリ等のリムーバブル記録媒体１１１３に記録されているデータ又はプログラムを読み出して、そのデータ又はプログラムを、インタフェース１１０７、外部バス１１０６、ブリッジ１１０５、及びホストバス１１０４を介して接続されているＲＡＭ１１０３に供給する。リムーバブル記録媒体１１１３も、ハードディスクと同様のデータ記録領域として利用可能である。
【００５６】
接続ポート１１１４は、外部接続機器１１１５を接続するポートであり、ＵＳＢ、ＩＥＥＥ１３９４等の接続部を持つ。接続ポート１１１４は、インタフェース１１０７、及び外部バス１１０６、ブリッジ１１０５、ホストバス１１０４等を介してＣＰＵ１１０１等に接続されている。通信部１１１６は、ネットワークに接続され、外部とのデータ通信処理を実行する。データ読み取り部１１１７は、例えばスキャナであり、ドキュメントの読み取り処理を実行する。データ出力部１１１８は、例えばプリンタであり、ドキュメントデータの出力処理を実行する。
【００５７】
なお、図１１に示す情報処理装置のハードウェア構成は、１つの構成例を示すものであり、本実施の形態は、図１１に示す構成に限らず、本実施の形態において説明したモジュールを実行可能な構成であればよい。例えば、一部のモジュールを専用のハードウェア（例えば特定用途向け集積回路（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ：ＡＳＩＣ）等）で構成してもよく、一部のモジュールは外部のシステム内にあり通信回線で接続しているような形態でもよく、さらに図１１に示すシステムが複数互いに通信回線によって接続されていて互いに協調動作するようにしてもよい。また、この情報処理装置を組み込んだ画像処理システムの例として、複写機、ファックス、スキャナ、プリンタ、複合機などに組み込まれていてもよいし、画像処理システム以外に家電、自動車、エレベーター等に利用してもよい。
【００５８】
前述の実施の形態においては、主に２つのＯＳを動作させる場合を示したが、３つ以上のＯＳを動作させるようにしてもよい。その場合、３つ以上のＯＳにおいて、移行元のＯＳと移行先のＯＳの対応を予め記憶しており、動作継続モジュール２２６がその対応に基づいて、移行先のＯＳを決定するようにしてもよい。
【００５９】
なお、説明したプログラムについては、記録媒体に格納して提供してもよく、また、そのプログラムを通信手段によって提供してもよい。その場合、例えば、前記説明したプログラムについて、「プログラムを記録したコンピュータ読み取り可能な記録媒体」の発明として捉えてもよい。
「プログラムを記録したコンピュータ読み取り可能な記録媒体」とは、プログラムのインストール、実行、プログラムの流通などのために用いられる、プログラムが記録されたコンピュータで読み取り可能な記録媒体をいう。
なお、記録媒体としては、例えば、デジタル・バーサタイル・ディスク（ＤＶＤ）であって、ＤＶＤフォーラムで策定された規格である「ＤＶＤ−Ｒ、ＤＶＤ−ＲＷ、ＤＶＤ−ＲＡＭ等」、ＤＶＤ＋ＲＷで策定された規格である「ＤＶＤ＋Ｒ、ＤＶＤ＋ＲＷ等」、コンパクトディスク（ＣＤ）であって、読出し専用メモリ（ＣＤ−ＲＯＭ）、ＣＤレコーダブル（ＣＤ−Ｒ）、ＣＤリライタブル（ＣＤ−ＲＷ）等、ブルーレイ・ディスク（Ｂｌｕ−ｒａｙ  Ｄｉｓｃ（登録商標））、光磁気ディスク（ＭＯ）、フレキシブルディスク（ＦＤ）、磁気テープ、ハードディスク、読出し専用メモリ（ＲＯＭ）、電気的消去及び書換可能な読出し専用メモリ（ＥＥＰＲＯＭ）、フラッシュ・メモリ、ランダム・アクセス・メモリ（ＲＡＭ）等が含まれる。
そして、前記のプログラム又はその一部は、前記記録媒体に記録して保存や流通等させてもよい。また、通信によって、例えば、ローカル・エリア・ネットワーク（ＬＡＮ）、メトロポリタン・エリア・ネットワーク（ＭＡＮ）、ワイド・エリア・ネットワーク（ＷＡＮ）、インターネット、イントラネット、エクストラネット等に用いられる有線ネットワーク、あるいは無線通信ネットワーク、さらにこれらの組み合わせ等の伝送媒体を用いて伝送させてもよく、また、搬送波に乗せて搬送させてもよい。
更に、前記のプログラムは、他のプログラムの一部分であってもよく、あるいは別個のプログラムと共に記録媒体に記録されていてもよい。また、複数の記録媒体に分割して
記録されていてもよい。また、圧縮や暗号化など、復元可能であればどのような態様で記録されていてもよい。
【符号の説明】
【００６０】
１１０…ハードウェア資源
１２０…ハイパーバイザーＯＳ
１３０−Ａ…ＯＳ−Ａ
１３０−Ｂ…ＯＳ−Ｂ
１４０−Ａ…アプリケーション−Ａ
１４０−Ｂ…アプリケーション−Ｂ
２１０…共有メモリ設定モジュール
２２０…プログラム変換モジュール
２２２…プログラム呼出モジュール
２２４…データ構造変換モジュール
２２６…動作継続モジュール
【図１】
2011221848.tif 000003
【図２】
2011221848.tif 000004
【図３】
2011221848.tif 000005
【図４】
2011221848.tif 000006
【図５】
2011221848.tif 000007
【図６】
2011221848.tif 000008
【図７】
2011221848.tif 000009
【図８】
2011221848.tif 000010
【図９】
2011221848.tif 000011
【図１０】
2011221848.tif 000012
【図１１】
2011221848.tif 000013