特許第6962717号(P6962717)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 日本電気株式会社の特許一覧 ▶ NECプラットフォームズ株式会社の特許一覧

特許6962717情報処理装置、情報処理方法および情報処理プログラム
<>
  • 特許6962717-情報処理装置、情報処理方法および情報処理プログラム 図000002
  • 特許6962717-情報処理装置、情報処理方法および情報処理プログラム 図000003
  • 特許6962717-情報処理装置、情報処理方法および情報処理プログラム 図000004
  • 特許6962717-情報処理装置、情報処理方法および情報処理プログラム 図000005
  • 特許6962717-情報処理装置、情報処理方法および情報処理プログラム 図000006
  • 特許6962717-情報処理装置、情報処理方法および情報処理プログラム 図000007
  • 特許6962717-情報処理装置、情報処理方法および情報処理プログラム 図000008
  • 特許6962717-情報処理装置、情報処理方法および情報処理プログラム 図000009
  • 特許6962717-情報処理装置、情報処理方法および情報処理プログラム 図000010
  • 特許6962717-情報処理装置、情報処理方法および情報処理プログラム 図000011
  • 特許6962717-情報処理装置、情報処理方法および情報処理プログラム 図000012
  • 特許6962717-情報処理装置、情報処理方法および情報処理プログラム 図000013
  • 特許6962717-情報処理装置、情報処理方法および情報処理プログラム 図000014
  • 特許6962717-情報処理装置、情報処理方法および情報処理プログラム 図000015
  • 特許6962717-情報処理装置、情報処理方法および情報処理プログラム 図000016
  • 特許6962717-情報処理装置、情報処理方法および情報処理プログラム 図000017
  • 特許6962717-情報処理装置、情報処理方法および情報処理プログラム 図000018
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6962717
(24)【登録日】2021年10月18日
(45)【発行日】2021年11月5日
(54)【発明の名称】情報処理装置、情報処理方法および情報処理プログラム
(51)【国際特許分類】
   G06F 9/52 20060101AFI20211025BHJP
【FI】
   G06F9/52 120B
【請求項の数】9
【全頁数】16
(21)【出願番号】特願2017-117703(P2017-117703)
(22)【出願日】2017年6月15日
(65)【公開番号】特開2019-3415(P2019-3415A)
(43)【公開日】2019年1月10日
【審査請求日】2020年5月15日
(73)【特許権者】
【識別番号】000004237
【氏名又は名称】日本電気株式会社
(73)【特許権者】
【識別番号】000227205
【氏名又は名称】NECプラットフォームズ株式会社
(74)【代理人】
【識別番号】100109313
【弁理士】
【氏名又は名称】机 昌彦
(74)【代理人】
【識別番号】100124154
【弁理士】
【氏名又は名称】下坂 直樹
(72)【発明者】
【氏名】柳 岳大
【審査官】 三坂 敏夫
(56)【参考文献】
【文献】 特開平07−200321(JP,A)
【文献】 特開平04−127260(JP,A)
【文献】 特開2010−108179(JP,A)
【文献】 国際公開第2012/046300(WO,A1)
【文献】 特開平05−210559(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/455− 9/54
(57)【特許請求の範囲】
【請求項1】
タスクの実行中にアクセスする資源を排他するために作成されるロック情報ごとに、前記タスクを実行可能なプロセッサにそれぞれ対応するカウンタを作成し、当該カウンタの値を初期化する初期化手段と、
前記タスク内の、前記資源を専有する関数の実行において、当該タスクの実行を割り当てられている前記プロセッサのカウンタの値が初期値である場合、前記ロック情報を取得すると共に当該プロセッサのカウンタの値をカウントアップして前記関数を実行し、前記プロセッサのカウンタの値が初期値でない場合、前記ロック情報を取得せずに前記プロセッサのカウンタの値をカウントアップして前記関数を実行する実行手段と
を備えた情報処理装置。
【請求項2】
前記実行手段は、前記タスク内の、前記資源を専有する関数の実行において、前記資源に対する該関数によるアクセスが完了すると、前記タスクの実行を割り当てられている前記プロセッサのカウンタの値をカウントダウンし、該カウントダウンしたカウンタの値が初期値である場合、前記ロック情報を解放して、前記タスクの実行を継続する
請求項1記載の情報処理装置。
【請求項3】
前記実行手段は、前記カウントダウンしたカウンタの値が初期値でない場合、前記ロック情報を解放せずに、前記タスクの実行を継続する
請求項2記載の情報処理装置。
【請求項4】
タスクの実行中にアクセスする資源を排他するために作成されるロック情報ごとに、前記タスクを実行可能なプロセッサにそれぞれ対応するカウンタを作成し、当該カウンタの値を初期化し、
前記タスク内の、前記資源を専有する関数の実行において、当該タスクの実行を割り当てられている前記プロセッサのカウンタの値が初期値である場合、前記ロック情報を取得すると共に当該プロセッサのカウンタの値をカウントアップして前記関数を実行し、前記プロセッサのカウンタの値が初期値でない場合、前記ロック情報を取得せずに前記プロセッサのカウンタの値をカウントアップして前記関数を実行する
情報処理方法。
【請求項5】
前記タスク内の、前記資源を専有する関数の実行において、前記資源に対する該関数によるアクセスが完了すると、前記タスクの実行を割り当てられている前記プロセッサのカウンタの値をカウントダウンし、該カウントダウンしたカウンタの値が初期値である場合、前記ロック情報を解放して、前記タスクの実行を継続する
請求項4記載の情報処理方法。
【請求項6】
前記カウントダウンしたカウンタの値が初期値でない場合、前記ロック情報を解放せずに、前記タスクの実行を継続する
請求項5記載の情報処理方法。
【請求項7】
タスクの実行中にアクセスする資源を排他するために作成されるロック情報ごとに、前記タスクを実行可能なプロセッサにそれぞれ対応するカウンタを作成し、当該カウンタの値を初期化する初期化処理と、
前記タスク内の、前記資源を専有する関数の実行において、当該タスクの実行を割り当てられている前記プロセッサのカウンタの値が初期値である場合、前記ロック情報を取得すると共に当該プロセッサのカウンタの値をカウントアップして前記関数を実行し、前記プロセッサのカウンタの値が初期値でない場合、前記ロック情報を取得せずに前記プロセッサのカウンタの値をカウントアップして前記関数を実行する実行処理とを、
コンピュータに実行させる情報処理プログラム。
【請求項8】
前記実行処理は、前記タスク内の、前記資源を専有する関数の実行において、前記資源に対する該関数によるアクセスが完了すると、前記タスクの実行を割り当てられている前記プロセッサのカウンタの値をカウントダウンし、該カウントダウンしたカウンタの値が初期値である場合、前記ロック情報を解放して、前記タスクの実行を継続する
請求項7記載の情報処理プログラム。
【請求項9】
前記実行処理は、前記タスク内の、前記資源を専有する関数の実行において、前記資源に対する該関数によるアクセスが完了すると、前記タスクの実行を割り当てられている前記プロセッサのカウンタの値をカウントダウンし、前記カウントダウンしたカウンタの値が初期値でない場合、前記ロック情報を解放せずに、前記タスクの実行を継続する
請求項8記載の情報処理プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、スピンロックによる排他制御を行う情報処理装置、情報処理方法および情報処理プログラムに関する。
【背景技術】
【0002】
ソフトウェアにおける最小の実行単位であるタスクと、そのタスクの実行中に発生する割り込みとの間の排他制御の方式として、一般に、スピンロック(Spinlock)が用いられる。スピンロックでは、1つの資源に対して1つのロック変数がメモリに用意される(スピンロック初期化)。そして、タスクを実行するCPU(Central Processing Unit)またはCPUコアのうち、ロック変数を取得(スピンロック取得)できたCPUまたはCPUコアのみが、資源にアクセス可能となる。
【0003】
CPUまたはCPUコアは、資源へのアクセスが完了した際にロック変数を解放する(スピンロック解放)。これにより、他のCPUまたはCPUコアが、資源にアクセス可能となる。CPUまたはCPUコアは、他のCPUまたはCPUコアが資源にアクセスしている場合、ロック変数を取得できるまでループしながらその資源が解放されるのを待ち続ける。なお、以降の説明では、ロック変数の取得または解放を、それぞれスピンロックの取得または解放とも表記する。
【0004】
図15は、関数A、Bの処理について説明する図である。図15に示すように、関数A、Bにおいて、それぞれ処理A、Bは、排他が必要な処理であるため、その処理A、Bの前後に、それぞれスピンロックの取得と解放が行われる。
【0005】
図16は、関数A、Bの処理の実行について説明する図である。図16において、矢印tで示す方向は、各関数の実行中の時間経過を示す。関数Aの実行中に関数Bが実行された場合、関数Bにおけるスピンロックの取得は、関数Aにおいて取得されたスピンロックが解放されるまでの間、ループしながら待機される。よって、同じスピンロックを取得する処理が、同時に複数実行されることはない。また、スピンロックを取得して処理を実行しているCPUまたはCPUコアでは、他のタスクや割り込みは実行されない。
【0006】
ここで、特許文献1には、共有リソースに対する排他制御を確実に実行しながら、排他制御によるマイクロコントローラの処理負荷を低減し、処理性能を効率的に利用できる電子制御装置が開示されている。
【先行技術文献】
【特許文献】
【0007】
【特許文献1】特開2016−081204
【発明の概要】
【発明が解決しようとする課題】
【0008】
図17は、あるソフトウェアに含まれるタスク1の実行中にデッドロックが発生する例について説明する図である。タスク1には、関数A、Bが含まれる。関数Aでは、スピンロックが取得された後、関数Bの呼び出しが行われる。関数Bの呼び出しが行われると、関数Bでは、スピンロックを取得する処理が実行される。このとき、関数Aによってスピンロックは取得されているので、タスク1内で、同じスピンロックを多重に取得する処理が発生し、デッドロックによりソフトウェアの実行が停止する。このように、あるタスク内で発生するデッドロックを、自己デッドロックとも称する。
【0009】
ソフトウェアの構造の変更により、関数のコールツリーが変わると、上述のように、同じスピンロックを多重に取得する処理の発生により、デッドロックが発生し、ソフトウェアの実行が停止するおそれがあるという課題がある。
【0010】
特許文献1には、演算処理の実行順序を変更することにより排他制御に関わる処理時間を短くすることは開示されているが、不要な排他制御によるデッドロックの発生を防ぐ技術は開示されていない。
【0011】
本発明は、上記課題を鑑みてなされたものであり、タスク実行中の不要な排他制御によるデッドロックの発生を防ぐことができる情報処理装置等を提供することを主要な目的とする。
【課題を解決するための手段】
【0012】
本発明の一態様に係る情報処理装置は、タスクの実行中にアクセスする資源を排他するために作成されるロック情報ごとに、前記タスクを実行可能なプロセッサにそれぞれ対応するカウンタを作成し、当該カウンタの値を初期化する初期化手段と、前記タスクにおける前記資源を専有する処理の実行において、当該タスクの実行を割り当てられている前記プロセッサのカウンタの値が初期値である場合、前記ロック情報を取得すると共に当該プロセッサのカウンタの値をカウントアップして前記処理を実行し、前記プロセッサのカウンタの値が初期値でない場合、前記ロック情報を取得せずに前記プロセッサのカウンタの値をカウントアップして前記処理を実行する実行手段とを備える。
【0013】
本発明の一態様に係る情報処理方法は、タスクの実行中にアクセスする資源を排他するために作成されるロック情報ごとに、前記タスクを実行可能なプロセッサにそれぞれ対応するカウンタを作成し、当該カウンタの値を初期化し、前記タスクにおける前記資源を専有する処理の実行において、当該タスクの実行を割り当てられている前記プロセッサのカウンタの値が初期値である場合、前記ロック情報を取得すると共に当該プロセッサのカウンタの値をカウントアップして前記処理を実行し、前記プロセッサのカウンタの値が初期値でない場合、前記ロック情報を取得せずに前記プロセッサのカウンタの値をカウントアップして前記処理を実行する。
【0014】
本発明の一態様に係る情報処理プログラムは、タスクの実行中にアクセスする資源を排他するために作成されるロック情報ごとに、前記タスクを実行可能なプロセッサにそれぞれ対応するカウンタを作成し、当該カウンタの値を初期化する処理と、前記タスクにおける前記資源を専有する処理の実行において、当該タスクの実行を割り当てられている前記プロセッサのカウンタの値が初期値である場合、前記ロック情報を取得すると共に当該プロセッサのカウンタの値をカウントアップして前記処理を実行し、前記プロセッサのカウンタの値が初期値でない場合、前記ロック情報を取得せずに前記プロセッサのカウンタの値をカウントアップして前記処理を実行する処理とを、コンピュータに実行させる。
【発明の効果】
【0015】
本発明によれば、タスク実行中の不要な排他制御によるデッドロックの発生を防ぐことができるという効果が得られる。
【図面の簡単な説明】
【0016】
図1】本発明の第1の実施形態に係る情報処理装置の構成を示すブロック図である。
図2】本発明の第2の実施形態に係る情報処理装置の構成を模式的に示す図である。
図3】本発明の第2の実施形態に係る情報処理装置の構成を機能単位に示す機能ブロック図である。
図4】本発明の各実施形態に示す情報処理装置を実現するコンピュータ装置のハードウェア構成の一例を示す図である。
図5】本発明の第2の実施形態に係る情報処理装置によるスピンロックの初期化処理を説明するフローチャートである。
図6】本発明の第2の実施形態に係る情報処理装置により作成されたカウンタの例を示す図である。
図7】本発明の第2の実施形態に係る情報処理装置によるスピンロック取得処理を説明するフローチャートである。
図8】本発明の第2の実施形態に係る情報処理装置によるスピンロック解放処理を説明するフローチャートである。
図9】本発明の第2の実施形態に係る情報処理装置において作成されるスピンロックとカウンタの構成を模式的に示す図である。
図10】タスクTにおける処理の流れを説明する図である。
図11】関数Aにおけるスピンロック取得処理の実行前と実行後の各コアの各カウンタの値を例示する図である。
図12】関数Bにおけるスピンロック取得処理の実行前と実行後の各コアの各カウンタの値を例示する図である。
図13】関数Bにおけるスピンロック解放処理の実行前と実行後の各コアの各カウンタの値を例示する図である。
図14】関数Aにおけるスピンロック解放処理の実行前と実行後の各コアの各カウンタの値を例示する図である。
図15】関数A、Bの処理について説明する図である。
図16】関数A、Bの処理の実行について説明する図である。
図17】デッドロックが発生する例について説明する図である。
【発明を実施するための形態】
【0017】
以下、本発明の実施形態について図面を参照して詳細に説明する。
【0018】
第1の実施形態
図1は、本発明の第1の実施形態に係る情報処理装置100の構成を示す図である。図1に示すように、情報処理装置100は、初期化部110および実行部120を備える。
【0019】
初期化部110は、タスクの実行中にアクセスする資源を排他するために作成されるロック情報ごとに、タスクを実行可能なプロセッサ(コア)にそれぞれ対応するカウンタを作成し、そのカウンタの値を初期化する。
【0020】
実行部120は、タスクにおける資源を専有する処理の実行において、そのタスクの実行を割り当てられているプロセッサのカウンタの値が初期値である場合、ロック情報を取得すると共にプロセッサのカウンタの値をカウントアップして処理を実行し、プロセッサのカウンタの値が初期値でない場合、ロック情報を取得せずにプロセッサのカウンタの値をカウントアップして処理を実行する。
【0021】
なお、初期化部110および実行部120は、それぞれ一例として、以降の実施形態において説明するスピンロック初期化部220およびタスク実行部230により実現される。
【0022】
上記構成を採用することにより、本第1の実施形態によれば、タスク実行中にそのタスク内でロック情報を取得している場合は、多重にロック情報を取得することなく処理を実行できるので、タスク実行中の不要な排他制御によるデッドロックの発生を防ぐことができるという効果が得られる。
【0023】
第2の実施形態
図2は、本発明の第2の実施形態に係る情報処理装置200の構成を模式的に示す図である。図2に示すように、情報処理装置200は、CPU501を備える。CPU501は、番号1乃至Nの複数のプロセッサ(以降、「コア」とも称する)が動作するマルチコア構成を有する。
【0024】
ソフトウェア520は、ユーザ等により作成されたソフトウェアであるとする。OS(Operating System)530は、情報処理装置200の動作を制御する。ソフトウェア520およびOS530は、例えば後述する情報処理装置200の記憶装置等に格納されていてもよい。ソフトウェア520は、OS530上で、番号1乃至Nのコア(以降、「コア1乃至コアN」とも称する)を含むCPU501により実行される。
【0025】
図3は、図2に示した情報処理装置200の構成を機能単位に示す機能ブロック図である。図3に示すように、情報処理装置200は、スピンロック初期化部220、タスク実行部230およびカウンタ記憶部240を備える。
【0026】
タスク実行部230は、スピンロック取得部231、処理部232、スピンロック解放部233およびコア番号記憶部234を備える。タスク実行部230は、ソフトウェア520に含まれるプログラムの最小の実行単位であるタスクを実行する機能を有する。
【0027】
図4は、本実施形態および他の実施形態に示す情報処理装置を実現するコンピュータ装置500のハードウェア構成の一例を示す図である。情報処理装置の各構成要素は、例えば図4に示すようなコンピュータ装置500とソフトウェアとの任意の組み合わせにより実現することができる。
【0028】
図4に示すように、コンピュータ装置500は、CPU501、ROM(Read Only Memory)502、RAM(Random Access Memory)503、記憶装置505、ドライブ装置507、通信インタフェース508、入出力インタフェース510およびバス511を備える。
【0029】
記憶装置505は、プログラム504を格納する。プログラム504には、図2に示した、作成されたソフトウェア520や、OS530等が含まれる。ドライブ装置507は、記録媒体506の読み書きを行う。通信インタフェース508は、ネットワーク509と接続する。入出力インタフェース510は、データの入出力を行う。バス511は、各構成要素を接続する。
【0030】
CPU501は、図2に示したように、マルチコア構成を有する。CPU501は、RAM503を用いてプログラム504を実行する。プログラム504は、ROM502に記憶されていてもよい。また、プログラム504は、記録媒体506に記録され、ドライブ装置507によって読み出されてもよいし、外部装置からネットワーク509を介して送信されてもよい。通信インタフェース508は、ネットワーク509を介して外部装置とデータをやり取りする。入出力インタフェース510は、周辺機器(キーボード、マウス、表示装置など)とデータをやり取りする。通信インタフェース508および入出力インタフェース510は、データを取得または出力する手段として機能することができる。出力情報などのデータは、記憶装置505に記憶されていてもよいし、プログラム504に含まれていてもよい。
【0031】
図2に示したソフトウェア520は、OS530上でCPU501により実行される際に、プログラムの最小の実行単位であるタスクを生成する。ソフトウェア520は、タスク生成時に、そのタスクで実行する関数と実行優先度を指定する。実行優先度は、例えば0以上の数字であり、数字が小さいほど優先度が高いように設定されてもよい。OS530は、作成されたタスクごとに、そのタスクを実行するコアを指定する。タスクは、OS530により指定されたコア1乃至コアNのいずれかにより実行される。
【0032】
図3に示したスピンロック初期化部220、およびタスク実行部230のスピンロック取得部231、処理部232およびスピンロック解放部233は、例えば、ソフトウェア520(プログラムコード)を、CPU501のコア1乃至コアNのいずれかが、情報処理装置200のRAM503に読み出して実行することにより、実現される。また、図3に示したカウンタ記憶部240、およびコア番号記憶部234は、例えばRAM503により実現されてもよい。
【0033】
タスク実行部230は、OS530上で、スピンロックにより排他制御を行いながらタスクを実行する。
【0034】
スピンロックによる排他制御では、タスク実行部230によるタスクの実行中にアクセスされる資源を排他するためのロック情報が作成される。資源を排他するためのロック情報を作成することを、スピンロックを作成(または初期化)する、とも称する。スピンロック(ロック情報)を取得できたコアのみが、資源にアクセスできる。
【0035】
図5は、情報処理装置200におけるタスク実行部230のスピンロック初期化部220によるスピンロックの初期化処理を説明するフローチャートである。図5を参照して、スピンロック初期化部220によるスピンロックの初期化処理について説明する。なお、タスク実行中、OS530によりそのタスクの実行を割り当てられているコアの番号は、コア番号記憶部234に記憶されているとする。
【0036】
スピンロック初期化部220は、タスクで資源にアクセスする前に、スピンロックを初期化する(ステップS110)。
【0037】
続いて、スピンロック初期化部220は、動作中のCPUのコアのそれぞれに対応するカウンタを作成し、それぞれを0で初期化して、カウンタ記憶部240に格納する(ステップS120)。カウンタは、0以上の整数を示す値を有する。図6は、スピンロック初期化部220により作成されたカウンタの例を示す図である。図6に示すように、例えば、スピンロック初期化部220は、RAM503のアドレス1乃至Nに、それぞれコア1乃至Nの初期値0のカウンタを作成する。
【0038】
図7は、タスク実行部230のスピンロック取得部231によるスピンロック取得処理を説明するフローチャートである。
【0039】
タスク実行部230は、タスク実行中に、ある資源を専有する処理(処理Eと称する)を実行する際、スピンロック取得部231において、図7に示すスピンロック取得処理を実行する。
【0040】
スピンロック取得部231は、自タスクが動作中のコアの番号をコア番号記憶部234から取得する(ステップS210)。スピンロック取得部231は、カウンタ記憶部240に記憶される、取得した番号のコアのカウンタ値を判定する。
【0041】
スピンロック取得部231は、カウンタ値が「0」(初期値)の場合(ステップS220においてYes)、スピンロックを取得する(ステップS230)。そして、スピンロック取得部231は、カウンタ記憶部240に記憶される、動作中のコアのカウンタ値に「1」を加算(カウントアップ)する(ステップS240)。
【0042】
一方、スピンロック取得部231は、カウンタ値が「0」でない場合(ステップS220においてNo)、スピンロックを取得せずに、カウンタ記憶部240に記憶される、動作中のコアのカウンタ値に「1」を加算する。
【0043】
処理S220においてカウンタ値が「0」の場合、スピンロック取得部231がスピンロックを取得してカウンタ値に「1」を加算した後、処理部232は、処理Eを実行する。処理S220においてカウンタ値が0でない場合、すでに同じスピンロックが取得されているので、スピンロック取得部231はスピンロックの取得処理を行わずにカウンタ値に「1」を加算した後、処理部232は、処理Eを実行する。
【0044】
図8は、タスク実行部230のスピンロック解放部233によるスピンロック解放処理を説明するフローチャートである。図8を参照して、スピンロック解放部233によるスピンロック解放処理を説明する。
【0045】
処理部232による排他した資源へのアクセスが完了すると、スピンロック解放部233は、自タスクが動作中のコアの番号を、コア番号記憶部234から取得する(ステップS310)。
【0046】
続いて、スピンロック解放部233は、取得した番号のコアのカウンタ値をカウンタ記憶部240から読み出し、判定する。カウンタ値が「0」の場合(ステップS320においてYes)、スピンロック解放部233は、処理を終了する。これは、スピンロック未取得時に、スピンロック解放処理が実行された場合を考慮した処理である。
【0047】
カウンタ値が「0」でない場合(ステップS320においてNo)、スピンロック解放部233は、カウンタ記憶部240に記憶される、動作中のコアのカウンタ値から「1」を減算(カウントダウン)し(ステップS330)、再度、カウンタ値を判定する(ステップS340)。
【0048】
カウンタ値が「0」である場合(ステップS340においてYes)、スピンロック解放部233は、スピンロックを解放する(ステップS350)。一方、カウンタ値が「0」でない場合は、スピンロック解放部233は、スピンロックの解放を行わない。その後、タスク実行部230によりタスクの実行が継続される。
【0049】
ここで、図9は、情報処理装置200において作成されるスピンロックとカウンタの構成を、模式的に示す図である。必要なスピンロックの数がM個(Mは整数)の場合、M個のスピンロックが、OS530により作成される。図9では、例えば、スピンロック1、スピンロックMは、それぞれ、資源1、資源2を排他するために作成されたスピンロックである。スピンロックが作成されるごとに、ソフトウェア520により、コア1乃至コアNにそれぞれ対応するカウンタが作成される。
[具体例]
上述した動作を、具体例を用いて説明する。図10は、タスクTにおける処理の流れを説明する図である。図10において矢印tで示す方向は、関数実行中の時間経過を示すとする。タスクTは、関数A、Bを含む。関数A、Bは、ともにアクセスする資源の排他制御が必要な処理を含む。
【0050】
関数Aにおいて、スピンロックが取得された後、関数Bの呼び出しが行われる。関数Bが呼び出されると、関数Bにおいても、再度スピンロックの取得が行われる。このため、図10の流れの場合、関数Bにおけるスピンロック取得時に自己デッドロックが発生する。しかし、関数Bにおけるスピンロック取得は、関数Aでスピンロックを取得中に実行されるので、関数Bにおけるスピンロックの取得と解放は、不要な処理であると考えられる。
【0051】
そこで、本実施形態では、上記のように不要と考えられるスピンロックの取得処理と解放処理を行わないように、以下に示すように、スピンロックの初期化、取得および解放の各処理を行うことを説明する。
【0052】
ここでは、図10に示すタスクTが、コア1乃至コアNのうち、コア1において実行される例について説明する。このとき、情報処理装置200のコア番号記憶部234には、タスクTの実行を割り当てられたコアの番号として「1」が記憶されているとする。
【0053】
また、タスクTの実行前に、図5に示したように、スピンロック初期化部220により、スピンロックの初期化と、コア1乃至コアNの各カウンタの作成が行われているとする。図11は、図10に示す関数Aにおけるスピンロック取得処理の実行前と実行後の、コア1乃至コアNの各カウンタの値を例示する図である。関数Aにおけるスピンロック取得処理の実行前は、コア1を含むすべてのコアのカウンタ値は「0」である。これらのカウンタが、情報処理装置200のカウンタ記憶部240に記憶されているとする。
【0054】
タスクTにおける関数Aの実行にあたり、スピンロック取得部231は、アクセスする資源を排他するため、図7に示すスピンロック取得処理を実行する。すなわち、処理S210に示すように、スピンロック取得部231は、タスクTが動作中のコアの番号を取得する。ここでは、スピンロック取得部231は、「1」を取得する。
【0055】
続いて、処理S210に示すように、スピンロック取得部231は、カウンタ記憶部240に記憶される、コア1のカウンタ値を判定すると、コア1のカウンタ値は「0」である。したがって、スピンロック取得部231は、処理S230に示すようにスピンロックを取得すると共に、コア1のカウンタ値に「1」を加算する。これにより、図11に示すように、関数Aのスピンロック取得処理実行後のコア1のカウンタ値は、「1」となる。
【0056】
スピンロック取得後、図10に示すように、関数Aでは、関数Bの呼び出しが行われる。図12は、関数Bにおけるスピンロック取得処理の実行前と実行後の、コア1乃至コアNの各カウンタの値を例示する図である。図12に示すように、関数Bのスピンロック取得処理の実行前のコア1のカウンタ値は「1」である。この状態で、関数Bが実行されると、スピンロック取得部231は、図7に示すスピンロック取得処理を実行する。
【0057】
処理S210で取得されるコアの番号は「1」であり、このときのコア1のカウンタ値は、図12に示すように「1」である。したがって、処理S220においてカウンタ値は0でないので、スピンロック取得部231は、スピンロックの取得は行わず、カウンタに「1」を加算する。これにより、コア1のカウンタ値は、「2」になる。このように、関数Aにより取得されているスピンロックと同じスピンロックの取得処理を、関数Bでは行われないので、自己デッドロックは発生しない。
【0058】
関数Bでは、スピンロックの取得は行わずに、処理Bが処理部232により実行される。処理Bにおいて、資源へのアクセスが完了すると、スピンロック解放部233は、図8に示すスピンロック解放処理を実行する。図13は、図10に示す関数Bにおけるスピンロック解放処理の実行前と実行後の、コア1乃至コアNの各カウンタの値を例示する図である。図13に示すように、関数Bのスピンロック解放処理の実行前のコア1のカウンタ値は「2」である。
【0059】
処理S310で取得されるコアの番号は「1」であり、このときのコア1のカウンタ値は、図13に示すように「2」である。したがって、処理S320においてカウンタ値は「0」でないので、スピンロック解放部233は、処理S330に示すように、動作中のコアのカウンタ値から「1」を減算する。これにより、コア1のカウンタ値は、「1」になる。
【0060】
処理S340においても、コア1のカウンタ値は「0」ではないので、スピンロック解放部233は、スピンロックの解放を行わない。
【0061】
続いて、図10に示すタスクTでは、関数Aの実行に戻り、関数Aにおける処理Aが処理部232により実行される。その後、スピンロック解放部233は、スピンロック解放処理を実行する。
【0062】
図14は、図10に示す関数Aにおけるスピンロック解放処理の実行前と実行後の、コア1乃至コアNの各カウンタの値を例示する図である。図14に示すように、関数Aのスピンロック解放処理の実行前のコア1のカウンタ値は「1」である。
【0063】
処理S310で取得されるコアの番号は「1」であり、このときのコア1のカウンタ値は、図14に示すように「1」である。したがって、処理S320においてカウンタ値は「0」でないので、スピンロック解放部233は、処理S330に示すように、動作中のコアのカウンタ値から「1」を減算する。これにより、コア1のカウンタ値は、「0」になる。よって、処理S350に示すように、スピンロック解放部233は、スピンロックを解放する。
【0064】
これにより、排他される資源にアクセスする処理が完了し、引き続いて、関数Aにおける処理が実行される。
【0065】
以上のように、本第2の実施形態によれば、スピンロック初期化部220は、スピンロックの作成ごとに、各コアに対応するカウンタを作成してその値を初期化する。タスク実行部230は、タスク実行中に、資源を専有する処理を実行する際、そのタスクが動作中のコアのカウンタの値が「0」でない場合、スピンロックを取得せずにカウンタの値をカウントアップして、上記処理を実行する。
【0066】
上記構成を採用することにより、本第2の実施形態によれば、カウンタの値が「0」でないとき、すなわち、タスクが動作しているコアで、すでにそのタスクにおいてスピンロックが取得されているときは、多重にスピンロックを取得することなく、処理を進める。これにより、タスク実行中の不要な排他制御によるデッドロックの発生を防ぐことができるという効果が得られる。
【0067】
また、上記デッドロックを防ぐことができるので、ソフトウェアの変更等により関数のコールツリーが変更されたとしても、排他制御の有無の再確認や修正が不要となるという効果が得られる。
【0068】
なお、スピンロックのカウンタをコアごとに用意しているので、異なるコアでスピンロックによる排他制御が必要な処理を実行する場合は、コアごとにスピンロックの取得が行われる。
【0069】
上記各実施形態における情報処理装置の実現方法には様々な変形例がある。例えば、情報処理装置は、複数の装置の組み合わせにより実現することができる。
【0070】
また、情報処理装置におけるスピンロック初期化部220、スピンロック取得部231、処理部232およびスピンロック解放部233は、上述したように、例えば、プログラム制御に従って処理を実行するCPU501によって実現されてもよい。
【0071】
また、これらの機能を実現するように動作させるプログラムを記録媒体506に記録させ、その記録媒体506に記録されたプログラムをコードとして読み出し、コンピュータにおいて実行する処理方法も各実施形態の範疇に含まれる。すなわち、コンピュータ読取可能な記録媒体506も各実施形態の範囲に含まれる。また、上述のプログラムが記録された記録媒体506はもちろん、そのプログラム自体も各実施形態に含まれる。
【0072】
以上、上述した実施形態を参照して本発明を説明した。しかしながら、本発明は、上述した実施形態には限定されない。即ち、本発明は、本発明のスコープ内において、種々の上記開示要素の多様な組み合わせ乃至選択など、当業者が理解し得る様々な態様を適用することができる。
【符号の説明】
【0073】
100、200 情報処理装置
110 初期化部
120 実行部
220 スピンロック初期化部
230 タスク実行部
231 スピンロック取得部
232 処理部
233 スピンロック解放部
234 コア番号記憶部
240 カウンタ記憶部
500 コンピュータ装置
504 プログラム
505 記憶装置
506 記録媒体
507 ドライブ装置
508 通信インタフェース
509 ネットワーク
510 入出力インタフェース
511 バス
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17