(57)【特許請求の範囲】
【請求項１】
バスと，
前記バスに接続されたCPUと，
前記バスに接続され，前記バスを介したデータ転送を実行する複数のバスマスタと，
前記バスマスタからのバス使用要求を仲裁して何れかのバスマスタにバス使用権を与えるバスアービタと，
前記複数のバスマスタを制御するバスマスタドライバ手段と，
前記CPUによって実行されるタスクが生成したデータ転送要求を受け付け，前記受け付けた前記データ転送要求の中で，最も優先度が高いデータ転送要求を選択し，当該選択したデータ転送要求の実行を前記バスマスタドライバ手段に命令するスケジューリング手段とを有し，
前記バスマスタドライバ手段は，前記命令に応答して，前記選択したデータ転送要求に対応するバスマスタに前記選択したデータ転送要求を実行させ，
前記複数のバスマスタの何れかは，前記タスクが生成したデータ転送要求を，前記スケジューリング手段を介さずに実行し，
前記スケジューリング手段は，受け付け中のデータ転送要求を実行するバスマスタのバス使用可能時間を当該データ転送要求のデータ転送量に基づき，当該データ転送要求を実行しないバスマスタのバス使用可能時間よりも長く算出し，
前記バスアービタは，前記バス使用可能時間がより長いバスマスタに優先的にバス使用権を与えるデータ転送システム。
【請求項２】
請求項１において，
前記スケジューリング手段は，前記選択したデータ転送要求が前記バスマスタにより実行されている間に，前記タスクにより新たに生成されたデータ転送要求を受け付けると，前記受け付けたデータ転送要求の優先度が，前記実行されているデータ転送要求の優先度よりも高い場合に，当該実行されているデータ転送要求の一時停止を前記バスマスタドライバ手段に命令すると共に，前記新たに生成されたデータ転送要求の実行を前記バスマスタドライバ手段に命令し，
前記バスマスタドライバ手段は，前記実行されているデータ転送要求を一時停止すると共に，前記新たに生成されたデータ転送要求の実行命令に応答して，前記実行されているデータ転送要求の一時停止を前記バスマスタに実行させ，前記新たに生成されたデータ転送要求に対応するバスマスタに当該データ転送要求を実行させるデータ転送システム。
【請求項３】
請求項１において，
前記スケジューリング手段は，前記新たに生成されたデータ転送要求の実行が完了したことを示す完了通知を受け付けると，前記完了通知に応答して，前記一時停止していたデータ転送要求の再開を前記バスマスタドライバ手段に命令し，
前記バスマスタドライバ手段は，前記バスマスタに前記一時停止しているデータ転送要求を再開させるデータ転送システム。
【請求項４】
請求項１において，
前記バスアービタは，前記複数のバスマスタからのバス使用要求に対して，前記複数のバスマスタに設定された優先度に従って，時分割で前記バスのバス使用権の割り当てを行うデータ転送システム。
【請求項５】
請求項１において，
前記バスは，複数のバスが多段に接続されたバス構造を有するデータ転送システム。
【請求項６】
請求項１において，
前記バスアービタは，前記複数のバスマスタのバス使用済み時間をカウントし，
前記スケジューリング手段は，前記バスマスタのバス使用可能時間を，さらに，当該バスマスタのバス使用済み時間に基づき算出するデータ転送システム。
【請求項７】
バスと，前記バスに接続されたCPUと，前記バスに接続され，前記バスを介したデータ転送を実行する複数のバスマスタと，前記バスマスタからのバス使用要求を仲裁して何れかのバスマスタにバス使用権を与えるバスアービタと，前記複数のバスマスタを制御するバスマスタドライバ手段とを有し，前記複数のバスマスタの何れかは，前記タスクが生成したデータ転送要求を，前記スケジューリング手段を介さずに実行するデータ転送システムにおいて前記CPUが実行するデータ転送スケジューリングプログラムであって，
前記CPUによって実行されるタスクが生成したデータ転送要求を受け付ける工程と， 
前記受け付けた前記データ転送要求の中で，最も優先度が高いデータ転送要求を選択し，当該選択したデータ転送要求の実行を前記バスマスタドライバ手段に命令して，前記バスマスタドライバ手段により，前記選択したデータ転送要求に対応するバスマスタに前記選択したデータ転送要求を実行させる工程と，
前記スケジューリング手段により，受け付け中のデータ転送要求を実行するバスマスタのバス使用可能時間を当該データ転送要求のデータ転送量に基づき，当該データ転送要求を実行しないバスマスタのバス使用可能時間よりも長く算出させる工程と，
前記バスアービタにより，前記バス使用可能時間がより長いバスマスタに優先的にバス使用権を与えさせる工程とを，
前記CPUに実行させるデータ転送スケジューリングプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は，データ転送システム，このシステムで実行されるデータ転送スケジューリングプログラムに関する。
【背景技術】
【０００２】
バスアービタを有するバスと，バスに接続する複数のバスマスタとCPU（Central Processing Unit）とを有するデータ転送システムにおいて，所定の機能を実現するタスクは，CPUにより実行される。タスクは，プログラムの処理の実行単位であり，プロセス，スレッドとも呼ばれる。タスクは，タスク内のデータ転送要求をこのデータ転送要求に対応するバスマスタに実行させる。タスクが，データ転送要求をバスマスタに行う場合，データ転送用のAPI（Application Program Interface）を呼び出し，実行する。このとき，タスクは，データ転送要求APIに引数として，データの転送元アドレス，転送先アドレスなどを設定する。
【０００３】
このタスクは，各バスマスタに対して順次または同時にデータ転送要求を実行することができる。このデータ転送要求を受けた各バスマスタは，それが接続されるバスのアービタに対してバスの使用要求を行う。このバスのバスアービタは，複数のバスマスタから同時にバスの使用要求を受け付けると，このバスの使用要求を仲裁する。
【０００４】
仲裁方法としては，例えば，所定のサイクル時間が経過する度に，バスマスタ毎に定められた優先度（優先順位とも言う）に従って，バスの使用権を各バスマスタに渡す方法がある。バスアービタからバスの使用権を受け取った第1のバスマスタは，所定のサイクル時間の間，バスを使用してデータ転送を実行する。そして，このサイクル時間が経過すると，バスアービタは，この使用権を優先度が低い第2のバスマスタに渡す。この使用権を失った第1のバスマスタは，データ転送を一時停止する。そして，第1のバスマスタが，バスアービタから再度バスの使用権を受け取ると，データ転送を再開する。第1，第2のバスマスタは，データ転送が完了するまで，この処理を繰り返す。
【０００５】
例えば，5つのバスマスタBM１〜BM5がバスに接続され，バスマスタBM１〜BM5に優先度として，それぞれ優先度1〜5（優先度の数字が大きいほど優先度が高い）がバスアービタにより設定されているとする。
【０００６】
バスマスタBM1〜BM5が，バスに対して同時にバスの使用を要求すると，バスアービタは，例えば数十サイクルから数千サイクル程度のサイクル時間が経過する度に，バスの使用権を優先度に従ってバスマスタBM5…BM1，BM5…BM1，…のように，バスマスタBM5〜BM1に順次渡す処理を繰り返す。すなわち，バスアービタは，時分割でバス使用権の割り当てを行う。バスアービタからバスの使用権を受け取ったバスマスタは，前記サイクル時間の間，データ転送を実行する。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開平１０−４０２１１号公報
【特許文献２】特開２００７−１０９０８６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
このように，バスアービタがバス使用要求の仲裁を行うと，複数のバスマスタの中のあるバスマスタは前記した所定サイクル時間しかバスを継続使用（占有使用）することができない。そのため，所定時間内に終了しなければならないデータ転送，すなわち時間的要求が厳しいデータ転送を所定時間内に完了することが困難になることがある。
【０００９】
また，例えばバスB1，バスB2にバスB3が接続し，バスB3にバスB4が接続している多段構成のバスを有するデータ転送システムにおいて，バスB1に複数チャネルの第1のDMAC（Direct Memory Access Controller）が接続され，同じくバスB2に第2のDMACが接続され，第1のDMACの複数チャネルと第2のDMACの複数チャネルとが同時に，バスB4に接続されているメモリにアクセスしてデータ転送を行う場合を想定する。なお，この場合，バスB3に対してバスB1またはバスB2がバスマスタとして機能することになる。
【００１０】
このとき，バスB１のアービタは，第1のDMACからのバス使用要求を仲裁し，バスB2のアービタは，第2のDMACからのバス使用要求を仲裁し，さらに，バスB3のアービタは，バスB1，B2からのバス使用要求を仲裁する。このようバスアービタは，ばらばらにバスの使用要求を仲裁する。
【００１１】
そのため，例えば第1のDMACが，データ転送を実行する場合，バスB1，B3，B4のバス使用権を同時に獲得しなければならず，一揆通貫でバス使用権を獲得できる確率が，1段のバス構成に比べて低くなる。
【００１２】
従って，第1のDMACが，時間的要求が厳しいデータ転送を実行しなければならない場合，効率的にデータ転送を実行して，時間的要求を満たすデータ転送要求を確実に実行することがより困難になる。
【００１３】
そこで，本発明の目的は，効率的にデータ転送を実行するデータ転送システム，データ転送スケジューリングプログラムを提供することにある。
【課題を解決するための手段】
【００１４】
データ転送システムの第１の側面は、バスと，前記バスに接続されたCPUと，前記バスに接続され，前記バスを介したデータ転送を実行する複数のバスマスタと，前記バスマスタからのバス使用要求を仲裁して何れかのバスマスタにバス使用権を与えるバスアービタと，前記複数のバスマスタを制御するバスマスタドライバ手段と，前記CPUによって実行されるタスクが生成したデータ転送要求を受け付け，前記受け付けた前記データ転送要求の中で，最も優先度が高いデータ転送要求を選択し，当該選択したデータ転送要求の実行を前記バスマスタドライバ手段に命令するスケジューリング手段とを有し，前記バスマスタドライバ手段は，前記命令に応答して，前記選択したデータ転送要求に対応するバスマスタに前記選択したデータ転送要求を実行させ，前記複数のバスマスタの何れかは，前記タスクが生成したデータ転送要求を，前記スケジューリング手段を介さずに実行し，前記スケジューリング手段は，受け付け中のデータ転送要求を実行するバスマスタのバス使用可能時間を当該データ転送要求のデータ転送量に基づき，当該データ転送要求を実行しないバスマスタのバス使用可能時間よりも長く算出し，前記バスアービタは，前記バス使用可能時間がより長いバスマスタに優先的にバス使用権を与える。
【発明の効果】
【００１５】
第１の側面によれば，バスと複数のバスマスタとを有するデータ転送システムにおいて，効率的にデータ転送を実行し，時間的要求が厳しいデータ転送を確実に実行することができる。
【図面の簡単な説明】
【００１６】
【図１】第1の実施の形態を説明する機能ブロック図である。
【図２】第1の実施の形態のハードウェアの機能ブロック図である。
【図３】第1の実施の形態のソフトウェアの機能ブロック図である。
【図４】データ転送要求の内容を示す図である。
【図５Ａ】データ転送要求の実行開始を説明する第1のフロー図である。
【図５Ｂ】データ転送要求の実行開始を説明する第2のフロー図である。
【図５Ｃ】データ転送要求の実行開始を説明する第3のフロー図である。
【図６Ａ】データ転送完了時に実行する処理を説明する第1のフロー図である。
【図６Ｂ】データ転送完了時に実行する処理を説明する第2のフロー図である。
【図７Ａ】データ転送要求の一時停止を説明する第1のフロー図である。
【図７Ｂ】データ転送要求の一時停止を説明する第2のフロー図である。
【図７Ｃ】データ転送要求の一時停止を説明する第3のフロー図である。
【図８Ａ】一時停止したデータ転送要求の再開を説明する第1のフロー図である。
【図８Ｂ】一時停止したデータ転送要求の再開を説明する第2のフロー図である。
【図８Ｃ】一時停止したデータ転送要求の再開を説明する第3のフロー図である。
【図９Ａ】データ転送要求の強制終了を説明する第1のフロー図である。
【図９Ｂ】データ転送要求の強制終了を説明する第2のフロー図である。
【図９Ｃ】データ転送要求の強制終了を説明する第3のフロー図である。
【図１０】第2の実施の形態のハードウェアの機能ブロック図である。
【図１１】第2の実施の形態のソフトウェアの機能ブロック図である。
【図１２】第3の実施の形態のハードウェアの機能ブロック図である。
【図１３】第3の実施の形態のソフトウェアの機能ブロック図である。
【図１４】バスアービタ制御部，バスアービタドライバ群の機能ブロック図である。
【図１５】バスアービタの機能ブロック図である。
【図１６】第4の実施形態のソフトウェアの機能ブロック図である。
【図１７Ａ】PIOデータ転送要求の実行開始を説明する第1のフロー図である。
【図１７Ｂ】PIOデータ転送要求の実行開始を説明する第2のフロー図である。
【図１７Ｃ】PIOデータ転送要求の実行開始を説明する第3のフロー図である。
【図１８Ａ】PIOデータ転送完了時に実行する処理を説明する第1のフロー図である。
【図１８Ｂ】PIOデータ転送完了時に実行する処理を説明する第2のフロー図である。
【発明を実施するための形態】
【００１７】
（第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に命令する。
【００２２】
以下に，このようなデータ転送要求のスケジューリングを実行するデータ転送システム１の詳細について説明する。
【００２３】
図2は，ハードウェア10の機能ブロック図である。DMAC11は，DMA転送を実行する複数チャネルのDMACch0_110〜DMACch7_117と，DMACch0_110〜DMACch7_117とが接続するDMACバス113と，DMACch0_110〜DMACch7_117からのバス使用要求を仲裁するDMACバスアービタ114とを有する。なお，チャネル数は例示である。
【００２４】
CPU12は，ソフトウェア20を実行するCPUである。
【００２５】
バス１A_161Aは，DMAC11とバス2A_162Aとバス２B_162Bに接続するバスであり，バス1Aアービタ161aを有する。バス2A_162Aは，バス１A_161Aとバス１B_161Bと外部バスI/O163に接続するバスであり，バス2Aアービタ162aを有する。外部バスI/O163は，バス2A_162Aと外部バス166に接続するバスであり，外部バスアービタ163aを有する。
【００２６】
バス１B_161Bは，CPU12とバス2A_162Aとバス2B_162Bとバス2C_162Cに接続するバスであり，バス1Bアービタ161bを有する。バス2B_162Bは，バス１A_161Aとバス１B_161BとメモリIF164に接続するバスであり，バス2Bアービタ162bを有する。メモリIF164は，バス2B_162Bとメモリバス165に接続するメモリIF（InterFace）である。メモリバス165は，メモリIF164とメモリ14とに接続する。バス2C_162Cは，バス１B_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が記録され，数値が大きいほど優先度が高い。データ転送元は，データ転送元アドレスを示し，データ転送先はデータ転送先アドレスを示し，データ転送サイズ（データ転送量）は転送する全データのサイズを示す。転送単位のデータサイズは，１回のアクセスでデータ転送されるデータサイズを示す。転送方法は，データの転送先，転送元のアドレスをインクリメントする，デクリメントする，固定するなどの転送方法を示す。
【００３５】
次に，図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，バス１A_161A，バス2B_162B，メモリIF164，メモリバス165を経由してメモリ14にアクセスし，データを読み出し，メモリバス165，メモリIF164，バス2B_162B，バス１A_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の実施の形態によれば，スケジューリング手段が，優先度に基づいてデータ転送要求のスケジューリングを行うので，効率的なデータ転送を実行できる。
【０１１５】
また，バスアービタに対して１つのバスマスタがバス使用権を要求するので，このバスマスタは，即座にバス使用権を得ることができる。その結果，バスマスタがバス使用権を獲得するまでの待ち時間がなくなり，バスマスタの動作が停止することがない。
【０１１６】
（第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，バス１Aアービタドライバ手段422，バス2Aアービタドライバ手段423，バス１Bアービタドライバ手段424，バス２Bアービタドライバ手段425，外部バスアービタドライバ手段426）に対応する。
【０１３６】
まず，バスアービタがスケジューリングされたバスマスタに優先的にバス使用権を与える際に参照する情報である，バスマスタが所定期間においてバスを使用できるサイクル数を示す使用可能サイクル数を算出する処理について説明する。
【０１３７】
図14の統計情報読み出し手段411は，アービタドライバ群42のアービタドライバ手段（DMACアービタドライバ手段421，バス１Aアービタドライバ手段422，バス2Aアービタドライバ手段423，バス１Bアービタドライバ手段424，バス２Bアービタドライバ手段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−α）……（式１）
以下，バスマスタが過去に使用した使用割合を過去の使用割合，バスマスタが将来に使用する使用割合をバスマスタのバス使用見込み割合と記す。なお，αは重み付け係数であり，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，バス１A_161A，バス2A_162A，外部バスI/O163，外部バス166である。そして，各バスのバスマスタを特定する。前述の例では，DMACバス113のバスマスタはDMACch0_110，バス１A_161AのバスマスタはDMACバス113，バス2A_162Aのバスマスタはバス１A_161A，外部バスI/O163のバスマスタはバス2A_162Aと特定する。次いで，特定したバスマスタのデータ転送量をD1とする。
【０１４６】
そして，特定したバスマスタ以外のバスマスタのデータ転送量を，データ転送量D1よりも小さいデータ転送量D2とする。データ転送量D2としては例えば０である。
【０１４７】
そして，特定したバス毎に，このバス毎の各バスマスタのデータ転送量の総和を算出する。外部バスI/O163の場合，バスマスタはバス2A_162Aと外部バスマスタ151なので，この外部バスI/O163のデータ転送量の総和は（D1＋D2）である。そして，バスマスタであるバス2A_162Aのデータ転送量D1を算出したデータ転送量の総和（D1＋D2）で除算する。この除算値が，バス2A_162Aのバス使用見込み割合である。
【０１４８】
同じく，バスマスタである外部バスマスタ151のデータ転送量D2を算出したデータ転送量の総和（D1＋D2）で除算する。この除算値が外部バスマスタ151のバス使用見込み割合である。このバス使用見込みの算出処理を全バスの各バスマスタに対して実行する。
【０１４９】
以上のようにして算出した過去の使用割合，バス使用見込み割合を（式１）に代入すれば，外部バス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に出力する。なお，１つのデータ転送要求が要求格納部141に格納されている場合を例示したが，2つ以上でも同様である。
【０１５３】
次に，使用可能サイクル数算出手段413は，使用割合算出手段412から入力された算出結果に基づき，全バスの各バスマスタの使用可能サイクル数を算出する。使用可能サイクル数の算出は，（式2）に基づき行われる。
【０１５４】
あるバスマスタの使用可能サイクル数＝スケジューリング期間サイクル数×このバスマスタの使用割合……（式2）
スケジューリング期間サイクル数は，前記した所定期間に対応するサイクル数であり，任意に変更可能である。バスマスタの使用割合は，（式1）により算出した値である。
【０１５５】
外部バスI/O163のバスマスタであるバス2A_162Aの使用可能サイクル数は，スケジューリング期間サイクル数×バス2A_162Aの使用割合R1である。
【０１５６】
外部バスI/O163のバスマスタである外部バスマスタ151の使用可能サイクル数は，スケジューリング期間サイクル数×外部バスマスタ151の使用割合R2である。
【０１５７】
すなわち，使用可能サイクル数算出手段413は，実行待機中のデータ転送要求（受け付け中のデータ転送要求）を実行するバスマスタ，すなわちスケジューリングされたバスマスタの使用可能サイクル数（バス使用可能時間）をこのデータ転送要求のデータ転送量に基づき，実行待機中のデータ転送要求を実行しないバスマスタ，すなわちスケジューリングされないバスマスタの使用可能サイクル数よりも長く算出する。これは，スケジューリングされたバスマスタのバス使用見込み割合は，スケジューリングされないバスマスタのバス使用見込み割合よりも大きいからである。この場合，（式１）の重み付け係数αを０とすることが好ましい。
【０１５８】
また，使用可能サイクル数算出手段413は，スケジューリングされたバスマスタの使用可能サイクル数をこのバスマスタのデータ転送量，および，バス使用済み時間に基づき算出することもできる。この場合，（式１）の重み付け係数αを０＜α＜1とする。この使用済み時間により，バスマスタの過去のバス使用状態を考慮して，使用可能サイクル数を算出できる。この場合，スケジューリングされないバスマスタの使用可能サイクル数は，バス使用済み時間に基づき算出される。そのため，スケジューリングされないバスマスタでも，データ転送要求を実行できる。
【０１５９】
使用可能サイクル数算出手段413は，以上説明した，バスマスタの使用可能サイクル数の算出処理を，全バスの各バスマスタについて実行し，算出結果を割り当て情報設定手段415に出力する。なお，割り当て情報設定手段415が実行する処理については，後述する。
【０１６０】
次に，バスマスタの優先度を算出する処理について説明する。バスマスタの優先度は，前述したように数値が高いほど優先度が高く例えば優先度1〜5で示されるものとする。まず，前述したように，まず，バスアービタ制御手段41は，バス/転送制御手段225，要求管理手段223を介して要求格納部141にアクセスし，要求格納部141に格納されている実行待機中のデータ転送要求の検索し，検索したデータ転送要求の優先度を特定する。
【０１６１】
そして，優先度が最も高いデータ転送要求のデータ転送経路を構成するバスのバスマスタの優先度を最高優先度，例えば優先度5と算出し，それ以外のバスマスタは最高優先度よりも低い優先度，例えば優先度4と算出する。
【０１６２】
例えば，前記した第1のデータ転送要求の優先度が最も高い場合，第1のデータ転送要求のデータ転送経路を構成するバスのバスマスタである，DMACch0_110，DMACバス113，バス１A_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のバスマスタの使用割合が小さくなる。その結果，（式２）から明らかなように，第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呼び出し手段51１は，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の実施の形態と，第４の実施の形態を組み合わせてもよい。
【０２１７】
以上の実施の形態をまとめると，次の付記のとおりである。
【０２１８】
（付記１）
バスと，
前記バスに接続されたCPUと，
前記バスに接続され，前記バスを介したデータ転送を実行する複数のバスマスタと，
前記バスマスタからのバス使用要求を仲裁して何れかのバスマスタにバス使用権を与えるバスアービタと，
前記複数のバスマスタを制御するバスマスタドライバ手段と，
前記CPUによって実行されるタスクが生成したデータ転送要求を受け付け，前記受け付けた前記データ転送要求の中で，最も優先度が高いデータ転送要求を選択し，当該選択したデータ転送要求の実行を前記バスマスタドライバ手段に命令するスケジューリング手段とを有し，
前記バスマスタドライバ手段は，前記命令に応答して，前記選択したデータ転送要求に対応するバスマスタに前記選択したデータ転送要求を実行させるデータ転送システム。
【０２１９】
（付記２）
付記１において，
前記スケジューリング手段は，前記選択したデータ転送要求が前記バスマスタにより実行されている間に，前記タスクにより新たに生成されたデータ転送要求を受け付けると，前記受け付けたデータ転送要求の優先度が，前記実行されているデータ転送要求の優先度よりも高い場合に，当該実行されているデータ転送要求の一時停止を前記バスマスタドライバ手段に命令すると共に，前記新たに生成されたデータ転送要求の実行を前記バスマスタドライバ手段に命令し，
前記バスマスタドライバ手段は，前記実行されているデータ転送要求を一時停止すると共に，前記新たに生成されたデータ転送要求の実行命令に応答して，前記実行されているデータ転送要求の一時停止を前記バスマスタに実行させ，前記新たに生成されたデータ転送要求に対応するバスマスタに当該データ転送要求を実行させるデータ転送システム。
【０２２０】
（付記３）
付記２において，
前記スケジューリング手段は，前記新たに生成されたデータ転送要求の実行が完了したこと示す完了通知を受け付けると，前記完了通知に応答して，前記一時停止していたデータ転送要求の再開を前記バスマスタドライバ手段に命令し，
前記バスマスタドライバ手段は，前記バスマスタに前記一時停止しているデータ転送要求を再開させるデータ転送システム。
【０２２１】
（付記４）
付記１から３の何れかにおいて，
前記スケジューリング手段は，前記タスクから前記データ転送要求の一時停止命令を受け付けると，前記一時停止命令に応答し，前記データ転送要求のスケジューリングを一時停止し，前記タスクから前記一時停止していたデータ転送要求の再開命令を受け付けると，前記再開命令に応答し，前記一時停止していたデータ転送要求のスケジューリングを再開するデータ転送システム。
【０２２２】
（付記５）
付記１から４の何れかにおいて，
前記スケジューリング手段は，前記タスクから前記データ転送要求の強制終了命令を受け付けると，前記強制終了命令に応答し，前記データ転送要求のスケジューリングを終了するデータ転送システム。
【０２２３】
（付記６）
付記１から５の何れかにおいて，
前記バスアービタは，前記複数のバスマスタからのバス使用要求に対して，前記複数のバスマスタに設定された優先度に従って，時分割で前記バスのバス使用権の割り当てを行うデータ転送システム。
【０２２４】
（付記７）
付記１から６の何れかにおいて，
前記バスは，複数のバスが多段に接続されたバス構造を有するデータ転送システム。
【０２２５】
（付記８）
付記１から７の何れかにおいて，
さらに，前記バスを介したデータ転送を実行し，前記バスに直接接続，または，他のバスなどを介して接続される外部バスマスタと，
前記外部バスマスタを制御する外部バスマスタドライバ手段とを有し，
前記スケジューリング手段は，前記選択したデータ転送要求が，前記外部バスマスタにデータ転送要求を実行させる場合，当該データ転送要求の実行を前記外部バスマスタドライバ手段に命令し，
前記外部バスマスタドライバ手段は，前記命令に応答して，前記外部バスマスタに前記選択したデータ転送要求を実行させるデータ転送システム。
【０２２６】
（付記９）
付記１から７の何れかにおいて，
前記複数のバスマスタの何れかは，前記タスクが生成したデータ転送要求を，前記スケジューリング手段を介さずに実行し，
前記スケジューリング手段は，受け付け中のデータ転送要求を実行するバスマスタのバス使用可能時間を当該データ転送要求のデータ転送量に基づき，当該データ転送要求を実行しないバスマスタのバス使用可能時間よりも長く算出し，
前記バスアービタは，前記バス使用可能時間がより長いバスマスタに優先的にバス使用権を与えるデータ転送システム。
【０２２７】
（付記１０）
付記９において，
前記バスアービタは，前記複数のバスマスタのバス使用済み時間をカウントし，
前記スケジューリング手段は，前記バスマスタのバス使用可能時間を，さらに，当該バスマスタのバス使用済み時間に基づき算出するデータ転送システム。
【０２２８】
（付記１１）
付記１から７の何れかにおいて，
前記CPUは，PIO(Programmed I/O)転送を実行し，
前記タスクは，前記CPUにPIO転送を実行させるPIOデータ転送要求を生成し，前記PIOデータ転送要求に対応するPIO転送を前記CPUに実行させ，
前記スケジューリング手段は，前記PIOデータ転送要求を受け付けると，前記CPUに前記PIO転送の実行を開始させず，前記受け付けた前記データ転送要求の中で，前記PIOデータ転送要求の優先度が最も高くなると，前記CPUに前記PIO転送の実行を開始させるデータ転送システム。
【０２２９】
（付記１２）
バスと，前記バスに接続されたCPUと，前記バスに接続され，前記バスを介したデータ転送を実行する複数のバスマスタと，前記複数のバスマスタを制御するバスマスタドライバ手段とを有するデータ転送システムにおいて前記CPUが実行するデータ転送スケジューリングプログラムであって，
前記CPUによって実行されるタスクが生成したデータ転送要求を受け付ける工程と，
前記受け付けた前記データ転送要求の中で，最も優先度が高いデータ転送要求を選択し，当該選択したデータ転送要求の実行を前記バスマスタドライバ手段に命令して，前記バスマスタドライバ手段により，前記選択したデータ転送要求に対応するバスマスタに前記選択したデータ転送要求を実行させる工程とを，前記CPUに実行させるデータ転送スケジューリングプログラム。
【０２３０】
（付記１３）
付記１２において，
さらに，前記選択したデータ転送要求が前記バスマスタにより実行されている間に，前記タスクにより新たに生成されたデータ転送要求を受け付けると，前記受け付けたデータ転送要求の優先度が，前記実行されているデータ転送要求の優先度よりも高い場合に，当該実行されているデータ転送要求を一時停止すると共に，前記新たに生成されたデータ転送要求の実行を前記バスマスタドライバ手段に命令して，前記バスマスタドライバ手段により，前記実行されているデータ転送要求の一時停止を前記バスマスタに実行させ，前記新たに生成されたデータ転送要求に対応するバスマスタに当該データ転送要求を実行させる工程を前記CPUに実行させるデータ転送スケジューリングプログラム。
【符号の説明】
【０２３１】
1…データ転送システム，10…ハードウェア，11…DMAC，12…CPU，13…IRC，14…メモリ，15…外部バスマスタ，16…バス，16a…バスアービタ，20…ソフトウェア，21…タスク，22…スケジューリング手段，221…要求発生受け付け手段，222…要求完了通知受け付け手段，223…要求管理手段，224…スケジューラ，225…転送制御手段，226…バスマスタドライバ制御手段，23…OS，24…バスマスタドライバ手段，141…要求格納部，142…優先度別要求キュー，31…外部バスマスタドライバ制御手段，32…外部バスマスタドライバ手段，41…バスアービタ制御手段，411…統計情報読み出し手段，412…使用割合算出手段，413…使用可能サイクル数算出手段，414…優先度算出手段，415…割り当て情報設定手段，42…アービタドライバ群，420…バスアービタドライバ手段，4201…レジスタ設定手段，4202…統計情報レジスタ読み出し手段，51…タスク，511…PIO転送開始要求API呼び出し手段，512…PIO転送命令手段，513…PIO転送完了通知API呼び出し手段，52…CPUコア制御手段，521…タスク一時停止命令手段，522…タスク再開命令手段。
【図１】
0005772040.tif 000002
【図２】
0005772040.tif 000003
【図３】
0005772040.tif 000004
【図４】
0005772040.tif 000005
【図５Ａ】
0005772040.tif 000006
【図５Ｂ】
0005772040.tif 000007
【図５Ｃ】
0005772040.tif 000008
【図６Ａ】
0005772040.tif 000009
【図６Ｂ】
0005772040.tif 000010
【図７Ａ】
0005772040.tif 000011
【図７Ｂ】
0005772040.tif 000012
【図７Ｃ】
0005772040.tif 000013
【図８Ａ】
0005772040.tif 000014
【図８Ｂ】
0005772040.tif 000015
【図８Ｃ】
0005772040.tif 000016
【図９Ａ】
0005772040.tif 000017
【図９Ｂ】
0005772040.tif 000018
【図９Ｃ】
0005772040.tif 000019
【図１０】
0005772040.tif 000020
【図１１】
0005772040.tif 000021
【図１２】
0005772040.tif 000022
【図１３】
0005772040.tif 000023
【図１４】
0005772040.tif 000024
【図１５】
0005772040.tif 000025
【図１６】
0005772040.tif 000026
【図１７Ａ】
0005772040.tif 000027
【図１７Ｂ】
0005772040.tif 000028
【図１７Ｃ】
0005772040.tif 000029
【図１８Ａ】
0005772040.tif 000030
【図１８Ｂ】
0005772040.tif 000031