(57)【要約】  ＯＳが、（１）ブラウザ処理に含まれるバナー表示処理１とバナー表示処理２との共通変数ａの値の格納先を、各スレッドの実行順をＧＲＡＭ内の出力順を規定する番号（出力順の番号）に対応させたデータ記憶領域に設定する。ＯＳが、（２）バナー表示処理２からの共通変数ａの書き込み要求を検出すると、（３）設定されたバナー表示処理２のデータ記憶領域に、バナー表示処理２の共通変数ａの値を格納する。ＯＳが、（４）バナー表示処理１からの共通変数ａの書き込み要求を検出すると、（５）設定されたバナー表示処理１のデータ記憶領域に、バナー表示処理１の共通変数ａの値を格納する。ＯＳが、バナー表示処理１，２の終了を検出すると、（６）ＯＳＤ処理部に書き込み指示を通知する。ＯＳＤ処理部が（７）データ記憶領域に格納された共通変数ａの各値を出力の番号順に読み出し、（８）読み出した共通変数ａの値を特定の格納先へ上書きする。
2012046300.tif 000002
【特許請求の範囲】
【請求項１】
出力先への出力順を規定する番号群と当該番号群の各番号に対応するデータ記憶領域とを有する記憶手段と、
対象プロセス内の同一の共通変数の値についての書き込み要求を有するスレッド群の各スレッドの前記共通変数の値の格納先を、前記出力順を規定する番号に前記各スレッドの実行順を対応させたデータ記憶領域に設定する設定手段と、
前記スレッド群のスレッドごとに、前記設定手段により設定された前記データ記憶領域に、当該データ記憶領域の出力順を規定する番号に対応する実行順のスレッドについての前記共通変数の値を格納する第１の格納手段と、
前記スレッド群のすべてのスレッドが終了すると、前記第１の格納手段により前記スレッドごとに前記データ記憶領域に格納された前記共通変数の各値を前記出力順に読み出し、読み出した前記共通変数の各値を前記出力順に特定の格納先へ上書きする第２の格納手段と、
を備えることを特徴とする情報処理装置。
【請求項２】
前記記憶手段は、前記出力先を表示装置とするＧＲＡＭ（Ｇｒａｐｈｉｃ  Ｒａｎｄａｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）であることを特徴とする請求項１に記載の情報処理装置。
【請求項３】
出力先への出力順を規定する番号群と当該番号群の各番号に対応するデータ記憶領域とを有する記憶手段と前記データ記憶領域へのデータの格納を制御する制御回路にアクセス可能なコンピュータに、
対象プロセス内の同一の共通変数の値についての書き込み要求を有するスレッド群の各スレッドの前記共通変数の値の格納先を、前記出力順を規定する番号に前記各スレッドの実行順を対応させたデータ記憶領域に設定する設定工程と、
前記スレッド群のスレッドごとに、前記設定工程により設定された前記データ記憶領域に、当該データ記憶領域の出力順を規定する番号に対応する実行順のスレッドについての前記共通変数の値を格納する第１の格納工程と、
前記スレッド群のすべてのスレッドが終了すると、前記第１の格納工程により前記スレッドごとに前記データ記憶領域に格納された前記共通変数の各値を前記出力順に読み出し、前記制御回路に、読み出した前記共通変数の各値を前記出力順に特定の格納先へ上書きさせる第２の格納工程と、
を実行させることを特徴とする情報処理プログラム。
【請求項４】
出力先への出力順を規定する番号群と当該番号群の各番号に対応するデータ記憶領域とを有する記憶手段と前記データ記憶領域へのデータの格納を制御する制御回路にアクセス可能なコンピュータが、
対象プロセス内の同一の共通変数の値についての書き込み要求を有するスレッド群の各スレッドの前記共通変数の値の格納先を、前記出力順を規定する番号に前記各スレッドの実行順を対応させたデータ記憶領域に設定する設定工程と、
前記スレッド群のスレッドごとに、前記設定工程により設定された前記データ記憶領域に、当該データ記憶領域の出力順を規定する番号に対応する実行順のスレッドについての前記共通変数の値を格納する第１の格納工程と、
前記スレッド群のすべてのスレッドが終了すると、前記第１の格納工程により前記スレッドごとに前記データ記憶領域に格納された前記共通変数の各値を前記出力順に読み出し、前記制御回路に、読み出した前記共通変数の各値を前記出力順に特定の格納先へ上書きさせる第２の格納工程と、
を実行することを特徴とする情報処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、書き込み要求を制御する情報処理装置、情報処理プログラム、および情報処理方法に関する。
【背景技術】
【０００２】
従来より、マルチスレッド処理では１つのプロセスを複数のスレッドに分割し、該複数のスレッドを平行して実行させる。変数によっては複数のスレッド間で書き込みが行われる。ここで、複数のスレッド間で書き込みが行われる変数を共通変数と称する。【０００３】
シングルコアプロセッサシステムにおいて共通変数を有するスレッドを実行するには逐次処理を行うことで、スレッドの実行順序が変わってしまうことにより最終的な共通変数の値が異なるのを防止することができる。【０００４】
ここで、共通変数に関して、ブラウザ処理のバナー表示処理を例に挙げて説明する。バナー表示処理では表示するデータを共有メモリへ格納する。バナー表示処理が複数ある場合、各バナー表示で表示するデータをＨＴＭＬ（Ｈｙｐｅｒ  Ｔｅｘｔ  ＭａｒｋＵｐ  Ｌａｎｇｕａｇｅ）文書に記載されたバナーの表示順（Ｚオーダー）に沿って共有メモリへ格納する。表示によってはバナー同士が重なって表示される場合があるため、バナーの表示順を遵守してバナー表示処理が実行されなければならないため、上述したように逐次処理が行われる。【０００５】
また、共有メモリ型マルチコアプロセッサシステムでは、各スレッドはマルチコアプロセッサから任意のＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）に割り当てられることで、該スレッドの処理が実行される。マルチコアプロセッサシステムでは、各ＣＰＵが他のＣＰＵの実行状況に関係なく、該各ＣＰＵに割り当てられたスレッドを実行する。各ＣＰＵは共通変数を有するスレッドを実行する場合、該共通変数を有する他のすべてのスレッドと逐次処理を行うか同期処理を行う必要がある（たとえば、下記非特許文献１を参照。）。
【先行技術文献】
【非特許文献】
【０００６】
【非特許文献１】間瀬  正啓、外２名、「マルチコアにおけるＰａｒａｌｌｅｌｉｚａｂｌｅ  Ｃプログラムの自動並列化」、２００９  Ｉｎｆｏｒｍａｔｉｏｎ  Ｐｒｏｃｅｓｓｉｎｇ  Ｓｏｃｉｅｔｙ  ｏｆ  Ｊａｐａｎ
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、逐次処理ではスループットが低下する問題点があり、同期処理ではオーバーヘッドで実行効率が低下してしまう問題点があった。【０００８】
本発明は、上述した従来技術による問題点を解消するため、スループットおよび実行効率を向上させることができる情報処理装置、情報処理プログラム、および情報処理方法を提供することを目的とする。
【課題を解決するための手段】
【０００９】
本発明の一観点によれば、出力先への出力順を規定する番号群と当該番号群の各番号に対応するデータ記憶領域とを有する記憶手段にアクセス可能であって、対象プロセス内の同一の共通変数の値についての書き込み要求を有するスレッド群の各スレッドの前記共通変数の値の格納先を、前記各スレッドの実行順を前記出力順を規定する番号に対応させたデータ記憶領域に設定し、前記スレッド群のスレッドごとに、設定された前記データ記憶領域に、当該データ記憶領域の出力順を規定する番号に対応する実行順のスレッドについての前記共通変数の値を格納し、前記スレッド群のすべてのスレッドが終了すると、前記スレッドごとに前記データ記憶領域に格納された前記共通変数の各値を前記出力順に読み出し、読み出した前記共通変数の各値を前記出力順に特定の格納先へ上書きする情報処理装置、情報処理プログラム、および情報処理方法が提供される。
【発明の効果】
【００１０】
本情報処理装置、情報処理プログラム、および情報処理方法によれば、スループットおよび実行効率を向上させることができるという効果を奏する。
【図面の簡単な説明】
【００１１】
【図１】本発明の一実施例を示す説明図である。
【図２】情報処理装置のハードウェアを示すブロック図である。
【図３】スレッド管理テーブル３００の一例を示す説明図である。
【図４】実行順序情報の一例を示す説明図である。
【図５】共通変数情報の一例を示す説明図である。
【図６】情報処理装置２００を示すブロック図である。
【図７】プロセス１の起動例を示す説明図である。
【図８】対象プロセスの各スレッドの割当例を示す説明図である。
【図９】スレッド１からの書き込み要求の検出例１を示す説明図である。
【図１０】スレッド１からの書き込み要求の検出例２を示す説明図である。
【図１１】スレッド３からの書き込み要求の検出例を示す説明図である。
【図１２】スレッド２からの書き込み要求の検出例１を示す説明図である。
【図１３】スレッド２からの書き込み要求の検出例２を示す説明図である。
【図１４】スレッド４からの書き込み要求の検出例を示す説明図である。
【図１５】スレッド４の終了の検出例を示す説明図である。
【図１６】すべてのスレッドの終了の検出例を示す説明図である。
【図１７】ＯＳ２１０による情報処理手順を示すフローチャートである。
【図１８】各ＯＳによる情報処理手順を示すフローチャートである。
【図１９】共通変数への書き込み処理を有するスレッドの終了時のＯＳ２１０による制御処理手順を示すフローチャートである。
【図２０】ＯＳＤ処理部２０３による出力処理手順を示すフローチャートである。
【発明を実施するための形態】
【００１２】
以下に添付図面を参照して、本発明にかかる情報処理装置、情報処理プログラム、および情報処理方法の好適な実施の形態を詳細に説明する。
【００１３】
図１は、本発明の一実施例を示す説明図である。ここでは、アプリケーションの一例として、ブラウザ内のバナー表示１およびバナー表示２を挙げる。図１では、ブラウザのバナー表示の重なり箇所を共通変数ａとしている。テーブル１００はブラウザ処理のスレッドの実行順序を示す情報である。テーブル１００では、スレッドＩＤの項目１０１と実行順の番号の項目１０２とを有している。スレッドＩＤの項目１０１にはスレッドの識別情報が登録されている。実行順の番号の項目１０２には実行順序を示す番号が登録されている。実行順の番号はブラウザ処理がＨＴＭＬ文書を解析することにより得られる情報である。
【００１４】
テーブル１０３は共通変数ａを有するスレッドごとの共通変数ａの値の格納先を示す情報である。テーブル１０３はスレッドＩＤの項目１０４と共通変数ａの格納先の項目１０５とを有している。スレッドＩＤの項目１０４にはスレッドの識別情報が登録されている。共通変数ａの格納先の項目１０５にはＯＳによりＧＲＡＭ上の格納先のアドレスが登録される。
【００１５】
ＧＲＡＭ（Ｇｒａｐｈｉｃ  Ｒａｎｄａｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）は出力先への出力順を規定する番号群と当該番号群の各番号に対応するデータ記憶領域とを有する。該出力先は表示装置である。ＯＳＤ処理部はＧＲＡＭのデータ記憶領域に記憶されたデータを出力順に出力先へ出力する。
【００１６】
まず、ＯＳが、ブラウザ処理が起動されると、（１）ブラウザ処理に含まれるバナー表示処理１とバナー表示処理２との共通変数ａの値の格納先を、各スレッドの実行順をＧＲＡＭ内の出力順を規定する番号（出力順の番号）に対応させたデータ記憶領域に設定する。ＧＲＡＭ内の出力順の番号はテーブル１００に基づいて設定される。そして、ＯＳが、テーブル１００に確保した各格納先を設定する。
【００１７】
つぎに、ＯＳが、（２）バナー表示処理２からの共通変数ａの書き込み要求を検出すると、（３）設定されたバナー表示処理２のデータ記憶領域に、バナー表示処理２の共通変数ａの値を格納する。つぎに、ＯＳが、（４）バナー表示処理１からの共通変数ａの書き込み要求を検出すると、（５）設定されたバナー表示処理１のデータ記憶領域に、バナー表示処理１の共通変数ａの値を格納する。
【００１８】
そして、ＯＳが、バナー表示処理１およびバナー表示処理２の終了を検出すると、（６）ＯＳＤ処理部に書き込み指示を通知する。そして、ＯＳＤ処理部が（７）データ記憶領域に格納された共通変数ａの各値を出力の番号順に読み出し、（８）読み出した共通変数ａの値を特定の格納先へ上書きする。
【００１９】
よって、バナー表示処理２における共通変数ａの値の書き込み処理のあとに、バナー表示処理１における共通変数ａの値の書き込み処理が実行されても、特定の格納先の共通変数ａの値はバナー表示処理２における共通変数ａの値となる。
【００２０】
本実施の形態では情報処理装置の一例としてマルチコアプロセッサシステムを挙げて説明する。ここで、マルチコアプロセッサシステムにおいて、マルチコアプロセッサとは、コアが複数搭載されたプロセッサである。コアが複数搭載されていれば、複数のコアが搭載された単一のプロセッサでもよく、シングルコアのプロセッサが並列されているプロセッサ群でもよい。なお、本実施の形態では、説明を単純化するため、シングルコアのプロセッサが並列されているプロセッサ群を例に挙げて説明する。
【００２１】
（情報処理装置のハードウェア）
図２は、情報処理装置のハードウェアを示すブロック図である。情報処理装置２００では、ＣＰＵ＃０〜ＣＰＵ＃３と、共有メモリ２０１と、ＧＲＡＭ２０２と、ＯＳＤ処理部２０３と、ディスプレイ２０４と、を有している。各部はバス２０５を介して接続されている。
【００２２】
ここで、ＣＰＵ＃０〜ＣＰＵ＃３はそれぞれコアとレジスタとキャッシュとを有している。ＣＰＵ＃０はＯＳ２１０を実行し、情報処理装置２００の全体の制御を司る。ＯＳ２１０はマスタＯＳであり、スレッドをどのＣＰＵに割り当てるかを制御する機能を有し、該ＣＰＵ＃０に割り当てられたスレッドを実行する。
【００２３】
ＣＰＵ＃１とＣＰＵ＃２とＣＰＵ＃３とは、それぞれＯＳ２１１とＯＳ２１２とＯＳ２１３とを実行し、各ＯＳに割り当てられたスレッドを実行する。ＯＳ２１１〜ＯＳ２１３はスレーブＯＳである。
【００２４】
ＧＲＡＭ２０２は、図１で示したＧＲＡＭと同様に出力先への出力順を規定する番号群と当該番号群の各番号に対応するデータ記憶領域とを有する。該出力先はディスプレイ２０４である。
【００２５】
ディスプレイ２０４は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。ディスプレイ２０４は、たとえば、ＴＦＴ液晶ディスプレイ、プラズマディスプレイなどを採用することができる。
【００２６】
ＯＳＤ処理部２０３はＧＲＡＭ２０２上に格納されたデータをＺ値に基づいてディスプレイ２０４または共有メモリ２０１へ出力する機能を有する。ＯＳＤ処理部２０３はモード設定レジスタとプロセスＩＤレジスタとを有している。モード設定レジスタはディスプレイ２０４へデータを出力するか、共有メモリ２０１へデータを出力するかを示すレジスタである。モード設定レジスタは１ビットのレジスタである。
【００２７】
モード設定レジスタの値が０であると、ＯＳＤ処理部２０３によるデータの出力先がディスプレイ２０４であることを示し、モード設定レジスタの値が１であると、ＯＳＤ処理部２０３によるデータの出力先が共有メモリ２０１であることを示す。本実施の形態では、ＯＳＤ処理部２０３がモード設定レジスタの値が０から１へと変化したのを検出することを共有メモリ２０１への書き込み指示を検出したこととする。
【００２８】
プロセスＩＤレジスタはプロセスの識別情報が登録されるレジスタである。ＯＳＤ処理部２０３が共有メモリ２０１への書き込み指示を検出すると、プロセスＩＤレジスタに設定されたプロセスの識別情報に対応するＧＲＡＭ２０２上のデータをＺ値の順で共有メモリ２０１へ出力する。
【００２９】
共有メモリ２０１は、具体的には、たとえば、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）と、フラッシュＲＯＭなどを有している。たとえば、フラッシュＲＯＭがブートプログラムを記憶し、ＲＯＭがアプリケーションソフトウェアを記憶し、ＲＡＭがＣＰＵ＃０〜ＣＰＵ＃３のワークエリアとして使用される。共有メモリ２０１に記憶されているプログラムは、各ＣＰＵにロードされることで、コーディングされている処理を該各ＣＰＵに実行させることとなる。共有メモリ２０１は、たとえば、スレッド管理テーブル３００と、実行順序情報群と、共通変数情報群と、を記憶している。
【００３０】
スレッド管理テーブル３００は、起動指示が受け付けられたプロセスごとにスレッドの割当先ＣＰＵを管理する情報である。
【００３１】
図３は、スレッド管理テーブル３００の一例を示す説明図である。スレッド管理テーブル３００は、プロセスＩＤの項目３０１と、スレッドＩＤの項目３０２と、割当領域の項目３０３と、割当先ＣＰＵの項目３０４と、状態の項目３０５と、を有している。
【００３２】
プロセスＩＤの項目３０１にはプロセスＩＤが保持される。スレッドＩＤの項目３０２にはプロセスごとに該プロセスに含まれるスレッドのスレッドＩＤが保持される。割当領域の項目３０３にはＧＲＡＭ２０２上にスレッドごとに確保した記憶領域のアドレスが保持される。割当先ＣＰＵの項目３０４にはスレッドの割当先ＣＰＵの識別情報が保持される。状態の項目３０５にはスレッドの状態が保持される。スレッドの状態には未割当と、実行中と、終了と、の４つの状態がある。
【００３３】
たとえば、ＯＳ２１０がプロセスの起動指示を受け付けると、スレッド管理テーブル３００内のプロセスＩＤの項目３０１に起動指示を受け付けたプロセスの識別情報を登録する。そして、ＯＳ２１０がスレッド管理テーブル３００内のスレッドＩＤの項目３０２に該プロセスに含まれるスレッドの識別情報を登録するとともに、状態の項目３０５に未割当を登録する。
【００３４】
図２に戻って、実行順序情報群の各実行順序情報は、たとえば、各プロセス内の共通変数を含むスレッドの実行順序を示す情報である。本実施の形態では、ＧＲＡＭ２０２内のスレッドごとの共通変数を共有メモリ２０１へ格納する際の特定順序の一例として該実行順序を挙げている。
【００３５】
図４は、実行順序情報の一例を示す説明図である。実行順序情報４００はプロセス１内の共通変数を含むスレッドの実行順序を示す情報である。プロセス１ではスレッド１が１番目に実行され、スレッド２が２番目に実行され、スレッド３が３番目に実行され、スレッド４が４番目に実行されることとする。そして、ＯＳはＧＲＡＭ２０２のＺ値として該実行順序を示す番号を登録することとする。
【００３６】
図５は、共通変数情報の一例を示す説明図である。共通変数情報５００はプロセス１内の共通変数に関する情報である。共通変数情報５００はアドレス情報の項目５０１とサイズの項目５０２とを有している。アドレス情報の項目５０１には共有メモリ２０１上のアドレス情報が保持され、サイズの項目５０２はアドレス情報の項目５０１に保持されているアドレスに格納される変数のサイズが保持されている。ここで、プロセス１の共通変数は、共有メモリ２０１上のアドレスＡと共有メモリ２０１上のアドレスＢとに格納される変数である。
【００３７】
共有メモリ２０１上のアドレスＡに格納される変数のサイズは２バイトであり、共有メモリ２０１上のアドレスＢに格納される変数のサイズは３バイトである。共有メモリ２０１上のアドレスＡに格納される変数の２バイトの領域と、アドレスＡが格納できるサイズの領域と、共有メモリ２０１上のアドレスＢに格納される変数の３バイトの領域と、アドレスＢが格納できるサイズの領域と、が共通変数を含むスレッドごとに設定される。
【００３８】
（情報処理装置２００のブロック図）
図６は、情報処理装置２００を示すブロック図である。情報処理装置２００は、設定部６０１と、第１の格納部６０２と、第２の格納部６０３と、記憶部６０４と、を有している。記憶部６０４は、ＧＲＡＭ２０２である。設定部６０１は、共有メモリ２０１に記憶された情報処理プログラムを有するＯＳ２１０をＣＰＵ＃０が実行することにより、該部の機能が実現される。第１の格納部６０２は、共有メモリ２０１に記憶された情報処理プログラムを有するＯＳを各ＣＰＵが実行することにより、該部の機能が実現される。第２の格納部６０３については、ＯＳがＯＳＤ処理部２０３に書き込み指示を通知し、ＯＳＤ処理部２０３が書き込み指示を受け付けると、第２の格納部６０３の機能を実現する。
【００３９】
記憶部６０４は、出力先への出力順を規定する番号群と当該番号群の各番号に対応するデータ記憶領域とを有する。
【００４０】
設定部６０１は、対象プロセス内の同一の共通変数の値についての書き込み要求を有するスレッド群の各スレッドの共通変数の値の格納先を、各スレッドの実行順を出力順を規定する番号に対応させたデータ記憶領域に設定する。
【００４１】
第１の格納部６０２は、スレッド群のスレッドごとに、設定部６０１により設定されたデータ記憶領域に、当該データ記憶領域の出力順を規定する番号に対応する実行順のスレッドについての共通変数の値を格納する。
【００４２】
第２の格納部６０３は、スレッド群のすべてのスレッドが終了すると、第１の格納部６０２によりスレッドごとにデータ記憶領域に格納された共通変数の各値を出力順に読み出し、読み出した共通変数の各値を出力順に特定の格納先へ上書きする。
【００４３】
図７は、プロセス１の起動例を示す説明図である。まず、ＯＳ２１０が、（１）プロセス１の起動指示を検出すると、ＯＳ２１０が、（２）プロセス１のスレッドのうち、共通変数を扱うスレッドごとにＧＲＡＭ２０２上に共通変数を格納させる記憶領域を共通変数情報５００に基づいて設定する。本実施の形態では、スレッドごとに設定された記憶領域に記憶される共有メモリ２０１のアドレスＡに格納される変数と、共有メモリ２０１のアドレスＢに格納される変数と、アドレスＡと、アドレスＢと、は該記憶領域において格納される位置が決定されていることとする。
【００４４】
そして、ＯＳ２１０が（３）スレッド管理テーブル３００にプロセス１に関する情報を登録する。つぎに、ＯＳ２１０が（４）スレッド１をＣＰＵ＃０に割り当て、ＯＳ２１０が（５）スレッド管理テーブル３００にスレッド１の割当先ＣＰＵを登録する。
【００４５】
図８は、対象プロセスの各スレッドの割当例を示す説明図である。図８では、スレッド１がＣＰＵ＃０に割り当てられ、スレッド２がＣＰＵ＃１に割り当てられ、スレッド３がＣＰＵ＃２に割り当てられ、スレッド４がＣＰＵ＃３に割り当てられている。スレッド管理テーブル３００には各スレッドの割当先ＣＰＵが登録されている。
【００４６】
図９は、スレッド１からの書き込み要求の検出例１を示す説明図である。ＯＳ２１０がスレッド１からの書き込み要求を検出すると、ＯＳ２１０が該書き込み要求の書き込み先アドレスであるアドレスＡを共通変数情報５００から検索する。ＯＳ２１０が共通変数情報５００からアドレスＡを探し当てると、ＯＳ２１０がスレッド管理テーブル３００からスレッド１のＧＲＡＭ２０２上の記憶領域のアドレスを取得する。ＯＳ２１０が取得したアドレスに基づいてＧＲＡＭ２０２に対して書き込み要求を実行する。ＧＲＡＭ２０２内のスレッド１の記憶領域にはデータＣとアドレスＡが格納されている。
【００４７】
図１０は、スレッド１からの書き込み要求の検出例２を示す説明図である。ＯＳ２１０がスレッド１からの書き込み要求を検出すると、ＯＳ２１０が該書き込み要求の書き込み先アドレスであるアドレスＢを共通変数情報５００から検索する。ＯＳ２１０が共通変数情報５００からアドレスＢを探し当てると、ＯＳ２１０がスレッド管理テーブル３００からスレッド１のＧＲＡＭ２０２上の記憶領域のアドレスを取得する。ＯＳ２１０が取得したアドレスに基づいてスレッド１の記憶領域へデータＤとアドレスＢとを格納する。ＧＲＡＭ２０２のスレッド１の記憶領域にはデータＣとデータＤとアドレスＡとアドレスＢが格納されている。
【００４８】
図１１は、スレッド３からの書き込み要求の検出例を示す説明図である。ＯＳ２１２がスレッド３からの書き込み要求を検出すると、ＯＳ２１２が該書き込み要求の書き込み先アドレスであるアドレスＡを共通変数情報５００から検索する。ＯＳ２１２が共通変数情報５００からアドレスＡを探し当てると、ＯＳ２１２がスレッド管理テーブル３００からスレッド３のＧＲＡＭ２０２上の記憶領域のアドレスを取得する。ＯＳ２１２が取得したアドレスに基づいてスレッド３の記憶領域へデータＥとアドレスＡとを格納する。ＧＲＡＭ２０２のスレッド３の記憶領域にはデータＥとアドレスＡが格納されている。
【００４９】
図１２は、スレッド２からの書き込み要求の検出例１を示す説明図である。ＯＳ２１１がスレッド２からの書き込み要求を検出すると、ＯＳ２１１が該書き込み要求の書き込み先アドレスであるアドレスＢを共通変数情報５００から検索する。ＯＳ２１１が共通変数情報５００からアドレスＢを探し当てると、ＯＳ２１１がスレッド管理テーブル３００からスレッド２のＧＲＡＭ２０２上の記憶領域のアドレスを取得する。ＯＳ２１１が取得したアドレスに基づいてスレッド２の記憶領域へデータＦとアドレスＢとを格納する。ＧＲＡＭ２０２のスレッド２の記憶領域にはデータＦとアドレスＢが格納されている。
【００５０】
図１３は、スレッド２からの書き込み要求の検出例２を示す説明図である。ＯＳ２１１がスレッド２からの書き込み要求を検出すると、ＯＳ２１１が該書き込み要求の書き込み先アドレスであるアドレスＡを共通変数情報５００から検索する。ＯＳ２１１が共通変数情報５００からアドレスＡを探し当てると、ＯＳ２１１がスレッド管理テーブル３００からスレッド２のＧＲＡＭ２０２上の記憶領域のアドレスを取得する。ＯＳ２１１が取得したアドレスに基づいてＧＲＡＭ２０２にスレッド２の記憶領域へデータＧとアドレスＡとを格納する。ＧＲＡＭ２０２のスレッド２の記憶領域にはデータＧとアドレスＡが格納されている。
【００５１】
図１４は、スレッド４からの書き込み要求の検出例を示す説明図である。ＯＳ２１３がスレッド４からの書き込み要求を検出すると、ＯＳ２１３が該書き込み要求の書き込み先アドレスであるアドレスＢを共通変数情報５００から検索する。ＯＳ２１３が共通変数情報５００からアドレスＢを探し当てると、ＯＳ２１３がスレッド管理テーブル３００からスレッド４のＧＲＡＭ２０２上の記憶領域のアドレスを取得する。ＯＳ２１３が取得したアドレスに基づいてスレッド２の記憶領域へデータＨとアドレスＢとを格納する。ＧＲＡＭ２０２のスレッド４の記憶領域にはデータＨとアドレスＢが格納されている。
【００５２】
図１５は、スレッド４の終了の検出例を示す説明図である。ＯＳ２１３がスレッド４の終了を検出すると、スレッド管理テーブル３００内のプロセス１に関するスレッド４の状態の項目３０５を実行中から終了に更新する。
【００５３】
図１６は、すべてのスレッドの終了の検出例を示す説明図である。ＯＳ２１０がスレッド管理テーブル３００の状態の項目３０５の更新に基づいてプロセス１のすべてのスレッドの終了を検出すると、ＯＳ２１０がＯＳＤ処理部２０３のプロセスＩＤレジスタを１に設定する。そして、ＯＳ２１０がモード設定レジスタを１に設定する。
【００５４】
ＯＳＤ処理部２０３はモード設定レジスタが１に変化したのを検出すると、ＯＳＤ処理部２０３がプロセスＩＤレジスタに設定された値に基づいて、ＧＲＡＭ２０２から共有メモリ２０１へ出力するＧＲＡＭ２０２上の記憶領域を、スレッド管理テーブル３００を用いて特定する。ＯＳＤ処理部２０３は特定したＧＲＡＭ２０２上の記憶領域のうち、Ｚ値が小さい値の領域順に格納されたアドレス情報に基づいて共有メモリ２０１へデータを格納する。
【００５５】
（情報処理手順）
図１７は、ＯＳ２１０による情報処理手順を示すフローチャートである。まず、ＯＳ２１０が、対象プロセスの起動指示または対象スレッドの割当指示を受け付けたか否かを判断する（ステップＳ１７０１）。ＯＳ２１０が、対象プロセスの起動指示および対象スレッドの割当指示を受け付けていないと判断した場合（ステップＳ１７０１：Ｎｏ）、ステップＳ１７０１へ戻る。
【００５６】
ステップＳ１７０１において、ＯＳ２１０が、対象スレッドの割当指示を受け付けたと判断した場合（ステップＳ１７０１：対象スレッドの割当指示）、割当指示を受け付けた対象スレッドの割当先ＣＰＵを決定する（ステップＳ１７０２）。つぎに、ＯＳ２１０が、対象スレッドの割当先ＣＰＵをスレッド管理テーブル３００に登録し（ステップＳ１７０３）、対象スレッドを割り当てて（ステップＳ１７０４）、ステップＳ１７０１へ戻る。
【００５７】
ステップＳ１７０１において、ＯＳ２１０が、対象プロセスの起動指示を受け付けたと判断した場合（ステップＳ１７０１：対象プロセスの起動指示）、対象プロセスの実行順序情報４００を取得する（ステップＳ１７０５）。ＯＳ２１０が、対象プロセスのスレッドごとにデータのサイズおよび該各アドレスのサイズ分の領域をＧＲＡＭ２０２上に確保する（ステップＳ１７０６）。
【００５８】
ＯＳ２１０が、スレッド管理テーブル３００に対象プロセスを登録し（ステップＳ１７０７）、対象プロセスのマスタスレッドの割当先ＣＰＵを決定する（ステップＳ１７０８）。ＯＳ２１０が、マスタスレッドの割当先ＣＰＵをスレッド管理テーブル３００に登録し（ステップＳ１７０９）、対象プロセスのマスタスレッドを割当先ＣＰＵに割り当て（ステップＳ１７１０）、ステップＳ１７０１へ戻る。
【００５９】
図１８は、各ＯＳによる情報処理手順を示すフローチャートである。図１８で示す情報処理手順は各ＯＳが実行主体であるが、ＯＳ２１０を例に挙げて説明する。ＯＳ２１０が、実行中のスレッドからの書き込み要求、またはスレッドの終了を検出したか否かを判断する（ステップＳ１８０１）。ＯＳ２１０が、実行中のスレッドからの書き込み要求およびスレッドの終了を検出していないと判断した場合（ステップＳ１８０１：Ｎｏ）、ステップＳ１８０１へ戻る。
【００６０】
ＯＳ２１０が、実行中のスレッドの終了を検出したと判断した場合（ステップＳ１８０１：スレッドの終了）、スレッド管理テーブル３００内の終了したスレッドに関する状態を更新し（ステップＳ１８０２）、ステップＳ１８０１へ戻る。ＯＳ２１０が、実行中のスレッドからの書き込み要求を検出したと判断した場合（ステップＳ１８０１：書き込み要求）、スレッドが属するプロセスに関する共通変数情報を取得する（ステップＳ１８０３）。
【００６１】
つぎに、ＯＳ２１０が、書き込み要求のアドレス情報を共通変数情報から検索し（ステップＳ１８０４）、書き込み要求のアドレス情報が共通変数情報にあるか否かを判断する（ステップＳ１８０５）。ＯＳ２１０が、書き込み要求のアドレス情報が共通変数情報にないと判断した場合（ステップＳ１８０５：Ｎｏ）、ステップＳ１８０１へ戻る。
【００６２】
つぎに、ＯＳ２１０が、書き込み要求の格納先が共通変数情報にあると判断した場合（ステップＳ１８０５：Ｙｅｓ）、実行中のスレッドに対応するＧＲＡＭ２０２上の領域へデータとアドレス情報とを書き込み（ステップＳ１８０６）、ステップＳ１８０１へ戻る。
【００６３】
図１９は、共通変数への書き込み処理を有するスレッドの終了時のＯＳ２１０による制御処理手順を示すフローチャートである。ＯＳ２１０が、共通変数を用いるスレッドがすべて終了したプロセスを検出したか否かを判断する（ステップＳ１９０１）。ＯＳ２１０が、共通変数を用いるスレッドがすべて終了したプロセスを検出していないと判断した場合（ステップＳ１９０１：Ｎｏ）、一連の処理を終了する。
【００６４】
一方、ＯＳ２１０が、共通変数を用いるスレッドがすべて終了したプロセスを検出したと判断した場合（ステップＳ１９０１：Ｙｅｓ）、ＧＲＡＭ２０２上の検出されたプロセスの領域内のデータを共有メモリ２０１へ書き込む書き込み指示をＯＳＤ処理部２０３に通知する（ステップＳ１９０２）。書き込み指示とは、具体的には、モード設定フラグを１に設定することを示している。
【００６５】
そして、ＯＳ２１０が、ＯＳＤ処理部２０３からの完了通知を受け付けたか否かを判断する（ステップＳ１９０３）。ＯＳ２１０が、ＯＳＤ処理部２０３からの完了通知を受け付けていないと判断した場合（ステップＳ１９０３：Ｎｏ）、ステップＳ１９０３へ戻る。ＯＳ２１０が、ＯＳＤ処理部２０３からの完了通知を受け付けたと判断した場合（ステップＳ１９０３：Ｙｅｓ）、ＧＲＡＭ２０２上の検出されたプロセスの領域を解放する（ステップＳ１９０４）。ＯＳ２１０が、検出されたプロセスに関する情報をスレッド管理テーブル３００から削除し（ステップＳ１９０５）、一連の処理を終了する。
【００６６】
図２０は、ＯＳＤ処理部２０３による出力処理手順を示すフローチャートである。ＯＳＤ処理部２０３が、共有メモリへの書き込み指示を検出したか否かを判断する（ステップＳ２００１）。ここで、書き込み指示を検出するとは、モード設定フラグが０から１に変化したことを示している。
【００６７】
ＯＳＤ処理部２０３が、共有メモリへの書き込み指示を検出していないと判断した場合（ステップＳ２００１：Ｎｏ）、ステップＳ２００１へ戻る。ＯＳＤ処理部２０３が、共有メモリへの書き込み指示を検出したと判断した場合（ステップＳ２００１：Ｙｅｓ）、プロセスＩＤレジスタに設定されたプロセスＩＤに基づいてスレッド管理テーブル３００から各スレッドの配置領域を特定する（ステップＳ２００２）。
【００６８】
ＯＳＤ処理部２０３は、ＧＲＡＭ２０２上の各スレッドの配置領域に格納されたＺ値を特定し（ステップＳ２００３）、Ｚ値の小さい順にＧＲＡＭ２０２から共有メモリへ出力し（ステップＳ２００４）、書き込み完了をマスタＯＳへ通知し（ステップＳ２００５）、ステップＳ２００１へ戻る。また、ＯＳＤ処理部２０３は書き込み完了をマスタＯＳへ通知するとともに、モード設定レジスタを０に設定する。
【００６９】
以上説明したように、情報処理装置、情報処理プログラム、および情報処理方法によれば、対象プロセスで共通変数を有するスレッド群の各スレッドの共通変数の値を、ＧＲＡＭ上に出力順を規定する番号に各スレッドの実行順を対応させた領域に格納する。そして、該スレッド群のすべてのスレッドが終了後に、出力順を規定する番号順にＧＲＡＭ上から共通変数の値を読み出し、該番号順に特定の格納先に上書きする。スレッド群の動作時の実行順序とプロセス定義されたスレッド群の実行順序とが異なっていても、最終的な共通変数の値が異なるのを防止することができ、スループットおよび実行効率を向上させることができる。
【００７０】
また、各スレッドの共通変数の値をそれぞれ異なる領域として既存のハードウェアであるＧＲＡＭを用いることにより、機能を容易に実現することができる。
【符号の説明】
【００７１】
２００  情報処理装置
２０２  ＧＲＡＭ
６０１  設定部
６０２  第１の格納部
６０３  第２の格納部
６０４  記憶部
【図１】
2012046300.tif 000003
【図２】
2012046300.tif 000004
【図３】
2012046300.tif 000005
【図４】
2012046300.tif 000006
【図５】
2012046300.tif 000007
【図６】
2012046300.tif 000008
【図７】
2012046300.tif 000009
【図８】
2012046300.tif 000010
【図９】
2012046300.tif 000011
【図１０】
2012046300.tif 000012
【図１１】
2012046300.tif 000013
【図１２】
2012046300.tif 000014
【図１３】
2012046300.tif 000015
【図１４】
2012046300.tif 000016
【図１５】
2012046300.tif 000017
【図１６】
2012046300.tif 000018
【図１７】
2012046300.tif 000019
【図１８】
2012046300.tif 000020
【図１９】
2012046300.tif 000021
【図２０】
2012046300.tif 000022
【国際調査報告】
2012046300.tif 000023
2012046300.tif 000024
2012046300.tif 000025
2012046300.tif 000026