以下に添付図面を参照して、本発明にかかるマルチプロセッサシステム、制御方法、および制御プログラムの好適な実施の形態を詳細に説明する。
(データ転送制御装置のハードウェア)
図1は、実施の形態にかかるデータ転送制御装置のハードウェアを示すブロック図である。図1において、マルチプロセッサシステムであるデータ転送制御装置100は、CPU(Central Processing Unit)#0と、CPU#1と、MEM(MEMory)#0と、MEM#1と、DMAC#0と、DMAC#1と、ROM(Read‐Only Memory)101と、フラッシュROM102と、を備えている。また、ユーザやその他の機器との入出力装置としてデータ転送制御装置100は、キーボード103と、ディスプレイ104と、I/F(Interface)105と、を備えている。また、各部はバス107によってそれぞれ接続されている。
ここで、CPU#0、CPU#1は、データ転送制御装置100の全体の制御を司る。ROM101は、ブートプログラムなどのプログラムを記憶している。MEM#0、MEM#1は、それぞれCPU#0、CPU#1のワークエリアとして使用されるRAM(Random Access Memory)等の記憶装置である。DMAC#0、DMAC#1は、MEM#0とMEM#1間にてデータを転送する。また、CPU#0は、主にDMAC#0を制御し、CPU#1はDMAC#1を制御する。本実施の形態にかかるデータ転送制御装置100は、コアが複数搭載されたプロセッサを含むコンピュータであるシステムである。また、本実施の形態にかかるデータ転送制御装置100では、CPUが2つ搭載されているが、3つ以上搭載されていてもよい。CPUが3つ以上搭載されている場合の詳細は、図4にて後述する。
キーボード103は、数字、各種指示などの入力のためのキーを備え、データの入力を行う。また、キーボード103は、タッチパネル式の入力パッドやテンキーなどであってもよい。ディスプレイ104は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ104は、たとえば、TFT液晶ディスプレイなどを採用することができる。
I/F105は、通信回線を通じてLAN(Local Area Network)、WAN(Wide Area Network)、インターネットなどのネットワーク106に接続され、このネットワーク106を介して他の装置に接続される。そして、I/F105は、ネットワーク106と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。I/F105には、たとえばモデムやLANアダプタなどを採用することができる。
従来例にかかるデータ転送制御装置100も、本実施の形態にかかるデータ転送制御装置100と等しいハードウェアを搭載する。従来例にかかるデータ転送制御装置100では、DMAC#0にて、MEM#1からMEM#0に転送対象データを転送している間、CPU#1はMEM#1にアクセスを行うことができず、データアクセス待ちが発生していた。
(データ転送制御装置100の機能)
次に、データ転送制御装置100の機能について説明する。図2は、データ転送制御装置100の機能を示すブロック図である。データ転送制御装置100は、転送部203と、転送指示部204と、検出部205と、判断部206と、制御部207と、を含む。この制御部となる機能(転送指示部204〜制御部207)は、記憶装置に記憶されたプログラムをCPU#0が実行することにより、その機能を実現する。記憶装置とは、具体的には、たとえば、図1に示したROM101、フラッシュROM102、MEM#0、MEM#1などである。また、転送部203はDMAC#0によってその機能を実現する。
また、データ転送制御装置100は、データ転送制御装置100で実行されるプロセスの状態変化に応じたデータ転送方式を格納するデータ転送テーブル201にアクセス可能である。データ転送テーブル201の詳細は図3と図4にて後述する。また、転送指示部204と、検出部205と、判断部206と、制御部207と、はスケジューラ202に含まれる機能である。
スケジューラ202は、OSに含まれるソフトウェアであり、CPUに割り当てるプロセスを決定する機能を有する。たとえば、スケジューラ202は、プロセスに設定されている優先度等に基づいて、次にCPUに割り当てるプロセスを決定する。定められた時刻になった場合、スケジューラ202はディスパッチャが決定されたプロセスをCPUに割り当てる。スケジューラの機能の1つとしてディスパッチャを含む形態も存在する。本実施の形態では、スケジューラ202内にディスパッチャの機能が存在する。
また、図2では、CPU#0に転送指示部204〜制御部207が含まれるように図示しているが、他のCPUのスケジューラにも転送指示部204〜制御部207が含まれる。同様に、DMAC#0以外のDMACにも、転送部203が含まれる。
転送部203は、プロセッサの指示によって転送元メモリから転送先メモリへ転送対象データを転送する機能を有する。たとえば、DMAC#0は、CPU#0の指示によって転送元メモリとなるMEM#1から転送先メモリとなるMEM#0へ、転送対象データとなるストリーミングデータを転送する。
転送指示部204は、転送部203に転送対象データを転送するように指示する機能を有する。たとえば、転送指示部204は、DMAC#0に転送元メモリとなるMEM#1のアドレスと、転送対象データのデータサイズと、転送先メモリとなるMEM#0のアドレスを通知し、データ転送を指示する。なお、指示内容となる転送元メモリおよび転送先メモリのアドレス、転送対象データのデータサイズは、転送指示部204を実行したCPUのレジスタやローカルメモリなどの記憶領域に記憶されてもよい。
検出部205は、プロセッサによって実行されたプロセスを検出する機能を有する。プロセスとはプログラムの実行単位である。また、本実施の形態におけるアプリケーションは、1つのプロセスを保持し、また1つのプロセス内には1つ以上のスレッドを保持する。また、検出部205は、プロセスの状態変化を検出してもよい。また、検出部205は、プロセスの状態変化の1つである、プロセスの状態がアクティブからインアクティブに、または、インアクティブからアクティブに変化したことを検出してもよい。プロセスの状態がアクティブである場合は、該当のプロセスが利用者の入力や操作の対象となっている状態である。また、プロセスの状態がインアクティブである場合は、該当のプロセスが利用者の入力や操作の対象となっていない状態である。
状態変化とは、プロセスの起動、終了したというイベントを検出した場合である。また、ディスパッチによる切り替えによってプロセスがアクティブまたはインアクティブに変化した場合も状態変化に含めてもよい。また、状態変化はプロセスに転送される転送対象データの使用状態の変化であってもよい。たとえば、転送対象データがストリーミング動画である場合に、動画再生が再生中から停止、または巻き戻し再生になったという変化が発生した場合、検出部205は状態変化として検出してもよい。
たとえば、検出部205は、CPU#0によって実行されたアプリケーションを検出する。また、検出部205は、アプリケーションの起動、終了、切り替えが起こったことを検出する。なお、検出結果は、検出部205を実行したCPUのレジスタやローカルメモリなどの記憶領域に記憶される。
判断部206は、検出部205によって検出されたプロセスの種類に基づいて、転送部203による転送対象データの転送に緊急性があるか否かを判断する機能を有する。また、判断部206は、検出部205によってプロセスの状態変化が検出された場合、プロセスの種類と状態変化に基づいて、転送対象データの転送の緊急性を判断してもよい。また、判断部206は、さらに、他のプロセッサによる転送元メモリへの転送対象データの格納に緊急性があるか否かを判断してもよい。他のプロセッサとは、転送元メモリへ転送対象データを格納するプロセッサであり、検出部205によってプロセスを検出したプロセッサとは異なるプロセッサではあるが、プロセスを検出したプロセッサと一致していてもよい。
また、緊急性とは、時間制約のことであり、緊急性があるデータ転送とは、時間制約が存在するリアルタイム処理のデータ転送である。また、判断部206は、リアルタイム処理の中でも、処理量が多く優先度が高いデータ転送を緊急性があるデータ転送と判断し、時間制約が存在しても、処理完了までの時間に余裕があるデータ転送については緊急性がないとして判断してもよい。また、リアルタイム処理のデータ転送でなくても、利用者によって可能な限り早く転送するように設定された場合、判断部206は、緊急性があるとして判断してもよい。
また、転送対象データの転送に緊急性がある場合は、たとえば、ネットワーク106経由によるストリーミング動画の再生などが挙げられる。転送対象データの転送に緊急性がある場合には、転送前に行われる転送元メモリへの転送対象データの格納も高速で行うことが求められる。ストリーミング動画の例では、ストリーミング動画のビットレート以上で転送対象データを転送することが求められるため、データ転送制御装置100は、高速に通信処理を行って転送対象データを格納することが要求される。さらに、データ転送制御装置100は、ストリーミング動画を再生するCPUのワーキング領域に高速に転送することが要求される。
また、転送対象データの転送には緊急性がないが、転送対象データの格納に緊急性がある場合は、たとえば、ネットワーク106経由による通信処理が挙げられる。通信処理は、ある一定時間以内に処理を行わないとタイムアウトとなり、通信処理の相手側端末によって通信終了させられる場合がある。したがって、データ転送制御装置100は、高速に転送対象データを格納し、通信処理を処理することが要求される。
具体的には、判断部206は、データ転送テーブル201のレコードのうち、アプリケーションの種類と、アプリケーションの状態がアクティブかインアクティブかと、が一致するレコードを取得する。取得されたレコードに記載されたデータ転送方式によって、判断部206は、転送対象データの転送に緊急性があるか否か、また、転送元メモリへの転送対象データの格納に緊急性があるか否かを判断する。
たとえば、取得されたレコードに“方式A”と記載されていた場合、判断部206は、転送対象データの転送に緊急性があると判断する。また、取得されたレコードに“方式B”と記載されていた場合、判断部206は、転送対象データの転送に緊急性がないと判断する。また、取得されたレコードに“方式B”と記載されていた場合、判断部206は、転送対象データの格納に緊急性がなく、かつ、転送対象データの転送に緊急性がないと判断する。また、取得されたレコードに“方式C”と記載されていた場合、判断部206は、転送対象データの格納に緊急性がなく、かつ、転送対象データの転送に緊急性があると判断する。なお、判断結果は、判断部206を実行したCPUのレジスタやローカルメモリなどの記憶領域に記憶される。
制御部207は、判断部206によって判断された結果に基づいて、転送部203またはプロセッサによって転送対象データを転送するように制御する機能を有する。また、判断部206によって転送対象データの転送に緊急性があると判断された場合、制御部207は、転送部203によって転送対象データを転送するように制御してもよい。
また、判断部206によって転送対象データの格納と転送に緊急性がないと判断された場合、制御部207は、転送元メモリへ転送対象データを格納した他のプロセッサによって転送対象データを転送するように制御してもよい。また、判断部206によって転送対象データの格納に緊急性があり、かつ、転送対象データの転送に緊急性がないと判断された場合、制御部207は、プロセスを検出したプロセッサによって転送対象データを転送するように制御してもよい。
たとえば、データ転送方式が“方式A”である場合、制御部207は、CPU#0に対応するDMAC#0によって転送対象データを転送するように制御する。また、データ転送方式が“方式B”である場合、制御部207は、転送元メモリとなるMEM#1に転送対象データを格納するCPU#1によって、転送対象データを転送するように制御する。このとき、CPU#1は、MEM#1に転送対象データを格納せずに、直接転送先メモリとなるMEM#0に書き込む。
また、データ転送方式が“方式C”である場合、制御部207は、CPU#0によって転送元メモリとなるMEM#1から、転送対象データを転送するように制御する。このとき、CPU#0は、MEM#1から転送対象データを読み込んだ後、MEM#0に転送対象データを格納せず、CPU#0のレジスタ等に格納して直接転送対象データにアクセスするプログラム等に転送対象データを転送する。
図3は、データ転送制御装置100とデータ転送テーブル201の記憶内容の一例を示す説明図である。データ転送テーブル201は、スケジューラ202がデータ転送を行うアプリケーションと、前述のアプリケーションの状態がアクティブかインアクティブかと、に基づいてデータ転送方式を判断するテーブルである。データ転送テーブル201では、転送するデータごとに、src属性に設定されたスレッドを実行するCPUと転送対象データの書き込み先と、dest属性に設定されたスレッドを実行するCPUと転送対象データの読み込み先を記述する。さらに、データ転送テーブル201では、src属性にて書き込まれた転送対象データをdest属性の読み込み先に転送する実行主体をtransfer属性で設定する。
たとえば、レコード301において、アプリケーション#0属性が“アクティブ”より、スケジューラ202は、アプリケーション#0が起動されアクティブになったか否かを判断する。アクティブとなった場合、スケジューラ202は、データ#0属性が“方式A”より、データ転送方式を方式Aに設定する。
また、スケジューラ202は、レコード301の3行目〜5行目より、src属性に設定されたスレッド#0をexec属性に設定されたCPU#1にて実行し、転送対象データとなるデータ#0の書き込み先をmem属性に設定されたMEM#1に設定する。また、スケジューラ202は、レコード301の6行目〜8行目より、dest属性に設定されたスレッド#1をCPU#0にて実行し、データ#0の読み込み先をMEM#0に設定する。
また、スケジューラ202は、transfer属性に設定されたDMAC#0に、MEM#1に書きこまれたデータ#0を、MEM#0に転送するように制御する。データ転送方式Aの具体例については、図5にて後述する。このように設定された内容をCPUに通知し、CPUはMMU(Memory Management Unit)などの設定を行い、CPUは該当のアプリケーションを実行する。
レコード302〜レコード304についても、スケジューラ202は、レコード301と同様の設定方法を行う。具体的には、レコード302に基づいて、スケジューラ202は、アプリケーション#0がインアクティブとなった場合に、データ転送方式を方式Bに設定する。
また、スケジューラ202は、src属性に設定されたスレッド#0をCPU#1にて実行させ、転送対象データとなるデータ#0の書き込み先を、読み込み先と等しいMEM#0として、CPU#1に直接書き込むように制御する。そして、スケジューラ202は、dest属性に設定されたスレッド#0をCPU#0にて実行させ、CPU#1が書き込んだデータ#0をCPU#0に読み込むように制御する。transfer属性には、dest属性の読み込み先に直接書き込むCPU#1が設定される。データ転送方式Bの具体例については、図6にて後述する。また、レコード303に基づいて、スケジューラ202は、アプリケーション#1がアクティブまたはインアクティブとなった場合に、データ転送方式を方式Bに設定する。
また、レコード304に基づいて、スケジューラ202は、アプリケーション#2がアクティブまたはインアクティブとなった場合に、データ転送方式を方式Cに設定する。また、スケジューラ202は、src属性に設定されたスレッド#4をCPU#1にて実行し、転送対象データとなるデータ#2の書き込み先をMEM#1に設定する。また、スケジューラ202は、dest属性に設定されたスレッド#5をCPU#0にて実行し、CPU#1が書き込んだデータ#2をMEM#1へCPU#0に直接読み込むように制御する。transfer属性には、src属性の書き込み先に直接読み込むCPU#0が設定される。データ転送方式Cの具体例については、図7にて後述する。
アプリケーションの実行終了後、スケジューラ202は、各CPUの設定を初期値に戻す。その後、再びデータ転送方式を変更するアプリケーションが起動されると、スケジューラ202は、データ転送テーブル201を読み込んでデータ転送方式を変更する。また、src属性に設定されたスレッドと、dest属性に設定されたスレッドが属するアプリケーションは、同一であってもよいし、異なっていてもよい。
図4は、データ転送制御装置100とCPUが3つ以上存在する場合におけるデータ転送テーブル201の記憶内容の一例を示す説明図である。CPUタイプテーブル401は、CPUの種類を分けるテーブルである。図4の例において、各CPUは、汎用の制御用プロセッサとしてCPU Aと、信号処理用のDSPとしてCPU Bに分類される。CPU AはCPU#0、CPU#1、CPU#2が含まれる。また、CPU BはCPU#3が含まれる。たとえば、データ転送テーブル201に、CPU Aが記述されていた場合、スケジューラは、CPU Aのうちのいずれか一つのCPUにスレッド#0を割り当てる。
たとえば、レコード402に基づいて、スケジューラ202は、アプリケーション#0がアクティブとなった場合に、データ転送方式を方式Aに設定する。また、スケジューラ202は、src属性に設定されたスレッド#0をexec属性に設定されたCPU Bに属するいずれかのCPUにて実行し、転送対象データの書き込み先をmem属性に設定されたMEM#1に設定する。
また、スケジューラ202は、dest属性に設定されたスレッド#1をCPU Aに属するいずれかのCPUにて実行し、データ#0の読み込み先をMEM#0に設定する。図4の例では、スレッド#0をCPU#3が実行し、スレッド#1をCPU#0が実行する。また、スケジューラ202は、transfer属性に設定されたDMAC#0に、MEM#1に書きこまれたデータ#0を、MEM#0へ転送するように制御する。
レコード403〜レコード405についても、スケジューラ202は、レコード301と同様の設定方法を行う。たとえば、レコード403に基づいて、スケジューラ202は、アプリケーション#0がインアクティブとなった場合に、データ転送方式を方式Bに設定する。また、スケジューラ202は、src属性に設定されたスレッド#0をCPU BのいずれかのCPUにて実行し、転送対象データとなるデータ#0の書き込み先をMEM#0として、スレッド#0を実行したCPUに書き込むように制御する。そして、スケジューラ202は、dest属性に設定されたスレッド#1をCPU AのいずれかのCPUにて実行し、CPU BのいずれかのCPUが書き込んだデータ#0をスレッド#1を実行したCPUに読み込むように制御する。transfer属性には、dest属性の読み込み先に直接書き込んだCPU Bが設定される。
図5は、データ転送方式Aを示す説明図である。方式Aは、転送対象データの格納および転送対象データの転送に緊急性がある場合のデータ転送方式である。具体的に図5では、通信を行うスレッドと通信で得た転送対象データを用いたスレッドとが共に緊急性があり、高速に処理を行う場合にて説明を行う。たとえば、図5に示す例では、アプリケーション#0にて通信を行うスレッド#0と、通信で得たデータを用いてディスプレイ104に表示するスレッド#1と、が共に緊急性がある。
レコード301に基づいて、スケジューラ202は、スレッド#0では通信を高速に行うために、実行しているCPU#1に対応するMEM#1に転送対象データとなるデータ#0をCPU#1に書き込むように制御する。また、スケジューラ202は、スレッド#1にてその結果を高速に読み出すため、DMAC#0によってデータ#0をMEM#1からMEM#0へ転送するように制御する。方式Aが適用できる場合として、動画のストリーミング再生などが挙げられる。方式Aによるデータ転送は、DMACによるバースト転送により、転送対象データを高速に転送することができる。また、転送対象データの転送中は、バス107を占有する。
図6は、データ転送方式Bを示す説明図である。方式Bは、転送対象データの格納および転送対象データの転送に緊急性がない場合のデータ転送方式である。具体的に図6では、通信を行うスレッドと通信で得た転送対象データを用いたスレッドとが共に緊急性がない場合として説明を行う。たとえば、図6に示す例では、図5の状態から、アプリケーション#1が起動されアクティブとなり、アプリケーション#0がインアクティブとなった結果、通信を行うスレッド#0と動画を表示するスレッド#1とに緊急性がなくなった状態である。緊急性がなくなった理由としては、アプリケーション#0がインアクティブとなり、スレッド#1によって動画を再生する画面領域がアプリケーション#1によって隠れたためなどがある。
このとき、レコード302に基づいて、スケジューラ202は、スレッド#0では通信を高速で行わなくてよいため、CPU#0専用のメモリでない、MEM#0へデータ#0をCPU#1に書き込むように制御する。また、スケジューラ202は、スレッド#1にMEM#0からデータ#0をCPU#0に読み込むように制御する。方式Bが適用できる場合として、バックグラウンドで行うファイルのダウンロード処理などが挙げられる。
図7は、データ転送方式Cを示す説明図である。方式Cは、転送対象データの格納に緊急性があり、転送対象データの転送には緊急性がない場合のデータ転送方式である。具体的に図7では、通信を行うスレッドには緊急性があるが、通信で得た転送対象データを用いたスレッドには緊急性がない場合として説明を行う。たとえば、図7に示す例では、アプリケーション#2のスレッド#4では通信処理を高速に実行するため、緊急性がある。しかし、スレッド#4と連携して動作するスレッド#5には緊急性がない状態である。
レコード304に基づいて、スケジューラ202は、スレッド#4では通信を高速に行うために、実行しているCPU#1専用のMEM#1に転送対象データとなるデータ#2をCPU#1に書き込むように制御する。また、スケジューラ202は、スレッド#5ではその結果を高速で読み出さなくてよいため、DMAC#0の使用を禁じ、データ#2をCPU#0に読み込むように制御する。方式Cが適用できる場合として、メールの受信などが挙げられる。
たとえば、アプリケーション#2をメールソフトウェアとし、スレッド#4をダウンロードスレッドとし、スレッド#5をメール取得スレッドとする。CPU#1は、ダウンロードスレッドによってI/F105を通じ、ネットワーク106からメールデータを受信し、MEM#1に書き込む。CPU#0は、メール取得スレッドによってMEM#1から読み込む。
方式B、方式Cによるデータ転送方式は、CPUによるデータ転送により、データの転送速度はDMACの転送に比べ低速ではあるが、バス107を占有しないため、CPUの転送待ちによるスループットの低下を防ぐことができる。また、割り込みが発生した場合、コンテキストスイッチを行う反応時間が短縮され、応答性を向上させることができる。
図8は、ストリーミング再生中におけるストリーミングデータのデータ転送状態を示す説明図である。図8におけるデータ転送制御装置100は、動画再生アプリケーションを実行している状態である。動画再生アプリケーションは、動画再生スレッド801と、ダウンロードスレッド802を含む。また、GUIスレッド803が実行されており、GUIスレッド803は動画再生アプリケーション以外のアプリケーションに属する。また、ダウンロードスレッド802は、動画再生アプリケーション以外のアプリケーションに属していてもよい。
図8の状態では、動画再生アプリケーションの状態がアクティブであるため、スケジューラ202は、データ転送テーブル201からレコード804を選択する。レコード804に基づいて、スケジューラ202は、データ転送方式を方式Aに設定する。設定された内容に従って、ダウンロードスレッド802はI/F105から取得したストリーミングデータをMEM#1に書き込む。
ストリーミングデータの書き込み後、DMAC#0は、ストリーミングデータをMEM#1からMEM#0に転送し、動画再生スレッド801は、MEM#0からストリーミングデータを読み込み、ディスプレイ104に動画を表示する。
ストリーミングデータを再生する場合、ストリーミングデータのビットレート以上でデータを転送しないと動画が正常に表示できなくなるため、データ転送方式は、高速にデータを転送できる方式Aが適している。
図9は、ゲームアプリケーション実行中におけるストリーミングデータのデータ転送状態を示す説明図である。図9におけるデータ転送制御装置100は、動画再生アプリケーションを実行している状態であったのが、他のアプリケーションがアクティブとなり、動画再生アプリケーションがインアクティブとなり、動画再生が待機中になった状態である。図9では、動画再生アプリケーションとは異なるゲームアプリケーションがアクティブ状態であり、ゲームアプリケーションに属するゲームスレッド901がCPU#0によって実行されている。
図9の状態では、動画再生アプリケーションの状態がインアクティブであるため、スケジューラ202は、データ転送テーブル201からレコード805を選択する。レコード805に基づいて、スケジューラ202は、データ転送方式を方式Bに設定する。設定された内容に従って、ダウンロードスレッド802はI/F105から取得したストリーミングデータをMEM#0に直接書き込む。ストリーミングデータの書き込み後、動画再生スレッド801は、MEM#0からストリーミングデータを読み込む。
このとき、ディスプレイ104には、ゲームスレッド901による描画が行われており、動画再生スレッド801は待機中であるため描画をしない。このとき、ダウンロードスレッド802は、動画再生アプリケーションの待機中にストリーミングデータをMEM#0に転送する。転送中に動画再生アプリケーションがアクティブ状態になった場合、動画再生スレッド801は、蓄積されたストリーミングデータを再生することで、スムーズな動画再生を行うことができる。動画再生アプリケーションが待機中のデータ転送には、時間制約がなく緊急でないため、データ転送方式は、バス107を占有しない方式Bが適している。
図10は、ゲームアプリケーション中断状態におけるストリーミングデータのデータ転送状態を示す説明図である。図10におけるデータ転送制御装置100は、ゲームアプリケーションがアクティブの状態から、動画再生アプリケーションがアクティブとなった状態である。
図10の状態では、動画再生アプリケーションの状態がアクティブであるため、スケジューラ202は、データ転送テーブル201からレコード804を選択する。レコード804に基づいて、スケジューラ202は、データ転送方式を再び方式Aに設定する。このように、本実施の形態にかかるデータ転送制御装置100は、アプリケーションがアクティブかインアクティブかという状態変化に基づいて転送方式を動的に切り替えることができる。
また、データ転送制御装置100はアクティブかインアクティブか、以外の状態変化に基づいて転送方式を切り替えてもよい。たとえば、動画再生アプリケーションがアクティブであるが、利用者などによって動画再生が停止、または巻き戻し再生になったという状態変化が発生した場合である。この場合、蓄積されたストリーミングデータにて再生が行えるため高速でデータを転送しなくてもよいので、データ転送制御装置100はデータ転送方式を方式Bに設定してもよい。
図11A、図11Bは、データ転送方式移行処理を示すフローチャートである。データ転送方式移行処理は、スケジューラ202の機能の一部として実行される。スケジューラ202は、各CPUで実行されるアプリケーションのスケジュールを、それぞれのCPUのスケジューラで管理する。また、スケジューラ202は、データ転送制御装置100で実行中のアプリケーションの管理や、利用者からのアプリケーションの起動要求の対応を、各CPUのうち、特定のCPUのスケジューラが代表して行う。本実施の形態では、特定のCPUをCPU#0として説明を行う。
各CPUは、状態変化が発生したかを判断する(ステップS1101)。状態変化とは、アプリケーションの起動、終了、アプリケーションのスイッチである。状態変化が発生していない場合(ステップS1101:No)、各CPUは、再びステップS1101の処理を実行する。状態変化が発生した場合(ステップS1101:Yes)、各CPUは、アプリケーションの実行が終了した状態変化かを判断する(ステップS1102)。
アプリケーションの実行が終了した状態変化である場合(ステップS1102:Yes)、各CPUは、データ転送方式Cのアプリケーションが終了したかを判断する(ステップS1103)。データ転送方式Cのアプリケーションが終了した場合(ステップS1103:Yes)、各CPUは、各CPUに対応するDMACの使用禁止を解除し(ステップS1104)、ステップS1101の処理に移行する。データ転送方式C以外のアプリケーションが終了した場合(ステップS1103:No)、各CPUは、ステップS1101の処理に移行する。なお、アプリケーションが終了すると、実行中のアプリケーションにスイッチするため、ステップS1101:Yesの処理に移行する。
アプリケーションの実行が終了した状態変化でない場合(ステップS1102:No)、各CPUは、未解析のアプリケーションが存在するかを判断する(ステップS1105)。未解析のアプリケーションが存在する場合(ステップS1105:Yes)、各CPUは、実行中のアプリケーションのうち、未解析のアプリケーションを選択する(ステップS1106)。選択後、各CPUは、CPU#0に選択されたアプリケーションの情報を通知する。
通知を受けたCPU#0は、選択されたアプリケーションがデータ転送テーブル201に存在するかを判断する(ステップS1107)。データ転送テーブル201に登録されている場合(ステップS1107:Yes)、CPU#0は、データ転送テーブル201から、選択されたアプリケーションのレコードを選択し(ステップS1108)、通知元のCPUに送信する。なお、選択されたアプリケーションのレコードが複数存在する場合、CPU#0は、選択されたアプリケーションがアクティブ状態かインアクティブ状態かと、条件に当てはまるレコードのうち記載された状態と、が一致するレコードを選択してもよい。
レコードを受信した各CPUは、新たなアプリケーションの起動による状態変化によって、選択されたアプリケーションのデータ転送方式が変更されるかを判断する(ステップS1109)。データ転送方式が変更される場合(ステップS1109:Yes)、各CPUは、データ転送方式設定処理を実行する(ステップS1110)。データ転送方式設定処理の詳細は、図12にて後述する。
データ転送方式の実行後、または、データ転送方式が変更されない場合(ステップS1109:No)、各CPUは、選択されたアプリケーションを解析済みに設定し(ステップS1111)、ステップS1105の処理に移行する。
選択されたアプリケーションがデータ転送テーブル201に登録されていない場合(ステップS1107:No)、CPU#0は、登録されていないという結果を通知元のCPUに送信する。登録されていないという結果を受信した各CPUは、ステップS1111の処理に移行する。
未解析のアプリケーションが存在しない場合(ステップS1105:No)、各CPUは、CPU#0に対して、新たなアプリケーションが起動した状態変化かを判断するよう依頼する(ステップS1112)。新たなアプリケーションが起動した状態変化である場合(ステップS1112:Yes)、CPU#0は、新たなアプリケーションがデータ転送テーブル201に登録されているかを判断する(ステップS1113)。なお、選択されたアプリケーションのレコードが複数存在する場合、CPU#0は、選択されたアプリケーションがアクティブ状態かインアクティブ状態かと、条件に当てはまるレコードのうち記載された状態と、が一致するレコードを選択してもよい。
データ転送テーブル201に登録されている場合(ステップS1113:Yes)、CPU#0は、データ転送テーブル201から新たなアプリケーションのレコードを選択する(ステップS1114)。レコードを選択後、CPU#0は、データ転送方式設定処理を実行する(ステップS1115)。データ転送方式設定処理の詳細は、図12にて後述する。
データ転送方式設定処理の実行終了後、CPU#0は、スケジューラ202によって新たなアプリケーションをディスパッチする(ステップS1116)。新たなアプリケーションがデータ転送テーブル201に登録されていない場合(ステップS1113:No)、CPU#0は、ステップS1116の処理に移行する。新たなアプリケーションが起動した状態変化でない場合(ステップS1112:No)、CPU#0は、スケジューラ202によって、通常のスケジューリングを実行する(ステップS1117)。なお、データ転送テーブル201に登録されていないアプリケーションとしては、たとえば、利用者がダウンロードしたアプリケーションなどが挙げられる。
ステップS1116の処理終了後、または、ステップS1117の処理終了後、CPU#0は、ステップS1101の処理に移行する。具体的には、処理移行後CPU#0は、各CPUに対して状態変化が発生したかを判断するように指示をする。
図12は、データ転送方式設定処理を示すフローチャートである。データ転送方式設定処理はすべてのCPUにて実行される。ここでは説明の簡略化のため、CPU#0が実行する場合について説明を行う。また、データ転送方式設定処理が実行される場合には、引数としてデータ転送テーブル201の選択されたレコードを取得できる状態である。
CPU#0は、選択されたレコードからデータ転送方式を判断する(ステップS1201)。選択されたレコードのデータ転送方式が方式Aである場合(ステップS1201:方式A)、転送対象データの転送に緊急性があると判断されるため、CPU#0は、DMACの設定をし(ステップS1202)、データ転送方式設定処理を終了する。なお、データ転送方式が方式Cのアプリケーションから方式Aのアプリケーションにディスパッチされた場合、CPU#0は、DMAC#0の使用禁止の解除を行い、DMACの設定を行う。
選択されたレコードのデータ転送方式が方式Bである場合(ステップS1201:方式B)、CPU#0は、転送対象データの格納と転送に緊急性がないと判断されるため、転送先アドレスの設定をし(ステップS1203)、データ転送方式設定処理を終了する。より詳細には、転送元メモリに転送対象データを格納するCPUに対し、転送先アドレスの設定をする。たとえば図6の場合では、CPU#0は、CPU#1に対してMEM#0内の転送先アドレスの設定をする。
選択されたレコードのデータ転送方式が方式Cである場合(ステップS1201:方式C)、転送対象データの格納に緊急性があり、転送に緊急性がないと判断されるため、CPU#0は、DMACの使用禁止を設定する(ステップS1204)。設定後、CPU#0は、データ転送方式設定処理を終了する。具体的には、CPU#0は、CPU#0に対応するDMAC#0の使用禁止を設定する。
図11、図12では、データ転送制御装置100は、データ転送方式が方式Cの際に、DMACの使用を禁止することで、CPUに転送させるようにしていたが、DMACを禁止せずにCPUに直接転送するように設定してもよい。また、データ転送制御装置100は、DMACの使用を禁止する代わりに、DMACの転送方法のうち、バスを占有するバースト転送を禁止してもよい。DMACの中には、バースト転送以外にも1バイト、または、コンピュータでデータ量の単位である1ワード単位で転送するシングル転送が行えるDMACも存在する(下記参考文献1参照。)。
(参考文献1:DMCを使いこなす : 富士通、[online]、[平成22年05月06日検索]、インターネット<URL:http://jp.fujitsu.com/microelectronics/products/micom/support/knowhow/fr−hard05.html>)
バースト転送を禁止し、シングル転送でデータを転送する場合、DMACがバスを占有しないため、データ転送制御装置100は、CPUの転送待ちによるスループットを低下させることなく、スループットを維持することができる。また、割り込みが発生した場合にも、データ転送制御装置100は、コンテキストスイッチを行う反応時間が短縮され、応答性を向上させることができる。
また、本実施の形態におけるデータ転送制御装置100は、マルチコアの形態となっていたが、シングルコアの形態となっていてもよい。たとえば、図5にて前述したアプリケーション#0にて、通信を行うスレッド#0が転送対象データをスレッド#0のワーキング領域に格納し、通信で得た転送対象データを用いるスレッド#1のワーキング領域に転送する状態を想定する。
この場合、アプリケーション#0の状態がアクティブである場合は、データ転送方式を方式Aとして、DMACによってスレッド#1のワーキング領域からスレッド#0のワーキング領域に転送対象データを転送してもよい。また、アプリケーション#0の状態がインアクティブである場合は、データ転送方式を方式Bとして、スレッド#1が直接スレッド#0のワーキング領域に転送対象データを書き込みしてもよい。
また、シングルコアによるデータ転送方式が方式Cの場合においても、図7にて前述したアプリケーション#2の例が適用できる。具体的には、アプリケーション#2のスレッド#4が転送対象データをスレッド#4のワーキング領域に格納し、スレッド#5がスレッド#4のワーキング領域から直接転送対象データを読み込んでもよい。
以上説明したように、マルチプロセッサシステム、制御方法、および制御プログラムによれば、実行中のアプリケーションの種類に基づいて、緊急のデータ転送か否かを判断し、緊急でない場合にDMACの使用を禁止する。これにより、マルチプロセッサシステムは、頻繁なDMA転送を削減するため、プロセッサの転送待ちによるスループットの低下を防ぐことができる。さらに、マルチプロセッサシステムは、頻繁なDMA転送を削減するため、コンテキストスイッチが要求される割り込み処理への反応時間が短くなり、リアルタイム処理に対する応答性を向上できる。
また、マルチプロセッサシステムは、アプリケーションの種類と状態変化とに基づいて、緊急のデータ転送か否かを判断してもよい。これにより、マルチプロセッサシステムは、プロセッサの転送待ちによるスループットの低下を防ぐことができ、さらに、リアルタイム処理に対する応答性を向上できる。また、マルチプロセッサシステムは、アプリケーションの状態変化に基づいて判断することで、アプリケーションの種類による判断よりさらに動的にデータ転送方式を変更することができる。したがって、マルチプロセッサシステムは、スループットの低下の防止やリアルタイム処理に対する応答性の向上を行える状態をより増やすことができる。
また、マルチプロセッサシステムは、アプリケーションの状態がアクティブからインアクティブに、または、インアクティブからアクティブに変化した場合に、アプリケーションの種類と状態変化とに基づいて、緊急のデータ転送か否かを判断してもよい。これにより、マルチプロセッサシステムは、プロセッサの転送待ちによるスループットの低下を防ぐことができ、さらに、リアルタイム処理に対する応答性を向上できる。
また、マルチプロセッサシステムが携帯端末の形態をとる場合、携帯端末で採用されるディスプレイの表示領域は表示領域が狭く、たとえば、320×240ピクセルであるQVGA(Quarter Video Graphics Array)が採用される場合もある。このような表示領域の狭いディスプレイの場合、インアクティブとなったアプリケーションは、アクティブとなったアプリケーションによってすべて隠される可能性が高い。すべて隠れてしまったアプリケーションは利用者から見えなくなるため、データの転送速度を遅くしても利用者からは問題とならない場合が存在する。このような場合、マルチプロセッサシステムは、データの転送速度が遅くなる代わりに、プロセッサのスループットの低下防止や、リアルタイムの応答性の向上を図ることができる。
また、マルチプロセッサシステムは、転送対象データの転送に緊急性があると判断された場合、DMACによって転送対象データを転送してもよい。これにより、マルチプロセッサシステムは、緊急性があるときに限り高速で転送対象データを転送することができる。たとえば、アプリケーションがアクティブとなり緊急性が高まったときに、マルチプロセッサシステムは、DMACによって転送対象データを高速に転送することができる。
また、マルチプロセッサシステムは、他のプロセッサによる転送元メモリへの転送対象データの格納に緊急性があるかを判断し、転送対象データの格納に緊急性がなく、かつ、転送対象データの転送に緊急性がないと判断された場合、他のプロセッサに転送させてもよい。これにより、マルチプロセッサシステムは、緊急性がない場合に、プロセッサのスループットの低下防止や、リアルタイムの応答性の向上を図ることができる。
また、マルチプロセッサシステムは、転送対象データの格納に緊急性があり、かつ、転送対象データの転送に緊急性がないと判断された場合、プロセスを検出したプロセッサに転送させてもよい。これにより、マルチプロセッサシステムは、転送対象データの格納を高速で行いつつ、プロセッサのスループットの低下防止や、リアルタイムの応答性の向上を図ることができる。
なお、本実施の形態で説明した制御方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本制御プログラムは、ハードディスク、フレキシブルディスク、CD−ROM、MO、DVD等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本制御プログラムは、インターネット等のネットワークを介して配布してもよい。