第1オペレーティングシステムから前記第1オペレーティングシステムとは異なる第2オペレーティングシステムで管理するハードウェアデバイスへデータを転送するためのデータ転送命令が、前記第1オペレーティングシステムに対して発行された場合に、前記データ転送命令による転送対象のデータを、前記第1オペレーティングシステム及び前記第2オペレーティングシステムが共有して使用する共有メモリの使用可能なサイズよりも小さいサイズの複数個の分割データに分割して、前記共有メモリに書き込む書込手段と、前記書込手段で前記共有メモリに書き込まれた分割データが前記第2オペレーティングシステムにおいて読み出されて前記ハードウェアデバイスに転送されるように、前記書込手段で前記分割データが前記共有メモリに書き込まれる毎に、前記分割データのデータサイズを転送サイズとして指定した分割データ転送コマンドを生成して前記第2オペレーティングシステムに対して発行する発行手段と、を備えたデータ転送制御装置。第1オペレーティングシステムとは異なる第2オペレーティングシステムで管理するハードウェアデバイスからデータを取得するためのデータ取得命令が、前記第1オペレーティングシステムに対して発行された場合に、前記第2オペレーティングシステムにおいて前記データ取得命令による取得対象のデータが、前記第1オペレーティングシステム及び前記第2オペレーティングシステムが共有して使用する共有メモリの使用可能なサイズよりも小さいサイズの複数個の分割データに分割されて、該分割データ毎に前記ハードウェアデバイスから読み出されて前記共有メモリに書き込まれるように、該分割データのサイズを転送サイズとして指定した分割データ転送コマンドを生成し、該書き込まれた分割データが前記第1オペレーティングシステムにおいて読み出されるように、前記第2オペレーティングシステムに対して発行する発行手段と、前記第2オペレーティングシステムにより前記分割データ転送コマンドに応じて前記共有メモリに書き込まれた分割データを前記共有メモリから読出して前記データ取得命令の発行元に転送する転送手段と、を備えたデータ転送制御装置。前記取得対象のデータの前記共有メモリへの転送が終了した場合に、前記第2オペレーティングシステムに対して既に発行された未実行の前記分割データ転送コマンドの実行が中止されるように制御する制御手段と、を更に備えた請求項2に記載のデータ転送制御装置。前記発行手段は、前記第2オペレーティングシステム上で前記分割データ転送コマンドに応じたデータ転送動作を行うデバイスドライバの転送処理単位サイズの整数倍のサイズであって、前記共有メモリの使用可能なサイズよりも小さいサイズが転送サイズとして指定された分割データ転送コマンドを生成して前記第2オペレーティングシステムに対して発行する請求項1~請求項3のいずれか1項記載のデータ転送制御装置。前記第2オペレーティングシステム上で動作し、前記発行手段から発行された分割データ転送コマンドに応じてデータ転送動作を行うデバイスドライバを更に備えた請求項1~請求項4のいずれか1項記載のデータ転送制御装置。第1オペレーティングシステムから前記第1オペレーティングシステムとは異なる第2オペレーティングシステムで管理するハードウェアデバイスへデータを転送するためのデータ転送命令が、前記第1オペレーティングシステムに対して発行された場合に、前記データ転送命令による転送対象のデータを、前記第1オペレーティングシステム及び前記第2オペレーティングシステムが共有して使用する共有メモリの使用可能なサイズよりも小さいサイズの複数個の第1分割データに分割して、前記共有メモリに書き込む書込手段と、前記書込手段で前記共有メモリに書き込まれた第1分割データが前記第2オペレーティングシステムにおいて読み出されて前記ハードウェアデバイスに転送されるように、前記書込手段で前記第1分割データが前記共有メモリに書き込まれる毎に、前記第1分割データのデータサイズを転送サイズとして指定した第1分割データ転送コマンドを生成して前記第2オペレーティングシステムに対して発行する第1発行手段と、前記ハードウェアデバイスからデータを取得するためのデータ取得命令が、前記第1オペレーティングシステムに対して発行された場合に、前記第2オペレーティングシステムにおいて前記データ取得命令による取得対象のデータが、前記共有メモリの使用可能なサイズよりも小さいサイズの複数個の第2分割データに分割されて、該第2分割データ毎に前記ハードウェアデバイスから読み出されて前記共有メモリに書き込まれるように、該第2分割データのサイズを転送サイズとして指定した第2分割データ転送コマンドを生成し、該書き込まれた第2分割データが前記第1オペレーティングシステムにおいて読み出されるように、前記第2オペレーティングシステムに対して発行する第2発行手段と、前記第2オペレーティングシステムにより前記第2分割データ転送コマンドに応じて前記共有メモリに書き込まれた第2分割データを前記共有メモリから読出して前記データ取得命令の発行元に転送する転送手段と、を備えたデータ転送制御装置。前記第1発行手段は、前記第2オペレーティングシステム上で前記第1分割データ転送コマンドに応じたデータ転送動作を行うデバイスドライバの転送処理単位サイズの整数倍のサイズであって、前記共有メモリの使用可能なサイズよりも小さいサイズが転送サイズとして指定された第1分割データ転送コマンドを生成して前記第2オペレーティングシステムに対して発行し、前記第2発行手段は、前記第2オペレーティングシステム上で前記第2分割データ転送コマンドに応じたデータ転送動作を行うデバイスドライバの転送処理単位サイズの整数倍のサイズであって、前記共有メモリの使用可能なサイズよりも小さいサイズが転送サイズとして指定された第2分割データ転送コマンドを生成して前記第2オペレーティングシステムに対して発行する請求項6に記載のデータ転送制御装置。前記取得対象のデータの前記共有メモリへの転送が終了した場合に、前記第2オペレーティングシステムに対して既に発行された未実行の前記第2分割データ転送コマンドによりデータの転送が実行されないように制御する制御手段と、を更に備えた請求項6又は請求項7に記載のデータ転送制御装置。前記第2オペレーティングシステム上で動作し、前記第1発行手段から発行された第1分割データ転送コマンド及び前記第2発行手段から発行された第2分割データ転送コマンドに応じてデータ転送動作を行うデバイスドライバを更に備えた請求項6~請求項8のいずれか1項記載のデータ転送制御装置。コンピュータを、第1オペレーティングシステムから前記第1オペレーティングシステムとは異なる第2オペレーティングシステムで管理するハードウェアデバイスへデータを転送するためのデータ転送命令が、前記第1オペレーティングシステムに対して発行された場合に、前記データ転送命令による転送対象のデータを、前記第1オペレーティングシステム及び前記第2オペレーティングシステムが共有して使用する共有メモリの使用可能なサイズよりも小さいサイズの複数個の分割データに分割して、前記共有メモリに書き込む書込手段、及び前記書込手段で前記共有メモリに書き込まれた分割データが前記第2オペレーティングシステムにおいて読み出されて前記ハードウェアデバイスに転送されるように、前記書込手段で前記分割データが前記共有メモリに書き込まれる毎に、前記分割データのデータサイズを転送サイズとして指定した分割データ転送コマンドを生成して前記第2オペレーティングシステムに対して発行する発行手段、として機能させるためのプログラム。コンピュータを、第1オペレーティングシステムとは異なる第2オペレーティングシステムで管理するハードウェアデバイスからデータを取得するためのデータ取得命令が、前記第1オペレーティングシステムに対して発行された場合に、前記第2オペレーティングシステムにおいて前記データ取得命令による取得対象のデータが、前記第1オペレーティングシステム及び前記第2オペレーティングシステムが共有して使用する共有メモリの使用可能なサイズよりも小さいサイズの複数個の分割データに分割されて、該分割データ毎に前記ハードウェアデバイスから読み出されて前記共有メモリに書き込まれるように、該分割データのサイズを転送サイズとして指定した分割データ転送コマンドを生成し、該書き込まれた分割データが前記第1オペレーティングシステムにおいて読み出されるように、前記第2オペレーティングシステムに対して発行する発行手段、及び前記第2オペレーティングシステムにより前記分割データ転送コマンドに応じて前記共有メモリに書き込まれた分割データを前記共有メモリから読出して前記データ取得命令の発行元に転送する転送手段、として機能させるためのプログラム。コンピュータを、第1オペレーティングシステムから前記第1オペレーティングシステムとは異なる第2オペレーティングシステムで管理するハードウェアデバイスへデータを転送するためのデータ転送命令が、前記第1オペレーティングシステムに対して発行された場合に、前記データ転送命令による転送対象のデータを、前記第1オペレーティングシステム及び前記第2オペレーティングシステムが共有して使用する共有メモリの使用可能なサイズよりも小さいサイズの複数個の第1分割データに分割して、前記共有メモリに書き込む書込手段、前記書込手段で前記共有メモリに書き込まれた第1分割データが前記第2オペレーティングシステムにおいて読み出されて前記ハードウェアデバイスに転送されるように、前記書込手段で前記第1分割データが前記共有メモリに書き込まれる毎に、前記第1分割データのデータサイズを転送サイズとして指定した第1分割データ転送コマンドを生成して前記第2オペレーティングシステムに対して発行する第1発行手段、前記ハードウェアデバイスからデータを取得するためのデータ取得命令が、前記第1オペレーティングシステムに対して発行された場合に、前記第2オペレーティングシステムにおいて前記データ取得命令による取得対象のデータが、前記共有メモリの使用可能なサイズよりも小さいサイズの複数個の第2分割データに分割されて、該第2分割データ毎に前記ハードウェアデバイスから読み出されて前記共有メモリに書き込まれるように、該第2分割データのサイズを転送サイズとして指定した第2分割データ転送コマンドを生成し、該書き込まれた第2分割データが前記第1オペレーティングシステムにおいて読み出されるように、前記第2オペレーティングシステムに対して発行する第2発行手段、及び前記第2オペレーティングシステムにより前記第2分割データ転送コマンドに応じて前記共有メモリに書き込まれた第2分割データを前記共有メモリから読出して前記データ取得命令の発行元に転送する転送手段、として機能させるためのプログラム。本発明は、共有メモリのサイズに制限があっても、異なるOS間で効率的にデータ転送を行うことができるデータ転送制御装置及びプログラムを得ることを目的とする。請求項1の発明は、第1オペレーティングシステムから前記第1オペレーティングシステムとは異なる第2オペレーティングシステムで管理するハードウェアデバイスへデータを転送するためのデータ転送命令が、前記第1オペレーティングシステムに対して発行された場合に、前記データ転送命令による転送対象のデータを、前記第1オペレーティングシステム及び前記第2オペレーティングシステムが共有して使用する共有メモリの使用可能なサイズよりも小さいサイズの複数個の分割データに分割して、前記共有メモリに書き込む書込手段と、前記書込手段で前記共有メモリに書き込まれた分割データが前記第2オペレーティングシステムにおいて読み出されて前記ハードウェアデバイスに転送されるように、前記書込手段で前記分割データが前記共有メモリに書き込まれる毎に、前記分割データのデータサイズを転送サイズとして指定した分割データ転送コマンドを生成して前記第2オペレーティングシステムに対して発行する発行手段と、を備えたデータ転送制御装置である。請求項2の発明は、第1オペレーティングシステムとは異なる第2オペレーティングシステムで管理するハードウェアデバイスからデータを取得するためのデータ取得命令が、前記第1オペレーティングシステムに対して発行された場合に、前記第2オペレーティングシステムにおいて前記データ取得命令による取得対象のデータが、前記第1オペレーティングシステム及び前記第2オペレーティングシステムが共有して使用する共有メモリの使用可能なサイズよりも小さいサイズの複数個の分割データに分割されて、該分割データ毎に前記ハードウェアデバイスから読み出されて前記共有メモリに書き込まれるように、該分割データのサイズを転送サイズとして指定した分割データ転送コマンドを生成し、該書き込まれた分割データが前記第1オペレーティングシステムにおいて読み出されるように、前記第2オペレーティングシステムに対して発行する発行手段と、前記第2オペレーティングシステムにより前記分割データ転送コマンドに応じて前記共有メモリに書き込まれた分割データを前記共有メモリから読出して前記データ取得命令の発行元に転送する転送手段と、を備えたデータ転送制御装置である。請求項3の発明は、請求項2に記載のデータ転送制御装置において、前記取得対象のデータの前記共有メモリへの転送が終了した場合に、前記第2オペレーティングシステムに対して既に発行された未実行の前記分割データ転送コマンドの実行が中止されるように制御する制御手段と、を更に備えている。請求項4の発明は、請求項1~請求項3のいずれか1項記載のデータ転送制御装置において、前記発行手段は、前記第2オペレーティングシステム上で前記分割データ転送コマンドに応じたデータ転送動作を行うデバイスドライバの転送処理単位サイズの整数倍のサイズであって、前記共有メモリの使用可能なサイズよりも小さいサイズが転送サイズとして指定された分割データ転送コマンドを生成して前記第2オペレーティングシステムに対して発行するものである。請求項5の発明は、請求項1~請求項4のいずれか1項記載のデータ転送制御装置において、前記第2オペレーティングシステム上で動作し、前記発行手段から発行された分割データ転送コマンドに応じてデータ転送動作を行うデバイスドライバを更に備えている。請求項6の発明は、第1オペレーティングシステムから前記第1オペレーティングシステムとは異なる第2オペレーティングシステムで管理するハードウェアデバイスへデータを転送するためのデータ転送命令が、前記第1オペレーティングシステムに対して発行された場合に、前記データ転送命令による転送対象のデータを、前記第1オペレーティングシステム及び前記第2オペレーティングシステムが共有して使用する共有メモリの使用可能なサイズよりも小さいサイズの複数個の第1分割データに分割して、前記共有メモリに書き込む書込手段と、前記書込手段で前記共有メモリに書き込まれた第1分割データが前記第2オペレーティングシステムにおいて読み出されて前記ハードウェアデバイスに転送されるように、前記書込手段で前記第1分割データが前記共有メモリに書き込まれる毎に、前記第1分割データのデータサイズを転送サイズとして指定した第1分割データ転送コマンドを生成して前記第2オペレーティングシステムに対して発行する第1発行手段と、前記ハードウェアデバイスからデータを取得するためのデータ取得命令が、前記第1オペレーティングシステムに対して発行された場合に、前記第2オペレーティングシステムにおいて前記データ取得命令による取得対象のデータが、前記共有メモリの使用可能なサイズよりも小さいサイズの複数個の第2分割データに分割されて、該第2分割データ毎に前記ハードウェアデバイスから読み出されて前記共有メモリに書き込まれるように、該第2分割データのサイズを転送サイズとして指定した第2分割データ転送コマンドを生成し、該書き込まれた第2分割データが前記第1オペレーティングシステムにおいて読み出されるように、前記第2オペレーティングシステムに対して発行する第2発行手段と、前記第2オペレーティングシステムにより前記第2分割データ転送コマンドに応じて前記共有メモリに書き込まれた第2分割データを前記共有メモリから読出して前記データ取得命令の発行元に転送する転送手段と、を備えたデータ転送制御装置である。請求項7の発明は、請求項6に記載のデータ転送制御装置において、前記第1発行手段は、前記第2オペレーティングシステム上で前記第1分割データ転送コマンドに応じたデータ転送動作を行うデバイスドライバの転送処理単位サイズの整数倍のサイズであって、前記共有メモリの使用可能なサイズよりも小さいサイズが転送サイズとして指定された第1分割データ転送コマンドを生成して前記第2オペレーティングシステムに対して発行し、前記第2発行手段は、前記第2オペレーティングシステム上で前記第2分割データ転送コマンドに応じたデータ転送動作を行うデバイスドライバの転送処理単位サイズの整数倍のサイズであって、前記共有メモリの使用可能なサイズよりも小さいサイズが転送サイズとして指定された第2分割データ転送コマンドを生成して前記第2オペレーティングシステムに対して発行する。請求項8の発明は、請求項6又は請求項7に記載のデータ転送制御装置において、前記取得対象のデータの前記共有メモリへの転送が終了した場合に、前記第2オペレーティングシステムに対して既に発行された未実行の前記第2分割データ転送コマンドによりデータの転送が実行されないように制御する制御手段と、を更に備えている。請求項9の発明は、請求項6~請求項8のいずれか1項記載のデータ転送制御装置において、前記第2オペレーティングシステム上で動作し、前記第1発行手段から発行された第1分割データ転送コマンド及び前記第2発行手段から発行された第2分割データ転送コマンドに応じてデータ転送動作を行うデバイスドライバを更に備えている。請求項10の発明は、コンピュータを、第1オペレーティングシステムから前記第1オペレーティングシステムとは異なる第2オペレーティングシステムで管理するハードウェアデバイスへデータを転送するためのデータ転送命令が、前記第1オペレーティングシステムに対して発行された場合に、前記データ転送命令による転送対象のデータを、前記第1オペレーティングシステム及び前記第2オペレーティングシステムが共有して使用する共有メモリの使用可能なサイズよりも小さいサイズの複数個の分割データに分割して、前記共有メモリに書き込む書込手段、及び前記書込手段で前記共有メモリに書き込まれた分割データが前記第2オペレーティングシステムにおいて読み出されて前記ハードウェアデバイスに転送されるように、前記書込手段で前記分割データが前記共有メモリに書き込まれる毎に、前記分割データのデータサイズを転送サイズとして指定した分割データ転送コマンドを生成して前記第2オペレーティングシステムに対して発行する発行手段、として機能させるためのプログラムである。請求項11の発明は、コンピュータを、第1オペレーティングシステムとは異なる第2オペレーティングシステムで管理するハードウェアデバイスからデータを取得するためのデータ取得命令が、前記第1オペレーティングシステムに対して発行された場合に、前記第2オペレーティングシステムにおいて前記データ取得命令による取得対象のデータが、前記第1オペレーティングシステム及び前記第2オペレーティングシステムが共有して使用する共有メモリの使用可能なサイズよりも小さいサイズの複数個の分割データに分割されて、該分割データ毎に前記ハードウェアデバイスから読み出されて前記共有メモリに書き込まれるように、該分割データのサイズを転送サイズとして指定した分割データ転送コマンドを生成し、該書き込まれた分割データが前記第1オペレーティングシステムにおいて読み出されるように、前記第2オペレーティングシステムに対して発行する発行手段、及び前記第2オペレーティングシステムにより前記分割データ転送コマンドに応じて前記共有メモリに書き込まれた分割データを前記共有メモリから読出して前記データ取得命令の発行元に転送する転送手段、として機能させるためのプログラムである。請求項12の発明は、コンピュータを、第1オペレーティングシステムから前記第1オペレーティングシステムとは異なる第2オペレーティングシステムで管理するハードウェアデバイスへデータを転送するためのデータ転送命令が、前記第1オペレーティングシステムに対して発行された場合に、前記データ転送命令による転送対象のデータを、前記第1オペレーティングシステム及び前記第2オペレーティングシステムが共有して使用する共有メモリの使用可能なサイズよりも小さいサイズの複数個の第1分割データに分割して、前記共有メモリに書き込む書込手段、前記書込手段で前記共有メモリに書き込まれた第1分割データが前記第2オペレーティングシステムにおいて読み出されて前記ハードウェアデバイスに転送されるように、前記書込手段で前記第1分割データが前記共有メモリに書き込まれる毎に、前記第1分割データのデータサイズを転送サイズとして指定した第1分割データ転送コマンドを生成して前記第2オペレーティングシステムに対して発行する第1発行手段、前記ハードウェアデバイスからデータを取得するためのデータ取得命令が、前記第1オペレーティングシステムに対して発行された場合に、前記第2オペレーティングシステムにおいて前記データ取得命令による取得対象のデータが、前記共有メモリの使用可能なサイズよりも小さいサイズの複数個の第2分割データに分割されて、該第2分割データ毎に前記ハードウェアデバイスから読み出されて前記共有メモリに書き込まれるように、該第2分割データのサイズを転送サイズとして指定した第2分割データ転送コマンドを生成し、該書き込まれた第2分割データが前記第1オペレーティングシステムにおいて読み出されるように、前記第2オペレーティングシステムに対して発行する第2発行手段、及び前記第2オペレーティングシステムにより前記第2分割データ転送コマンドに応じて前記共有メモリに書き込まれた第2分割データを前記共有メモリから読出して前記データ取得命令の発行元に転送する転送手段、として機能させるためのプログラムである。請求項1に記載の発明によれば、共有メモリのサイズに制限があっても、異なるOS間で効率的にデータ転送を行うことができる。請求項2に記載の発明によれば、共有メモリのサイズに制限があっても、異なるOS間で効率的にデータ転送を行うことができる。請求項3に記載の発明によれば、不要なコマンドの発行による存在しないデータの読み込み待ち状態がデータ転送装置で発生することを防止できる。請求項4に記載の発明によれば、分割データの転送サイズがデバイスドライバの転送処理単位サイズの整数倍のサイズでない場合に比べて、効率的に転送することができる。請求項5に記載の発明によれば、共有メモリのサイズに制限があっても、異なるOS間で効率的にデータ転送を行うことができる。請求項6に記載の発明によれば、共有メモリのサイズに制限があっても、異なるOS間で効率的にデータ転送を行うことができる。請求項7に記載の発明によれば、第1及び第2分割データの転送サイズがデバイスドライバの転送処理単位サイズの整数倍のサイズでない場合に比べて、効率的に転送することができる。請求項8に記載の発明によれば、不要なコマンドの発行による存在しないデータの読み込み待ち状態がデータ転送装置で発生することを防止できる。請求項9に記載の発明によれば、共有メモリのサイズに制限があっても、異なるOS間で本構成を有しない場合に比べて効率的にデータ転送を行うことができる。請求項10に記載の発明によれば、共有メモリのサイズに制限があっても、異なるOS間で効率的にデータ転送を行うことができる。請求項11に記載の発明によれば、共有メモリのサイズに制限があっても、異なるOS間で効率的にデータ転送を行うことができる。請求項12に記載の発明によれば、共有メモリのサイズに制限があっても、異なるOS間で効率的にデータ転送を行うことができる。以下、図面を参照して本発明の実施の形態の一例を詳細に説明する。図1には本実施の形態に係る画像形成装置10が示されている。画像形成装置10には、画像形成装置10の各部の動作を制御する第1制御部12及び第2制御部14と、セットされた読取対象の文書を光学的に読み取って読取画像データを出力する画像読取部20と、入力された画像データが表す画像を記録用紙上に形成する画像形成部22と、LCD等から成る表示部18A及びテンキーやタッチパネル等から成り利用者による操作を受付ける操作受付部18Bが設けられた操作パネル18と、ファクシミリ装置としての機能を備えた他の機器と電話線及び公衆通信網経由で画情報の送受信を行う画情報送受信部24と、PC等の情報処理装置とネットワークケーブル及びコンピュータネットワーク経由で情報の送受信を行うためのネットワーク通信制御部26と、が設けられており、これらはバス28を介して互いに接続されている。第1制御部12はマイクロコンピュータ等から成り、CPU12A、メモリ12B、HDDやフラッシュメモリ等から成る不揮発性の記憶部12Cが設けられている。記憶部12Cには、例えば、画像形成装置10の利用者に対して画像形成装置10の何らかの機能を提供する処理を行うと共に、該機能を提供するための画面を表示部18Aに表示させる画面制御を行うアプリケーションのプログラムと、デバイスドライバに対するAPIとして機能する外部インタフェースのプログラムと、ハードウェアデバイスを制御するためのデバイスドライバのプログラムと、これらプログラムを実行するためのプラットフォームとして機能するオペレーティングシステムのプログラムと、が各々記憶されている。第2制御部14はマイクロコンピュータ等から成り、CPU14A、メモリ14B、HDDやフラッシュメモリ等から成る不揮発性の記憶部14Cが設けられている。記憶部14Cには、例えば、画像形成装置10の利用者に対して画像形成装置10の何らかの機能を提供する処理を行うと共に、該機能を提供するための画面を表示部18Aに表示させる画面制御を行うアプリケーションのプログラムと、デバイスドライバに対するAPIとして機能する外部インタフェースのプログラムと、ハードウェアデバイスを制御するためのデバイスドライバのプログラムと、これらプログラムを実行するためのプラットフォームとして機能するオペレーティングシステムのプログラムとが各々記憶されている。更にまた、第2制御部14には、第1制御部12には設けられていないUSBポート等のインタフェース14Dも設けられている。本実施の形態では、このインタフェース14Dを介したデータ転送に着目して説明する。なお、第2制御部14の記憶部14Cに記憶されているデバイスドライバのプログラムには、ハードウェアデバイスここではインタフェースコントローラ込みのインタフェース14Dに依存し、実際にインタフェース14Dを制御する物理層としてのデバイスドライバ以下、HW依存デバイスドライバのプログラムと、ハードウェアデバイスに依存しない処理を行うインタフェース層及び論理層としてのデバイスドライバ以下、HW非依存デバイスドライバのプログラムと、が含まれる。また、第1制御部12の記憶部12Cに記憶されているデバイスドライバは、インタフェース14Dに着目した場合HW非依存デバイスドライバである。なお、第1制御部12において、何らかのハードウェアデバイスが装備されている場合には、該ハードウェアデバイスに依存するHW依存デバイスドライバのプログラムが当然に記憶部12Cに記憶されているが、本実施の形態では前述したようにインタフェース14Dに着目して説明するため、説明を省略する。図2は、第1制御部12の第1OSのアプリケーション30と、第2OSで制御される第2制御部14のインタフェース14Dとの間でデータ転送を行う場合の動作に着目したときの、第1制御部12の第1OS上で動作するソフトウェア構成図及び第2制御部14の第2OS上で動作するソフトウェア構成図である。図示されるように、第1制御部12側は、上層から順に、アプリケーション30、外部インタフェース32、ハードウェアデバイスに依存しないデバイスドライバHW非依存デバイスドライバ34、OS間通信モジュール36の階層からなり、第2制御部14側は、上層から順に、OS間通信モジュール40、外部インタフェース42、HW非依存デバイスドライバ44、ハードウェアデバイスに依存するデバイスドライバHW依存デバイスドライバ46の階層からなる。アプリケーション30、外部インタフェース32、HW非依存デバイスドライバ34、外部インタフェース42、HW非依存デバイスドライバ44、及びHW依存デバイスドライバ46は、前述した通りであるため説明を省略し、ここでは、OS間通信モジュール36、及びOS間通信モジュール40について説明する。OS間通信モジュール36及びOS間通信モジュール40は、異なるOS間同士で通信を行うときに使用されるモジュールであり、OS間通信モジュール36は第1OSの機能の一部として、OS間通信モジュール40は第2OSの機能の一部として設けられている。OS間通信のための技術としては一般的に知られている様々な技術を採用することができるが、本実施の形態では、第1OS及び第2OSが共有するメモリ領域OS間共有メモリを利用した通信を行うものとする。なお、OS間共有メモリは、例えば、第1制御部12のメモリ12B内に設けられていてもよいし、第2制御部14のメモリ14B内に設けられていてもよく、特に限定されない。図6に示すように、第1OSから第2OSに対するメッセージ或いはコマンドは、予め定められたメモリ領域、ここではOS間共有メモリのOS間通信メッセージ領域50、に格納される。第1OSのOS間通信モジュール36は、第2OSに送信するメッセージ或いはコマンドをこのOS間通信メッセージ領域50に格納する。第2OSのOS間通信モジュール40は、このOS間通信メッセージ領域50に格納されたメッセージ或いはコマンドを取り出す。一方、第2OSから第1OSに対するメッセージ或いはコマンドは、予め定められたメモリ領域、ここでは、OS間共有メモリのOS間通信メッセージ領域54に格納される。OS間通信モジュール40は、第1OSに送信するメッセージ或いはコマンドをこのOS間通信メッセージ領域54に格納する。第1OSのOS間通信モジュール36は、このOS間通信メッセージ領域54に格納されたメッセージ或いはコマンドを取り出す。ところで、前述したようにインタフェース14Dは第2OS側に設けられ第2OS側で管理されるが、第2OS側のインタフェース14Dを制御するインタフェースコントローラ内のメモリに対して第1OS側からデータを書き込んだり、インタフェース14Dを制御するインタフェースコントローラ内のメモリからデータを読み出して第1OS側で該データを取得したりするデータ転送が行われる場合がある。こうしたデータ転送は、第1OS側のアプリケーション30から出力される書込命令以下、ライト命令及び取得命令以下、リード命令に応じて行われる。より具体的には、アプリケーション30からライト命令が発行された場合には、転送対象のデータは、まず、HW非依存デバイスドライバ34により一端OS間共有メモリに書き込まれ、第1OS側から第2OS側に対してOS間通信によりライトコマンドが発行される。このライトコマンドを受けた第2OS側のHW非依存デバイスドライバ44が、該OS間共有メモリに書き込まれたデータを読み出し、このデータを、HW依存デバイスドライバ46がDMA転送によりインタフェース14Dを制御するインタフェースコントローラ内のメモリに転送し書き込む。また、アプリケーション30からリード命令が発行された場合には、まず、第1OS側から第2OS側に対してOS間通信によりリードコマンドが発行される。第2OS側のHW依存デバイスドライバ46は、リードコマンドに応じて、DMA転送によりインタフェース14Dを制御するインタフェースコントローラ内のメモリにDMAを起動してデータを読み出す。読み出されたデータは、HW非依存デバイスドライバ44がOS間共有メモリに書き込み、第1OS側のHW非依存デバイスドライバ34が、該OS間共有メモリに書き込まれたデータを読み出して、アプリケーション30に転送する。ここで、ライト処理時のコマンド等の流れを図2を用いて説明する。アプリケーション30は、外部インタフェース32を介してHW非依存デバイスドライバ34にライト命令を発行する、HW非依存デバイスドライバ34は、発行されたライト命令に従って、第2OS側にライトコマンドを発行するようOS間通信モジュール36にコマンド生成指示を出す。OS間通信モジュール36は、生成指示に従ってライトコマンドを生成して第2OS側のOS間通信モジュール40に発行する。第2OS側のOS間通信モジュール40は、第1OS側から発行されたライトコマンドを外部インタフェース42を介してHW非依存デバイスドライバ44に出力する。HW非依存デバイスドライバ44は、ライトコマンドに従ってOS間共有メモリからデータを読み出す。そして、HW依存デバイスドライバ46が該読み出されたデータを、インタフェース14Dを制御するインタフェースコントローラ内のメモリにDMAを起動して順次書き込む。HW依存デバイスドライバ46で書き込みが終了すると、HW非依存デバイスドライバ44からライト終了メッセージの生成指示がOS間通信モジュール40に出力される。OS間通信モジュール40は、ライト終了メッセージを生成して第1OS側のOS間通信モジュール36に発行する。OS間通信モジュール36で受け取ったライト終了メッセージは、HW非依存デバイスドライバ34に通知され、外部インタフェース32を介してアプリケーション30に通知される。リード処理時のコマンド等の流れも同様である。なお、アプリケーション30からライト命令が発行された場合に、該ライト命令により指定された転送対象のデータの転送サイズがOS間共有メモリの使用可能な領域のサイズ以下であれば、OS間通信モジュール36はアプリケーション30からの該転送サイズのデータを共有メモリに書き込むことができ、第1OS側から該転送サイズが指定されたライトコマンドを1つ第2OS側に発行すれば、上記のように第2OS側のインタフェース14Dへのデータ転送を行うことができるが、転送対象のデータのサイズ未満の領域しかOS間共有メモリに確保できない場合において、従来のように何らの工夫もなければ、OS間共有メモリに転送対象のデータを書き込むことができずに、メモリエラーがアプリケーション30側に返されることとなる。ここで、メモリエラーを受けたアプリケーション30は転送サイズを小さくして再度ライト命令を発行することもできるが、それでもなお転送サイズがOS間共有メモリで使用可能なサイズより大きければ、またメモリエラーが返されることになる。これを繰り返すことは非効率でもあるし、アプリケーション30が転送サイズを小さくしたライト命令を複数回発行する必要が生じる。リード命令の場合も同様である。次に、本実施の形態におけるデータ転送動作の詳細について説明する。まず、第1OS側から第2OS側へデータを転送するライト処理について図3~図12を用いて説明する。なお、以下では、OS間共有メモリを単に共有メモリと呼称する場合もある。HW非依存デバイスドライバ34に対して、アプリケーション30から外部インタフェース32を介してライト命令が発行されると、HW非依存デバイスドライバ34は、図3に示す処理ルーチンを実行する。ステップ100では、共有メモリから、ライト命令図91、図111も参照。において指定されている転送対象のデータの転送サイズデータサイズNの領域を獲得可能か否かを判断する。共有メモリで使用可能な領域のサイズがデータサイズNより小さければ、ステップ102に進み、共有メモリで使用可能な領域のサイズがデータサイズN以上であれば、図4のステップ130に進む。図8に示すように、共有メモリのサイズに制約があり、転送対象のデータが記憶されたアプリケーション30の作業領域のサイズが、共有メモリの使用可能な領域のサイズより大きい場合には、ステップ100で否定判断される。一方、図10に示すように、転送対象のデータが記憶されたアプリケーション30の作業領域のサイズが、共有メモリの使用可能な領域のサイズより小さい場合には、ステップ100で肯定判断される。なお、ここで、アプリケーション30の作業領域は、アプリケーション30がメモリ12Bに確保した領域であって、ライトの場合には、転送対象のデータのサイズに等しいサイズとなる。図8に対応するタイミングチャートを図9に示し、図10に対応するタイミングチャートを図11に示す。まず、図8に示すように、共有メモリのサイズに制約があり、転送対象のデータのサイズよりも、共有メモリの使用可能な領域のサイズが小さい場合について、説明する。図3のステップ102において、共有メモリから使用可能な領域のサイズ以内で、予め定められたサイズα×m個分の領域52を獲得確保する図6も参照。。すなわち、共有メモリの使用可能な領域のサイズをMとすると、α×m<Mとなるように領域を獲得する。ここで、αは共有メモリの使用可能な領域のサイズより小さい値であって、mは1以上の整数である。なお、第2制御部14のHW非依存デバイスドライバ44及びHW依存デバイスドライバ46の作業領域のサイズに応じたサイズとしてもよい。ここで、ライト処理時において第2OS側では、ライトコマンドによりHW非依存デバイスドライバ44は、共有メモリからデータを読み出して予め定められたメモリ14Bの記憶領域デバイスドライバの作業領域へデータを転送し、更にHW依存デバイスドライバ46が該デバイスドライバの作業領域からDMA転送によりインタフェース14Dを制御するインタフェースコントローラ内のメモリにDMAを起動して順次データを転送するようにしている。このデバイスドライバの作業領域は、共有メモリの使用可能なサイズよりも小さいサイズである。また、デバイスドライバの作業領域は通常、複数個例えば2~3個設けられていることが多い。図8に示す例では、デバイスドライバの作業領域が2つ設けられている。この場合、一方の作業領域にHW非依存デバイスドライバ44がデータを書き込んでいる間に、HW依存デバイスドライバ46が他方の作業領域からデータを読み出してインタフェース14Dに転送することができる。作業領域が3つの場合も同様である。このデバイスドライバの作業領域の各々のサイズをdとしたとき、α=βdとしてもよい。ここで、βは1以上の整数である。なお、βを2以上の整数とすることで、デバイスドライバの作業領域を介したデータ転送において、前述したように書き込みと読出しが効率的に行われる。なお、図8に、共有メモリからデータ転送に使用するために獲得した領域を太破線で示した。ステップ104では、分割数nを算出し、パラメータkに1をセットする。ここで、分割数nは、上記データサイズNをαで除算したときの商とする。なお、除算した結果、余りが出た場合には、商に1を加算した値をnとする。ステップ106には、パラメータsに1をセットし、アドレスaddに、上記共有メモリから獲得した領域52の先頭アドレスadd0をセットする。ステップ108では、共有メモリにデータの書き込みが可能か否かを判断する。本実施の形態では、共有メモリから獲得した領域52が転送対象のデータサイズNより小さい場合には、該獲得した領52をリングバッファの如く用いてデータ転送を行うようにしている。そして、HW非依存デバイスドライバ34は、アプリケーション30の作業領域に存在する転送対象のデータを先頭からデータサイズα毎に分割した分割データの各々を、獲得した領域52の先頭アドレスadd0から順に書き込んでいく。ここで、共有メモリに分割データを1つも書き込んでいない状態においては、ステップ108で書き込み可能であると判断できる。しかしながら、共有メモリから獲得した領域52の終端アドレスまで分割データを書き込んだ後は、その次からの分割データは、既に書き込まれたデータに上書きしなくてはらないため、第2OS側で該共有メモリに書き込まれたデータを読み出してデバイスドライバの作業領域に転送した後でないと、次の書き込みができない。従って、HW非依存デバイスドライバ34は、第2OS側から発行されるライト終了メッセージ後述により、共有メモリに分割データαを書き込み可能なだけのサイズがあるかを判断し、書き込み可能なサイズだけの領域ができるまで待機するようにしている。本実施の形態では、後述するように、1つの分割データの書き込みに対して、1つのライトコマンドが第2OSに対して発行される。このライトコマンドに対するライト終了メッセージが第2OSから発行されれば、共有メモリの該分割データを書き込んだ領域は、次の分割データを書き込み可能な領域となる。ステップ108で書き込み可能であると判断した後は、ステップ110に進む。ステップ110では、アプリケーション30の作業領域からサイズα分の分割データを読出し、共有メモリのアドレスaddが示す領域に該分割データを書き込む。ステップ112では、アドレスaddからデータサイズαの分割データが第2OSのHW非依存デバイスドライバ44により読み出されて、HW依存デバイスドライバ46によりインタフェース14Dに転送されるように、該アドレスadd、及びデータサイズαが引数とされたライトコマンドの発行指令をOS間通信モジュール36に出す。OS間通信モジュール36はこの発行指令を受け、ライトコマンドを1つ生成して発行する図9の2、5も参照。。図7Aに、OS間通信モジュール36により生成されるデータ転送コマンドライトコマンド、リードコマンドのフォーマットの一例を示す。図示されるように、データ転送コマンドは、メッセージの発行元及び宛先を示すメッセージ通信ヘッダ情報、第2OSのデバイスドライバに対するコマンドリード或いはライトを示す、引数アドレス、引数データサイズにより構成される。なお、本実施の形態では、アプリケーション30からの1つのライト命令を受け取ると、転送対象のデータを分割し、転送サイズがデータサイズNより小さいライトコマンドを該分割数だけ発行するため、以下では、このライトコマンドを分割ライトコマンドと呼称する。第2OSのOS間通信モジュール40は、分割ライトコマンドを受け取ると、該分割ライトコマンドを外部インタフェース42を介してHW非依存デバイスドライバ44に出力する。これにより、HW非依存デバイスドライバ44は、図5に示す処理ルーチンを実行する。なお、OS間通信モジュール40が分割ライトコマンドをHW非依存デバイスドライバ44に出力するタイミングは、第2OSのデバイスドライバの作業領域の少なくとも1つが使用可能なタイミングである。具体的には、デバイスドライバの作業領域が1つである場合、OS間通信モジュール40が分割ライトコマンドを第1OS側から受け取ったときに、その1つ前に第1OS側から受け取ってHW非依存デバイスドライバ44に出力した分割ライトコマンドここで、先の分割ライトコマンドというの実行が未処理の場合には、これから第2OS側のデバイスドライバ領域を用いたデータ転送が行われるか、或いはデータ転送実行中であるため、OS間通信モジュール40は、先の分割ライトコマンドの実行が終了する例えば、先の分割ライトコマンドに対するリード終了コマンドの発行指令があるまで、第1OS側から受け取った分割ライトコマンドのHW非依存デバイスドライバ44への出力を待つようにしている。また、サイズdのデバイスドライバの作業領域が2つ設けられ、分割データのサイズα分割ライトコマンドで引数として指定されたデータサイズが2dである場合には、先の分割ライトコマンドによるDMA転送後述するが一方の作業領域と他方の作業領域の各々で1回ずつ行われることとなるが、一方の作業領域のDMA転送が終了すれば、該一方の作業領域で次の分割ライトコマンドによるDMA転送が可能となるため、このタイミングで次の分割ライトコマンドを出力すればよい。なお、OS間通信モジュール40が受け取った分割ライトコマンドが、ライト命令による最初の分割ライトコマンドであれば、何ら処理を待つことなくHW非依存デバイスドライバ44に出力される。ここで、図5を参照して、第2OS側のHW非依存デバイスドライバ44のコマンド受信処理について説明する。ステップ200で第1OS側からコマンドを受信すると、ステップ202で、受信したコマンドがライトかリードかを判断する。コマンドがライトであると判断した場合には、ステップ204に進み、分割ライトコマンドの引数で指定された共有メモリのアドレスから、引数で指定されたデータサイズのデータここでは分割データを読み出して、デバイスドライバの作業領域に書き込み、ステップ206で、HW依存デバイスドライバ46に対してIOリクエストを出す図93も参照。。このIOリクエストにより、デバイス処理が行われる。すなわち、デバイスドライバの作業領域に書き込まれたデータが、HW依存デバイスドライバ46により読み出され、インタフェース14Dに対して転送されるDMA転送。DMA転送が終了すると、HW依存デバイスドライバ46からHW非依存デバイスドライバ44に対してDMA転送終了信号が出力される図94も参照。。なお、分割ライトコマンドで指定されたデータサイズが個々のデバイスドライバ領域のサイズdよりも大きなサイズである場合には、共有メモリからデバイスドライバ領域のサイズ分だけのデータを読出して転送する処理を繰り返すことにより指定されたサイズ分の分割データを転送する。なお、デバイスドライバの作業領域が複数個ある場合には、前述したように、書き込みが終了した作業領域からのデータの読み出しと他の作業領域への書き込みを並列に行うようにして、効率的に転送作業を行う。図8及び図9に示す例では、デバイスドライバの作業領域を2個設け、データサイズαをデバイスドライバの作業領域dの2倍としており、データサイズαの分割データが2回のDMA転送で転送されるようにしている。ステップ208では、分割ライトコマンドで指定されたデータサイズ分のデータ転送が終了したか否かを判断し、終了していないと判断した場合には、ステップ204に戻って上記処理を繰り返す。また、ステップ208で、転送が終了したと判断した場合には、ステップ210に進む。ステップ210では、ライト終了メッセージの発行指令をOS間通信モジュール40に対して出力する。これにより、OS間通信モジュール40は、ライト終了メッセージを作成して第1OSのOS間通信モジュール36に発行する図96、8、9も参照。。図7Bは、OS間通信モジュール40により生成されるデータ転送終了メッセージライト終了、リード終了のフォーマットの一例を示す図である。図示されるように、データ転送終了メッセージは、メッセージの発行元及び宛先を示すメッセージ通信ヘッダ情報、ライト終了かリード終了かのステータスを示すステータス情報により構成される。ステータス情報には、転送したデータのサイズを示す情報を含めてもよい。なお、第2OSに発行されたコマンドが、分割ライトコマンドではなく、ライトコマンドであっても、第2OSにおけるHW非依存デバイスドライバ44及びHW依存デバイスドライバ46によるデータ転送は上記と同様に行われる。一方、HW非依存デバイスドライバ34は、ステップ112の発行指令を出した後、ステップ114で、sに1を加算し、kに1を加算する。また、アドレスaddにαを加算する。ステップ116では、kがnに等しいか否かを判断する。ここで否定判断した場合には、ステップ118に進む。ステップ118では、sがmより大きいか否かを判断する。ここで、sがmより大きいと判断した場合には、共有メモリに確保した領域52へのm個分の分割データの書き込みが終了したことを示すため、ステップ106に戻り、sに1をセットして初期化すると共に、アドレスaddに領域52の先頭アドレスadd0をセットして、上記説明した処理を繰り返す。一方、ステップ118で否定判断した場合には、共有メモリに確保した領域52へのm個分の分割データの書き込みが終了していないことを示すため、ステップ108に戻り、上記説明した処理を繰り返す。また、ステップ116で、kがnに等しいと判断した場合には、次に共有メモリに書き込む分割データは、最後の分割データすなわちn番目の分割データとなるため、ステップ120に進む。ステップ120では、sがmより大きいか否かを判断し、大きいと判断したときは、ステップ122で、アドレスaddに領域52の先頭アドレスadd0をセットして、ステップ124に進む。また、ステップ120でsがm以下であると判断した場合には、ステップ122をスキップして、ステップ124に進む。ステップ124では、ステップ108と同様に分割データの書き込みが可能か否かを判断し、可能であると判断した場合には、ステップ126に進み、アプリケーション30の作業領域からn番目の分割データを読出し、共有メモリのアドレスaddが示す領域に該分割データを書き込む。ステップ128では、アドレスadd、及びn番目の分割データのデータサイズn番目の分割データは、データサイズがαであるとは限らないが引数とされた分割ライトコマンドの発行指令をOS間通信モジュール36に出す。OS間通信モジュール36はこの発行指令を受け、分割ライトコマンドを1つ生成して発行する図9の7も参照。。ステップ130では、転送対象のデータのライト処理が終了したか否かを判断する。ここでは、n番目の分割ライトコマンドに対するライト終了メッセージが第2OS側のOS間通信モジュール40から発行されたことをもって図99も参照。ライト終了と判断する。ステップ130で肯定判断した場合には、ステップ132に進み、アプリケーション30に対して、ライト終了を示す結果を通知する図910も参照。。次に、図10に示すように、転送対象のデータのサイズが、OS間共有メモリの使用可能なサイズ以下であるためステップ100において肯定判断された場合の処理について説明する。図4のステップ140では、共有メモリから、ライト命令図111も参照。において指定されたデータサイズN分のサイズの領域を獲得する。ステップ142では、分割数nを算出し、パラメータkに1をセットする。分割数nの算出方法は、ステップ104と同様である。ステップ144では、アドレスaddに、上記共有メモリから獲得した領域の先頭アドレスadd0をセットする。ステップ146では、アプリケーション30の作業領域からサイズαの分割データを読出し、共有メモリのアドレスaddが示す領域に該分割データを書き込む。ステップ148では、アドレスaddからデータサイズαの分割データが第2OSのHW非依存デバイスドライバ44により読み出されて、HW依存デバイスドライバ46によりインタフェース14Dに転送されるように、該アドレスadd、及びデータサイズαが引数とされた分割ライトコマンドの発行指令をOS間通信モジュール36に出す。OS間通信モジュール36はこの発行指令を受け、分割ライトコマンドを1つ生成して発行する図11の2、5も参照。。なお、第2OS側で分割ライトコマンドを受信した場合の処理については、上記説明した通りであるため、説明を省略する図11の3、4、6、8も参照。。続いて、ステップ150では、kに1を加算し、アドレスaddにαを加算する。ステップ152では、kがnに等しいか否かを判断する。ここで否定判断した場合には、ステップ146に戻り、上記説明した処理を繰り返す。また、ステップ152で肯定判断した場合には、次に共有メモリに書き込む分割データは、最後の分割データすなわちn番目の分割データとなるため、ステップ154に進む。ステップ154では、アプリケーション30の作業領域からn番目の分割データを読出し、共有メモリのアドレスaddが示す領域に該分割データを書き込む。ステップ156では、アドレスadd、及びn番目の分割データのデータサイズn番目の分割データは、データサイズがαであるとは限らないが引数とされた分割ライトコマンドの発行指令をOS間通信モジュール36に出す。OS間通信モジュール36はこの発行指令を受け、分割ライトコマンドを1つ生成して発行する図11の7も参照。。ステップ158では、転送対象のデータのライト処理が終了したか否かを判断する。ここでは、n番目の分割ライトコマンドに対するライト終了メッセージが第2OS側のOS間通信モジュール40から発行されたことをもって図119も参照。ライト終了と判断する。ステップ158で肯定判断した場合には、図3のステップ132に進み、アプリケーション30に対して、ライト終了を示す結果を通知する図1110も参照。。なお、上記実施の形態では、ステップ100で肯定判断した場合にも転送対象のデータを複数に分割して共有メモリに書き込み、第2OSに対して分割ライトコマンドを発行する例について説明したが、これに限定されない。例えば、ステップ100で肯定判断した場合には、転送対象のデータを分割せずに共有メモリに書き込み、転送対象のデータのデータサイズNを引数とするライトコマンドを第2OSに発行するようにしてもよい。このように処理する場合には、図4に示すステップ140~ステップ158に示す処理に代えて、図12に示すステップ160~ステップ166に示す処理を行う。ステップ160では、共有メモリから、ライト命令において指定されたデータサイズN分のサイズの領域52を獲得する。ステップ162では、アプリケーション30の作業領域から転送対象のデータの全てを読出し、共有メモリの上記獲得した領域52に書き込む。ステップ148では、上記獲得した領域52の先頭アドレスadd0からデータサイズNのデータが第2OSのHW非依存デバイスドライバ44により読み出されて、HW依存デバイスドライバ46によりインタフェース14DにDMAにより順次転送されるように、該アドレスadd0、及びデータサイズNが引数とされたライトコマンドの発行指令をOS間通信モジュール36に出す。OS間通信モジュール36はこの発行指令を受け、ライトコマンドを1つ生成して発行する。なお、第2OSに発行されるコマンドが、分割ライトコマンドではなく、ライトコマンドであっても、そのフォーマットは、前述したフォーマットと共通である。また、ライトコマンドによる第2OS側の処理は、上記分割ライトコマンドによる処理と同様に行われる。ステップ166では、転送対象のデータのライト処理が終了したか否かを判断する。ここでは、ライトコマンドに対するライト終了メッセージが第2OS側のOS間通信モジュール40から発行されたことをもってライト終了と判断する。ステップ166で肯定判断した場合には、図3のステップ132に進み、アプリケーション30に対して、ライト終了を示す結果を通知する。次に、第1OSのアプリケーション30が第2OS側のインタフェース14Dを制御するインタフェースコントローラ内のメモリからデータを取得するするリード処理について図13~図19、及び図5を用いて説明する。なお、リード処理の場合も、上記ライト処理と同様に、転送対象のデータを複数個に分割した分割データ毎に共有メモリに書き込んで転送するものとする。また、第1OS側から第2OS側に対して分割データ毎に発行されるリードコマンドを、分割リードコマンドと呼称する。HW非依存デバイスドライバ34に対して、アプリケーション30から外部インタフェース32を介してリード命令が発行されると、HW非依存デバイスドライバ34は、図13に示す処理ルーチンを実行する。ステップ300では、共有メモリから、リード命令において指定されている転送対象のデータの転送サイズデータサイズNの領域を獲得可能か否かを判断する。共有メモリで使用可能な領域のサイズがデータサイズNより小さければ、ステップ302に進み、共有メモリで使用可能な領域のサイズがデータサイズN以上であれば、図14のステップ340に進む。なお、リードの場合には、取得するデータが第2OS側に存在するため、リード命令を出す段階において第1OS側のアプリケーション30は、取得するデータの実サイズはわからない。従って、アプリケーション30では、予め定められた大きさ転送可能な程度に十分な大きさの作業領域をメモリ12Bに確保し、この作業領域のサイズを転送サイズデータサイズNとしてリード命令で指定するようにしている。図15に示すように、共有メモリのサイズに制約があり、転送対象のデータを取得するために確保されたアプリケーション30の作業領域のサイズが、共有メモリの使用可能な領域のサイズより大きい場合には、ステップ300で否定判断される。一方、図16に示すように、転送対象のデータを取得するために確保されたアプリケーション30の作業領域のサイズが、共有メモリの使用可能な領域のサイズより小さい場合には、ステップ300で肯定判断される。なお、ここでは、図15に示すリード処理のタイミングチャートの例は省略し、図16に示すリード処理のタイミングチャートの例を図18に示す。まず、図15に示すように、共有メモリのサイズに制約があり、アプリケーション30の作業領域のサイズよりも、共有メモリの使用可能な領域のサイズが小さい場合について、説明する。図13のステップ302において、共有メモリから使用可能な領域のサイズ以内で、予め定められたサイズα×m個分の領域52を獲得確保する。この処理は、ライトの場合のステップ102と同様である。ステップ304では、分割数nを算出し、パラメータkに1をセットする。ここで、分割数nは、上記データサイズNをαで除算したときの商とする。なお、除算した結果、余りが出た場合には、商に1を加算した値をnとする。ステップ306には、パラメータsに1をセットし、アドレスaddに、上記共有メモリから獲得した領域の先頭アドレスadd0をセットする。ステップ308では、第2OS側における転送対象のデータのリード処理が終了したか否かを判断する。ここでは、転送対象のデータの最後の分割データのリード処理が終了したことを示すリード終了メッセージが第2OS側のOS間通信モジュール40から発行されたことをもって、リード終了と判断する。第2OS側のOS間通信モジュール40は、最後の分割データのリード処理が終了した場合には、リード終了メッセージのステータス情報図7Bも参照。に、最後の分割データのリード処理終了を示す情報を含めてリード終了メッセージを生成する後述。従って、HW非依存デバイスドライバ34は、リード終了メッセージのステータス情報からステップ308を判断する。なお、転送対象のデータの最後の分割データが、n番目の分割データであるとは限らない。これは、前述したように、第1OS側のアプリケーション30は、第2OS側から取得する転送対象のデータの正確なサイズを把握していないため、上記データサイズNよりも転送対象のデータのサイズが小さければ、上記算出したnよりも少ない数の分割リードコマンドでリード処理が終了することがあるからである。また、分割リードコマンドを1つも出していない初期の段階では、ステップ308は当然ながら否定判断される。従って、ステップ310に進む。ステップ310では、共有メモリにデータの書き込みが可能か否かを判断する。リード処理においては、第2OSに対する分割リードコマンドの発行により、第2OS側のHW非依存デバイスドライバ44が共有メモリに転送対象のデータを書き込む。書き込みが終了すると後述するようにリード終了メッセージが第2OS側から第1OS側に発行されるが、このメッセージをもって、第1OS側のHW非依存デバイスドライバ34は、共有メモリに書き込まれた分割データを読み出して、アプリケーション30の作業領域に転送する。なお、この共有メモリからアプリケーション30の作業領域へのデータ転送は、OS間通信モジュール36を介して入力される第2OS側からのリード終了メッセージに応じて逐次行われるが、本フローチャートでは図示を省略している。一方、前述したように、共有メモリのサイズに制約があり、上記確保した領域52をリングバッファの如く用いて使用する。ここで、共有メモリに分割データが1つも書き込まれていない状態分割リードコマンドが1つも発行されていない状態においては、ステップ310で書き込み可能であると判断できる。しかしながら、共有メモリから獲得した領域52の終端アドレスまで分割データが書き込まれた後は、次の分割データは、既に書き込まれたデータに上書きしなくてはらないため、第1OS側のHW非依存デバイスドライバ34が該共有メモリに書き込まれたデータを読み出してアプリケーション30の作業領域に転送した後でないと、第2OS側のHW非依存デバイスドライバ44は次の書き込みができない。HW非依存デバイスドライバ34は、自身が実行する転送処理とリード終了コマンドとに応じて、共有メモリに分割データαを書き込み可能なだけのサイズがあるかを判断し、書き込み可能な領域ができるまでステップ310では書き込み不能であると判断して待機するようにしている。本実施の形態では、後述するように、1つの分割リードコマンドに対して、1つの分割データが書き込まれ、1つの分割データの書き込みに対して、1つのリード終了メッセージが第2OSから発行される。この分割リードコマンドに対応するリード終了メッセージが第2OSから発行され、この分割データをHW非依存デバイスドライバ34が読み出してアプリケーション30の作業領域に転送すれば、共有メモリの該分割データを書き込んだ領域は、次の分割データを書き込み可能な領域となる。ステップ310で書き込み可能であると判断した後は、ステップ312に進む。ステップ312では、第2OS側のHW依存デバイスドライバ46によりインタフェース14Dを介して転送対象のデータを分割したデータサイズαの分割データが読み出され、第2OSのHW非依存デバイスドライバ44により該読み出された分割データが共有メモリのアドレスaddに書き込まれるように、該アドレスadd、及びデータサイズαが引数とされたリードコマンドの発行指令をOS間通信モジュール36に出す。OS間通信モジュール36はこの発行指令を受け、リードコマンドを1つ生成して発行する。ステップ314では、sに1を加算し、kに1を加算する。また、アドレスaddにαを加算する。ステップ316では、kがnに等しいか否かを判断する。ここで否定判断した場合には、ステップ318に進む。ステップ318では、sがmより大きいか否かを判断する。ここで、sがmより大きいと判断した場合には、共有メモリに確保した領域52へのm個分の分割データの転送のための分割リードコマンドの発行が終了したことを示すため、ステップ306に戻り、sに1をセットして初期化すると共に、アドレスaddに領域52の先頭アドレスadd0をセットして、上記説明した処理を繰り返す。一方、ステップ318で否定判断した場合には、共有メモリに確保した領域52へのm個分の分割データの転送のための分割リードコマンドの発行が終了していないことを示すため、ステップ308に戻り、上記説明した処理を繰り返す。また、ステップ316で、kがnに等しいと判断した場合には、次に発行する分割リードコマンドはn番目の分割リードコマンドであるため、ステップ320に進む。ステップ320では、sがmより大きいか否かを判断し、大きいと判断したときは、ステップ322で、アドレスaddに領域52の先頭アドレスadd0をセットして、ステップ324に進む。また、ステップ320でsがm以下であると判断した場合には、ステップ322をスキップして、ステップ324に進む。ステップ324では、ステップ308と同様に、第2OS側における転送対象のデータのリード処理が終了したか否かを判断する。ステップ324で、転送対象のデータのリード処理が終了していないと判断した場合には、ステップ326に進む。ステップ326では、ステップ310と同様に、分割データの書き込みが可能か否かを判断し、可能であると判断した場合には、ステップ328に進み、アドレスadd、及びn番目の分割データのデータサイズn番目の分割データは、データサイズがαであるとは限らないが引数とされた分割リードコマンドの発行指令をOS間通信モジュール36に出す。OS間通信モジュール36はこの発行指令を受け、分割リードコマンドを1つ生成して発行する。ステップ330では、ステップ308と同様に、第2OS側における転送対象のデータのリード処理が終了したか否かを判断する。ステップ308、324、及び330で肯定判断した場合には、ステップ332に進み、共有メモリから最後の分割データを読み出してアプリケーション30の作業領域に転送したか否かを判断し、否定判断中は、待機状態を続ける。また、ステップ332で肯定判断した場合には、ステップ334に進み、アプリケーション30に対して、リード終了を示す結果を通知する。すなわち、転送対象のデータの全てがアプリケーション30の作業領域に書き込まれた段階で、アプリケーション30に対して結果通知を出すようにしている。なお、ステップ308、324の段階で、第2OS側における転送対象のデータのリード処理が終了したと判断した場合には、n番目の分割リードコマンドを発行する前に分割リードコマンドの発行が中止されることになる。これは、前述したように、第1OS側のアプリケーション30は、第2OS側から取得する転送対象のデータの正確なサイズを把握していないため、上記データサイズNよりも転送対象のデータのサイズが小さければ、上記算出したnよりも少ない数の分割リードコマンドでリード処理が終了することがあるからである。従って、データサイズNよりも転送対象のデータのサイズが小さければ、図15、及び図16に示すように、アプリケーション30がメモリ12Bに確保した作業領域に、未使用領域が生じることもある。次に、図16に示すように、データサイズNが、OS間共有メモリの使用可能なサイズ以下であるためステップ300において肯定判断された場合の処理について説明する。ステップ300で肯定判断されると、図14のステップ340に進み、共有メモリから、リード命令図181も参照。において指定されたデータサイズN分のサイズの領域を獲得する。ステップ342では、分割数nを算出し、パラメータkに1をセットする。分割数nの算出方法は、ステップ304と同様である。ステップ344では、アドレスaddに、上記共有メモリから獲得した領域52の先頭アドレスadd0をセットする。ステップ346では、ステップ308と同様に、転送対象のデータのリード処理が終了したか否かを判断する。ステップ346で否定判断した場合には、ステップ348に進み、第2OS側のHW依存デバイスドライバ46によりインタフェース14Dを介して転送対象のデータを分割したデータサイズαの分割データが読み出され、第2OSのHW非依存デバイスドライバ44により該読み出された分割データが共有メモリのアドレスaddに書き込まれるように、該アドレスadd、及びデータサイズαが引数とされたリードコマンドの発行指令をOS間通信モジュール36に出す。OS間通信モジュール36はこの発行指令を受け、リードコマンドを1つ生成して発行する図182、5、6、8も参照。。ステップ350では、kに1を加算し、アドレスaddにαを加算する。ステップ352では、kがnに等しいか否かを判断する。ここで否定判断した場合には、ステップ346に戻り、上記説明した処理を繰り返す。また、ステップ352で肯定判断した場合には、ステップ354に進み、ステップ308と同様に、転送対象のデータのリード処理が終了したか否かを判断する。ステップ354で否定判断した場合には、ステップ356に進み、アドレスadd、及びn番目の分割データのデータサイズn番目の分割データは、データサイズがαであるとは限らないが引数とされた分割リードコマンドの発行指令をOS間通信モジュール36に出す。OS間通信モジュール36はこの発行指令を受け、分割リードコマンドを1つ生成して発行する。ステップ358では、ステップ308と同様に、転送対象のデータのリード処理が終了したか否かを判断する。ステップ346、354、及び358で肯定判断した場合には、ステップ332に進み、ステップ332で肯定判断された場合には、ステップ334で、アプリケーション30に対して、リード終了を示す結果を通知する図1811も参照。。一方、第2OS側のHW非依存デバイスドライバ44は、OS間通信モジュール40を介して第1OS側からの分割リードコマンドを受け取ると、図5に示す処理ルーチンを実行する。ステップ200で第1OS側からコマンドを受信すると、ステップ202で、受信したコマンドがライトかリードかを判断する。コマンドがリードであると判断した場合には、ステップ212に進み、HW依存デバイスドライバ46に対してIOリクエストを出す図18の3も参照。このIOリクエストにより、デバイス処理が行われる。すなわち、HW依存デバイスドライバ46は、IOリクエストに応じて、インタフェース14Dを制御するインタフェースコントローラ内のメモリからデータを読み出して、デバイスドライバの作業領域に書き込むDMA転送。DMA転送が終了すると、HW依存デバイスドライバ46からHW非依存デバイスドライバ44に対してDMA転送終了信号が出力される図18の4も参照。ステップ214では、デバイスドライバの作業領域に書き込まれたデータが、HW非依存デバイスドライバ44により読み出され、共有メモリに書き込まれる。なお、分割リードコマンドで指定されたデータサイズが個々のデバイスドライバ領域のサイズdよりも大きなサイズである場合には、分割リードコマンドで指定されたデータサイズ分だけDMA転送されるように、HW非依存デバイスドライバ44からHW依存デバイスドライバ46に対してIOリクエストが複数回出力される。なお、デバイスドライバの作業領域が複数個ある場合には、前述したように、書き込みが終了した作業領域からのデータの読み出しと他の作業領域への書き込みを並列に行うようにして、効率的に転送作業を行う。図18に示す例では、デバイスドライバの作業領域を2個設け、データサイズαをデバイスドライバの作業領域dの2倍としており、データサイズαの分割データが2回のDMA転送で読み出されて転送されるようにしている。ステップ216では、分割リードコマンドで指定されたデータサイズ分のデータ転送共有メモリへの書き込みが終了したか否かを判断し、終了していないと判断した場合には、ステップ212に戻って上記処理を繰り返す。また、ステップ216で、転送が終了したと判断した場合には、ステップ218に進む。なお、ここで、HW非依存デバイスドライバ44は、HW依存デバイスドライバ46により、データがデバイスドライバの作業領域の途中までしかDMA転送されなかった場合デバイスドライバの作業領域のサイズよりもDMA転送されたデータのサイズが小さかった場合には、分割リードコマンドで指定されたデータサイズより転送したデータサイズのサイズが小さくても、転送対象のデータの全てが、インタフェース14Dを制御するインタフェースコントローラ内のメモリから読み出されたと判断して、このデータをデバイスドライバの作業領域から共有メモリに転送したときに、ステップ216で肯定判断し、ステップ218に進むものとする。ステップ218では、リード終了メッセージの発行指令をOS間通信モジュール40に対して出力する。これにより、OS間通信モジュール40は、リード終了メッセージを作成して第1OSのOS間通信モジュール36に発行する図187、9、10も参照。リード終了メッセージのフォーマットは、図7Bを用いて説明した通りである。ただし、本実施の形態では、リード終了メッセージにより、転送対象のデータの転送共有メモリへの書き込みが終了したか否かの判断ができるように、ステータス情報に、対応する分割リードコマンドに応じて転送したデータのサイズの情報を含めるようにしている。例えば、転送したデータのサイズが分割リードコマンドで指定したデータ転送サイズより小さければ、転送対象のデータの転送共有メモリへの書き込みが終了したと判断できる。これにより、第1OS側のOS間通信モジュール36及びHW非依存デバイスドライバ34は、図13、図14のステップ308、324、330、346、354、358における判断が可能となる。なお、ステータス情報に、転送したデータのサイズと共に、或いはデータのサイズの代わりに、転送対象のデータについての転送が全て終了した旨の状態情報を含めるようにしてもよい。これにより、第2OSにおいて転送対象のデータの全てのデータ転送が終了した旨を示すステータス情報が生成され、該ステータス情報を含むリード終了メッセージ以下、最終リード終了メッセージというが生成され発行される図1810も参照。なお、第2OSに発行されたコマンドが、分割リードコマンドではなく、リードコマンドであっても、第2OSにおけるHW非依存デバイスドライバ44及びHW依存デバイスドライバ46によるデータ転送は上記と同様に行われる。ここで、リード処理時における第2OS側のOS間通信モジュール40の処理について説明する。図17は、第2制御部14のOS間通信モジュール40で行われるリードコマンド処理の処理ルーチンを示すフローチャートである。ステップ400では、第2OS側における転送対象のデータのリード処理共有メモリへの書き込みが終了したか否かを判断する。例えば、OS間通信モジュール40は、HW非依存デバイスドライバ44からのリード終了メッセージの発行指令に、ステータス情報を生成するための情報として転送したデータのサイズが含まれている場合に、該転送したデータのサイズが、該リード終了メッセージに対応する分割リードコマンドで指定されたデータサイズよりも小さければ、第2OS側において転送対象のデータのリード処理が終了したと判断するようにしてもよい。或いは、データサイズではなく、明示的に最終分割データのリード処理が終了したことを示すステータス情報が生成されるように発行指令を出してもよい。ステップ400で否定判断した場合には、ステップ402で通常のリードコマンド出力処理を行う。ここで、通常のリードコマンド出力処理とは、第2OSのOS間通信モジュール40は、分割リードコマンドを受け取った場合に、予め定められた出力タイミングで該分割リードコマンドを外部インタフェース42を介してHW非依存デバイスドライバ44に出力する処理いう。該分割リードコマンドを受け取ったHW非依存デバイスドライバ44は、図5に示す処理ルーチンを実行する。なお、OS間通信モジュール40が分割リードコマンドをHW非依存デバイスドライバ44に出力するタイミングは、第2OSのデバイスドライバの作業領域の少なくとも1つが使用可能なタイミングである。なお、このタイミングは、分割ライトコマンドの出力タイミングについての説明と同様であるため、ここでは説明を省略する。一方、ステップ400で肯定判断した場合には、ステップ404でアボート処理を行う。第2OS側における転送対象のデータのリード処理共有メモリへの書き込みが終了した場合には、第1OS側で最終リード終了メッセージを受け取る前に発行され、HW非依存デバイスドライバ44に対して未出力の分割リードコマンドについては、HW非依存デバイスドライバ44に出力する必要はないため、これら分割リードコマンドをHW非依存デバイスドライバ44に出力せずに消去する処理を行う。これをアボート処理という。例えば、図18に示す例では、3番目の分割リードコマンド図18の6に対するリード終了メッセージ図18の10の発行指令により、第2OS側の転送対象のデータのリード処理が終了したことがわかるため、4番目の分割リードコマンドは出力しなくてよい。従って、4番目の分割リードコマンドをアボートする図18の8も参照。。なお、上記実施の形態では、ステップ300で肯定判断した場合にも、第2OSに対して分割リードコマンドを発行する例について説明したが、これに限定されない。例えば、ステップ300で肯定判断した場合には、転送対象のデータのデータサイズNを引数とするリードコマンドを第2OSに発行するようにしてもよい。このように処理する場合には、図14に示すステップ340~ステップ358に示す処理に代えて、図19に示すステップ360~ステップ364に示す処理を行う。ステップ360では、共有メモリから、リード命令において指定されたデータサイズN分のサイズの領域52を獲得する。ステップ362では、第2OS側のHW依存デバイスドライバ46によりインタフェース14Dを介して転送対象のデータが読み出され、第2OSのHW非依存デバイスドライバ44により該読み出されたデータが共有メモリのアドレスadd0に書き込まれるように、該アドレスadd0、及びデータサイズNが引数とされたリードコマンドの発行指令をOS間通信モジュール36に出す。OS間通信モジュール36はこの発行指令を受け、リードコマンドを1つ生成して発行する。なお、第2OSに発行されるコマンドが、分割リードコマンドではなく、リードコマンドであっても、そのフォーマットは、前述したフォーマットと共通である。ステップ364では、第2OS側における転送対象のデータのリード処理が終了したか否かを判断する。ここでは、ステップ362で発行したリードコマンドに対するリード終了メッセージを受け取ったことをもってリード処理が終了したと判断する。ここで、肯定判断した場合には、図13のステップ332に進み、ここで肯定判断された場合には、ステップ334で、アプリケーション30に対して、リード終了を示す結果を通知する。上記実施の形態では、分割データのデータサイズαを予め定められたサイズ固定とする例について説明したが、これに限定されず、例えばHW非依存デバイスドライバ44が、アプリケーション30の作業領域のサイズすなわち、ライト命令或いはリード命令で指定されたデータサイズN。なお、アプリケーション30においてライト命令或いはリード命令時に動的に確保される領域であって固定のサイズではないと、共有メモリの使用可能な領域のサイズデータ転送用に予め設けられた領域であるため固定サイズと、第2OS側のデバイスドライバの作業領域固定サイズ及びその個数と、に応じて、効率的に転送可能な分割データのサイズを決定し、分割ライトコマンド、或いは分割リードコマンドを発行するようにしてもよい。また、上記実施の形態では、第2制御部14に設けられ、第2OS側で管理制御されるハードウェアデバイスとして、USBポート等のインタフェース14Dを例に挙げて説明したが、これに限定するものではなく、他のハードウェアデバイスであってもよい。例えば、第2制御部14にHDD等のハードウェアデバイスが設けられている場合には、該HDDであってもよいし、CD-RW等の記憶媒体に対して書き込み及び読出し可能なデバイスであってもよい。このようなハードウェアデバイスであっても、上記実施の形態のように第1OS側から分割データ転送コマンドを発行して、上記のようにデータを読み出したり、書き込んだりすることがなされる。また、HW非依存デバイスドライバ34が、共有メモリから、予め定められたデータサイズα×m個の領域52を獲得する例について説明したが、獲得するサイズは、共有メモリの使用可能な領域のサイズより小さいサイズであればよく、α×mでははくてもよい。また、上記実施の形態では、データ転送制御装置が適用される例として画像形成装置を例に挙げて説明したが、これに限定されるものではなく、複数のOSが動作する様々な装置に適用可能である。