(57)【特許請求の範囲】
【請求項１】
第１オペレーティング・システムから前記第１オペレーティング・システムとは異なる第２オペレーティング・システムで管理するハードウェア・デバイスへデータを転送するためのデータ転送命令が、前記第１オペレーティング・システムに対して発行された場合に、前記データ転送命令による転送対象のデータを、前記第１オペレーティング・システム及び前記第２オペレーティング・システムが共有して使用する共有メモリの使用可能なサイズよりも小さいサイズの複数個の分割データに分割して、前記共有メモリに書き込む書込手段と、
前記書込手段で前記共有メモリに書き込まれた分割データが前記第２オペレーティング・システムにおいて読み出されて前記ハードウェア・デバイスに転送されるように、前記書込手段で前記分割データが前記共有メモリに書き込まれる毎に、前記分割データのデータサイズを転送サイズとして指定した分割データ転送コマンドを生成して前記第２オペレーティング・システムに対して発行する発行手段と、
を備えたデータ転送制御装置。
【請求項２】
第１オペレーティング・システムとは異なる第２オペレーティング・システムで管理するハードウェア・デバイスからデータを取得するためのデータ取得命令が、前記第１オペレーティング・システムに対して発行された場合に、前記第２オペレーティング・システムにおいて前記データ取得命令による取得対象のデータが、前記第１オペレーティング・システム及び前記第２オペレーティング・システムが共有して使用する共有メモリの使用可能なサイズよりも小さいサイズの複数個の分割データに分割されて、該分割データ毎に前記ハードウェア・デバイスから読み出されて前記共有メモリに書き込まれるように、該分割データのサイズを転送サイズとして指定した分割データ転送コマンドを生成し、該書き込まれた分割データが前記第１オペレーティング・システムにおいて読み出されるように、前記第２オペレーティング・システムに対して発行する発行手段と、
前記第２オペレーティング・システムにより前記分割データ転送コマンドに応じて前記共有メモリに書き込まれた分割データを前記共有メモリから読出して前記データ取得命令の発行元に転送する転送手段と、
を備えたデータ転送制御装置。
【請求項３】
前記取得対象のデータの前記共有メモリへの転送が終了した場合に、前記第２オペレーティング・システムに対して既に発行された未実行の前記分割データ転送コマンドの実行が中止されるように制御する制御手段と、
を更に備えた
請求項２に記載のデータ転送制御装置。
【請求項４】
前記発行手段は、前記第２オペレーティング・システム上で前記分割データ転送コマンドに応じたデータ転送動作を行うデバイスドライバの転送処理単位サイズの整数倍のサイズであって、前記共有メモリの使用可能なサイズよりも小さいサイズが転送サイズとして指定された分割データ転送コマンドを生成して前記第２オペレーティング・システムに対して発行する
請求項１〜請求項３のいずれか１項記載のデータ転送制御装置。
【請求項５】
前記第２オペレーティング・システム上で動作し、前記発行手段から発行された分割データ転送コマンドに応じてデータ転送動作を行うデバイスドライバを更に備えた
請求項１〜請求項４のいずれか１項記載のデータ転送制御装置。
【請求項６】
第１オペレーティング・システムから前記第１オペレーティング・システムとは異なる第２オペレーティング・システムで管理するハードウェア・デバイスへデータを転送するためのデータ転送命令が、前記第１オペレーティング・システムに対して発行された場合に、前記データ転送命令による転送対象のデータを、前記第１オペレーティング・システム及び前記第２オペレーティング・システムが共有して使用する共有メモリの使用可能なサイズよりも小さいサイズの複数個の第１分割データに分割して、前記共有メモリに書き込む書込手段と、
前記書込手段で前記共有メモリに書き込まれた第１分割データが前記第２オペレーティング・システムにおいて読み出されて前記ハードウェア・デバイスに転送されるように、前記書込手段で前記第１分割データが前記共有メモリに書き込まれる毎に、前記第１分割データのデータサイズを転送サイズとして指定した第１分割データ転送コマンドを生成して前記第２オペレーティング・システムに対して発行する第１発行手段と、
前記ハードウェア・デバイスからデータを取得するためのデータ取得命令が、前記第１オペレーティング・システムに対して発行された場合に、前記第２オペレーティング・システムにおいて前記データ取得命令による取得対象のデータが、前記共有メモリの使用可能なサイズよりも小さいサイズの複数個の第２分割データに分割されて、該第２分割データ毎に前記ハードウェア・デバイスから読み出されて前記共有メモリに書き込まれるように、該第２分割データのサイズを転送サイズとして指定した第２分割データ転送コマンドを生成し、該書き込まれた第２分割データが前記第１オペレーティング・システムにおいて読み出されるように、前記第２オペレーティング・システムに対して発行する第２発行手段と、
前記第２オペレーティング・システムにより前記第２分割データ転送コマンドに応じて前記共有メモリに書き込まれた第２分割データを前記共有メモリから読出して前記データ取得命令の発行元に転送する転送手段と、
を備えたデータ転送制御装置。
【請求項７】
前記第１発行手段は、前記第２オペレーティング・システム上で前記第１分割データ転送コマンドに応じたデータ転送動作を行うデバイスドライバの転送処理単位サイズの整数倍のサイズであって、前記共有メモリの使用可能なサイズよりも小さいサイズが転送サイズとして指定された第１分割データ転送コマンドを生成して前記第２オペレーティング・システムに対して発行し、
前記第２発行手段は、前記第２オペレーティング・システム上で前記第２分割データ転送コマンドに応じたデータ転送動作を行うデバイスドライバの転送処理単位サイズの整数倍のサイズであって、前記共有メモリの使用可能なサイズよりも小さいサイズが転送サイズとして指定された第２分割データ転送コマンドを生成して前記第２オペレーティング・システムに対して発行する
請求項６に記載のデータ転送制御装置。
【請求項８】
前記取得対象のデータの前記共有メモリへの転送が終了した場合に、前記第２オペレーティング・システムに対して既に発行された未実行の前記第２分割データ転送コマンドによりデータの転送が実行されないように制御する制御手段と、
を更に備えた
請求項６又は請求項７に記載のデータ転送制御装置。
【請求項９】
前記第２オペレーティング・システム上で動作し、前記第１発行手段から発行された第１分割データ転送コマンド及び前記第２発行手段から発行された第２分割データ転送コマンドに応じてデータ転送動作を行うデバイスドライバを更に備えた
請求項６〜請求項８のいずれか１項記載のデータ転送制御装置。
【請求項１０】
コンピュータを、
第１オペレーティング・システムから前記第１オペレーティング・システムとは異なる第２オペレーティング・システムで管理するハードウェア・デバイスへデータを転送するためのデータ転送命令が、前記第１オペレーティング・システムに対して発行された場合に、前記データ転送命令による転送対象のデータを、前記第１オペレーティング・システム及び前記第２オペレーティング・システムが共有して使用する共有メモリの使用可能なサイズよりも小さいサイズの複数個の分割データに分割して、前記共有メモリに書き込む書込手段、及び
前記書込手段で前記共有メモリに書き込まれた分割データが前記第２オペレーティング・システムにおいて読み出されて前記ハードウェア・デバイスに転送されるように、前記書込手段で前記分割データが前記共有メモリに書き込まれる毎に、前記分割データのデータサイズを転送サイズとして指定した分割データ転送コマンドを生成して前記第２オペレーティング・システムに対して発行する発行手段、
として機能させるためのプログラム。
【請求項１１】
コンピュータを、
第１オペレーティング・システムとは異なる第２オペレーティング・システムで管理するハードウェア・デバイスからデータを取得するためのデータ取得命令が、前記第１オペレーティング・システムに対して発行された場合に、前記第２オペレーティング・システムにおいて前記データ取得命令による取得対象のデータが、前記第１オペレーティング・システム及び前記第２オペレーティング・システムが共有して使用する共有メモリの使用可能なサイズよりも小さいサイズの複数個の分割データに分割されて、該分割データ毎に前記ハードウェア・デバイスから読み出されて前記共有メモリに書き込まれるように、該分割データのサイズを転送サイズとして指定した分割データ転送コマンドを生成し、該書き込まれた分割データが前記第１オペレーティング・システムにおいて読み出されるように、前記第２オペレーティング・システムに対して発行する発行手段、及び
前記第２オペレーティング・システムにより前記分割データ転送コマンドに応じて前記共有メモリに書き込まれた分割データを前記共有メモリから読出して前記データ取得命令の発行元に転送する転送手段、
として機能させるためのプログラム。
【請求項１２】
コンピュータを、
第１オペレーティング・システムから前記第１オペレーティング・システムとは異なる第２オペレーティング・システムで管理するハードウェア・デバイスへデータを転送するためのデータ転送命令が、前記第１オペレーティング・システムに対して発行された場合に、前記データ転送命令による転送対象のデータを、前記第１オペレーティング・システム及び前記第２オペレーティング・システムが共有して使用する共有メモリの使用可能なサイズよりも小さいサイズの複数個の第１分割データに分割して、前記共有メモリに書き込む書込手段、
前記書込手段で前記共有メモリに書き込まれた第１分割データが前記第２オペレーティング・システムにおいて読み出されて前記ハードウェア・デバイスに転送されるように、前記書込手段で前記第１分割データが前記共有メモリに書き込まれる毎に、前記第１分割データのデータサイズを転送サイズとして指定した第１分割データ転送コマンドを生成して前記第２オペレーティング・システムに対して発行する第１発行手段、
前記ハードウェア・デバイスからデータを取得するためのデータ取得命令が、前記第１オペレーティング・システムに対して発行された場合に、前記第２オペレーティング・システムにおいて前記データ取得命令による取得対象のデータが、前記共有メモリの使用可能なサイズよりも小さいサイズの複数個の第２分割データに分割されて、該第２分割データ毎に前記ハードウェア・デバイスから読み出されて前記共有メモリに書き込まれるように、該第２分割データのサイズを転送サイズとして指定した第２分割データ転送コマンドを生成し、該書き込まれた第２分割データが前記第１オペレーティング・システムにおいて読み出されるように、前記第２オペレーティング・システムに対して発行する第２発行手段、及び
前記第２オペレーティング・システムにより前記第２分割データ転送コマンドに応じて前記共有メモリに書き込まれた第２分割データを前記共有メモリから読出して前記データ取得命令の発行元に転送する転送手段、
として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ転送制御装置及びプログラムに関する。
【背景技術】
【０００２】
特許文献１には、共有メモリと割り込みを用いてプロセッサ間通信を行い、通信先のプロセッサ割り込み手段でオペレーティング・システム（ＯＳ）のシステムコールを発行し、その処理結果を別のプロセッサ間通信で通信元に通知する技術が開示されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平３−４２７６２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
本発明は、共有メモリのサイズに制限があっても、異なるＯＳ間で効率的にデータ転送を行うことができるデータ転送制御装置及びプログラムを得ることを目的とする。
【課題を解決するための手段】
【０００５】
請求項１の発明は、第１オペレーティング・システムから前記第１オペレーティング・システムとは異なる第２オペレーティング・システムで管理するハードウェア・デバイスへデータを転送するためのデータ転送命令が、前記第１オペレーティング・システムに対して発行された場合に、前記データ転送命令による転送対象のデータを、前記第１オペレーティング・システム及び前記第２オペレーティング・システムが共有して使用する共有メモリの使用可能なサイズよりも小さいサイズの複数個の分割データに分割して、前記共有メモリに書き込む書込手段と、前記書込手段で前記共有メモリに書き込まれた分割データが前記第２オペレーティング・システムにおいて読み出されて前記ハードウェア・デバイスに転送されるように、前記書込手段で前記分割データが前記共有メモリに書き込まれる毎に、前記分割データのデータサイズを転送サイズとして指定した分割データ転送コマンドを生成して前記第２オペレーティング・システムに対して発行する発行手段と、を備えたデータ転送制御装置である。
【０００６】
請求項２の発明は、第１オペレーティング・システムとは異なる第２オペレーティング・システムで管理するハードウェア・デバイスからデータを取得するためのデータ取得命令が、前記第１オペレーティング・システムに対して発行された場合に、前記第２オペレーティング・システムにおいて前記データ取得命令による取得対象のデータが、前記第１オペレーティング・システム及び前記第２オペレーティング・システムが共有して使用する共有メモリの使用可能なサイズよりも小さいサイズの複数個の分割データに分割されて、該分割データ毎に前記ハードウェア・デバイスから読み出されて前記共有メモリに書き込まれるように、該分割データのサイズを転送サイズとして指定した分割データ転送コマンドを生成し、該書き込まれた分割データが前記第１オペレーティング・システムにおいて読み出されるように、前記第２オペレーティング・システムに対して発行する発行手段と、前記第２オペレーティング・システムにより前記分割データ転送コマンドに応じて前記共有メモリに書き込まれた分割データを前記共有メモリから読出して前記データ取得命令の発行元に転送する転送手段と、を備えたデータ転送制御装置である。
【０００７】
請求項３の発明は、請求項２に記載のデータ転送制御装置において、前記取得対象のデータの前記共有メモリへの転送が終了した場合に、前記第２オペレーティング・システムに対して既に発行された未実行の前記分割データ転送コマンドの実行が中止されるように制御する制御手段と、を更に備えている。
【０００８】
請求項４の発明は、請求項１〜請求項３のいずれか１項記載のデータ転送制御装置において、前記発行手段は、前記第２オペレーティング・システム上で前記分割データ転送コマンドに応じたデータ転送動作を行うデバイスドライバの転送処理単位サイズの整数倍のサイズであって、前記共有メモリの使用可能なサイズよりも小さいサイズが転送サイズとして指定された分割データ転送コマンドを生成して前記第２オペレーティング・システムに対して発行するものである。
【０００９】
請求項５の発明は、請求項１〜請求項４のいずれか１項記載のデータ転送制御装置において、前記第２オペレーティング・システム上で動作し、前記発行手段から発行された分割データ転送コマンドに応じてデータ転送動作を行うデバイスドライバを更に備えている。
【００１０】
請求項６の発明は、第１オペレーティング・システムから前記第１オペレーティング・システムとは異なる第２オペレーティング・システムで管理するハードウェア・デバイスへデータを転送するためのデータ転送命令が、前記第１オペレーティング・システムに対して発行された場合に、前記データ転送命令による転送対象のデータを、前記第１オペレーティング・システム及び前記第２オペレーティング・システムが共有して使用する共有メモリの使用可能なサイズよりも小さいサイズの複数個の第１分割データに分割して、前記共有メモリに書き込む書込手段と、前記書込手段で前記共有メモリに書き込まれた第１分割データが前記第２オペレーティング・システムにおいて読み出されて前記ハードウェア・デバイスに転送されるように、前記書込手段で前記第１分割データが前記共有メモリに書き込まれる毎に、前記第１分割データのデータサイズを転送サイズとして指定した第１分割データ転送コマンドを生成して前記第２オペレーティング・システムに対して発行する第１発行手段と、前記ハードウェア・デバイスからデータを取得するためのデータ取得命令が、前記第１オペレーティング・システムに対して発行された場合に、前記第２オペレーティング・システムにおいて前記データ取得命令による取得対象のデータが、前記共有メモリの使用可能なサイズよりも小さいサイズの複数個の第２分割データに分割されて、該第２分割データ毎に前記ハードウェア・デバイスから読み出されて前記共有メモリに書き込まれるように、該第２分割データのサイズを転送サイズとして指定した第２分割データ転送コマンドを生成し、該書き込まれた第２分割データが前記第１オペレーティング・システムにおいて読み出されるように、前記第２オペレーティング・システムに対して発行する第２発行手段と、前記第２オペレーティング・システムにより前記第２分割データ転送コマンドに応じて前記共有メモリに書き込まれた第２分割データを前記共有メモリから読出して前記データ取得命令の発行元に転送する転送手段と、を備えたデータ転送制御装置である。
【００１１】
請求項７の発明は、請求項６に記載のデータ転送制御装置において、前記第１発行手段は、前記第２オペレーティング・システム上で前記第１分割データ転送コマンドに応じたデータ転送動作を行うデバイスドライバの転送処理単位サイズの整数倍のサイズであって、前記共有メモリの使用可能なサイズよりも小さいサイズが転送サイズとして指定された第１分割データ転送コマンドを生成して前記第２オペレーティング・システムに対して発行し、前記第２発行手段は、前記第２オペレーティング・システム上で前記第２分割データ転送コマンドに応じたデータ転送動作を行うデバイスドライバの転送処理単位サイズの整数倍のサイズであって、前記共有メモリの使用可能なサイズよりも小さいサイズが転送サイズとして指定された第２分割データ転送コマンドを生成して前記第２オペレーティング・システムに対して発行する。
【００１２】
請求項８の発明は、請求項６又は請求項７に記載のデータ転送制御装置において、前記取得対象のデータの前記共有メモリへの転送が終了した場合に、前記第２オペレーティング・システムに対して既に発行された未実行の前記第２分割データ転送コマンドによりデータの転送が実行されないように制御する制御手段と、を更に備えている。
【００１３】
請求項９の発明は、請求項６〜請求項８のいずれか１項記載のデータ転送制御装置において、前記第２オペレーティング・システム上で動作し、前記第１発行手段から発行された第１分割データ転送コマンド及び前記第２発行手段から発行された第２分割データ転送コマンドに応じてデータ転送動作を行うデバイスドライバを更に備えている。
【００１４】
請求項１０の発明は、コンピュータを、第１オペレーティング・システムから前記第１オペレーティング・システムとは異なる第２オペレーティング・システムで管理するハードウェア・デバイスへデータを転送するためのデータ転送命令が、前記第１オペレーティング・システムに対して発行された場合に、前記データ転送命令による転送対象のデータを、前記第１オペレーティング・システム及び前記第２オペレーティング・システムが共有して使用する共有メモリの使用可能なサイズよりも小さいサイズの複数個の分割データに分割して、前記共有メモリに書き込む書込手段、及び前記書込手段で前記共有メモリに書き込まれた分割データが前記第２オペレーティング・システムにおいて読み出されて前記ハードウェア・デバイスに転送されるように、前記書込手段で前記分割データが前記共有メモリに書き込まれる毎に、前記分割データのデータサイズを転送サイズとして指定した分割データ転送コマンドを生成して前記第２オペレーティング・システムに対して発行する発行手段、として機能させるためのプログラムである。
【００１５】
請求項１１の発明は、コンピュータを、第１オペレーティング・システムとは異なる第２オペレーティング・システムで管理するハードウェア・デバイスからデータを取得するためのデータ取得命令が、前記第１オペレーティング・システムに対して発行された場合に、前記第２オペレーティング・システムにおいて前記データ取得命令による取得対象のデータが、前記第１オペレーティング・システム及び前記第２オペレーティング・システムが共有して使用する共有メモリの使用可能なサイズよりも小さいサイズの複数個の分割データに分割されて、該分割データ毎に前記ハードウェア・デバイスから読み出されて前記共有メモリに書き込まれるように、該分割データのサイズを転送サイズとして指定した分割データ転送コマンドを生成し、該書き込まれた分割データが前記第１オペレーティング・システムにおいて読み出されるように、前記第２オペレーティング・システムに対して発行する発行手段、及び前記第２オペレーティング・システムにより前記分割データ転送コマンドに応じて前記共有メモリに書き込まれた分割データを前記共有メモリから読出して前記データ取得命令の発行元に転送する転送手段、として機能させるためのプログラムである。
【００１６】
請求項１２の発明は、コンピュータを、第１オペレーティング・システムから前記第１オペレーティング・システムとは異なる第２オペレーティング・システムで管理するハードウェア・デバイスへデータを転送するためのデータ転送命令が、前記第１オペレーティング・システムに対して発行された場合に、前記データ転送命令による転送対象のデータを、前記第１オペレーティング・システム及び前記第２オペレーティング・システムが共有して使用する共有メモリの使用可能なサイズよりも小さいサイズの複数個の第１分割データに分割して、前記共有メモリに書き込む書込手段、前記書込手段で前記共有メモリに書き込まれた第１分割データが前記第２オペレーティング・システムにおいて読み出されて前記ハードウェア・デバイスに転送されるように、前記書込手段で前記第１分割データが前記共有メモリに書き込まれる毎に、前記第１分割データのデータサイズを転送サイズとして指定した第１分割データ転送コマンドを生成して前記第２オペレーティング・システムに対して発行する第１発行手段、前記ハードウェア・デバイスからデータを取得するためのデータ取得命令が、前記第１オペレーティング・システムに対して発行された場合に、前記第２オペレーティング・システムにおいて前記データ取得命令による取得対象のデータが、前記共有メモリの使用可能なサイズよりも小さいサイズの複数個の第２分割データに分割されて、該第２分割データ毎に前記ハードウェア・デバイスから読み出されて前記共有メモリに書き込まれるように、該第２分割データのサイズを転送サイズとして指定した第２分割データ転送コマンドを生成し、該書き込まれた第２分割データが前記第１オペレーティング・システムにおいて読み出されるように、前記第２オペレーティング・システムに対して発行する第２発行手段、及び前記第２オペレーティング・システムにより前記第２分割データ転送コマンドに応じて前記共有メモリに書き込まれた第２分割データを前記共有メモリから読出して前記データ取得命令の発行元に転送する転送手段、として機能させるためのプログラムである。
【発明の効果】
【００１７】
請求項１に記載の発明によれば、共有メモリのサイズに制限があっても、異なるＯＳ間で効率的にデータ転送を行うことができる。
【００１８】
請求項２に記載の発明によれば、共有メモリのサイズに制限があっても、異なるＯＳ間で効率的にデータ転送を行うことができる。
【００１９】
請求項３に記載の発明によれば、不要なコマンドの発行による存在しないデータの読み込み待ち状態がデータ転送装置で発生することを防止できる。
【００２０】
請求項４に記載の発明によれば、分割データの転送サイズがデバイスドライバの転送処理単位サイズの整数倍のサイズでない場合に比べて、効率的に転送することができる。
【００２１】
請求項５に記載の発明によれば、共有メモリのサイズに制限があっても、異なるＯＳ間で効率的にデータ転送を行うことができる。
【００２２】
請求項６に記載の発明によれば、共有メモリのサイズに制限があっても、異なるＯＳ間で効率的にデータ転送を行うことができる。
【００２３】
請求項７に記載の発明によれば、第１及び第２分割データの転送サイズがデバイスドライバの転送処理単位サイズの整数倍のサイズでない場合に比べて、効率的に転送することができる。
【００２４】
請求項８に記載の発明によれば、不要なコマンドの発行による存在しないデータの読み込み待ち状態がデータ転送装置で発生することを防止できる。
【００２５】
請求項９に記載の発明によれば、共有メモリのサイズに制限があっても、異なるＯＳ間で本構成を有しない場合に比べて効率的にデータ転送を行うことができる。
【００２６】
請求項１０に記載の発明によれば、共有メモリのサイズに制限があっても、異なるＯＳ間で効率的にデータ転送を行うことができる。
【００２７】
請求項１１に記載の発明によれば、共有メモリのサイズに制限があっても、異なるＯＳ間で効率的にデータ転送を行うことができる。
【００２８】
請求項１２に記載の発明によれば、共有メモリのサイズに制限があっても、異なるＯＳ間で効率的にデータ転送を行うことができる。
【図面の簡単な説明】
【００２９】
【図１】実施の形態に係る画像形成装置の構成図である。
【図２】第１制御部の第１ＯＳのアプリケーションと、第２ＯＳで制御される第２制御部のインタフェースとの間でデータ転送を行う場合の動作に着目したときの、第１制御部の第１ＯＳ上で動作するソフトウェア構成図及び第２制御部の第２ＯＳ上で動作するソフトウェア構成図である。
【図３】第１制御部の第１ＯＳ側で動作するＨＷ非依存デバイスドライバに対して、アプリケーションからライト命令が発行された場合に、該ＨＷ非依存デバイスドライバで行われる処理ルーチンを示すフローチャートである。
【図４】第１制御部の第１ＯＳ側で動作するＨＷ非依存デバイスドライバに対して、アプリケーションからライト命令が発行された場合に、該ＨＷ非依存デバイスドライバ３４で行われる処理ルーチンを示すフローチャートである。
【図５】第２制御部の第２ＯＳ側のＯＳ間通信モジュールが第１ＯＳ側のＯＳ間通信モジュールからコマンドを受信した場合のコマンド受信処理の処理ルーチンを示すフローチャートである。
【図６】ＯＳ間共有メモリの利用形態の一例である。
【図７】（Ａ）は、ＯＳ間通信モジュールにより生成されるデータ転送コマンド（ライトコマンド、リードコマンド）のフォーマットの一例を示す図であり、（Ｂ）は、ＯＳ間通信モジュールにより生成されるデータ転送終了メッセージ（ライト終了、リード終了）のフォーマットの一例を示す図である。
【図８】ライト処理時の転送対象のデータのサイズが、ＯＳ間共有メモリの使用可能なサイズより大きい場合のデータ転送状態を示す模式図である。
【図９】ライト処理時の転送対象のデータのサイズが、ＯＳ間共有メモリの使用可能なサイズより大きい場合のコマンド及びメッセージのタイミングチャートである。
【図１０】ライト処理時の転送対象のデータのサイズが、ＯＳ間共有メモリの使用可能なサイズ以下である場合のデータ転送状態を示す模式図である。
【図１１】ライト処理時の転送対象のデータのサイズが、ＯＳ間共有メモリの使用可能なサイズ以下である場合のコマンド及びメッセージのタイミングチャートである。
【図１２】図４に示す処理に代えて実行可能な処理を示すフローチャートである。
【図１３】第１制御部の第１ＯＳ側で動作するＨＷ非依存デバイスドライバに対して、アプリケーションからリード命令が発行された場合に、該ＨＷ非依存デバイスドライバで行われる処理ルーチンを示すフローチャートである。
【図１４】第１制御部の第１ＯＳ側で動作するＨＷ非依存デバイスドライバに対して、アプリケーションからリード命令が発行された場合に、該ＨＷ非依存デバイスドライバで行われる処理ルーチンを示すフローチャートである。
【図１５】リード処理時のアプリケーションの作業領域のサイズが、ＯＳ間共有メモリの使用可能なサイズより大きい場合のデータ転送状態を示す模式図である。
【図１６】リード処理時のアプリケーションの作業領域のサイズが、ＯＳ間共有メモリの使用可能なサイズ以下である場合のデータ転送状態を示す模式図である。
【図１７】第２制御部のＯＳ間通信モジュールで行われるリードコマンド処理の処理ルーチンを示すフローチャートである。
【図１８】リード処理時のアプリケーションの作業領域のサイズが、ＯＳ間共有メモリの使用可能なサイズより大きい場合のコマンド及びメッセージのタイミングチャートである。
【図１９】図１４に示す処理に代えて実行可能な処理を示すフローチャートである。
【発明を実施するための形態】
【００３０】
以下、図面を参照して本発明の実施の形態の一例を詳細に説明する。図１には本実施の形態に係る画像形成装置１０が示されている。画像形成装置１０には、画像形成装置１０の各部の動作を制御する第１制御部１２及び第２制御部１４と、セットされた読取対象の文書(紙原稿)を光学的に読み取って読取画像データを出力する画像読取部２０と、入力された画像データが表す画像を記録用紙上に形成する画像形成部２２と、ＬＣＤ等から成る表示部１８Ａ及びテンキーやタッチパネル等から成り利用者による操作を受付ける操作受付部１８Ｂが設けられた操作パネル１８と、ファクシミリ装置としての機能を備えた他の機器と電話線及び公衆通信網(図示省略)経由で画情報の送受信(ファクシミリ通信)を行う画情報送受信部２４と、ＰＣ(Personal Computer)等の情報処理装置とネットワークケーブル及びコンピュータネットワーク(図示省略)経由で情報の送受信を行うためのネットワーク通信制御部２６と、が設けられており、これらはバス２８を介して互いに接続されている。
【００３１】
第１制御部１２はマイクロコンピュータ等から成り、ＣＰＵ１２Ａ、メモリ１２Ｂ、ＨＤＤ(Hard Disk Drive)やフラッシュメモリ等から成る不揮発性の記憶部１２Ｃが設けられている。記憶部１２Ｃには、例えば、画像形成装置１０の利用者に対して画像形成装置１０の何らかの機能(例えば複写機能やファクシミリ送受信を行う機能等)を提供する処理を行うと共に、該機能を提供するための画面を表示部１８Ａに表示させる画面制御を行うアプリケーションのプログラムと、デバイスドライバに対するＡＰＩ(Application Programming interface)として機能する外部インタフェースのプログラムと、ハードウェア・デバイスを制御するためのデバイスドライバのプログラムと、これらプログラムを実行するためのプラットフォームとして機能するオペレーティング・システム(以下、第１ＯＳという)のプログラムと、が各々記憶されている。
【００３２】
第２制御部１４はマイクロコンピュータ等から成り、ＣＰＵ１４Ａ、メモリ１４Ｂ、ＨＤＤ(Hard Disk Drive)やフラッシュメモリ等から成る不揮発性の記憶部１４Ｃが設けられている。記憶部１４Ｃには、例えば、画像形成装置１０の利用者に対して画像形成装置１０の何らかの機能(例えば第１制御部で提供される機能とは異なる機能等)を提供する処理を行うと共に、該機能を提供するための画面を表示部１８Ａに表示させる画面制御を行うアプリケーションのプログラムと、デバイスドライバに対するＡＰＩ(Application Programming interface)として機能する外部インタフェースのプログラムと、ハードウェア・デバイスを制御するためのデバイスドライバのプログラムと、これらプログラムを実行するためのプラットフォームとして機能するオペレーティング・システム(以下、第２ＯＳという)のプログラムとが各々記憶されている。
【００３３】
更にまた、第２制御部１４には、第１制御部１２には設けられていないＵＳＢ(Universal Serial Bus)ポート等のインタフェース１４Ｄも設けられている。本実施の形態では、このインタフェース１４Ｄを介したデータ転送に着目して説明する。
【００３４】
なお、第２制御部１４の記憶部１４Ｃに記憶されているデバイスドライバのプログラムには、ハードウェア・デバイス（ここではインタフェースコントローラ込みのインタフェース１４Ｄ）に依存し、実際にインタフェース１４Ｄを制御する物理層としてのデバイスドライバ（以下、ＨＷ依存デバイスドライバ）のプログラムと、ハードウェア・デバイスに依存しない処理を行うインタフェース層及び論理層としてのデバイスドライバ（以下、ＨＷ非依存デバイスドライバ）のプログラムと、が含まれる。また、第１制御部１２の記憶部１２Ｃに記憶されているデバイスドライバは、（インタフェース１４Ｄに着目した場合）ＨＷ非依存デバイスドライバである。なお、第１制御部１２において、何らかのハードウェア・デバイスが装備されている場合には、該ハードウェア・デバイスに依存するＨＷ依存デバイスドライバのプログラムが当然に記憶部１２Ｃに記憶されているが、本実施の形態では前述したようにインタフェース１４Ｄに着目して説明するため、説明を省略する。
【００３５】
図２は、第１制御部１２の第１ＯＳのアプリケーション３０と、第２ＯＳで制御される第２制御部１４のインタフェース１４Ｄとの間でデータ転送を行う場合の動作に着目したときの、第１制御部１２の第１ＯＳ上で動作するソフトウェア構成図及び第２制御部１４の第２ＯＳ上で動作するソフトウェア構成図である。
【００３６】
図示されるように、第１制御部１２側は、上層から順に、アプリケーション３０、外部インタフェース３２、ハードウェア・デバイスに依存しないデバイスドライバ（ＨＷ非依存デバイスドライバ）３４、ＯＳ間通信モジュール３６の階層からなり、第２制御部１４側は、上層から順に、ＯＳ間通信モジュール４０、外部インタフェース４２、ＨＷ非依存デバイスドライバ４４、ハードウェア・デバイスに依存するデバイスドライバ（ＨＷ依存デバイスドライバ）４６の階層からなる。
【００３７】
アプリケーション３０、外部インタフェース３２、ＨＷ非依存デバイスドライバ３４、外部インタフェース４２、ＨＷ非依存デバイスドライバ４４、及びＨＷ依存デバイスドライバ４６は、前述した通りであるため説明を省略し、ここでは、ＯＳ間通信モジュール３６、及びＯＳ間通信モジュール４０について説明する。
【００３８】
ＯＳ間通信モジュール３６及びＯＳ間通信モジュール４０は、異なるＯＳ間同士で通信を行うときに使用されるモジュールであり、ＯＳ間通信モジュール３６は第１ＯＳの機能の一部として、ＯＳ間通信モジュール４０は第２ＯＳの機能の一部として設けられている。ＯＳ間通信のための技術としては一般的に知られている様々な技術を採用することができるが、本実施の形態では、第１ＯＳ及び第２ＯＳが共有するメモリ領域（ＯＳ間共有メモリ）を利用した通信を行うものとする。
【００３９】
なお、ＯＳ間共有メモリは、例えば、第１制御部１２のメモリ１２Ｂ内に設けられていてもよいし、第２制御部１４のメモリ１４Ｂ内に設けられていてもよく、特に限定されない。
【００４０】
図６に示すように、第１ＯＳから第２ＯＳに対するメッセージ或いはコマンドは、予め定められたメモリ領域、ここではＯＳ間共有メモリのＯＳ間通信メッセージ領域５０、に格納される。第１ＯＳのＯＳ間通信モジュール３６は、第２ＯＳに送信するメッセージ或いはコマンドをこのＯＳ間通信メッセージ領域５０に格納する。第２ＯＳのＯＳ間通信モジュール４０は、このＯＳ間通信メッセージ領域５０に格納されたメッセージ或いはコマンドを取り出す。
【００４１】
一方、第２ＯＳから第１ＯＳに対するメッセージ或いはコマンドは、予め定められたメモリ領域、ここでは、ＯＳ間共有メモリのＯＳ間通信メッセージ領域５４に格納される。ＯＳ間通信モジュール４０は、第１ＯＳに送信するメッセージ或いはコマンドをこのＯＳ間通信メッセージ領域５４に格納する。第１ＯＳのＯＳ間通信モジュール３６は、このＯＳ間通信メッセージ領域５４に格納されたメッセージ或いはコマンドを取り出す。
【００４２】
ところで、前述したようにインタフェース１４Ｄは第２ＯＳ側に設けられ第２ＯＳ側で管理されるが、第２ＯＳ側のインタフェース１４Ｄを制御するインタフェースコントローラ(USBコントローラなど)内のメモリ(FIFOなど)に対して第１ＯＳ側からデータを書き込んだり、インタフェース１４Ｄを制御するインタフェースコントローラ(USBコントローラなど)内のメモリ(FIFOなど)からデータを読み出して第１ＯＳ側で該データを取得したりするデータ転送が行われる場合がある。
【００４３】
こうしたデータ転送は、第１ＯＳ側のアプリケーション３０から出力される書込命令（以下、ライト命令）及び取得命令（以下、リード命令）に応じて行われる。
【００４４】
より具体的には、アプリケーション３０からライト命令が発行された場合には、転送対象のデータは、まず、ＨＷ非依存デバイスドライバ３４により一端ＯＳ間共有メモリに書き込まれ、第１ＯＳ側から第２ＯＳ側に対してＯＳ間通信によりライトコマンドが発行される。このライトコマンドを受けた第２ＯＳ側のＨＷ非依存デバイスドライバ４４が、該ＯＳ間共有メモリに書き込まれたデータを読み出し、このデータを、ＨＷ依存デバイスドライバ４６がＤＭＡ転送によりインタフェース１４Ｄを制御するインタフェースコントローラ(USBコントローラなど)内のメモリ(FIFOなど)に転送し書き込む。
【００４５】
また、アプリケーション３０からリード命令が発行された場合には、まず、第１ＯＳ側から第２ＯＳ側に対してＯＳ間通信によりリードコマンドが発行される。第２ＯＳ側のＨＷ依存デバイスドライバ４６は、リードコマンドに応じて、ＤＭＡ転送によりインタフェース１４Ｄを制御するインタフェースコントローラ(USBコントローラなど)内のメモリ(FIFOなど)にＤＭＡを起動してデータを読み出す。読み出されたデータは、ＨＷ非依存デバイスドライバ４４がＯＳ間共有メモリに書き込み、第１ＯＳ側のＨＷ非依存デバイスドライバ３４が、該ＯＳ間共有メモリに書き込まれたデータを読み出して、アプリケーション３０に転送する。
【００４６】
ここで、ライト処理時のコマンド等の流れを図２を用いて説明する。
【００４７】
アプリケーション３０は、外部インタフェース３２を介してＨＷ非依存デバイスドライバ３４にライト命令を発行する、ＨＷ非依存デバイスドライバ３４は、発行されたライト命令に従って、第２ＯＳ側にライトコマンドを発行するようＯＳ間通信モジュール３６にコマンド生成指示を出す。ＯＳ間通信モジュール３６は、生成指示に従ってライトコマンドを生成して第２ＯＳ側のＯＳ間通信モジュール４０に発行する。
【００４８】
第２ＯＳ側のＯＳ間通信モジュール４０は、第１ＯＳ側から発行されたライトコマンドを外部インタフェース４２を介してＨＷ非依存デバイスドライバ４４に出力する。ＨＷ非依存デバイスドライバ４４は、ライトコマンドに従ってＯＳ間共有メモリからデータを読み出す。そして、ＨＷ依存デバイスドライバ４６が該読み出されたデータを、インタフェース１４Ｄを制御するインタフェースコントローラ(USBコントローラなど)内のメモリ(FIFOなど)にDMAを起動して順次書き込む。ＨＷ依存デバイスドライバ４６で書き込みが終了すると、ＨＷ非依存デバイスドライバ４４からライト終了メッセージの生成指示がＯＳ間通信モジュール４０に出力される。ＯＳ間通信モジュール４０は、ライト終了メッセージを生成して第１ＯＳ側のＯＳ間通信モジュール３６に発行する。ＯＳ間通信モジュール３６で受け取ったライト終了メッセージは、ＨＷ非依存デバイスドライバ３４に通知され、外部インタフェース３２を介してアプリケーション３０に通知される。リード処理時のコマンド等の流れも同様である。
【００４９】
なお、アプリケーション３０からライト命令が発行された場合に、該ライト命令により指定された転送対象のデータの転送サイズがＯＳ間共有メモリの使用可能な領域のサイズ以下であれば、ＯＳ間通信モジュール３６はアプリケーション３０からの該転送サイズのデータを共有メモリに書き込むことができ、第１ＯＳ側から該転送サイズが指定されたライトコマンドを１つ第２ＯＳ側に発行すれば、上記のように第２ＯＳ側のインタフェース１４Ｄへのデータ転送を行うことができるが、転送対象のデータのサイズ未満の領域しかＯＳ間共有メモリに確保できない場合において、従来のように何らの工夫もなければ、ＯＳ間共有メモリに転送対象のデータを書き込むことができずに、メモリエラーがアプリケーション３０側に返されることとなる。ここで、メモリエラーを受けたアプリケーション３０は転送サイズを小さくして再度ライト命令を発行することもできるが、それでもなお転送サイズがＯＳ間共有メモリで使用可能なサイズより大きければ、またメモリエラーが返されることになる。これを繰り返すことは非効率でもあるし、アプリケーション３０が転送サイズを小さくしたライト命令を複数回発行する必要が生じる。リード命令の場合も同様である。
【００５０】
次に、本実施の形態におけるデータ転送動作の詳細について説明する。まず、第１ＯＳ側から第２ＯＳ側へデータを転送するライト処理について図３〜図１２を用いて説明する。なお、以下では、ＯＳ間共有メモリを単に共有メモリと呼称する場合もある。
【００５１】
ＨＷ非依存デバイスドライバ３４に対して、アプリケーション３０から外部インタフェース３２を介してライト命令が発行されると、ＨＷ非依存デバイスドライバ３４は、図３に示す処理ルーチンを実行する。
【００５２】
ステップ１００では、共有メモリから、ライト命令（図９（１）、図１１（１）も参照。）において指定されている転送対象のデータの転送サイズ（データサイズＮ）の領域を獲得可能か否かを判断する。共有メモリで使用可能な領域のサイズがデータサイズＮより小さければ、ステップ１０２に進み、共有メモリで使用可能な領域のサイズがデータサイズＮ以上であれば、図４のステップ１３０に進む。
【００５３】
図８に示すように、共有メモリのサイズに制約があり、転送対象のデータが記憶されたアプリケーション３０の作業領域のサイズが、共有メモリの使用可能な領域のサイズより大きい場合には、ステップ１００で否定判断される。一方、図１０に示すように、転送対象のデータが記憶されたアプリケーション３０の作業領域のサイズが、共有メモリの使用可能な領域のサイズより小さい場合には、ステップ１００で肯定判断される。なお、ここで、アプリケーション３０の作業領域は、アプリケーション３０がメモリ１２Ｂに確保した領域であって、ライトの場合には、転送対象のデータのサイズに等しいサイズとなる。図８に対応するタイミングチャートを図９に示し、図１０に対応するタイミングチャートを図１１に示す。
【００５４】
まず、図８に示すように、共有メモリのサイズに制約があり、転送対象のデータのサイズよりも、共有メモリの使用可能な領域のサイズが小さい場合について、説明する。
【００５５】
図３のステップ１０２において、共有メモリから使用可能な領域のサイズ以内で、予め定められたサイズα×ｍ個分の領域５２を獲得（確保）する（図６も参照。）。すなわち、共有メモリの使用可能な領域のサイズをＭとすると、α×ｍ＜Ｍとなるように領域を獲得する。ここで、αは共有メモリの使用可能な領域のサイズより小さい値であって、ｍは１以上の整数である。なお、第２制御部１４のＨＷ非依存デバイスドライバ４４及びＨＷ依存デバイスドライバ４６の作業領域のサイズに応じたサイズとしてもよい。
【００５６】
ここで、ライト処理時において第２ＯＳ側では、ライトコマンドによりＨＷ非依存デバイスドライバ４４は、共有メモリからデータを読み出して予め定められたメモリ１４Ｂの記憶領域（デバイスドライバの作業領域）へデータを転送し、更にＨＷ依存デバイスドライバ４６が該デバイスドライバの作業領域からＤＭＡ転送によりインタフェース１４Ｄを制御するインタフェースコントローラ(USBコントローラなど)内のメモリ(FIFOなど)にDMAを起動して順次データを転送するようにしている。このデバイスドライバの作業領域は、共有メモリの使用可能なサイズよりも小さいサイズである。また、デバイスドライバの作業領域は通常、複数個（例えば２〜３個）設けられていることが多い。図８に示す例では、デバイスドライバの作業領域が２つ設けられている。この場合、一方の作業領域にＨＷ非依存デバイスドライバ４４がデータを書き込んでいる間に、ＨＷ依存デバイスドライバ４６が他方の作業領域からデータを読み出してインタフェース１４Ｄに転送することができる。作業領域が３つの場合も同様である。このデバイスドライバの作業領域の各々のサイズをｄとしたとき、α＝βｄとしてもよい。ここで、βは１以上の整数である。なお、βを２以上の整数とすることで、デバイスドライバの作業領域を介したデータ転送において、前述したように書き込みと読出しが効率的に行われる。なお、図８に、共有メモリからデータ転送に使用するために獲得した領域を太破線で示した。
【００５７】
ステップ１０４では、分割数ｎを算出し、パラメータｋに１をセットする。ここで、分割数ｎは、上記データサイズＮをαで除算したときの商とする。なお、除算した結果、余りが出た場合には、商に１を加算した値をｎとする。
【００５８】
ステップ１０６には、パラメータｓに１をセットし、アドレスaddに、上記共有メモリから獲得した領域５２の先頭アドレスadd0をセットする。
【００５９】
ステップ１０８では、共有メモリにデータの書き込みが可能か否かを判断する。本実施の形態では、共有メモリから獲得した領域５２が転送対象のデータサイズＮより小さい場合には、該獲得した領５２をリングバッファの如く用いてデータ転送を行うようにしている。そして、ＨＷ非依存デバイスドライバ３４は、アプリケーション３０の作業領域に存在する転送対象のデータを先頭からデータサイズα毎に分割した分割データの各々を、獲得した領域５２の先頭アドレスadd0から順に書き込んでいく。ここで、共有メモリに分割データを１つも書き込んでいない状態においては、ステップ１０８で書き込み可能であると判断できる。しかしながら、共有メモリから獲得した領域５２の終端アドレスまで分割データを書き込んだ後は、その次からの分割データは、既に書き込まれたデータに上書きしなくてはらないため、第２ＯＳ側で該共有メモリに書き込まれたデータを読み出してデバイスドライバの作業領域に転送した後でないと、次の書き込みができない。従って、ＨＷ非依存デバイスドライバ３４は、第２ＯＳ側から発行されるライト終了メッセージ（後述）により、共有メモリに分割データαを書き込み可能なだけのサイズがあるかを判断し、書き込み可能なサイズだけの領域ができるまで待機するようにしている。
【００６０】
本実施の形態では、後述するように、１つの分割データの書き込みに対して、１つのライトコマンドが第２ＯＳに対して発行される。このライトコマンドに対するライト終了メッセージが第２ＯＳから発行されれば、共有メモリの該分割データを書き込んだ領域は、次の分割データを書き込み可能な領域となる。
【００６１】
ステップ１０８で書き込み可能であると判断した後は、ステップ１１０に進む。
【００６２】
ステップ１１０では、アプリケーション３０の作業領域からサイズα分の分割データを読出し、共有メモリのアドレスaddが示す領域に該分割データを書き込む。
【００６３】
ステップ１１２では、アドレスaddからデータサイズαの分割データが第２ＯＳのＨＷ非依存デバイスドライバ４４により読み出されて、ＨＷ依存デバイスドライバ４６によりインタフェース１４Ｄに転送されるように、該アドレスadd、及びデータサイズαが引数とされたライトコマンドの発行指令をＯＳ間通信モジュール３６に出す。ＯＳ間通信モジュール３６はこの発行指令を受け、ライトコマンドを１つ生成して発行する（図９の（２）、（５）も参照。）。
【００６４】
図７（Ａ）に、ＯＳ間通信モジュール３６により生成されるデータ転送コマンド（ライトコマンド、リードコマンド）のフォーマットの一例を示す。図示されるように、データ転送コマンドは、メッセージの発行元及び宛先を示すメッセージ通信ヘッダ情報、第２ＯＳのデバイスドライバに対するコマンド（リード或いはライトを示す）、引数（アドレス）、引数（データサイズ）により構成される。
【００６５】
なお、本実施の形態では、アプリケーション３０からの１つのライト命令を受け取ると、転送対象のデータを分割し、転送サイズがデータサイズＮより小さいライトコマンドを該分割数だけ発行するため、以下では、このライトコマンドを分割ライトコマンドと呼称する。
【００６６】
第２ＯＳのＯＳ間通信モジュール４０は、分割ライトコマンドを受け取ると、該分割ライトコマンドを外部インタフェース４２を介してＨＷ非依存デバイスドライバ４４に出力する。これにより、ＨＷ非依存デバイスドライバ４４は、図５に示す処理ルーチンを実行する。なお、ＯＳ間通信モジュール４０が分割ライトコマンドをＨＷ非依存デバイスドライバ４４に出力するタイミングは、第２ＯＳのデバイスドライバの作業領域の少なくとも１つが使用可能なタイミングである。
【００６７】
具体的には、デバイスドライバの作業領域が１つである場合、ＯＳ間通信モジュール４０が分割ライトコマンドを第１ＯＳ側から受け取ったときに、その１つ前に第１ＯＳ側から受け取ってＨＷ非依存デバイスドライバ４４に出力した分割ライトコマンド（ここで、先の分割ライトコマンドという）の実行が未処理の場合には、これから第２ＯＳ側のデバイスドライバ領域を用いたデータ転送が行われるか、或いはデータ転送実行中であるため、ＯＳ間通信モジュール４０は、先の分割ライトコマンドの実行が終了する（例えば、先の分割ライトコマンドに対するリード終了コマンドの発行指令がある）まで、第１ＯＳ側から受け取った分割ライトコマンドのＨＷ非依存デバイスドライバ４４への出力を待つようにしている。
【００６８】
また、サイズｄのデバイスドライバの作業領域が２つ設けられ、分割データのサイズα（分割ライトコマンドで引数として指定されたデータサイズ）が２ｄである場合には、先の分割ライトコマンドによるＤＭＡ転送（後述する）が一方の作業領域と他方の作業領域の各々で１回ずつ行われることとなるが、一方の作業領域のＤＭＡ転送が終了すれば、該一方の作業領域で次の分割ライトコマンドによるＤＭＡ転送が可能となるため、このタイミングで次の分割ライトコマンドを出力すればよい。
【００６９】
なお、ＯＳ間通信モジュール４０が受け取った分割ライトコマンドが、ライト命令による最初の分割ライトコマンドであれば、何ら処理を待つことなくＨＷ非依存デバイスドライバ４４に出力される。
【００７０】
ここで、図５を参照して、第２ＯＳ側のＨＷ非依存デバイスドライバ４４のコマンド受信処理について説明する。
【００７１】
ステップ２００で第１ＯＳ側からコマンドを受信すると、ステップ２０２で、受信したコマンドがライトかリードかを判断する。コマンドがライトであると判断した場合には、ステップ２０４に進み、分割ライトコマンドの引数で指定された共有メモリのアドレスから、引数で指定されたデータサイズのデータ（ここでは分割データ）を読み出して、デバイスドライバの作業領域に書き込み、ステップ２０６で、ＨＷ依存デバイスドライバ４６に対してＩＯリクエストを出す（図９（３）も参照。）。このＩＯリクエストにより、デバイス処理が行われる。すなわち、デバイスドライバの作業領域に書き込まれたデータが、ＨＷ依存デバイスドライバ４６により読み出され、インタフェース１４Ｄに対して転送される（ＤＭＡ(Direct Memory Access)転送）。ＤＭＡ転送が終了すると、ＨＷ依存デバイスドライバ４６からＨＷ非依存デバイスドライバ４４に対してＤＭＡ転送終了信号が出力される（図９（４）も参照。）。
【００７２】
なお、分割ライトコマンドで指定されたデータサイズが個々のデバイスドライバ領域のサイズｄよりも大きなサイズである場合には、共有メモリからデバイスドライバ領域のサイズ分だけのデータを読出して転送する処理を繰り返すことにより指定されたサイズ分の分割データを転送する。なお、デバイスドライバの作業領域が複数個ある場合には、前述したように、書き込みが終了した作業領域からのデータの読み出しと他の作業領域への書き込みを並列に行うようにして、効率的に転送作業を行う。図８及び図９に示す例では、デバイスドライバの作業領域を２個設け、データサイズαをデバイスドライバの作業領域ｄの２倍としており、データサイズαの分割データが２回のＤＭＡ転送で転送されるようにしている。
【００７３】
ステップ２０８では、分割ライトコマンドで指定されたデータサイズ分のデータ転送が終了したか否かを判断し、終了していないと判断した場合には、ステップ２０４に戻って上記処理を繰り返す。また、ステップ２０８で、転送が終了したと判断した場合には、ステップ２１０に進む。
【００７４】
ステップ２１０では、ライト終了メッセージの発行指令をＯＳ間通信モジュール４０に対して出力する。これにより、ＯＳ間通信モジュール４０は、ライト終了メッセージを作成して第１ＯＳのＯＳ間通信モジュール３６に発行する（図９（６）、（８）、（９）も参照。）。
【００７５】
図７（Ｂ）は、ＯＳ間通信モジュール４０により生成されるデータ転送終了メッセージ（ライト終了、リード終了）のフォーマットの一例を示す図である。図示されるように、データ転送終了メッセージは、メッセージの発行元及び宛先を示すメッセージ通信ヘッダ情報、ライト終了かリード終了かのステータスを示すステータス情報により構成される。ステータス情報には、転送したデータのサイズを示す情報を含めてもよい。
【００７６】
なお、第２ＯＳに発行されたコマンドが、分割ライトコマンドではなく、ライトコマンドであっても、第２ＯＳにおけるＨＷ非依存デバイスドライバ４４及びＨＷ依存デバイスドライバ４６によるデータ転送は上記と同様に行われる。
【００７７】
一方、ＨＷ非依存デバイスドライバ３４は、ステップ１１２の発行指令を出した後、ステップ１１４で、ｓに１を加算し、ｋに１を加算する。また、アドレスaddにαを加算する。
【００７８】
ステップ１１６では、ｋがｎに等しいか否かを判断する。ここで否定判断した場合には、ステップ１１８に進む。ステップ１１８では、ｓがｍより大きいか否かを判断する。ここで、ｓがｍより大きいと判断した場合には、共有メモリに確保した領域５２へのｍ個分の分割データの書き込みが終了したことを示すため、ステップ１０６に戻り、ｓに１をセットして初期化すると共に、アドレスaddに領域５２の先頭アドレスadd0をセットして、上記説明した処理を繰り返す。一方、ステップ１１８で否定判断した場合には、共有メモリに確保した領域５２へのｍ個分の分割データの書き込みが終了していないことを示すため、ステップ１０８に戻り、上記説明した処理を繰り返す。
【００７９】
また、ステップ１１６で、ｋがｎに等しいと判断した場合には、次に共有メモリに書き込む分割データは、最後の分割データ（すなわちｎ番目の分割データ）となるため、ステップ１２０に進む。ステップ１２０では、ｓがｍより大きいか否かを判断し、大きいと判断したときは、ステップ１２２で、アドレスaddに領域５２の先頭アドレスadd0をセットして、ステップ１２４に進む。また、ステップ１２０でｓがｍ以下であると判断した場合には、ステップ１２２をスキップして、ステップ１２４に進む。
【００８０】
ステップ１２４では、ステップ１０８と同様に分割データの書き込みが可能か否かを判断し、可能であると判断した場合には、ステップ１２６に進み、アプリケーション３０の作業領域からｎ番目の分割データを読出し、共有メモリのアドレスaddが示す領域に該分割データを書き込む。
【００８１】
ステップ１２８では、アドレスadd、及びｎ番目の分割データのデータサイズ（ｎ番目の分割データは、データサイズがαであるとは限らない）が引数とされた分割ライトコマンドの発行指令をＯＳ間通信モジュール３６に出す。ＯＳ間通信モジュール３６はこの発行指令を受け、分割ライトコマンドを１つ生成して発行する（図９の（７）も参照。）。
【００８２】
ステップ１３０では、転送対象のデータのライト処理が終了したか否かを判断する。ここでは、ｎ番目の分割ライトコマンドに対するライト終了メッセージが第２ＯＳ側のＯＳ間通信モジュール４０から発行されたことをもって（図９（９）も参照。）ライト終了と判断する。ステップ１３０で肯定判断した場合には、ステップ１３２に進み、アプリケーション３０に対して、ライト終了を示す結果を通知する（図９（１０）も参照。）。
【００８３】
次に、図１０に示すように、転送対象のデータのサイズが、ＯＳ間共有メモリの使用可能なサイズ以下であるためステップ１００において肯定判断された場合の処理について説明する。図４のステップ１４０では、共有メモリから、ライト命令（図１１（１）も参照。）において指定されたデータサイズＮ分のサイズの領域を獲得する。
【００８４】
ステップ１４２では、分割数ｎを算出し、パラメータｋに１をセットする。分割数ｎの算出方法は、ステップ１０４と同様である。
【００８５】
ステップ１４４では、アドレスaddに、上記共有メモリから獲得した領域の先頭アドレスadd0をセットする。
【００８６】
ステップ１４６では、アプリケーション３０の作業領域からサイズαの分割データを読出し、共有メモリのアドレスaddが示す領域に該分割データを書き込む。
【００８７】
ステップ１４８では、アドレスaddからデータサイズαの分割データが第２ＯＳのＨＷ非依存デバイスドライバ４４により読み出されて、ＨＷ依存デバイスドライバ４６によりインタフェース１４Ｄに転送されるように、該アドレスadd、及びデータサイズαが引数とされた分割ライトコマンドの発行指令をＯＳ間通信モジュール３６に出す。ＯＳ間通信モジュール３６はこの発行指令を受け、分割ライトコマンドを１つ生成して発行する（図１１の（２）、（５）も参照。）。
【００８８】
なお、第２ＯＳ側で分割ライトコマンドを受信した場合の処理については、上記説明した通りであるため、説明を省略する（図１１の（３）、（４）、（６）、（８）も参照。）。
【００８９】
続いて、ステップ１５０では、ｋに１を加算し、アドレスaddにαを加算する。
【００９０】
ステップ１５２では、ｋがｎに等しいか否かを判断する。ここで否定判断した場合には、ステップ１４６に戻り、上記説明した処理を繰り返す。また、ステップ１５２で肯定判断した場合には、次に共有メモリに書き込む分割データは、最後の分割データ（すなわちｎ番目の分割データ）となるため、ステップ１５４に進む。
【００９１】
ステップ１５４では、アプリケーション３０の作業領域からｎ番目の分割データを読出し、共有メモリのアドレスaddが示す領域に該分割データを書き込む。
【００９２】
ステップ１５６では、アドレスadd、及びｎ番目の分割データのデータサイズ（ｎ番目の分割データは、データサイズがαであるとは限らない）が引数とされた分割ライトコマンドの発行指令をＯＳ間通信モジュール３６に出す。ＯＳ間通信モジュール３６はこの発行指令を受け、分割ライトコマンドを１つ生成して発行する（図１１の（７）も参照。）。
【００９３】
ステップ１５８では、転送対象のデータのライト処理が終了したか否かを判断する。ここでは、ｎ番目の分割ライトコマンドに対するライト終了メッセージが第２ＯＳ側のＯＳ間通信モジュール４０から発行されたことをもって（図１１（９）も参照。）ライト終了と判断する。ステップ１５８で肯定判断した場合には、図３のステップ１３２に進み、アプリケーション３０に対して、ライト終了を示す結果を通知する（図１１（１０）も参照。）。
【００９４】
なお、上記実施の形態では、ステップ１００で肯定判断した場合にも転送対象のデータを複数に分割して共有メモリに書き込み、第２ＯＳに対して分割ライトコマンドを発行する例について説明したが、これに限定されない。例えば、ステップ１００で肯定判断した場合には、転送対象のデータを分割せずに共有メモリに書き込み、転送対象のデータのデータサイズＮを引数とするライトコマンドを第２ＯＳに発行するようにしてもよい。
【００９５】
このように処理する場合には、図４に示すステップ１４０〜ステップ１５８に示す処理に代えて、図１２に示すステップ１６０〜ステップ１６６に示す処理を行う。
【００９６】
ステップ１６０では、共有メモリから、ライト命令において指定されたデータサイズＮ分のサイズの領域５２を獲得する。
【００９７】
ステップ１６２では、アプリケーション３０の作業領域から転送対象のデータの全てを読出し、共有メモリの上記獲得した領域５２に書き込む。
【００９８】
ステップ１４８では、上記獲得した領域５２の先頭アドレスadd0からデータサイズＮのデータが第２ＯＳのＨＷ非依存デバイスドライバ４４により読み出されて、ＨＷ依存デバイスドライバ４６によりインタフェース１４ＤにＤＭＡにより順次転送されるように、該アドレスadd0、及びデータサイズＮが引数とされたライトコマンドの発行指令をＯＳ間通信モジュール３６に出す。ＯＳ間通信モジュール３６はこの発行指令を受け、ライトコマンドを１つ生成して発行する。なお、第２ＯＳに発行されるコマンドが、分割ライトコマンドではなく、ライトコマンドであっても、そのフォーマットは、前述したフォーマットと共通である。また、ライトコマンドによる第２ＯＳ側の処理は、上記分割ライトコマンドによる処理と同様に行われる。
【００９９】
ステップ１６６では、転送対象のデータのライト処理が終了したか否かを判断する。ここでは、ライトコマンドに対するライト終了メッセージが第２ＯＳ側のＯＳ間通信モジュール４０から発行されたことをもってライト終了と判断する。ステップ１６６で肯定判断した場合には、図３のステップ１３２に進み、アプリケーション３０に対して、ライト終了を示す結果を通知する。
【０１００】
次に、第１ＯＳのアプリケーション３０が第２ＯＳ側のインタフェース１４Ｄを制御するインタフェースコントローラ(USBコントローラなど)内のメモリ(FIFOなど)からデータを取得するするリード処理について図１３〜図１９、及び図５を用いて説明する。なお、リード処理の場合も、上記ライト処理と同様に、転送対象のデータを複数個に分割した分割データ毎に共有メモリに書き込んで転送するものとする。また、第１ＯＳ側から第２ＯＳ側に対して分割データ毎に発行されるリードコマンドを、分割リードコマンドと呼称する。
【０１０１】
ＨＷ非依存デバイスドライバ３４に対して、アプリケーション３０から外部インタフェース３２を介してリード命令が発行されると、ＨＷ非依存デバイスドライバ３４は、図１３に示す処理ルーチンを実行する。
【０１０２】
ステップ３００では、共有メモリから、リード命令において指定されている転送対象のデータの転送サイズ（データサイズＮ）の領域を獲得可能か否かを判断する。共有メモリで使用可能な領域のサイズがデータサイズＮより小さければ、ステップ３０２に進み、共有メモリで使用可能な領域のサイズがデータサイズＮ以上であれば、図１４のステップ３４０に進む。なお、リードの場合には、取得するデータが第２ＯＳ側に存在するため、リード命令を出す段階において第１ＯＳ側のアプリケーション３０は、取得するデータの実サイズはわからない。従って、アプリケーション３０では、予め定められた大きさ（転送可能な程度に十分な大きさ）の作業領域をメモリ１２Ｂに確保し、この作業領域のサイズを転送サイズ（データサイズＮ）としてリード命令で指定するようにしている。
【０１０３】
図１５に示すように、共有メモリのサイズに制約があり、転送対象のデータを取得するために確保されたアプリケーション３０の作業領域のサイズが、共有メモリの使用可能な領域のサイズより大きい場合には、ステップ３００で否定判断される。一方、図１６に示すように、転送対象のデータを取得するために確保されたアプリケーション３０の作業領域のサイズが、共有メモリの使用可能な領域のサイズより小さい場合には、ステップ３００で肯定判断される。なお、ここでは、図１５に示すリード処理のタイミングチャートの例は省略し、図１６に示すリード処理のタイミングチャートの例を図１８に示す。
【０１０４】
まず、図１５に示すように、共有メモリのサイズに制約があり、アプリケーション３０の作業領域のサイズよりも、共有メモリの使用可能な領域のサイズが小さい場合について、説明する。
【０１０５】
図１３のステップ３０２において、共有メモリから使用可能な領域のサイズ以内で、予め定められたサイズα×ｍ個分の領域５２を獲得（確保）する。この処理は、ライトの場合のステップ１０２と同様である。
【０１０６】
ステップ３０４では、分割数ｎを算出し、パラメータｋに１をセットする。ここで、分割数ｎは、上記データサイズＮをαで除算したときの商とする。なお、除算した結果、余りが出た場合には、商に１を加算した値をｎとする。
【０１０７】
ステップ３０６には、パラメータｓに１をセットし、アドレスaddに、上記共有メモリから獲得した領域の先頭アドレスadd0をセットする。
【０１０８】
ステップ３０８では、第２ＯＳ側における転送対象のデータのリード処理が終了したか否かを判断する。ここでは、転送対象のデータの最後の分割データのリード処理が終了したことを示すリード終了メッセージが第２ＯＳ側のＯＳ間通信モジュール４０から発行されたことをもって、リード終了と判断する。第２ＯＳ側のＯＳ間通信モジュール４０は、最後の分割データのリード処理が終了した場合には、リード終了メッセージのステータス情報（図７（Ｂ）も参照。）に、最後の分割データのリード処理終了を示す情報を含めてリード終了メッセージを生成する（後述）。従って、ＨＷ非依存デバイスドライバ３４は、リード終了メッセージのステータス情報からステップ３０８を判断する。なお、転送対象のデータの最後の分割データが、ｎ番目の分割データであるとは限らない。これは、前述したように、第１ＯＳ側のアプリケーション３０は、第２ＯＳ側から取得する転送対象のデータの正確なサイズを把握していないため、上記データサイズＮよりも転送対象のデータのサイズが小さければ、上記算出したｎよりも少ない数の分割リードコマンドでリード処理が終了することがあるからである。
【０１０９】
また、分割リードコマンドを１つも出していない初期の段階では、ステップ３０８は当然ながら否定判断される。従って、ステップ３１０に進む。
【０１１０】
ステップ３１０では、共有メモリにデータの書き込みが可能か否かを判断する。リード処理においては、第２ＯＳに対する分割リードコマンドの発行により、第２ＯＳ側のＨＷ非依存デバイスドライバ４４が共有メモリに転送対象のデータを書き込む。書き込みが終了すると後述するようにリード終了メッセージが第２ＯＳ側から第１ＯＳ側に発行されるが、このメッセージをもって、第１ＯＳ側のＨＷ非依存デバイスドライバ３４は、共有メモリに書き込まれた分割データを読み出して、アプリケーション３０の作業領域に転送する。なお、この共有メモリからアプリケーション３０の作業領域へのデータ転送は、ＯＳ間通信モジュール３６を介して入力される第２ＯＳ側からのリード終了メッセージに応じて逐次行われるが、本フローチャートでは図示を省略している。
【０１１１】
一方、前述したように、共有メモリのサイズに制約があり、上記確保した領域５２をリングバッファの如く用いて使用する。ここで、共有メモリに分割データが１つも書き込まれていない状態（分割リードコマンドが１つも発行されていない状態）においては、ステップ３１０で書き込み可能であると判断できる。しかしながら、共有メモリから獲得した領域５２の終端アドレスまで分割データが書き込まれた後は、次の分割データは、既に書き込まれたデータに上書きしなくてはらないため、第１ＯＳ側のＨＷ非依存デバイスドライバ３４が該共有メモリに書き込まれたデータを読み出してアプリケーション３０の作業領域に転送した後でないと、第２ＯＳ側のＨＷ非依存デバイスドライバ４４は次の書き込みができない。ＨＷ非依存デバイスドライバ３４は、自身が実行する転送処理とリード終了コマンドとに応じて、共有メモリに分割データαを書き込み可能なだけのサイズがあるかを判断し、書き込み可能な領域ができるまでステップ３１０では書き込み不能であると判断して待機するようにしている。
【０１１２】
本実施の形態では、後述するように、１つの分割リードコマンドに対して、１つの分割データが書き込まれ、１つの分割データの書き込みに対して、１つのリード終了メッセージが第２ＯＳから発行される。この分割リードコマンドに対応するリード終了メッセージが第２ＯＳから発行され、この分割データをＨＷ非依存デバイスドライバ３４が読み出してアプリケーション３０の作業領域に転送すれば、共有メモリの該分割データを書き込んだ領域は、次の分割データを書き込み可能な領域となる。
【０１１３】
ステップ３１０で書き込み可能であると判断した後は、ステップ３１２に進む。
【０１１４】
ステップ３１２では、第２ＯＳ側のＨＷ依存デバイスドライバ４６によりインタフェース１４Ｄを介して転送対象のデータを分割したデータサイズαの分割データが読み出され、第２ＯＳのＨＷ非依存デバイスドライバ４４により該読み出された分割データが共有メモリのアドレスaddに書き込まれるように、該アドレスadd、及びデータサイズαが引数とされたリードコマンドの発行指令をＯＳ間通信モジュール３６に出す。ＯＳ間通信モジュール３６はこの発行指令を受け、リードコマンドを１つ生成して発行する。
【０１１５】
ステップ３１４では、ｓに１を加算し、ｋに１を加算する。また、アドレスaddにαを加算する。
【０１１６】
ステップ３１６では、ｋがｎに等しいか否かを判断する。ここで否定判断した場合には、ステップ３１８に進む。ステップ３１８では、ｓがｍより大きいか否かを判断する。ここで、ｓがｍより大きいと判断した場合には、共有メモリに確保した領域５２へのｍ個分の分割データの転送のための分割リードコマンドの発行が終了したことを示すため、ステップ３０６に戻り、ｓに１をセットして初期化すると共に、アドレスaddに領域５２の先頭アドレスadd0をセットして、上記説明した処理を繰り返す。一方、ステップ３１８で否定判断した場合には、共有メモリに確保した領域５２へのｍ個分の分割データの転送のための分割リードコマンドの発行が終了していないことを示すため、ステップ３０８に戻り、上記説明した処理を繰り返す。
【０１１７】
また、ステップ３１６で、ｋがｎに等しいと判断した場合には、次に発行する分割リードコマンドはｎ番目の分割リードコマンドであるため、ステップ３２０に進む。ステップ３２０では、ｓがｍより大きいか否かを判断し、大きいと判断したときは、ステップ３２２で、アドレスaddに領域５２の先頭アドレスadd0をセットして、ステップ３２４に進む。また、ステップ３２０でｓがｍ以下であると判断した場合には、ステップ３２２をスキップして、ステップ３２４に進む。
【０１１８】
ステップ３２４では、ステップ３０８と同様に、第２ＯＳ側における転送対象のデータのリード処理が終了したか否かを判断する。ステップ３２４で、転送対象のデータのリード処理が終了していないと判断した場合には、ステップ３２６に進む。ステップ３２６では、ステップ３１０と同様に、分割データの書き込みが可能か否かを判断し、可能であると判断した場合には、ステップ３２８に進み、アドレスadd、及びｎ番目の分割データのデータサイズ（ｎ番目の分割データは、データサイズがαであるとは限らない）が引数とされた分割リードコマンドの発行指令をＯＳ間通信モジュール３６に出す。ＯＳ間通信モジュール３６はこの発行指令を受け、分割リードコマンドを１つ生成して発行する。
【０１１９】
ステップ３３０では、ステップ３０８と同様に、第２ＯＳ側における転送対象のデータのリード処理が終了したか否かを判断する。
【０１２０】
ステップ３０８、３２４、及び３３０で肯定判断した場合には、ステップ３３２に進み、共有メモリから最後の分割データを読み出してアプリケーション３０の作業領域に転送したか否かを判断し、否定判断中は、待機状態を続ける。また、ステップ３３２で肯定判断した場合には、ステップ３３４に進み、アプリケーション３０に対して、リード終了を示す結果を通知する。すなわち、転送対象のデータの全てがアプリケーション３０の作業領域に書き込まれた段階で、アプリケーション３０に対して結果通知を出すようにしている。
【０１２１】
なお、ステップ３０８、３２４の段階で、第２ＯＳ側における転送対象のデータのリード処理が終了したと判断した場合には、ｎ番目の分割リードコマンドを発行する前に分割リードコマンドの発行が中止されることになる。これは、前述したように、第１ＯＳ側のアプリケーション３０は、第２ＯＳ側から取得する転送対象のデータの正確なサイズを把握していないため、上記データサイズＮよりも転送対象のデータのサイズが小さければ、上記算出したｎよりも少ない数の分割リードコマンドでリード処理が終了することがあるからである。従って、データサイズＮよりも転送対象のデータのサイズが小さければ、図１５、及び図１６に示すように、アプリケーション３０がメモリ１２Ｂに確保した作業領域に、未使用領域が生じることもある。
【０１２２】
次に、図１６に示すように、データサイズＮが、ＯＳ間共有メモリの使用可能なサイズ以下であるためステップ３００において肯定判断された場合の処理について説明する。
【０１２３】
ステップ３００で肯定判断されると、図１４のステップ３４０に進み、共有メモリから、リード命令（図１８（１）も参照。）において指定されたデータサイズＮ分のサイズの領域を獲得する。
【０１２４】
ステップ３４２では、分割数ｎを算出し、パラメータｋに１をセットする。分割数ｎの算出方法は、ステップ３０４と同様である。
【０１２５】
ステップ３４４では、アドレスaddに、上記共有メモリから獲得した領域５２の先頭アドレスadd0をセットする。
【０１２６】
ステップ３４６では、ステップ３０８と同様に、転送対象のデータのリード処理が終了したか否かを判断する。
【０１２７】
ステップ３４６で否定判断した場合には、ステップ３４８に進み、第２ＯＳ側のＨＷ依存デバイスドライバ４６によりインタフェース１４Ｄを介して転送対象のデータを分割したデータサイズαの分割データが読み出され、第２ＯＳのＨＷ非依存デバイスドライバ４４により該読み出された分割データが共有メモリのアドレスaddに書き込まれるように、該アドレスadd、及びデータサイズαが引数とされたリードコマンドの発行指令をＯＳ間通信モジュール３６に出す。ＯＳ間通信モジュール３６はこの発行指令を受け、リードコマンドを１つ生成して発行する（図１８（２）、（５）、（６）、（８）も参照。）。
【０１２８】
ステップ３５０では、ｋに１を加算し、アドレスaddにαを加算する。
【０１２９】
ステップ３５２では、ｋがｎに等しいか否かを判断する。ここで否定判断した場合には、ステップ３４６に戻り、上記説明した処理を繰り返す。また、ステップ３５２で肯定判断した場合には、ステップ３５４に進み、ステップ３０８と同様に、転送対象のデータのリード処理が終了したか否かを判断する。
【０１３０】
ステップ３５４で否定判断した場合には、ステップ３５６に進み、アドレスadd、及びｎ番目の分割データのデータサイズ（ｎ番目の分割データは、データサイズがαであるとは限らない）が引数とされた分割リードコマンドの発行指令をＯＳ間通信モジュール３６に出す。ＯＳ間通信モジュール３６はこの発行指令を受け、分割リードコマンドを１つ生成して発行する。
【０１３１】
ステップ３５８では、ステップ３０８と同様に、転送対象のデータのリード処理が終了したか否かを判断する。
【０１３２】
ステップ３４６、３５４、及び３５８で肯定判断した場合には、ステップ３３２に進み、ステップ３３２で肯定判断された場合には、ステップ３３４で、アプリケーション３０に対して、リード終了を示す結果を通知する（図１８（１１）も参照。）。
【０１３３】
一方、第２ＯＳ側のＨＷ非依存デバイスドライバ４４は、ＯＳ間通信モジュール４０を介して第１ＯＳ側からの分割リードコマンドを受け取ると、図５に示す処理ルーチンを実行する。
【０１３４】
ステップ２００で第１ＯＳ側からコマンドを受信すると、ステップ２０２で、受信したコマンドがライトかリードかを判断する。コマンドがリードであると判断した場合には、ステップ２１２に進み、ＨＷ依存デバイスドライバ４６に対してＩＯリクエストを出す（図１８の（３）も参照）。このＩＯリクエストにより、デバイス処理が行われる。すなわち、ＨＷ依存デバイスドライバ４６は、ＩＯリクエストに応じて、インタフェース１４Ｄを制御するインタフェースコントローラ(USBコントローラなど)内のメモリ(FIFOなど)からデータを読み出して、デバイスドライバの作業領域に書き込む（ＤＭＡ転送）。ＤＭＡ転送が終了すると、ＨＷ依存デバイスドライバ４６からＨＷ非依存デバイスドライバ４４に対してＤＭＡ転送終了信号が出力される（図１８の（４）も参照）。ステップ２１４では、デバイスドライバの作業領域に書き込まれたデータが、ＨＷ非依存デバイスドライバ４４により読み出され、共有メモリに書き込まれる。
【０１３５】
なお、分割リードコマンドで指定されたデータサイズが個々のデバイスドライバ領域のサイズｄよりも大きなサイズである場合には、分割リードコマンドで指定されたデータサイズ分だけＤＭＡ転送されるように、ＨＷ非依存デバイスドライバ４４からＨＷ依存デバイスドライバ４６に対してＩＯリクエストが複数回出力される。なお、デバイスドライバの作業領域が複数個ある場合には、前述したように、書き込みが終了した作業領域からのデータの読み出しと他の作業領域への書き込みを並列に行うようにして、効率的に転送作業を行う。
【０１３６】
図１８に示す例では、デバイスドライバの作業領域を２個設け、データサイズαをデバイスドライバの作業領域ｄの２倍としており、データサイズαの分割データが２回のＤＭＡ転送で読み出されて転送されるようにしている。
【０１３７】
ステップ２１６では、分割リードコマンドで指定されたデータサイズ分のデータ転送（共有メモリへの書き込み）が終了したか否かを判断し、終了していないと判断した場合には、ステップ２１２に戻って上記処理を繰り返す。また、ステップ２１６で、転送が終了したと判断した場合には、ステップ２１８に進む。
【０１３８】
なお、ここで、ＨＷ非依存デバイスドライバ４４は、ＨＷ依存デバイスドライバ４６により、データがデバイスドライバの作業領域の途中までしかＤＭＡ転送されなかった場合（デバイスドライバの作業領域のサイズよりもＤＭＡ転送されたデータのサイズが小さかった場合）には、分割リードコマンドで指定されたデータサイズより転送したデータサイズのサイズが小さくても、転送対象のデータの全てが、インタフェース１４Ｄを制御するインタフェースコントローラ(USBコントローラなど)内のメモリ(FIFOなど)から読み出されたと判断して、このデータをデバイスドライバの作業領域から共有メモリに転送したときに、ステップ２１６で肯定判断し、ステップ２１８に進むものとする。
【０１３９】
ステップ２１８では、リード終了メッセージの発行指令をＯＳ間通信モジュール４０に対して出力する。これにより、ＯＳ間通信モジュール４０は、リード終了メッセージを作成して第１ＯＳのＯＳ間通信モジュール３６に発行する（図１８（７）、（９）、（１０）も参照）。リード終了メッセージのフォーマットは、図７（Ｂ）を用いて説明した通りである。
【０１４０】
ただし、本実施の形態では、リード終了メッセージにより、転送対象のデータの転送（共有メモリへの書き込み）が終了したか否かの判断ができるように、ステータス情報に、対応する分割リードコマンドに応じて転送したデータのサイズの情報を含めるようにしている。例えば、転送したデータのサイズが分割リードコマンドで指定したデータ転送サイズより小さければ、転送対象のデータの転送（共有メモリへの書き込み）が終了したと判断できる。これにより、第１ＯＳ側のＯＳ間通信モジュール３６及びＨＷ非依存デバイスドライバ３４は、図１３、図１４のステップ３０８、３２４、３３０、３４６、３５４、３５８における判断が可能となる。なお、ステータス情報に、転送したデータのサイズと共に、或いはデータのサイズの代わりに、転送対象のデータについての転送が全て終了した旨の状態情報を含めるようにしてもよい。
【０１４１】
これにより、第２ＯＳにおいて転送対象のデータの全てのデータ転送が終了した旨を示すステータス情報が生成され、該ステータス情報を含むリード終了メッセージ（以下、最終リード終了メッセージという）が生成され発行される（図１８（１０）も参照）。
【０１４２】
なお、第２ＯＳに発行されたコマンドが、分割リードコマンドではなく、リードコマンドであっても、第２ＯＳにおけるＨＷ非依存デバイスドライバ４４及びＨＷ依存デバイスドライバ４６によるデータ転送は上記と同様に行われる。
【０１４３】
ここで、リード処理時における第２ＯＳ側のＯＳ間通信モジュール４０の処理について説明する。図１７は、第２制御部１４のＯＳ間通信モジュール４０で行われるリードコマンド処理の処理ルーチンを示すフローチャートである。
【０１４４】
ステップ４００では、第２ＯＳ側における転送対象のデータのリード処理（共有メモリへの書き込み）が終了したか否かを判断する。例えば、ＯＳ間通信モジュール４０は、ＨＷ非依存デバイスドライバ４４からのリード終了メッセージの発行指令に、ステータス情報を生成するための情報として「転送したデータのサイズ」が含まれている場合に、該転送したデータのサイズが、該リード終了メッセージに対応する分割リードコマンドで指定されたデータサイズよりも小さければ、第２ＯＳ側において転送対象のデータのリード処理が終了したと判断するようにしてもよい。或いは、データサイズではなく、明示的に最終分割データのリード処理が終了したことを示すステータス情報が生成されるように発行指令を出してもよい。
【０１４５】
ステップ４００で否定判断した場合には、ステップ４０２で通常のリードコマンド出力処理を行う。ここで、通常のリードコマンド出力処理とは、第２ＯＳのＯＳ間通信モジュール４０は、分割リードコマンドを受け取った場合に、予め定められた出力タイミングで該分割リードコマンドを外部インタフェース４２を介してＨＷ非依存デバイスドライバ４４に出力する処理いう。該分割リードコマンドを受け取ったＨＷ非依存デバイスドライバ４４は、図５に示す処理ルーチンを実行する。なお、ＯＳ間通信モジュール４０が分割リードコマンドをＨＷ非依存デバイスドライバ４４に出力するタイミングは、第２ＯＳのデバイスドライバの作業領域の少なくとも１つが使用可能なタイミングである。なお、このタイミングは、分割ライトコマンドの出力タイミングについての説明と同様であるため、ここでは説明を省略する。
【０１４６】
一方、ステップ４００で肯定判断した場合には、ステップ４０４でアボート処理を行う。第２ＯＳ側における転送対象のデータのリード処理（共有メモリへの書き込み）が終了した場合には、第１ＯＳ側で最終リード終了メッセージを受け取る前に発行され、ＨＷ非依存デバイスドライバ４４に対して未出力の分割リードコマンドについては、ＨＷ非依存デバイスドライバ４４に出力する必要はないため、これら分割リードコマンドをＨＷ非依存デバイスドライバ４４に出力せずに消去する処理を行う。これをアボート処理という。例えば、図１８に示す例では、３番目の分割リードコマンド（図１８の（６））に対するリード終了メッセージ（図１８の（１０））の発行指令により、第２ＯＳ側の転送対象のデータのリード処理が終了したことがわかるため、４番目の分割リードコマンドは出力しなくてよい。従って、４番目の分割リードコマンドをアボートする（図１８の（８）も参照。）。
【０１４７】
なお、上記実施の形態では、ステップ３００で肯定判断した場合にも、第２ＯＳに対して分割リードコマンドを発行する例について説明したが、これに限定されない。例えば、ステップ３００で肯定判断した場合には、転送対象のデータのデータサイズＮを引数とするリードコマンドを第２ＯＳに発行するようにしてもよい。
【０１４８】
このように処理する場合には、図１４に示すステップ３４０〜ステップ３５８に示す処理に代えて、図１９に示すステップ３６０〜ステップ３６４に示す処理を行う。
【０１４９】
ステップ３６０では、共有メモリから、リード命令において指定されたデータサイズＮ分のサイズの領域５２を獲得する。
【０１５０】
ステップ３６２では、第２ＯＳ側のＨＷ依存デバイスドライバ４６によりインタフェース１４Ｄを介して転送対象のデータが読み出され、第２ＯＳのＨＷ非依存デバイスドライバ４４により該読み出されたデータが共有メモリのアドレスadd0に書き込まれるように、該アドレスadd0、及びデータサイズＮが引数とされたリードコマンドの発行指令をＯＳ間通信モジュール３６に出す。ＯＳ間通信モジュール３６はこの発行指令を受け、リードコマンドを１つ生成して発行する。なお、第２ＯＳに発行されるコマンドが、分割リードコマンドではなく、リードコマンドであっても、そのフォーマットは、前述したフォーマットと共通である。
【０１５１】
ステップ３６４では、第２ＯＳ側における転送対象のデータのリード処理が終了したか否かを判断する。ここでは、ステップ３６２で発行したリードコマンドに対するリード終了メッセージを受け取ったことをもってリード処理が終了したと判断する。ここで、肯定判断した場合には、図１３のステップ３３２に進み、ここで肯定判断された場合には、ステップ３３４で、アプリケーション３０に対して、リード終了を示す結果を通知する。
【０１５２】
上記実施の形態では、分割データのデータサイズαを予め定められたサイズ（固定）とする例について説明したが、これに限定されず、例えばＨＷ非依存デバイスドライバ４４が、アプリケーション３０の作業領域のサイズ（すなわち、ライト命令或いはリード命令で指定されたデータサイズＮ。なお、アプリケーション３０においてライト命令或いはリード命令時に動的に確保される領域であって固定のサイズではない）と、共有メモリの使用可能な領域のサイズ（データ転送用に予め設けられた領域であるため固定サイズ）と、第２ＯＳ側のデバイスドライバの作業領域（固定サイズ）及びその個数と、に応じて、効率的に転送可能な分割データのサイズを決定し、分割ライトコマンド、或いは分割リードコマンドを発行するようにしてもよい。
【０１５３】
また、上記実施の形態では、第２制御部１４に設けられ、第２ＯＳ側で管理・制御されるハードウェア・デバイスとして、ＵＳＢポート等のインタフェース１４Ｄを例に挙げて説明したが、これに限定するものではなく、他のハードウェア・デバイスであってもよい。例えば、第２制御部１４にＨＤＤ等のハードウェア・デバイスが設けられている場合には、該ＨＤＤであってもよいし、ＣＤ−ＲＷ等の記憶媒体に対して書き込み及び読出し可能なデバイスであってもよい。このようなハードウェア・デバイスであっても、上記実施の形態のように第１ＯＳ側から分割データ転送コマンドを発行して、上記のようにデータを読み出したり、書き込んだりすることがなされる。
【０１５４】
また、ＨＷ非依存デバイスドライバ３４が、共有メモリから、予め定められたデータサイズα×ｍ個の領域５２を獲得する例について説明したが、獲得するサイズは、共有メモリの使用可能な領域のサイズより小さいサイズであればよく、α×ｍでははくてもよい。
【０１５５】
また、上記実施の形態では、データ転送制御装置が適用される例として画像形成装置を例に挙げて説明したが、これに限定されるものではなく、複数のＯＳが動作する様々な装置に適用可能である。
【符号の説明】
【０１５６】
１０   画像形成装置
１２   第１制御部
１２Ａ ＣＰＵ
１２Ｂ メモリ
１２Ｃ 記憶部
１４   第２制御部
１４Ａ ＣＰＵ
１４Ｂ メモリ
１４Ｃ 記憶部
１４Ｄ インタフェース
３０   アプリケーション
３２   外部インタフェース
３４   ＨＷ非依存デバイスドライバ
３６   ＯＳ間通信モジュール
４０   ＯＳ間通信モジュール
４２   外部インタフェース
４４   ＨＷ非依存デバイスドライバ
４６   ＨＷ依存デバイスドライバ
【図１】
0005652242.tif 000002
【図２】
0005652242.tif 000003
【図３】
0005652242.tif 000004
【図４】
0005652242.tif 000005
【図５】
0005652242.tif 000006
【図６】
0005652242.tif 000007
【図７】
0005652242.tif 000008
【図８】
0005652242.tif 000009
【図９】
0005652242.tif 000010
【図１０】
0005652242.tif 000011
【図１１】
0005652242.tif 000012
【図１２】
0005652242.tif 000013
【図１３】
0005652242.tif 000014
【図１４】
0005652242.tif 000015
【図１５】
0005652242.tif 000016
【図１６】
0005652242.tif 000017
【図１７】
0005652242.tif 000018
【図１８】
0005652242.tif 000019
【図１９】
0005652242.tif 000020