(57)【要約】  データ処理システム（１００）は、データ処理装置（１１１）と、データ処理装置（１１２）と、共有キュー（１３５）と、管理ユニット（１４０）と、を備えている。データ処理装置（１１１）は、スレッド（１２１）を実行する。データ処理装置（１１２）は、スレッド（１２２）を実行する。共有キュー（１３５）は、データ処理装置（１１１）とデータ処理装置（１１２）とで共有する。管理ユニット（１４０）は、スレッド（１２１）およびスレッド（１２２）の共有キュー（１３５）にアクセスする優先度をスレッド（１２１）およびスレッド（１２２）のリアルタイム制約または通信プロトコルに基づいて設定する。
2013018230.tif 000002
【特許請求の範囲】
【請求項１】
第１スレッドを実行する第１データ処理装置と、
第２スレッドを実行する第２データ処理装置と、
前記第１データ処理装置と前記第２データ処理装置とで共有するメモリと、
前記第１スレッドおよび前記第２スレッドの前記メモリにアクセスする優先度を前記第１スレッドおよび前記第２スレッドのリアルタイム制約または通信プロトコルに基づいて設定する管理ユニットと
を含むことを特徴とするデータ処理システム。
【請求項２】
前記管理ユニットは、
前記リアルタイム制約を有するスレッドの優先度を高く設定する判断ユニットを含むこと
を特徴とする請求項１に記載のデータ処理システム。
【請求項３】
前記管理ユニットは、
前記通信プロトコルが所定の通信プロトコルであるスレッドの優先度を高く設定する判断ユニットを含むこと
を特徴とする請求項１に記載のデータ処理システム。
【請求項４】
前記第１スレッドの実行に基づいて生成される第１データを格納する第１ローカルキューと、
前記第２スレッドの実行に基づいて生成される第２データを格納する第２ローカルキューと、
前記第１ローカルキューおよび前記第２ローカルキューに格納される第１データおよび第２データを前記優先度に基づいてソートして格納するキューと
を含むことを特徴とする請求項１乃至請求項３の何れか一に記載のデータ処理システム。
【請求項５】
前記管理ユニットは、
前記第１スレッドおよび前記第２スレッドが前記リアルタイム制約を有さないとき、または、前記第１スレッドおよび前記第２スレッドの通信プロトコルが所定の通信プロトコルではないとき、前記優先度をタイムスタンプに基づいて設定すること
を特徴とする請求項１乃至請求項４の何れか一に記載のデータ処理システム。
【請求項６】
前記第１データおよび前記第２データがソートして格納された前記キューからデータを順次読み出し、読み出したデータを送信する通信部
を含むことを特徴とする請求項４に記載のデータ処理システム。
【請求項７】
複数のデータ処理装置に含まれる第１データ処理装置によって実行される第１スレッドが第１データを出力し、
前記複数のデータ処理装置に含まれる第２データ処理装置によって実行される第２スレッドが第２データを出力し、
前記複数のデータ処理装置の一のデータ処理装置が、前記第１データ処理装置および前記第２データ処理装置で共有されるメモリへの前記第１データおよび前記第２データの書き込み順序を前記第１スレッドおよび前記第２スレッドのリアルタイム制約または通信プロトコルに基づいて設定すること
を特徴とするデータ処理方法。
【請求項８】
前記第１スレッドがリアルタイム制約を有するときは、前記第１データが前記第２データよりも先に前記メモリに書き込まれること
を特徴とする請求項７に記載のデータ処理方法。
【請求項９】
前記第１スレッドの通信プロトコルが所定の通信プロトコルであるときは、前記第１データが前記第２データよりも先に前記メモリに書き込まれること
を特徴とする請求項７に記載のデータ処理方法。
【請求項１０】
前記第１スレッドおよび前記第２スレッドがリアルタイム制約を有しないとき、または、前記第１スレッドおよび前記第２スレッドの通信プロトコルが所定の通信プロトコルではないとき、前記書き込み順序を前記第１データおよび前記第２データのタイムスタンプに基づいて設定すること
を特徴とする請求項７乃至請求項９の何れか一に記載のデータ処理方法。
【請求項１１】
前記第１データを第１ローカルキューに格納し、
前記第２データを第２ローカルキューに格納し、
前記第１ローカルキューまたは前記第２ローカルキューから前記第１データまたは前記第２データを読み出して、前記書き込み順序に基づいて前記第１データおよび前記第２データを共通キューに書き込むこと
を特徴とする請求項７乃至請求項１０の何れか一に記載のデータ処理方法。
【請求項１２】
前記第１データおよび前記第２データがソートして格納された前記共通キューからデータを順次読み出し、読み出したデータを送信すること
を特徴とする請求項１１に記載のデータ処理方法。
【請求項１３】
第１スレッドの実行に基づいて生成される第１データを格納する第１ローカルキューと、
第２スレッドの実行に基づいて生成される第２データを格納する第２ローカルキューと、
前記第１スレッドおよび前記第２スレッドのリアルタイム制約または通信プロトコルに基づいてソートされた前記第１データおよび前記第２データを格納するキューと、
前記キューに格納される第１データおよび第２データが書き込まれるメモリと、
を含むことを特徴とするデータ処理システム。
【請求項１４】
前記第１スレッドがリアルタイム制約を有するときは、前記第１データが前記第２データよりも先に前記キューに書き込まれること
を特徴とする請求項１３に記載のデータ処理システム。
【請求項１５】
前記第１スレッドの通信プロトコルが所定の通信プロトコルであるときは、前記第１データが前記第２データよりも先に前記キューに書き込まれること
を特徴とする請求項１３に記載のデータ処理システム。
【請求項１６】
前記第１データおよび前記第２データがソートして格納された前記キューからデータを順次読み出し、読み出したデータを送信する通信部
を含むことを特徴とする請求項１３乃至請求項１５の何れか一に記載のデータ処理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データを処理するデータ処理システムおよびデータ処理方法に関する。
【背景技術】
【０００２】
現在のコンピュータシステムにおいては、複数のソフトウェアによる一つのハードウェアの共有が可能なマルチタスクのＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ：オペレーティングシステム）が利用されている。たとえば、ネットワークアダプタが１つしかないパーソナルコンピュータ上でブラウザとメーラを同時に起動することが可能である。この場合に、たとえば、ブラウザによるログイン情報などの送信と、メーラによる電子メールの送信と、が同時に行われることが考えられる。【０００３】
この場合は、ＯＳは、ブラウザおよびメーラからデータの送信要求を受け付けると、いったんメインメモリ上の一時領域である通信バッファに送信要求を格納する。その後、タイマー割り込みなどにより起動されたデバイスドライバが、通信バッファからデータを取り出し、ネットワークアダプタを用いて送信を行う。通信バッファは、たとえばＦＩＦＯ（Ｆｉｒｓｔ  Ｉｎ  Ｆｉｒｓｔ  Ｏｕｔ：先入れ先出し）のキューで実現される。キューはたとえばリングバッファにより実装される。【０００４】
マルチプロセッサシステムやマルチコアシステムにおいては、複数のＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ：中央処理装置）がメモリ上の通信バッファに同時にアクセスすることにより通信バッファ内のデータが破壊される可能性がある。このため、ＣＰＵ間で排他制御を行うことによってデータの保護が行われる。【０００５】
排他制御としては、ＭＵＴＥＸ（ＭＵＴｕａｌ  ＥＸｃｌｕｓｉｏｎ：相互排他）、セマフォ、スピンロックなどが挙げられる。これらの排他制御において、各ＣＰＵは、キューへの書き込みを行う前に、まずキューへのアクセス権を排他的に取得し、データの書き込み後にアクセス権を放棄する。一方、各ＣＰＵは、アクセス権の取得に失敗した場合は待機し（排他待ち）、アクセス権を取得してからデータの書き込みを行う。【０００６】
したがって、排他制御を行うことにより、ある時刻にキューへのアクセス権を有するのは１つのＣＰＵ（スレッド）のみとなり、キューへの書き込みは逐次的に行われる。これにより、上書きなどによるパケットデータの破壊が回避される。【０００７】
なお、プロセッサ間でデータを転送する技術において、メモリ上にプロセッサごとに独立して設けられたバッファ領域を介してデータを転送する方法が知られている（たとえば、下記特許文献１参照。）。また、ネットワークから受信したデータを受信バッファに格納し、受信バッファから読み出したデータを送信バッファに非同期に格納する方法が知られている（たとえば、下記特許文献２参照。）。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２００６−３０１８９４号公報
【特許文献２】特開平１０−１０７８５３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
しかしながら、上述した従来技術では、複数のスレッドが共有メモリにアクセスする場合に、リアルタイム性が求められるスレッドが他のスレッドより優先的に共有メモリにアクセスできるとは限らない。このため、リアルタイム性が求められるスレッドのスループットを向上させることができないという問題がある。【００１０】
本発明は、上述した従来技術による問題点を解消するため、リアルタイム性が求められるスレッドのスループットを向上させることができるデータ処理システムおよびデータ処理方法を提供することを目的とする。
【課題を解決するための手段】
【００１１】
上述した課題を解決し、目的を達成するため、本発明の一側面によれば、複数のデータ処理装置に含まれる第１データ処理装置によって実行される第１スレッドが第１データを出力し、前記複数のデータ処理装置に含まれる第２データ処理装置によって実行される第２スレッドが第２データを出力し、前記複数のデータ処理装置の一のデータ処理装置が、前記第１データ処理装置および前記第２データ処理装置で共有されるメモリへの前記第１データおよび前記第２データの書き込み順序を前記第１スレッドおよび前記第２スレッドのリアルタイム制約または通信プロトコルに基づいて設定するデータ処理システムおよびデータ処理方法が提案される。
【発明の効果】
【００１２】
本発明の一側面によれば、リアルタイム性が求められるスレッドのスループットを向上させることができるという効果を奏する。
【図面の簡単な説明】
【００１３】
【図１−１】図１−１は、実施の形態にかかるデータ処理システムの一例を示す図である。
【図１−２】図１−２は、実施の形態にかかるデータ処理システムの他の例を示す図である。
【図２】図２は、データ処理システムのハードウェア構成例を示す図である。
【図３】図３は、管理ユニットの構成例を示す図である。
【図４−１】図４−１は、プロセステーブルの一例を示す図である。
【図４−２】図４−２は、制約テーブルの一例を示す図である。
【図４−３】図４−３は、信頼性テーブルの一例を示す図である。
【図５】図５は、管理ユニットによるキュー管理処理の一例を示すフローチャートである。
【図６】図６は、ソートポリシの判断処理の一例を示すフローチャートである。
【図７】図７は、スレッド間の関連の有無の判定処理の一例を示すフローチャートである。
【図８】図８は、リアルタイム制約の有無の判定処理の一例を示すフローチャートである。
【図９】図９は、信頼性の要否の判定処理の一例を示すフローチャートである。
【図１０−１】図１０−１は、キュー管理処理の一例を示す図（その１）である。
【図１０−２】図１０−２は、キュー管理処理の一例を示す図（その２）である。
【図１０−３】図１０−３は、キュー管理処理の一例を示す図（その３）である。
【図１０−４】図１０−４は、キュー管理処理の一例を示す図（その４）である。
【図１０−５】図１０−５は、キュー管理処理の一例を示す図（その５）である。
【発明を実施するための形態】
【００１４】
以下に添付図面を参照して、本発明にかかるデータ処理システムおよびデータ処理方法の実施の形態を詳細に説明する。
【００１５】
（実施の形態）
（実施の形態にかかるデータ処理システム）
図１−１は、実施の形態にかかるデータ処理システムの一例を示す図である。図１−１に示すように、実施の形態にかかるデータ処理システム１００は、データ処理装置１１１，１１２と、メモリ１３０と、管理ユニット１４０と、を備えている。
【００１６】
データ処理装置１１１は、データを処理する第１データ処理装置である。データ処理装置１１２は、データを処理する第２データ処理装置である。データ処理装置１１１，１１２のそれぞれはたとえばＣＰＵである。スレッド１２１は、データ処理装置１１１によって実行される第１スレッドである。スレッド１２２は、データ処理装置１１２によって実行される第２スレッドである。
【００１７】
メモリ１３０は、ローカルキュー１３１，１３２と、共有キュー１３５と、を備えている。ローカルキュー１３１は、スレッド１２１の実行に基づいて生成される第１データを格納する第１ローカルキューである。ローカルキュー１３２は、スレッド１２２の実行に基づいて生成される第２データを格納する第２ローカルキューである。このように、メモリ１３０には、データ処理装置１１１，１１２のそれぞれに対応してローカルキュー１３１，１３２が設けられる。
【００１８】
メモリ１３０のうちの共有キュー１３５の部分は、データ処理装置１１１とデータ処理装置１１２とで共有するメモリ（共通キュー）である。具体的には、共有キュー１３５は、ローカルキュー１３１およびローカルキュー１３２に格納される第１データおよび第２データを優先度に基づいてソートして格納するキューである。
【００１９】
管理ユニット１４０は、スレッド１２１，１２２の共有キュー１３５にアクセスする優先度（書き込み順序）をスレッド１２１，１２２のリアルタイム制約に基づいて設定する。たとえば、管理ユニット１４０は、リアルタイム制約を有するスレッドの優先度を、リアルタイム制約を有さないスレッドの優先度より高く設定する判断ユニットを含む。また、管理ユニット１４０は、スレッド１２１，１２２がリアルタイム制約を有さない場合は、優先度をタイムスタンプに基づいて設定してもよい。
【００２０】
または、管理ユニット１４０は、スレッド１２１，１２２の共有キュー１３５にアクセスする優先度をスレッド１２１，１２２の通信プロトコルに基づいて設定してもよい。たとえば、管理ユニット１４０は、通信プロトコルが所定の通信プロトコルであるスレッドの優先度を、通信プロトコルが所定の通信プロトコルでないスレッドの優先度より高く設定する判断ユニットを含む。また、管理ユニット１４０は、スレッド１２１，１２２の通信プロトコルが所定の通信プロトコルではない場合は、優先度をタイムスタンプに基づいて設定してもよい。
【００２１】
図１−２は、実施の形態にかかるデータ処理システムの他の例を示す図である。図１−２において、図１−１に示した部分と同様の部分については同一の符号を付して説明を省略する。図１−２に示すように、データ処理システム１００は、図１−１に示した構成に加えてデータ処理装置１１３を備えていてもよい。このように、データ処理システム１００は、３つのデータ処理装置（ＣＰＵ）を備えていてもよい。同様に、データ処理システム１００は、４つ以上のデータ処理装置（ＣＰＵ）を備えていてもよい。
【００２２】
スレッド１２３は、データ処理装置１１３によって実行されるスレッドである。メモリ１３０には、図１−１に示した構成に加えて、データ処理装置１１３に対応するローカルキュー１３３を設ける。ローカルキュー１３３は、スレッド１２３の実行に基づいて生成されるデータを格納するローカルキューである。
【００２３】
また、データ処理システム１００は、図１−１に示した構成に加えて通信部１５０を備えていてもよい。通信部１５０は、共有キュー１３５に書き込まれたデータを順次読み出し、読み出したデータを他の通信装置へ送信するネットワークアダプタである。たとえば、通信部１５０は、キャリア通信やアドホック通信などのネットワークアダプタである。
【００２４】
このように、共有キュー１３５は、たとえば通信部１５０による送信待ちのための通信バッファに適用することができる。ただし、共有キュー１３５は通信バッファに限らず、スピーカなどによる音声出力待ちのバッファなどにも適用可能である。以下、主に図１−２に示したデータ処理システム１００について説明する。
【００２５】
（データ処理システムのハードウェア構成）
図２は、データ処理システムのハードウェア構成例を示す図である。図２に示すように、データ処理システム１００は、ＣＰＵ２１１〜２１ｎ（ｎは２以上の自然数）と、メインメモリ２２０と、補助メモリ２３０と、ユーザインターフェース２４０と、通信インターフェース２５０と、を備えている。ＣＰＵ２１１〜２１ｎ、メインメモリ２２０、補助メモリ２３０、ユーザインターフェース２４０および通信インターフェース２５０は、バス２０１によって接続されている。
【００２６】
ＣＰＵ２１１〜２１ｎは、データ処理システム１００の全体の制御を司るマルチプロセッサである。メインメモリ２２０は、たとえばＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）である。メインメモリ２２０は、ＣＰＵ２１１〜２１ｎのワークエリアとして使用される。補助メモリ２３０は、たとえば、ハードディスクや光ディスクなどの不揮発メモリである。補助メモリ２３０には、データ処理システム１００を動作させる各種のプログラムが記憶されている。補助メモリ２３０に記憶されたプログラムは、メインメモリ２２０にロードされてＣＰＵ２１１〜２１ｎによって実行される。
【００２７】
ユーザインターフェース２４０は、たとえば、ユーザからの操作入力を受け付ける入力デバイスや、ユーザへ情報を出力する出力デバイスなどを含む。入力デバイスは、たとえばキー（たとえばキーボード）やリモコンなどによって実現することができる。出力デバイスは、たとえばディスプレイやスピーカなどによって実現することができる。また、タッチパネルなどによって入力デバイスおよび出力デバイスを実現してもよい。ユーザインターフェース２４０はＣＰＵ２１１〜２１ｎによって制御される。
【００２８】
通信インターフェース２５０は、たとえば、有線や無線によってデータ処理システム１００の外部との間で通信を行う通信インターフェースである。通信インターフェース２５０はＣＰＵ２１１〜２１ｎによって制御される。
【００２９】
図１−１，図１−２に示したデータ処理装置１１１〜１１３は、たとえばＣＰＵ２１１〜２１ｎによって実現することができる。メモリ１３０は、たとえばメインメモリ２２０によって実現することができる。管理ユニット１４０は、たとえば、ＣＰＵ２１１〜２１ｎによって実行されるＯＳやアプリケーションの機能として実現することができる。通信部１５０は、たとえば通信インターフェース２５０によって実現することができる。
【００３０】
（管理ユニットの構成）
図３は、管理ユニットの構成例を示す図である。図３に示すように、管理ユニット１４０は、取出部３１０と、記憶部３２０と、ポリシ判断部３３０と、プロセステーブル３３１と、制約テーブル３３２と、信頼性テーブル３３３と、ソート書込部３４０と、を備えている。
【００３１】
取出部３１０、ポリシ判断部３３０およびソート書込部３４０は、たとえば図２に示したＣＰＵ２１１〜２１ｎのいずれかによって実現することができる。記憶部３２０は、たとえば図２に示したメインメモリ２２０によって実現することができる。プロセステーブル３３１、制約テーブル３３２および信頼性テーブル３３３は、たとえば図２に示した補助メモリ２３０に記憶されている。また、プロセステーブル３３１、制約テーブル３３２および信頼性テーブル３３３は、システム設計時に予め記憶されていてもよいし、アプリケーションのインストール時に記憶または更新されてもよい。
【００３２】
取出部３１０は、ローカルキュー１３１〜１３３（各ローカルキュー）のうちのデータが格納されたローカルキューからデータを１つずつ取り出して記憶部３２０に格納する。また、取出部３１０は、ローカルキュー１３１〜１３３のうちの記憶部３２０から取り出されたデータの出身キューがソート書込部３４０から通知されると、通知された出身キューに格納されたデータを１つ読み出して記憶部３２０に書き込む。これにより、記憶部３２０には、ローカルキュー１３１〜１３３からのデータが１つずつ記憶される。
【００３３】
ポリシ判断部３３０は、記憶部３２０に記憶された各データの各組み合わせについてソートポリシを判断する判断ユニットである。たとえば、記憶部３２０にはデータＡ，Ｂ，Ｃが記憶されているとする。ポリシ判断部３３０は、データＡ，Ｂ、データＢ，Ｃ、データＡ，Ｃの各組み合わせについてソートポリシを決定する。ポリシ判断部３３０は、決定した各組み合わせのソートポリシをソート書込部３４０へ通知する。
【００３４】
ソート書込部３４０は、ポリシ判断部３３０から通知された各組み合わせのソートポリシに基づいて、記憶部３２０の各組み合わせのデータをソートする。たとえば、ポリシ判断部３３０から通知された各ソートポリシにより、データＡ，Ｂの組み合わせではデータＡが先頭となり、データＢ，Ｃの組み合わせではデータＢが先頭となり、データＡ，Ｃの組み合わせではデータＣが先頭となったとする。
【００３５】
ソート書込部３４０は、３つの組み合わせのうちの２つの組み合わせで先頭となったデータＡを、データＡ，Ｂ，Ｃで最も優先されるデータとして決定する。ソート書込部３４０は、最も優先されるデータとして決定したデータＡを記憶部３２０から取り出して共有キュー１３５に書き込む。
【００３６】
なお、ソート書込部３４０によるデータのソートはこれに限らない。たとえば、記憶部３２０に記憶された各データには各スレッドによって設定された優先度が設定されていてもよい。そして、ソート書込部３４０は、ポリシ判断部３３０から通知されたソートポリシに基づいて、記憶部３２０に記憶された各データの優先度を変更する。たとえば、ソート書込部３４０は、リアルタイム制約のあるスレッドのデータを優先するソートポリシが通知された場合は、リアルタイム制約のあるスレッドのデータの優先度を上げる。そして、ソート書込部３４０は、ソートポリシに基づいて変更した優先度によって記憶部３２０に記憶された各データをソートしてもよい。
【００３７】
これにより、スレッド１２１〜１２３の共有キュー１３５にアクセスする優先度（書き込み順序）をスレッド１２１〜１２３のリアルタイム制約や通信プロトコルに基づいて設定することができる。また、管理ユニット１４０は、ローカルキュー１３１〜１３３のデータが一定量を超えた場合に、一定量を超えたデータを破棄してもよい。
【００３８】
（各テーブルについて）
図４−１は、プロセステーブルの一例を示す図である。図４−１に示すプロセステーブル３３１は、図３に示したプロセステーブル３３１の一例である。図４−１に示すように、プロセステーブル３３１は、「プログラムイメージ」と、「プロセスＩＤ」と、「親プロセスＩＤ」と、「プロセスグループＩＤ」と、「使用プロトコル」と、「使用ポート番号」と、を項目として含んでいる。プロセステーブル３３１の各行はデータ処理装置１１１〜１１３によって実行される各プロセスを示している。
【００３９】
「プログラムイメージ」は、プロセスを実行しているプログラム名を示している。なお、プロセステーブル３３１は、「プログラムイメージ」に代えてプロセスを実行しているプログラムのＩＤなどを項目として含んでいてもよい。
【００４０】
「プロセスＩＤ」は、プロセスを識別するＩＤである。「親プロセスＩＤ」は、プロセスの親プロセスを識別するＩＤである。「プロセスグループＩＤ」は、プロセスが属するプロセスグループを識別するＩＤである。「使用プロトコル」は、プロセスが生成したデータの送信に使用する通信プロトコルである。「使用ポート番号」は、プロセスが生成したデータの送信に使用するポート番号である。
【００４１】
たとえば１行目が示す「プロセスＩＤ」が「１２４０」のプロセスは、「プロセスＩＤ」が「１１６４」のプロセスから生成されたプロセスである。また、１行目が示す「プロセスＩＤ」が「１２４０」のプロセスは、通信を行わないプロセスであり、「使用プロトコル」および「使用ポート番号」は対応付けられていない。
【００４２】
２行目が示す「プロセスＩＤ」が「１２０４」のプロセスは、１行目が示す「プロセスＩＤ」が「１２４０」のプロセスから生成されたプロセスである。２行目が示す「プロセスＩＤ」が「１２０４」のプロセスは、生成された際に、「プロセスグループＩＤ」が「１２０４」の新たなプロセスグループのルートに設定されている。
【００４３】
３行目が示す「プロセスＩＤ」が「１７３２」のプロセスは、２行目が示す「プロセスＩＤ」が「１２０４」のプロセスから生成されたプロセスである。また、３行目が示す「プロセスＩＤ」が「１７３２」のプロセスには、通信を行うために「使用プロトコル」の「ＴＣＰ」および「使用ポート番号」の「１０６８」が割り当てられている。
【００４４】
４行目が示す「プロセスＩＤ」が「５０５６」のプロセスは、２行目が示す「プロセスＩＤ」が「１２０４」のプロセスから生成されたプロセスである。また、４行目が示す「プロセスＩＤ」が「５０５６」のプロセスには、通信を行うために「使用プロトコル」の「ＴＣＰ」および「使用ポート番号」の「１３９１」が割り当てられている。
【００４５】
図４−２は、制約テーブルの一例を示す図である。図４−２に示す制約テーブル３３２は、図３に示した制約テーブル３３２の一例である。図４−２に示すように、制約テーブル３３２は、「プログラムイメージ」と、「使用プロトコル」と、「制約フラグ」と、を項目として含んでいる。制約テーブル３３２の各行はデータ処理装置１１１〜１１３によって実行される各プロセスを示している。
【００４６】
「プログラムイメージ」および「使用プロトコル」は、図４−１に示したプロセステーブル３３１の「プログラムイメージ」および「使用プロトコル」に対応している。「制約フラグ」は、プロセスにリアルタイム制約があるか否かを示す情報である。具体的には、「制約フラグ」が「０」の場合はプロセスにリアルタイム制約がないことを示す。「制約フラグ」が「１」の場合はプロセスにリアルタイム制約があることを示す。
【００４７】
図４−３は、信頼性テーブルの一例を示す図である。図４−３に示す信頼性テーブル３３３は、図３に示した信頼性テーブル３３３の一例である。図４−３に示すように、信頼性テーブル３３３は、「使用プロトコル」と、「信頼性フラグ」と、を項目として含んでいる。信頼性テーブル３３３の各行はデータ処理装置１１１〜１１３によって実行される各プロセスが使用する通信プロトコルを示している。
【００４８】
「使用プロトコル」は、図４−１に示したプロセステーブル３３１の「使用プロトコル」に対応している。「信頼性フラグ」は、通信プロトコルの信頼性の要否を示す情報である。具体的には、「信頼性フラグ」が「１」の場合は通信プロトコルに信頼性が求められることを示す。また、「信頼性フラグ」が「０」の場合は通信プロトコルに信頼性が求められないことを示す。
【００４９】
（管理ユニットによるキュー管理処理）
図５は、管理ユニットによるキュー管理処理の一例を示すフローチャートである。管理ユニット１４０は、たとえば図５に示す各ステップを実行する。まず、管理ユニット１４０は、管理ユニット１４０によるキュー管理処理の割り込みタイミングか否かを判断し（ステップＳ５０１）、割り込みタイミングになるまで待つ（ステップＳ５０１：Ｎｏのループ）。
【００５０】
ステップＳ５０１において、割り込みタイミングになると（ステップＳ５０１：Ｙｅｓ）、取出部３１０が、各ローカルキュー（ローカルキュー１３１〜１３３）の少なくともいずれかにデータが書き込まれているか否かを判断する（ステップＳ５０２）。各ローカルキューのいずれにもデータが書き込まれていない場合（ステップＳ５０２：Ｎｏ）は、管理ユニット１４０は、ステップＳ５０１へ戻る。
【００５１】
ステップＳ５０２において、各ローカルキューの少なくともいずれかにデータが書き込まれている場合（ステップＳ５０２：Ｙｅｓ）は、取出部３１０が、各ローカルキューからデータを１つずつ取り出して記憶部３２０に書き込む（ステップＳ５０３）。つぎに、ポリシ判断部３３０が、記憶部３２０に書き込まれた各データの組み合わせごとにソートポリシを決定する（ステップＳ５０４）。ソートポリシの判断処理については後述する（たとえば図６参照）。
【００５２】
つぎに、ソート書込部３４０が、ステップＳ５０４によって決定されたソートポリシに基づいて、記憶部３２０の各データのうちの最も優先されるデータを記憶部３２０から取り出して共有キュー１３５に書き込む（ステップＳ５０５）。つぎに、取出部３１０が、ステップＳ５０５によって取り出されたデータの出身キューからデータを１つ取り出して記憶部３２０に書き込む（ステップＳ５０６）。
【００５３】
つぎに、管理ユニット１４０は、割り込み処理を終了するか否かを判断する（ステップＳ５０７）。割り込み処理を終了しない場合（ステップＳ５０７：Ｎｏ）は、管理ユニット１４０は、ステップＳ５０４へ戻る。割り込み処理を終了する場合（ステップＳ５０７：Ｙｅｓ）は、管理ユニット１４０は、ステップＳ５０１へ戻る。
【００５４】
以上の各ステップにより、管理ユニット１４０は、スレッド１２１〜１２３によってローカルキュー１３１〜１３３に書き込まれたデータを、ソートポリシに基づく順序で共有キュー１３５に移すことができる。
【００５５】
（ソートポリシの判断処理）
図６は、ソートポリシの判断処理の一例を示すフローチャートである。ポリシ判断部３３０は、図５に示したステップＳ５０４において、記憶部３２０の各データの組み合わせごとに、たとえば図６に示す各ステップを実行することによりソートポリシを決定する。まず、ポリシ判断部３３０は、対象の組み合わせにかかる各データのスレッド間に関連があるか否かを判断する（ステップＳ６０１）。スレッド間の関連の有無の判定処理については後述する（たとえば図７参照）。
【００５６】
ステップＳ６０１において、スレッド間に関連がある場合（ステップＳ６０１：Ｙｅｓ）は、ステップＳ６０９へ移行する。スレッド間に関連がない場合（ステップＳ６０１：Ｎｏ）は、ポリシ判断部３３０は、対象の組み合わせにかかる各データの各スレッドについてリアルタイム制約の有無を判定する（ステップＳ６０２）。リアルタイム制約の有無の判定処理については後述する（たとえば図８参照）。
【００５７】
つぎに、ポリシ判断部３３０は、ステップＳ６０２による判定結果に基づいて、対象の組み合わせにかかる各データの各スレッドのうちの一方のスレッドのみにリアルタイム制約があるか否かを判断する（ステップＳ６０３）。一方のスレッドのみにリアルタイム制約がある場合（ステップＳ６０３：Ｙｅｓ）は、ポリシ判断部３３０は、対象の組み合わせのソートポリシを、リアルタイム制約があるスレッドを優先するソートポリシに決定し（ステップＳ６０４）、一連の処理を終了する。
【００５８】
ステップＳ６０３において、両方のスレッドにリアルタイム制約があり、または両方のスレッドにリアルタイム制約がない場合（ステップＳ６０３：Ｎｏ）は、ポリシ判断部３３０は、ステップＳ６０５へ移行する。すなわち、ポリシ判断部３３０は、ステップＳ６０２による判定結果に基づいて、対象の組み合わせにかかる各データの各スレッドのうちの両方のスレッドにリアルタイム制約があるか否かを判断する（ステップＳ６０５）。
【００５９】
ステップＳ６０５において、両方のスレッドにリアルタイム制約がない場合（ステップＳ６０５：Ｎｏ）は、ポリシ判断部３３０は、ステップＳ６０９へ移行する。両方のスレッドにリアルタイム制約がある場合（ステップＳ６０５：Ｙｅｓ）は、ポリシ判断部３３０は、対象の組み合わせにかかる各データの各スレッドについて信頼性の要否を判定する（ステップＳ６０６）。信頼性の要否の判定処理については後述する（たとえば図９参照）。
【００６０】
つぎに、ポリシ判断部３３０は、ステップＳ６０６による判定結果に基づいて、対象の組み合わせにかかる各データの各スレッドのうちの一方のスレッドのみに信頼性が必要か否かを判断する（ステップＳ６０７）。一方のスレッドのみに信頼性が必要である場合（ステップＳ６０７：Ｙｅｓ）は、ポリシ判断部３３０は、対象の組み合わせのソートポリシを、信頼性が必要なスレッドを優先するソートポリシに決定し（ステップＳ６０８）、一連の処理を終了する。
【００６１】
ステップＳ６０７において、各スレッドに信頼性が必要であり、または各スレッドに信頼性が必要でない場合（ステップＳ６０７：Ｎｏ）は、ポリシ判断部３３０は、ステップＳ６０９へ移行する。すなわち、ポリシ判断部３３０は、対象の組み合わせのソートポリシを、タイムスタンプが古いスレッドを優先するソートポリシに決定し（ステップＳ６０９）、一連の処理を終了する。
【００６２】
以上の各ステップにより、ポリシ判断部３３０は、記憶部３２０の各データの組み合わせごとに、スレッド間の関連の有無、リアルタイム制約の有無および信頼性の要否に基づいてソートポリシを決定することができる。
【００６３】
たとえば、スレッド間の関連の有無による判断を行い、スレッド間に関連がある場合はタイムスタンプによるソートポリシを選択することができる。これにより、関連のある各スレッドが生成したデータの順序を管理ユニット１４０により変えてしまい、各スレッドの動作が不安定になることを回避することができる。
【００６４】
また、スレッド間に関連がある場合は、スレッド間で連携を取り合ってお互いに調整しながら共有キュー１３５にデータを書き込むことが可能である。このため、タイムスタンプによるソートポリシを選択しても、リアルタイム性が求められるスレッドのスループットが低下することを回避することができる。
【００６５】
また、リアルタイム制約の有無による判断を行い、一方のスレッドにのみリアルタイム制約がある場合は、リアルタイム制約があるスレッドのデータを優先するソートポリシを選択することができる。これにより、リアルタイム制約があるスレッドのデータを優先的に共有キュー１３５に移すことができる。このため、リアルタイム性が求められるスレッドのスループットを向上させることができる。また、両方のスレッドにリアルタイム制約がない場合は、タイムスタンプによるソートポリシを選択することができる。
【００６６】
また、信頼性の要否による判断を行い、一方のスレッドにのみ信頼性が必要である場合は、信頼性が必要であるスレッドのデータを優先するソートポリシを選択することができる。これにより、信頼性が必要であるスレッドのデータを優先的に共有キュー１３５に移すことができる。このため、信頼性が必要であるスレッドのスループットを向上させ、信頼性を向上させることができる。
【００６７】
なお、ソートポリシの決定処理はこれに限らない。たとえば、図６に示した各ステップにおいて、スレッド間の関連の有無による判断（ステップＳ６０１）は省いてもよい。また、図６に示した各ステップにおいて、リアルタイム制約の有無による判断（ステップＳ６０２〜Ｓ６０５）は省いてもよい。また、図６に示した各ステップにおいて、信頼性の要否による判断（ステップＳ６０６〜Ｓ６０８）は省いてもよい。
【００６８】
図７は、スレッド間の関連の有無の判定処理の一例を示すフローチャートである。ポリシ判断部３３０は、図６に示したステップＳ６０１において、たとえば図７に示す各ステップを実行することによってスレッド間の関連の有無を判定する。まず、ポリシ判断部３３０は、対象の組み合わせにかかる各データのヘッダから各データの「使用プロトコル」と「ポート番号」を取得する（ステップＳ７０１）。
【００６９】
つぎに、ポリシ判断部３３０は、ステップＳ７０１によって取得した「使用プロトコル」と「ポート番号」およびプロセステーブル３３１から各データの「親プロセスＩＤ」を特定する（ステップＳ７０２）。具体的には、ポリシ判断部３３０は、プロセステーブル３３１から、取得した「使用プロトコル」と「ポート番号」の組み合わせに対応する「親プロセスＩＤ」を特定する。
【００７０】
つぎに、ポリシ判断部３３０は、ステップＳ７０２によって特定した各データの「親プロセスＩＤ」が同一か否かを判断する（ステップＳ７０３）。各データの「親プロセスＩＤ」が同一である場合（ステップＳ７０３：Ｙｅｓ）は、ポリシ判断部３３０は、対象の組み合わせにかかる各データの各スレッドに関連があると判定し（ステップＳ７０４）、一連の処理を終了する。各データの「親プロセスＩＤ」が同一でない場合（ステップＳ７０３：Ｎｏ）は、ポリシ判断部３３０は、対象の組み合わせにかかる各データの各スレッドに関連がないと判定し（ステップＳ７０５）、一連の処理を終了する。
【００７１】
以上の各ステップにより、ポリシ判断部３３０は、対象の組み合わせにかかる各データの各スレッドの関連の有無を判定することができる。なお、各データの「親プロセスＩＤ」が同一か否かによって各スレッドの関連の有無を判定する処理について説明したが、各スレッドの関連の有無を判定する処理はこれに限らない。たとえば、各データの「プロセスグループＩＤ」が同一か否かによって各スレッドの関連の有無を判定してもよい。
【００７２】
図８は、リアルタイム制約の有無の判定処理の一例を示すフローチャートである。ポリシ判断部３３０は、図６に示したステップＳ６０２において、たとえば図８に示す各ステップを実行することによって各スレッドについてリアルタイム制約の有無を判定する。まず、ポリシ判断部３３０は、対象の組み合わせにかかる各データのヘッダから各データの「使用プロトコル」と「ポート番号」を取得する（ステップＳ８０１）。
【００７３】
つぎに、ポリシ判断部３３０は、ステップＳ８０１によって取得した「使用プロトコル」と「ポート番号」およびプロセステーブル３３１から各データの「プログラムイメージ」を特定する（ステップＳ８０２）。具体的には、ポリシ判断部３３０は、プロセステーブル３３１から、取得した「使用プロトコル」と「ポート番号」の組み合わせに対応する「プログラムイメージ」を特定する。
【００７４】
つぎに、ポリシ判断部３３０は、ステップＳ８０１によって取得した「使用プロトコル」とステップＳ８０２によって特定した「プログラムイメージ」および制約テーブル３３２から各データの「制約フラグ」を取得し（ステップＳ８０３）、一連の処理を終了する。具体的には、ポリシ判断部３３０は、制約テーブル３３２から、「使用プロトコル」と「プログラムイメージ」の組み合わせに対応する「制約フラグ」を取得する。
【００７５】
以上の各ステップにより、ポリシ判断部３３０は、対象の組み合わせにかかる各データの各スレッドについて、リアルタイム制約の有無を示す「制約フラグ」を取得し、リアルタイム制約の有無を判定することができる。
【００７６】
図９は、信頼性の要否の判定処理の一例を示すフローチャートである。ポリシ判断部３３０は、図６に示したステップＳ６０６において、たとえば図９に示す各ステップを実行することによって各スレッドについて信頼性の要否を判定する。まず、ポリシ判断部３３０は、対象の組み合わせにかかる各データのヘッダから各データの「使用プロトコル」を取得する（ステップＳ９０１）。
【００７７】
つぎに、ポリシ判断部３３０は、ステップＳ９０１によって取得した「使用プロトコル」および信頼性テーブル３３３から各データの「信頼性フラグ」を取得し（ステップＳ９０２）、一連の処理を終了する。具体的には、ポリシ判断部３３０は、信頼性テーブル３３３から、「使用プロトコル」に対応する「信頼性フラグ」を取得する。
【００７８】
以上の各ステップにより、ポリシ判断部３３０は、対象の組み合わせにかかる各データの各スレッドについて、信頼性の要否を示す「信頼性フラグ」を取得し、信頼性の要否を判定することができる。
【００７９】
（キュー管理処理の例）
図１０−１〜図１０−５は、キュー管理処理の一例を示す図である。図１０−１〜図１０−５において、図１−２に示した部分と同様の部分については同一の符号を付して説明を省略する。図１０−１に示すように、データ処理装置１１１はスレッド「Ａ」およびスレッド「Ｂ」を実行し、データ処理装置１１２はスレッド「Ｃ」を実行し、データ処理装置１１３はスレッド「Ｄ」を実行しているとする。スレッド「Ａ」は、スレッド「Ｃ」と関連があり、リアルタイム制約があり、信頼性が要求されないスレッドである。
【００８０】
スレッド「Ｂ」は、他のスレッドと関連がなく、リアルタイム制約があり、信頼性が要求されるスレッドである。スレッド「Ｃ」は、スレッド「Ａ」と関連があり、リアルタイム制約があり、信頼性が要求されないスレッドである。スレッド「Ｄ」は、他のスレッドと関連がなく、リアルタイム制約があり、信頼性が要求されないスレッドである。
【００８１】
ローカルキュー１３１には、スレッド「Ａ」の実行に基づいて生成されたデータ「Ａ１」，「Ａ２」と、スレッド「Ｂ」の実行に基づいて生成されたデータ「Ｂ１」，「Ｂ２」と、が格納されている。また、ローカルキュー１３１の各データは、データ「Ａ１」，「Ｂ１」，「Ａ２」，「Ｂ２」の順に格納されている。
【００８２】
ローカルキュー１３２には、スレッド「Ｃ」の実行に基づいて生成されたデータ「Ｃ１」〜「Ｃ４」が格納されている。また、ローカルキュー１３２の各データは、データ「Ｃ１」，「Ｃ２」，「Ｃ３」，「Ｃ４」の順に格納されている。ローカルキュー１３３には、スレッド「Ｄ」の実行に基づいて生成されたデータ「Ｄ１」〜「Ｄ４」が格納されている。また、ローカルキュー１３３の各データは、データ「Ｄ１」，「Ｄ２」，「Ｄ３」，「Ｄ４」の順に格納されている。
【００８３】
図１０−２に示すように、取出部３１０は、ローカルキュー１３１〜１３３から先頭のデータを一つずつ取り出して記憶部３２０に書き込む。このため、記憶部３２０には、ローカルキュー１３１の先頭のデータ「Ａ１」と、ローカルキュー１３２の先頭のデータ「Ｃ１」と、ローカルキュー１３３の先頭のデータ「Ｄ１」と、が書き込まれる。
【００８４】
図１０−３に示すように、ポリシ判断部３３０は、記憶部３２０のデータ「Ａ１」，「Ｃ１」，「Ｄ１」の組み合わせごとにソートポリシを決定する。具体的には、ポリシ判断部３３０は、データ「Ａ１」，「Ｃ１」を生成したスレッド「Ａ」，「Ｃ」の間には関連があるため、データ「Ａ１」，「Ｃ１」のソートポリシ１０３１をタイムスタンプによるソートポリシに決定する。
【００８５】
また、データ「Ａ１」，「Ｄ１」を生成したスレッド「Ａ」，「Ｄ」の間には関連がなく、スレッド「Ａ」，「Ｄ」ともにリアルタイム制約があり、スレッド「Ａ」，「Ｄ」ともに信頼性が要求されない。このため、ポリシ判断部３３０は、データ「Ａ１」，「Ｄ１」のソートポリシ１０３２をタイムスタンプによるソートポリシに決定する。
【００８６】
また、データ「Ｃ１」，「Ｄ１」を生成したスレッド「Ｃ」，「Ｄ」の間には関連がなく、スレッド「Ｃ」，「Ｄ」ともにリアルタイム制約があり、スレッド「Ｃ」，「Ｄ」ともに信頼性が要求されない。このため、ポリシ判断部３３０は、データ「Ｃ１」，「Ｄ１」のソートポリシ１０３３をタイムスタンプによるソートポリシに決定する。
【００８７】
図１０−４に示すように、ソート書込部３４０は、ポリシ判断部３３０によって決定された各ソートポリシに基づいて、記憶部３２０の各データのうちの最も優先されるデータを取り出して共有キュー１３５へ書き込む。ここでは、記憶部３２０の各データのうちのデータ「Ｄ１」のタイムスタンプが最も古く、データ「Ｄ１」が記憶部３２０から取り出されて共有キュー１３５へ書き込まれたとする。
【００８８】
図１０−５に示すように、取出部３１０は、ソート書込部３４０によって記憶部３２０から取り出されたデータ「Ｄ１」の出身キューであるローカルキュー１３３の先頭のデータを取り出して記憶部３２０へ書き込む。ここではデータ「Ｄ２」が記憶部３２０に書き込まれる。このように、ローカルキュー１３１〜１３３の先頭の各データを候補として記憶部３２０に移し、候補の中から最も優先されるデータを共有キュー１３５に移す処理を繰り返す。
【００８９】
以上説明したように、データ処理システムおよびデータ処理方法によれば、リアルタイム性が求められるスレッドのスループットを向上させることができる。たとえば、リアルタイム制約のあるスレッドのスループットを向上させ、リアルタイム制約を守ることができる。または、信頼性が求められる通信プロトコルを用いるスレッドのスループットを向上させ、信頼性を向上させることができる。
【００９０】
たとえば、データ処理システム１００において、データ処理装置１１１で実行されるスレッド１２１によってビデオチャットをしながら、同時にデータ処理装置１１２で実行されるスレッド１２２によってファイルのアップロードを行うとする。
【００９１】
ビデオチャットでは、一定の時間内に一定のパケットデータを送信することが求められる（リアルタイム制約がある）が、パケットデータの到着順序性やパケットロスに対する信頼性はそこまで求められない。一方、ファイルのアップロードでは、リアルタイム制約はないが、パケットデータの到着順序が守られなかったりパケットロスが発生したりした場合は再送要求を行うなど、信頼性が求められる。
【００９２】
ローカルキュー１３１にビデオチャットのパケットデータが格納され、ローカルキュー１３２にアップロードにかかるファイルが格納されていた場合に、管理ユニット１４０は、ローカルキュー１３１のパケットデータを先に共有キュー１３５へ移す。これにより、リアルタイム制約があるビデオチャットのパケットデータのスループットを向上させることができる。
【００９３】
また、スレッド１２１〜１２３ごとにローカルキュー（ローカルキュー１３１〜１３３）を設け、ローカルキュー１３１〜１３３のデータを管理ユニット１４０が非同期で共有キュー１３５に移すことができる。これにより、スレッド１２１〜１２３の間の排他制御を抑制し、スレッド１２１〜１２３の排他待ち時間を短くすることができる。
【００９４】
なお、本実施の形態で説明したデータ処理法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。このプログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。またこのプログラムは、インターネット等のネットワークを介して配布することが可能な伝送媒体であってもよい。
【符号の説明】
【００９５】
１００  データ処理システム
１３１〜１３３  ローカルキュー
１３５  共有キュー
２０１  バス
１０３１〜１０３３  ソートポリシ
【図１−１】
2013018230.tif 000003
【図１−２】
2013018230.tif 000004
【図２】
2013018230.tif 000005
【図３】
2013018230.tif 000006
【図４−１】
2013018230.tif 000007
【図４−２】
2013018230.tif 000008
【図４−３】
2013018230.tif 000009
【図５】
2013018230.tif 000010
【図６】
2013018230.tif 000011
【図７】
2013018230.tif 000012
【図８】
2013018230.tif 000013
【図９】
2013018230.tif 000014
【図１０−１】
2013018230.tif 000015
【図１０−２】
2013018230.tif 000016
【図１０−３】
2013018230.tif 000017
【図１０−４】
2013018230.tif 000018
【図１０−５】
2013018230.tif 000019
【手続補正書】
【提出日】平成26年1月17日(2014.1.17)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
第１スレッドを実行する第１データ処理装置と、
第２スレッドを実行する第２データ処理装置と、
前記第１データ処理装置と前記第２データ処理装置とで共有するメモリと、
前記第１スレッドおよび前記第２スレッドの前記メモリにアクセスする優先度を前記第１スレッドおよび前記第２スレッドのリアルタイム制約または通信プロトコルに基づいて設定する管理ユニットと
を含むことを特徴とするデータ処理システム。
【請求項２】
前記管理ユニットは、
前記リアルタイム制約を有するスレッドの優先度を高く設定する判断ユニットを含むこと
を特徴とする請求項１に記載のデータ処理システム。
【請求項３】
前記管理ユニットは、
前記通信プロトコルが所定の通信プロトコルであるスレッドの優先度を高く設定する判断ユニットを含むこと
を特徴とする請求項１に記載のデータ処理システム。
【請求項４】
前記第１スレッドの実行に基づいて生成される第１データを格納する第１ローカルキューと、
前記第２スレッドの実行に基づいて生成される第２データを格納する第２ローカルキューと、
前記第１ローカルキューおよび前記第２ローカルキューに格納される第１データおよび第２データを前記優先度に基づいてソートして格納するキューと
を含むことを特徴とする請求項１乃至請求項３の何れか一に記載のデータ処理システム。
【請求項５】
前記管理ユニットは、
前記第１スレッドおよび前記第２スレッドが前記リアルタイム制約を有さないとき、または、前記第１スレッドおよび前記第２スレッドの通信プロトコルが所定の通信プロトコルではないとき、前記優先度をタイムスタンプに基づいて設定すること
を特徴とする請求項１乃至請求項４の何れか一に記載のデータ処理システム。
【請求項６】
複数のデータ処理装置に含まれる第１データ処理装置によって実行される第１スレッドが第１データを出力し、
前記複数のデータ処理装置に含まれる第２データ処理装置によって実行される第２スレッドが第２データを出力し、
前記複数のデータ処理装置の一のデータ処理装置が、前記第１データ処理装置および前記第２データ処理装置で共有されるメモリへの前記第１データおよび前記第２データの書き込み順序を前記第１スレッドおよび前記第２スレッドのリアルタイム制約または通信プロトコルに基づいて設定すること
を特徴とするデータ処理方法。
【請求項７】
前記第１スレッドがリアルタイム制約を有するときは、前記第１データが前記第２データよりも先に前記メモリに書き込まれること
を特徴とする請求項６に記載のデータ処理方法。
【請求項８】
前記第１スレッドの通信プロトコルが所定の通信プロトコルであるときは、前記第１データが前記第２データよりも先に前記メモリに書き込まれること
を特徴とする請求項６に記載のデータ処理方法。
【請求項９】
前記第１スレッドおよび前記第２スレッドがリアルタイム制約を有しないとき、または、前記第１スレッドおよび前記第２スレッドの通信プロトコルが所定の通信プロトコルではないとき、前記書き込み順序を前記第１データおよび前記第２データのタイムスタンプに基づいて設定すること
を特徴とする請求項６乃至請求項８の何れか一に記載のデータ処理方法。
【請求項１０】
前記第１データを第１ローカルキューに格納し、
前記第２データを第２ローカルキューに格納し、
前記第１ローカルキューまたは前記第２ローカルキューから前記第１データまたは前記第２データを読み出して、前記書き込み順序に基づいて前記第１データおよび前記第２データを共通キューに書き込むこと
を特徴とする請求項６乃至請求項９の何れか一に記載のデータ処理方法。
【請求項１１】
第１スレッドの実行に基づいて生成される第１データを格納する第１ローカルキューと、
第２スレッドの実行に基づいて生成される第２データを格納する第２ローカルキューと、
前記第１スレッドおよび前記第２スレッドのリアルタイム制約または通信プロトコルに基づいてソートされた前記第１データおよび前記第２データを格納するキューと、
前記キューに格納される第１データおよび第２データが書き込まれるメモリと、
を含むことを特徴とするデータ処理システム。
【請求項１２】
前記第１スレッドがリアルタイム制約を有するときは、前記第１データが前記第２データよりも先に前記キューに書き込まれること
を特徴とする請求項１１に記載のデータ処理システム。
【請求項１３】
前記第１スレッドの通信プロトコルが所定の通信プロトコルであるときは、前記第１データが前記第２データよりも先に前記キューに書き込まれること
を特徴とする請求項１１に記載のデータ処理システム。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データを処理するデータ処理システムおよびデータ処理方法に関する。
【背景技術】
【０００２】
現在のコンピュータシステムにおいては、複数のソフトウェアによる一つのハードウェアの共有が可能なマルチタスクのＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ：オペレーティングシステム）が利用されている。たとえば、ネットワークアダプタが１つしかないパーソナルコンピュータ上でブラウザとメーラを同時に起動することが可能である。この場合に、たとえば、ブラウザによるログイン情報などの送信と、メーラによる電子メールの送信と、が同時に行われることが考えられる。
【０００３】
この場合は、ＯＳは、ブラウザおよびメーラからデータの送信要求を受け付けると、いったんメインメモリ上の一時領域である通信バッファに送信要求を格納する。その後、タイマー割り込みなどにより起動されたデバイスドライバが、通信バッファからデータを取り出し、ネットワークアダプタを用いて送信を行う。通信バッファは、たとえばＦＩＦＯ（Ｆｉｒｓｔ  Ｉｎ  Ｆｉｒｓｔ  Ｏｕｔ：先入れ先出し）のキューで実現される。キューはたとえばリングバッファにより実装される。
【０００４】
マルチプロセッサシステムやマルチコアシステムにおいては、複数のＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ：中央処理装置）がメモリ上の通信バッファに同時にアクセスすることにより通信バッファ内のデータが破壊される可能性がある。このため、ＣＰＵ間で排他制御を行うことによってデータの保護が行われる。
【０００５】
排他制御としては、ＭＵＴＥＸ（ＭＵＴｕａｌ  ＥＸｃｌｕｓｉｏｎ：相互排他）、セマフォ、スピンロックなどが挙げられる。これらの排他制御において、各ＣＰＵは、キューへの書き込みを行う前に、まずキューへのアクセス権を排他的に取得し、データの書き込み後にアクセス権を放棄する。一方、各ＣＰＵは、アクセス権の取得に失敗した場合は待機し（排他待ち）、アクセス権を取得してからデータの書き込みを行う。
【０００６】
したがって、排他制御を行うことにより、ある時刻にキューへのアクセス権を有するのは１つのＣＰＵ（スレッド）のみとなり、キューへの書き込みは逐次的に行われる。これにより、上書きなどによるパケットデータの破壊が回避される。
【０００７】
なお、プロセッサ間でデータを転送する技術において、メモリ上にプロセッサごとに独立して設けられたバッファ領域を介してデータを転送する方法が知られている（たとえば、下記特許文献１参照。）。また、ネットワークから受信したデータを受信バッファに格納し、受信バッファから読み出したデータを送信バッファに非同期に格納する方法が知られている（たとえば、下記特許文献２参照。）。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２００６−３０１８９４号公報
【特許文献２】特開平１０−１０７８５３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
しかしながら、上述した従来技術では、複数のスレッドが共有メモリにアクセスする場合に、リアルタイム性が求められるスレッドが他のスレッドより優先的に共有メモリにアクセスできるとは限らない。このため、リアルタイム性が求められるスレッドのスループットを向上させることができないという問題がある。
【００１０】
本発明は、上述した従来技術による問題点を解消するため、リアルタイム性が求められるスレッドのスループットを向上させることができるデータ処理システムおよびデータ処理方法を提供することを目的とする。
【課題を解決するための手段】
【００１１】
上述した課題を解決し、目的を達成するため、本発明の一側面によれば、複数のデータ処理装置に含まれる第１データ処理装置によって実行される第１スレッドが第１データを出力し、前記複数のデータ処理装置に含まれる第２データ処理装置によって実行される第２スレッドが第２データを出力し、前記複数のデータ処理装置の一のデータ処理装置が、前記第１データ処理装置および前記第２データ処理装置で共有されるメモリへの前記第１データおよび前記第２データの書き込み順序を前記第１スレッドおよび前記第２スレッドのリアルタイム制約または通信プロトコルに基づいて設定するデータ処理システムおよびデータ処理方法が提案される。
【発明の効果】
【００１２】
本発明の一側面によれば、リアルタイム性が求められるスレッドのスループットを向上させることができるという効果を奏する。
【図面の簡単な説明】
【００１３】
【図１−１】図１−１は、実施の形態にかかるデータ処理システムの一例を示す図である。
【図１−２】図１−２は、実施の形態にかかるデータ処理システムの他の例を示す図である。
【図２】図２は、データ処理システムのハードウェア構成例を示す図である。
【図３】図３は、管理ユニットの構成例を示す図である。
【図４−１】図４−１は、プロセステーブルの一例を示す図である。
【図４−２】図４−２は、制約テーブルの一例を示す図である。
【図４−３】図４−３は、信頼性テーブルの一例を示す図である。
【図５】図５は、管理ユニットによるキュー管理処理の一例を示すフローチャートである。
【図６】図６は、ソートポリシの判断処理の一例を示すフローチャートである。
【図７】図７は、スレッド間の関連の有無の判定処理の一例を示すフローチャートである。
【図８】図８は、リアルタイム制約の有無の判定処理の一例を示すフローチャートである。
【図９】図９は、信頼性の要否の判定処理の一例を示すフローチャートである。
【図１０−１】図１０−１は、キュー管理処理の一例を示す図（その１）である。
【図１０−２】図１０−２は、キュー管理処理の一例を示す図（その２）である。
【図１０−３】図１０−３は、キュー管理処理の一例を示す図（その３）である。
【図１０−４】図１０−４は、キュー管理処理の一例を示す図（その４）である。
【図１０−５】図１０−５は、キュー管理処理の一例を示す図（その５）である。
【発明を実施するための形態】
【００１４】
以下に図面を参照して、本発明にかかるデータ処理システムおよびデータ処理方法の実施の形態を詳細に説明する。
【００１５】
（実施の形態）
（実施の形態にかかるデータ処理システム）
図１−１は、実施の形態にかかるデータ処理システムの一例を示す図である。図１−１に示すように、実施の形態にかかるデータ処理システム１００は、データ処理装置１１１，１１２と、メモリ１３０と、管理ユニット１４０と、を備えている。
【００１６】
データ処理装置１１１は、データを処理する第１データ処理装置である。データ処理装置１１２は、データを処理する第２データ処理装置である。データ処理装置１１１，１１２のそれぞれはたとえばＣＰＵである。スレッド１２１は、データ処理装置１１１によって実行される第１スレッドである。スレッド１２２は、データ処理装置１１２によって実行される第２スレッドである。
【００１７】
メモリ１３０は、ローカルキュー１３１，１３２と、共有キュー１３５と、を備えている。ローカルキュー１３１は、スレッド１２１の実行に基づいて生成される第１データを格納する第１ローカルキューである。ローカルキュー１３２は、スレッド１２２の実行に基づいて生成される第２データを格納する第２ローカルキューである。このように、メモリ１３０には、データ処理装置１１１，１１２のそれぞれに対応してローカルキュー１３１，１３２が設けられる。
【００１８】
メモリ１３０のうちの共有キュー１３５の部分は、データ処理装置１１１とデータ処理装置１１２とで共有するメモリ（共通キュー）である。具体的には、共有キュー１３５は、ローカルキュー１３１およびローカルキュー１３２に格納される第１データおよび第２データを優先度に基づいてソートして格納するキューである。
【００１９】
管理ユニット１４０は、スレッド１２１，１２２の共有キュー１３５にアクセスする優先度（書き込み順序）をスレッド１２１，１２２のリアルタイム制約に基づいて設定する。たとえば、管理ユニット１４０は、リアルタイム制約を有するスレッドの優先度を、リアルタイム制約を有さないスレッドの優先度より高く設定する判断ユニットを含む。また、管理ユニット１４０は、スレッド１２１，１２２がリアルタイム制約を有さない場合は、優先度をタイムスタンプに基づいて設定してもよい。
【００２０】
または、管理ユニット１４０は、スレッド１２１，１２２の共有キュー１３５にアクセスする優先度をスレッド１２１，１２２の通信プロトコルに基づいて設定してもよい。たとえば、管理ユニット１４０は、通信プロトコルが所定の通信プロトコルであるスレッドの優先度を、通信プロトコルが所定の通信プロトコルでないスレッドの優先度より高く設定する判断ユニットを含む。また、管理ユニット１４０は、スレッド１２１，１２２の通信プロトコルが所定の通信プロトコルではない場合は、優先度をタイムスタンプに基づいて設定してもよい。
【００２１】
図１−２は、実施の形態にかかるデータ処理システムの他の例を示す図である。図１−２において、図１−１に示した部分と同様の部分については同一の符号を付して説明を省略する。図１−２に示すように、データ処理システム１００は、図１−１に示した構成に加えてデータ処理装置１１３を備えていてもよい。このように、データ処理システム１００は、３つのデータ処理装置（ＣＰＵ）を備えていてもよい。同様に、データ処理システム１００は、４つ以上のデータ処理装置（ＣＰＵ）を備えていてもよい。
【００２２】
スレッド１２３は、データ処理装置１１３によって実行されるスレッドである。メモリ１３０には、図１−１に示した構成に加えて、データ処理装置１１３に対応するローカルキュー１３３を設ける。ローカルキュー１３３は、スレッド１２３の実行に基づいて生成されるデータを格納するローカルキューである。
【００２３】
また、データ処理システム１００は、図１−１に示した構成に加えて通信部１５０を備えていてもよい。通信部１５０は、共有キュー１３５に書き込まれたデータを順次読み出し、読み出したデータを他の通信装置へ送信するネットワークアダプタである。たとえば、通信部１５０は、キャリア通信やアドホック通信などのネットワークアダプタである。
【００２４】
このように、共有キュー１３５は、たとえば通信部１５０による送信待ちのための通信バッファに適用することができる。ただし、共有キュー１３５は通信バッファに限らず、スピーカなどによる音声出力待ちのバッファなどにも適用可能である。以下、主に図１−２に示したデータ処理システム１００について説明する。
【００２５】
（データ処理システムのハードウェア構成）
図２は、データ処理システムのハードウェア構成例を示す図である。図２に示すように、データ処理システム１００は、ＣＰＵ２１１〜２１ｎ（ｎは２以上の自然数）と、メインメモリ２２０と、補助メモリ２３０と、ユーザインターフェース２４０と、通信インターフェース２５０と、を備えている。ＣＰＵ２１１〜２１ｎ、メインメモリ２２０、補助メモリ２３０、ユーザインターフェース２４０および通信インターフェース２５０は、バス２０１によって接続されている。
【００２６】
ＣＰＵ２１１〜２１ｎは、データ処理システム１００の全体の制御を司るマルチプロセッサである。メインメモリ２２０は、たとえばＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）である。メインメモリ２２０は、ＣＰＵ２１１〜２１ｎのワークエリアとして使用される。補助メモリ２３０は、たとえば、ハードディスクや光ディスクなどの不揮発メモリである。補助メモリ２３０には、データ処理システム１００を動作させる各種のプログラムが記憶されている。補助メモリ２３０に記憶されたプログラムは、メインメモリ２２０にロードされてＣＰＵ２１１〜２１ｎによって実行される。
【００２７】
ユーザインターフェース２４０は、たとえば、ユーザからの操作入力を受け付ける入力デバイスや、ユーザへ情報を出力する出力デバイスなどを含む。入力デバイスは、たとえばキー（たとえばキーボード）やリモコンなどによって実現することができる。出力デバイスは、たとえばディスプレイやスピーカなどによって実現することができる。また、タッチパネルなどによって入力デバイスおよび出力デバイスを実現してもよい。ユーザインターフェース２４０はＣＰＵ２１１〜２１ｎによって制御される。
【００２８】
通信インターフェース２５０は、たとえば、有線や無線によってデータ処理システム１００の外部との間で通信を行う通信インターフェースである。通信インターフェース２５０はＣＰＵ２１１〜２１ｎによって制御される。
【００２９】
図１−１，図１−２に示したデータ処理装置１１１〜１１３は、たとえばＣＰＵ２１１〜２１ｎによって実現することができる。メモリ１３０は、たとえばメインメモリ２２０によって実現することができる。管理ユニット１４０は、たとえば、ＣＰＵ２１１〜２１ｎによって実行されるＯＳやアプリケーションの機能として実現することができる。通信部１５０は、たとえば通信インターフェース２５０によって実現することができる。
【００３０】
（管理ユニットの構成）
図３は、管理ユニットの構成例を示す図である。図３に示すように、管理ユニット１４０は、取出部３１０と、記憶部３２０と、ポリシ判断部３３０と、プロセステーブル３３１と、制約テーブル３３２と、信頼性テーブル３３３と、ソート書込部３４０と、を備えている。
【００３１】
取出部３１０、ポリシ判断部３３０およびソート書込部３４０は、たとえば図２に示したＣＰＵ２１１〜２１ｎのいずれかによって実現することができる。記憶部３２０は、たとえば図２に示したメインメモリ２２０によって実現することができる。プロセステーブル３３１、制約テーブル３３２および信頼性テーブル３３３は、たとえば図２に示した補助メモリ２３０に記憶されている。また、プロセステーブル３３１、制約テーブル３３２および信頼性テーブル３３３は、システム設計時に予め記憶されていてもよいし、アプリケーションのインストール時に記憶または更新されてもよい。
【００３２】
取出部３１０は、ローカルキュー１３１〜１３３（各ローカルキュー）のうちのデータが格納されたローカルキューからデータを１つずつ取り出して記憶部３２０に格納する。また、取出部３１０は、ローカルキュー１３１〜１３３のうちの記憶部３２０から取り出されたデータの出身キューがソート書込部３４０から通知されると、通知された出身キューに格納されたデータを１つ読み出して記憶部３２０に書き込む。これにより、記憶部３２０には、ローカルキュー１３１〜１３３からのデータが１つずつ記憶される。
【００３３】
ポリシ判断部３３０は、記憶部３２０に記憶された各データの各組み合わせについてソートポリシを判断する判断ユニットである。たとえば、記憶部３２０にはデータＡ，Ｂ，Ｃが記憶されているとする。ポリシ判断部３３０は、データＡ，Ｂ、データＢ，Ｃ、データＡ，Ｃの各組み合わせについてソートポリシを決定する。ポリシ判断部３３０は、決定した各組み合わせのソートポリシをソート書込部３４０へ通知する。
【００３４】
ソート書込部３４０は、ポリシ判断部３３０から通知された各組み合わせのソートポリシに基づいて、記憶部３２０の各組み合わせのデータをソートする。たとえば、ポリシ判断部３３０から通知された各ソートポリシにより、データＡ，Ｂの組み合わせではデータＡが先頭となり、データＢ，Ｃの組み合わせではデータＢが先頭となり、データＡ，Ｃの組み合わせではデータＣが先頭となったとする。
【００３５】
ソート書込部３４０は、３つの組み合わせのうちの２つの組み合わせで先頭となったデータＡを、データＡ，Ｂ，Ｃで最も優先されるデータとして決定する。ソート書込部３４０は、最も優先されるデータとして決定したデータＡを記憶部３２０から取り出して共有キュー１３５に書き込む。
【００３６】
なお、ソート書込部３４０によるデータのソートはこれに限らない。たとえば、記憶部３２０に記憶された各データには各スレッドによって設定された優先度が設定されていてもよい。そして、ソート書込部３４０は、ポリシ判断部３３０から通知されたソートポリシに基づいて、記憶部３２０に記憶された各データの優先度を変更する。たとえば、ソート書込部３４０は、リアルタイム制約のあるスレッドのデータを優先するソートポリシが通知された場合は、リアルタイム制約のあるスレッドのデータの優先度を上げる。そして、ソート書込部３４０は、ソートポリシに基づいて変更した優先度によって記憶部３２０に記憶された各データをソートしてもよい。
【００３７】
これにより、スレッド１２１〜１２３の共有キュー１３５にアクセスする優先度（書き込み順序）をスレッド１２１〜１２３のリアルタイム制約や通信プロトコルに基づいて設定することができる。また、管理ユニット１４０は、ローカルキュー１３１〜１３３のデータが一定量を超えた場合に、一定量を超えたデータを破棄してもよい。
【００３８】
（各テーブルについて）
図４−１は、プロセステーブルの一例を示す図である。図４−１に示すプロセステーブル３３１は、図３に示したプロセステーブル３３１の一例である。図４−１に示すように、プロセステーブル３３１は、「プログラムイメージ」と、「プロセスＩＤ」と、「親プロセスＩＤ」と、「プロセスグループＩＤ」と、「使用プロトコル」と、「使用ポート番号」と、を項目として含んでいる。プロセステーブル３３１の各行はデータ処理装置１１１〜１１３によって実行される各プロセスを示している。
【００３９】
「プログラムイメージ」は、プロセスを実行しているプログラム名を示している。なお、プロセステーブル３３１は、「プログラムイメージ」に代えてプロセスを実行しているプログラムのＩＤなどを項目として含んでいてもよい。
【００４０】
「プロセスＩＤ」は、プロセスを識別するＩＤである。「親プロセスＩＤ」は、プロセスの親プロセスを識別するＩＤである。「プロセスグループＩＤ」は、プロセスが属するプロセスグループを識別するＩＤである。「使用プロトコル」は、プロセスが生成したデータの送信に使用する通信プロトコルである。「使用ポート番号」は、プロセスが生成したデータの送信に使用するポート番号である。
【００４１】
たとえば１行目が示す「プロセスＩＤ」が「１２４０」のプロセスは、「プロセスＩＤ」が「１１６４」のプロセスから生成されたプロセスである。また、１行目が示す「プロセスＩＤ」が「１２４０」のプロセスは、通信を行わないプロセスであり、「使用プロトコル」および「使用ポート番号」は対応付けられていない。
【００４２】
２行目が示す「プロセスＩＤ」が「１２０４」のプロセスは、１行目が示す「プロセスＩＤ」が「１２４０」のプロセスから生成されたプロセスである。２行目が示す「プロセスＩＤ」が「１２０４」のプロセスは、生成された際に、「プロセスグループＩＤ」が「１２０４」の新たなプロセスグループのルートに設定されている。
【００４３】
３行目が示す「プロセスＩＤ」が「１７３２」のプロセスは、２行目が示す「プロセスＩＤ」が「１２０４」のプロセスから生成されたプロセスである。また、３行目が示す「プロセスＩＤ」が「１７３２」のプロセスには、通信を行うために「使用プロトコル」の「ＴＣＰ」および「使用ポート番号」の「１０６８」が割り当てられている。
【００４４】
４行目が示す「プロセスＩＤ」が「５０５６」のプロセスは、２行目が示す「プロセスＩＤ」が「１２０４」のプロセスから生成されたプロセスである。また、４行目が示す「プロセスＩＤ」が「５０５６」のプロセスには、通信を行うために「使用プロトコル」の「ＴＣＰ」および「使用ポート番号」の「１３９１」が割り当てられている。
【００４５】
図４−２は、制約テーブルの一例を示す図である。図４−２に示す制約テーブル３３２は、図３に示した制約テーブル３３２の一例である。図４−２に示すように、制約テーブル３３２は、「プログラムイメージ」と、「使用プロトコル」と、「制約フラグ」と、を項目として含んでいる。制約テーブル３３２の各行はデータ処理装置１１１〜１１３によって実行される各プロセスを示している。
【００４６】
「プログラムイメージ」および「使用プロトコル」は、図４−１に示したプロセステーブル３３１の「プログラムイメージ」および「使用プロトコル」に対応している。「制約フラグ」は、プロセスにリアルタイム制約があるか否かを示す情報である。具体的には、「制約フラグ」が「０」の場合はプロセスにリアルタイム制約がないことを示す。「制約フラグ」が「１」の場合はプロセスにリアルタイム制約があることを示す。
【００４７】
図４−３は、信頼性テーブルの一例を示す図である。図４−３に示す信頼性テーブル３３３は、図３に示した信頼性テーブル３３３の一例である。図４−３に示すように、信頼性テーブル３３３は、「使用プロトコル」と、「信頼性フラグ」と、を項目として含んでいる。信頼性テーブル３３３の各行はデータ処理装置１１１〜１１３によって実行される各プロセスが使用する通信プロトコルを示している。
【００４８】
「使用プロトコル」は、図４−１に示したプロセステーブル３３１の「使用プロトコル」に対応している。「信頼性フラグ」は、通信プロトコルの信頼性の要否を示す情報である。具体的には、「信頼性フラグ」が「１」の場合は通信プロトコルに信頼性が求められることを示す。また、「信頼性フラグ」が「０」の場合は通信プロトコルに信頼性が求められないことを示す。
【００４９】
（管理ユニットによるキュー管理処理）
図５は、管理ユニットによるキュー管理処理の一例を示すフローチャートである。管理ユニット１４０は、たとえば図５に示す各ステップを実行する。まず、管理ユニット１４０は、管理ユニット１４０によるキュー管理処理の割り込みタイミングか否かを判断し（ステップＳ５０１）、割り込みタイミングになるまで待つ（ステップＳ５０１：Ｎｏのループ）。
【００５０】
ステップＳ５０１において、割り込みタイミングになると（ステップＳ５０１：Ｙｅｓ）、取出部３１０が、各ローカルキュー（ローカルキュー１３１〜１３３）の少なくともいずれかにデータが書き込まれているか否かを判断する（ステップＳ５０２）。各ローカルキューのいずれにもデータが書き込まれていない場合（ステップＳ５０２：Ｎｏ）は、管理ユニット１４０は、ステップＳ５０１へ戻る。
【００５１】
ステップＳ５０２において、各ローカルキューの少なくともいずれかにデータが書き込まれている場合（ステップＳ５０２：Ｙｅｓ）は、取出部３１０が、各ローカルキューからデータを１つずつ取り出して記憶部３２０に書き込む（ステップＳ５０３）。つぎに、ポリシ判断部３３０が、記憶部３２０に書き込まれた各データの組み合わせごとにソートポリシを決定する（ステップＳ５０４）。ソートポリシの判断処理については後述する（たとえば図６参照）。
【００５２】
つぎに、ソート書込部３４０が、ステップＳ５０４によって決定されたソートポリシに基づいて、記憶部３２０の各データのうちの最も優先されるデータを記憶部３２０から取り出して共有キュー１３５に書き込む（ステップＳ５０５）。つぎに、取出部３１０が、ステップＳ５０５によって取り出されたデータの出身キューからデータを１つ取り出して記憶部３２０に書き込む（ステップＳ５０６）。
【００５３】
つぎに、管理ユニット１４０は、割り込み処理を終了するか否かを判断する（ステップＳ５０７）。割り込み処理を終了しない場合（ステップＳ５０７：Ｎｏ）は、管理ユニット１４０は、ステップＳ５０４へ戻る。割り込み処理を終了する場合（ステップＳ５０７：Ｙｅｓ）は、管理ユニット１４０は、ステップＳ５０１へ戻る。
【００５４】
以上の各ステップにより、管理ユニット１４０は、スレッド１２１〜１２３によってローカルキュー１３１〜１３３に書き込まれたデータを、ソートポリシに基づく順序で共有キュー１３５に移すことができる。
【００５５】
（ソートポリシの判断処理）
図６は、ソートポリシの判断処理の一例を示すフローチャートである。ポリシ判断部３３０は、図５に示したステップＳ５０４において、記憶部３２０の各データの組み合わせごとに、たとえば図６に示す各ステップを実行することによりソートポリシを決定する。まず、ポリシ判断部３３０は、対象の組み合わせにかかる各データのスレッド間に関連があるか否かを判断する（ステップＳ６０１）。スレッド間の関連の有無の判定処理については後述する（たとえば図７参照）。
【００５６】
ステップＳ６０１において、スレッド間に関連がある場合（ステップＳ６０１：Ｙｅｓ）は、ステップＳ６０９へ移行する。スレッド間に関連がない場合（ステップＳ６０１：Ｎｏ）は、ポリシ判断部３３０は、対象の組み合わせにかかる各データの各スレッドについてリアルタイム制約の有無を判定する（ステップＳ６０２）。リアルタイム制約の有無の判定処理については後述する（たとえば図８参照）。
【００５７】
つぎに、ポリシ判断部３３０は、ステップＳ６０２による判定結果に基づいて、対象の組み合わせにかかる各データの各スレッドのうちの一方のスレッドのみにリアルタイム制約があるか否かを判断する（ステップＳ６０３）。一方のスレッドのみにリアルタイム制約がある場合（ステップＳ６０３：Ｙｅｓ）は、ポリシ判断部３３０は、対象の組み合わせのソートポリシを、リアルタイム制約があるスレッドを優先するソートポリシに決定し（ステップＳ６０４）、一連の処理を終了する。
【００５８】
ステップＳ６０３において、両方のスレッドにリアルタイム制約があり、または両方のスレッドにリアルタイム制約がない場合（ステップＳ６０３：Ｎｏ）は、ポリシ判断部３３０は、ステップＳ６０５へ移行する。すなわち、ポリシ判断部３３０は、ステップＳ６０２による判定結果に基づいて、対象の組み合わせにかかる各データの各スレッドのうちの両方のスレッドにリアルタイム制約があるか否かを判断する（ステップＳ６０５）。
【００５９】
ステップＳ６０５において、両方のスレッドにリアルタイム制約がない場合（ステップＳ６０５：Ｎｏ）は、ポリシ判断部３３０は、ステップＳ６０９へ移行する。両方のスレッドにリアルタイム制約がある場合（ステップＳ６０５：Ｙｅｓ）は、ポリシ判断部３３０は、対象の組み合わせにかかる各データの各スレッドについて信頼性の要否を判定する（ステップＳ６０６）。信頼性の要否の判定処理については後述する（たとえば図９参照）。
【００６０】
つぎに、ポリシ判断部３３０は、ステップＳ６０６による判定結果に基づいて、対象の組み合わせにかかる各データの各スレッドのうちの一方のスレッドのみに信頼性が必要か否かを判断する（ステップＳ６０７）。一方のスレッドのみに信頼性が必要である場合（ステップＳ６０７：Ｙｅｓ）は、ポリシ判断部３３０は、対象の組み合わせのソートポリシを、信頼性が必要なスレッドを優先するソートポリシに決定し（ステップＳ６０８）、一連の処理を終了する。
【００６１】
ステップＳ６０７において、各スレッドに信頼性が必要であり、または各スレッドに信頼性が必要でない場合（ステップＳ６０７：Ｎｏ）は、ポリシ判断部３３０は、ステップＳ６０９へ移行する。すなわち、ポリシ判断部３３０は、対象の組み合わせのソートポリシを、タイムスタンプが古いスレッドを優先するソートポリシに決定し（ステップＳ６０９）、一連の処理を終了する。
【００６２】
以上の各ステップにより、ポリシ判断部３３０は、記憶部３２０の各データの組み合わせごとに、スレッド間の関連の有無、リアルタイム制約の有無および信頼性の要否に基づいてソートポリシを決定することができる。
【００６３】
たとえば、スレッド間の関連の有無による判断を行い、スレッド間に関連がある場合はタイムスタンプによるソートポリシを選択することができる。これにより、関連のある各スレッドが生成したデータの順序を管理ユニット１４０により変えてしまい、各スレッドの動作が不安定になることを回避することができる。
【００６４】
また、スレッド間に関連がある場合は、スレッド間で連携を取り合ってお互いに調整しながら共有キュー１３５にデータを書き込むことが可能である。このため、タイムスタンプによるソートポリシを選択しても、リアルタイム性が求められるスレッドのスループットが低下することを回避することができる。
【００６５】
また、リアルタイム制約の有無による判断を行い、一方のスレッドにのみリアルタイム制約がある場合は、リアルタイム制約があるスレッドのデータを優先するソートポリシを選択することができる。これにより、リアルタイム制約があるスレッドのデータを優先的に共有キュー１３５に移すことができる。このため、リアルタイム性が求められるスレッドのスループットを向上させることができる。また、両方のスレッドにリアルタイム制約がない場合は、タイムスタンプによるソートポリシを選択することができる。
【００６６】
また、信頼性の要否による判断を行い、一方のスレッドにのみ信頼性が必要である場合は、信頼性が必要であるスレッドのデータを優先するソートポリシを選択することができる。これにより、信頼性が必要であるスレッドのデータを優先的に共有キュー１３５に移すことができる。このため、信頼性が必要であるスレッドのスループットを向上させ、信頼性を向上させることができる。
【００６７】
なお、ソートポリシの決定処理はこれに限らない。たとえば、図６に示した各ステップにおいて、スレッド間の関連の有無による判断（ステップＳ６０１）は省いてもよい。また、図６に示した各ステップにおいて、リアルタイム制約の有無による判断（ステップＳ６０２〜Ｓ６０５）は省いてもよい。また、図６に示した各ステップにおいて、信頼性の要否による判断（ステップＳ６０６〜Ｓ６０８）は省いてもよい。
【００６８】
図７は、スレッド間の関連の有無の判定処理の一例を示すフローチャートである。ポリシ判断部３３０は、図６に示したステップＳ６０１において、たとえば図７に示す各ステップを実行することによってスレッド間の関連の有無を判定する。まず、ポリシ判断部３３０は、対象の組み合わせにかかる各データのヘッダから各データの「使用プロトコル」と「ポート番号」を取得する（ステップＳ７０１）。
【００６９】
つぎに、ポリシ判断部３３０は、ステップＳ７０１によって取得した「使用プロトコル」と「ポート番号」およびプロセステーブル３３１から各データの「親プロセスＩＤ」を特定する（ステップＳ７０２）。具体的には、ポリシ判断部３３０は、プロセステーブル３３１から、取得した「使用プロトコル」と「ポート番号」の組み合わせに対応する「親プロセスＩＤ」を特定する。
【００７０】
つぎに、ポリシ判断部３３０は、ステップＳ７０２によって特定した各データの「親プロセスＩＤ」が同一か否かを判断する（ステップＳ７０３）。各データの「親プロセスＩＤ」が同一である場合（ステップＳ７０３：Ｙｅｓ）は、ポリシ判断部３３０は、対象の組み合わせにかかる各データの各スレッドに関連があると判定し（ステップＳ７０４）、一連の処理を終了する。各データの「親プロセスＩＤ」が同一でない場合（ステップＳ７０３：Ｎｏ）は、ポリシ判断部３３０は、対象の組み合わせにかかる各データの各スレッドに関連がないと判定し（ステップＳ７０５）、一連の処理を終了する。
【００７１】
以上の各ステップにより、ポリシ判断部３３０は、対象の組み合わせにかかる各データの各スレッドの関連の有無を判定することができる。なお、各データの「親プロセスＩＤ」が同一か否かによって各スレッドの関連の有無を判定する処理について説明したが、各スレッドの関連の有無を判定する処理はこれに限らない。たとえば、各データの「プロセスグループＩＤ」が同一か否かによって各スレッドの関連の有無を判定してもよい。
【００７２】
図８は、リアルタイム制約の有無の判定処理の一例を示すフローチャートである。ポリシ判断部３３０は、図６に示したステップＳ６０２において、たとえば図８に示す各ステップを実行することによって各スレッドについてリアルタイム制約の有無を判定する。まず、ポリシ判断部３３０は、対象の組み合わせにかかる各データのヘッダから各データの「使用プロトコル」と「ポート番号」を取得する（ステップＳ８０１）。
【００７３】
つぎに、ポリシ判断部３３０は、ステップＳ８０１によって取得した「使用プロトコル」と「ポート番号」およびプロセステーブル３３１から各データの「プログラムイメージ」を特定する（ステップＳ８０２）。具体的には、ポリシ判断部３３０は、プロセステーブル３３１から、取得した「使用プロトコル」と「ポート番号」の組み合わせに対応する「プログラムイメージ」を特定する。
【００７４】
つぎに、ポリシ判断部３３０は、ステップＳ８０１によって取得した「使用プロトコル」とステップＳ８０２によって特定した「プログラムイメージ」および制約テーブル３３２から各データの「制約フラグ」を取得し（ステップＳ８０３）、一連の処理を終了する。具体的には、ポリシ判断部３３０は、制約テーブル３３２から、「使用プロトコル」と「プログラムイメージ」の組み合わせに対応する「制約フラグ」を取得する。
【００７５】
以上の各ステップにより、ポリシ判断部３３０は、対象の組み合わせにかかる各データの各スレッドについて、リアルタイム制約の有無を示す「制約フラグ」を取得し、リアルタイム制約の有無を判定することができる。
【００７６】
図９は、信頼性の要否の判定処理の一例を示すフローチャートである。ポリシ判断部３３０は、図６に示したステップＳ６０６において、たとえば図９に示す各ステップを実行することによって各スレッドについて信頼性の要否を判定する。まず、ポリシ判断部３３０は、対象の組み合わせにかかる各データのヘッダから各データの「使用プロトコル」を取得する（ステップＳ９０１）。
【００７７】
つぎに、ポリシ判断部３３０は、ステップＳ９０１によって取得した「使用プロトコル」および信頼性テーブル３３３から各データの「信頼性フラグ」を取得し（ステップＳ９０２）、一連の処理を終了する。具体的には、ポリシ判断部３３０は、信頼性テーブル３３３から、「使用プロトコル」に対応する「信頼性フラグ」を取得する。
【００７８】
以上の各ステップにより、ポリシ判断部３３０は、対象の組み合わせにかかる各データの各スレッドについて、信頼性の要否を示す「信頼性フラグ」を取得し、信頼性の要否を判定することができる。
【００７９】
（キュー管理処理の例）
図１０−１〜図１０−５は、キュー管理処理の一例を示す図である。図１０−１〜図１０−５において、図１−２に示した部分と同様の部分については同一の符号を付して説明を省略する。図１０−１に示すように、データ処理装置１１１はスレッド「Ａ」およびスレッド「Ｂ」を実行し、データ処理装置１１２はスレッド「Ｃ」を実行し、データ処理装置１１３はスレッド「Ｄ」を実行しているとする。スレッド「Ａ」は、スレッド「Ｃ」と関連があり、リアルタイム制約があり、信頼性が要求されないスレッドである。
【００８０】
スレッド「Ｂ」は、他のスレッドと関連がなく、リアルタイム制約があり、信頼性が要求されるスレッドである。スレッド「Ｃ」は、スレッド「Ａ」と関連があり、リアルタイム制約があり、信頼性が要求されないスレッドである。スレッド「Ｄ」は、他のスレッドと関連がなく、リアルタイム制約があり、信頼性が要求されないスレッドである。
【００８１】
ローカルキュー１３１には、スレッド「Ａ」の実行に基づいて生成されたデータ「Ａ１」，「Ａ２」と、スレッド「Ｂ」の実行に基づいて生成されたデータ「Ｂ１」，「Ｂ２」と、が格納されている。また、ローカルキュー１３１の各データは、データ「Ａ１」，「Ｂ１」，「Ａ２」，「Ｂ２」の順に格納されている。
【００８２】
ローカルキュー１３２には、スレッド「Ｃ」の実行に基づいて生成されたデータ「Ｃ１」〜「Ｃ４」が格納されている。また、ローカルキュー１３２の各データは、データ「Ｃ１」，「Ｃ２」，「Ｃ３」，「Ｃ４」の順に格納されている。ローカルキュー１３３には、スレッド「Ｄ」の実行に基づいて生成されたデータ「Ｄ１」〜「Ｄ４」が格納されている。また、ローカルキュー１３３の各データは、データ「Ｄ１」，「Ｄ２」，「Ｄ３」，「Ｄ４」の順に格納されている。
【００８３】
図１０−２に示すように、取出部３１０は、ローカルキュー１３１〜１３３から先頭のデータを一つずつ取り出して記憶部３２０に書き込む。このため、記憶部３２０には、ローカルキュー１３１の先頭のデータ「Ａ１」と、ローカルキュー１３２の先頭のデータ「Ｃ１」と、ローカルキュー１３３の先頭のデータ「Ｄ１」と、が書き込まれる。
【００８４】
図１０−３に示すように、ポリシ判断部３３０は、記憶部３２０のデータ「Ａ１」，「Ｃ１」，「Ｄ１」の組み合わせごとにソートポリシを決定する。具体的には、ポリシ判断部３３０は、データ「Ａ１」，「Ｃ１」を生成したスレッド「Ａ」，「Ｃ」の間には関連があるため、データ「Ａ１」，「Ｃ１」のソートポリシ１０３１をタイムスタンプによるソートポリシに決定する。
【００８５】
また、データ「Ａ１」，「Ｄ１」を生成したスレッド「Ａ」，「Ｄ」の間には関連がなく、スレッド「Ａ」，「Ｄ」ともにリアルタイム制約があり、スレッド「Ａ」，「Ｄ」ともに信頼性が要求されない。このため、ポリシ判断部３３０は、データ「Ａ１」，「Ｄ１」のソートポリシ１０３２をタイムスタンプによるソートポリシに決定する。
【００８６】
また、データ「Ｃ１」，「Ｄ１」を生成したスレッド「Ｃ」，「Ｄ」の間には関連がなく、スレッド「Ｃ」，「Ｄ」ともにリアルタイム制約があり、スレッド「Ｃ」，「Ｄ」ともに信頼性が要求されない。このため、ポリシ判断部３３０は、データ「Ｃ１」，「Ｄ１」のソートポリシ１０３３をタイムスタンプによるソートポリシに決定する。
【００８７】
図１０−４に示すように、ソート書込部３４０は、ポリシ判断部３３０によって決定された各ソートポリシに基づいて、記憶部３２０の各データのうちの最も優先されるデータを取り出して共有キュー１３５へ書き込む。ここでは、記憶部３２０の各データのうちのデータ「Ｄ１」のタイムスタンプが最も古く、データ「Ｄ１」が記憶部３２０から取り出されて共有キュー１３５へ書き込まれたとする。
【００８８】
図１０−５に示すように、取出部３１０は、ソート書込部３４０によって記憶部３２０から取り出されたデータ「Ｄ１」の出身キューであるローカルキュー１３３の先頭のデータを取り出して記憶部３２０へ書き込む。ここではデータ「Ｄ２」が記憶部３２０に書き込まれる。このように、ローカルキュー１３１〜１３３の先頭の各データを候補として記憶部３２０に移し、候補の中から最も優先されるデータを共有キュー１３５に移す処理を繰り返す。
【００８９】
以上説明したように、データ処理システムおよびデータ処理方法によれば、リアルタイム性が求められるスレッドのスループットを向上させることができる。たとえば、リアルタイム制約のあるスレッドのスループットを向上させ、リアルタイム制約を守ることができる。または、信頼性が求められる通信プロトコルを用いるスレッドのスループットを向上させ、信頼性を向上させることができる。
【００９０】
たとえば、データ処理システム１００において、データ処理装置１１１で実行されるスレッド１２１によってビデオチャットをしながら、同時にデータ処理装置１１２で実行されるスレッド１２２によってファイルのアップロードを行うとする。
【００９１】
ビデオチャットでは、一定の時間内に一定のパケットデータを送信することが求められる（リアルタイム制約がある）が、パケットデータの到着順序性やパケットロスに対する信頼性はそこまで求められない。一方、ファイルのアップロードでは、リアルタイム制約はないが、パケットデータの到着順序が守られなかったりパケットロスが発生したりした場合は再送要求を行うなど、信頼性が求められる。
【００９２】
ローカルキュー１３１にビデオチャットのパケットデータが格納され、ローカルキュー１３２にアップロードにかかるファイルが格納されていた場合に、管理ユニット１４０は、ローカルキュー１３１のパケットデータを先に共有キュー１３５へ移す。これにより、リアルタイム制約があるビデオチャットのパケットデータのスループットを向上させることができる。
【００９３】
また、スレッド１２１〜１２３ごとにローカルキュー（ローカルキュー１３１〜１３３）を設け、ローカルキュー１３１〜１３３のデータを管理ユニット１４０が非同期で共有キュー１３５に移すことができる。これにより、スレッド１２１〜１２３の間の排他制御を抑制し、スレッド１２１〜１２３の排他待ち時間を短くすることができる。
【００９４】
なお、本実施の形態で説明したデータ処理法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。このプログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。またこのプログラムは、インターネット等のネットワークを介して配布することが可能な伝送媒体であってもよい。
【００９５】
上述した実施の形態に関し、さらに以下の付記を開示する。
【００９６】
（付記１）第１スレッドを実行する第１データ処理装置と、
第２スレッドを実行する第２データ処理装置と、
前記第１データ処理装置と前記第２データ処理装置とで共有するメモリと、
前記第１スレッドおよび前記第２スレッドの前記メモリにアクセスする優先度を前記第１スレッドおよび前記第２スレッドのリアルタイム制約または通信プロトコルに基づいて設定する管理ユニットと
を含むことを特徴とするデータ処理システム。
【００９７】
（付記２）前記管理ユニットは、
前記リアルタイム制約を有するスレッドの優先度を高く設定する判断ユニットを含むこと
を特徴とする付記１に記載のデータ処理システム。
【００９８】
（付記３）前記管理ユニットは、
前記通信プロトコルが所定の通信プロトコルであるスレッドの優先度を高く設定する判断ユニットを含むこと
を特徴とする付記１に記載のデータ処理システム。
【００９９】
（付記４）前記第１スレッドの実行に基づいて生成される第１データを格納する第１ローカルキューと、
前記第２スレッドの実行に基づいて生成される第２データを格納する第２ローカルキューと、
前記第１ローカルキューおよび前記第２ローカルキューに格納される第１データおよび第２データを前記優先度に基づいてソートして格納するキューと
を含むことを特徴とする付記１乃至付記３の何れか一に記載のデータ処理システム。
【０１００】
（付記５）前記管理ユニットは、
前記第１スレッドおよび前記第２スレッドが前記リアルタイム制約を有さないとき、または、前記第１スレッドおよび前記第２スレッドの通信プロトコルが所定の通信プロトコルではないとき、前記優先度をタイムスタンプに基づいて設定すること
を特徴とする付記１乃至付記４の何れか一に記載のデータ処理システム。
【０１０１】
（付記６）前記第１データおよび前記第２データがソートして格納された前記キューからデータを順次読み出し、読み出したデータを送信する通信部
を含むことを特徴とする付記４に記載のデータ処理システム。
【０１０２】
（付記７）複数のデータ処理装置に含まれる第１データ処理装置によって実行される第１スレッドが第１データを出力し、
前記複数のデータ処理装置に含まれる第２データ処理装置によって実行される第２スレッドが第２データを出力し、
前記複数のデータ処理装置の一のデータ処理装置が、前記第１データ処理装置および前記第２データ処理装置で共有されるメモリへの前記第１データおよび前記第２データの書き込み順序を前記第１スレッドおよび前記第２スレッドのリアルタイム制約または通信プロトコルに基づいて設定すること
を特徴とするデータ処理方法。
【０１０３】
（付記８）前記第１スレッドがリアルタイム制約を有するときは、前記第１データが前記第２データよりも先に前記メモリに書き込まれること
を特徴とする付記７に記載のデータ処理方法。
【０１０４】
（付記９）前記第１スレッドの通信プロトコルが所定の通信プロトコルであるときは、前記第１データが前記第２データよりも先に前記メモリに書き込まれること
を特徴とする付記７に記載のデータ処理方法。
【０１０５】
（付記１０）前記第１スレッドおよび前記第２スレッドがリアルタイム制約を有しないとき、または、前記第１スレッドおよび前記第２スレッドの通信プロトコルが所定の通信プロトコルではないとき、前記書き込み順序を前記第１データおよび前記第２データのタイムスタンプに基づいて設定すること
を特徴とする付記７乃至付記９の何れか一に記載のデータ処理方法。
【０１０６】
（付記１１）前記第１データを第１ローカルキューに格納し、
前記第２データを第２ローカルキューに格納し、
前記第１ローカルキューまたは前記第２ローカルキューから前記第１データまたは前記第２データを読み出して、前記書き込み順序に基づいて前記第１データおよび前記第２データを共通キューに書き込むこと
を特徴とする付記７乃至付記１０の何れか一に記載のデータ処理方法。
【０１０７】
（付記１２）前記第１データおよび前記第２データがソートして格納された前記共通キューからデータを順次読み出し、読み出したデータを送信すること
を特徴とする付記１１に記載のデータ処理方法。
【０１０８】
（付記１３）第１スレッドの実行に基づいて生成される第１データを格納する第１ローカルキューと、
第２スレッドの実行に基づいて生成される第２データを格納する第２ローカルキューと、
前記第１スレッドおよび前記第２スレッドのリアルタイム制約または通信プロトコルに基づいてソートされた前記第１データおよび前記第２データを格納するキューと、
前記キューに格納される第１データおよび第２データが書き込まれるメモリと、
を含むことを特徴とするデータ処理システム。
【０１０９】
（付記１４）前記第１スレッドがリアルタイム制約を有するときは、前記第１データが前記第２データよりも先に前記キューに書き込まれること
を特徴とする付記１３に記載のデータ処理システム。
【０１１０】
（付記１５）前記第１スレッドの通信プロトコルが所定の通信プロトコルであるときは、前記第１データが前記第２データよりも先に前記キューに書き込まれること
を特徴とする付記１３に記載のデータ処理システム。
【０１１１】
（付記１６）前記第１データおよび前記第２データがソートして格納された前記キューからデータを順次読み出し、読み出したデータを送信する通信部
を含むことを特徴とする付記１３乃至付記１５の何れか一に記載のデータ処理システム。
【符号の説明】
【０１１２】
１００  データ処理システム
１３１〜１３３  ローカルキュー
１３５  共有キュー
２０１  バス
１０３１〜１０３３  ソートポリシ
【国際調査報告】
2013018230.tif 000020
2013018230.tif 000021
2013018230.tif 000022
2013018230.tif 000023