【文献】
田中 昌宏,グラフ分割による広域分散並列ワークフローの効率的な実行,先進的計算基盤システムシンポジウム SACSIS2010 論文集,日本,社団法人情報処理学会,2010年 5月20日,第2010巻,第5号,pp.63-70
【文献】
橋本 茂,データ転送と処理のオーバーラップを用いたマクロタスクスケジューリング手法,電子情報通信学会技術研究報告,日本,社団法人電子情報通信学会,1997年 1月29日,第96巻,第503号,pp.65-72
(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0017】
以下、図面に基づき本発明を実現するにあたっての好適な一実施の形態の例を説明する。
図1は、本実施の形態の構成例についての概念的なモジュール構成図を示している。
なお、モジュールとは、一般的に論理的に分離可能なソフトウェア(コンピュータ・プログラム)、ハードウェア等の部品を指す。したがって、本実施の形態におけるモジュールはコンピュータ・プログラムにおけるモジュールのことだけでなく、ハードウェア構成におけるモジュールも指す。それゆえ、本実施の形態は、それらのモジュールとして機能させるためのコンピュータ・プログラム(コンピュータにそれぞれの手順を実行させるためのプログラム、コンピュータをそれぞれの手段として機能させるためのプログラム、コンピュータにそれぞれの機能を実現させるためのプログラム)、システム及び方法の説明をも兼ねている。ただし、説明の都合上、「記憶する」、「記憶させる」、これらと同等の文言を用いるが、これらの文言は、実施の形態がコンピュータ・プログラムの場合は、記憶装置に記憶させる、又は記憶装置に記憶させるように制御するという意味である。また、モジュールは機能に一対一に対応していてもよいが、実装においては、1モジュールを1プログラムで構成してもよいし、複数モジュールを1プログラムで構成してもよく、逆に1モジュールを複数プログラムで構成してもよい。また、複数モジュールは1コンピュータによって実行されてもよいし、分散又は並列環境におけるコンピュータによって1モジュールが複数コンピュータで実行されてもよい。なお、1つのモジュールに他のモジュールが含まれていてもよい。また、以下、「接続」とは物理的な接続の他、論理的な接続(データの授受、指示、データ間の参照関係等)の場合にも用いる。「予め定められた」とは、対象としている処理の前に定まっていることをいい、本実施の形態による処理が始まる前はもちろんのこと、本実施の形態による処理が始まった後であっても、対象としている処理の前であれば、そのときの状況・状態に応じて、又はそれまでの状況・状態に応じて定まることの意を含めて用いる。「予め定められた値」が複数ある場合は、それぞれ異なった値であってもよいし、2以上の値(もちろんのことながら、全ての値も含む)が同じであってもよい。また、「Aである場合、Bをする」という意味を有する記載は、「Aであるか否かを判断し、Aであると判断した場合はBをする」の意味で用いる。ただし、Aであるか否かの判断が不要である場合を除く。
また、システム又は装置とは、複数のコンピュータ、ハードウェア、装置等がネットワーク(一対一対応の通信接続を含む)等の通信手段で接続されて構成されるほか、1つのコンピュータ、ハードウェア、装置等によって実現される場合も含まれる。「装置」と「システム」とは、互いに同義の用語として用いる。もちろんのことながら、「システム」には、人為的な取り決めである社会的な「仕組み」(社会システム)にすぎないものは含まない。
また、各モジュールによる処理毎に又はモジュール内で複数の処理を行う場合はその処理毎に、対象となる情報を記憶装置から読み込み、その処理を行った後に、処理結果を記憶装置に書き出すものである。したがって、処理前の記憶装置からの読み込み、処理後の記憶装置への書き出しについては、説明を省略する場合がある。なお、ここでの記憶装置としては、ハードディスク、RAM(Random Access Memory)、外部記憶媒体、通信回線を介した記憶装置、CPU(Central Processing Unit)内のレジスタ等を含んでいてもよい。
【0018】
本実施の形態である情報処理装置100(以下、サーバーともいう)は、複数の処理によって構成されている1つのフローを他の情報処理装置(以下、サーバーともいう)に分散させて処理させるものであって、
図1の例に示すように、フロー受付モジュール105、データ受付モジュール110、フロー分割モジュール115、依存関係定義記憶モジュール125、処理時間算出モジュール130、処理速度記憶モジュール135、サーバー割当モジュール140、サーバー通信モジュール145を有している。
なお、ここでフローとは、システム(例えば、後述する画像処理装置210、情報処理装置100、サーバー250等に構成されているシステム)に投入されたデータを、どのように処理するかを定義したものであり、複数のプラグイン機能の組み合わせで定義される。
そして、ジョブとは、フローにしたがって、自動的に実行される処理の単位の意である。
また、プラグインとは、フローにおける特定の機能の意であり、例えば、入力検知、ドキュメント処理等がある。
【0019】
フローに応じて処理の入力、加工、配信を行う情報処理装置がある。例えば、ジョブの高速化や高度化のために1つのサーバーでは処理しきれない場合がある。このような場合に対応するために、複数のサーバー間で処理を分散させて行うこと(いわゆる分散システム)が必要である。
しかし、処理を分散させるために、フロー内の複数の処理を分割する必要があるが、その処理には、依存関係(例えば、ある処理Bを行うためには、処理Aが行われた後でなければならない等)がある処理があり、その依存関係がある処理は1つの情報処理装置で行う必要がある。
また、分散先である情報処理装置の処理状況によっては、一部の情報処理装置に対して負荷が偏り、システム全体として最適なパフォーマンスとならない場合がある。分散先である情報処理装置の台数を増やし、処理のピーク時の負荷を軽減する方法も考えられるが、処理が不要な場合には無駄な資産となってしまう。
情報処理装置100は、分散処理を行うために、フロー内の処理を分割する。例えば、フロー定義内のプラグインの依存関係を考慮してフローを分割する。そして、各情報処理装置での現在の稼働状況、過去の処理実績からフローの処理完了の見込み時間を算出する。処理完了見込みの早い情報処理装置で、分割されたフロー処理を実施させるように割り振る。そして、処理が割り振られた情報処理装置のうち、最も遅い時間に終了する情報処理装置に、最終結果をマージさせて配信する処理を割り振る。
【0020】
フロー受付モジュール105は、フロー分割モジュール115と接続されている。フロー受付モジュール105は、対象となるフローを受け付ける。フローは、複数の処理によって構成されている。フローは、ユーザーの操作によって作成されたものであってもよいし、記憶装置に予め記憶されたものであってもよい。記憶装置に予め記憶されたものである場合は、受け付けるフローは、例えば、予め定められたフローであってもよいし、ユーザーの操作によって指定されたフローであってもよいし、データ受付モジュール110で受け付けたデータの種別に対応するフローであってもよい。
【0021】
データ受付モジュール110は、処理時間算出モジュール130、サーバー通信モジュール145と接続されている。データ受付モジュール110は、フローの処理対象となるデータを受け付ける。データとして、テキストデータの他に、画像データ等であってもよい。データを受け付けるとは、例えば、スキャナ、カメラ等で画像を読み込むこと、ファックス等で通信回線を介して外部機器から画像を受信すること、ハードディスク(コンピュータに内蔵されているものの他に、ネットワークを介して接続されているもの等を含む)等に記憶されているデータを読み出すこと等が含まれる。画像としては、2値画像、多値画像(カラー画像を含む)であってもよい。受け付ける画像は、1枚であってもよいし、複数枚であってもよい。また、画像の内容として、ビジネスに用いられる文書、広告宣伝用のパンフレット等であってもよい。例えば、画像処理装置からその画像処理装置が読み込んだ文書の画像データ等を受け付ける。
【0022】
フロー分割モジュール115は、処理入替モジュール120を有しており、フロー受付モジュール105、依存関係定義記憶モジュール125、処理時間算出モジュール130、サーバー割当モジュール140と接続されている。フロー分割モジュール115は、フロー受付モジュール105によって受け付けられたフロー内の処理間の依存関係を保つように、そのフローを分割する。フロー内の処理間の依存関係の定義は、依存関係定義記憶モジュール125内に記憶されている。
処理入替モジュール120は、依存関係定義記憶モジュール125内に記憶されている処理の順序の定義に基づいて、依存関係にある処理の順序を入れ替える。
【0023】
依存関係定義記憶モジュール125は、フロー分割モジュール115と接続されている。依存関係定義記憶モジュール125は、フロー内の処理間の依存関係の定義、フロー内の処理の順序の定義を記憶している。例えば、処理依存関係定義テーブル600を記憶している。
図6は、処理依存関係定義テーブル600のデータ構造例を示す説明図である。処理依存関係定義テーブル600は、プラグイン欄610、依存関係欄620、プラグイン・タイプ欄630を有している。プラグイン欄610は、プラグインを記憶している。依存関係欄620は、そのプラグインと依存関係があるプラグインを記憶している。また、依存関係欄620では、フロー内の処理の順序の定義を定めるようにしてもよい。例えば、依存関係欄620内のプラグインBは、プラグイン欄610内のプラグインAに対して、先に行うこと(つまり、プラグインBによる処理結果に対して、プラグインAによる処理を行うこと)を意味している。もちろんのことながら、逆の関係(つまり、プラグインAによる処理結果に対して、プラグインBによる処理を行うこと)であってもよい。さらに、依存関係欄620内に複数のプラグインがある場合は、その順番で処理を行うことを意味している。依存関係欄620内に2つのプラグインB1、プラグインB2が、この順番で記憶されている場合は、プラグインB1による処理結果に対して、プラグインB2による処理を行い、その処理結果に対して、プラグインAによる処理を行うことを意味している。具体的には、処理依存関係定義テーブル600の2行目は、「文字認識」と「ノイズ除去」と「回転」の間には、「文字認識」の前に「ノイズ除去」、「回転」を行う必要があり、その処理順序は、「ノイズ除去」、「回転」、「文字認識」であるという依存関係にある。プラグイン・タイプ欄630は、そのプラグインのプラグイン・タイプを記憶している。プラグインには、「入力」、「加工」、「配信」の3タイプ(種類)がある。
【0024】
処理時間算出モジュール130は、データ受付モジュール110、フロー分割モジュール115、処理速度記憶モジュール135、サーバー割当モジュール140と接続されている。処理時間算出モジュール130は、各情報処理装置における処理速度又は過去の処理時間を用いて、フロー分割モジュール115によって分割された処理群(1つ以上の処理)を処理するための時間を算出する。具体的には、データ受付モジュール110が受け付けたデータの種類、データ量を、処理速度記憶モジュール135に記憶されている各情報処理装置における処理速度又は過去の処理時間(ログ情報)に適用させて、各情報処理装置でフロー分割モジュール115によって分割された処理群を行う処理時間を算出する。
また、処理時間算出モジュール130は、各情報処理装置に、その情報処理装置における現在の処理状況における処理時間を問い合わせるようにしてもよい。そして、問い合わせが行われた各情報処理装置では、その処理状況に応じて、フロー分割モジュール115によって分割された処理群を行う処理時間を算出し、それを処理時間算出モジュール130に返信するようにしてもよい。
【0025】
処理速度記憶モジュール135は、処理時間算出モジュール130と接続されている。処理速度記憶モジュール135は、各情報処理装置における処理速度又は過去の処理時間を記憶している。例えば、処理時間テーブル700を記憶している。
図7は、処理時間テーブル700のデータ構造例を示す説明図である。処理時間テーブル700は、プラグイン欄710、処理時間(per doc size)欄720、文書タイプ欄730を有しており、情報処理装置毎にある。プラグイン欄710は、プラグイン(プラグイン名称、プラグインID(IDentification)等)を記憶している。処理時間(per doc size)欄720は、その情報処理装置におけるそのプラグインでの処理時間(per doc size)を記憶している。対象とするデータの文書タイプ毎(文書タイプ欄730)の処理時間を示している。文書タイプ欄730は、対象とするデータの文書タイプを記憶している。
処理時間テーブル700の処理時間(per doc size)欄720内のデータは、予め測定された値であってもよいし、過去の処理時間を計測した値の統計値(平均値、中央値、最頻値等)であってもよい。
【0026】
サーバー割当モジュール140は、フロー分割モジュール115、処理時間算出モジュール130、サーバー通信モジュール145と接続されている。サーバー割当モジュール140は、フロー分割モジュール115によって分割された処理群を、他の情報処理装置に割り当てる。
また、サーバー割当モジュール140は、処理入替モジュール120によって入れ替えられた処理群を、他の情報処理装置に割り当てるようにしてもよい。
また、サーバー割当モジュール140は、処理時間算出モジュール130によって算出された処理時間に基づいて、割当処理を行うようにしてもよい。例えば、各処理群に対して、その処理群の処理時間が最も短い情報処理装置を選択するようにしてもよい。
また、サーバー割当モジュール140は、処理時間算出モジュール130によって算出された処理時間から、最も遅い時間に終了する情報処理装置に、フローにおける最終処理を割り当てるようにしてもよい。最終処理として、各情報処理装置での処理結果をマージする処理、そのマージ結果(最終結果のデータ)を、目的とする情報処理装置(単なる記憶装置等であってもよい)へ配信する処理がある。したがって、最も遅い時間に終了する情報処理装置Aが最終処理を行えば、他の情報処理装置Bは、そのフローから解放され(つまり、他の情報処理装置Bが情報処理装置Aによる処理結果を待つことなく)、他の処理に対応することができるようになる。
サーバー通信モジュール145は、データ受付モジュール110、サーバー割当モジュール140と接続されている。サーバー通信モジュール145は、サーバー割当モジュール140による割り当て結果にしたがって、その情報処理装置に対して、データ受付モジュール110によって受け付けられたデータ、割り当てられた処理群を送信し、処理を行わせる。
なお、情報処理装置100自身も、処理群を割り当てる情報処理装置としてもよい。
【0027】
フローの対象データを受け付ける画像処理装置210、フローのジョブ処理を行う複数のサーバー250と、サーバーへのジョブの振り分けを行う情報処理装置100によって構成されているシステムである例を示す。
図2(A)に示す例では、情報処理装置100Aは、画像処理装置210A、画像処理装置210B、画像処理装置210C、サーバー250A、サーバー250B、サーバー250C、サーバー250Dと接続されている。情報処理装置100Bは、画像処理装置210D、画像処理装置210E、画像処理装置210F、サーバー250A、サーバー250B、サーバー250G、サーバー250Hと接続されている。ユーザーの操作によって、画像処理装置210で文書が読み込まれ、フローの選択が行われ、画像処理装置210から情報処理装置100に対して指示が行われる。そして、情報処理装置100では、そのフローを分割して、分割後の処理群を複数のサーバー250に割り振る。割り振られたサーバー250で処理が行われる。
図2(B)に示す例では、情報処理装置100A、画像処理装置210A、画像処理装置210B、画像処理装置210C、サーバー250A、サーバー250B、サーバー250C、サーバー250Eは、通信回線290を介してそれぞれ接続されている。通信回線290は、無線、有線、これらの組み合わせであってもよく、例えば、通信インフラとしてのインターネット、イントラネット等であってもよい。また、情報処理装置100、サーバー250による機能は、クラウドサービスとして実現してもよい。
【0028】
図3は、本実施の形態による処理例を示すフローチャートである。
ステップS302では、ユーザーの操作によって、画像処理装置210で文書205を読み込み、情報処理装置100へ文書データを投入する。
ステップS304では、情報処理装置100は、ユーザーの操作又は文書データに応じて、処理するフローを選択する。
ステップS306では、情報処理装置100は、処理分割可能な単位にフローを分割する。このとき分割後のフローに処理ID(FlowID)を付与する。
ステップS308では、情報処理装置100は、文書データのサイズ、フォーマット(文書タイプ)、フロー処理の種別(プラグイン)から、各サーバーにおける予測処理時間を算出する。
【0029】
ステップS310では、情報処理装置100は、サーバー250A、サーバー250Bに対し、予測処理時間及び分割後のフロー定義情報、文書情報(サイズ、フォーマット)を送信する。
ステップS312では、サーバー250A、サーバー250Bは、自サーバーの現在の処理状況、ジョブのキュー状態、及び文書情報から予測処理時間を算出し、情報処理装置100に応答する。
ステップS314では、情報処理装置100は、ステップS312の結果から自身(情報処理装置100)で処理するべきか否かを判断する。
【0030】
ステップS316では、情報処理装置100は、サーバー250A、サーバー250Bに対し、分割後のフロー定義情報、文書データ、ServerID、処理IDを送信する。
ステップS318では、各サーバー(サーバー250A、サーバー250B)で処理を実行する。文書サイズあたりの処理時間を計測し、履歴としてデータを保存する。前述の処理時間テーブル700内のデータを生成するための実績データとなる。
ステップS320では、情報処理装置100は、処理IDを基に各サーバー(サーバー250A、サーバー250B)から得た結果をマージする。
ステップS322では、情報処理装置100は、最終的な処理結果を配信する。例えば、フローが文字認識処理を行うものである場合は、文書205の画像データと文字認識結果を文書管理装置に送信する。
【0031】
図4は、本実施の形態による処理例を示す説明図である。フローの例を示すものである。
このフローでは、入力処理410、加工処理420、配信処理440の処理が行われる。そして、入力処理410には、フォルダー入力処理412が含まれている。加工処理420には、回転処理422、ノイズ除去処理424、文字認識処理426、PDF化処理428、属性取得処理430が含まれている。配信処理440には、文書管理処理442が含まれている。
このフローは、具体的には、以下のような処理を行う。画像処理装置210で読み取られた画像が、予め定められたフォルダーに格納される。フォルダー入力処理412では、そのフォルダーから画像を入力する。加工処理420では、その画像を回転処理422(傾き補正)し、その回転結果に対してノイズ除去処理424を行い、そのノイズ除去結果に対して文字認識処理426を行い、画像のPDF化処理428を行い、画像の属性取得処理430を行い。そして、文字認識処理426、PDF化処理428、属性取得処理430の処理結果をマージして、文書管理処理442(文書管理装置への格納)を行う。
【0032】
図5は、本実施の形態による処理例を示す説明図である。情報処理装置100が、処理依存関係定義テーブル600に応じて、
図4の例に示したフローを分割した結果を示している。具体的には、3つの処理群に分割している。
処理依存関係定義テーブル600から「文字認識処理426」、「回転処理422」、「ノイズ除去処理424」は依存関係があり、「ノイズ除去処理424」と「回転処理422」は依存関係があることから、
図5(A)の例に示すような加工処理520に分割する。他の処理(PDF化処理428、属性取得処理430)では、依存関係がないこと(依存関係欄620が空白であること)から、
図5(B)、
図5(C)の例に示すように加工処理530、加工処理540に分けている。つまり、依存関係がない処理は、その処理単独の処理群となるように分割が行われる。加工処理520には、ノイズ除去処理522、回転処理524、文字認識処理526が含まれている。加工処理530にはPDF化処理532が含まれている。加工処理540には、属性取得処理542が含まれている。
【0033】
また、処理依存関係定義テーブル600の依存関係欄620における順序の定義が、フロー内の処理の順序と異なる場合は、処理依存関係定義テーブル600の依存関係欄620にしたがってフロー内の処理の順序を入れ替えることを行う。具体的には、回転処理422とノイズ除去処理424の順序が、処理依存関係定義テーブル600の依存関係欄620における順序の定義と異なるので、
図5(A)の例に示すように、ノイズ除去処理522、回転処理524、文字認識処理526の順序で処理を行うように処理群を修正する。一般的に、ノイズ除去を最初に行って、処理対象を減少させることが望ましい。そこで、処理依存関係定義テーブル600の依存関係欄620では、ノイズ除去、回転処理、文字認識の順序が定義されている。そして、
図4の例で示したフローは、ユーザーによって作成されたものであり、画像処理等に精通していない場合がある。そこで、ノイズ除去、回転処理、文字認識の順序になるように、分割後の処理順序を変更している。
また、分割された処理群(加工処理520、加工処理530、加工処理540)には、それぞれ処理ID(FlowID)が付与される。
【0034】
図8は、本実施の形態による処理例を示すフローチャートである。最終処理(各処理群の処理結果をマージして、配信する処理)を、情報処理装置100以外のサーバー250に行わせるようにした処理例である。
まず、
図3の例に示したフローチャート内のステップS302〜ステップS316までの処理を行う。
ステップS818では、分割された各フロー(各処理群)の各サーバー250、情報処理装置100での完了時刻を予測する。例えば、開始時刻を「16:00」とした場合、FlowID:xxxxxx−1の加工処理520(
図5(A))のサーバー250Aでの完了予測は「16:10」であり、FlowID:xxxxxx−2の加工処理530(
図5(B))の情報処理装置100での完了予測は「16:05」であり、FlowID:xxxxxx−3の加工処理540(
図5(C))のサーバー250Bでの完了予測は「16:08」である。したがって、最も遅い時間に完了するFlowID:xxxxxx−1の処理を行うサーバー250Aに最終処理を行わせるように割り振りを行う。
【0035】
ステップS820−1では、サーバー250Aは、FlowID:xxxxxx−1の処理を実行する。文書サイズあたりの処理時間を計測し、履歴としてデータを保存する。前述の処理時間テーブル700内のデータを生成するための実績データとなる。
ステップS820−2では、情報処理装置100は、FlowID:xxxxxx−2の処理を実行する。文書サイズあたりの処理時間を計測し、履歴としてデータを保存する。前述の処理時間テーブル700内のデータを生成するための実績データとなる。
ステップS820−3では、サーバー250Bは、FlowID:xxxxxx−3の処理を実行する。文書サイズあたりの処理時間を計測し、履歴としてデータを保存する。前述の処理時間テーブル700内のデータを生成するための実績データとなる。
ステップS822では、サーバー250Aは、処理IDを基に各サーバー(情報処理装置100、サーバー250B)から得た結果をマージする。
ステップS824では、サーバー250Aが、最終的な処理結果を配信する。
【0036】
なお、本実施の形態としてのプログラムが実行されるコンピュータのハードウェア構成は、
図9に例示するように、一般的なコンピュータであり、具体的にはパーソナルコンピュータ、サーバーとなり得るコンピュータ等である。つまり、具体例として、処理部(演算部)としてCPU901を用い、記憶装置としてRAM902、ROM903、HD904を用いている。HD904として、例えばハードディスク、SSD(Solid State Drive)を用いてもよい。フロー受付モジュール105、データ受付モジュール110、フロー分割モジュール115、処理入替モジュール120、処理時間算出モジュール130、サーバー割当モジュール140、サーバー通信モジュール145等のプログラムを実行するCPU901と、そのプログラムやデータを記憶するRAM902と、本コンピュータを起動するためのプログラム等が格納されているROM903と、依存関係定義記憶モジュール125、処理速度記憶モジュール135としての機能を有する補助記憶装置(フラッシュメモリ等であってもよい)であるHD904と、キーボード、マウス、タッチパネル、マイク等に対する利用者の操作に基づいてデータを受け付ける受付装置906と、CRT、液晶ディスプレイ、スピーカー等の出力装置905と、ネットワークインタフェースカード等の通信ネットワークと接続するための通信回線インタフェース907、そして、それらをつないでデータのやりとりをするためのバス908により構成されている。これらのコンピュータが複数台互いにネットワークによって接続されていてもよい。
【0037】
前述の実施の形態のうち、コンピュータ・プログラムによるものについては、本ハードウェア構成のシステムにソフトウェアであるコンピュータ・プログラムを読み込ませ、ソフトウェアとハードウェア資源とが協働して、前述の実施の形態が実現される。
なお、
図9に示すハードウェア構成は、1つの構成例を示すものであり、本実施の形態は、
図9に示す構成に限らず、本実施の形態において説明したモジュールを実行可能な構成であればよい。例えば、一部のモジュールを専用のハードウェア(例えば特定用途向け集積回路(Application Specific Integrated Circuit:ASIC)等)で構成してもよく、一部のモジュールは外部のシステム内にあり通信回線で接続しているような形態でもよく、さらに
図9に示すシステムが複数互いに通信回線によって接続されていて互いに協調動作するようにしてもよい。また、特に、パーソナルコンピュータの他、携帯情報通信機器(携帯電話、スマートフォン、モバイル機器、ウェアラブルコンピュータ等を含む)、情報家電、ロボット、複写機、ファックス、スキャナ、プリンタ、複合機(スキャナ、プリンタ、複写機、ファックス等のいずれか2つ以上の機能を有している画像処理装置)などに組み込まれていてもよい。
【0038】
なお、説明したプログラムについては、記録媒体に格納して提供してもよく、また、そのプログラムを通信手段によって提供してもよい。その場合、例えば、前記説明したプログラムについて、「プログラムを記録したコンピュータ読み取り可能な記録媒体」の発明として捉えてもよい。
「プログラムを記録したコンピュータ読み取り可能な記録媒体」とは、プログラムのインストール、実行、プログラムの流通等のために用いられる、プログラムが記録されたコンピュータで読み取り可能な記録媒体をいう。
なお、記録媒体としては、例えば、デジタル・バーサタイル・ディスク(DVD)であって、DVDフォーラムで策定された規格である「DVD−R、DVD−RW、DVD−RAM等」、DVD+RWで策定された規格である「DVD+R、DVD+RW等」、コンパクトディスク(CD)であって、読出し専用メモリ(CD−ROM)、CDレコーダブル(CD−R)、CDリライタブル(CD−RW)等、ブルーレイ・ディスク(Blu−ray(登録商標) Disc)、光磁気ディスク(MO)、フレキシブルディスク(FD)、磁気テープ、ハードディスク、読出し専用メモリ(ROM)、電気的消去及び書換可能な読出し専用メモリ(EEPROM(登録商標))、フラッシュ・メモリ、ランダム・アクセス・メモリ(RAM)、SD(Secure Digital)メモリーカード等が含まれる。
そして、前記のプログラム又はその一部は、前記記録媒体に記録して保存や流通等させてもよい。また、通信によって、例えば、ローカル・エリア・ネットワーク(LAN)、メトロポリタン・エリア・ネットワーク(MAN)、ワイド・エリア・ネットワーク(WAN)、インターネット、イントラネット、エクストラネット等に用いられる有線ネットワーク、又は無線通信ネットワーク、さらにこれらの組み合わせ等の伝送媒体を用いて伝送させてもよく、また、搬送波に乗せて搬送させてもよい。
さらに、前記のプログラムは、他のプログラムの一部分であってもよく、又は別個のプログラムと共に記録媒体に記録されていてもよい。また、複数の記録媒体に分割して記録されていてもよい。また、圧縮や暗号化等、復元可能であればどのような態様で記録されていてもよい。