(57)【要約】【課題】プロセッサ上のユーザプロセスとドライバとを適切に配置して複数の物理乱数生成装置のデータを複数のユーザプロセスに高速に転送する。【解決手段】複数の物理乱数生成装置を搭載した計算機は、前記複数の物理乱数生成装置を制御するマスタドライバプロセスと、前記マスタドライバプロセスにより生成される複数のドライバスレッドと、前記複数のドライバスレッドに割り当てられる前記複数の物理乱数生成装置により生成された乱数データを格納する複数の乱数バッファと、を備え、前記マスタドライバプロセスは、ユーザプロセスからの乱数データ転送要求に応じて前記ドライバスレッドを起動させ、前記物理乱数生成装置により生成された乱数データを前記ドライバスレッドに対応する前記乱数バッファに格納させる。【選択図】図１
2013142927.tif 000002
【特許請求の範囲】
【請求項１】
複数の物理乱数生成装置を搭載した計算機であって、
前記複数の物理乱数生成装置を制御するマスタドライバプロセスと、
前記マスタドライバプロセスにより生成される複数のドライバスレッドと、
前記複数のドライバスレッドに割り当てられる前記複数の物理乱数生成装置により生成された乱数データを格納する複数の乱数バッファと、
を備え、
前記マスタドライバプロセスは、
ユーザプロセスからの乱数データ転送要求に応じて前記ドライバスレッドを起動させ、前記物理乱数生成装置により生成された乱数データを前記ドライバスレッドに対応する前記乱数バッファに格納させる
ことを特徴とする、物理乱数生成装置を搭載した計算機。
【請求項２】
前記マスタドライバプロセスは、
前記物理乱数生成装置の構成情報を管理する制御テーブルを有し、
前記制御テーブルには、前記物理乱数生成装置の識別情報と、該物理乱数生成装置に割り当てられた前記ドライバスレッドの識別情報とが対応づけて管理されている、
ことを特徴とする、請求項１に記載の物理乱数生成装置を搭載した計算機。
【請求項３】
前記乱数バッファには、物理乱数生成装置により生成された前記乱数データを格納するデータ領域と、前記データ領域から前記ユーザプロセスの所定の領域への該乱数データの転送を管理する管理テーブルとを有する
ことを特徴とする、請求項１に記載の物理乱数生成装置を搭載した計算機。
【請求項４】
前記管理テーブルには、
前記ユーザプロセスの情報と該ユーザプロセスに転送される前記乱数データの情報とが対応付けられており、
前記乱数データの情報は、前記管理テーブル内の使用ポインタ及び前記ユーザプロセスに転送される複数の前記乱数データの状態を示すフラグから構成されている
ことを特徴とする、請求項３に記載の物理乱数生成装置を搭載した計算機。
【請求項５】
前記ドライバスレッドは、
前記ユーザプロセスからの前記乱数データ転送要求に応じて、前記管理テーブルの前記使用ポインタ及び前記フラグを参照し、該使用ポインタに対応する前記フラグが１の場合に、前記乱数データを前記ユーザプロセスに転送する
ことを特徴とする、請求項４に記載の物理乱数生成装置を搭載した計算機。
【請求項６】
前記ドライバスレッドは、
前記ユーザプロセスからの前記乱数データ転送要求に応じて、前記管理テーブルの前記使用ポインタ及び前記フラグを参照し、該使用ポインタに対応する前記フラグが０の場合に、前記物理乱数生成装置からの前記乱数データの充当を待ち、該乱数データが充当された場合に、前記フラグを１に更新する
ことを特徴とする、請求項４に記載の物理乱数生成装置を搭載した計算機。
【請求項７】
前記ドライバスレッドは、
前記物理乱数生成装置から前記データ領域への転送が終了した場合に、該データ領域に対応する前記フラグを０から１に更新する
ことを特徴とする、請求項３及び４に記載の物理乱数生成装置を搭載した計算機。
【請求項８】
前記マスタドライバプロセスは、
前記ドライバスレッド及び前記乱数バッファを、前記乱数データ転送要求を行ったユーザプロセスの所定の領域と論理構成上近い位置のプロセッサ及びメモリに割り当てられる
ことを特徴とする、請求項１に記載の物理乱数生成装置を搭載した計算機。
【請求項９】
複数の物理乱数生成装置を搭載した計算機における該物理乱数生成装置の制御方法であって、
前記計算機は、
前記複数の物理乱数生成装置を制御するマスタドライバプロセスと、前記マスタドライバプロセスにより生成される複数のドライバスレッドと、前記複数のドライバスレッドに割り当てられる前記複数の物理乱数生成装置により生成された乱数データを格納する複数の乱数バッファと、を備え、
前記マスタドライバプロセスが、ユーザプロセスからの乱数データ転送要求に応じて前記ドライバスレッドを起動させる第１のステップと、
前記マスタドライバプロセスが、前記物理乱数生成装置により生成された乱数データを前記ドライバスレッドに対応する前記乱数バッファに格納させる第２のステップと、
前記ドライバスレッドが、前記乱数バッファに格納されている前記乱数データを前記ユーザプロセスの所定の領域に転送する第３のステップと
を含むことを特徴とする、物理乱数生成装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、物理乱数生成装置及びに関し、生成した物理乱数を高速に転送する物理乱数生成装置及び物理乱数生成装置の制御方法に適用して好適なるものである。
【背景技術】
【０００２】
従来から、乱数は、計算機上で自然科学などのシミュレーションや暗号の鍵生成などの多くの場面に用いられている。計算機上で用いられる乱数は、０と１からなる２進乱数である。この２進乱数としては、何らかのアルゴリズムにしたがってソフトウェアによって計算される疑似乱数が用いられることが多い。しかし、ソフトウェアによって得られた疑似乱数には、何らかの周期性や規則性がある。
【０００３】
２進乱数の乱数性とは、０と１の出現比率が等しいこと（等確率性）、過去の出力によらずに次に出現するパターンが０か１か予測できないこと（無規則性）の２つの性質によって評価される。上記した疑似乱数は、等確率性は満たすものの、周期性や規則性があるため、次のパターンがある程度予測されてしまう。すなわち、ソフトウェアによって計算される疑似乱数は、上記した乱数の性質のうち無規則性を満たしていない。
【０００４】
疑似乱数の周期性や規則性の影響を受ける分野においては、規則性の無い自然界の現象をもとに乱数を生成する物理乱数生成装置が利用されている。乱数を生成するもととなる自然現象としては、例えば、特許文献１に示すように、抵抗の熱雑音や半導体の熱雑音などが用いられている。このような物理乱数生成装置により出力される物理乱数は、規則性の無い自然現象をもとに生成されるため、次に出力される物理乱数の出現パターンを予測することはできない。すなわち、上記した乱数の無規則性を満たしていることとなる。また、乱数の等確率性については、自然現象から２進乱数への変換を行う回路の特性により、ごく僅かな偏りが出現する可能性がある。そこで、特許文献２では、物理乱数生成装置により生成された乱数の等確率性の偏りを打ち消す技術が開示されている。特許文献２に開示された物理乱数生成装置によれば、等確率性および無規則性を満たす物理乱数を生成することができる。
【０００５】
また、近年、計算機の性能向上により、１台の計算機を同時に使用できるユーザまたはプロセスの数も増加している。このため、計算機上の複数のユーザプロセスに対して、計算機に搭載されている複数の物理乱数生成装置から高速に乱数データを供給することが求められている。そのため、単一のプロセスに対する乱数供給の性能向上のみならず、一台の計算機上で動作する複数のプロセスに対する総合的な供給性能の向上に関心が高まってきている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特許第２９８０５７６号公報
【特許文献２】特許第３６８００９１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかし、物理乱数生成装置を一台の計算機に複数台搭載するだけでは、プロセッサ上のユーザプロセスとドライバ間の配置関係によりメモリ転送性能が大きく変わってしまうため、ドライバの処理能力の限界により、乱数供給の性能向上が律速してしまうという問題があった。
【０００８】
本発明は以上の点を考慮してなされたもので、プロセッサ上のユーザプロセスとドライバとを適切に配置して複数の物理乱数生成装置のデータを複数のユーザプロセスに高速に転送することが可能な物理乱数生成装置を搭載した計算機及び物理乱数生成装置の制御方法を提案しようとするものである。
【課題を解決するための手段】
【０００９】
かかる課題を解決するために本発明においては、複数の物理乱数生成装置を搭載した計算機であって、前記複数の物理乱数生成装置を制御するマスタドライバプロセスと、前記マスタドライバプロセスにより生成される複数のドライバスレッドと、前記複数のドライバスレッドに割り当てられる前記複数の物理乱数生成装置により生成された乱数データを格納する複数の乱数バッファと、を備え、前記マスタドライバプロセスは、ユーザプロセスからの乱数データ転送要求に応じて前記ドライバスレッドを起動させ、前記物理乱数生成装置により生成された乱数データを前記ドライバスレッドに対応する前記乱数バッファに格納させることを特徴とする、物理乱数生成装置を搭載した計算機が提供される。
【００１０】
かかる構成によれば、ユーザプロセスからの要求に応じて、マスタドライバプロセスにより生成されたドライバスレッドに物理乱数生成装置が割り当てられ、物理乱数生成装置により生成された乱数データが物理乱数生成装置から乱数バッファのデータ領域に転送される。そして、ドライバスレッドは、乱数バッファの管理テーブルを参照して、データ領域からユーザプロセスの配列領域に乱数データを転送する。これにより、複数のドライバスレッドが利用する乱数バッファを適切に配置して、複数の物理乱数生成装置を搭載した計算機において、乱数データを高速に転送することができる。具体的に、ユーザプロセスのプロセッサ及びメモリ付近に各ドライバの専用スレッド及び当該ドライバスレッドが用いる乱数バッファを配置することにより、複数の物理乱数生成装置のデータを複数のユーザプロセスに高速に転送することを可能としている。
【発明の効果】
【００１１】
本発明によれば、プロセッサ上のユーザプロセスとドライバとを適切に配置して複数の物理乱数生成装置のデータを複数のユーザプロセスに高速に転送することができる。
【図面の簡単な説明】
【００１２】
【図１】本発明の一実施形態に係る計算機の構成を示すブロック図である。
【図２】同実施形態にかかる乱数バッファのデータ領域の内容を示す図表である。
【図３】同実施形態にかかる乱数バッファの管理テーブルの内容を示す図表である。
【図４】同実施形態にかかるマスタドライバプロセスの制御テーブルの内容を示す図表である。
【図５】同実施形態にかかるドライバスレッドの起動処理を示す処理フローである。
【図６】同実施形態にかかるドライバプロセスへの乱数データ転送処理を示す処理フローである。
【図７】同実施形態にかかるユーザプロセスへの乱数データ転送処理を示す処理フローである。
【図８】同実施形態にかかる計算機の具体的な論理構成を示すブロック図である。
【発明を実施するための形態】
【００１３】
以下図面について、本発明の一実施の形態を詳述する。
【００１４】
（１）本実施の形態の概要
まず、本実施の形態の概要について説明する。従来から、乱数は、計算機上で自然科学などのシミュレーションや暗号の鍵生成などの多くの場面に用いられている。計算機上で用いられる乱数は、０と１からなる２進乱数である。この２進乱数としては、何らかのアルゴリズムにしたがってソフトウェアによって計算される疑似乱数が用いられることが多い。しかし、ソフトウェアによって得られた疑似乱数には、何らかの周期性や規則性がある。
【００１５】
２進乱数の乱数性とは、０と１の出現比率が等しいこと（等確率性）、過去の出力によらずに次に出現するパターンが０か１か予測できないこと（無規則性）の２つの性質によって評価される。上記した疑似乱数は、等確率性は満たすものの、周期性や規則性があるため、次のパターンがある程度予測されてしまう。すなわち、ソフトウェアによって計算される疑似乱数は、上記した乱数の性質のうち無規則性を満たしていない。
【００１６】
疑似乱数の周期性や規則性の影響を受ける分野においては、規則性の無い自然界の現象をもとに乱数を生成する物理乱数生成装置が利用されている。乱数を生成するもととなる自然現象としては、例えば、抵抗の熱雑音や半導体の熱雑音などが用いられている。このような物理乱数生成装置により出力される物理乱数は、規則性の無い自然現象をもとに生成されるため、次に出力される物理乱数の出現パターンを予測することはできない。すなわち、上記した乱数の無規則性を満たしていることとなる。また、乱数の等確率性については、自然現象から２進乱数への変換を行う回路の特性により、ごく僅かな偏りが出現する可能性がある。そこで、物理乱数生成装置により生成された乱数の等確率性の偏りを打ち消す技術が開示されている。当該技術に開示された物理乱数生成装置によれば、等確率性および無規則性を満たす物理乱数を生成することができる。
【００１７】
また、近年、計算機の性能向上により、１台の計算機を同時に使用できるユーザまたはプロセスの数も増加している。このため、計算機上の複数のユーザプロセスに対して、計算機に搭載されている複数の物理乱数生成装置から高速に乱数データを供給することが求められている。そのため、単一のプロセスに対する乱数供給の性能向上のみならず、一台の計算機上で動作する複数のプロセスに対する総合的な供給性能の向上に関心が高まってきている。
【００１８】
しかし、物理乱数生成装置を一台の計算機に複数台搭載するだけでは、プロセッサ上のユーザプロセスとドライバ間の配置関係によりメモリ転送性能が大きく変わってしまうため、ドライバの処理能力の限界により、乱数供給の性能向上が律速してしまうという問題があった。物理乱数生成装置を一台の計算機に複数台搭載した場合、計算機一台の一つのドライバが複数の物理乱数生成装置を起動し、乱数データの転送を要求する。そして、該ドライバは、乱数データの転送要求と並行して、複数個所で同時にユーザプロセスへの乱数データの転送処理を実行する。近年のマルチプロセッサの計算機のメモリ配置は一般的に不均質（Non Uniform Memory Access）であり、プロセッサ上のユーザプロセスとドライバ間の配置関係によりメモリ転送性能が大きく変わってしまう。
【００１９】
そこで、本実施の形態では、ユーザプロセスのプロセッサ及びメモリ付近に各ドライバの専用スレッド及び当該ドライバスレッドが用いる乱数バッファを配置することにより、複数の物理乱数生成装置のデータを複数のユーザプロセスに高速に転送することを可能としている。
【００２０】
（２）計算機のハードウェア構成
次に、計算機１００のハードウェア構成について説明する。計算機１００は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）と、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）と、入力装置と、出力装置と、ストレージ装置（ＨＤＤ）と、ドライブと、通信装置（図示せず）などを備える。
【００２１】
ＣＰＵは、演算処理装置および制御装置として機能し、各種プログラムに従って計算機１００内の動作全般を制御する。また、ＣＰＵは、マイクロプロセッサであってもよい。ＲＯＭは、ＣＰＵが使用するプログラムや演算パラメータ等を記憶する。ＲＡＭは、ＣＰＵの実行において使用するプログラムや、その実行において適宜変化するパラメータ等を一次記憶する。これらはＣＰＵバスなどから構成されるホストバスにより相互に接続されている。
【００２２】
ホストバスは、ブリッジを介して、ＰＣＩ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ／Ｉｎｔｅｒｆａｃｅ）バスなどの外部バスに接続されている。なお、必ずしもホストバス、ブリッジおよび外部バスを分離構成する必要はなく、一のバスにこれらの機能を実装してもよい。
【００２３】
入力装置は、例えば、マウス、キーボード、タッチパネル、ボタン、マイク、スイッチおよびレバーなどユーザが情報を入力するための入力手段と、ユーザによる入力に基づいて入力信号を生成し、ＣＰＵに出力する入力制御回路などから構成されている。
【００２４】
出力装置は、例えば、ＣＲＴ（Ｃａｔｈｏｄｅ  Ｒａｙ  Ｔｕｂｅ）ディスプレイ装置、液晶ディスプレイ（ＬＣＤ）装置、ＯＬＥＤ（Ｏｒｇａｎｉｃ  Ｌｉｇｈｔ  Ｅｍｉｔｔｉｎｇ  Ｄｉｓｐｌａｙ）装置およびランプなどの表示装置と、スピーカおよびヘッドホンなどの音声出力装置で構成される。
【００２５】
ストレージ装置は、本実施形態にかかる計算機１００の記憶部の一例として構成されたデータ格納用の装置であり、記憶媒体、記憶媒体にデータを記録する記録装置、記憶媒体からデータを読み出す読出し装置および記憶媒体に記録されたデータを削除する削除装置などを含むことができる。ストレージ装置は、例えば、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）で構成される。このストレージ装置は、ハードディスクを駆動し、ＣＰＵが実行するプログラムや各種データを格納する。
【００２６】
ドライブは、記憶媒体用リーダライタであり、計算機１００に内蔵、あるいは外付けされる。ドライブは、装着されている磁気ディスク、光ディスク、光磁気ディスク、または半導体メモリ等のリムーバブル記憶媒体に記録されている情報を読み出して、ＲＡＭに出力する。
【００２７】
通信装置は、例えば、通信網に接続するための通信デバイス等で構成された通信インタフェースである。また、通信装置は、無線ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）対応通信装置であっても、ワイヤレスＵＳＢ対応通信装置であっても、有線による通信を行うワイヤー通信装置であってもよい。
【００２８】
（３）物理乱数生成装置を搭載した計算機のソフトウェア構成
次に、複数の物理乱数生成装置２０ａ、２０ｂ、２０ｃ（以降物理乱数生成装置２０と称して説明する場合もある。）を搭載した計算機１００のソフトウェア構成について説明する。以下では、特に、物理乱数生成装置２０を制御するためのソフトウェア構成について説明する。
【００２９】
図１に示すように、複数の物理乱数生成装置２０を搭載した計算機１００は、マスタドライバプロセス１と、複数のドライバスレッド２ａ、２ｂ、２ｃ（以降、複数のドライバスレッド２と称して説明する場合もある。）と、複数の乱数バッファ７ａ、７ｂ、７ｃ（以降、複数の乱数バッファ７と称して説明する場合もある。）と、複数のユーザプロセス１０１ａ、１０１ｂ、１０１ｃ（以降、複数のユーザプロセス１０１と称して説明する場合もある。）と構成される。
【００３０】
マスタドライバプロセス１は、１つ以上のプロセッサと１つの共有メモリとから構成される１台の計算機１００上に備えられている。また、マスタドライバプロセス１は、計算機１００のＯＳ上で動作し、当該計算機１００上に搭載され、物理乱数生成装置２０を統合的に管理したり制御したりする常駐プログラムである。また、マスタドライバプロセス１は、物理乱数生成装置の構成を管理する制御テーブル１９を有している。制御テーブル１９については後で詳細に説明する。
【００３１】
ドライバスレッド２は、マスタドライバプロセス１によって起動され、計算機１００のＯＳ上で動作する物理乱数生成装置２０を制御するプログラムである。マスタドライバプロセス１とドライバスレッド２は、ユーザプロセスからの乱数データの要求に応じて、物理乱数生成装置２０に物理乱数の生成を指示する。ドライバスレッド２は、乱数バッファ７の領域を計算機１００のメモリ上に確保する。マスタドライバプロセス１によるドライバスレッド２の起動処理については後で詳細に説明する。また、乱数バッファ７は、データ領域７１（７１ａ、７１ｂ、７１ｃ）と管理テーブル７２（７２ａ、７２ｂ、７２ｃ）から構成される。
【００３２】
ユーザプロセス１０は、計算機１００上で動作するユーザプログラムである。ユーザプロセス１０は、計算機１００のプロセッサやメモリなどの資源を利用しながら、他のユーザプロセスとは互いに独立に動作するプログラムの単位である。例えば、計算機１００にＮ個のユーザプロセス１０が存在するとする。ユーザプロセス１０は、乱数データを必要とする場合に、物理乱数生成装置２０のマスタドライバプロセス１に対して、乱数データの転送要求を出す。
【００３３】
具体的には、ユーザプロセス１０は、プログラム上で専用関数を呼び出し、ユーザプロセス１０から呼び出された該専用関数は、マスタドライバプロセス１に対して、専用関数により指示された乱数データのデータ長を物理乱数生成装置２０に転送するよう命令する。マスタドライバプロセス１からの命令が物理乱数生成装置２０により適切に処理されると、ユーザプロセス１０の配列領域１０１（１０１ａ、１０１ｂ、１０１ｃ）に乱数データが充当される。そして、物理乱数生成装置２０からユーザプロセス１０へ要求された乱数データの転送が完了すると、ユーザプロセスに対して完了報告がなされる。
【００３４】
物理乱数生成装置２０は、実際に自然現象を利用して物理乱数を生成する乱数源である。物理乱数生成装置２０は、１台の計算機１００上に１台以上搭載することができる。物理乱数生成装置２０は、ドライバスレッド２からの乱数転送命令を受け取ると、メモリ上の指定されたデータ領域７１に指定された長さの乱数データを書き込む。また、物理乱数生成装置２０は、データ領域７１への乱数データの書き込みが完了すると、乱数データの書き込み完了報告を送信元のドライバスレッド２に返す。
【００３５】
次に、乱数バッファ７を構成するデータ領域７１について説明する。図２に示すように、乱数バッファ７のデータ領域７１は、Ｍ個のエントリ７１１、７１２〜７１３から構成される。データ領域７１のエントリの数は、計算機１００のメモリ上においてデータ領域７１をどれくらいの大きさで確保するかによって決まる。また、各エントリには、実際に物理乱数生成装置２０によって生成された乱数データ７１４、７１５〜７１６が格納される。各乱数データ７１４、７１５〜７１６は、エントリを識別するエントリ番号と対応付けられている。
【００３６】
次に、乱数バッファ７を構成する管理テーブル７２について説明する。図３に示すように、乱数バッファ７の管理テーブル７２は、Ｌ個のプロセスに対応するプロセス７２１、７２２〜７２３から構成される。管理テーブル７２のプロセスの数は、計算機１００上で最大何個のプロセスが実行できるかによって決まる。なお、ユーザプロセス数Ｎ個と管理テーブル７２において管理するプロセス数Ｌ個との関係は、ＮはＬより常に小さいかまたは等しい値となる。
【００３７】
また、各プロセスは、フラグ７２４及び使用ポインタ７２５に対応付けられている。フラグ７２４は、初期値はリセット状態（「０」）であり、エントリに乱数データが充当されたときにセット状態「１」となる。また、各プロセスが乱数データを使用した場合に、使用した乱数データに対応するフラグがリセット状態「０」となる。また、各プロセスの使用ポインタ７２５には、データ領域のエントリの番号が格納される。具体的には、当該プロセスが利用した乱数データに対応するデータ領域のエントリ番号が格納される。例えば、プロセス１が、エントリ番号「２」まで利用した場合には、使用ポインタ７２５には「２」が格納される。
【００３８】
さらに、管理テーブル７２には、乱数データポインタ７２６が格納されている。乱数データポイント７２６は、乱数生成装置２０から乱数データが転送された場合に、図２に示す乱数バッファ７のデータ領域７１のどのエントリまで乱数データが書き込まれたかを示す。
【００３９】
次に、マスタドライバプロセス１を構成する制御テーブル１９について説明する。図４に示すように、マスタドライバプロセス１の制御テーブル１９は、計算機１００上に搭載されるすべての物理乱数生成装置２０分のエントリ１９１、１９２、１９３〜１９４から構成される。各物理乱数生成装置２０のエントリは、構成フラグ１９５、割り当てフラグ１９６、ドライバスレッドＩＤ１９７から構成される。
【００４０】
構成フラグ１９５は、計算機１００上に搭載されて、物理乱数生成装置２０の構成が認識されたり動作確認がなされたりして、物理乱数生成装置２０の構成が有効であると認識された場合には「１」が格納され、物理乱数生成装置２０の構成が無効である場合には「０」が格納される。物理乱数生成装置２０の構成情報は、マスタドライバプロセス１が計算機１００のＯＳ起動時やＩ／Ｏ構成が変更された際にＯＳから提供され、保持される情報である。
【００４１】
割り当てフラグ１９６は、マスタドライバプロセス１がドライバスレッド２を起動させる際に用いるフラグである。例えば、物理乱数生成装置２０がどのドライバスレッド２にも割り当てられていない場合には「０」が格納され、いずれかのドライバスレッド２に割り当てられている場合には「１」が格納される。なお、割り当てフラグ１９６の初期値は「０」である。ドライバスレッドＩＤ１９７には、マスタドライバプロセス１がドライバスレッド２を起動する際に、物理乱数生成装置２０に割り当てたドライバスレッド２の識別情報としてドライバスレッドＩＤが格納される。
【００４２】
（４）物理乱数生成装置を搭載した計算機の動作の詳細
（４−１）ドライバスレッドの起動処理の詳細
次に複数の物理乱数生成装置２０を搭載した計算機１００の動作の詳細について説明する。まず、マスタドライバプロセス１によるドライバスレッド２の起動処理の詳細について説明する。以下では、マスタドライバプロセス１が、ユーザプロセスから乱数データの転送指示を受けた場合にドライバスレッド２を起動する場合について説明する。まず、マスタドライバプロセス１は、ドライバスレッド２を起動させるための初期化を行う（Ｓ１０１）。具体的に、マスタドライバプロセス１は、制御テーブル１９を作成したり、ドライバスレッド２の構成を確認したりする。
【００４３】
そして、物理乱数生成装置２０は、ドライバスレッド２に割り当て可能な乱数生成装置２０があるか判定する（Ｓ１０２）。具体的に、物理乱数生成装置２０は、制御テーブル１９の構成フラグ１９５を参照して、割り当て可能な乱数生成装置２０が存在するかを判定する。制御テーブル１９には、上記したように、ＯＳ起動時やＩ／Ｏ構成が変更される際に、ＯＳから提供される情報が格納されている。マスタドライバプロセス１は、制御テーブル１９をもとに計算機１００に存在するすべての乱数生成装置２０の状態を管理している。
【００４４】
ステップＳ１０２において、ドライバスレッド２に割り当て可能な乱数生成装置２０があると判定された場合には、マスタドライバプロセス１は、割り当て予定の乱数生成装置２０の情報を取得する（Ｓ１０３）。具体的に、マスタドライバプロセス１は、制御テーブル１９の割り当てフラグ１９６を参照して、未だいずれのドライバスレッド２にも割り当てられていない物理乱数生成装置２０の識別情報を取得する。
【００４５】
一方、ステップＳ１０２において、ドライバスレッド２に割り当て可能な乱数生成装置２０がないと判定された場合には、ステップＳ１０２に戻り、マスタドライバプロセス１は、割り当て可能な乱数生成装置２０が存在するまで待つ。ここで、割り当て可能な乱数生成装置２０がない場合とは、制御テーブル１９に存在する物理乱数生成装置２０がすべてドライバスレッド２に割り当てられており、すべての割り当てフラグ１９６が「１」となっている場合を意味する。
【００４６】
物理乱数生成装置２０がドライバスレッド２に割り当てられ、物理乱数を生成して所定のプロセスに転送すると、物理乱数生成装置２０へのドライバスレッド２の割り当てが解除される。物理乱数生成装置２０へのドライバスレッド２の割り当てが解除されると、制御テーブル１９の割り当てフラグ１９６が「１」から「０」に更新される。マスタドライバプロセス１は、制御テーブル１９の割り当てフラグ１９６のいずれかが「１」から「０」になり、物理乱数生成装置２０へのドライバスレッド２の割り当てが解除されるのを待つ。
【００４７】
そして、マスタドライバプロセス１は、乱数データの転送を要求したユーザプロセスの動作情報を取得する（Ｓ１０４）。具体的に、マスタドライバプロセス１は、ＯＳカーネルに当該ユーザプロセスのＩＤを通知して、当該ユーザプロセスが現在実行しているプロセッサ及びメモリ空間の情報を取得する。
【００４８】
そして、マスタドライバプロセス１は、ドライバスレッド２を生成する（Ｓ１０５）。マスタドライバプロセス１は、生成したドライバスレッド２を起動させて、現在実行しているメモリ空間でドライバスレッドを起動するようにＯＳに依頼する。
【００４９】
そして、マスタドライバプロセス１は、ドライバスレッド２が正しく起動されたかを判定する（Ｓ１０６）。具体的に、マスタドライバプロセス１は、ＯＳにより提供されるスレッド起動の所定の関数の戻り値を取得して、ドライバスレッド２の起動が成功したか否かを判定する。
【００５０】
ステップＳ１０６において、ドライバスレッド２が正しく起動されたと判定された場合には、マスタドライバプロセス１は、制御テーブル１９のドライバスレッドの情報を更新する（Ｓ１０７）。具体的に、マスタドライバプロセス１は、制御テーブル１９のドライバスレッドＩＤ１９７に起動させたドライバスレッド２のＩＤを格納する。
【００５１】
一方、ステップＳ１０６において、ドライバスレッド２が正しく起動されないと判定された場合には、マスタドライバプロセス１は、ステップＳ１０２以降の処理を繰り返し、他のドライバスレッド２の割り当てを試みる。
【００５２】
（４−２）ドライバプロセスへの乱数データ転送処理の詳細
次に、物理乱数生成装置２０によるドライバプロセスへの乱数データの転送処理の詳細について説明する。図６に示すように、まず、物理乱数生成装置２０は、ドライバプロセスの乱数バッファ７のデータ領域７１へ乱数データを転送するための初期化を行う（Ｓ２０１）。具体的に、物理乱数生成装置２０は、乱数バッファ７のデータ領域７１が確保されているかなどの確認を行う。
【００５３】
そして、物理乱数生成装置２０は、生成した乱数データを乱数バッファ７のデータ領域７１に転送する（Ｓ２０２）。物理乱数生成装置２０は、Ｉ／Ｏ装置として計算機１００に実装されている。したがって、物理乱数生成装置２０は、ＤＭＡ（Direct Memory Access）転送にて計算機１００上のメモリにアサインされるデータ領域７１に乱数データを転送する。
【００５４】
物理乱数生成装置２０は、ステップＳ２０２において転送が終了した後、管理テーブル７２のすべてのプロセス分の乱数データポインタ７２６の該当フラグ７２４をセットする（Ｓ２０３）。具体的に、物理乱数生成装置２０は、各プロセスに対応するフラグ７２４に生成した乱数データ分のフラグを「０」から「１」にセットする。続いて、物理乱数生成装置２０は、管理テーブル７２の乱数データポインタ７２６を更新する（Ｓ２０４）。具体的に、物理乱数生成装置２０は、乱数バッファ７のデータ領域７１のどのエントリまで乱数データが書き込まれたかを示す値を乱数データポインタ７２６に格納する。
【００５５】
次に、物理乱数生成装置２０は、マスタドライバプロセス１により要求された乱数データの転送が完了したか否かを判定する（Ｓ２０５）。ステップＳ２０５において、乱数データの転送が完了したと判定された場合には、物理乱数生成装置２０は、乱数データ転送処理を終了する。一方、ステップＳ２０５において、乱数データの転送が完了していないと判定された場合には、乱数データポインタ７２６がエントリの最後を越えたかを判定する（Ｓ２０６）。ここで、乱数データポインタ７２６がエントリの最後を超えるとは、ステップＳ２０４において更新した乱数データポインタ７２６が、フラグ７２４のエントリの数を超えることを意味する。
【００５６】
ステップＳ２０６において、乱数データポインタがエントリの最後を越えたと判定された場合には、物理乱数生成装置２０は、乱数データポインタを初期値の「１」に設定し（Ｓ２０７）、ステップＳ２０２以降の処理を繰り返し、再度乱数データの転送処理を行う。一方、ステップＳ２０６において、乱数データポインタがエントリの最後を越えていないと判定された場合には、物理乱数生成装置２０は、ステップＳ２０２以降の処理を繰り返し、再度乱数データの転送処理を行う。
【００５７】
（４−３）ユーザプロセスへの乱数データ転送処理の詳細
次に、ドライバスレッド２によるユーザプロセスへの乱数データの転送処理の詳細について説明する。図７に示すように、まず、ドライバスレッド２は、乱数バッファ７のデータ領域７１からユーザプロセス１０の配列領域１０１へ乱数データを転送するための初期化を行う（Ｓ３０１）。具体的に、ドライバスレッド２は、乱数データポインタ７２６を確認したり、ユーザプロセス１０の配列領域１０１を確認したりする。
【００５８】
そして、ドライバスレッド２は、管理テーブル７２の使用ポインタ７２５の該当フラグ７２４が「１」か「０」か、を判定する（Ｓ３０２）。具体的に、ドライバスレッド２は、乱数データの転送先のユーザプロセス１０のプロセス番号に対応する使用ポインタ７２５と、該使用ポインタ７２５に対応するフラグ７２４のエントリの乱数データが有効「１」か、無効「０」か、を判定する。
【００５９】
ここで、プロセス番号に対応するフラグのすべてがリセット状態（すべて「０」）の場合は、データ領域７１の乱数データがすべて使用されてしまっている状態である。この場合、新規に乱数データが乱数生成装置２０より充当されなければ、ユーザプロセス１０に乱数データの転送ができない状態となっている。そのため、該当するユーザプロセス１０に対応するフラグがリセット状態の場合には、乱数生成装置２０から乱数データが充当されるまで、フラグ７２４が有効か無効かの判定を繰り返す。
【００６０】
ステップＳ３０２において、転送先のユーザプロセス１０に対応する使用ポインタ７２５の該当フラグが「１」であると判定された場合には、ステップＳ３０３以降の処理を実行する。一方、ステップＳ３０２において、転送先のユーザプロセス１０に対応する使用ポインタ７２５の該当フラグが「０」であると判定された場合には、乱数生成装置２０から乱数データが充当されるまでステップＳ３０２の判定を繰り返す。
【００６１】
そして、ドライバスレッド２は、乱数バッファ７のデータ領域７１より一定量の乱数データをユーザプロセス１０の配列領域１０１に転送する（Ｓ３０３）。実際には、ステップＳ３０３における転送処理は、計算機１００上のメモリ領域間のデータコピーである。当該データコピーは、乱数バッファ７のデータ領域７１とユーザプロセス１０の配列領域１０１とがお互いに近い関係にあるプロセッサとメモリ空間との間で実行されるため、転送処理が高速に実行される。
【００６２】
ステップＳ３０３において、ドライバスレッド２は、一定量の乱数データの転送が終了した場合には、転送した乱数データのフラグ７２４を「１」から「０」にリセットする（Ｓ３０４）。続いて、ドライバスレッド２は、使用ポインタ７２５を更新する（Ｓ３０５）。具体的に、ドライバスレッド２は、使用ポインタ７２５の値に「１」を加算する。
【００６３】
続いて、ドライバスレッド２は、ユーザプロセス１０から要求された分の乱数データを転送したか判定する（Ｓ３０６）。ステップＳ３０６において、ユーザプロセス１０からの要求分の乱数データをすべて転送したと判定された場合には、ドライバスレッド２は、乱数データの転送処理を終了する。一方、ステップＳ３０６において、ユーザプロセス１０からの要求分の乱数データのすべてをまだ転送していないと判定された場合には、ドライバスレッド２は、使用ポインタ７２５が最後のエントリを超えているかを判定する（Ｓ３０７）。ここで、使用ポインタ７２５がエントリの最後を超えるとは、ステップＳ３０５において更新した使用ポインタ７２５が、フラグ７２４のエントリの数を超えることを意味する。
【００６４】
ステップＳ３０７において、使用ポインタ７２５が最後のエントリを超えていると判定された場合には、ドライバスレッド２は、使用ポインタを初期値の「１」に設定して、ステップＳ３０２以降の処理を繰り返し、再度乱数データの転送処理を行う。一方、ステップＳ３０７において、使用ポインタ７２５が最後のエントリを超えていないと判定された場合には、ドライバスレッド２は、ステップＳ３０２以降の処理を繰り返し、再度乱数データの転送処理を行う。
【００６５】
（５）計算機の具体的な論理構成
次に、上記した実施形態を実現するための計算機１００の具体的な論理構成の一例について説明する。通常、計算機を構成するプロセッサは、使用するメモリと近い関係に配置することで、メモリ転送速度を向上させることが容易となる。そこで、一般的には、プロセッサとメモリとは物理的に近い位置に配置される。
【００６６】
例えば、本実施形態において、図８に示すように、一台の計算機１００がプロセッサ５００ａ、５００ｂと、ローカルメモリ６００ａ、６００ｂから構成されているとする。さらに、計算機１００には、Ｉ／Ｏブリッジ４００を介して、物理乱数生成装置２０ａ、２０ｂが搭載されているとする。なお、一台の計算機１００を構成するプロセッサ数およびローカルメモリ数はこの限りではない。
【００６７】
このように、一台の計算機１００が、複数台のプロセッサや大規模なメモリ構成から構成されている場合には、複数台のプロセッサまたはメモリがそれぞれ接続されて計算機１００を構成する。例えば、図８に示すように、プロセッサ５００ａとローカルメモリ６００ａとは相対的に近い距離で接続される。ここで、近い距離で接続されるとは、例えば、性能的に太いメモリバンド幅のインタフェース５０１で接続されることを意味する。また、プロセッサ５００ａとローカルメモリ６００ｂとは相対的に遠い距離で接続される。ここで、遠い距離で接続されるとは、例えば、性能的に低いメモリバンド幅のインタフェース５０３で接続されることとなる。
【００６８】
また、プロセッサ５００とＩ／Ｏ装置を結ぶインタフェース５０２は、相対的には、プロセッサ間を結ぶインタフェース５０３よりさらに性能の低いメモリバンド幅となる。また、Ｉ／Ｏブリッジ４００と物理乱数生成装置２０及び２０ａを結ぶインタフェース４０１及び４０２は、インタフェース５０２よりさらに性能の低いメモリバンド幅となる。
【００６９】
例えば、図８に示すように、ユーザプロセス１０ａの配列領域１０１ａがローカルメモリ６００ａに確保されている場合には、ドライバスレッド２が利用する乱数バッファ７ａをローカルメモリ６００に配置する。これにより乱数バッファ７ａからユーザプロセス１０ａの配列領域１０１ａへの乱数データの転送処理を高速化することが可能となる。また、ユーザプロセス１０ａの配列領域１０１ａがローカルメモリ６００ａに存在し、乱数バッファ７ａがローカルメモリ６００ｂに配置された場合には、乱数バッファ７ａからユーザプロセス１０ａの配列領域１０１ａへの乱数データの転送処理は、インタフェース５０３を介して行われることとなり、相対的に転送処理が低速となってしまう。
【００７０】
したがって、本実施の形態では、例えば、図５に示したドライバスレッド２の起動処理において、マスタドライバプロセス１は、乱数データを要求されたプロセッサ５００に近いところにドライバスレッド２を生成する。これにより、例えば、図８において、乱数データを要求したユーザプロセス１０ａの配列領域１０１ａと、ユーザプロセス１０ａに乱数データを転送するための乱数バッファ７ａとがプロセッサ５００ａのローカルメモリ６００ａ内に存在することとなり、乱数データの高速な転送処理を実現することができる。
【００７１】
（６）本実施の形態の効果
以上のように本実施の形態によれば、ユーザプロセス１０からの要求に応じて、マスタドライバプロセス１により生成されたドライバスレッド２に物理乱数生成装置２０が割り当てられ、物理乱数生成装置２０により生成された乱数データが物理乱数生成装置２０から乱数バッファ７のデータ領域７１に転送される。そして、ドライバスレッド２は、乱数バッファ７の管理テーブル７２を参照して、データ領域７１からユーザプロセス１０の配列領域１０１に乱数データを転送する。これにより、複数のドライバスレッド２が利用する乱数バッファを適切に配置して、複数の物理乱数生成装置２０を搭載した計算機において、乱数データを高速に転送することができる。具体的に、ユーザプロセス１０のプロセッサ及びメモリ付近に各物理乱数生成装置２０専用のドライバスレッド２及び当該ドライバスレッド２が用いる乱数バッファ７を配置することにより、複数の物理乱数生成装置２０のデータを複数のユーザプロセス１０に高速に転送することを可能としている。
【符号の説明】
【００７２】
１      マスタドライバプロセス
２      ドライバスレッド
７      乱数バッファ
１０    ユーザプロセス
１９    制御テーブル
２０    物理乱数生成装置
１００  計算機
【図１】
2013142927.tif 000003
【図２】
2013142927.tif 000004
【図３】
2013142927.tif 000005
【図４】
2013142927.tif 000006
【図５】
2013142927.tif 000007
【図６】
2013142927.tif 000008
【図７】
2013142927.tif 000009
【図８】
2013142927.tif 000010