(第1の実施の形態)
図1は,第1の実施の形態を説明する機能ブロック図である。データ転送システム1は,ハードウェア構成要素を有するハードウェア10と,ハードウェア10のCPU12において実行されるソフトウェア20とを有する。
ハードウェア10は,内部バスマスタであるDMA転送処理を実行する内部バスマスタ(複数チャネルのDMAC)11と,CPU12と,割り込みコントローラ(IRC:Interrupt Request Controller)として機能するIRC13と,例えばRAM,ROMから構成されるメモリ14と,外部バスマスタ15と,これら各ハードウェアを相互に接続するバス16を有する。バス16は,DMAC11や外部バスマスタ15に設定された優先度に従ってバスマスタ毎のバス使用要求を仲裁するバスアービタ16aを有する。DMAC11は,複数チャネルのDMACを有し,複数のバスマスタとして機能する。バスアービタ16aは,この複数のバスマスタからのバス使用要求に対して,例えば,この複数のバスマスタに設定された優先度に従って,時分割でバス使用権の割り当てを行う。
ソフトウェア20は,CPU12によって実行されるタスク21と,タスク21が生成したデータ転送要求を受け付け,受け付けたデータ転送要求の中で,最も優先度が高いデータ転送要求を選択し,選択したデータ転送要求の実行をバスマスタドライバ手段に命令するスケジューリング手段22と,いわゆるオペレーティングシステムOS(Operating System)23と,バスマスタ(例えばDMAC11)を制御するバスマスタドライバ手段24とを有する。バスマスタドライバ手段24は,スケジューリング手段22からの命令に応答して,スケジューリング手段22が選択したデータ転送要求に対応するバスマスタにこのデータ転送要求を実行させる。バスマスタドライバ手段24は,命令に応答して,前記の選択したデータ転送要求に対応するバスマスタに前記の選択したデータ転送要求を実行させる。
また,スケジューリング手段22は,選択したデータ転送要求がバスマスタにより実行されている間に,タスク21により新たに生成されたデータ転送要求を受け付けると,受け付けたデータ転送要求の優先度が,実行されているデータ転送要求の優先度よりも高い場合に,実行されているデータ転送要求の一時停止をバスマスタドライバ手段24に命令すると共に,新たに生成されたデータ転送要求の実行をバスマスタドライバ手段24に命令する。そして,バスマスタドライバ手段24は,命令に応答して,実行されているデータ転送要求の一時停止をバスマスタに実行させ,新たに生成されたデータ転送要求に対応するバスマスタにデータ転送要求を実行させる。
そして,スケジューリング手段22は,新たに生成されたデータ転送要求の実行が完了したこと示す完了通知をOS23から受け付けると,完了通知に応答して,一時停止していたデータ転送要求の再開をバスマスタドライバ手段24に命令する。
以下に,このようなデータ転送要求のスケジューリングを実行するデータ転送システム1の詳細について説明する。
図2は,ハードウェア10の機能ブロック図である。DMAC11は,DMA転送を実行する複数チャネルのDMACch0_110〜DMACch7_117と,DMACch0_110〜DMACch7_117とが接続するDMACバス113と,DMACch0_110〜DMACch7_117からのバス使用要求を仲裁するDMACバスアービタ114とを有する。なお,チャネル数は例示である。
CPU12は,ソフトウェア20を実行するCPUである。
バス1A_161Aは,DMAC11とバス2A_162Aとバス2B_162Bに接続するバスであり,バス1Aアービタ161aを有する。バス2A_162Aは,バス1A_161Aとバス1B_161Bと外部バスI/O163に接続するバスであり,バス2Aアービタ162aを有する。外部バスI/O163は,バス2A_162Aと外部バス166に接続するバスであり,外部バスアービタ163aを有する。
バス1B_161Bは,CPU12とバス2A_162Aとバス2B_162Bとバス2C_162Cに接続するバスであり,バス1Bアービタ161bを有する。バス2B_162Bは,バス1A_161Aとバス1B_161BとメモリIF164に接続するバスであり,バス2Bアービタ162bを有する。メモリIF164は,バス2B_162Bとメモリバス165に接続するメモリIF(InterFace)である。メモリバス165は,メモリIF164とメモリ14とに接続する。バス2C_162Cは,バス1B_161BとIRC13とに接続するバスである。
外部バス166は,外部バスI/O163と外部バスマスタ151と外部スレーブデバイス152とに接続する。外部バスマスタ151と外部スレーブデバイス152は,後述するようにユーザによって新たに追加されたデバイスである。以上説明したように,ハードウェア10は,複数のバスが多段に接続されたバス構造を有する。これらのバス,バスアービタが,図1のバス16,バスアービタ16aに対応する。
IRC13は,DMAC11からデータ転送完了通知を受け取ると,CPU12に対して転送完了割り込みを行い,データ転送が完了したことを通知する。
図3は,ソフトウェア20の詳細機能ブロック図である。スケジューリング手段22の要求発生受け付け手段221は,タスク21が生成したデータ転送要求,データ転送一時停止要求,データ転送再開要求,データ転送強制終了要求を受け付ける。要求完了通知受け付け手段222は,バスマスタドライバ手段24からの転送完了通知を受け付ける。要求管理手段223は,要求発生受け付け手段221が受け付けたデータ転送要求を管理する。優先度付きスケジューラ224は,データ転送要求の優先度を有するデータ転送要求を,この優先度に基づきスケジューリングする。
バス/転送制御手段225は,データ転送要求の実行開始,一時停止,再開,強制終了を実行するように,バスマスタドライバ制御手段226に命令する。バスマスタドライバ制御手段226は,バス/転送制御手段225の命令に応答し,バスマスタドライバ手段24を制御する。バスマスタドライバ手段24は,バスマスタ,すなわち図2の例では,DMAC11を制御するドライバである。バスマスタドライバ手段24は,さらにOS23からの完了割り込み通知を受け付ける完了割り込み受け付け手段241を有する。
OS23は,タスク21,スケジューリング手段22の制御を実行する。メモリ14は,要求発生受け付け手段221が受け付けたデータ転送要求を,後述するデータ転送要求の識別子とステータスフラグと共に格納する要求格納部141と,FIFO機能を有し,データ転送要求を優先度に従ってキュー内で管理する優先度別要求キュー142とを有する。
ソフトウェア20は,プログラム格納用メモリ(図示しない)に格納されたプログラムから構成される。このプログラムの中で,スケジューリング手段22に対応するプログラムをデータ転送スケジューリングプログラムとする。CPU12は,必要に応じてこのプログラムをこのメモリから読み出し実行する。なお,このプログラムを,メモリ14に格納してもよい。
図4は,データ転送要求の内容を示す図である。データ転送要求は,図4に示すデータ転送情報を含む。データ転送要求の種類は,データ転送要求を実行させるバスマスタを特定するために参照されるものであり,DMAC11にデータ転送を実行させることを示す内部DMAC転送,外部バスマスタ151にデータ転送を実行させることを示す外部DMAC転送,CPU12にデータ転送を実行させることを示すCPUのPIO(Programmed I/O)転送などデータ転送要求の種類を示す。このデータ転送要求の種類を参照して,スケジューリング手段22は,優先度が最も高いデータ転送要求に対応するバスマスタにこのデータ転送要求を実行させる。第1の実施の形態では内部DMAC転送について説明する。外部DMAC転送については第2の実施の形態で説明し,CPUのPIO転送については第4の実施の形態で説明する。
データ転送要求の優先度は,複数のデータ転送要求がある場合に,どのデータ転送要求を優先的に実行させるかを示す実行優先度を示し,例えば優先度1〜5が記録され,数値が大きいほど優先度が高い。データ転送元は,データ転送元アドレスを示し,データ転送先はデータ転送先アドレスを示し,データ転送サイズ(データ転送量)は転送する全データのサイズを示す。転送単位のデータサイズは,1回のアクセスでデータ転送されるデータサイズを示す。転送方法は,データの転送先,転送元のアドレスをインクリメントする,デクリメントする,固定するなどの転送方法を示す。
次に,図5〜図9を参照しながら,本実施の形態におけるデータ転送を詳細に説明する。
図5A〜図5Cは,データ転送要求の実行開始を説明するフロー図である。
ステップS1:タスク21は,スケジューリング手段22にデータ転送要求の実行命令を行うデータ転送要求APIを呼び出す。このとき,図4で説明したデータ転送要求がタスク21により生成され,データ転送要求APIに引数として設定される。その結果,データ転送要求がスケジューリング手段22に入力される。引数として設定するデータ転送要求のデータ転送要求の種類には「内部DMAC転送」が記録される。
ステップS2:スケジューリング手段22の要求発生受け付け手段221は,このデータ転送要求を受け付け,データ転送要求を識別する識別子をこのデータ転送要求に割り当てる。この識別子は,スケジューリング手段22がデータ転送要求を管理するために利用される。また,この識別子は,タスク21により呼び出されたデータ転送要求APIの戻り値として,タスク21に入力される。
ステップS3:要求発生受け付け手段221は,受け付けたデータ転送要求を要求格納部141に格納するように要求管理手段223に命令する。
ステップS4:要求管理手段223は,この命令に応答し,要求発生受け付け手段221から入力されたデータ転送要求とその識別子を要求格納部141に格納する。ここでは,要求管理手段223は,データ転送要求に要求発生受け付け手段221により割り当てられた識別子とステータスフラグとを含め格納する。ステータスフラグには,データ転送要求の状態が記録され,この状態として例えば実行待機中,転送実行中,割り込みによる一時停止中,タスクによる一時停止中がある。ここでは,要求管理手段223は,ステータスフラグに実行待機中を記録する。
ステップS5:要求管理手段223は,優先度を指定して,データ転送要求の識別子を優先度別要求キュー142の最後部に登録するように優先度付きスケジューラ224に命令する。同時に,要求管理手段223は,データ転送要求の識別子とこの優先度を優先度付きスケジューラ224に出力する。
ステップS6:優先度付きスケジューラ224は,入力されたデータ転送要求の識別子を優先度別要求キュー142のリストの最後部に登録する。同時に,優先度付きスケジューラ224は,登録したデータ転送要求の識別子に対応してこの優先度も登録する。なお,この登録前において,優先度別要求キュー142に識別子が登録されている場合,最も優先度の高いデータ転送要求の識別子に対応するデータ転送要求が,実行中のデータ転送要求となる。なお,優先度が最も高いデータ転送要求の識別子が複数ある場合,優先度別要求キュー142に最初に登録された(優先度別要求キュー142の先頭部分に最も近い)データ転送要求の識別子に対応するデータ転送要求が,実行中のデータ転送要求であるとする。
ステップS7:優先度付きスケジューラ224は,優先度別要求キュー142に登録されたデータ転送要求の中で,最も優先度の高いデータ転送要求の識別子を選択(検索)する。優先度が最も高いデータ転送要求の識別子が複数ある場合,優先度別要求キュー142に最初に登録されたデータ転送要求の識別子を選択する。以下,同様である。
ステップS8:優先度付きスケジューラ224は,新たに,データ転送要求の識別子が優先度別要求キュー142に登録されたことにより,最も優先度が高いデータ転送要求の識別子が,実行中のデータ転送要求の識別子と変わっていないかを確認する。ここでは,優先度付きスケジューラ224は,ステップS7で選択した最も高い優先度のデータ転送要求の識別子が,新たに登録された識別子か否かを確認する。
例えば,優先度3のデータ転送要求が実行されている間に,優先度5のデータ転送要求(識別子)がステップS6で登録された場合,最も優先度が高いデータ転送要求が,実行中のデータ転送要求の識別子と変わっていると判断する。一方,優先度5のデータ転送要求が実行されている間に,優先度3のデータ転送要求がステップS6で登録された場合,最も優先度が高いデータ転送要求が,実行中のデータ転送要求の識別子と変わっていないと判断する。
ステップS9:最も優先度が高いデータ転送要求が,実行中のデータ転送要求の識別子と変わっている場合(ステップS9/YES),ステップS10に移る。なお,優先度別要求キュー142が空の状態のときに,ステップS6で新たにデータ転送要求が優先度別要求キュー142に登録された場合も,ステップS10に移る。変わっていない場合(ステップS9/NO),処理を終了する。このとき,ステップS6で登録されたデータ転送要求は,後述する図6BのステップS27以下で実行されることになる。
ステップS10:優先度付きスケジューラ224は,最も優先度が高いデータ転送要求の識別子をバス/転送制御手段225に出力する。
ステップS11:バス/転送制御手段225は,最も優先度が高いデータ転送要求に基づいて,データ転送要求を実行するようにバスマスタドライバ制御手段226に命令する。このとき,バス/転送制御手段225は,最も優先度が高いデータ転送要求の識別子をバスマスタドライバ制御手段226に出力する。
ステップS12:バスマスタドライバ制御手段226は,実行中のデータ転送要求を一時停止して,最も優先度が高いデータ転送要求を実行するようにバスマスタドライバ手段24に命令する。なお,前述したように,優先度別要求キュー142が空の状態のときに,ステップS6で新たにデータ転送要求が優先度別要求キュー142に登録された場合は,この一時停止命令は実行しない。
ここでは,バスマスタドライバ制御手段226は,入力されたデータ転送要求の識別子を要求管理手段223に出力する。要求管理手段223は,入力された識別子に対応するデータ転送要求を要求格納部141から読み出し,バスマスタドライバ制御手段226に出力する。また,要求管理手段223は,データ転送要求をバスマスタドライバ制御手段226に出力すると,実行中のデータ転送要求のステータスフラグ(転送実行中が記録されている)を割り込みによる一時停止中に変更し,入力された識別子に対応するデータ転送要求のステータスフラグに転送実行中を記録する。
すなわち,バスマスタドライバ制御手段226は,入力された識別子に対応するデータ転送要求を要求管理手段223を経由して要求格納部141から読み出す。バスマスタドライバ制御手段226は,読み出したデータ転送要求をバスマスタドライバ手段24に出力する。
バスマスタドライバ手段24は,バスマスタドライバ制御手段226からの一時停止命令に応答して,DMAC11が実行中のデータ転送要求を一時停止するようにOS23を介してDMAC11に命令する。DMAC11は,バスマスタドライバ手段24からの一時停止命令に応答して,実行中のデータ転送を一時停止する。
そして,バスマスタドライバ手段24は,バスマスタドライバ制御手段226からのデータ転送実行命令に応答して,入力されたデータ転送要求をOS23を介してDMAC11に出力する。DMAC11は,入力されたデータ転送要求に基づいて,データ転送を実行する。
なお,ステップS2で説明した処理は,CPU12によって実行されるタスク21が生成したデータ転送要求を受け付ける工程の一例である。
ステップS7で説明した処理は,スケジューリング手段22が,受け付けたデータ転送要求の中で,最も優先度が高いデータ転送要求を選択する工程の一例である。
また,ステップS10以下で説明した処理は,スケジューリング手段22が,前記の選択したデータ転送要求の実行をバスマスタドライバ手段24に命令して,バスマスタドライバ手段24により,前記の選択したデータ転送要求に対応するバスマスタ(DMAC11)に選択したデータ転送要求を実行させる工程の一例である。
ステップS7〜S10以下で説明した処理は,スケジューリング手段22が,前記の選択したデータ転送要求がバスマスタにより実行されている間に,タスク21により新たに生成されたデータ転送要求を受け付けると(ステップS2参照),受け付けたデータ転送要求の優先度が,実行されているデータ転送要求の優先度よりも高い場合に(ステップS9/YES),実行されているデータ転送要求を一時停止すると共に,新たに生成されたデータ転送要求の実行を,バスマスタドライバ手段24に命令する工程(ステップS12参照)と,スケジューリング手段22が,バスマスタドライバ手段24により,実行されているデータ転送要求の一時停止をバスマスタに実行させ,新たに生成されたデータ転送要求に対応するバスマスタにデータ転送要求を実行させる工程の一例である。
このように,タスクが生成したデータ転送要求をスケジューリング手段22が一括して受け付けてスケジューリングする。そのため,バスアービタは,一つのバスマスタからのバス使用要求に応答し,このバスマスタにバス使用権を与えればよい。その結果,バスマスタは,データ転送経路となるバスの使用権を一揆通貫で獲得して,このバスを独占的に使用することができる。従って,時間的要求が厳しいデータ転送でも,所定時間内に完了することができる。
例えば,実行対象となるデータ転送要求のデータ転送情報に,データ転送要求の種類として内部DMAC転送,データ転送元としてメモリ14のアドレス,データ転送先として外部スレーブデバイス152のアドレスが記録されていた場合,図5A〜図5Cの処理が実行され,DMAC11は入力されたデータ転送要求に基づきデータ転送を実行する。このとき,例えばDMACch0_110が,DMACバス113,バス1A_161A,バス2B_162B,メモリIF164,メモリバス165を経由してメモリ14にアクセスし,データを読み出し,メモリバス165,メモリIF164,バス2B_162B,バス1A_161A,バス2A_162A,外部バスI/O163,外部バス166を経由して,外部スレーブデバイス152に読み出したデータを書き込む処理を実行する。この読み出し,書き込み処理は,データ転送情報に記録されたデータ転送サイズ分のデータが外部スレーブデバイス152に書き込まれるまで実行される。
この実行時において, 本実施の形態によれば,DMACch0_110は,データ転送経路となるバスの使用権を一揆通貫で獲得して,このバスを独占的に使用することができる。
図6A,図6Bは,データ転送完了時に実行する処理を説明するフロー図である。
ステップS21:バスマスタドライバ手段24は,OS23からのデータ転送完了通知を受け付け,要求完了通知受け付け手段222を起動する。具体的には,DMAC11が実行中のデータ転送を完了すると,DMAC11はIRC13にデータ転送が完了したこと通知する。IRC13は,DMAC11から転送完了通知を受け取ると,CPU12に対して転送完了割り込みを行い,データ転送が完了したことを通知する。CPU12は,転送完了割り込み通知を受け取ると,OS23の割り込みハンドラ231を介して転送完了通知をバスマスタドライバ手段24の完了割り込み受け付け手段241に出力する。完了割り込み受け付け手段241は,受信した転送完了通知を要求完了通知受け付け手段222に出力する。
ステップS22:要求完了通知受け付け手段222は,転送完了通知を受け付ける。
ステップS23:要求完了通知受け付け手段222は,転送完了通知に対応するデータ転送要求を要求格納部141から削除するように要求管理手段223に命令する。
ステップS24:要求管理手段223は,この命令に応答し,転送完了通知に対応するデータ転送要求を要求格納部141から削除する。すなわち,ステータスフラグに転送実行中が設定されているデータ転送要求を削除する。
ステップS25:要求完了通知受け付け手段222は,転送完了通知に対応するデータ転送要求の識別子を優先度別要求キュー142から削除するように優先度付きスケジューラ224に命令する。
ステップS26:優先度付きスケジューラ224は,転送完了通知に対応するデータ転送要求の識別子を優先度別要求キュー142から削除する。ここでは,例えば優先度が最も高いデータ転送要求の識別子を優先度別要求キュー142から削除すればよい。なお,優先度が最も高いデータ転送要求の識別子が複数ある場合,優先度別要求キュー142に最初に登録されたデータ転送要求の識別子を削除すればよい。
ステップS27:優先度付きスケジューラ224は,この削除後,優先度別要求キュー142に登録されたデータ転送要求の識別子の中で,最も優先度の高いデータ転送要求の識別子を選択する。優先度が最も高いデータ転送要求の識別子が複数ある場合,優先度別要求キュー142に最初に登録されたデータ転送要求の識別子を選択する。なお,優先度別要求キュー142にデータ転送要求がない場合には,処理を終了する。
ステップS28:優先度付きスケジューラ224は,最も優先度が高いデータ転送要求の識別子をバス/転送制御手段225に出力する。
ステップS29:バス/転送制御手段225は,最も優先度が高いデータ転送要求に基づいて,データ転送要求を実行するようにバスマスタドライバ制御手段226に命令する。このとき,最も優先度が高いデータ転送要求の識別子をバスマスタドライバ制御手段226に出力する。
ステップS30:バスマスタドライバ制御手段226は,最も優先度が高いデータ転送要求を実行するようにバスマスタドライバ手段24に命令する。具体的には,ステップS12で説明したように,バスマスタドライバ制御手段226は,入力された識別子に対応するデータ転送要求を要求管理手段223を経由して要求格納部141から読み出す。バスマスタドライバ制御手段226は,読み出したデータ転送要求をバスマスタドライバ手段24に出力する。なお,要求管理手段223は,この識別子に対応するデータ転送要求のステータスフラグに転送実行中を記録する。
バスマスタドライバ手段24は,バスマスタドライバ制御手段226からのデータ転送実行命令に応答して,入力されたデータ転送要求をOS23を介してDMAC11に出力する。DMAC11は,入力されたデータ転送要求に基づいて,データ転送を実行する。なお,バスマスタドライバ手段24は,入力されたデータ転送要求のステータスフラグに割り込みによる一時停止中または後述するタスクによる一時停止中が記録されている場合には,一時停止していたデータ転送を再開するように,DMAC11に命令する。
本実施の形態では,タスク21は,データ転送要求の実行だけでなく,データ転送要求の一時停止,再開,データ転送要求の強制終了も実行することができる。
図7A〜図7Cは,データ転送要求の一時停止を説明するフロー図である。
ステップS41:タスク21は,スケジューリング手段22にデータ転送要求の一時停止命令を行う一時停止要求APIを呼び出す。このとき,一時停止要求APIに引数として,図5AのステップS2で説明した一時停止するデータ転送要求の識別子を設定する。その結果,識別子を含む一時停止要求がスケジューリング手段22に入力される。
ステップS42:要求発生受け付け手段221は,この一時停止要求を受け付ける。すなわち,要求発生受け付け手段221は,タスク21からデータ転送要求の一時停止命令を受け付ける。
ステップS43:要求発生受け付け手段221は,受け付けた一時停止要求に対応するデータ転送要求を要求格納部141から検索するように要求管理手段223に命令する。
ステップS44:要求管理手段223は,この命令に応答し,この一時停止要求に対応するデータ転送要求を要求格納部141から検索し,検索したデータ転送要求のステータスフラグにタスクによる一時停止中を記録する。この検索は,一時停止要求に対応するデータ転送要求の識別子をキーにして実行される。
ステップS45:要求発生受け付け手段221は,受け付けた一時停止要求に対応するデータ転送要求の識別子を優先度別要求キュー142から削除するように優先度付きスケジューラ224に命令する。
ステップS46:優先度付きスケジューラ224は,一時停止要求に対応するデータ転送要求の識別子を優先度別要求キュー142から検索し,検索したデータ転送要求の識別子を削除する。すなわち,優先度付きスケジューラ224は,一時停止命令に応答し,データ転送要求のスケジューリングを一時停止する。
ステップS47:優先度付きスケジューラ224は,この削除後,優先度別要求キュー142に登録されたデータ転送要求の識別子の中で,最も優先度の高いデータ転送要求の識別子を選択する。
ステップS48:優先度付きスケジューラ224は,この削除により,最も優先度が高いデータ転送要求の識別子が,実行中のデータ転送要求の識別子と変わっていないか,すなわち実行中のデータ転送要求の識別子を削除したのか(実行中のデータ転送要求を一時停止するのか)を確認する。
ステップS49:実行中のデータ転送要求の識別子と変わっている場合(ステップS49/YES),ステップS50,S51の処理を実行する。変わっていない場合(ステップS49/NO),つまり,実行待機中のデータ転送要求を一時停止する場合,処理を終了する。
ステップS50〜S52の処理は,ステップS10〜S12の処理と同様なので,その説明を省略する。
図8A〜図8Cは,一時停止していたデータ転送要求の再開を説明するフロー図である。この処理は,図7A〜図7Cで説明した,タスクにより一時停止されたデータ転送要求を再開する処理を説明するものである。
ステップS61:タスク21は,スケジューリング手段22に一時停止していたデータ転送要求の再開命令を行う再開要求APIを呼び出す。このとき,再開要求APIに引数として,図5AのステップS2で説明した再開するデータ転送要求の識別子を設定する。その結果,識別子を含む再開要求がスケジューリング手段22に入力される。
ステップS62:要求発生受け付け手段221は,この再開要求を受け付ける。すなわち,要求発生受け付け手段221は,タスク21から一時停止していたデータ転送要求の再開命令を受け付ける。
ステップS63:要求発生受け付け手段221は,受け付けた再開要求に対応するデータ転送要求を要求格納部141から検索するように要求管理手段223に命令する。
ステップS64:要求管理手段223は,この命令に応答し,この再開要求に対応するデータ転送要求を要求格納部141から検索する。この検索は,再開要求に対応するデータ転送要求の識別子をキーにして実行される。
ステップS65:要求発生受け付け手段221は,受け付けた再開要求に対応するデータ転送要求の識別子を優先度別要求キュー142の先頭に登録するように優先度付きスケジューラ224に命令する。
ステップS66:優先度付きスケジューラ224はこの命令に応答し,再開要求に対応するデータ転送要求の識別子を優先度別要求キュー142の先頭に登録する。すなわち,優先度付きスケジューラ224は,再開命令に応答し,一時停止していたデータ転送要求のスケジューリングを再開する。ここでは,優先度付きスケジューラ224は,ステップS64で要求管理手段223が検索した再開要求に対応するデータ転送要求の識別子,優先度を要求管理手段223から得て,この登録を実行する。
ステップS67,S68の処理の説明は,ステップS7,S8の処理と同様なので,その説明を省略する。
ステップS69:最も優先度が高いデータ転送要求の識別子が,実行中のデータ転送要求の識別子と変わっている場合(ステップS69/YES),すなわち再開対象となるデータ転送要求の優先度が最も高い場合,ステップS70に移る。変わっていない場合(ステップS69/NO),処理を終了する。
ステップS70,S71の処理は,ステップS10,S11の処理と同様なので,その説明を省略する。
ステップS72:バスマスタドライバ制御手段226は,実行中のデータ転送要求を一時停止して,最も優先度が高いデータ転送要求(再開するデータ転送要求)を実行するようにバスマスタドライバ手段24に命令する。具体的には,バスマスタドライバ制御手段226は,ステップS71(ステップS11参照)においてバス/転送制御手段225から入力された識別子に対応するデータ転送要求を要求管理手段223を経由して要求格納部141から読み出す。なお,詳細については,ステップS12で説明したので省略する。バスマスタドライバ制御手段226は,読み出したデータ転送要求をバスマスタドライバ手段24に出力する。この読み出したデータ転送要求のステータスフラグには,タスクによる一時停止中が記録されているので,バスマスタドライバ手段24は,タスクからの要求により一時停止していたデータ転送要求を実行するようにDMAC11に命令することができる。
また,要求管理手段223は,識別子が入力されると(ステップS12参照),実行中のデータ転送要求のステータスフラグ(転送実行中が設定されている)を割り込みによる一時停止中に設定し,入力された識別子に対応するデータ転送要求のステータスフラグを転送実行中に設定する。
バスマスタドライバ手段24は,バスマスタドライバ制御手段226からの一時停止命令に応答して,DMAC11が実行中のデータ転送要求を一時停止する。バスマスタドライバ手段24は,バスマスタドライバ制御手段226からのデータ転送実行命令に応答して,入力されたデータ転送要求をDMAC11に出力する。DMAC11は,入力されたデータ転送要求に基づいて,データ転送を実行する。
図9A〜図9Cは,データ転送要求の強制終了を説明するフロー図である。
ステップS81:タスク21は,スケジューリング手段22にデータ転送要求の強制終了命令を行う強制終了要求APIを呼び出す。このとき,強制終了APIに引数として,図5AのステップS2で説明した強制終了するデータ転送要求の識別子を設定する。その結果,識別子を含む強制終了要求がスケジューリング手段22に入力される。
ステップS82:要求発生受け付け手段221は,この強制終了要求を受け付ける。すなわち,要求発生受け付け手段221は,タスク21からデータ転送要求の強制終了命令を受け付ける。
ステップS83:要求発生受け付け手段221は,受け付けた強制終了要求に対応するデータ転送要求を要求格納部141から検索し,削除するように要求管理手段223に命令する。
ステップS84:要求管理手段223は,この命令に応答し,この強制終了要求に対応するデータ転送要求を要求格納部141から検索し,検索したデータ転送要求を削除する。この検索は,強制終了要求に対応するデータ転送要求の識別子をキーにして実行される。
ステップS85:要求発生受け付け手段221は,受け付けた強制終了要求に対応するデータ転送要求の識別子を優先度別要求キュー142から削除するように優先度付きスケジューラ224に命令する。
ステップS86:優先度付きスケジューラ224は,強制終了要求に対応するデータ転送要求の識別子を優先度別要求キュー142から検索し,検索したデータ転送要求の識別子を削除する。すなわち,優先度付きスケジューラ224は,強制終了命令に応答し,データ転送要求のスケジューリングを終了する。
ステップS87:優先度付きスケジューラ224は,この削除後,優先度別要求キュー142に登録されたデータ転送要求の識別子の中で,最も優先度の高いデータ転送要求の識別子を選択する。
ステップS88:優先度付きスケジューラ224は,この削除により,最も優先度が高いデータ転送要求の識別子が,実行中のデータ転送要求の識別子と変わっていないか,すなわち実行中のデータ転送要求の識別子を削除したのか(実行中のデータ転送要求を強制終了するのか)を確認する。
ステップS89:実行中のデータ転送要求の識別子と変わっている場合(ステップS89/YES),ステップS90,S91の処理を実行する。変わっていない場合(ステップS89/NO),つまり,実行待機中のデータ転送要求を強制終了した場合,処理を終了する。
ステップS90:優先度付きスケジューラ224は,最も優先度が高いデータ転送要求の識別子をバス/転送制御手段225に出力する。
ステップS91:バス/転送制御手段225は,最も優先度が高いデータ転送要求に基づいて,データ転送要求を実行するようにバスマスタドライバ制御手段226に命令する。このとき,最も優先度が高いデータ転送要求の識別子をバスマスタドライバ制御手段226に出力する。
ステップS92:バスマスタドライバ制御手段226は,実行中のデータ転送要求を強制終了して,最も優先度が高いデータ転送要求を実行するようにバスマスタドライバ手段24に命令する。
ここでは,バスマスタドライバ制御手段226は,入力された識別子に対応するデータ転送要求を要求管理手段223を経由して要求格納部141から読み出す。バスマスタドライバ制御手段226は,読み出したデータ転送要求をバスマスタドライバ手段24に出力する。なお,ステップS12で説明したように,要求管理手段223は,データ転送要求をバスマスタドライバ制御手段226に出力すると,入力された識別子に対応するデータ転送要求のステータスフラグに転送実行中を記録する。
バスマスタドライバ手段24は,バスマスタドライバ制御手段226からの強制終了命令に応答して,DMAC11が実行中のデータ転送要求を強制終了するようにOS23を介してDMAC11に命令する。DMAC11は,バスマスタドライバ手段24からの強制終了命令に応答して,実行中のデータ転送を強制終了する。
そして,バスマスタドライバ手段24は,バスマスタドライバ制御手段226からのデータ転送実行命令に応答して,入力されたデータ転送要求をOS23を介してDMAC11に出力する。DMAC11は,入力されたデータ転送要求に基づいて,データ転送を実行する。
第1の実施形態によれば,データ転送を実行するバスマスタは,多段構成のバス構造であっても,データ転送経路となるバスの使用権を一揆通貫で獲得して,このバスを独占的に使用することができるので,効率的にデータ転送を実行できる。その結果,時間的要求が厳しいデータ転送でも,所定時間内に完了することができる。
バスのアービタは,データ転送要求そのものの優先度に基づいて,バス使用要求の仲裁を実行することができない。しかし,第1の実施の形態によれば,スケジューリング手段が,優先度に基づいてデータ転送要求のスケジューリングを行うので,効率的なデータ転送を実行できる。
また,バスアービタに対して1つのバスマスタがバス使用権を要求するので,このバスマスタは,即座にバス使用権を得ることができる。その結果,バスマスタがバス使用権を獲得するまでの待ち時間がなくなり,バスマスタの動作が停止することがない。
(第2の実施の形態)
ところで,ユーザがハードウェア10に新たにバスマスタを追加することがある。このバスマスタは,ユーザ定義バスマスタとも呼ばれる。このような場合,スケジューリング手段22の制御下に入ることなく,新たに追加したバスマスタがデータ転送を実行すると,このバスマスタと,スケジューリング手段22によりスケジューリングされたデータ転送を実行するバスマスタがバスに同時にバス使用要求を出すことがある。その結果,スケジューリング手段22によりスケジューリングされたデータ転送の効率が低下する。従って,新たに追加したバスマスタが実行するデータ転送をスケジューリング手段22によりスケジューリングする必要がある。
図10は,第2の実施の形態を説明するためのハードウェアの機能ブロック図であり,外部バスマスタ151が,ユーザによって新たに追加されたバスマスタ(ユーザ定義バスマスタ)である。外部バスマスタ151は,このバスマスタに対するインターフェイスバスとして機能する外部バスI/O163を介したデータ転送を実行し,外部バスI/O163に外部バス166を介して接続するバスマスタである。外部バスマスタ151は,外部バスI/O163に直接接続してもよい。すなわち,外部バスマスタ151は,バスを介したデータ転送を実行し,このバスに直接接続,または,他のバスなどを介して間接接続する。
図11は,第2の実施の形態を説明するためのソフトウェアの機能ブロック図であり,スケジューリング手段22は,外部バスマスタ151に対してスケジューリングされたデータ転送要求を実行させる。外部バスマスタドライバ制御手段31は,バス/転送制御手段225の命令に基づき,外部バスマスタドライバ手段32を制御する。外部バスマスタドライバ手段32は,外部バスマスタ151を制御するドライバである。完了割り込み受け付け手段33は,OS23からの完了割り込み通知を受け付け,要求完了通知受け付け手段222に出力する。
スケジューリング手段22は,受け付けたデータ転送要求の中で,最も優先度が高いデータ転送要求を選択する(図5BのステップS7〜S9参照)。そして,選択したデータ転送要求が,外部バスマスタ151にデータ転送要求を実行させる場合,このデータ転送要求の実行を外部バスマスタドライバ手段32に命令する。外部バスマスタドライバ手段32は,この命令に応答して,外部バスマスタ151に前記の選択したデータ転送要求を実行させる。
タスク21が,図5AのステップS1で説明したように,データ転送要求APIを呼び出す。このとき,図4で説明したデータ転送要求がタスク21により生成され,データ転送要求APIに引数として設定される。その結果,データ転送要求がスケジューリング手段22に入力される。このデータ転送要求のデータ転送要求の種類には,「外部DMAC転送」が記録される。以下,このデータ転送要求を外部バスマスタデータ転送要求と記す。
このデータ転送要求APIの呼び出しにより,図5A,図5Bで説明した処理がスケジューリング手段22によって実行される。このとき,要求発生受け付け手段221は,データ転送要求の種類に「外部DMAC転送」(図4参照)が記録されていることを確認し,この外部バスマスタデータ転送要求に外部バスマスタデータ転送要求用の識別子を割り当てる。
そして,図5BのステップS10で説明したように,優先度付きスケジューラ224から最も優先度が高いデータ転送要求の識別子,ここでは,外部バスマスタデータ転送要求の識別子がバス/転送制御手段225に入力される。バス/転送制御手段225は,入力された識別子が外部バスマスタデータ転送要求の識別子であるので,この識別子を外部バスマスタドライバ制御手段31に出力する。
外部バスマスタドライバ制御手段31は,ステップS12で説明したように,要求管理手段223を経由して,この識別子に対応する外部バスマスタデータ転送要求を要求管理手段223を経由して要求格納部141から読み出す。外部バスマスタドライバ制御手段31は,読み出したデータ転送要求を外部バスマスタドライバ手段32に出力する。外部バスマスタドライバ手段32は,読み出したデータ転送要求に基づき,外部バスマスタ151にデータ転送要求を実行するようにOS23を介して命令する。外部バスマスタ151は,この命令に応答して,データ転送要求を実行する。
なお,バス/転送制御手段225は,DMAC11または外部バスマスタ151がデータ転送要求を実行している場合には,外部バスマスタデータ転送要求の識別子が入力されると,実行しているデータ転送要求を一時停止するように,バスマスタドライバ制御手段226または外部バスマスタドライバ制御手段31を介してDMAC11または外部バスマスタ151に命令する。
そして,外部バスマスタ151が,データ転送要求を完了すると,図6AのステップS21で説明したように,要求完了通知受け付け手段222は,このデータ転送完了通知を外部バスマスタドライバ手段32の完了割り込み受け付け手段33から受け付ける。具体的には,外部バスマスタ151がデータ転送を完了すると,外部バスマスタ151はIRC13にデータ転送が完了したこと通知する。IRC13は,外部バスマスタ151から転送完了通知を受け取ると,CPU12に対して転送完了割り込みを行い,データ転送が完了したことを通知する。CPU12は,転送完了割り込み通知を受け取ると,OS23の割り込みハンドラ231を介して転送完了通知を外部バスマスタドライバ手段32の完了割り込み受け付け手段33に出力する。完了割り込み受け付け手段33は,受信した転送完了通知を要求完了通知受け付け手段222に出力する。
以後,図6A,6Bで説明したデータ転送完了処理が実行される。
このようにすることで,ユーザがハードウェア10に新たにバスマスタを追加しても,このバスマスタが実行するデータ転送をスケジューリング手段22によりスケジューリングすることができる。
(第3の実施の形態)
タスク21は,スケジューリング手段22ではなく直接バスマスタにデータ転送要求を行うことがある。このデータ転送要求をスケジューリング手段22を介さずに直接受け付けたバスマスタ(以下,スケジューリングされないバスマスタと記す)は,このデータ転送要求を実行する。
スケジューリング手段22によりスケジューリングされたバスマスタ(以下,スケジューリングされたバスマスタと記す)が,データ転送要求を実行している間に,このようなスケジューリングされないバスマスタがデータ転送要求を実行すると,バスアービタは,同時に複数のバスマスタからの使用要求を仲裁しなければならなくなる。その結果,スケジューリングされたバスマスタは,データ転送要求を効率的に実行できなくなる。
このような場合,バスアービタは,スケジューリングされたバスマスタからのバス使用要求の優先順位を動的に変更,すなわちスケジューリングされたバスマスタに優先的にバス使用権を与えることが好ましい。
以下に,図12〜図15を参照して,このようなバス使用要求の仲裁を実行するバスアービタについて説明する。
図12は,スケジューリングされたバスマスタに優先的にバス使用権を与えるバスアービタを有するバスを説明する機能ブロック図である。
図13は,図12に示したバスアービタを制御するバスアービタ制御手段41,バスアービタのドライバを有するアービタドライバ群42を説明する機能ブロック図である。
図14は,バスアービタ制御手段41,アービタドライバ群42の機能ブロック図である。
図15は,図12に示した何れかのバスアービタ,および,このバスアービタのバスアービタドライバ手段の機能ブロック図である。バスアービタ160は,図12に示した何れかのバスアービタ(DMACバスアービタ114’,バス1Aアービタ161a’ バス2Aアービタ162a’,バス1Bアービタ161b’,バス2Bアービタ162b’,外部バスアービタ163a’)に対応する。また,バスアービタドライバ手段420は,バスアービタ160の制御を行うドライバ手段であり,図14のアービタドライバ群42の各アービタドライバ手段(DMACアービタドライバ手段421,バス1Aアービタドライバ手段422,バス2Aアービタドライバ手段423,バス1Bアービタドライバ手段424,バス2Bアービタドライバ手段425,外部バスアービタドライバ手段426)に対応する。
まず,バスアービタがスケジューリングされたバスマスタに優先的にバス使用権を与える際に参照する情報である,バスマスタが所定期間においてバスを使用できるサイクル数を示す使用可能サイクル数を算出する処理について説明する。
図14の統計情報読み出し手段411は,アービタドライバ群42のアービタドライバ手段(DMACアービタドライバ手段421,バス1Aアービタドライバ手段422,バス2Aアービタドライバ手段423,バス1Bアービタドライバ手段424,バス2Bアービタドライバ手段425,外部バスアービタドライバ手段426)を介して,対応するバスアービタ(DMACバスアービタ114’,バス1Aアービタ161a’ バス2Aアービタ162a’,バス1Bアービタ161b’,バス2Bアービタ162b’,外部バスアービタ163a’)が記録する,バスマスタの統計情報を読み出す。この統計情報は,あるバスのバスマスタが,所定期間において,このバスを使用したバス使用済み時間を示す。例えば,図12の外部バスI/O163の場合,外部バスI/O163のバスマスタであるバス2A_162A,外部バスマスタ151が,所定期間において,外部バスI/O163を使用した使用サイクル数である。なお,外部バス166に接続するバスマスタは外部バスマスタ151だけなので,外部バスマスタ151が外部バスI/O163のバスマスタとなる。ここで,バス2A_162A,外部バスマスタ151のバス使用済み時間を,それぞれT1,T2とする。
使用割合算出手段412は,バスの各バスマスタのバス使用割合(以下,使用割合と略記する)を(式1)により算出する。
あるバスのバスマスタの使用割合=このバスマスタが過去に使用した使用割合×(α)+このバスマスタが将来に使用する使用割合×(1−α)……(式1)
以下,バスマスタが過去に使用した使用割合を過去の使用割合,バスマスタが将来に使用する使用割合をバスマスタのバス使用見込み割合と記す。なお,αは重み付け係数であり,0,0.25,0.5,0.75,1.00などの0以上1以下の数値である。この値が0.5よりも小さい場合,バスマスタの使用割合の算出において,バスマスタのバス使用見込み割合がより反映される。なお,αは任意に変更できる。
過去の使用割合は,あるバスの各バスマスタのバス使用済み時間をこのバスの全バスマスタの総バス使用済み時間で割ることにより得られる。前述の例では,バス2A_162A,外部バスマスタ151の使用割合は,それぞれT1/(T1+T2),T2/(T1+T2)である。
バス使用見込み割合は,あるバスの各バスマスタが将来的に実行するデータ転送量(図4のデータ転送サイズに相当)をこのバスの全バスマスタが将来的に実行する総データ転送量で割ることにより得られる。将来的に実行するデータ転送量は,以下のようにして得る。
まず,バスアービタ制御手段41は,所定のタイミングで,バス/転送制御手段225,要求管理手段223を介して要求格納部141にアクセスし,要求格納部141に格納されている実行待機中のデータ転送要求を検索する。そして,検索したデータ転送要求を実行する際に構成されるデータ転送経路の全バスとこのバスのバスマスタを特定する。このデータ転送要求を実行する際に構成されるバス経路をデータ転送経路と記す。
データ転送経路を構成するバスを特定するためには,バス間の接続情報,バスに接続するバスマスタの接続情報が必要であるが,これらの接続情報は,例えば,バス/転送制御手段225が管理,記録しているものとする。
例えば,実行待機中である第1のデータ転送要求が要求格納部141に格納されているとする。第1のデータ転送要求は,バスマスタとして機能するDMAC11の例えばDMACCh0_110が,例えばバス1A_162Aに接続するデバイス(図示しない)から外部スレーブデバイス152にデータ転送量D1のデータ転送を実行するとする。データ転送量D1は,図4に示したように,第1のデータ転送要求のデータ転送サイズに記録されている。
バスアービタ制御手段41は,第1のデータ転送要求の第1のデータ転送経路を構成する全バスとこのバスのバスマスタを特定する。第1のデータ転送経路を構成するバスは,DMACバス113,バス1A_161A,バス2A_162A,外部バスI/O163,外部バス166である。そして,各バスのバスマスタを特定する。前述の例では,DMACバス113のバスマスタはDMACch0_110,バス1A_161AのバスマスタはDMACバス113,バス2A_162Aのバスマスタはバス1A_161A,外部バスI/O163のバスマスタはバス2A_162Aと特定する。次いで,特定したバスマスタのデータ転送量をD1とする。
そして,特定したバスマスタ以外のバスマスタのデータ転送量を,データ転送量D1よりも小さいデータ転送量D2とする。データ転送量D2としては例えば0である。
そして,特定したバス毎に,このバス毎の各バスマスタのデータ転送量の総和を算出する。外部バスI/O163の場合,バスマスタはバス2A_162Aと外部バスマスタ151なので,この外部バスI/O163のデータ転送量の総和は(D1+D2)である。そして,バスマスタであるバス2A_162Aのデータ転送量D1を算出したデータ転送量の総和(D1+D2)で除算する。この除算値が,バス2A_162Aのバス使用見込み割合である。
同じく,バスマスタである外部バスマスタ151のデータ転送量D2を算出したデータ転送量の総和(D1+D2)で除算する。この除算値が外部バスマスタ151のバス使用見込み割合である。このバス使用見込みの算出処理を全バスの各バスマスタに対して実行する。
以上のようにして算出した過去の使用割合,バス使用見込み割合を(式1)に代入すれば,外部バスI/O163のバスマスタであるバス2A_162A,外部バスマスタ151の使用割合を算出することができる。
バス2A_162Aの使用割合は,((T1/(T1+T2))×α)+((D1/(D1+D2))×(1−α))である。以下,算出したバス2A_162Aの使用割合をR1とする。
外部バスマスタ151の使用割合は,((T2/(T1+T2))×α)+((D2/(D1+D2))×(1−α))である。以下,算出した外部バスマスタ151の使用割合をR2とする。
使用割合算出手段412は,以上説明した,バスマスタの使用割合の算出処理を全バスの各バスマスタについて実行し,算出結果を使用可能サイクル数算出手段413に出力する。なお,1つのデータ転送要求が要求格納部141に格納されている場合を例示したが,2つ以上でも同様である。
次に,使用可能サイクル数算出手段413は,使用割合算出手段412から入力された算出結果に基づき,全バスの各バスマスタの使用可能サイクル数を算出する。使用可能サイクル数の算出は,(式2)に基づき行われる。
あるバスマスタの使用可能サイクル数=スケジューリング期間サイクル数×このバスマスタの使用割合……(式2)
スケジューリング期間サイクル数は,前記した所定期間に対応するサイクル数であり,任意に変更可能である。バスマスタの使用割合は,(式1)により算出した値である。
外部バスI/O163のバスマスタであるバス2A_162Aの使用可能サイクル数は,スケジューリング期間サイクル数×バス2A_162Aの使用割合R1である。
外部バスI/O163のバスマスタである外部バスマスタ151の使用可能サイクル数は,スケジューリング期間サイクル数×外部バスマスタ151の使用割合R2である。
すなわち,使用可能サイクル数算出手段413は,実行待機中のデータ転送要求(受け付け中のデータ転送要求)を実行するバスマスタ,すなわちスケジューリングされたバスマスタの使用可能サイクル数(バス使用可能時間)をこのデータ転送要求のデータ転送量に基づき,実行待機中のデータ転送要求を実行しないバスマスタ,すなわちスケジューリングされないバスマスタの使用可能サイクル数よりも長く算出する。これは,スケジューリングされたバスマスタのバス使用見込み割合は,スケジューリングされないバスマスタのバス使用見込み割合よりも大きいからである。この場合,(式1)の重み付け係数αを0とすることが好ましい。
また,使用可能サイクル数算出手段413は,スケジューリングされたバスマスタの使用可能サイクル数をこのバスマスタのデータ転送量,および,バス使用済み時間に基づき算出することもできる。この場合,(式1)の重み付け係数αを0<α<1とする。この使用済み時間により,バスマスタの過去のバス使用状態を考慮して,使用可能サイクル数を算出できる。この場合,スケジューリングされないバスマスタの使用可能サイクル数は,バス使用済み時間に基づき算出される。そのため,スケジューリングされないバスマスタでも,データ転送要求を実行できる。
使用可能サイクル数算出手段413は,以上説明した,バスマスタの使用可能サイクル数の算出処理を,全バスの各バスマスタについて実行し,算出結果を割り当て情報設定手段415に出力する。なお,割り当て情報設定手段415が実行する処理については,後述する。
次に,バスマスタの優先度を算出する処理について説明する。バスマスタの優先度は,前述したように数値が高いほど優先度が高く例えば優先度1〜5で示されるものとする。まず,前述したように,まず,バスアービタ制御手段41は,バス/転送制御手段225,要求管理手段223を介して要求格納部141にアクセスし,要求格納部141に格納されている実行待機中のデータ転送要求の検索し,検索したデータ転送要求の優先度を特定する。
そして,優先度が最も高いデータ転送要求のデータ転送経路を構成するバスのバスマスタの優先度を最高優先度,例えば優先度5と算出し,それ以外のバスマスタは最高優先度よりも低い優先度,例えば優先度4と算出する。
例えば,前記した第1のデータ転送要求の優先度が最も高い場合,第1のデータ転送要求のデータ転送経路を構成するバスのバスマスタである,DMACch0_110,DMACバス113,バス1A_161A,バス2A_162Aの優先度を優先度5と算出する。外部バスI/O163の場合,バス2A_162Aは優先度5,外部バスマスタ151は優先度4と算出される。
他にも,データ転送要求の優先度だけでなく,データ転送要求のデータ転送量に基づきバスマスタの優先度を算出してもよい。例えば,優先度が最も高いデータ転送要求が複数ある場合,優先度が最も高いデータ転送要求の中で,データ転送量が最も多いデータ転送要求のデータ転送経路を構成するバスのバスマスタの優先度を最高優先度にする。そして,次にデータ転送量が多いデータ転送要求のデータ転送経路を構成するバスのバスマスタの優先度を最高優先度よりも低い優先度にする。そして,それ以外のバスマスタの優先度をこの低い優先度よりも低くする。
他にも,優先度が最も高いデータ転送要求のデータ転送経路を構成するバスのバスマスタの優先度を最高優先度とする。そして,直前に終了したデータ転送要求のデータ転送経路を構成するバスのバスマスタの優先度を最高優先度よりも低い優先度にする。そして,それ以外のバスマスタの優先度をこの低い優先度よりも低くする。
なお,前述の例では,優先度算出手段414は,バスマスタの優先度を5段階のレベルで算出したが,バスアービタにおいては,仕様上,3段階の優先度しかバスマスタに設定できないことがある。このような場合には,優先度算出手段414は,算出した優先度の値域を圧縮してバスアービタの仕様に対応させる。例えば,優先度算出手段414が,優先度5を算出した場合,バスアービタの仕様に対応させるため,優先度3に値域を圧縮する。バスアービタの仕様が10段階の場合には,算出した優先度の値域を拡張してバスアービタの仕様に対応させる。
また,優先度算出手段414が,例えば同じ優先度のデータ転送要求を複数検索した場合,あるバスの異なるバスマスタに対して同じ優先度が算出されることがある。そして,このバスのバスアービタが,同じ優先度をバスマスタに設定できない仕様の場合がある。このような場合,優先度算出手段414は,各バスマスタの優先度を順次変更して,同じ優先度にならないように優先度を変更する。
優先度算出手段414は,以上説明した,バスマスタの優先度の算出処理を,全バスの各バスマスタについて実行し,算出結果を割り当て情報設定手段415に出力する。
割り当て情報設定手段415は,使用可能サイクル数算出手段413から入力された各バスに対応する各バスマスタの使用可能サイクル数と,優先度算出手段414から入力された各バスに対応する各バスマスタの優先度を,各バスに対応するバスアービタドライバを介して,バスアービタ160の割り当てレジスタ1604(図15参照)に設定する。
前述の例では,図14の割り当て情報設定手段415に使用可能サイクル数算出手段413から外部バスI/O163のバスマスタであるバス2A_162Aの使用可能サイクル数と同外部バスマスタ151の使用可能サイクル数とが入力される。また,割り当て情報設定手段415に優先度算出手段414から外部バスI/O163のバスマスタであるバス2A_162Aの優先度と同外部バスマスタ151の優先度が入力される。
すると,割り当て情報設定手段415は,外部バスI/O163の外部バスアービタ163a’を制御する外部バスアービタドライバ手段426のレジスタ設定部(図14参照)を介して,外部バスアービタ163a’の割り当てレジスタ1604(図15参照)に設定する。割り当てレジスタ1604は,設定されたバス2A_162Aの使用可能サイクル数と優先度とをバス2A_162Aに対応して割り当てられているバスマスタメモリ1601のバスマスタ情報16011の使用可能サイクル数1601b,優先度1601aに格納する。同じく,割り当てレジスタ1604は,設定された外部バスマスタ151の使用可能サイクル数と優先度とを外部バスマスタ151に対応して割り当てられているバスマスタメモリ1601のバスマスタ情報16012の使用可能サイクル数1601b,優先度1601aに格納する。
割り当て情報設定手段415は,この設定処理を全バスアービタに対して実行する。なお,バスマスタメモリ1601などの詳細については,図15で説明する。
次に,設定された使用可能サイクル数,優先度を参照し,バスマスタの優先順位を動的に変更する処理について図14,図15を参照して説明する。
図15のバスアービタ160は,バスマスタからのバス使用要求をバスマスタ毎に設定されている優先度に従って仲裁する。このとき,後述するように,バスアービタ160の使用サイクル数カウンタ1602は,バスマスタのバス使用済み時間(使用済みサイクル数)をカウントする。
ここで,所定期間(スケジューリング期間サイクル数)において,第1のバスマスタの使用済みサイクル数が,第1のバスマスタに対応して格納されている使用可能サイクル数を超過し,さらに,第1のバスマスタと第2のバスマスタとからバス使用要求があり,これらのバス使用要求が競合した場合,使用可能サイクル数を超過した第1のバスマスタにはバス使用権を渡さずに,使用可能サイクル数を超過していない第2のバスマスタに優先的にバス使用権を与える処理を実行する。
ここで,第1のバスマスタをスケジューリングされないバスマスタ,第2のバスマスタをスケジューリングされたバスマスタとする。通常,第1のバスマスタの使用可能サイクル数は,第2のバスマスタの使用可能サイクル数に比べて小さくなる。これは,前述したように,第1のバスマスタのバス使用見込み割合は0であり,そのため,(式1)から明らかなように,(式1)の重み付け係数αを小さくした場合(例えば0),第1のバスマスタの使用割合が小さくなる。その結果,(式2)から明らかなように,第1のバスマスタの使用可能サイクル数が小さくなるからである。
すなわち,所定期間において,第2のバスマスタは,第1のバスマスタに比べてバス使用可能時間がより長いので,優先的にバス使用権が与えられ,バスを優先的に使用できるようになる。その結果,第2のバスマスタは,データ転送要求を効率的に実行できる。
バスアービタ160のバスマスタメモリ1601は,バスマスタのバスマスタ情報を格納するメモリである。バスマスタメモリ1601は,バスマスタ毎のバスマスタ情報を格納する領域であるバスマスタ情報16011…1601nを有し,これらにバスマスタ情報である優先度1601a,使用可能サイクル数1601b,使用可能サイクル数超過フラグ1601c,使用済みサイクル数1601dが格納される。バスアービタ160が外部バスアービタ163a’の場合,バスマスタ情報16011が,バスマスタであるバス2A_162Aに対応して設けられているバスマスタ情報格納領域であり,バスマスタ情報16012が,バスマスタである外部バスマスタ151に対応して設けられているバスマスタ情報格納領域となる。
使用サイクル数カウンタ1602は,バスアービタ160からバス使用権を獲得したバスマスタが,バスを使用してデータ転送を実行するサイクル数をカウントするカウンタであり,カウント結果をこのバスマスタに対応して設けられているバスマスタメモリ1601の使用済みサイクル数1601dに格納する。
統計情報レジスタ1603は,バスマスタ毎の使用済みサイクル数を,バスマスタ毎に対応して設けられているバスマスタメモリ1601のバスマスタ情報16011〜1601nの使用済みサイクル数1601dから読み出し,格納するレジスタである。統計情報レジスタ1603に格納されたバスマスタ毎の使用済みサイクル数が,バスアービタドライバ手段420の統計情報レジスタ読み出し手段4202を介してバスアービタ制御手段41の統計情報読み出し手段411により読み出される。
割り当てレジスタ1604は,バスアービタドライバ手段420のレジスタ設定手段4201を介してバスアービタ制御手段41の割り当て情報設定手段415から設定されたバスマスタ毎の優先度,使用可能サイクル数を,バスマスタ毎に対応して設けられているバスマスタメモリ1601のバスマスタ情報16011〜1601nの優先度1601a,使用可能サイクル数1601bに格納する。なお,具体例については前述したので省略する。
スケジューリングサイクル数カウンタ1605は,前記したスケジューリング期間サイクル数に対応する所定期間が経過したか否かを検知するため設けられたカウンタであり,スケジューリング用メモリ1606のスケジューリング期間サイクル数1606aに記録されたスケジューリング期間サイクル数が経過するとカウンタを0にリセットし,サイクル数のカウントを開始する。そして,カウント結果をスケジューリング用メモリ1606のスケジューリングサイクル数1606bに格納する。
ここで,バスアービタ160は,前記した所定期間が経過すると,バスマスタ毎に対応して格納されている使用可能サイクル数超過フラグ1601cを全てオフにする(リセット)。このとき,既に,割り当てレジスタ1604に設定された値が各バスマスタに対応してバスマスタメモリ1601に格納されている。
そして,第1のバスマスタが,バスの使用権をバスアービタ160に要求すると,バスアービタ160はこの要求を受け付け,第1のバスマスタに使用権を渡し,データ転送を実行させる。このデータ転送要求の実行中,使用サイクル数カウンタ1602は,第1のバスマスタの使用済みサイクル数をカウントし第1のバスマスタ用の使用済みサイクル数1601dに格納する。そして,このデータ転送を実行中に,第2のバスマスタが,バスの使用権をバスアービタ160に要求すると,バスアービタ160はこの要求を受け付け,第1,第2のバスマスタに対応して格納されている優先度1601aに従ってバス使用要求を仲裁する。同じく,使用サイクル数カウンタ1602は,第2のバスマスタの使用済みサイクル数をカウントし第2のバスマスタ用の使用済みサイクル数1601dに格納する。
バスアービタ160は,第1のバスマスタの使用済みサイクル数が第1のバスマスタの使用可能サイクル数1601bを超過すると,同使用可能サイクル数超過フラグ1601cをオンに設定する。
そして,所定期間内において,使用可能サイクル数超過フラグがオンに設定されている第1のバスマスタ,同フラグがオフに設定されている第2のバスマスタからバスの使用要求が再度あると,バスアービタ160は,第1のバスマスタにはバス使用権を渡さずに,第2のバスマスタにバス使用権を渡す制御を実行する。その結果,バス使用権を獲得した第2のバスマスタは,優先的にバスを使用することができる。
以後,バスアービタ160は,前記した所定期間が経過すると,バスマスタ毎に対応して記録されている使用可能サイクル数超過フラグ1601cを全てオフにする。
ここで,前述のように,第1のバスマスタをスケジューリングされないバスマスタ,第2のバスマスタをスケジューリングされたバスマスタとする。第1のバスマスタと第2のバスマスタからバス使用要求がある場合,第1のバスマスタの使用可能サイクル数超過フラグは,第2のバスマスタの使用可能サイクル数超過フラグがオンに設定されるよりも先にオンに設定される。これは,前述したように,第1のバスマスタの使用可能サイクル数(使用可能時間)は,第2のバスマスタの使用可能サイクル数に比べて少ないからである。第1のバスマスタの使用可能サイクル数超過フラグが先にオンに設定されると,以後,第2のバスマスタは,バスを優先的に使用できるようになり,効率的にデータ転送を実行できる。
以上説明したように,第3の実施の形態によれば,スケジューリングされた第2のバスマスタによるデータ転送が,スケジューリングされていない第1のバスマスタが実行するデータ転送によって妨害されることがなくなり,第2のバスマスタは,効率的にデータ転送を実行できる。
(第4の実施の形態)
CPU12は,PIO転送を実行する機能を有する。PIO転送機能により,CPU12は,独自にデータ転送を実行することができる。CPU12において実行されるタスクは,PIO転送機能を利用してデータ転送を実行することがある。
このような場合,スケジューリング手段22によりスケジューリングされずに,CPU12がPIO転送を実行すると,スケジューリングされたバスマスタが実行するデータ転送要求の効率が低下する。従って,CPU12が実行するPIO転送をスケジューリング手段22によりスケジューリングする必要がある。
図16は,第4の実施の形態のソフトウェアの機能ブロック図である。
タスク51は,PIO転送をCPU12に実行させる処理単位(プログラム)を含むタスクであり,前述したようにCPU12により実行されている。
PIO転送開始要求API呼び出し手段511は,スケジューリング手段22にPIO転送の開始要求を実行するAPIを呼び出す。このAPIの呼び出しにより,PIO転送用のデータ転送要求がタスク51により生成され,スケジューリング手段22に入力される。このデータ転送要求のデータ転送要求の種類には,CPUのPIO転送が記録される(図4参照)。以下,このデータ転送要求をPIOデータ転送要求と記す。
PIO転送命令手段512は,CPU12にPIOデータ転送要求の実行命令を行い,CPU12にこのPIOデータ転送要求に対応するPIO転送を実行させる。PIO転送完了通知API呼び出し手段513は,PIOデータ転送が完了すると,その旨をスケジューリング手段22に通知するPIO転送完了通知APIを呼び出す。タスク51は,PIO転送開始要求API呼び出し手段511,PIO転送命令手段512,PIO転送完了通知API呼び出し手段513をこの順で実行する。そのため,PIO転送開始要求API呼び出し手段511の実行により,PIOデータ転送要求に対応するPIO転送がCPU12により実行されることになる。
そこで,スケジューリング手段22は,要求発生受け付け手段221がPIOデータ転送要求を受け付けると,CPU12にこのPIOデータ転送要求に対応するPIO転送の実行を開始させない。そして,受け付けたデータ転送要求の中で,PIOデータ転送要求の優先度が最も高くなると,CPU12にこのPIO転送の実行を開始させる。このようにすることで,スケジューリング手段22は,CPU12によるPIO転送をスケジューリングすることができる。
なお,PIO転送開始要求API呼び出し手段511を実行する前には,タスク51は何らかの処理を実行し,PIO転送完了通知API呼び出し手段513を実行した後には,タスク51は次の処理を実行する場合がある。
CPUコア制御手段52は,要求発生受け付け手段221またはバス/転送制御手段225からの命令に応じて,CPU12のコアをOS23を介して制御する。タスク一時停止命令手段521は,OS23を介してCPU12にタスク51の実行を一時停止する命令を実行する。この一時停止命令により,CPU12はタスク51の実行を一時停止する。その結果,PIO転送命令手段512によるPIO転送の実行命令がCPU12に対して行わなくなり,CPU12は,PIO転送の実行を開始しない。タスク再開命令手段522は,OS23を介してCPU12に一時停止していたタスクの実行を再開する命令を実行する。この再開命令により,CPU12は一時停止していたタスクの実行を再開する。その結果,PIO転送命令手段512によるPIO転送の実行命令が行われ,CPU12は,PIO転送の実行を開始する。
図17A〜図17Cは,PIOデータ転送要求の実行開始を説明するフロー図である。
ステップS101: PIO転送開始要求API呼び出し手段511は,PIO転送開始要求APIを呼び出す。このとき,PIO転送開始要求APIに引数として,タスク51が生成したPIOデータ転送要求を設定する。このPIOデータ転送要求のデータ転送要求の種類には「CPUによるPIO転送」(図4参照)が記録される。
ステップS102:スケジューリング手段22の要求発生受け付け手段221は,PIOデータ転送要求を受け付け,データ転送要求の種類に「CPUによるPIO転送」が記録されていることを確認し,PIOデータ転送要求用の識別子を,このPIOデータ転送要求に割り当てる。この識別子は,スケジューリング手段22がPIOデータ転送要求を管理するために利用される。また,この識別子は,タスク51により呼び出されたデータ転送要求APIの戻り値として,タスク51に入力される。
ステップS103:要求発生受け付け手段221は,ステップS102の確認により,CPUコア制御手段52にCPU12が実行中のタスク51を一時停止するように命令する。
ステップS104:CPUコア制御手段52のタスク一時停止命令手段521は,OS23を介して実行中のタスクの一時停止を命令するようにCPU12に命令する。CPU12は,実行中のタスクを一時停止する。その結果,PIO転送は実行されない。
ステップS105:要求発生受け付け手段221は,受け付けたPIOデータ転送要求を要求格納部141に格納するように要求管理手段223に命令する。同時に,要求発生受け付け手段221は,このデータ転送要求,識別子を優先度付きスケジューラ224に出力する。
ステップS106〜S112の処理は,ステップS4〜S10の処理と同様なので,その説明を省略する。
ステップS113:バス/転送制御手段225は,最も優先度が高いデータ転送要求,すなわちPIOデータ転送要求に基づいて,PIOデータ転送要求を実行するようにCPUコア制御手段52に命令する。ステップS11で説明したように,ステップS112において,優先度付きスケジューラ224から最も優先度が高いデータ転送要求の識別子,すなわちPIOデータ転送要求用の識別子がバス/転送制御手段225に入力される。バス/転送制御手段225は,このPIOデータ転送要求用の識別子により,実行対象となるデータ転送要求がPIOデータ転送であることを判別し,CPUコア制御手段52に前記した命令を実行する。このとき,DMAC11により実行中のデータ転送要求が実行されている場合には,このデータ転送要求を一時停止するように,バスマスタドライバ制御手段226に命令する。このデータ転送の一時停止命令については,図5CのステップS12で説明したので省略する。
ステップS114:CPUコア制御手段52のタスク再開命令手段522は,バス/転送制御手段225からのPIOデータ転送要求の実行命令に応答し,OS23を介して一時停止していたタスクの再開をCPU12に命令する。
ステップS115:CPU12は,タスク再開の命令に応答し,タスク51を再開し,再開されたタスク51は,PIO転送命令手段512を実行する。すなわち,CPU12は,ステップS101で生成したPIOデータ転送要求に基づき,PIO転送を実行する。
図18A,図18Bは,PIOデータ転送要求が完了した場合の処理を説明するフロー図である。
ステップS121:CPU12が,図17CのステップS115で説明したPIOデータ転送要求を完了すると,タスク51は,PIO転送完了通知API呼び出し手段513を実行し,PIOデータ転送要求が完了したことを,ステップS102において入力されたPIOデータ転送要求用の識別子と共にスケジューリング手段22の要求完了通知受け付け手段222に通知する。
ステップS122〜S127の処理は,図6A,図6Bで説明したステップS22〜S27の処理と同様なので,その説明を省略する。
ステップS128:優先度付きスケジューラ224は,最も優先度が高いデータ転送要求の識別子をバス/転送制御手段225に出力する。
ステップS129:バス/転送制御手段225は,最も優先度が高いデータ転送要求に基づいて,データ転送要求を実行するようにCPUコア制御手段52またはバスマスタドライバ制御手段226に命令する。ここでは,優先度付きスケジューラ224から入力された識別子が,PIOデータ転送要求用の識別子の場合,前記の命令をCPUコア制御手段52に行う。また,入力された識別子が,それ以外の場合,前記の命令をバスマスタドライバ制御手段226に行う。CPUコア制御手段52が前記命令を受けた場合,ステップS130に進む。バスマスタドライバ制御手段226が前記命令を受けた場合,ステップS131に進む。
ステップS130の処理については,図17CのステップS114の処理と同様なので説明を省略する。なお,ステップS130の処理は,例えばタスク51以外のタスクからPIOデータ転送要求をスケジューリング手段22が受け付けていた場合に実行される。また,ステップS131の処理については,ステップS6BのステップS30 の処理と同様なので説明を省略する。
第4の実施の形態によれば,CPUが実行するPIOデータ転送をスケジューリング手段22によりスケジューリングすることができる。その結果,スケジューリングされたバスマスタが実行するデータ転送要求の効率が低下することがない。
説明した各実施の形態において,CPU12は,複数のタスクを実行してもよい。また,複数のDMACなどのバスマスタデバイスを設けてもよい。この場合,このバスマスタデバイスを制御するバスマスタドライバ手段も設ける。
また,説明した各実施の形態を組み合わせてもよい。例えば,第2の実施の形態と,第3の実施の形態を組み合わせてもよい。また,第2の実施の形態と,第4の実施の形態を組み合わせてもよい。
以上の実施の形態をまとめると,次の付記のとおりである。
(付記1)
バスと,
前記バスに接続されたCPUと,
前記バスに接続され,前記バスを介したデータ転送を実行する複数のバスマスタと,
前記バスマスタからのバス使用要求を仲裁して何れかのバスマスタにバス使用権を与えるバスアービタと,
前記複数のバスマスタを制御するバスマスタドライバ手段と,
前記CPUによって実行されるタスクが生成したデータ転送要求を受け付け,前記受け付けた前記データ転送要求の中で,最も優先度が高いデータ転送要求を選択し,当該選択したデータ転送要求の実行を前記バスマスタドライバ手段に命令するスケジューリング手段とを有し,
前記バスマスタドライバ手段は,前記命令に応答して,前記選択したデータ転送要求に対応するバスマスタに前記選択したデータ転送要求を実行させるデータ転送システム。
(付記2)
付記1において,
前記スケジューリング手段は,前記選択したデータ転送要求が前記バスマスタにより実行されている間に,前記タスクにより新たに生成されたデータ転送要求を受け付けると,前記受け付けたデータ転送要求の優先度が,前記実行されているデータ転送要求の優先度よりも高い場合に,当該実行されているデータ転送要求の一時停止を前記バスマスタドライバ手段に命令すると共に,前記新たに生成されたデータ転送要求の実行を前記バスマスタドライバ手段に命令し,
前記バスマスタドライバ手段は,前記実行されているデータ転送要求を一時停止すると共に,前記新たに生成されたデータ転送要求の実行命令に応答して,前記実行されているデータ転送要求の一時停止を前記バスマスタに実行させ,前記新たに生成されたデータ転送要求に対応するバスマスタに当該データ転送要求を実行させるデータ転送システム。
(付記3)
付記2において,
前記スケジューリング手段は,前記新たに生成されたデータ転送要求の実行が完了したこと示す完了通知を受け付けると,前記完了通知に応答して,前記一時停止していたデータ転送要求の再開を前記バスマスタドライバ手段に命令し,
前記バスマスタドライバ手段は,前記バスマスタに前記一時停止しているデータ転送要求を再開させるデータ転送システム。
(付記4)
付記1から3の何れかにおいて,
前記スケジューリング手段は,前記タスクから前記データ転送要求の一時停止命令を受け付けると,前記一時停止命令に応答し,前記データ転送要求のスケジューリングを一時停止し,前記タスクから前記一時停止していたデータ転送要求の再開命令を受け付けると,前記再開命令に応答し,前記一時停止していたデータ転送要求のスケジューリングを再開するデータ転送システム。
(付記5)
付記1から4の何れかにおいて,
前記スケジューリング手段は,前記タスクから前記データ転送要求の強制終了命令を受け付けると,前記強制終了命令に応答し,前記データ転送要求のスケジューリングを終了するデータ転送システム。
(付記6)
付記1から5の何れかにおいて,
前記バスアービタは,前記複数のバスマスタからのバス使用要求に対して,前記複数のバスマスタに設定された優先度に従って,時分割で前記バスのバス使用権の割り当てを行うデータ転送システム。
(付記7)
付記1から6の何れかにおいて,
前記バスは,複数のバスが多段に接続されたバス構造を有するデータ転送システム。
(付記8)
付記1から7の何れかにおいて,
さらに,前記バスを介したデータ転送を実行し,前記バスに直接接続,または,他のバスなどを介して接続される外部バスマスタと,
前記外部バスマスタを制御する外部バスマスタドライバ手段とを有し,
前記スケジューリング手段は,前記選択したデータ転送要求が,前記外部バスマスタにデータ転送要求を実行させる場合,当該データ転送要求の実行を前記外部バスマスタドライバ手段に命令し,
前記外部バスマスタドライバ手段は,前記命令に応答して,前記外部バスマスタに前記選択したデータ転送要求を実行させるデータ転送システム。
(付記9)
付記1から7の何れかにおいて,
前記複数のバスマスタの何れかは,前記タスクが生成したデータ転送要求を,前記スケジューリング手段を介さずに実行し,
前記スケジューリング手段は,受け付け中のデータ転送要求を実行するバスマスタのバス使用可能時間を当該データ転送要求のデータ転送量に基づき,当該データ転送要求を実行しないバスマスタのバス使用可能時間よりも長く算出し,
前記バスアービタは,前記バス使用可能時間がより長いバスマスタに優先的にバス使用権を与えるデータ転送システム。
(付記10)
付記9において,
前記バスアービタは,前記複数のバスマスタのバス使用済み時間をカウントし,
前記スケジューリング手段は,前記バスマスタのバス使用可能時間を,さらに,当該バスマスタのバス使用済み時間に基づき算出するデータ転送システム。
(付記11)
付記1から7の何れかにおいて,
前記CPUは,PIO(Programmed I/O)転送を実行し,
前記タスクは,前記CPUにPIO転送を実行させるPIOデータ転送要求を生成し,前記PIOデータ転送要求に対応するPIO転送を前記CPUに実行させ,
前記スケジューリング手段は,前記PIOデータ転送要求を受け付けると,前記CPUに前記PIO転送の実行を開始させず,前記受け付けた前記データ転送要求の中で,前記PIOデータ転送要求の優先度が最も高くなると,前記CPUに前記PIO転送の実行を開始させるデータ転送システム。
(付記12)
バスと,前記バスに接続されたCPUと,前記バスに接続され,前記バスを介したデータ転送を実行する複数のバスマスタと,前記複数のバスマスタを制御するバスマスタドライバ手段とを有するデータ転送システムにおいて前記CPUが実行するデータ転送スケジューリングプログラムであって,
前記CPUによって実行されるタスクが生成したデータ転送要求を受け付ける工程と,
前記受け付けた前記データ転送要求の中で,最も優先度が高いデータ転送要求を選択し,当該選択したデータ転送要求の実行を前記バスマスタドライバ手段に命令して,前記バスマスタドライバ手段により,前記選択したデータ転送要求に対応するバスマスタに前記選択したデータ転送要求を実行させる工程とを,前記CPUに実行させるデータ転送スケジューリングプログラム。
(付記13)
付記12において,
さらに,前記選択したデータ転送要求が前記バスマスタにより実行されている間に,前記タスクにより新たに生成されたデータ転送要求を受け付けると,前記受け付けたデータ転送要求の優先度が,前記実行されているデータ転送要求の優先度よりも高い場合に,当該実行されているデータ転送要求を一時停止すると共に,前記新たに生成されたデータ転送要求の実行を前記バスマスタドライバ手段に命令して,前記バスマスタドライバ手段により,前記実行されているデータ転送要求の一時停止を前記バスマスタに実行させ,前記新たに生成されたデータ転送要求に対応するバスマスタに当該データ転送要求を実行させる工程を前記CPUに実行させるデータ転送スケジューリングプログラム。