以下に添付図面を参照して、開示のデータ処理装置、送信装置、スケジューリング方法、送信制御方法、スケジューリングプログラム、および送信制御プログラムの実施の形態を詳細に説明する。
図1は、データ処理装置の動作例を示す説明図である。データ処理装置100は、データ処理装置100全体を制御するCPU#0と、データ処理装置100内のハードウェアを接続するバス101を有する。CPU#0は、実行優先度が低い低優先度スレッドを実行する。また、CPU#0は、割込要求を受け付けた場合に、実行優先度が高い割込処理を実行する。さらに、CPU#0は、割込処理の実行を阻害する割込処理阻害スレッドを実行する。割込処理の実行を阻害する要因としては、たとえば、割込処理阻害スレッドがバス101に頻繁にアクセスしたために、割込処理の実行が遅延した場合である。また、他の要因としては、たとえば、割込処理阻害スレッドが割込禁止命令を頻繁に発行したために、割込処理の実行が遅延した場合である。
以下、バス101に頻繁にアクセスするスレッドを、バス占有スレッドと呼称する。同様に、割込禁止命令を頻繁に発行するスレッドを、割込禁止スレッドと呼称する。頻繁か否かの判断方法については、図5、図6で後述する。
本実施の形態にかかるデータ処理装置100では、割込処理の実行を早く行い、応答性能を向上させることを目的とする。また、図1の(A)、図1の(B)に共通する設定として、時刻t0と時刻t1にそれぞれに割込要求が発生しており、CPU#0は、割込要求に対応する割込処理を実行している。時刻t1にて割込要求を受け付けた場合、CPU#0は、次の割込要求が発生する予測時刻として、時刻t3を算出する。図1の(A)は、割込阻害要因を排除しなかった場合のスレッドの実行状態を示しており、1の(B)は、割込阻害要因を排除した場合のスレッドの実行状態を示している。
図1の(A)の時刻t2にてスレッド切替タイミングとなった場合、CPU#0は、実行可能キューに格納されたスレッドのうち、割込処理阻害スレッドを実行する。なお、実行可能キューとは、スレッドが実行可能状態であるスレッドが格納されているキューである。続けて、時刻t3にて割込要求が発生した場合、割込処理阻害スレッドにより、割込処理の実行が遅くなり、応答性能が低下する。
図1の(B)では、時刻t2にてスレッド切替タイミングとなった場合、CPU#0は、予測時刻である時刻t3と現在時刻である時刻t2とから、実行予定となる割込処理阻害スレッドの実行中に割込処理を実行する可能性があるか否かを判断する。図1の例では、CPU#0は可能性があると判断し、割込処理阻害スレッドを実行せずに他のスレッドを実行する。これにより、時刻t3にて割込要求が発生しても、割込処理が直ぐに実行でき、応答性能が向上する。
このように、データ処理装置100は、割込要求が次に発生する予測時刻を求めておき、スレッドを実行する場合に、現在時刻が予測時刻に近ければスレッド実行を行わない。これにより、データ処理装置100は、割込要求に対する割込処理が阻害されなくなるため、応答性能を向上できる。
図2は、データ処理装置のハードウェア例を示すブロック図である。本実施の形態におけるデータ処理装置100は、携帯電話などの携帯端末を想定している。図2において、データ処理装置100は、CPUs201と、割込コントローラ202と、ROM(Read‐Only Memory)203と、RAM(Random Access Memory)204と、を含む。また、データ処理装置100は、フラッシュROM205と、フラッシュROMコントローラ206と、フラッシュROM207と、を含む。また、データ処理装置100は、DMAコントローラ208と、ディスプレイ209と、I/F(Interface)210と、キーボード211と、バス調停回路212と、を含む。また、各部はバス101によってそれぞれ接続されている。
CPUs201は、データ処理装置100の全体の制御を司る。また、CPUs201は、CPU#0〜CPU#nを含む。nは0以上の整数である。また、CPUs201は、専用のキャッシュメモリを有してもよい。また、データ処理装置100は、複数のコアを含むマルチコアプロセッサシステムであってもよい。なお、マルチコアプロセッサシステムとは、コアが複数搭載されたプロセッサを含むコンピュータのシステムである。コアが複数搭載されていれば、複数のコアが搭載された単一のプロセッサでもよく、シングルコアのプロセッサが並列されているプロセッサ群でもよい。なお、本実施の形態では、シングルコアのプロセッサであるCPUが並列されている形態を例にあげて説明する。
割込コントローラ202は、ディスプレイ209と、キーボード211等といったハードウェアからの割込信号を受信し、CPUs201のいずれかのCPUに通知する。ROM203は、ブートプログラムなどのプログラムを記憶している。RAM204は、CPUs201のワークエリアとして使用される。フラッシュROM205は、読出し速度が高速なフラッシュROMであり、たとえば、NOR型フラッシュメモリである。たとえば、フラッシュROM205は、OS(Operating System)などのシステムソフトウェアやアプリなどを記憶している。たとえば、OSを更新する場合、データ処理装置100は、I/F210によって新しいOSを受信し、フラッシュROM205に格納されている古いOSを、受信した新しいOSに更新する。
フラッシュROMコントローラ206は、CPUs201の制御にしたがってフラッシュROM207に対するデータのリード/ライトを制御する。フラッシュROM207は、データの保存、運搬を主に目的としたフラッシュROMであり、たとえば、NAND型フラッシュメモリである。フラッシュROM207は、フラッシュROMコントローラ206の制御で書き込まれたデータを記憶する。データの具体例としては、データ処理装置100を使用するユーザがI/F210を通して取得した画像データ、映像データや、また本実施の形態にかかるスケジューリングプログラムおよび送信制御プログラムなどである。フラッシュROM207は、たとえば、メモリカード、SDカードなどを採用することができる。
DMAコントローラ208は、CPUs201を介さずにデータ送信を行う装置である。たとえば、DMAコントローラ208は、RAM204からディスプレイ209の有するバッファへデータを送信する。
ディスプレイ209は、カーソル、アイコンあるいはツールボックスを始め、文書、画像、機能情報などのデータを表示する。ディスプレイ209は、たとえば、TFT(Thin Film Transistor)液晶ディスプレイなどを採用することができる。
I/F210は、通信回線を通じてLAN、WAN(Wide Area Network)、インターネットなどのネットワーク213に接続され、ネットワーク213を介して他の装置に接続される。そして、I/F210は、ネットワーク213と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。I/F210には、たとえばモデムやLANアダプタなどを採用することができる。
キーボード211は、数字、各種指示などの入力のためのキーを有し、データの入力を行う。また、キーボード211は、タッチパネル式の入力パッドやテンキーなどであってもよい。バス調停回路212は、バス101に対するアクセスの調停を行う。
(データ処理装置100の機能)
次に、データ処理装置100の機能について説明する。図3は、データ処理装置の機能的構成例を示すブロック図である。データ処理装置100は、記憶部300と、受付部301と、格納部302と、算出部303と、検出部304と、取得部305と、判断部306と、決定部307と、実行部308と、決定部309と、制御部310と、を含む。受付部301〜制御部310は、記憶装置に記憶されたプログラムをCPU#0が実行することにより、その機能を実現する。記憶装置とは、具体的には、たとえば、図2に示したROM203、RAM204、フラッシュROM205、フラッシュROM207などである。
また、図3では、受付部301〜制御部310が、CPU#0の機能であるように図示されているが、CPU#0以外の他のCPUの機能であってもよい。
また、データ処理装置100は、記憶部300が記憶する内容として、パラメータテーブル311と、スレッドテーブル312と、割込情報テーブル313と、CPU割込命令状態テーブル314と、にアクセス可能である。記憶部300は、RAM204、フラッシュROM205、フラッシュROM207といった記憶装置である。
パラメータテーブル311は、本実施の形態で用いる定数や、閾値を記憶する。パラメータテーブル311の記憶内容の詳細は、図5にて後述する。スレッドテーブル312は、割込処理の実行を阻害するか否かを示す情報を記憶する。スレッドテーブル312の記憶内容の詳細は、図6にて後述する。割込情報テーブル313は、割込処理に関する情報を記憶しており、たとえば、割込要求を受け付けた時刻と、次の割込要求の予測時刻を記憶する。割込情報テーブル313の記憶内容の詳細は、図7にて後述する。CPU割込命令状態テーブル314は、割込処理を実行可能か否かを示す状態を記憶する。CPU割込命令状態テーブル314の記憶内容の詳細は、図8にて後述する。
記憶部300は、実行可能なスレッドが割込処理の実行を阻害するか否かを示す情報を記憶する。実行可能なスレッドとは、実行可能状態にあるスレッドである。たとえば、記憶部300は、割込処理を阻害することを示す識別子または割込処理を阻害しないことを示す識別子のいずれか一方を、スレッドごとに記憶する。また、記憶部300は、データ処理装置100で実行される可能性のあるスレッド全てに対して、割込処理の実行を阻害するか否かを示す情報を記憶しておいてもよい。
受付部301は、プロセッサによって実行される割込処理を実行する契機となる割込要求を受け付ける。たとえば、ユーザがキーボード211の操作を行った場合、受付部301は、割込コントローラ202に接続しているCPUから割込要求を受け付ける。プロセッサとは、たとえば、CPU#0である。受付部301の機能により、データ処理装置100は、割込処理を実行する契機を判別することができる。なお、受け付けた情報は、RAM204、フラッシュROM205、フラッシュROM207などの記憶領域に記憶される。
格納部302は、受付部301によって割込要求を受け付けた時刻を記憶領域に格納する。たとえば、受付部301によって割込要求を12:00:10に受け付けた場合、格納部302は、12:00:10を記憶する。格納部302の動作により、データ処理装置100は、過去の割込要求の受付時刻を参照することができる。
算出部303は、CPUが割込要求を受け付けた場合、割込要求を受け付けた時刻と記憶領域から読み出された特定の時間情報とに基づいて、割込要求の次の割込要求を受け付ける予測時刻を算出する。特定の時間情報は、たとえば、所定時間であってもよいし、前回の割込要求を受け付けた時刻であってもよいし、さらに、過去の割込要求の受付間隔であってもよい。
予測時刻の算出方法として、算出部303は、たとえば、割込要求を受け付けた時刻に所定時間を加算した時刻を予測時刻としてもよい。また、算出部303は、たとえば、割込要求を受け付けた時刻に、割込要求を受け付けた時刻と格納部302により記憶領域に格納された前回の割込要求を受け付けた時刻の差分を加算した時刻を予測時刻としてもよい。また、算出部303は、割込要求を受け付けた時刻に、割込要求を受け付けた時刻および格納部302により記憶領域に格納された前回の割込要求を受け付けた時刻の差分と、過去の割込要求の受付間隔と、の平均を加算してもよい。また、算出部303は、前述の平均に関して、過去の割込要求の受付間隔に、受け付けた回数を重みとして加重平均を求めてもよい。
たとえば、記憶領域に割込要求を受け付けた時刻として12:00:10が格納されており、割込要求を12:00:20に受け付けたとする。算出部303は、予測時刻を、12:00:20+(12:00:20−12:00:10)=12:00:30と算出する。算出部303の動作により、データ処理装置100は、次に割込要求の発生時刻を予測することができる。なお、算出された予測時刻は、RAM204、フラッシュROM205、フラッシュROM207などの記憶領域に記憶される。
検出部304は、CPUにて実行可能なスレッドのうちCPUによって実行されるスレッドを検出する。たとえば、検出部304は、バス占有スレッドを検出する。また、検出部304は、CPUが複数存在する場合、いずれかのCPUによって実行されるスレッドを検出してもよい。たとえば、検出部304は、CPU#0〜CPU#nのうち、CPU#0によって実行されるスレッドを検出する。
検出部304の機能により、データ処理装置100は、割込処理を阻害する可能性があるか否かを検出するタイミングを得ることができる。なお、検出されたスレッドの識別情報、ポインタ等が、RAM204、フラッシュROM205、フラッシュROM207などの記憶領域に記憶される。
取得部305は、実行可能なスレッドの実行によるCPUのバス101へのアクセス回数を取得する。バス101へのアクセス回数の取得方法は、たとえば、バス調停回路212で計数することで取得してもよいし、各CPUにてアクセスする場合に、アクセス先アドレスからバス101を経由するアクセスを計数することで取得してもよい。また、取得部305は、実行可能なスレッドの実行によるCPUの割込禁止命令実行回数を取得してもよい。たとえば、取得部305は、CPU#0が計数した割込禁止命令の実行回数を取得する。なお、取得された情報は、RAM204、フラッシュROM205、フラッシュROM207などの記憶領域に記憶される。
判断部306は、検出部304によって検出されたスレッドがある場合、算出部303によって算出された予測時刻と現在時刻とに基づいて、検出されたスレッドの実行中に割込処理を実行する可能性があるか否かを判断する。
たとえば、判断部306は、予測時刻から閾値を減算した時刻と予測時刻に閾値を加算した時刻との間に、現在時刻が存在する場合、検出されたスレッドの実行中に割込処理を実行する可能性があると判断する。また、判断部306は、予測時刻から閾値を減算した時刻と閾値を加算した時刻との間に、予測時刻にスレッドが切り替わるタイムスライスの時間を加算した時刻が存在する場合、検出されたスレッドの実行中に割込処理を実行する可能性があると判断してもよい。
たとえば、算出部303が予測時刻を12:00:20として算出し、検出部304が12:00:19.5にバス占有スレッドを検出し、閾値が0.5[秒]であるとする。このとき、判断部306は、12:00:20−0.5=12:00:19.5であるため、検出されたスレッドの実行中に割込処理を実行する可能性があると判断する。
また、判断部306は、記憶部300に記憶されている割込処理の実行を阻害するか否かを示す情報を参照して、検出されたスレッドが割込処理の実行を阻害するか否かを判断してもよい。たとえば、判断部306は、検出されたスレッドに対して割込処理を阻害することを示す識別子が記憶されている場合、割込処理の実行を阻害すると判断する。
また、判断部306は、取得部305によって取得されたアクセス回数に基づいて、検出されたスレッドが割込処理の実行を阻害するか否かを判断してもよい。たとえば、判断部306は、取得されたアクセス回数が閾値以上であれば、割込処理の実行を阻害すると判断する。または、取得部305が単位時間ごとにアクセス回数を取得しておき、アクセス回数の平均を算出しておいて、平均より大きいアクセス回数を取得した場合に、判断部306は、検出されたスレッドが割込処理の実行を阻害すると判断してもよい。
また、判断部306は、取得部305によって取得された割込禁止命令実行回数に基づいて、検出されたスレッドが割込処理の実行を阻害するか否かを判断してもよい。たとえば、取得された割込禁止命令実行回数が閾値以上であれば、割込処理の実行を阻害すると判断する。ここで、閾値は、たとえば、データ処理装置100の設計者またはユーザによって指定された値である。または、取得部305が単位時間ごとに割込禁止命令実行回数を取得しておき、割込禁止命令実行回数の平均を算出しておく。そして、平均より大きい割込禁止命令実行回数を取得した場合、判断部306は、検出されたスレッドが割込処理の実行を阻害すると判断してもよい。
判断部306の動作により、データ処理装置100は、検出されたスレッドを実行するか否かを判断できる。なお、判断結果は、RAM204、フラッシュROM205、フラッシュROM207などの記憶領域に記憶される。
決定部307は、判断部306による判断結果に基づいて、検出されたスレッドをCPUによって実行するか否かを決定する。たとえば、判断部306が検出されたスレッドの実行中に割込処理を実行する可能性がないと判断した場合、決定部307は、検出されたスレッドをCPUによって実行することを決定する。また、判断部306が、検出されたスレッドの実行中に割込処理を実行する可能性があると判断した場合、決定部307は、検出されたスレッドをCPUによって実行しないことを決定する。また、判断部306が、検出されたスレッドが割込処理の実行を阻害しないと判断した場合、検出されたスレッドをCPUによって実行することを決定する。
また、決定部307は、判断部306によって検出されたスレッドの実行中に割込処理を実行する可能性があり、かつ、検出されたスレッドが割込処理の実行を阻害すると判断された場合、検出されたスレッドをCPUによって実行しないと決定してもよい。
また、判断部306が、検出されたスレッドの実行中に割込処理を実行する可能性があり、かつ、検出されたスレッドが割込禁止命令実行回数に基づいて割込処理の実行を阻害すると判断した場合とする。このとき、決定部307は、検出されたスレッドまたは割込処理のいずれか一方をいずれかのCPUによって実行すると決定するとともに、他方をCPUのうちいずれかのCPU以外の他のCPUによって実行することを決定してもよい。
具体的には、判断部306が検出されたスレッドの割込禁止命令実行回数が閾値以上となり、割込処理の実行を阻害すると判断したとする。このとき、決定部307は、たとえば、検出されたスレッドをCPU#0によって実行すると決定し、割込処理をCPU#1によって実行すると決定する。また、決定部307は、検出されたスレッドをCPU#1によって実行すると決定し、割込処理をCPU#0によって実行すると決定してもよい。なお、決定結果は、RAM204、フラッシュROM205、フラッシュROM207などの記憶領域に記憶される。
実行部308は、決定部307による決定結果に基づいて、検出されたスレッドをCPUによって実行する。たとえば、決定部307が検出されたスレッドを実行すると決定した場合、実行部308は、検出されたスレッドをCPU#0によって実行する。
また、実行部308は、決定部307によって検出されたスレッドを実行しないと決定された場合、実行可能なスレッドのうち検出されたスレッド以外の他のスレッドをCPUによって実行してもよい。他のスレッドとして、実行部308は、たとえば、低優先度スレッドを実行してもよいし、何もしないスレッドであるアイドルスレッドを実行してもよい。
また、実行部308は、検出されたスレッドまたは割込処理のいずれか一方をいずれかのCPUによって実行するとともに、他方を他のCPUによって実行してもよい。たとえば、実行部308は、検出されたスレッドをCPU#0によって実行するとともに、割込処理をCPU#1によって実行する。
決定部309は、受付部301によって割込要求を受け付けた場合、割込要求を受け付けた時刻と記憶領域から読み出された特定の時間情報とに基づいて、割込要求の次の割込要求を受け付ける時間帯を決定する。特定の時間情報については、算出部303の特定の時間情報と同一であるので、説明を省略する。時間帯の決定方法として、決定部309は、たとえば、予測時刻の算出方法として、割込要求を受け付けた時刻から所定時間減算した時刻から、割込要求を受け付けた時刻に所定時間を加算した時刻までを、次の割込要求を受け付ける時間帯と決定してもよい。また、決定部309は、たとえば、割込要求を受け付けた時刻から、割込要求を受け付けた時刻と格納部302により記憶領域に格納された時刻の差分を減算した時刻から、加算した時刻までを時間帯としてもよい。
決定部309の機能により、データ処理装置100は、次に割込要求が発生する時間帯を得ることができる。なお、決定された時間帯の情報は、RAM204、フラッシュROM205、フラッシュROM207などの記憶領域に記憶される。
制御部310は、決定部309によって決定された時間帯での送信装置によるデータの送信単位の分割数を、時間帯以外の時点における分割数より大きくして送信するように送信装置を制御する。送信装置とは、データを送信する装置であり、たとえば、DMAコントローラ208である。たとえば、制御部310は、DMAコントローラ208がデータを分割せずに送信している場合、決定された時間帯では、データを2分割して送信するように制御する。制御部310の機能により、データ処理装置100は、割込要求が発生すると予測された時間帯にて、データの送信単位を細かくして、割込処理を実行し易くすることができる。
図4は、DMAコントローラの機能的構成例を示すブロック図である。DMAコントローラ208は、タイマ回路401と、記憶部402と、取得部403と、変更部404と、送信部405と、を含む。
タイマ回路401は、経過時間を測定する回路である。タイマ回路401は、たとえば、測定開始要求を受け付けると、経過時間を計測し、所定時刻を経過した場合、CPU#0にタイマ割込を発行する。
記憶部402は、データの送信単位の分割数を記憶する。たとえば、CPU#0から割込要求を受け付ける時間帯を受け付けていない場合、分割数は1を記憶する。また、記憶部402は、分割数が増加する状態を示す識別子または分割数が減少する状態を示す識別子のいずれかとなる分割数状態を記憶する。たとえば、分割数が増加する状態を示す識別子を“0”とし、分割数が減少する状態を示す識別子を“1”とする。記憶部402の機能により、DMAコントローラ208は、現在の分割数の状態を記憶することができる。
取得部403は、割込要求の受付装置にて割込要求を受け付ける時間帯を受付装置から取得する。割込要求の受付装置とは、たとえば、CPUである。たとえば、取得部403は、割込要求を受け付ける時間帯として、12:00:19.5〜12:00:20.5を取得する。また、取得部403は、さらに、割込要求を受け付ける予測時刻を取得してもよい。たとえば、取得部403は、予測時刻として12:00:20を取得する。取得部403の機能により、DMAコントローラ208は、データの送信単位を分割する時間帯を得ることができる。
変更部404は、取得部403によって取得された時間帯において、分割数を記憶部402に記憶された分割数より大きい値に変更する。たとえば、割込要求を受け付ける時間帯を受け付けていない時点の分割数が1であり、取得部403が割込要求を受け付ける時間帯として、12:00:19.5〜12:00:20.5を取得したとする。このとき、変更部404は、12:00:19.5〜12:00:20.5において、データの送信単位を2分割に変更する。また、変更部404は、タイマ回路401からの満了通知に応じて、分割数を変更してもよい。
また、変更部404は、時間帯のうち時間帯の開始時刻から予測時刻までにおいて、変更後の分割数を変更前の分割数より大きい値に変更し、時間帯のうち予測時刻から時間帯の終了時刻までにおいて、変更後の分割数を変更前の分割数より小さい値に変更する。
たとえば、開始時刻が12:00:19.5であり、予測時刻が12:00:20.5であり、予測時刻が12:00:20であるとする。初めに、12:00:19.5にて、変更部404は、分割数を2に変更する。次に、12:00:19.75にて、変更部404は、分割数を3に変更する。続けて、12:00:20.25にて、変更部404は、分割数を2に変更する。最後に、12:00:20.5にて、変更部404は、分割数を1に変更する。このように、変更部404の機能により、DMAコントローラ208は、割込要求が発生すると予測した時刻において分割数を大きくすることで、予測時刻にてバス101の解放回数を増やし、割込処理を実行し易くする。
送信部405は、変更部404によって変更された分割数でデータを分割して送信する。たとえば、変更部404によって、分割数が2に変更された場合、送信部405は、データの送信単位を2分割して送信する。
図5は、パラメータテーブルの一例を示す説明図である。パラメータテーブル311は、バスアクセスカウント閾値、割込禁止命令実行回数閾値、データ送信最大分割数、特定処理非実行間隔という4つのフィールドを含む。バスアクセスカウント閾値フィールドには、割込阻害要因となるスレッドか否かを判断するための閾値の一つが格納される。具体的に、バスアクセスカウント閾値フィールドに格納された値以上の回数分、バス101へのアクセスを行ったスレッドは、割込処理の実行を阻害するスレッドと判断される。
割込禁止命令実行回数閾値フィールドには、実行予定のスレッドが割込阻害要因となるスレッドか否か判断するための閾値の一つが格納される。具体的に、割込禁止命令実行回数閾値フィールドに格納された値以上の回数分、割込禁止命令を実行したスレッドは、割込処理の実行を阻害するスレッドと判断される。データ送信最大分割数フィールドには、バス占有を避けるために行う、データ送信の最大の分割数が格納される。特定処理非実行間隔フィールドには、割込応答性向上のため、実行予定のスレッドが割込阻害要因となるスレッドか否かを判断する期間に関する値が格納される。
図6は、スレッドテーブルの記憶内容の一例を示す説明図である。スレッドテーブル312は、割込処理の実行を阻害するか否かを示す情報をスレッドごとに記憶する。図6で示すスレッドテーブル312は、レコード312−1、レコード312−2を記憶している。
スレッドテーブル312は、スレッドID、バスアクセス回数、割込禁止命令実行回数、割込処理阻害スレッドフラグという4つのフィールドを含む。スレッドIDフィールドには、割込阻害要因となるスレッドの識別情報が格納される。バスアクセス回数フィールドには、割込阻害要因となるスレッドがバス101にアクセスした回数が格納される。割込禁止命令実行回数フィールドには、割込阻害要因となるスレッドが割込禁止命令を実行した回数が格納される。
割込処理阻害スレッドフラグフィールドには、スレッドが割込処理の実行を阻害するか否かを示す識別子が格納される。具体的な識別子は、“Yes”が割込処理を阻害することを示す識別子であり、“No”が割込処理を阻害しないことを示す識別子である。“Yes”となるスレッドを実行する場合、データ処理装置100は、スレッドの実行を行わず、他のスレッドに実行権を譲渡する。また、割込処理阻害スレッドフラグは、データ処理装置100の設計時に設計者が決定してもよいし、データ処理装置100のユーザが設定してもよい。
たとえば、レコード312−1は、スレッド0がバスアクセス回数がcc回であり、割込禁止命令実行回数がee回であり、割込処理を阻害するスレッドであることが示されている。たとえば、cc回が、図5で示したバスアクセスカウント閾値フィールドの値であるaa回以上であれば、スレッド0はバス占有スレッドとなる。同様に、レコード312−2は、スレッド1がバスアクセス回数がdd回であり、割込禁止命令実行回数がff回であり、割込処理を阻害しないスレッドであることが示されている。たとえば、ff回が、図5で示した割込禁止命令実行回数閾値の値であるbb回以上であれば、スレッド1は割込禁止スレッドとなる。
図7は、割込情報テーブルの記憶内容の一例を示す説明図である。割込情報テーブル313は、1つの割込処理に関する情報を1レコードにして記憶している。図7で示す割込情報テーブル313は、レコード313−1、レコード313−2を記憶している。
割込情報テーブル313は、割込ID、スレッドID、操作内容、割込間隔、前回割込時刻、次回割込予測時刻、一定時間内割込回数という7つのフィールドを含む。割込IDフィールドには、割込処理の識別情報が格納される。スレッドIDフィールドには、割込IDフィールドに対応するスレッドIDが格納される。操作内容フィールドには、ユーザの操作内容が格納される。割込間隔フィールドには、割込要求が発生する時間間隔が格納される。前回割込時刻フィールドには、一つ前の割込要求が発生した時刻が格納される。次回割込予測時刻フィールドには、次の割込要求が発生する予測時刻が格納される。一定時間内割込回数フィールドには、一定時間内に発生する割込要求の回数が格納される。
たとえば、レコード313−1は、割込IDがint#0で示される割込処理がスレッド2に属しており、割込処理で行う操作内容が音楽再生中の曲飛ばしであることを示している。さらに、レコード313−1は、割込間隔が10秒であり、前回の割込要求が12:00:10に発生し、次回の割込要求の予測時刻が12:00:20であることを示している。
図8は、CPU割込命令状態テーブルの例を示す説明図である。CPU割込命令状態テーブル314は、CPUごとに対象のCPUが割込処理を実行可能か否かを示す状態を記憶している。CPU割込命令状態テーブル314は、レコード314−0〜レコード314−nまで登録されている。CPU割込命令状態テーブル314は、CPU_ID、状態種別という2つのフィールドを含む。CPU_IDフィールドには、CPUの識別情報が格納される。状態種別フィールドには、CPUが割込処理を実行可能な状態か否かを示す識別子が格納される。具体的に、状態種別フィールドには、CPUが割込禁止命令を実行中のため、割込処理を実行不可能である状態を示す識別子“0”と、CPUが割込禁止命令を実行していないため、割込処理を実行可能である状態を示す識別子“1”と、のいずれかが格納される。
たとえば、レコード314−0は、CPU#0が割込処理を実行不可能である状態を示している。また、レコード314−1は、CPU#1が割込処理を実行可能である状態を示している。同様に、レコード314−nは、CPU#nが割込処理を実行不可能である状態を示している。
続けて、図9〜図11では、割込阻害要因の排除方法について、3つの例を提示する。図9〜図11に共通する設定として、時刻t0、時刻t1それぞれに割込要求が発生しており、CPU#0は、時刻t3が次の割込要求が発生する予測時刻であると算出している。さらに、図9〜図11では、予測時刻となる時刻t3に割込要求が発生したとする。また、図9〜図11の(A)は、割込阻害要因を排除しなかった場合のスレッドの実行状態を示しており、図9〜図11の(B)は、割込阻害要因を排除した場合のスレッドの実行状態を示している。
図9は、割込阻害要因の排除方法の第1の例を示す説明図である。図9では、割込阻害要因の排除方法の第1の例として、バス占有スレッドの実行時刻を割込要求が発生する時刻と重ならないようにする方法である。
図9(A)の時刻t2にて、CPU#0は、次回割込予測時刻−特定処理非実行間隔≦現在時刻≦次回割込予測時刻+特定処理非実行間隔であるか否かを判断する。図9で示す状態では、条件を満たしている。ここで、図9(A)は、バス占有スレッドを時刻t2にて実行した場合を示しており、図9(B)は、判断結果により、バス占有スレッドを時刻t2では実行しなかった場合を示している。
図9(A)では、時刻t3に割込要求が発生するが、バス101がバス占有スレッドにより占有されているため、割込要求に対応する割込処理の実行が遅くなり、応答性能が低下する。図9(B)では、時刻t3に割込要求が発生し、割込要求に対応する割込処理を時刻t3に実行するため、応答性能が向上する。
図10は、割込阻害要因の排除方法の第2の例を示す説明図である。図10では、割込阻害要因の排除方法の第2の例として、割込要求が発生する時刻にて、DMAコントローラ208のデータの送信単位を分割する方法である。
図10(A)の時刻t2にて、CPU#0は、次回割込予測時刻−特定処理非実行間隔≦現在時刻≦次回割込予測時刻+特定処理非実行間隔であるか否かを判断する。図10で示す状態では、条件を満たしている。ここで、図10(A)は、DMAコントローラ208の送信単位を分割しなかった場合を示しており、図10(B)は、判断結果により、DMAコントローラ208の送信単位を分割した場合を示している。
図10(A)では、時刻t3に割込要求が発生するが、バス101がDMAコントローラ208により占有されているため、割込要求に対応する割込処理の実行が遅くなり、応答性能が低下する。図10(B)では、時刻t3に割込要求が発生し、DMAコントローラ208がバス101を占有していないため、割込要求に対応する割込処理を時刻t3に実行するため、応答性能が向上する。
図11は、割込阻害要因の排除方法の第3の例を示す説明図である。図11では、割込阻害要因の排除方法の第3の例として、割込要求が発生する時刻にて、割込要求に対応する割込処理と、割込禁止スレッドとを、それぞれ異なるCPUが実行する方法である。
図11(A)の時刻t2にて、CPU#0は、次回割込予測時刻−特定処理非実行間隔≦現在時刻≦次回割込予測時刻+特定処理非実行間隔であるか否かを判断する。ここで、図11(A)は、割込処理と割込禁止スレッドを同一のCPUが実行した場合を示しており、図11(B)は、判断結果により、割込処理と割込禁止スレッドを異なるCPUが実行した場合を示している。
図11(A)では、時刻t3に割込要求が発生するが、割込禁止命令が発行されているため、割込要求に対応する割込処理の実行が遅くなり、応答性能が低下する。図11(B)では、時刻t3にCPU#0が割込禁止スレッドを実行しているが、CPU#1では、割込禁止命令が発行されていないため、CPU#1が割込要求に対応する割込処理を実行し、応答性能が向上する。
図12は、次回割込予測時刻の算出例を示す説明図である。次回割込予測時刻の算出例として、データ処理装置100は、連続で同一の割込要求が発生した場合、割込要求の発生間隔を平均化する。CPU#0は、割込情報テーブル313の割込間隔フィールドを下記(1)式で得た結果で更新する。
割込間隔=(割込間隔フィールドの値×(一定時間内割込回数フィールドの値−1)+(今回の割込発生時刻−前回割込時刻フィールドの値))/一定時間内割込回数フィールドの値 …(1)
さらに、CPU#0は、次回割込予測時刻を下記(2)式で算出する。
次回割込予測時刻=今回の割込発生時刻+割込間隔 …(2)
なお、CPU#0は、(1)式を1回目の割込要求発生時には実行せず、割込間隔フィールドに0を格納し、前回割込時刻フィールドに1回目の割込要求発生時刻を格納し、一定時間内割込回数フィールドに1を格納する。たとえば、音楽再生中に、12:00:00にて割込要求が発生した場合、CPU#0は、前回割込時刻フィールドに12:00:00を格納する。
次に、図12(A)で示すように、12:00:10に割込要求が発生したとする。このとき、CPU#0は、(1)式を用いて割込間隔を算出する。
割込間隔=(0×(1−1)+(12:00:10−12:00:00))/1
⇔割込間隔=10/1=10[秒]
したがって、CPU#0は、割込間隔フィールドに10を格納し、前回割込時刻フィールドに2回目の割込要求発生時刻を格納し、一定時間内割込回数フィールドに1増加した2を格納する。さらに、CPU#0は、(2)式より、次回割込予測時刻を下記のように算出する。
次回割込予測時刻=12:00:10+10
⇔次回割込予測時刻=12:00:20
したがって、CPU#0は、次回割込予測時刻に12:00:20を格納する。続けて、図12(B)にて、図12(A)で示した状態から12:00:15に割込要求が発生したとする。このとき、CPU#0は、(1)式を用いて割込間隔を算出する。
割込間隔=(10×(2−1)+(12:00:15−12:00:10))/2
⇔割込間隔=(10+5)/2=7.5[秒]
したがって、CPU#0は、割込間隔フィールドに7.5を格納し、前回割込時刻フィールドに3回目の割込要求発生時刻を格納し、一定時間内割込回数フィールドに1増加した3を格納する。さらに、CPU#0は、(2)式より、次回割込予測時刻を下記のように算出する。
次回割込予測時刻=12:00:15+7.5
⇔次回割込予測時刻=12:00:22.5
したがって、CPU#0は、次回割込予測時刻に12:00:22.5を格納する。続けて、図12(C)にて、図12(B)で示した状態から12:00:30に割込要求が発生したとする。このとき、CPU#0は、(1)式を用いて割込間隔を算出する。
割込間隔=(7.5×(3−1)+(12:00:30−12:00:15))/3
⇔割込間隔=(15+15)/3=10[秒]
したがって、CPU#0は、割込間隔フィールドに10を格納し、前回割込時刻フィールドに4回目の割込要求発生時刻を格納し、一定時間内割込回数フィールドに1増加した4を格納する。さらに、CPU#0は、(2)式より、次回割込予測時刻を下記のように算出する。
次回割込予測時刻=12:00:30+10
⇔次回割込予測時刻=12:00:40
したがって、CPU#0は、次回割込予測時刻に12:00:40を格納する。このように、CPU#0は、過去の割込発生時刻を用いて次の割込発生の予測時刻を算出する。次に、データ送信の分割の例について説明する。
図13は、DMAコントローラのデータ送信分割の例を示す説明図である。図13では、データ送信最大分割数を4として説明する。初めに、DMAコントローラ208は、時刻t0より前では、データを分割せずにデータ送信を行っている。
時刻t0にて、次回割込予測時刻−特定処理非実行間隔≦現在時刻≦次回割込予測時刻+特定処理非実行間隔の条件を満たした場合、CPU#0は、データ送信モードの分割モードへの設定要求を、DMAコントローラ208に通知する。通知を受けたDMAコントローラ208は、2分割でデータ送信を行う。
また、DMAコントローラ208は、時刻t0から予測時刻までの時間を、データ送信最大分割数−1で分割し、段階的に分割数を増加していく。図13の例では、時刻t0から予測時刻までの時間を3分割し、時刻t0から、1/3経過した時刻をt1、2/3経過した時刻をt2とする。また、DMAコントローラ208は、予測時刻以降の時刻にて、1/3経過した時刻をt3、2/3経過した時刻をt4、予測時刻から特定処理非実行間隔経過した時刻をt5とする。
時刻t0にて、DMAコントローラ208は、分割数を2に設定する。これにより、DMAコントローラ208は、時刻t0から時刻t1まで、データ送信を2分割で送信する。また、時刻t1にて、DMAコントローラ208は、分割数を3に設定する。これにより、DMAコントローラ208は、時刻t1から時刻t2まで、データ送信を3分割で送信する。また、時刻t2にて、DMAコントローラ208は、分割数を4に設定する。これにより、DMAコントローラ208は、時刻t2から時刻t3まで、データ送信を4分割で送信する。
続けて、時刻t3にて、DMAコントローラ208は、分割数を3に設定する。これにより、DMAコントローラ208は、時刻t3から時刻t4まで、データ送信を3分割で送信する。また、時刻t4にて、DMAコントローラ208は、分割数を2に設定する。これにより、DMAコントローラ208は、時刻t4から時刻t5まで、データ送信を2分割で送信する。
このように、予測時刻にて最も分割数を大きくすることにより、データ処理装置100は、割込要求が最も起こりそうである予測時刻付近にて、分割数を大きくして割込要求を応答しやすくすることができる。続けて、図14〜図19にて、割込処理阻害用の排除処理手順のフローチャートを説明する。
図14は、割込阻害要因の排除処理手順の一例を示すフローチャートである。割込阻害要因の排除処理は、イベントに応じて割込阻害となるスレッドを検出し、スレッドが終了したら終了処理を実行する。割込阻害要因の排除処理はCPU#0〜CPU#nのうちいずれのCPUが行ってもよいが、図14では、CPU#0が実行する場合について説明する。なお、割込阻害要因の排除処理は、スケジューラの一部のプログラムであってもよいし、スケジューラからスレッドスイッチを行った、スレッドが実行終了したというイベントを受け付けるプログラムであってもよい。
CPU#0は、何らかのイベントを受け付けたかを確認する(ステップS1401)。イベントを受け付けていない場合(ステップS1401:イベントなし)、CPU#0は、一定時間経過後、ステップS1401の処理に移行する。スレッドスイッチイベントを受け付けた場合、CPU#0は、スレッドスイッチ時処理を実行する(ステップS1402)。ステップS1402の実行終了後、CPU#0は、ステップS1401の処理に移行する。スレッドスイッチ時処理の詳細は、図15にて説明する。
割込禁止命令実行開始イベントを受け付けた場合(ステップS1401:割込禁止命令実行開始)、CPU#0は、CPU割込命令状態テーブル314の自CPUの状態種別フィールドを、1から0に更新する(ステップS1403)。ステップS1403の実行終了後、CPU#0は、ステップS1401の処理に移行する。
また、割込禁止命令実行終了イベントを受け付けた場合(ステップS1401:割込禁止命令実行終了)、CPU#0は、CPU割込命令状態テーブル314の自CPUの状態種別フィールドを、0から1に更新する(ステップS1404)。ステップS1404の実行終了後、CPU#0は、ステップS1401の処理に移行する。なお、割込禁止命令実行開始、および割込禁止命令実行終了の検出方法は、スレッドがOSのAPI(Application Programming Interface)のうち、割込禁止命令を呼び出すため、OSが検出することができる。
タイマ割込イベントを受け付けた場合(ステップS1401:タイマ割込)、CPU#0は、データ送信モードの通常モードへの設定要求を、DMAコントローラ208に通知し(ステップS1405)、ステップS1401の処理に移行する。タイマ割込は、タイマ回路401より通知される。
割込要求イベントを受け付けた場合(ステップS1401:割込要求)、CPU#0は、割込要求を受け付けた時刻を割込情報テーブル313に格納する(ステップS1406)。次に、CPU#0は、割込要求に対応する割込処理を実行する(ステップS1407)。続けて、CPU#0は、ステップS1401の処理に移行する。
スレッド実行終了イベントを受け付けた場合(ステップS1401:スレッド実行終了)、CPU#0は、スレッド実行終了時処理を実行する(ステップS1408)。ステップS1408の実行終了後、CPU#0は、ステップS1401の処理に移行する。このように、図14で示す割込阻害要因の排除処理を実行することにより、データ処理装置100は、各イベントに対応した処理を実行できる。
図15は、スレッドスイッチ時処理手順の一例を示すフローチャートである。スレッドスイッチ時処理は、スレッドスイッチイベントが発生した時に行う処理である。また、スレッドスイッチ時処理は、割込阻害要因の排除処理内の呼び出しによって実行される。また、スレッドスイッチによって、これから実行されるスレッドを、実行予定スレッドと呼称する。
CPU#0は、次回割込予測時刻−特定処理非実行間隔≦現在時刻≦次回割込予測時刻+特定処理非実行間隔を満たすか否かを判断する(ステップS1501)。条件を満たす場合(ステップS1501:Yes)、CPU#0は、実行予定スレッドの割込処理阻害スレッドフラグフィールドがYesか、またはバスアクセス回数がバスアクセスカウント閾値以上か否かを判断する(ステップS1502)。
割込処理阻害スレッドフラグフィールドがYesである、またはバスアクセスカウント閾値以上である場合(ステップS1502:Yes)、CPU#0は、実行可能キューの次のスレッドに実行権を譲渡する(ステップS1503)。ステップS1503の終了後、CPU#0は、ステップS1502の処理に移行する。また、ステップS1503の処理を実行することにより、実行予定スレッドは、実行可能キュー内の次のスレッドとなる。
割込処理阻害スレッドフラグフィールドがNoであり、かつバスアクセスカウント閾値未満である場合(ステップS1502:No)、CPU#0は、実行予定スレッドの割込禁止命令実行回数が割込禁止命令実行回数閾値以上か否かを判断する(ステップS1504)。割込禁止命令実行回数閾値以上である場合(ステップS1504:Yes)、CPU#0は、割込処理を、実行予定スレッドを実行するCPUとは異なる他のCPUのうち、状態種別フィールドが1となるCPUに移行する(ステップS1505)。
ステップS1505の実行終了後、または、割込禁止命令実行回数閾値未満である場合(ステップS1504:No)、CPU#0は、DMAコントローラ208のデータ送信モードが分割モードに切替済か否かを判断する(ステップS1506)。分割モードに切替済でない場合(ステップS1506:No)、CPU#0は、データ送信モードの分割モードへの設定要求を、DMAコントローラ208に通知する(ステップS1507)。続けて、CPU#0は、タイマ回路401に計測開始要求を通知する(ステップS1508)。
ステップS1508の実行終了後、またはステップS1501の条件を満たさない場合(ステップS1501:No)、または分割モードに切替済である場合(ステップS1506:Yes)、CPU#0は、実行予定スレッドを実行する(ステップS1509)。続けて、CPU#0は、スレッドスイッチ時処理を終了する。このように、図15で示すスレッドスイッチ時処理を実行することにより、データ処理装置100は、割込要求を阻害するスレッドについて、阻害要因を排除でき、割込処理に対応する割込処理の実行を早く行える。
図16は、スレッド実行終了時処理手順の一例を示すフローチャートである。スレッドが実行終了する時に行う処理である。また、スレッド実行終了時処理は、割込阻害要因の排除処理内の呼び出しによって実行される。
CPU#0は、実行終了するスレッドが割込情報テーブル313に登録されたスレッドか否かを判断する(ステップS1601)。割込情報テーブル313に登録されたスレッドである場合(ステップS1601:Yes)、CPU#0は、次回割込予測時刻を算出する(ステップS1602)。具体的に、ステップS1602の処理として、CPU#0は、(1)式と(2)式を実行する。続けて、CPU#0は、データ送信モードの通常モードへの設定要求を、DMAコントローラ208に通知する(ステップS1603)。ステップS1603の実行終了後、CPU#0は、スレッド実行終了時処理を終了する。
割込情報テーブル313に登録されたスレッドでない場合(ステップS1601:No)、CPU#0は、スレッドテーブル312の割込禁止命令実行回数フィールドを更新する(ステップS1604)。続けて、CPU#0は、スレッドテーブル312のバスアクセス回数を登録するように、バス調停回路212に通知する(ステップS1605)。ステップS1605の実行終了後、CPU#0は、スレッド実行終了時処理を終了する。なお、通知を受け付けたバス調停回路212は、スレッドテーブル312のバスアクセス回数を更新する。
このように、図16で示すスレッド実行終了時処理を実行することにより、データ処理装置100は、実行終了するスレッドに関して、次回割込予測時刻と、割込禁止命令の回数と、バスアクセスの回数を更新することができる。
図17は、タイマ回路の処理手順の一例を示すフローチャートである。図17では、タイマ回路401の動作について説明する。タイマ回路401は、CPU#0から計測開始要求を受け付けたか否かを判断する(ステップS1701)。計測開始要求を受け付けていない場合(ステップS1701:No)、タイマ回路401は、一定時間経過後、ステップS1701の処理を再び実行する。計測開始要求を受け付けた場合(ステップS1701:Yes)、タイマ回路401は、特定処理非実行間隔×2の時間が経過したか否かを判断する(ステップS1702)。経過していない場合(ステップS1702:No)、タイマ回路401は、一定時間経過後、ステップS1702の処理を再び実行する。
経過している場合(ステップS1702:Yes)、タイマ回路401は、タイマ割込をCPU#0に通知する(ステップS1703)。ステップS1701の実行終了後、タイマ回路401は、ステップS1701の処理に移行する。なお、ステップS1703の処理により、CPU#0は、ステップS1401:タイマ割込を実行する。このように、図17で示すタイマ回路401の処理により、データ処理装置100は、割込予測時刻+特定処理非実行間隔となる時刻を検出することができる。
図18は、バス調停回路の処理手順の一例を示すフローチャートである。図18では、バス調停回路212の動作について説明する。バス調停回路212は、バスアクセスが発生したか否かを判断する(ステップS1801)。バスアクセスが発生していない場合(ステップS1801:No)、バス調停回路212は、ステップS1801の処理を再び実行する。バスアクセスが発生した場合(ステップS1801:Yes)、バス調停回路212は、従来の処理を実行する(ステップS1802)。ここで、従来の処理とは、バスアクセスの調停処理である。
続けて、バス調停回路212は、バスアクセスを発生させたスレッドのバスアクセス回数フィールドの値をインクリメントする(ステップS1803)。ステップS1803の実行終了後、バス調停回路212は、ステップS1801の処理に移行する。このように、図18で示すバス調停回路212の処理により、データ処理装置100は、スレッドごとのバスアクセス回数を取得することができる。
図19は、DMAコントローラの処理手順の一例を示すフローチャートである。図19では、DMAコントローラ208の動作について説明する。DMAコントローラ208は、分割数を1に設定する(ステップS1901)。また、DMAコントローラ208は、ステップS1901の処理の次に分割数状態を0に設定する。次に、DMAコントローラ208は、データ送信モードの分割モードへの設定要求を受け付けたか否かを判断する(ステップS1902)。分割モードへの設定要求を受け付けてない場合(ステップS1902:No)、DMAコントローラ208は、一定時間経過後、ステップS1902の処理を再び実行する。分割モードへの設定要求を受け付けた場合(ステップS1902:Yes)、DMAコントローラ208は、切替単位時間を、特定処理非実行間隔/(データ送信最大分割数−1)に設定する(ステップS1903)。
続けて、DMAコントローラ208は、分割数をインクリメントする(ステップS1904)。次に、DMAコントローラ208は、切替単位時間が経過したか否かを判断する(ステップS1905)。切替単位時間が経過していない場合(ステップS1905:No)、DMAコントローラ208は、一定時間経過後、ステップS1905の処理を再び実行する。
切替単位時間が経過した場合(ステップS1905:Yes)、DMAコントローラ208は、分割数をインクリメントする(ステップS1906)。次に、DMAコントローラ208は、分割数がデータ送信最大分割数より小さいか否かを判断する(ステップS1907)。小さい場合(ステップS1907:Yes)、DMAコントローラ208は、ステップS1905の処理に移行する。なお、ステップS1904〜ステップS1907の処理により、図13で示した時刻t0〜時刻t2までの時間について処理を行ったことになる。
分割数がデータ送信最大分割数以上である場合(ステップS1907:No)、DMAコントローラ208は、切替単位時間が経過したか否かを判断する(ステップS1908)。また、DMAコントローラ208は、ステップS1907:Noの処理の次に分割数状態を1に設定する。切替単位時間が経過していない場合(ステップS1908:No)、DMAコントローラ208は、一定時間経過後、ステップS1908の処理を再び実行する。なお、ステップS1908の処理により、図13で示した時刻t2〜予測時刻までの時間について処理を行ったことになる。
切替単位時間が経過した場合(ステップS1908:Yes)、DMAコントローラ208は、切替単位時間が経過したか否かを判断する(ステップS1909)。切替単位時間が経過していない場合(ステップS1909:No)、DMAコントローラ208は、一定時間経過後、ステップS1909の処理を再び実行する。切替単位時間が経過した場合(ステップS1909:Yes)、DMAコントローラ208は、分割数をデクリメントする(ステップS1910)。
続けて、DMAコントローラ208は、分割数が1より大きいか否かを判断する(ステップS1911)。分割数が1より大きい場合(ステップS1911:Yes)、DMAコントローラ208は、ステップS1909の処理に移行する。分割数が1以下である場合(ステップS1911:No)、DMAコントローラ208は、ステップS1902の処理に移行する。また、DMAコントローラ208は、ステップS1911:Noの処理の次に分割数状態を0に設定する。なお、ステップS1909〜ステップS1911の処理により、図13で示した予測時刻〜時刻t5までの時間について処理を行ったことになる。
また、図19では図示していないが、CPU#0より、通常モードへの設定要求を受け付けた場合、DMAコントローラ208は、分割数を1、分割数状態を0に設定して、ステップS1902の処理に移行する。このように、図19で示すDMAコントローラ208の処理により、データ処理装置100は、予測時刻の付近にて分割数を最大にすることができる。
図20は、本実施の形態にかかるコンピュータを用いたシステムの適用例を示す説明図である。図20において、ネットワークNWは、サーバ2001、サーバ2002とクライアント2031〜クライアント2034とが通信可能なネットワークであり、たとえば、LAN、WAN、インターネット、携帯電話網などを含む。
サーバ2002は、クラウド2020を有するサーバ群(サーバ2021〜サーバ2025)の管理サーバである。クライアント2031はノート型PC(Personal Computer)である。クライアント2032はデスクトップ型PC、クライアント2033は携帯電話機である。携帯電話機として、クライアント2033は、スマートフォンであってもよいし、PHS(Personal Handyphone System)であってもよい。クライアント2034はタブレット型端末である。
図20のサーバ2001、サーバ2002、サーバ2021〜サーバ2025、クライアント2031〜クライアント2034は、たとえば、実施の形態で説明したデータ処理装置として、本実施の形態にかかるデータ処理装置を実行する。たとえば、サーバ2021にて割込禁止命令を発行するスレッドを実行する場合、割込処理をサーバ2022にて実行することにより、応答性能が向上できる。
以上説明したように、データ処理装置、スケジューリング方法、およびスケジューリングプログラムによれば割込要求が次に発生する予測時刻を求めておき、スレッドが実行する場合に、現在時刻が予測時刻に近ければスレッド実行を行わない。これにより、データ処理装置は、割込処理が阻害されなくなるため、応答性能を向上することができる。
また、データ処理装置は、スレッドを実行する場合、割込処理の実行を阻害するか否かを示す情報を参照して、スレッド実行を行うか否かを決定してもよい。これにより、データ処理装置は、割込処理の実行を阻害しないスレッドであれば、割込処理が発生する可能性である時刻であっても実行し続けることができる。
また、データ処理装置は、検出されたスレッドの実行中に割込処理を実行する可能性があり、かつ、検出されたスレッドが割込処理の実行を阻害すると判断された場合、検出されたスレッドをCPUによって実行しなくてもよい。これにより、データ処理装置は、割込処理を阻害するためにスレッドを実行しないと判断する判断精度を向上することができる。
また、データ処理装置は、スレッドのバスへのアクセス回数に基づいて、スレッドが割込処理の実行を阻害するか否かを判断してもよい。これにより、データ処理装置は、たとえば、バスへのアクセス回数が実行途中で急増したスレッドに対して、割込処理の実行を阻害すると判断できるため、スレッドを実行しないタイミングを、割込処理を阻害する可能性が高いときに限定することができる。
また、データ処理装置は、スレッドの割込禁止命令実行回数に基づいて、スレッドが割込処理の実行を阻害するか否かを判断してもよい。これにより、データ処理装置は、たとえば、割込禁止命令の回数が実行途中で急増したスレッドに対して、割込処理の実行を阻害すると判断できるため、スレッドを実行しないタイミングを、割込処理を阻害する可能性が高いときに限定することができる。
また、データ処理装置は、割込禁止命令実行回数に基づいてスレッドが割込処理の実行を阻害すると判断した場合、スレッドを実行するCPUと割込処理を実行するCPUを別にしてもよい。これにより、割込処理阻害の回避方法であったスレッドを実行しない方法に比べ、スレッドを実行することができるため、本来のスケジューリングに沿った動作を行うことができる。
また、データ処理装置、送信装置、送信制御方法、および送信制御プログラムによれば割込要求が次に発生する時間帯を決定しておき、決定された時間帯において、DMAコントローラのデータの送信単位を細かくする。これにより、決定された時間帯では、バスの解放回数が多くなるため、割込処理を実行できるタイミングが早くなり、データ処理装置は、応答性能を向上できる。
また、送信装置は、割込要求が次に発生する時間帯と、予測時刻を取得し、予測時刻で最もデータの送信単位が細かくなるようにしてもよい。これにより、予測時刻付近でバスの解放回数が多くなるため、割込処理を実行できるタイミングが早くなり、データ処理装置は、応答性能をより向上できる。また、割込要求を受け付けないであろうと予測される時間帯では、送信単位を粗くすることで、送信速度が上昇するため、データ処理装置は、処理性能を向上できる。
また、応答性能を向上できる他の方法として、CPUのクロック周波数を上昇させるという方法があるが、この方法は消費電力が大きくなる。本実施の形態にかかるスケジューリング方法および送信制御方法は、消費電力が大きくならないため、消費電力を維持したまま、応答性能を向上できる。
なお、本実施の形態で説明したスケジューリング方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本スケジューリングプログラムは、ハードディスク、フレキシブルディスク、CD−ROM、MO、DVD等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本スケジューリングプログラムは、インターネット等のネットワークを介して配布してもよい。
また、本実施の形態で説明したDMAコントローラ208は、スタンダードセルやストラクチャードASIC(Application Specific Integrated Circuit)などの特定用途向けIC(以下、単に「ASIC」と称す。)やFPGAなどのPLD(Programmable Logic Device)によっても実現することができる。具体的には、たとえば、上述したDMAコントローラ208のタイマ回路401〜送信部405をHDL記述によって機能定義し、そのHDL記述を論理合成してASICやPLDに与えることにより、DMAコントローラ208を製造することができる。