(57)【特許請求の範囲】
【請求項１】
自装置のメモリにアクセスするアクセス手段と、
他装置と通信する通信手段と、
プロセスを実行する実行手段と、
前記自装置内から発生したアクセス要求を検出する検出手段と、
前記実行手段によって実行されるプロセスの要求に応じて前記通信手段により送信された前記他装置のメモリにアクセスする許可に対する応答に含まれる前記他装置が前記自装置に提供するアドレスに対応するアドレスを、前記他装置にアクセスするアドレスに設定する設定手段と、
前記検出手段によって検出されたアクセス要求におけるアクセス対象データのアドレスが前記設定手段によって設定された前記他装置にアクセスするアドレスであるか否かを判断する判断手段と、
前記判断手段によって判断された判断結果に基づいて、前記アクセス手段により前記アクセス要求に基づいて前記自装置のメモリにアクセスする処理、または前記通信手段により前記アクセス要求に基づいて前記他装置と通信する処理、のうちいずれか一方の処理を選択して実行させる制御手段と、
を備えることを特徴とする通信装置。
【請求項２】
前記検出手段は、
前記アクセス手段により前記アクセス要求として前記実行手段から発生した書き込み要求に応じる前記自装置のメモリへの書き込み結果を検出し、
前記制御手段は、
前記検出手段によって前記自装置のメモリへの書き込み結果が検出された場合、前記通信手段により前記書き込み結果に基づくコヒーレンシの実行要求を前記他装置に送信させることを特徴とする請求項１に記載の通信装置。
【請求項３】
前記検出手段は、
前記自装置と前記他装置との通信状態を検出し、
前記制御手段は、
前記検出手段により前記通信状態が遮断された状態から接続された状態に遷移したことが検出された場合、前記遮断された状態の間に前記アクセス手段によって前記自装置のメモリへの書き込み結果に基づくコヒーレンシの実行要求を前記通信手段により前記他装置に送信させることを特徴とする請求項２に記載の通信装置。
【請求項４】
前記制御手段は、
前記アクセス要求として前記実行手段から発生した読み込み要求が前記判断手段によって前記自装置のメモリに割り当てられたアドレスでないと判断された場合、前記通信手段によって前記読み込み要求に基づいて前記他装置と通信し、
前記アクセス手段は、
前記通信手段によって前記読み込み要求に対応する読み込み結果を前記自装置のメモリに書き込み、
前記実行手段は、
前記アクセス手段によって書き込まれた前記読み込み結果を用いて前記プロセスを実行することを特徴とする請求項１に記載の通信装置。
【請求項５】
前記実行手段は、
前記自装置のメモリに割り当てられたアドレスでないと判断された読み込み要求を新たに発行する場合、前記アクセス手段によって新たに発行された読み込み要求に対する新たな読み込み結果が書き込まれるまでの間、前記自装置のメモリに書き込まれた読み込み結果を用いて前記プロセスを実行することを特徴とする請求項４に記載の通信装置。
【請求項６】
前記制御手段は、
前記通信手段により前記他装置からコヒーレンシの実行要求を受信した場合、前記アクセス手段により前記読み込み結果として前記自装置のメモリに書き込ませることを特徴とする請求項５に記載の通信装置。
【請求項７】
前記検出手段は、
前記自装置と前記他装置との通信状態を検出し、
前記制御手段は、
前記検出手段により前記通信状態が遮断されたことが検出された後、前記アクセス要求が前記判断手段によって前記自装置のメモリに割り当てられたアドレスでないと判断された場合に前記実行手段を停止させ、前記検出手段により前記通信状態が接続されたことが検出された場合に前記実行手段の停止を解除させることを特徴とする請求項４に記載の通信装置。
【請求項８】
自装置のメモリにアクセスするアクセス手段および他装置と通信する通信手段を制御可能な前記自装置のプロセッサが、
プロセスを実行する実行工程と、
前記自装置内から発生したアクセス要求を検出する検出工程と、
前記実行工程によって実行されるプロセスの要求に応じて前記通信手段により送信された前記他装置のメモリにアクセスする許可に対する応答に含まれる前記他装置が前記自装置に提供するアドレスに対応するアドレスを、前記他装置にアクセスするアドレスに設定する設定工程と、
前記検出工程によって検出されたアクセス要求におけるアクセス対象データのアドレスが前記設定工程によって設定された前記他装置にアクセスするアドレスであるか否かを判断する判断工程と、
前記判断工程によって判断された判断結果に基づいて、前記アクセス手段により前記アクセス要求に基づいて前記自装置のメモリにアクセスする処理、または前記通信手段により前記アクセス要求に基づいて前記他装置と通信する処理、のうちいずれか一方の処理を選択して実行させる制御工程と、
を実行することを特徴とする通信方法。
【請求項９】
第１の装置のメモリにアクセスするアクセス手段および前記第１の装置とは異なる第２の装置と通信する通信手段を制御可能な前記第１の装置のプロセッサに、
プロセスを実行する実行工程と、
前記第１の装置内から発生したアクセス要求を検出する検出工程と、
前記実行工程によって実行されるプロセスの要求に応じて前記通信手段により送信された前記第２の装置のメモリにアクセスする許可に対する応答に含まれる前記第２の装置が前記第１の装置に提供するアドレスに対応するアドレスを、前記第２の装置にアクセスするアドレスに設定する設定工程と、
前記検出工程によって検出されたアクセス要求におけるアクセス対象データのアドレスが前記設定工程によって設定された前記第２の装置にアクセスするアドレスであるか否かを判断する判断工程と、
前記判断工程によって判断された判断結果に基づいて、前記アクセス手段により前記アクセス要求に基づいて前記第１の装置のメモリにアクセスする処理、または前記通信手段により前記アクセス要求に基づいて前記第２の装置と通信する処理、のうちいずれか一方の処理を選択して実行させる制御工程と、
を実行させることを特徴とする通信プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、通信を行う通信装置、通信方法、および通信プログラムに関する。
【背景技術】
【０００２】
従来から、携帯端末などの端末装置にて、データ共有を行いながら分散処理を行う技術が存在している。たとえば、複数の装置とデータを共有する技術として、たとえば、サーバ側端末とクライアント側となる携帯端末とを無線接続によって接続し、データを共有することで、携帯端末内の限られた保存領域を有効に利用する技術が開示されている。（たとえば、下記特許文献１を参照。）。【０００３】
また、データを共有する別の技術として、たとえば、携帯端末にてデータを共有する際に、開示要求を行うことなくデータファイルの共有化を実現し、データ共有にかかる利用者の負担を軽減する技術が開示されている。（たとえば、下記特許文献２を参照。）。【０００４】
また、別の技術として、たとえば、プログラムコードを他のコアに転送する際に、データ転送を行うか否かを判断する区分を持たせることにより、起動時に要求されるプログラムコードを送信することで、プログラムの起動時間を短縮する技術が開示されている。（たとえば、下記特許文献３を参照。）。【０００５】
また、共有されるデータ転送を制御する技術として、たとえば、分散共有メモリの領域内の空き領域を、分散共有メモリの不足が多い領域に追加して割り当てる技術が開示されている。（たとえば、下記特許文献４を参照。）。【０００６】
また、複数の装置に対するデータの配信方法について、サーバは、複数の制御装置に対し、回線や装置などの異常時にはデータの配信を中断し、正常時または定期的にデータの配信を再開するという技術が開示されている。（たとえば、下記特許文献５を参照。）。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００４−２６０２７４号公報
【特許文献２】特開２００８−２５０５７２号公報
【特許文献３】国際公開第２００８／００１６７１号パンフレット
【特許文献４】特開２００８−３０５２０１号公報
【特許文献５】特開２００１−３２５００７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、上述した従来技術において、特許文献１〜特許文献５にかかる技術では通信を行う際に、ファイルを形成するため、小規模なデータを頻繁に通信しあう場合に、ファイルの形成および展開の処理が分散処理におけるオーバーヘッドとなる問題があった。【０００９】
本発明は、上述した従来技術による問題点を解消するため、ファイルの形成を行わずに通信を行うことができる通信装置、通信方法、および通信プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１０】
上述した課題を解決し、目的を達成するため、開示の通信装置は、自装置のメモリにアクセスするアクセス部および他装置と通信する通信部を制御可能であり、自装置内から発生したアクセス要求を検出し、検出されたアクセス要求におけるアクセス対象データのアドレスが自装置のメモリに割り当てられたアドレスであるか否かを判断し、判断された判断結果に基づいて、アクセス部によりアクセス要求に基づいて自装置のメモリにアクセスする処理、または通信部によりアクセス要求に基づいて他装置と通信する処理、のうちいずれか一方の処理を選択して実行させる。
【発明の効果】
【００１１】
本通信装置、通信方法、および通信プログラムによれば、通信処理時に発生していたファイルの形成および展開の処理によるオーバーヘッドを解消することができるという効果を奏する。
【図面の簡単な説明】
【００１２】
【図１】実施の形態にかかる通信システム１００のハードウェアを示すブロック図である。
【図２】実施の形態１にかかる通信システム１００の動作概略を示す説明図である。
【図３】実施の形態１にかかる通信システム１００の機能を示すブロック図である。
【図４】実施の形態１にかかる通信システム１００のメモリ領域共有処理中における第１の動作を示す説明図である。
【図５】実施の形態１にかかる通信システム１００のメモリ領域共有処理中における第２の動作を示す説明図である。
【図６】実施の形態１にかかる通信システム１００にて動画再生中を示す説明図である。
【図７】実施の形態１にかかる通信システム１００にてゲームアプリケーションの実行中を示す説明図である。
【図８】イベントテーブル８０１の記憶内容の一例を示す説明図である。
【図９】実施の形態１にかかるメモリ領域共有開始処理、メモリ領域共有終了処理を示すフローチャートである。
【図１０】実施の形態１にかかるメモリ領域共有処理を示すフローチャートである。
【図１１】実施の形態１にかかる通信システム１００の課題を示す説明図である。
【図１２】実施の形態２にかかる通信システム１００の動作概略を示す説明図である。
【図１３】実施の形態２にかかる通信システム１００の機能を示すブロック図である。
【図１４】実施の形態２にかかる通信システム１００のメモリ共有処理中における遮断時における動作概略を示す説明図である。
【図１５】実施の形態２にかかる通信システム１００のメモリ共有処理中における再接続時における動作概略を示す説明図である。
【図１６】実施の形態２にかかる通信システム１００にてゲームアプリケーションの実行中の状態を示す説明図である。
【図１７】実施の形態２にかかるＩ／Ｏログの一例を示す説明図である。
【図１８】実施の形態２にかかる分散開始処理、分散終了処理を示すフローチャートである。
【図１９Ａ】実施の形態２にかかる分散処理を示すフローチャート（その１）である。
【図１９Ｂ】実施の形態２にかかる分散処理を示すフローチャート（その２）である。
【図１９Ｃ】実施の形態２にかかる分散処理を示すフローチャート（その３）である。
【図１９Ｄ】実施の形態２にかかる分散処理を示すフローチャート（その４）である。
【発明を実施するための形態】
【００１３】
以下に添付図面を参照して、本発明にかかる通信装置、通信方法、および通信プログラムの好適な実施の形態を詳細に説明する。
【００１４】
（通信装置のハードウェア）
図１は、実施の形態にかかる通信システム１００のハードウェアを示すブロック図である。図１において、通信システム１００は、通信装置１０１＃０と通信装置１０１＃１とを含む。通信装置１０１の具体例としては、小型の携帯端末装置などが考えられる。通信装置１０１＃０は、ＣＰＵ１０２＃０と、ＲＯＭ（Ｒｅａｄ‐Ｏｎｌｙ  Ｍｅｍｏｒｙ）１０３＃０と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）１０３＃０と、を含む。また、通信装置１０１＃０は、フラッシュＲＯＭ１０５＃０と、フラッシュＲＯＭコントローラ１０６＃０と、フラッシュＲＯＭ１０７＃０と、を含む。また、通信装置１０１＃０は、ユーザやその他の機器との入出力装置として、ディスプレイ１０８＃０と、Ｉ／Ｆ（Ｉｎｔｅｒｆａｃｅ）１０９＃０と、キーボード１１０＃０と、を含む。また、各部はバス１１１＃０によってそれぞれ接続されている。
【００１５】
また、通信装置１０１＃１も、通信装置１０１＃０と同様のハードウェアを含む。具体的に、通信装置１０１＃１は、ＣＰＵ１０２＃１と、ＲＯＭ１０３＃１と、ＲＡＭ１０４＃１と、バス１１１＃１と、を含む。また、通信装置１０１＃１は、フラッシュＲＯＭ１０５＃１と、フラッシュＲＯＭコントローラ１０６＃１と、フラッシュＲＯＭ１０７＃１と、ディスプレイ１０８＃１と、Ｉ／Ｆ１０９＃１と、キーボード１１０＃１と、を含んでもよい。
【００１６】
また、フラッシュＲＯＭ１０５〜ディスプレイ１０８、キーボード１１０については、通信装置１０１＃０か通信装置１０１＃１のいずれか一方に存在する状態でもよい。たとえば、通信装置１０１＃０はディスプレイ１０８＃０を含み、通信装置１０１＃１は、フラッシュＲＯＭ１０５＃１〜フラッシュＲＯＭ１０７＃１、キーボード１１０＃１を含む、といった形態をとってもよい。また、特定のハードウェアが通信装置１０１＃０と通信装置１０１＃１の両方に存在し、特定のハードウェアを除いたフラッシュＲＯＭ１０５〜ディスプレイ１０８＃０、キーボード１１０についてはどちらか片方に存在する形態をとってもよい。
【００１７】
たとえば、通信装置１０１＃０と通信装置１０１＃１は、２つの装置で１台として扱われるセパレート型の携帯端末装置であってもよい。セパレート型の携帯端末装置である場合、通信装置１０１＃０には、タッチパネルの機能を有するディスプレイ１０８＃０を含み、通信装置１０１＃１は、キーボード１１０＃１を含んだ形態をとってもよい。
【００１８】
以下、通信装置１０１＃０内のハードウェアについて説明を行うが、通信装置１０１＃１内のハードウェアも通信装置１０１＃０内のハードウェアと等しい機能を有する。
【００１９】
ここで、ＣＰＵ１０２＃０は、通信装置１０１＃０の全体の制御を司る。なお、ＣＰＵ１０２＃０は、複数のＣＰＵを含むマルチコアプロセッサであってもよい。マルチコアプロセッサシステムとは、コアが複数搭載されたプロセッサを含むコンピュータのシステムである。
【００２０】
ＲＯＭ１０３＃０は、ブートプログラムなどのプログラムを記憶している。ＲＡＭ１０４＃０は、ＣＰＵ１０２＃０のワークエリアとして使用される。フラッシュＲＯＭ１０５＃０は、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）などのシステムソフトウェアやアプリケーションソフトウェアなどを記憶している。たとえば、ＯＳを更新する場合、通信装置１０１＃０は、Ｉ／Ｆ１０９＃０によって新しいＯＳを受信し、フラッシュＲＯＭ１０５＃０に格納されている古いＯＳを、受信した新しいＯＳに更新する。
【００２１】
フラッシュＲＯＭコントローラ１０６＃０は、ＣＰＵ１０２＃０の制御に従ってフラッシュＲＯＭ１０７＃０に対するデータのリード／ライトを制御する。フラッシュＲＯＭ１０７＃０は、フラッシュＲＯＭコントローラ１０６＃０の制御で書き込まれたデータを記憶する。データの具体例としては、通信装置１０１＃０を使用するユーザがＩ／Ｆ１０９＃０を通して取得した画像データ、映像データなどである。フラッシュＲＯＭ１０７＃０は、たとえば、メモリカード、ＳＤカードなどを採用することができる。
【００２２】
ディスプレイ１０８＃０は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ１０８＃０は、たとえば、ＴＦＴ液晶ディスプレイなどを採用することができる。
【００２３】
Ｉ／Ｆ１０９＃０は、無線ＬＡＮの通信方式の１つである、アドホック通信によって通信装置１０１＃１と直接通信を行う。また、Ｉ／Ｆ１０９＃０は、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワークに接続され、ネットワークを介して他の装置に接続されてもよい。そして、Ｉ／Ｆ１０９＃０は、ネットワークと内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ１０９＃０には、たとえばモデムやＬＡＮアダプタなどを採用することができる。また、本実施の形態における通信方法は、好ましくは無線通信を想定しているが、有線によって他装置とデータの入出力を行ってもよい。
【００２４】
キーボード１１０＃０は、数字、各種指示などの入力のためのキーを有し、データの入力を行う。また、キーボード１１０＃０は、タッチパネル式の入力パッドやテンキーなどであってもよい。
【００２５】
図２は、実施の形態１にかかる通信システム１００の動作概略を示す説明図である。通信装置１０１＃０を制御するＣＰＵ１０２＃０は、バス１１１＃０を経由してＭＥＭ２０１＃０にデータ２０２＃０を格納する。ＭＥＭ２０１＃０とはＣＰＵ１０２＃０のワークエリアとして使用されるＲＡＭなどの記憶装置であり、具体的にはＲＡＭ１０４＃０などのハードウェアである。また、通信装置１０１＃０は、ソフトウェアとして、ＯＳ２０３＃０、メモリドライバ２０４＃０、通信ドライバ２０５＃０、ファイルシステム２０６＃０を実行している。
【００２６】
ＯＳ２０３＃０は、通信装置１０１＃０を制御するプログラムである。具体的には、ＯＳ２０３＃０は、アプリケーションソフトウェアが使用するドライバを提供する。また、ＯＳ２０３＃０は、アプリケーションソフトウェアに対して、補助記憶装置となるフラッシュＲＯＭ１０７などにアクセスするためにファイルシステム２０６＃０を提供する。
【００２７】
メモリドライバ２０４＃０は、ＯＳ２０３＃０が提供するドライバの一つであり、ＭＥＭ２０１＃０にアクセスする機能を有する。通信ドライバ２０５＃０も、ＯＳ２０３＃０が提供するドライバの一つであり、Ｉ／Ｆ１０９＃０を通じて通信装置１０１＃１と通信する機能を有する。
【００２８】
ファイルシステム２０６＃０は、ＯＳ２０３＃０が提供する機能の一つであり、補助記憶装置となるフラッシュＲＯＭ１０５＃０、フラッシュＲＯＭ１０７＃０などに格納されたデータであるファイルのアクセスを行う機能を有している。たとえば、フラッシュＲＯＭ１０７に格納されたファイルは、ＣＰＵ１０２＃０によってＲＡＭ１０４＃０に読み込まれる。また、ＣＰＵ１０２＃０によって更新されたデータは、フラッシュＲＯＭ１０７＃０にファイルとして書き込まれる。
【００２９】
通信装置１０１＃１も、通信装置１０１＃１を制御するＣＰＵ１０２＃１がバス１１１＃１を経由してＭＥＭ２０１＃１にデータ２０２＃１を格納する。また、通信装置１０１＃０と同様のソフトウェアを含む。すなわち通信装置１０１＃１は、ソフトウェアとして、ＯＳ２０３＃１、メモリドライバ２０４＃１、通信ドライバ２０５＃１、ファイルシステム２０６＃１を実行している。
【００３０】
前述のソフトウェアを利用して通信システム１００は、データの共有を行う。たとえば、ＯＳ２０３＃０は、通信装置１０１＃０のソフトウェアにより発生したデータ２０２＃０に対するアクセス要求を検出し、データ２０２＃０のアクセス先がＭＥＭ２０１＃０か否かを判断する。図２の例では、データ２０２＃０はＭＥＭ２０１＃０内に格納されているため、ＯＳ２０３＃０は、メモリドライバ２０４＃０に対してアクセスするように制御する。
【００３１】
また、通信装置１０１＃０にて、データ２０２＃１に対するアクセス要求を検出した場合、ＯＳ２０３＃０はデータ２０２＃１のアクセス先がＭＥＭ２０１＃０か否かを判断する。図２の例では、データ２０２＃１はＭＥＭ２０１＃０内に格納されていないため、ＯＳ２０３＃０は、通信ドライバ２０５＃０にアクセス要求に基づいた信号を通信装置１０１＃１と通信する。通信ドライバ２０５＃０から信号を受けた通信装置１０１＃１は、メモリドライバ２０４＃１によって、ＭＥＭ２０１＃１内に格納されているデータ２０２＃１にアクセスする。
【００３２】
このように、無線通信によって接続された通信装置１０１＃０、通信装置１０１＃１が、通信ドライバ２０５＃０、通信ドライバ２０５＃１を介して接続先の装置のメモリにアクセスすることで、データを共有しながら分散処理を行うことができる。従来例にかかる通信システム１００であれば、通信ドライバ２０５＃０、通信ドライバ２０５＃１を介する前に、ファイルの形成処理が存在する。本実施の形態１にかかる通信システム１００では、ファイル処理を行わないため、ファイル処理にかかるオーバーヘッドを伴わずに通信処理を行うことができる。
【００３３】
（実施の形態１にかかる通信システム１００の機能）
次に、実施の形態１にかかる通信システム１００の機能について説明する。図３は、実施の形態１にかかる通信システム１００の機能を示すブロック図である。実施の形態１にかかる通信システム１００は、検出部３０１と、判断部３０２と、制御部３０３と、アクセス部３０４と、通信部３０５と、通信部３０６と、アクセス部３０７と、停止部３０８と、を含む。
【００３４】
この制御部となる機能（検出部３０１〜停止部３０８）は、記憶装置に記憶されたプログラムをＣＰＵ１０２＃０、ＣＰＵ１０２＃１が実行することにより、その機能を実現する。記憶装置とは、具体的には、たとえば、図１に示したＲＯＭ１０３、ＲＡＭ１０４、フラッシュＲＯＭ１０５、フラッシュＲＯＭ１０７などである。または、Ｉ／Ｆ１０９＃０を経由してプログラムを取得し、ＣＰＵ１０２＃０、ＣＰＵ１０２＃１が取得されたプログラムを実行することにより、その機能を実現してもよい。
【００３５】
また、図３に示す状態では、検出部３０１〜通信部３０５が通信装置１０１＃０の機能に含まれ、通信部３０６〜停止部３０８が通信装置１０１＃１の機能に含まれているが、検出部３０１〜通信部３０５が通信装置１０１＃１の機能に含まれていてもよい。同様に、通信部３０６〜停止部３０８が通信装置１０１＃０の機能に含まれていてもよい。
【００３６】
検出部３０１は、自装置内から発生したアクセス要求を検出する機能を有する。アクセス要求には、読み込み要求と書き込み要求が存在する。たとえば、検出部３０１は、通信装置１０１＃０にて実行中のプロセスによって発生したアクセス要求を検出する。なお、検出されたアクセス要求の情報は、検出部３０１が実行されるＣＰＵのレジスタやメモリなどの記憶領域に記憶される。たとえば、検出部３０１が通信装置１０１＃０にて実行されている場合、検出されたアクセス要求の情報は、ＣＰＵ１０２＃０のレジスタや、ＭＥＭ２０１＃０に記憶される。
【００３７】
判断部３０２は、検出部３０１によって検出されたアクセス要求におけるアクセス対象データのアドレスが自装置のメモリに割り当てられたアドレスであるか否かを判断する機能を有する。
【００３８】
たとえば、判断部３０２は、アクセス要求におけるアクセス対象データのアドレスが通信装置１０１＃０のＭＥＭ２０１＃０に割り当てられたアドレスであるか否かを判断する。具体的には、ＭＥＭ２０１＃０内のアドレスの範囲が０ｘ００００００００〜０ｘ１ｆｆｆｆｆｆｆである場合を想定する。
【００３９】
アクセス要求におけるアクセス対象データのアドレスが０ｘ００００１０００であれば、判断部３０２は、アクセス対象データのアドレスがＭＥＭ２０１＃０のアドレスの範囲内であるため自装置のメモリに割り当てられたアドレスであると判断する。アクセス要求におけるアクセス対象データのアドレスが０ｘ２０００１０００であれば、判断部３０２は、アクセス対象データのアドレスがＭＥＭ２０１＃０のアドレスの範囲外であるため自装置のメモリに割り当てられたアドレスではないと判断する。
【００４０】
なお、判断結果は、判断部３０２が実行されるＣＰＵのレジスタやメモリなどの記憶領域に記憶される。たとえば、判断部３０２が通信装置１０１＃０にて実行されている場合、検出されたアクセス要求の情報は、ＣＰＵ１０２＃０のレジスタや、ＭＥＭ２０１＃０に記憶される。
【００４１】
制御部３０３は、判断部３０２によって判断された判断結果に基づいて、アクセス部３０４の処理または通信部３０５の処理、のうちいずれか一方の処理を選択して実行させる機能を有する。アクセス部３０４の処理を選択した場合、制御部３０３は、アクセス部３０４によりアクセス要求に基づいて自装置のメモリにアクセスさせる。通信部３０５の処理を選択した場合、制御部３０３は、通信部３０５によりアクセス要求に基づいて他装置と通信させる。
【００４２】
たとえば、制御部３０３は、判断部３０２によってアクセス要求がＭＥＭ２０１＃０に割り当てられたアドレスであると判断された場合、アクセス部３０４の処理を選択し、アクセス部３０４によりＭＥＭ２０１＃０にアクセスさせる。また、判断部３０２によってアクセス要求がＭＥＭ２０１＃０に割り当てられたアドレスではないと判断された場合、通信部３０５の処理を選択し、通信部３０５によりＩ／Ｆ１０９＃０を用いて通信装置１０１＃１と通信させる。
【００４３】
アクセス部３０４は、自装置のメモリにアクセスする機能を有する。具体的には、通信装置１０１＃０では、アクセス部３０４はメモリドライバ２０４＃０となる。なお、アクセスされた結果は、アクセス部３０４が実行されるＣＰＵのレジスタに記憶される。たとえば、アクセス部３０４がメモリドライバ２０４＃０である場合は、ＣＰＵ１０２＃０のレジスタに記憶される。
【００４４】
通信部３０５は、他装置と通信する機能を有する。具体的には通信装置１０１＃０では、通信部３０５は通信ドライバ２０５＃０となる。なお、通信された結果は、通信部３０５が実行されるＣＰＵのレジスタやメモリに記憶される。たとえば、通信部３０５が通信ドライバ２０５＃０である場合は、ＣＰＵ１０２＃０のレジスタや、ＭＥＭ２０１＃０に記憶される。
【００４５】
ＣＰＵ１０２＃１の機能に含まれる通信部３０６は、通信部３０５と等しい機能を有し、アクセス部３０７も、アクセス部３０４と等しい機能を有する。また、通信部３０６は、通信部３０５によりアクセス要求を受信した際に、アクセス部３０７にアクセス要求を通知する。アクセス要求を受けたアクセス部３０７は、アクセス要求に基づいてＭＥＭ２０１＃１にアクセスする。
【００４６】
停止部３０８は、通信部３０６がアクセス要求を受信した場合、自装置にて実行中のソフトウェアに関する実行状態に基づいて、ＯＳを停止する機能を有する。ここで指定するソフトウェアとは、プロセスや、割り込み処理を含む。たとえば、停止部３０８は、通信部３０６がアクセス要求を受信した時、通信装置１０１＃１で実行中のプロセスが存在せず、割り込み処理に対応しない場合、ＯＳをスリープ状態にさせる。
【００４７】
図４は、実施の形態１にかかる通信システム１００のメモリ領域共有処理中における第１の動作を示す説明図である。第１の動作中における通信システム１００は、ＣＰＵ１０２＃０がプロセス４０１＃０とプロセス４０１＃１を実行し、ＣＰＵ１０２＃１が特にプロセスを実行していない、といった分散処理を行っている状態である。通信装置１０１＃０のディスプレイ１０８＃０は、プロセス４０１＃０またはプロセス４０１＃１による描画を行っており、通信装置１０１＃１のディスプレイ１０８＃１は、消灯中である。
【００４８】
図４の状態では、通信装置１０１＃０がマスタ装置となり、通信装置１０１＃１がスレーブ装置となり、マスタ装置によって、スレーブ装置のメモリ領域を利用する。具体的には、通信装置１０１＃０は、接続先の通信装置１０１＃１のメモリ領域であるＭＥＭ２０１＃１を、仮想的に自装置のメモリ領域として扱う。
【００４９】
仮想的に自装置のメモリ領域とする方法として、通信装置１０１＃０は、ＭＥＭ２０１＃０以外のアドレスのアクセスについては通信ドライバ２０５＃０にてアクセス命令を送信し、通信装置１０１＃１は、メモリドライバ２０４＃１を介してデータアクセスを行う。これにより、仮想的にメモリ領域が増大することになるため、高優先度プロセスが扱うメモリ上のデータのページアウトを防止することができる。
【００５０】
図５は、実施の形態１にかかる通信システム１００のメモリ領域共有処理中における第２の動作を示す説明図である。第２の動作中における通信システム１００は、ＣＰＵ１０２＃０がプロセス４０１＃０を実行し、ＣＰＵ１０２＃１がプロセス４０１＃１を実行するといった、分散処理を行っている状態である。通信装置１０１＃０のディスプレイ１０８＃０は、プロセス４０１＃０による描画を行っており、通信装置１０１＃１のディスプレイ１０８＃１は、プロセス４０１＃１による描画を行っている。図５の状態でも、通信装置１０１＃０がマスタ装置となり、通信装置１０１＃１がスレーブ装置となり、マスタ装置によって、スレーブ装置のメモリ領域を利用する。
【００５１】
このように、通信システム１００が複数の装置によって分散処理が行われている場合、データのアクセス先が接続先の装置のデータならば、自装置は、通信ドライバでアクセス命令を送信する。アクセス命令を通信ドライバによって受信した他装置は、メモリドライバを介してデータにアクセスし、そのデータを再度通信ドライバによって自装置に送信する。
【００５２】
図６は、実施の形態１にかかる通信システム１００にて動画再生中を示す説明図である。図６における通信システム１００は、図４にて示したメモリ領域共有処理中における第１の動作中であり、通信装置１０１＃０は、動画再生処理６０１とデータ更新処理６０２を実行している。ディスプレイ１０８＃０は、動画再生処理６０１により動画を再生している。また、動画再生処理６０１に関しては高速で処理することが求められ、データ更新処理６０２に関しては、高速で処理することは求められておらず、データ更新作業はバックグラウンドで動作してもよい。
【００５３】
図６の状態で、通信装置１０１＃０は、データ更新処理６０２が使用するデータ６０３＃１をＭＥＭ２０１＃１に格納することで、ＭＥＭ２０１＃０の空き領域が増加する。したがって、通信装置１０１＃０は、高速処理が求められる動画再生処理６０１が使用するデータ６０３＃０のページアウトを防ぐことができる。ページアウトした場合、データ６０３＃０は、アクセス速度が低速なファイルシステム２０６＃０に格納されるため、動画再生処理６０１の高速処理を妨げることになる。
【００５４】
図７は、実施の形態１にかかる通信システム１００にてゲームアプリケーションの実行中を示す説明図である。図７における通信システム１００は、図５にて示したメモリ領域共有処理中における第２の動作中であり、通信装置１０１＃０はＧＵＩ処理７０１＃０とゲーム処理７０２を実行し、通信装置１０１＃１はＧＵＩ処理７０１＃１を実行している。図７の状態では、通信装置１０１＃０をマスタ装置、通信装置１０１＃１をスレーブ装置とすることで、ゲーム処理７０２は、ディスプレイ１０８＃０、ディスプレイ１０８＃１を１つの画面として認識して表示することが可能である。
【００５５】
ゲーム処理７０２は、１つの画面に対して描画命令を行うと、ＯＳ２０３＃０は、描画命令の対象アドレスが、ＭＥＭ２０１＃０のアドレスであるかを判断する。判断結果に基づいて、ＯＳ２０３＃０は、描画命令の対象アドレスがＭＥＭ２０１＃０のアドレスであればメモリドライバ２０４＃０によってＭＥＭ２０１＃０へアクセスする。描画命令の対象アドレスがＭＥＭ２０１＃０のアドレスでないならば、ＯＳ２０３＃０は、通信ドライバ２０５＃０によってアクセス要求を通信装置１０１＃１に送信する。
【００５６】
アクセス要求を受信した通信ドライバ２０５＃１は、メモリドライバ２０４＃１に対しＭＥＭ２０１＃１にアクセスするよう依頼し、メモリドライバ２０４＃１は、ＭＥＭ２０１＃１に対しアクセスを行う。
【００５７】
より詳細には、たとえば、ディスプレイ１０８＃０、ディスプレイ１０８＃１の表示領域が、幅が３２０［ピクセル］であり、高さが２４０［ピクセル］であるＱＶＧＡ（Ｑｕａｒｔｅｒ  Ｖｉｄｅｏ  Ｇｒａｐｈｉｃｓ  Ａｒｒａｙ）が採用されており、３２ビットカラーで表示される場合を想定する。
【００５８】
このとき、表示領域のデータサイズは、３２０×２４０×４＝０ｘ４ｂ０００［バイト］となる。仮に、通信装置１０１＃０のＭＥＭ２０１＃０内のアドレスの範囲が０ｘ００００００００〜０ｘ１ｆｆｆｆｆｆｆである場合、ディスプレイ１０８＃０への転送領域を０ｘ１ｆｆｂ５０００〜０ｘ１ｆｆｆｆｆｆｆとする。続けて、通信装置１０１＃０は、ディスプレイ１０８＃１への転送領域を、仮想アドレス０ｘ２０００００００〜０ｘ２００４ａｆｆｆと設定する。これにより、通信システム１００は、仮想的に３２０×４８０の表示領域を確保することができる。表示領域が連続しているため、ＧＵＩ処理７０１＃０、ＧＵＩ処理７０１＃１、ゲーム処理７０２は描画処理を容易に行うことができる。
【００５９】
図８は、イベントテーブル８０１の記憶内容の一例を示す説明図である。他装置への処理内容を指示する際には、実行するイベントＩＤをイベントテーブル８０１のように用意しておき、イベントＩＤを他装置に通知することで、他装置はイベントＩＤに対応した処理を実行する。イベントＩＤ“０”〜“３”は実施の形態１にかかる通信システム１００にて使用され、イベントＩＤ“１”、“４”〜“７”は後述する実施の形態２にかかる通信システム１００にて使用される。
【００６０】
たとえば、通信装置１０１＃０がイベントＩＤ“０”を通信装置１０１＃１に送信すると、通信装置１０１＃１は、無線による接続要求を受信したことを認識する。同様に、通信装置１０１＃０がイベントＩＤ“１”を通信装置１０１＃１に送信すると、通信装置１０１＃１は、無線による接続の切断に関する通知を受けたことを認識する。また、通信装置１０１＃０がイベントＩＤ“４”を通信装置１０１＃１に送信すると、通信装置１０１＃１は、無線による分散処理の接続要求を受信したことを認識する。
【００６１】
また、通信装置１０１はイベントＩＤの送信時に、他のパラメータを伴って送信してもよい。たとえば、通信装置１０１＃０がイベントＩＤ“２”とアドレスを通信装置１０１＃１に送信すると、通信装置１０１＃１は、アクセス先のアドレスが自装置の物理アドレスの範囲外である場合のリード命令に関する通知を受信したことを認識する。さらにパラメータの解析により、通信装置１０１＃１は、パラメータのアドレスをアクセス先のアドレスとして認識する。
【００６２】
同様に、通信装置１０１＃０がイベントＩＤ“３”とアドレスと書き込み対象データを通信装置１０１＃１に送信すると、アクセス先のアドレスが自装置の物理アドレスの範囲外である場合のライト命令に関する通知を受信したことを認識する。さらにパラメータの解析により、通信装置１０１＃１は、パラメータのアドレスをアクセス先のアドレスとして認識し、書き込み対象データをアクセス先のアドレスに書き込むデータとして認識する。
【００６３】
また、通信装置１０１＃０がイベントＩＤ“５”とアドレスと更新した値を通信装置１０１＃１に送信すると、通信装置１０１＃１は、自装置固有のデータへのライトアクセス後の、更新した値を通信ドライバを介しての他装置への通知を受信したことを認識する。さらにパラメータの解析により、通信装置１０１＃１は、パラメータのアドレスがライトアクセスを行ったアドレスとして認識し、パラメータである更新した値がライトアクセスを行ったアドレスに対して書き込んだ値として認識する。
【００６４】
また、通信装置１０１＃０がイベントＩＤ“６”とアドレスを通信装置１０１＃１に送信すると、通信装置１０１＃１は、通信ドライバを介しての、他装置への対象データの転送要求を受信したことを認識する。さらにパラメータの解析により、通信装置１０１＃１は、パラメータのアドレスが、転送要求のあった対象データのアドレスであることを認識する。
【００６５】
また、通信装置１０１＃０がイベントＩＤ“７”とＩ／Ｏログを通信装置１０１＃１に送信すると、通信装置１０１＃１は、Ｉ／Ｏログが送信されてきたことを認識する。さらにパラメータの解析により、通信装置１０１＃１は、パラメータのＩ／Ｏログが実際に送信されてきたＩ／Ｏログであると認識する。
【００６６】
図９は、実施の形態１にかかるメモリ領域共有開始処理、メモリ領域共有終了処理を示すフローチャートである。図９に示すメモリ領域共有開始処理、メモリ領域共有終了処理では、通信装置１０１＃０がマスタ装置、通信装置１０１＃１がスレーブ装置となる状態を想定する。また、ステップＳ９０１〜ステップＳ９０８、ステップＳ９１０の処理がメモリ領域共有開始処理を示し、ステップＳ９１２〜ステップＳ９１５の処理がメモリ領域共有終了処理を示している。また、ステップＳ９０９、ステップＳ９１１の処理がメモリ領域共有処理の実行中を示している。
【００６７】
通信装置１０１＃０は、実行中のプロセス４０１＃０などの要求によって無線による接続要求を送信し（ステップＳ９０１）、通信装置１０１＃１は接続要求を受信する（ステップＳ９０２）。接続要求を送信した通信装置１０１＃０は、接続要求の応答があるまで待機する。具体的には、通信装置１０１＃０は図８にて示したイベントＩＤ“０”を送信し、通信装置１０１＃１はイベントＩＤ“０”の受信により、接続要求の受信があったことを認識する。
【００６８】
接続要求を受信した通信装置１０１＃１は、接続要求を許可するかを判断する（ステップＳ９０３）。なお、通信装置１０１＃１は常に接続要求を許可してもよいし、通信装置１０１＃１の状態によって判断してもよい。たとえば、通信装置１０１＃１は、現在実行されているプロセス数が一定以上であれば負荷が過大であるとして接続要求を許可しないと判断してもよい。または、通信装置１０１＃１は、受信した接続要求をディスプレイ１０８＃１に表示し、ユーザによる接続要求の許可を受け付けてもよい。
【００６９】
接続要求を許可しない場合（ステップＳ９０３：Ｎｏ）、通信装置１０１＃１は、接続ＮＧを通信装置１０１＃０に送信し（ステップＳ９０４）、メモリ領域共有開始処理を終了する。接続要求を許可する場合（ステップＳ９０３：Ｙｅｓ）、通信装置１０１＃１は、実行中のプロセスが存在するかを判断する（ステップＳ９０５）。実行中のプロセスが存在しない場合（ステップＳ９０５：Ｎｏ）、通信装置１０１＃１は、メモリ領域共有処理中に割り込み処理に対応するかを判断する（ステップＳ９０６）。
【００７０】
割り込み処理に対応しない場合（ステップＳ９０６：Ｎｏ）、通信装置１０１＃１はＯＳ２０３＃１をスリープ状態に移行し（ステップＳ９０７）、通信装置１０１＃０に接続ＯＫを送信する（ステップＳ９０８）。なお、ステップＳ９０７の処理を行った場合、通信システム１００は、図４にて示したメモリ領域共有処理における第１の動作となり、ステップＳ９０７の処理を行わなかった場合、通信システム１００は図５にて示したメモリ領域共有処理における第２の動作となる。
【００７１】
実行中のプロセスが存在する場合（ステップＳ９０５：Ｙｅｓ）、または、割り込み処理に対応する場合（ステップＳ９０６：Ｙｅｓ）、通信装置１０１＃１は、ステップＳ９０８の処理に移行し、メモリ領域共有処理を実行する（ステップＳ９０９）。メモリ領域共有処理の詳細は図１０にて後述する。ステップＳ９０４、またはステップＳ９０８にて応答を受けた通信装置１０１＃０は、接続結果を判断する（ステップＳ９１０）。接続結果が接続ＮＧである場合（ステップＳ９１０：ＮＧ）、通信装置１０１＃０は、無線による接続を切断し（ステップＳ９１５）、メモリ領域共有開始処理を終了する。
【００７２】
まだ応答がない場合（ステップＳ９１０：応答待ち）、通信装置１０１＃０は、一定時間後再びステップＳ９１０の処理を実行する。接続結果が接続ＯＫである場合（ステップＳ９１０：ＯＫ）、通信装置１０１＃０は、メモリ領域共有処理を実行する（ステップＳ９１１）。メモリ領域共有処理の終了後、通信装置１０１＃０は、接続の切断を送信し（ステップＳ９１２）、ステップＳ９１５の処理に移行後、メモリ領域共有終了処理を終了する。具体的には、通信装置１０１＃０は図８にて示したイベントＩＤ“１”を送信し、通信装置１０１＃１はイベントＩＤ“１”の受信により、接続の切断に関する通知の受信があったことを認識する。
【００７３】
ステップＳ９１２の処理にて切断の通知を受けた通信装置１０１＃１は、ＯＳ２０３＃１がスリープ状態かを判断する（ステップＳ９１３）。スリープ状態である場合（ステップＳ９１３：Ｙｅｓ）、通信装置１０１＃１は、ＯＳ２０３＃１を復帰させる（ステップＳ９１４）。ＯＳ２０３＃１がスリープ状態でない場合（ステップＳ９１３：Ｎｏ）、またはステップＳ９１４の処理後、通信装置１０１＃１は、メモリ領域共有終了処理を終了する。
【００７４】
なお、ステップＳ９０８の処理にて、通信装置１０１＃１は、通信装置１０１＃０に提供するメモリの範囲を通知してもよい。たとえば、ＭＥＭ２０１＃１内のアドレスの範囲が０ｘ００００００００〜０ｘ１ｆｆｆｆｆｆｆである場合、通信装置１０１＃１は、提供するメモリの範囲として、０ｘ１０００００００〜０ｘ１ｆｆｆｆｆｆｆを通信装置１０１＃０に通知する。通知を受けた通信装置１０１＃０は、０ｘ１０００００００〜０ｘ１ｆｆｆｆｆｆｆを、たとえば、仮想アドレス０ｘ２０００００００〜０ｘ２ｆｆｆｆｆｆｆと設定する。これにより通信装置１０１＃０は、メモリ領域共有処理にて、０ｘ２０００００００〜０ｘ２ｆｆｆｆｆｆｆに含まれるアドレスに対するアクセス要求が発行された場合に、他装置に対するアクセス要求として判断することになる。
【００７５】
図１０は、実施の形態１にかかるメモリ領域共有処理を示すフローチャートである。メモリ領域共有処理は、マスタ装置とスレーブ装置が実行する。図１０の説明では、通信装置１０１＃０がマスタ装置となり、通信装置１０１＃０にてメモリ領域共有処理が実行される状態を想定する。
【００７６】
通信装置１０１＃０は、メモリ領域共有処理の終了要求を検出したかを判断する（ステップＳ１００１）。終了要求を検出した場合（ステップＳ１００１：Ｙｅｓ）、通信装置１０１＃０は、メモリ領域共有処理を終了する。通信装置１０１＃０がメモリ領域共有処理の終了要求を検出する場合としては、たとえば、メモリ領域共有処理を要求したプロセス４０１が終了する場合である。または、通信装置１０１＃０がメモリ領域共有処理中に一定時間以上、通信装置１０１＃０が操作されていない状態を検出した場合であってもよい。または、ユーザによりメモリ領域共有処理の終了要求が発行され、通信装置１０１＃０が終了要求を検出した場合であってもよい。
【００７７】
メモリ領域共有処理の終了要求を検出していない場合（ステップＳ１００１：Ｎｏ）、通信装置１０１＃０は、メモリアクセスの発生を検出したかを判断する（ステップＳ１００２）。メモリアクセスの発生を検出していない場合（ステップＳ１００２：Ｎｏ）、通信装置１０１＃０は、ステップＳ１００１の処理に移行する。メモリアクセスの発生を検出した場合（ステップＳ１００２：Ｙｅｓ）、通信装置１０１＃０は、続けて、アクセス先のアドレスが自装置の物理アドレスの領域かを判断する（ステップＳ１００３）。
【００７８】
なお、ステップＳ１００３の判断にて、物理アドレスの領域には、ＭＥＭ２０１＃０の領域が含まれる。また、通信装置１０１＃０がメモリのアドレス空間に入出力機器のアドレス空間が共存するメモリマップドＩＯの形態をとるならば、入出力機器のアドレスも自装置の物理アドレスに含める。
【００７９】
アクセス先のアドレスが自装置の物理アドレスの領域である場合（ステップＳ１００３：Ｙｅｓ）、通信装置１０１＃０は、自装置のメモリにアクセスし（ステップＳ１００４）、ステップＳ１００１の処理に移行する。自装置の物理アドレスの領域でない場合（ステップＳ１００３：Ｎｏ）、通信装置１０１＃０は、通信ドライバ２０５＃０を起動し（ステップＳ１００５）、アクセスの種類を判断する（ステップＳ１００６）。
【００８０】
アクセスの種類がリードアクセスである場合（ステップＳ１００６：リードアクセス）、通信装置１０１＃０は、通信ドライバ２０５＃０によってアクセス先のアドレスを通信装置１０１＃１に送信する（ステップＳ１００７）。通信装置１０１＃１は、通信ドライバ２０５＃０よりアクセス先のアドレスを取得する（ステップＳ１００８）。具体的には、通信装置１０１＃０は図８にて示したイベントＩＤ“２”とアクセス先のアドレスを送信し、通信装置１０１＃１は、受信したイベントＩＤ“２”より、受信した内容がアクセス先のアドレスに対するリード命令要求の受信があったことを認識する。
【００８１】
アクセス先のアドレスを取得した通信装置１０１＃１は、通信ドライバ２０５＃１を起動し、アクセス先のアドレスから読み込んだデータを通信装置１０１＃０に送信する（ステップＳ１００９）。データを受信した通信装置１０１＃０は、メモリアクセスの発生元となるプロセスにデータを通知し、ステップＳ１００１の処理に移行する。
【００８２】
アクセスの種類がライトアクセスである場合（ステップＳ１００６：ライトアクセス）、通信装置１０１＃０は、通信ドライバ２０５＃０によってアクセス先のアドレスおよび書き込み対象データを通信装置１０１＃１に送信する（ステップＳ１０１０）。通信装置１０１＃１は、通信ドライバ２０５よりアクセス先のアドレスを取得する（ステップＳ１０１１）。具体的には、通信装置１０１＃０は図８にて示したイベントＩＤ“３”とアクセス先のアドレスと書き込み対象データを送信する。通信装置１０１＃１は、受信したイベントＩＤ“３”より、受信した内容がアクセス先のアドレスに対するライト命令要求の受信があったことを認識する。
【００８３】
アクセス先のアドレスを取得した通信装置１０１＃１は、アクセス先のアドレスに書き込み対象データを書き込む（ステップＳ１０１２）。また、ステップＳ１００７の処理にて、アクセス先のアドレスを送信した通信装置１０１＃０は、ステップＳ１００１の処理に移行する。
【００８４】
以上説明したように、実施の形態１にかかる通信装置、通信方法、および通信プログラムによれば、自装置のメモリ以外にアクセス要求した場合、他装置にアクセス要求を送信し、他装置が他装置のメモリ空間にアクセスする。これにより、通信装置は、通信時に行っていたファイルの形成および展開の処理を省くことができ、オーバーヘッドを解消することができる。また、他装置のメモリを擬似的に自装置のメモリとすることで、メモリ空間が拡大するため、優先度の高いプロセスのデータのページアウトを防ぐことができる。
【００８５】
また、他装置のメモリを擬似的に自装置のメモリとすることで、他装置と自装置のメモリの内容に関連性を持たせることが容易になる。たとえば、通信装置は、自装置と他装置のディスプレイを仮想的に１つの画面として扱うことが容易となる。
【００８６】
このように、ファイルという形式を介さずにデータを共有することが可能となるため、複数台の携帯端末を連携して動作させる携帯端末用のゲームなどの新規アプリケーションを実行することが可能となる。たとえば、セパレート型の携帯端末を２つ用意し、画面のある片方ずつを連携させ、ゲームアプリケーションを起動し、もう一方をコントローラとして、２人同時プレイをすることが実現できる。
【００８７】
また、実施の形態１にかかる通信システム１００では、通信装置が２つ存在していたが、通信装置が３つ以上の形態をとってもよい。たとえば、実施の形態１にかかる通信システム１００に、通信装置１０１＃２がさらに存在し、通信装置１０１＃０がマスタ装置となり、通信装置１０１＃１、通信装置１０１＃２がスレーブ装置となってもよい。
【００８８】
この場合、通信装置１０１＃０は、自装置の物理アドレス外となる領域を、通信装置１０１＃１のメモリにアクセスする領域と、通信装置１０１＃２のメモリにアクセスする領域と、の２つの領域に分割してもよい。続けて、図１０のステップＳ１００３：Ｙｅｓの処理後、通信装置１０１＃０は、アクセス先のアドレスに基づいて、通信装置１０１＃１のメモリにアクセスするか、通信装置１０１＃２のメモリにアクセスするかを判断してもよい。
【００８９】
図１１は、実施の形態１にかかる通信システム１００の課題を示す説明図である。実施の形態１にかかる通信システム１００では、通信が遮断されると接続先のメモリ領域にアクセスできなくなるため、処理を継続することができなくなる。また、実施の形態１にかかる通信システム１００は、図１１で示すように、ＭＥＭ２０１＃０に通信装置１０１＃１用データ領域を確保し、ＭＥＭ２０１＃１に通信装置１０１＃０用データ領域を確保するといった、共有データ領域を用いた場合も想定される。
【００９０】
具体的な共有データ領域の確保方法として、ＣＰＵ１０２＃０は、通信装置１０１＃１とデータを共有する領域としてデータ領域１１０１＃０＿０、データ領域１１０１＃１＿０を確保し、データ領域１１０１＃０＿０内にデータ２０２＃０を格納する。また、ＣＰＵ１０２＃０は、データ２０２＃１と等しいデータをデータ２０２＃１＿０としてデータ領域１１０１＃１＿０に格納する。
【００９１】
また、ＣＰＵ１０２＃１は、通信装置１０１＃０とデータを共有する領域としてデータ領域１１０１＃１＿０、データ領域１１０１＃１＿１を確保し、データ領域１１０１＃１＿１内にデータ２０２＃１を格納する。また、ＣＰＵ１０２＃１は、データ２０２＃０と等しいデータをデータ２０２＃０＿１としてデータ領域１１０１＃０＿１に格納する。しかし、共有データ領域を用いた場合も再接続時に装置間のデータの整合性が取れず、通信システム１００は、処理を最初からやり直すことになる。
【００９２】
また、特許文献５にかかる技術では、サーバは異常時に配信できなかったデータを、正常時に再配信する。この技術を実施の形態１にかかる通信システム１００に適用しても、回線遮断中における処理を実行することが困難であるという問題があった。図１２〜図１９に示す実施の形態２にかかる通信システム１００では、実施の形態１にかかる通信システム１００が回線遮断中においても可能な限り処理を続行し、回線再接続時に処理を再開することを目的とする。
【００９３】
（実施の形態２の概要説明）
図１２は、実施の形態２にかかる通信システム１００の動作概略を示す説明図である。以下、図１２〜図１９にて、特に指定がない場合、通信システム１００についての記述は、実施の形態２にかかる通信システム１００について記述したものである。図１２に示す通信システム１００は、ハードウェアとしては図２で示した実施の形態１にかかる通信システム１００のハードウェアと等しく、機能としては、図１１で説明した共有データ領域を確保する形態をとる。
【００９４】
さらに、通信システム１００内の通信装置１０１は、自装置固有のデータに対してライトアクセスを行った場合、他装置に対してコヒーレンシの実行要求をする。たとえば、通信装置１０１＃０は、データ２０２＃０に対してライトアクセスを行った場合、書き込んだ結果を通信装置１０１＃１に通信ドライバ２０５＃０によって送信し、通信装置１０１＃１に対してコヒーレンシを実行するように要求する。要求を受信した通信装置１０１＃１は、コヒーレンシの実行として、共有データ領域に存在するデータ２０２＃０＿１を更新する。これにより、データ２０２＃０とデータ２０２＃０＿１が一致し、整合性が取れた状態となる。
【００９５】
また、通信システム１００内の通信装置１０１が自装置固有のデータに対してライトアクセスを行う際に接続状態が遮断されている場合、他装置に対してコヒーレンシの実行要求を行わず、ライトアクセスによる書き込み結果をＩ／Ｏログに記述する。接続状態が確立した後に、通信装置１０１は他装置にＩ／Ｏログを送信し、他装置は受信したＩ／Ｏログに基づいてコヒーレンシを実行する。Ｉ／Ｏログの扱いについては、図１４、図１５にて、Ｉ／Ｏログの詳細は図１７にて後述する。
【００９６】
また、通信システム１００内の通信装置１０１が他装置固有のデータに対してのリードアクセスを行う場合、共有データ領域のデータを基に投機実行を行いつつ、自装置は通信ドライバを介してデータが最新か否かを判断する。データが古い場合、通信装置１０１は、リードアクセス時から再実行する。
【００９７】
たとえば、通信装置１０１＃０は、データ２０２＃１に対してリードアクセスを行う場合、リードアクセスを要求したプロセスは、共有データ領域に格納されたデータ２０２＃１＿０を基に投機実行を行う。また、通信装置１０１＃０は、通信ドライバ２０５＃０によってデータ２０２＃１の値を取得し、共有データ領域に格納されたデータ２０２＃１＿０と比較する。共有データ領域に格納されたデータ２０２＃１が不一致となり古い場合、通信装置１０１＃０は、投機実行する前となる、データ２０２＃１＿０を読み込んだ状態から再実行を行う。
【００９８】
また、通信システム１００内の通信装置１０１は、他装置固有のデータに対してのライトアクセスは行わない。たとえば、通信システム１００は、自装置固有の領域に書き込み、他装置が読み込む、といった形態にすることで、他装置固有のデータに対してのライトアクセスを置き換えることができる。
【００９９】
（実施の形態２にかかる通信システム１００の機能）
次に、実施の形態２にかかる通信システム１００の機能について説明する。図１３は、実施の形態２にかかる通信システム１００の機能を示すブロック図である。実施の形態２にかかる通信システム１００は、検出部１３０１と、判断部１３０２と、制御部１３０３と、アクセス部１３０４と、通信部１３０５と、通信部１３０６と、アクセス部１３０７と、実行部１３０８と、を含む。
【０１００】
この制御部となる機能（検出部１３０１〜実行部１３０８）は、記憶装置に記憶されたプログラムをＣＰＵ１０２＃０、ＣＰＵ１０２＃１が実行することにより、その機能を実現する。記憶装置とは、具体的には、たとえば、図１に示したＲＯＭ１０３、ＲＡＭ１０４、フラッシュＲＯＭ１０５、フラッシュＲＯＭ１０７などである。または、Ｉ／Ｆ１０９を経由してプログラムを取得し、ＣＰＵ１０２＃０、ＣＰＵ１０２＃１が取得されたプログラムを実行することにより、その機能を実現してもよい。
【０１０１】
また、図１３では、検出部１３０１〜通信部１３０５、実行部１３０８が通信装置１０１＃０の機能に含まれ、通信部１３０６、アクセス部１３０７が通信装置１０１＃１の機能に含まれている状態を示している。また、検出部１３０１〜通信部１３０５、実行部１３０８も通信装置１０１＃１の機能に含まれる。また、判断部１３０２、通信部１３０５、通信部１３０６、アクセス部１３０７は、それぞれ、判断部３０２、通信部３０５、通信部３０６、アクセス部３０７と等しい機能を有するため、説明を省略する。
【０１０２】
検出部１３０１は、自装置内から発生したアクセス要求を検出する機能を有する。また、検出部１３０１は、自装置と他装置との通信状態を検出してもよい。また、検出部１３０１は、アクセス部１３０４によりアクセス要求として実行部１３０８から発生した書き込み要求に応じる自装置のメモリへの書き込み結果を検出してもよい。
【０１０３】
たとえば、検出部１３０１は、通信装置１０１＃０と通信装置１０１＃１との通信状態が遮断された状態や、接続された状態を検出する。また、検出部１３０１は、アクセス部１３０４によりＭＥＭ２０１＃０への書き込み結果を検出する。なお、検出結果は、検出部１３０１が実行されるＣＰＵのレジスタやメモリなどの記憶領域に記憶される。たとえば、検出部１３０１が通信装置１０１＃０にて実行されている場合、検出結果は、ＣＰＵ１０２＃０のレジスタや、ＭＥＭ２０１＃０に記憶される。
【０１０４】
制御部１３０３は、判断部１３０２によって判断された判断結果に基づいて、アクセス部１３０４の処理または通信部１３０５の処理、のうちいずれか一方の処理を選択して実行させる機能を有する。また、制御部１３０３は、アクセス要求として実行部１３０８から発生した読み込み要求が判断部１３０２によって自装置のメモリに割り当てられたアドレスでないと判断された場合、通信部１３０５により読み込み要求に基づいて他装置と通信させてもよい。たとえば、制御部１３０３は、プロセス４０１＃０から発生した読み込み要求のアドレスがＭＥＭ２０１＃０のアドレスでない場合、通信部１３０５によりＩ／Ｆ１０９＃０を通じて読み込み要求を通信装置１０１＃１に送信してもよい。
【０１０５】
また、制御部１３０３は、検出部１３０１により通信状態が遮断されたことが検出された後、アクセス要求が判断部１３０２によって自装置のメモリに割り当てられたアドレスでないと判断された場合に実行部１３０８を停止させる。続けて、制御部１３０３は、検出部１３０１により通信状態が接続されたことが検出された場合に実行部１３０８の停止を解除させてもよい。たとえば、制御部１３０３は、通信状態が遮断された状態で、アクセス要求が他装置のメモリに割り当てられたアドレスである場合、プロセス４０１＃０を停止させ、通信状態が接続された場合に、プロセス４０１＃０の停止を解除してもよい。
【０１０６】
また、制御部１３０３は、検出部１３０１によって自装置のメモリへの書き込み結果が検出された場合、通信部１３０５により書き込み結果に基づくコヒーレンシの実行要求を他装置に送信させてもよい。書き込み結果に基づくコヒーレンシの実行要求は、たとえば、自装置が、書き込み結果とコヒーレンシの実行要求を意味するイベントＩＤを送信することで、受信した他装置がコヒーレンシの実行要求を受けたことを認識する。たとえば、制御部１３０３は、ＭＥＭ２０１＃０への書き込み結果が検出された場合、Ｉ／Ｆ１０９＃０を通じて書き込み結果に基づくコヒーレンシの実行要求を通信装置１０１＃１に送信させる。
【０１０７】
また、制御部１３０３は、他装置からコヒーレンシの実行要求を受信した場合、アクセス部１３０４により読み込み結果として自装置のメモリに書き込ませてもよい。たとえば、制御部１３０３は、コヒーレンシの実行要求として通信装置２０２＃１の値を受信した場合、アクセス部１３０４によりデータ２０２＃１＿０として書き込む。書き込まれたデータは投機実行に使用される。
【０１０８】
また、制御部１３０３は、検出部１３０１により通信状態が遮断から接続された状態に遷移したことが検出された場合、遮断された状態の間に自装置のメモリへの書き込み結果に基づくコヒーレンシの実行要求を通信部１３０５により他装置に送信させてもよい。遮断された状態の間に自装置のメモリへの書き込み結果の記録方法については、書き込まれたメモリにフラグを設定するといった方法でもよい。この場合、制御部１３０３は、コヒーレンシの実行要求時にフラグが設定されたアドレスを他装置に送信する、本実施の形態２では、制御部１３０３は、書き込み結果をＩ／Ｏログに記述し、コヒーレンシの実行要求時に他装置にＩ／Ｏログを送信する。
【０１０９】
アクセス部１３０４は、自装置のメモリにアクセスする機能を有する。また、アクセス部１３０４は、通信部１３０５によって読み込み要求に対応する読み込み結果を自装置のメモリに書き込んでもよい。たとえば、アクセス部１３０４は、通信部１３０５によってＩ／Ｆ１０９＃０を通じて得た読み込み結果を、データ領域１１０１＃１＿０に書き込む。
【０１１０】
実行部１３０８は、プロセスを実行する機能を有する。たとえば、実行部１３０８は、プロセス４０１＃０を実行する。また実行部１３０８は、アクセス部１３０４によって書き込まれた読み込み結果を用いて前記プロセスを実行してもよい。たとえば、実行部１３０８は、データ領域１１０１＃１＿０に書き込まれた読み込み結果であるデータ２０２＃１＿０を用いてプロセス４０１＃０を実行する。
【０１１１】
また、実行部１３０８は、アクセス部１３０４によって新たに発行された読み込み要求に対する新たな読み込み結果が書き込まれるまでの間、自装置のメモリに書き込まれた読み込み結果を用いてプロセスを実行してもよい。たとえば、実行部１３０８は、通信装置１０１＃１のメモリへの新たな読み込み要求を発行し、データ領域１１０１＃１＿０に新たな読み込み結果が書き込まれるまでの間、既に書き込まれているデータ２０２＃１＿０を用いてプロセス４０１＃０を実行する。これにより、実行部１３０８は投機実行を行うことができる。
【０１１２】
図１４は、実施の形態２にかかる通信システム１００のメモリ共有処理中における遮断時における動作概略を示す説明図である。通信装置１０１＃０と通信装置１０１＃１は、無線接続が確立していなく、通信が遮断された状態である。通信が遮断されると、通信装置１０１＃０と通信装置１０１＃１で実行しているプロセス４０１＃０、プロセス４０１＃１は、接続先のデータを読み込む箇所まで、各装置で処理を継続する。
【０１１３】
通信ドライバを介した接続先のメモリ領域へのアクセス要求が発生すると、通信装置１０１は再接続要求を行い、低電力モードへ移行する。たとえば、通信装置１０１＃０は、プロセス４０１＃１を他装置のデータを読み込む箇所までプロセスの処理を継続する。データ２０２＃１＿０に対する読み込みを検出した場合、通信装置１０１＃０は、再接続要求を行ってプロセスの処理を停止し、低電力モードへ移行する。また再接続要求を行う際に、通信装置１０１＃０は、ディスプレイ１０８＃０にて再接続要求を表示し、ユーザに対し接続要求を発行するか否かの応答を待ってもよい。
【０１１４】
たとえば、通信装置１０１＃０は、プロセス４０１＃０がデータ２０２＃１＿０の読み込みを行ったため、プロセス４０１＃０を停止する。通信装置１０１＃１は、プロセス４０１＃１がデータ２０２＃１の読み込みと書き込みしか行わず、データ２０２＃０の読み込みに行っていないため、プロセス４０１＃１の処理を実行し続けることができる。
【０１１５】
また、通信装置１０１は、接続状態が遮断された時点から、自装置固有のデータへのライトアクセスをＩ／Ｏログに記録する。このとき、通信装置１０１は、自装置固有のデータに対してライトアクセスの際に行っていた、他装置に対するコヒーレンシ要求を行わない。たとえば、通信装置１０１＃０は、接続状態が遮断された時点から、自端末固有のデータとなるデータ２０２＃０へのライトアクセスをＩ／Ｏログ１４０１＃０に記録し、通信装置１０１＃１に対するコヒーレンシの要求通知を停止する。
【０１１６】
図１５は、実施の形態２にかかる通信システム１００のメモリ共有処理中における再接続時における動作概略を示す説明図である。図１５における通信システム１００は、図１４の状態から、通信が再接続された状態を示している。通信が再接続されると、各装置は、接続先の装置にＩ／Ｏログを送信する。たとえば、通信装置１０１＃０はＩ／Ｏログ１４０１＃０を通信装置１０１＃１に送信し、通信装置１０１＃１はＩ／Ｏログ１４０１＃１を通信装置１０１＃０に送信する。
【０１１７】
Ｉ／Ｏログを送信した後には、各装置は通常モードになり、Ｉ／Ｏログに基づいてデータのコヒーレンシを実行しプロセスの処理を再開する。たとえば、通信装置１０１＃０はＩ／Ｏログ１４０１＃１からデータ２０２＃１＿０を更新し、停止中であったプロセス４０１＃０の処理を再開する。
【０１１８】
図１６は、実施の形態２にかかる通信システム１００にてゲームアプリケーションの実行中の状態を示す説明図である。図１６における通信システム１００は、通信装置１０１＃０がゲーム処理１６０１＃０を実行し、通信装置１０１＃１がゲーム処理１６０１＃１を実行している。図１６で示した、複数の装置を無線などによって接続するゲーム処理などにおいて、通信が一時的に遮断されても図１４、図１５で説明した動作により、ゲーム処理を再起動することなく継続することができる。
【０１１９】
具体的には、通信装置１０１＃０は、ゲーム処理１６０１＃０が使用するデータ１６０２＃０へ書き込むたびに、通信装置１０１＃１に書き込み結果を送信し、コヒーレンシを実行するように要求する。書き込み結果を受信した通信装置１０１＃１は、書き込み結果に基づいてデータ１６０２＃０＿１のコヒーレンシを実行し、データ１６０２＃０＿１をデータ１６０２＃０と等しい状態にする。
【０１２０】
また、無線による接続が遮断された場合、通信装置１０１＃０、通信装置１０１＃１は、データ１６０２＃０、データ１６０２＃１のライトアクセスのたびにＩ／Ｏログに記録する。再接続後、通信装置１０１＃０、通信装置１０１＃１は、Ｉ／Ｏログを送信しあい、データ１６０２＃１＿０と、データ１６０２＃０＿１のコヒーレンシを実行する。コヒーレンシを実行した後、通信装置１０１＃０、通信装置１０１＃１は、ゲーム処理１６０１＃０、ゲーム処理１６０１＃１を続行する。このように、通信の遮断のたびに処理を再起動せずに継続することができるため、ユーザに対してゲームアプリケーションの使い勝手を向上させることができる。
【０１２１】
図１７は、実施の形態２にかかるＩ／Ｏログの一例を示す説明図である。Ｉ／Ｏログは、通信装置１０１が書き込みを行った仮想アドレスと、仮想アドレスへ書き込んだ値を記録している。たとえば、図１７の例にて、通信装置１０１＃０は、仮想アドレス０ｘ１２３４５６７８に０を書き込んだ場合、Ｉ／Ｏログに、“０ｘ１２３４５６７８”、”０”を格納する。同様に、仮想アドレス０ｘ２３４５６７８９に１を書き込んだ場合、通信装置１０１＃０は、Ｉ／Ｏログに、“０ｘ２３４５６７８９”、”１”を格納する。仮想アドレス０ｘ３４５６７８９０に２を書き込んだ場合、通信装置１０１＃０は、Ｉ／Ｏログに、“０ｘ３４５６７８９０”、”２”を格納する。
【０１２２】
図１７の例では１バイト単位にてＩ／Ｏログを生成しているが、異なる単位にてＩ／Ｏログを生成してもよい。たとえば、通信装置１０１＃０は、４バイト単位にてＩ／Ｏログを生成してもよい。具体的には、通信装置１０１＃０は、仮想アドレス０ｘ１０００００００に０ｘｆｆｆｆｆｆｆｆを書き込んだ場合、Ｉ／Ｏログに、“０ｘ１０００００００”、”０ｘｆｆｆｆｆｆｆｆ”を格納する。また、通信装置１０１は、Ｉ／Ｏログ内に、既に同じアドレスが存在する場合、値を上書きしてもよい。
【０１２３】
図１８は、実施の形態２にかかる分散開始処理、分散終了処理を示すフローチャートである。ステップＳ１８０１〜ステップＳ１８０７、ステップＳ１８０９〜ステップＳ１８１１の処理が分散開始処理を示し、ステップＳ１８１３〜ステップＳ１８１６の処理が分散終了処理を示している。また、ステップＳ１８０８、ステップＳ１８１２の処理が分散処理の実行中を示している。
【０１２４】
通信装置１０１＃０は、無線による分散処理の接続要求を送信する（ステップＳ１８０１）。通信装置１０１＃１は、接続要求を受信する（ステップＳ１８０２）。具体的には、通信装置１０１＃０は図８にて示したイベントＩＤ“４”を送信し、通信装置１０１＃１はイベントＩＤ“４”の受信により、分散処理の接続要求の受信があったことを認識する。
【０１２５】
また、通信装置１０１＃０は、イベントＩＤと併せて、分散処理を行うプロセスの情報として、装置ＩＤと共有メモリサイズを送信してもよい。装置ＩＤとは装置固有のＩＤであり、たとえば、ＭＡＣ（Ｍｅｄｉａ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌ）アドレスや装置の製造番号などである。共有メモリサイズとは、分散処理を行うプロセスが使用する共有メモリのサイズである。このサイズに基づいて、通信装置１０１＃１は共有メモリの確保する領域の大きさを設定する。
【０１２６】
接続要求を受信した通信装置１０１＃１は、接続要求を許可するかを判断する（ステップＳ１８０３）。なお、通信装置１０１＃１は常に接続要求を許可してもよいし、通信装置１０１＃１の状態によって判断してもよい。たとえば、通信装置１０１＃１は、現在実行されているプロセス数が一定以上であれば負荷が過大であるとして接続要求を許可しないと判断してもよい。または、通信装置１０１＃１は、ステップＳ１８０１にて受信したプロセスデータのうち装置ＩＤと通信装置１０１＃１に既に登録されていたＩＤとを比較し、一致した場合に接続要求を許可してもよい。または、通信装置１０１＃１は、受信した接続要求をディスプレイ１０８＃１に表示し、ユーザによる接続要求の許可を受け付けてもよい。
【０１２７】
接続要求を許可しない場合（ステップＳ１８０３：Ｎｏ）、通信装置１０１＃１は、接続ＮＧを通信装置１０１＃０に送信し（ステップＳ１８０４）、分散開始処理を終了する。接続要求を許可する場合（ステップＳ１８０３：Ｙｅｓ）、通信装置１０１＃１は、自装置が生成したデータを接続先の装置に共有させるためのデータ領域および接続先の装置が生成したデータを自装置が共有するためのデータ領域を確保する（ステップＳ１８０５）。具体的には、通信装置１０１＃１は、自装置が生成したデータを接続先の装置に共有させるためのデータ領域としてデータ領域１１０１＃１＿１を確保し、接続先の装置が生成したデータを自装置が共有するためのデータ領域として１１０１＃０＿１を確保する。
【０１２８】
確保後、通信装置１０１＃１は、確保したデータ領域を共有データ領域として設定し（ステップＳ１８０６）、接続ＯＫを通信装置１０１＃１に送信し（ステップＳ１８０７）、分散処理を実行する（ステップＳ１８０８）。分散処理の詳細については、図１９にて後述する。
【０１２９】
ステップＳ１８０４、ステップＳ１８０７にて応答を受けた通信装置１０１＃０は、接続結果を判断する（ステップＳ１８０９）。接続結果が接続ＮＧである場合（ステップＳ１８０９：ＮＧ）、通信装置１０１＃０は、無線による接続を切断し（ステップＳ１８１６）、分散開始処理を終了する。まだ応答がない場合（ステップＳ１８０９：応答待ち）、通信装置１０１＃０は、一定時間後再びステップＳ１８０９の処理を実行する。
【０１３０】
接続結果が接続ＯＫの場合（ステップＳ１８０９：ＯＫ）、通信装置１０１＃０は、自装置が生成したデータを接続先の装置に共有させるためのデータ領域および接続先の装置が生成したデータを自装置が共有するためのデータ領域を確保する（ステップＳ１８１０）。具体的には、通信装置１０１＃０は、自装置が生成したデータを接続先の装置に共有させるためのデータ領域としてデータ領域１１０１＃０＿０を確保し、接続先の装置が生成したデータを自装置が共有するためのデータ領域としてデータ領域１１０１＃１＿０を確保する。
【０１３１】
確保後、通信装置１０１＃０は、確保したデータ領域を共有データ領域として設定し（ステップＳ１８１１）、分散処理を実行する（ステップＳ１８１２）。分散処理の終了後、通信装置１０１＃０は、接続の切断を通知し（ステップＳ１８１３）、共有データ領域を解放し（ステップＳ１８１５）、ステップＳ１８１６の処理に移行後、分散終了処理を終了する。具体的には、通信装置１０１＃０は図８にて示したイベントＩＤ“１”を送信し、通信装置１０１＃１はイベントＩＤ“１”の受信により、接続の切断に関する通知の受信があったことを認識する。
【０１３２】
分散処理の終了後、またはステップＳ１８１３の処理にて切断の通知を受けた通信装置１０１＃１は、共有データ領域を解放し（ステップＳ１８１４）、分散終了処理を終了する。
【０１３３】
図１９Ａ〜図１９Ｄは、実施の形態２にかかる分散処理を示すフローチャートである。分散処理は、通信装置１０１＃０でも通信装置１０１＃１でも行われる。図１９Ａ〜図１９Ｄでは、通信装置１０１＃０での分散処理におけるフローチャートを説明する。
【０１３４】
図１９Ａは、分散処理にて接続が継続中であり、アクセスの種類が自装置に関するアクセスについてのフローチャートを示している。通信装置１０１＃０は、分散処理の終了要求を検出したかを判断する（ステップＳ１９０１）。終了要求を検出した場合（ステップＳ１９０１：Ｙｅｓ）、通信装置１０１＃０は、分散処理を終了する。具体的に、通信装置１０１＃０が分散処理の終了要求を検出する場合としては、たとえば、通信装置１０１＃０が一定時間以上通信装置１０１＃０が操作されていない状態を検出した場合である。または、ユーザにより分散処理の終了要求が発行され、通信装置１０１＃０が終了要求を検出した場合であってもよい。
【０１３５】
分散処理の終了を検出していない場合（ステップＳ１９０１：Ｎｏ）、通信装置１０１＃０は、無線による接続が継続されているかを判断する（ステップＳ１９０２）。接続が継続されている場合（ステップＳ１９０２：Ｙｅｓ）、通信装置１０１＃０は、再び分散処理の終了要求を検出したかを判断する（ステップＳ１９０３）。終了要求を検出した場合（ステップＳ１９０３：Ｙｅｓ）、通信装置１０１＃０は、分散処理を終了する。
【０１３６】
分散処理の終了要求を検出していない場合（ステップＳ１９０３：Ｎｏ）、通信装置１０１＃０は、メモリアクセスの発生を検出したかを判断する（ステップＳ１９０４）。メモリアクセスの発生を検出していない場合（ステップＳ１９０４：Ｎｏ）、通信装置１０１＃０は、ステップＳ１９０１の処理に移行する。メモリアクセスの発生を検出した場合（ステップＳ１９０４：Ｙｅｓ）、通信装置１０１＃０は、アクセスの種類を判断する（ステップＳ１９０５）。なお、アクセスの種類が自装置上か他装置上かの判断方法は、実施の形態１でのステップＳ１００３の処理と同一である。
【０１３７】
アクセスの種類が自装置上のプロセス固有のデータへのリードアクセスである場合（ステップＳ１９０５：（１））、通信装置１０１＃０は、自装置のメモリを読み込み（ステップＳ１９０６）、ステップＳ１９０１の処理に移行する。アクセスの種類が自装置上のプロセス固有のデータへのライトアクセスである場合（ステップＳ１９０５：（２））、通信装置１０１＃０は、書き込み後、更新した値を通信ドライバ２０５＃０を介して、通信装置１０１＃１に転送する（ステップＳ１９０７）。
【０１３８】
転送後、通信ドライバ２０５＃０を介してデータ転送を受けた通信装置１０１＃１は、メモリドライバ２０４＃１を介して、対象のデータを転送された値に更新する（ステップＳ１９０８）。ステップＳ１９０７の処理により、通信装置１０１＃１は、コヒーレンシの実行を行ったことになる。具体的には、通信装置１０１＃０は図８にて示したイベントＩＤ“５”とアドレスと更新した値を送信し、通信装置１０１＃１はイベントＩＤ“５”により、併せて送信されている更新した値によるコヒーレンシの実行要求を受信したことを認識する。ステップＳ１９０７の処理にて値を転送した通信装置１０１＃０は、ステップＳ１９０１の処理に移行する。
【０１３９】
図１９Ｂは、分散処理にて接続が継続中であり、アクセスの種類が他装置のリードアクセスについてのフローチャートを示している。アクセスの種類が他装置上のプロセス固有のデータへのリードアクセスである場合（ステップＳ１９０５：（３））、通信装置１０１＃０は、対象プロセスの実行状態を保存する（ステップＳ１９０９）。保存する内容として、通信装置１０１＃０は、プログラムカウンタを含むレジスタの中身を保存する。
【０１４０】
保存後、通信装置１０１＃０は、通信ドライバ２０５＃０を介して、通信装置１０１＃１から対象データの転送を要求する（ステップＳ１９１０）。具体的には、通信装置１０１＃０は図８にて示したイベントＩＤ“６”と対象データのアドレスを送信し、通信装置１０１＃１はイベントＩＤ“６”の受信により、対象データの転送要求の受信があったことを認識する。
【０１４１】
対象データの転送を要求後、通信装置１０１＃０は、自装置の共有データ領域から対象データを読み込み、対象プロセスを実行する（ステップＳ１９１１）。対象データを受信する前に処理を実行するため、ステップＳ１９１１の処理は投機実行したことになる。投機実行中に自装置上のプロセス固有のデータに関して、ライトアクセスにより値が更新されるデータが発生した場合、共有データ領域とは異なる別の領域に新しい値を保存し、その後の投機実行処理では、別の領域に保存した値を実行中のデータとして使用する。
【０１４２】
通信装置１０１＃０は、対象プロセスの投機実行中に対象データを受信する（ステップＳ１９１２）と、自装置から読み込んだ値と通信装置１０１＃１から受信した値が一致するかを判断する（ステップＳ１９１３）。自装置から読み込んだ値と受信した値が一致する場合（ステップＳ１９１３：Ｙｅｓ）、投機実行が成功したことになり、通信装置１０１＃０は、対象プロセスに関する別の領域に保存して実行中のデータを共有データ領域にコピーする（ステップＳ１９１４）。コピー後、通信装置１０１＃０は、別の領域に保存してあった実行状態を破棄する（ステップＳ１９１５）。破棄後、通信装置１０１＃０は、対象プロセスの処理を継続し（ステップＳ１９１６）、ステップＳ１９０１の処理に移行する。
【０１４３】
自装置から読み込んだ値と受信した値が不一致である場合（ステップＳ１９１３：Ｎｏ）、投機実行が失敗したことになり、通信装置１０１＃０は、対象プロセスに関する別の領域に保存して実行中のデータを破棄する（ステップＳ１９１７）。また、通信装置１０１＃０は、保存していた実行状態に復帰し（ステップＳ１９１８）、対象プロセスの処理を再開し、ステップＳ１９０１の処理に移行する。
【０１４４】
図１９Ｃは、分散処理にて接続が遮断されている状態についてのフローチャートを示している。接続が継続されていない場合（ステップＳ１９０２：Ｎｏ）、通信装置１０１＃０は、分散処理の終了要求を検出したかを判断する（ステップＳ１９２０）。終了要求を検出した場合（ステップＳ１９２０：Ｙｅｓ）、通信装置１０１＃０は、分散処理を終了する。終了要求を検出していない場合（ステップＳ１９２０：Ｎｏ）、通信装置１０１＃０は、再接続されたかを判断する（ステップＳ１９２１）。再接続されていない場合（ステップＳ１９２１：Ｎｏ）、通信装置１０１＃０は、メモリアクセスの発生を検出したかを判断する（ステップＳ１９２２）。
【０１４５】
メモリアクセスの発生を検出していない場合（ステップＳ１９２２：Ｎｏ）、通信装置１０１＃０は、ステップＳ１９２０の処理に移行する。メモリアクセスの発生を検出した場合（ステップＳ１９２２：Ｙｅｓ）、通信装置１０１＃０は、アクセスの種類を判断する（ステップＳ１９２３）。アクセスの種類が自装置上のプロセス固有のデータへのリードアクセスである場合（ステップＳ１９２３：（１））、通信装置１０１＃０は、自装置のメモリを読み込み（ステップＳ１９２４）、ステップＳ１９２０の処理に移行する。
【０１４６】
アクセスの種類が自装置上のプロセス固有のデータへのライトアクセスである場合（ステップＳ１９２３：（２））、通信装置１０１＃０は、書き込み後、ライトアクセスをＩ／Ｏログ１４０１＃０に記録する（ステップＳ１９２５）。記録後、通信装置１０１＃０は、ステップＳ１９２０の処理に移行する。
【０１４７】
アクセスの種類が他装置上のプロセス固有のデータへのリードアクセスである場合（ステップＳ１９２３：（３））、通信装置１０１＃０は、他に実行可能なプロセスが存在するかを判断する（ステップＳ１９２６）。他に実行可能なプロセスが存在する場合（ステップＳ１９２６：Ｙｅｓ）、通信装置１０１＃０は、実行可能なプロセスにスイッチし（ステップＳ１９２７）、ステップＳ１９２０の処理に移行する。
【０１４８】
図１９Ｄは、分散処理にて接続が遮断された後、再接続された状態についてのフローチャートを示している。他に実行可能なプロセスが存在しない場合（ステップＳ１９２６：Ｎｏ）、通信装置１０１＃０は、再接続を実行する（ステップＳ１９２８）。具体的には、通信装置１０１＃０は、一定時間後に再接続を実行してもよいし、利用者からの要求によって再接続を実行してもよい。
【０１４９】
再接続を実行後、通信装置１０１＃０はＯＳ２０３＃０によって低電力モードに移行し（ステップＳ１９２９）、再接続待ち状態に遷移する。状態遷移後、通信装置１０１＃０は、再接続されたか否かを判断する（ステップＳ１９３０）。再接続されていない場合（ステップＳ１９３０：Ｎｏ）、通信装置１０１＃０は、一定時間後にステップＳ１９３０の処理を実行する。再接続した場合（ステップＳ１９３０：Ｙｅｓ）、通信装置１０１＃０は、低電力モードを解除し、通常モードへ移行する（ステップＳ１９３１）。
【０１５０】
通常モードへ移行後、または再接続された場合（ステップＳ１９２１：Ｙｅｓ）、通信装置１０１＃０は、Ｉ／Ｏログ１４０１＃０が存在するかを判断する（ステップＳ１９３２）。なお、Ｉ／Ｏログ１４０１＃０は、ステップＳ１９２５の処理が実行されることで生成される。Ｉ／Ｏログ１４０１＃０が存在する場合（ステップＳ１９３２：Ｙｅｓ）、通信装置１０１＃０は、Ｉ／Ｏログ１４０１＃０を通信装置１０１＃１に送信する（ステップＳ１９３３）。具体的には、通信装置１０１＃０は図８にて示したイベントＩＤ“７”とＩ／Ｏログ１４０１＃０を送信し、通信装置１０１＃１はイベントＩＤ“７”の受信により、Ｉ／Ｏログの受信があったことを認識する。
【０１５１】
Ｉ／Ｏログ１４０１＃０の送信後、またはＩ／Ｏログ１４０１＃０が存在しない場合（ステップＳ１９３２：Ｎｏ）、通信装置１０１＃０は、接続先の通信装置１０１＃１からＩ／Ｏログ１４０１＃１を読み込み、コヒーレンシを実行する（ステップＳ１９３４）。具体的には、通信装置１０１＃０は、イベントＩＤ“７”の受信により、Ｉ／Ｏログの受信を認識し、Ｉ／Ｏログ１４０１＃１の値を、データ２０２＃１＿０の対応する箇所へ更新することで、データ２０２＃１＿０のコヒーレンシを実行する。コヒーレンシの実行後、通信装置１０１＃０は、対象プロセスの処理を再開し（ステップＳ１９３５）、ステップＳ１９０１の処理に移行する。
【０１５２】
以上説明したように、実施の形態２にかかる通信装置、通信方法、および通信プログラムによれば、実施の形態１の通信装置からさらに、プロセスによる自装置のメモリへの書き込み結果を他装置に送信し、他装置にコヒーレンシを実行させる。これにより、複数の通信装置のメモリ内容が整合性の取れた状態を維持することができる。
【０１５３】
また、実施の形態２にかかる通信装置は、通信状態が遮断された状態から接続された状態に遷移した場合、遮断された状態の間に行われたプロセスによる自装置のメモリへの書き込み結果を他装置に送信し、他装置にコヒーレンシを実行させる。これにより、通信装置は、通信が一旦遮断した際にも、接続先の端末が生成するデータへのアクセスを行うまで処理を継続することが可能となるため、通信装置のスループット低下を避けることが可能となる。また、通信装置は、共有データへのＩ／Ｏログを取るために、再接続時に処理をその時点から再開することが可能となるため、実行時の性能をより保証することが可能となる。
【０１５４】
また、実施の形態２にかかる通信装置は、プロセスから他装置のメモリへの読み込む要求が発行された場合、他装置にメモリの値を要求しつつ、既に自装置に書き込んであったメモリの値を参照してプロセスを続行してもよい。これにより、通信装置は、既に自装置に書き込んであった値を利用して投機実行を行うことができる。投機実行が成功することにより、他装置からのメモリの値の受信を待つことなくプロセスを実行することができ、処理を高速化することができる。
【０１５５】
また、実施の形態２にかかる通信装置は、他装置からコヒーレンシの実行要求を受信した場合、他装置のメモリの読み込み結果として自装置のメモリに書き込んでもよい。これにより、通信装置は、既に自装置に書き込まれた他装置のメモリの読み込み結果について整合性が取れた状態を維持することができる。したがって、投機実行が成功する可能性が大きい。
【０１５６】
また、実施の形態２にかかる通信装置は、通信状態が遮断された後、他装置のメモリを読み込む場合にプロセスを停止し、通信状態が再接続された場合、プロセスの停止を解除してもよい。これにより、通信装置は、通信状態の遮断中に要求される処理能力が低下するため、クロック周波数の低下などを行うことで省電力効果を得ることができる。
【０１５７】
なお、本実施の形態１、実施の形態２で説明した通信方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーションなどのコンピュータで実行することにより実現することができる。本通信プログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤなどのコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本通信プログラムは、インターネットなどのネットワークを介して配布してもよい。
【符号の説明】
【０１５８】
１０１＃０、１０１＃１  通信装置
１０２＃０、１０２＃１  ＣＰＵ
１０９＃０、１０９＃１  Ｉ／Ｆ
１１１＃０、１１１＃１  バス
２０１＃０、２０１＃１  ＭＥＭ
３０１  検出部
３０２  判断部
３０３  制御部
３０４  アクセス部
３０５  通信部
３０６  通信部
３０７  アクセス部
３０８  停止部
１３０１  検出部
１３０２  判断部
１３０３  制御部
１３０４  アクセス部
１３０５  通信部
１３０６  通信部
１３０７  アクセス部
１３０８  実行部
【図１】
0005403160.tif 000002
【図２】
0005403160.tif 000003
【図３】
0005403160.tif 000004
【図４】
0005403160.tif 000005
【図５】
0005403160.tif 000006
【図６】
0005403160.tif 000007
【図７】
0005403160.tif 000008
【図８】
0005403160.tif 000009
【図９】
0005403160.tif 000010
【図１０】
0005403160.tif 000011
【図１１】
0005403160.tif 000012
【図１２】
0005403160.tif 000013
【図１３】
0005403160.tif 000014
【図１４】
0005403160.tif 000015
【図１５】
0005403160.tif 000016
【図１６】
0005403160.tif 000017
【図１７】
0005403160.tif 000018
【図１８】
0005403160.tif 000019
【図１９Ａ】
0005403160.tif 000020
【図１９Ｂ】
0005403160.tif 000021
【図１９Ｃ】
0005403160.tif 000022
【図１９Ｄ】
0005403160.tif 000023