JP2010020683A - スレッド制御方法およびスレッド制御装置ならびにリアルタイムシステム - Google Patents

スレッド制御方法およびスレッド制御装置ならびにリアルタイムシステム Download PDF

Info

Publication number
JP2010020683A
JP2010020683A JP2008182668A JP2008182668A JP2010020683A JP 2010020683 A JP2010020683 A JP 2010020683A JP 2008182668 A JP2008182668 A JP 2008182668A JP 2008182668 A JP2008182668 A JP 2008182668A JP 2010020683 A JP2010020683 A JP 2010020683A
Authority
JP
Japan
Prior art keywords
thread
resource
semaphore
resources
priority
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2008182668A
Other languages
English (en)
Inventor
Mitsuru Sasaki
満 佐々木
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NEC Electronics Corp
Original Assignee
NEC Electronics Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by NEC Electronics Corp filed Critical NEC Electronics Corp
Priority to JP2008182668A priority Critical patent/JP2010020683A/ja
Publication of JP2010020683A publication Critical patent/JP2010020683A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Multi Processors (AREA)

Abstract

【課題】マルチコアプロセッサ向けのリアルタイムシステムの安全性を確保すると共に、プロセッサコアを効率良く利用する。
【解決手段】マルチコアプロセッサにより構成されたリアルタイムシステムにおいて、スレッドにより共有されうる各共有リソースのシーリング値に基づいたプライオリティ・シーリング方式で、スレッドによる共有リソースの操作時の排他制御を行うと共に、同一のシーリング値を有する共有リソースが同一のグループになるように共有リソースをグループ分けして得たグループ単位のセマフォ方式でスレッドのスケジューリングを行う。
【選択図】図4

Description

本発明は、スレッド制御、特にマルチコアプロセッサ向けのリアルタイムシステムにおけるスレッドの実行制御に関する。
リアルタイムシステムで実行される逐次処理の単位は「スレッド」または「タスク」などの呼称があり、本明細書においては、「スレッド」と呼ぶ。多くのリアルタイムOS(オペレーティングシステム)は、リアルタイム性を確保するためのスケジューリングポリシとしてプリエンプティブな優先度ベースのスケジューリングをサポートする。このスケジューリングポリシは、下記のように定められている。
1.その時点で最も高い優先度のスレッドが実行される。
2.その時点で最も高い優先度のスレッドの処理は中断されてはいけない。
3.同一優先度の場合は先着順とする。「先着順」は、スレッドが実行可能状態に遷移した順番を意味する。
4.優先度の高いスレッドが実行可能状態になった場合、該スレッドより優先度が低いスレッドの処理の途中であっても、スレッドの切替えを行って高い優先度のスレッドを実行させる。
上述した「実行可能状態」は、プリエンプトされた他のスレッドが無いとき、またはプリエンプトされた他のスレッドがCPU(Central Processing Unit)の実行権を解放すれば実行できる状態を意味する。
図11は、優先度が「高」であるスレッドH1、優先度が「中」であるスレッドM1とスレッドM2、優先度が「低」であるスレッドL1が存在する場合に、これらのスレッドの実行順の例を示す。図示のように、優先度の高い順からスレッドが実行され、同一優先度のスレッドM1とスレッドM2については、先に実行可能状態になったスレッドM1が実行される。
以下において、スレッドの表記に「H」、「M」、「L」を付けることにより当該スレッドの優先度が「高」、「中」、「低」であることを示す。
リアルタイムシステムにおいて、共有リソースの衝突問題を解決するために、共有リソースの排他処理(以下単に排他処理という)が行われる。図12は、この排他処理の模式図である。
図12に示すように、あるスレッドは、共有リソースを操作するのに当たって、まず、OSに対してしてリソース獲得要求(以下単に獲得要求ともいう)を発行する。そして、リソース獲得要求に応じてOSから共有リソースの操作が許可されれば、共有リソースを操作し、操作完了後、リソース解放要求(以下単に解放要求ともいう)をOSに発行する。OSは、他のスレッドにより共有リソースが操作されていないことを条件に、リソース獲得要求を発行したスレッドにリソース操作を許可する。これにより、複数のスレッドが同時に共有リソースを操作することを回避することができる。なお、スレッドが共有リソースを獲得してから、共有リソースを解放するまでの期間は、「排他処理期間」または「ブロック期間」という。
共有リソースの衝突問題を簡単に解決できる排他処理機構として、多くのリアルタイムOSにはセマフォが装備されている。セマフォには、非負整数をとるカウンティングセマフォ、「0」と「1」をとるバイナリ・セマフォがあり、以下バイナリ・セマフォを例に説明する。なお、共有リソースを操作するような、排他処理が必要な区間をクリティカルリージョンという。
セマフォを使用する上では、下記の約束事が定められている。
1.スレッドがクリティカルリージョンに入るときにセマフォをとる。
2.セマフォがない間は、他のスレッドはクリティカルリージョンに入れない。
3.セマフォが他のスレッドにとられているときはセマフォが戻るまで待つ。
4.クリティカルリージョンから出るときにセマフォを戻す。
5.スレッドをとる間は不可分に(スレッドが切り替わることがなく)実行される。
6.セマフォを戻す間も不可分に実行される。
7.セマフォを戻すときに待っているスレッドがあればそのスレッドの待ち状態を解除すする。
図13は、セマフォを用いたリアルタイムシステムにおけるスレッドの実行模式を示す。図中において、実行中のスレッドM1は、獲得要求をOSに発行してセマフォを取得してリソースの操作をする。その後、スレッドM1が解放要求をOSに発行してセマフォを戻すまでは、ブロック期間であり、この期間において他のスレッドがセマフォをとることができない。図13に示すように、時刻t0において、優先度が「高」であるスレッドH1が実行可能状態に遷移したため、スレッドM1の実行が中断され、スレッドH1が実行される。時刻t1において、スレッドH1が獲得要求を発行するものの、セマフォがスレッドM1に所有されているため、スレッドH1が中断され、スレッドM1が再開される。のちに、スレッドM1がセマフォを解放すると、スレッドH1は、やっとセマフォを取得する。これに伴って、スレッドH1が実行され、スレッドM1が中断される。
以下、スレッドがセマフォを待つことを「排他待ち」といい、図13に示す時刻t0〜時刻t1のような、排他待ちをしている区間を「排他待ち期間」という。
セマフォを利用した場合の問題点として、優先度逆転とデッドロックが挙げられる。図14と図15を参照して説明する。
図14は、優先度逆転のケースを説明するための図である。このケースでは、まず、優先度が「低」であるスレッドL1はセマフォを取得して共有リソースを操作する。スレッドL1による共有リソースの操作中に、優先度が「高」であるスレッドH1が実行可能状態に遷移したため、スレッドL1の実行が中断され、スレッドH1が実行される。時刻t0において、スレッドH1が獲得要求を発行してセマフォを取得しようとするが、セマフォがスレッドL1により所有されているため、スレッドH1は実行が中断され、排他待ち期間に入る。これに伴い、スレッドL1の実行は再開される。
時刻t1において、優先度が「中」であるスレッドM1が実行可能状態に遷移したため、スレッドL1は再び中断され、スレッドM1は実行される。そして、スレッドM1の実行が完了した時刻t2において、スレッドL1の実行は再開される。その後、スレッドL1がセマフォを戻して共有リソースを解放したときに、スレッドH1はセマフォを取得して、やっと実行される。
このように、時刻t1〜t2の区間において、スレッドH1がスレッドM1より優先度が高いにもかかわらず、スレッドM1が先に実行されるという「優先度逆転」が起きてしまう。
図15は、デットロックのケースを説明するための図である。デッドロックは共有リソースが複数ある場合に生じうる。図15の例に示すように、まず、スレッドM1は共有リソースであるリソースAのセマフォを取得してリソースAを操作する。時刻t0において、スレッドH1が実行可能状態に遷移したため、スレッドH1は実行され、スレッドM1は中断される。そして、時刻t1において、スレッドH1は別の共有リソースであるリソースBのセマフォを取得して、リソースBを操作する。処理が進み、時刻t2において、スレッドH1は、リソースAを操作するためにリソースAのセマフォを要求するが、リソースAのセマフォはスレッドM1により所有されているため、スレッドH1は中断され、排他待ち期間に入る。そこで、スレッドM1は、実行が再開される。
処理がさらに進み、スレッドM1はリソースBを操作するためにリソースBのセマフォを要求するが、リソースBのセマフォはスレッドH1により所有されているため、スレッドM1も中断され、排他待ち期間に入る。
こうなると、スレッドH1とスレッドM1のいずれも実行することができず、いわゆるデットロックが発生する。
セマフォを利用する際に生じる優先度逆転とデットロックの問題を解決するために、特許文献1にも記載されたように、セマフォを取得したスレッドの優先度を一時的に高くするプライオリティ・シーリング方式を用いた手法がある。
プライオリティ・シーリング方式は、スレッドがリソースのセマフォを取得すると、直ちにこのスレッドの優先度を該リソースのシーリング値に一時的に上げる方式である。図16を参照して説明する。なお、シーリング値は、当該リソースを獲得する可能性のあるすべてのスレッドの優先度以上の優先度であり、予め設定されている。また、スレッドは、自身の優先度(優先度が一時的に挙げられているときには、そのときの優先度)より低いシーリング値を有するリソースを取得できないように規定されている。
図16の例において、まず、スレッドL1はセマフォを取得して共有リソースを操作する。スレッドL1によるセマフォの取得と同時に、その優先度は「低」から、該リソースのシーリング値(例えば「高」)に変更される。そのため、スレッドL1がセマフォを解放するまでの間、スレッドM1とスレッドH1が実行状態に遷移しても、スレッドL1は続行される。
スレッドL1はセマフォを解放すると、その優先度が元の「低」に戻される。そのため、最も優先度の高いスレッドH1は実行され、スレッドL1は中断される。
スレッドH1は、処理を続き、共有リソースを操作するためにセマフォを要求し、セマフォを取得する。スレッドH1がセマフォを解放した後も処理を続き、処理を完了した時(時刻t0)に、スレッドM1は実行される。そして、スレッドM1が処理を完了したとき(時刻t1)に、スレッドL1は再開される。
このように、プライオリティ・シーリング方式は、優先度が高いスレッドの実行中に、その優先度より低い優先度を有するスレッドが実行されないことを利用して、セマフォを取得したスレッドの優先度をシーリング値に一時的に変更し、該スレッドによる共有リソースの操作を優先的に実行させることより、前述した優先度逆転の問題を回避することができる。
また、同じ理由で、共有リソースが複数ある場合のデットロックの問題も発生しない。
特表2005−516281号公報
ここで、マルチコアプロセッサ向けのリアルタイムシステムについて考える。このようなシステムでは、複数のスレッドが同時に実行可能であるため、高い処理効率を得ることができる。その一方、共有リソースの競合問題も同様に存在し、それを解決する排他処理機構を設ける必要がある。
マルチコアプロセッサ向けのリアルタイムシステムの排他処理機構にプライオリティ・シーリング方式を適用しても、デットロックの問題が生じうる。図17を参照して説明する。
図17において、縦軸が優先度を示す。プロセッサコアとしてプロセッサコアAとプロセッサコアBの2つがあり、共有リソースとしてリソースAとリソースBの2つがあるとする。また、リソースAとリソースBのいずれも、シーリング値は「高」である。
図17の例では、まず、プロセッサコアAで実行中のスレッドL1は、リソースAを操作するためにリソースAのセマフォを取得する。これにより、スレッドL1の優先度がリソースAのシーリング値「高」に一時的に変更される。
優先度「高」で動作するスレッドL1によるリソースAの操作中に、スレッドM1が実行可能状態に遷移する。このとき、プロセッサコアBが空いているので、スレッドM1はプロセッサコアBで実行される。そして、スレッドM1は、リソースBを操作するためにリソースBのセマフォを取得する。これにより、スレッドM1の優先度がリソースBのシーリング値の「高」に一時的に変更される。
処理が続き、リソースAの操作中のスレッドL1はさらにリソースBのセマフォ取得要求を発行する。このとき、リソースBのセマフォがスレッドM1により所有されているため、スレッドL1は、実行が中断され、排他待ちする。
その後、リソースBの操作中のスレッドM1はさらにリソースAのセマフォ取得要求を発行する。リソースAのセマフォがスレッドL1により所有されているので、スレッドM1も実行が中断され、排他待ちする。
こうなると、スレッドH1とスレッドM1のいずれも実行することができず、デットロックが発生する。
このように、マルチコアプロセッサによるリアルタイムシステムにおいて、優先度が異なる複数のスレッドが同時に動作可能であるため、優先度の高いスレッドの実行中に優先度の低いスレッドが実行されないことを利用したプライオリティ・シーリング方式を適用してもデッドロックが生じ得る。
この問題を回避するために、排他処理にプライオリティ・シーリング方式を適用すると共に、スレッドのスケジューリングに際して、実行可能状態にあるスレッドのうちの、優先度が最も高いスレッドのみをスケジューリング対象とする手法が考えられる。図18を参照して説明する。
優先度が最も高いスレッドのみが実行されるため、図18に示すように、プロセッサコアAで実行中のスレッドL1がリソースAのセマフォを取得してリソースAを操作している際に、スレッドL1の優先度がリソースAのシーリング値「高」に変更されているので、優先度が「中」であるスレッドM1は、実行されない。そのため、スレッドL1が引き続きリソースBのセマフォを取得することができ、デッドロックは発生しない。これにより、マルチコアプロセッサにより構成されたリアルタイムシステムにおいて、プライオリティ・シーリング方式を排他処理機構に適用すると共に、デッドロックを回避することができる。
ところで、この手法は、プロセッサコアの使用効率の低下を引き起こしてしまうという問題がある。例えば、図19に示すように、時刻t0まで、スレッドM1とスレッドM2は、実行可能状態にあるスレッドの優先度のうちの最高優先度「中」を有するため、プロセッサコアAとプロセッサコアBにそれぞれ割り当てられて実行される。しかし、時刻t0において、スレッドH1が実行可能状態に遷移したため、スレッドH1はプロセッサコアAに割り当てられて実行され、スレッドM1とスレッドM2は、スレッドH1が実行完了の時刻t1まで中断される。すなわち、時刻t0と時刻t1の間、スレッドM1が実行されても問題が無いにも関わらず、プロセッサコアBにはスレッドが割り当てられず、スレッドM1は実行待ちする。これでは、プロセッサコアBの使用効率が低下し、ひいてはシステム全体の効率が低下する。
この問題点を改良するために、共有リソースのセマフォを取得したスレッドが無い(すなわち排他処理中のスレッドが無い)場合には、その時点において実行可能状態にあるすべてのスレッドを対象に、優先度に基づいてスケジューリングを行う一方、排他処理中のスレッドがある場合には、最も優先度の高いスレッドのみを対象にスケジューリングする手法が考えられる。図20を参照して説明する。
図20に示すように、まず、プロセッサコアAで実行中のスレッドL1がリソースAのセマフォを取得して優先度がリソースAのシーリング値「高」に変更される。スレッドL1がリソースAのセマフォを解放して優先度が元の「低」に戻される時刻t1までは、スレッドL1による排他処理期間である。この期間において、スレッドM1が時刻t0で実行可能状態に遷移しても、その優先度がスレッドL1の優先度「高」より低いので、スレッドM1はスケジューリングの対象にならず、実行されない。
一方、時刻t1において、スレッドL1がリソースAのセマフォを解放したため、排他処理中のスレッドが無くなる。従って、優先度が「低」に戻されたスレッドL1と、スレッドM1は、共にスケジューリングの対象になり、プロセッサコアAとプロセッサコアBでそれぞれ実行される。
処理が進み、時刻t2において、スレッドM1はリソースBのセマフォを取得して排他処理期間に入る。この期間において、スレッドM1の優先度がリソースBのシーリング値「高」に変更されているため、優先度が「低」であるスレッドL1は中断される。
また、スレッドM1がリソースBのセマフォを解放した時刻t3からは、排他処理中のスレッドが無いため、スレッドL1とスレッドM1は、プロセッサコアAとプロセッサコアBでそれぞれ実行される。
この手法は、空きプロセッサがあるにも関わらず、実行可能状態のスレッドが実行されていない状況が生じうる期間を、排他処理を行うスレッドがある期間に抑えることによって、プロセッサコアの利用効率をある程度向上させることができる。
ところで、図20から分かるように、期間「t0〜t1」において、スレッドM1が実行されてもシステム上では問題が無いにも関わらず、スレッドM1は実行されておらず、プロセッサコアBは動作していない。同様に、期間「t2〜t3」において、スレッドL1が実行されてもシステム上では問題が無いにも関わらず、スレッドL1は実行されておらず、プロセッサコアAは動作していない。これでは、プロセッサコアの利用効率を向上させる効果が弱まる。
このように、マルチコアプロセッサに向けのリアルタイムシステムにおいて、デッドロックや優先度逆転などを回避してシステムの安全性を保つために、マルチコアプロセッサの有用性を犠牲にするという問題がある。
本発明の1つの態様は、複数のプロセッサコアと、複数のスレッドにより共有されうる複数のリソースとを備えたリアルタイムシステムにおけるスレッド制御方法である。この方法は、各リソースのシーリング値に基づいたプライオリティ・シーリング方式で、スレッドによるリソース操作時の排他制御を行うと共に、同一のシーリング値を有するリソースが同一のグループになるように上記複数のリソースをグループ分けし、グループ単位のセマフォ方式でスレッドのスケジューリングを行う。
なお、上記態様の方法を装置やシステム、コンピュータに上記方法を実行せしめるプログラムに置き換えて表現したものも、本発明の態様として有効である。
本発明にかかる技術によれば、マルチコアプロセッサ向けのリアルタイムシステムにおいて、安全性を確保すると共に、プロセッサコアの使用効率を確実に向上させることができる。
以下、図面を参照して本発明の実施の形態について説明する。なお、以下の説明に用いられる図面に、様々な処理を行う機能ブロックとして記載される各要素は、ハードウェア的には、プロセッサ、メモリ、その他の回路で構成することができ、ソフトウェア的には、メモリに記録された、またはロードされたプログラムなどによって実現される。したがって、これらの機能ブロックがハードウェアのみ、ソフトウェアのみ、またはそれらの組合せによっていろいろな形で実現できることは当業者には理解されるところであり、いずれかに限定されるものではない。また、分かりやすいように、これらの図面において、本発明の技術を説明するために必要なもののみを示す。
<第1の実施の形態>
図1は、本発明の第1の実施の形態にかかるリアルタイムシステム100を示す。リアルタイムシステム100は、複数のプロセッサコア(図示の例では2つ:プロセッサコア121、プロセッサコア122)と、これらのプロセッサコアで実行されるスレッドにより共有可能な複数の共有リソース(図示の例では6つ:リソースA〜F)と、スレッドのスケジューリング、およびスレッドが共有リソースを操作する際の排他制御を担う制御部130を備える。制御部130、各プロセッサコア、各共有リソースは、バス110を介して接続されている。
本実施の形態のリアルタイムシステム100において、制御部130は、排他制御に際して、プライオリティ・シーリング方式を用いる。前述したように、プライオリティ・シーリング方式は、共有リソースのセマフォを取得したスレッドの優先度を該リソースのシーリング値に一時的に変更する手法である。
例として、スレッドは、優先度が「中」であるスレッドM1〜スレッドM3と、優先度が「低」であるスレッドL1〜L2があり、リソースは、シーリング値が「高」であるリソースAと、シーリング値が「中」であるリソースB、C、Dと、シーリング値が「低」であるリソースE、Fがある。
制御部130は、スレッドのスケジューリングに際して、同一のシーリング値を有するリソースが同一のグループになるように複数の共有リソースをグループ分けして得たグループ単位のセマフォ方式を用いる。本実施の形態において、セマフォ方式としてバイナリ。セマフォを採用するが、カウンティングセマフォ方式を用いてもよい。
図2は、制御部130を示す。制御部130は、制御実行部132と、リソース管理部140と、バイナリ・セマフォ管理部150を備える。リソース管理部140は、シーリング値管理部142とリンク144を有し、バイナリ・セマフォ管理部150は、セマフォ値管理部152と待ちスレッド・キュー154を有する。
リソース管理部140におけるシーリング値管理部142は、リソース毎にシーリング値を記憶している。図3に示すように、リソースAに対して「高」優先度を示す「H」、リソースB〜Dに対して「中」優先度を示す「M」、リソースE〜Fに対して「低」優先度を示す「L」が記憶されている。
バイナリ・セマフォ管理部150におけるセマフォ値管理部152は、リソースA〜Fをグループ分けして得たグループ毎のバイナリ・セマフォ(以下単にセマフォという)を記憶している。本実施の形態において、リソースA〜Fは、同じシーリング値を有するリソースが同一のグループになるようにグループ分けされており、グループ毎にセマフォが付与されている。図4に示すように、シーリング値が「H」であるリソースAはセマフォ1が付与されたグループに、シーリング値が「M」であるリソースB〜Dは、セマフォ2が付与されたグループに、シーリング値が「L」であるリソースE〜Fは、セマフォ3が付与されたグループになるように、リソースA〜Fはグループ分けされている。セマフォ値管理部152は、図5に示すように、それぞれのセマフォの値を記憶している。図5の例では、セマフォ1の値は、セマフォ1に対応するグループ内のリソースのいずれも(ここではリソースAのみ)スレッドに獲得されておらず、獲得可能であることを示す「0」である。セマフォ2の値は、セマフォ2に対応するグループ内のリソース(リソースB〜D)のいずれかがスレッドにより獲得されており、他のスレッドが該グループ内のいずれのリソースも獲得できないことを示す「1」である。また、セマフォ3の値は、セマフォ2に対応するグループ内のリソース(リソースE〜F)のいずれもスレッドにより獲得されておらず、獲得可能であることを示す「0」である。
バイナリ・セマフォ管理部150における待ちスレッド・キュー154は、待ちスレッドを一時的に登録する。待ちスレッドは、実行可能状態にありながら、プロセッサコアが割り当てられておらず、実行待ちしているスレッドを意味する。本実施の形態のリアルタイムシステム100において、スレッドの実行待ちは、すべてのプロセッサコアにおいて該スレッド以上の優先度を有するスレッドが動作している場合の通常実行待ちと、該スレッドが獲得しようとするセマフォが他のスレッドにより獲得されている場合の排他待ちがある。排他待ちしている待ちスレッドに対して、待ちスレッド・キュー154は、該スレッドが待っているセマフォの情報も登録する。
リソース管理部140におけるリンク144は、リソースと、セマフォ値管理部152に記憶された該リソースのセマフォ値、および待ちスレッド・キュー154に登録された、該リソースのセマフォを待っている待ちスレッドとを対応付けるものである。本実施の形態において、セフォマがグループ毎に付与されているので、以下の本実施の形態の説明において、「リソースのセマフォ」と、「リソースが属するグループのセマフォ」とを同じ意味で用いる。
制御実行部132は、スケジューリングに際して、グループ単位のセマフォ方式を用いる。具体的には、下記のスケジューリングポリシを用いる。
1.現時点において実行可能状態にあるスレッドを優先度順にプロセッサコアに割り当てる。例えば、実行可能状態にあるスレッドとして、スレッドH1、スレッドM1、スレッドL1がある場合、まず、スレッドH1とスレッドM2をプロセッサコア121とプロセッサコア122でそれぞれ実行させ、その後、空いたプロセッサコアでスレッドL1を実行させる。
2.同一優先度の場合は先着順とする。
3.優先度の低いスレッドが実行可能状態になっても、該スレッドの優先度以上の優先度を有するスレッドの実行は中断されない。
4.優先度の高いスレッドが実行可能状態になり、空きプロセッサコアが無い場合には、該スレッドより優先度が低い実行中のスレッドのうちの、最も優先度が低いスレッドの実行を中断してスレッドの切替えを行う。
5.リソースの獲得要求を発行したスレッドに対して、該リソースが属するグループのセマフォが獲得可能であることを条件に、該セマフォを取得させる。
6.リソースの解放要求が発行された際に、該リソースのセマフォ待ちをしている排他待ちのスレッドがあるとき、該排他待ちのスレッドをスケジューリングの対象に入れることで起床させる。
図6と図7のフローチャートを参照して、リソースの獲得要求が発行されたときと、リソースの解放要求が発行されたときの制御実行部132の動作を具体的に説明する。
図6に示すように、リソースの獲得要求が発行されたとき、制御実行部132は、リンク144を追ってセマフォ値管理部152を参照して、該リソースのセマフォが獲得可能であるかを確認する(S100)。該リソースのセマフォ値が獲得可能を示す「0」であれば、制御実行部132は、獲得要求を発行したスレッドに当該セマフォを取得させると共に、該セマフォの値を「1」に書き換える(S100:Yes、S102)。一方、セマフォが獲得不能を示す「1」であれば、制御実行部132は、該スレッドを排他待ちスレッドとして待ちスレッド・キュー154に登録する(S100:No、S112、S114)。S100〜S114までの処理は、バイナリ・セマフォ方式の処理である。
また、ステップS102においてセマフォを取得したスレッドに対して、制御実行部132は、その優先度を当該リソースのシーリング値に変更する(120)。この処理は、プライオリティ・シーリング方式の処理である。
リソースの解放要求が発行されたとき、図7に示すように、制御実行部132は、まず、該リソースのセマフォを解放する(S200)。具体的には、セマフォ値管理部152に記憶された該リソースのセマフォを「1」から「0」に書き換える。そして、待ちスレッド・キュー154に、該セマフォを待っている排他待ちスレッドの有無を確認する(S202)。該当する排他待ちスレッドがあれば、制御実行部132は、このスレッドを起床させると共に、待ちスレッド・キュー154から削除する(S202:Yes、S212、S214)。ここまでの処理は、バイナリ・セマフォ方式の処理である。
ステップS202における確認の結果、該当する排他待ちスレッドが無ければ、制御実行部132は、リソースを解放したスレッドの優先度を元の優先度に戻す(S202:No、S230)。また、ステップS202における確認の結果に応じて該当するスレッドが起床させられた場合(S202:Yes、S212〜S214)、制御実行部132は、起床した待ちスレッドの優先度を対応するシーリング値に変更すると共に、リソースを解放したスレッドの優先度を元の優先度に戻す(S220、S230)。S220〜S230の処理は、プライオリティ・シーリング方式の処理である。
従来のリソース毎のバイナリ・セマフォ方式において、優先度逆転が発生する原因は、排他処理を行うスレッドが、該スレッドより優先度の高いスレッドの実行をブロックしてしまうことである。これに対して、プライオリティ・シーリング方式は、リソースのセマフォを取得したスレッドの優先度を一時的にシーリング値に変更することによって、優先度逆転の問題を回避する。
また、リソース毎のバイナリ・セマフォ方式において、デッドロックが発生する原因は、リソースのセマフォを取得した全てのスレッドが、当該リソースのセマフォを所有したまま他のリソースを獲得しうることである。プライオリティ・シーリング方式では、あるリソースのセマフォを取得したスレッドの優先度が、該リソースの優先度より高いシーリング値に変更されるため、2つのスレッドが同時に動作する可能性の無いシングルコアプロセッサにおいて、シーリング値より低い優先度を有する他のスレッドが実行されず、デッドロックも生じない。
しかし、マルチコアプロセッサにおいて、プロセッサコアの使用効率を高めるために複数のスレッドが同時に動作可能にすると、プライオリティ・シーリング方式でも、デッドロックが生じうる。
そこで、上述したように、本実施の形態のリアルタイムシステム100における制御部130は、共有リソースのシーリング値を用いてプライオリティ・シーリング方式で排他制御を行うと共に、シーリング値毎に分けられたグループ単位のセマフォ方式でスケジューリングを行う。したがって、あるリソースを獲得したスレッドが存在するとき、該リソースと同じグループに属するリソースを獲得しようとするスレッドはセマフォ待ちで実行できない。すなわち、同じグループの複数のリソースをそれぞれ取得して別々のプロセッサコアで実行する複数のスレッドが存在するケースがありえない。一方、他のグループのリソースを獲得しようとするスレッドは目的のリソースを取得して別のプロセッサコアで実行可能であり、リソースを獲得しようとしていないスレッドも別のプロセッサコアで実行可能である。さらに、プライオリティ・シーリング方式の規定により、リソースを取得して実行中のスレッドは、該スレッドのそのときの優先度より低いシーリング値のリソースを取得できないので、シーリング値の異なるリソースをそれぞれ獲得して実行している複数のスレッドが存在する場合においても、これらのスレッドが、互いに相手が獲得したリソースを取得し合うことは生じず、デットロックも発生しない。
こうすることにより、デッドロックを回避しつつ、プロセッサコアの有用性の低下を防ぐことができる。
図8に示す動作例を用いてより具体的に説明する。
<時刻t0>
プロセッサコア121ではスレッドL1が動作しており、プロセッサコア122では動作するスレッドが無い。
<時刻t1>
スレッドL1は、リソースAのセマフォ(セマフォ1)の獲得要求を発行する。
制御実行部132は、リソース管理部140におけるリンク144を追って、バイナリ・セマフォ管理部150のセマフォ値管理部152に記憶されたセマフォ1の値を確認する。セマフォ1の値が他のスレッドに所有されていないことを示す「0」であるため、制御実行部132は、スレッドL1にセマフォ1を取得させると共に、シーリング値管理部142を参照して、スレッドL1の優先度をリソースAのシーリング値「高」に変更する。これに伴って、セマフォ値管理部152は、セマフォ1の値を「1」に変更する。
<時刻t2>
スレッドM1は実行可能状態に遷移する。
制御実行部132は、プロセッサの割付状態を確認する。プロセッサコア122が空いているので、制御実行部132は、スレッドM1をプロセッサコア122に割り付け、実行させる。すなわち、優先度が「H」になったスレッドL1がプロセッサコア121での実行中にもスレッドM1がプロセッサコア122で実行でき、プロセッサコアの使用効率を高めることができる。
<時刻t3>
スレットM1はリソースAのセマフォ(セマフォ1)の獲得要求を発行する。
制御実行部132は、リソース管理部140におけるリンク144を追い、バイナリ・セマフォ管理部150のセマフォ値管理部152に記憶されたセマフォ1の値を確認する。このとき、セマフォ1がスレッドL1に所有されており、その値が「1」であるため、制御実行部132は、スレッドM1を待ちスレッド・キュー154に登録し、その状態を排他待ち状態にする。
<時刻t4>
スレッドL1はセマフォ1を解放する。これにより、セマフォ値管理部152は、セマフォ1の値を「0」に変更する。
制御実行部132は、スレッドL1の優先度を元の「低」に戻すと共に、リンク144を追い、待ちスレッド・キュー154を確認する。このとき、待ちスレッド・キュー154にスレッドM1が登録されているので、制御実行部132は、スレッドM1を起床させると共に、待ちスレッド・キュー154からスレッドM1を削除する。また、制御実行部132は、セマフォ1をスレッドM1に取得させ、スレッドM1の優先度をリソースAのシーリング値「高」に変更する。このときも、優先度が「低」に戻されたスレッドL1は、プロセッサコア121で実行を続ける。
<時刻t5>
スレッドL1はリソースBのセマフォ(セマフォ2)の獲得要求を発行する。
制御実行部132は、リンク144を追い、セマフォ値管理部152に記憶されたセマフォ2の値を確認する。セマフォ2の値が「0」であるため、制御実行部132は、セマフォ2をスレッドL1に取得させ、スレッドL1の優先度をリソースBのシーリング値「中」に変更する。これにより、セマフォ値管理部152は、セマフォ2の値を「1」に変更する。
すなわち、リソースAが属するグループのセマフォ(セマフォ1)がスレッドL1により獲得されているにもかかわらず、リソースBが属するグループのセマフォ(セマフォ2)が他のスレッドにより獲得されていなければ、リソースBのセマフォの獲得が可能になっている。
また、このとき、スレッドL1がリソースBのセマフォ(セマフォ2)を所有したままリソースAのセマフォ(セマフォ1)を再度要求した場合には、セマフォ1がスレッドM1により所有されているため、スレッドL1は排他待ちする。一方、スレッドBは、優先度がHに変更されており、シーリング値がM以下のリソースを獲得する可能性が無いため、スレッドBからセマフォ2を要求することは無い。そのため、デットロックも生じる可能性が無い。
<時刻t6>
スレッドM1がリソースAのセマフォを解放する。
制御実行部132は、スレッドM1の優先度を元の「中」に戻すと共に、リンク144を追い、待ちスレッド・キュー154を確認する。このとき、リソースAの排他待ちスレッドが無いので、制御実行部132は、セマフォ値管理部152におけるセマフォ1の値を「0」に変更する。
<時刻t7>
スレッドL1がリソースBのセマフォを解放する。
制御実行部132は、スレッドL1の優先度を元の「低」に戻すと共に、リンク144を追い、待ちスレッド・キュー154を確認する。このとき、リソースBの排他待ちスレッドが無いので、制御実行部132は、セマフォ値管理部152におけるセマフォ2の値を「0」に変更する。
その後、スレッドL1とスレッドM1は、それぞれプロセッサコア121とプロセッサコア122で実行され続ける。
このように、本実施の形態のリアルタイムシステム100によれば、優先度逆転やデッドロックなどの問題を回避し安全なシステムを実現すると共に、マルチコアプロセッサの有用性をより生かすことができる。
<第2の実施の形態>
本発明の第2の実施の形態も、マルチコアプロセッサにより構成されたリアルタイムシステムである。このリアルタイムシステムと第1の実施の形態のリアルタイムシステム100とは、共有リソースをグループ分けする際の手法が異なる点以外に、他の構成が同様である。ここで、第2の実施の形態における共有リソースのグループ分けについてのみ説明する。
リアルタイムシステム100において、同一のシーリング値を有するリソースが同一のグループになるように複数の共有リソースをグループ分けする。こうすることによって、リソースの排他対象は、該リソースと同じシーリング値を有するリソースに限定される。しかし、本発明によるスレッド制御手法によれば、1つのグループ内に、同様のスレッドより獲得される可能性の無いリソースと、他のリソースとの間で排他する必要が無いため、このようなリソースを別グループに分離し、別のセマフォを付与することができる。
したがって、本発明の第2の実施の形態において、第1の実施の形態のリアルタイムシステム100におけるグループ分けの手法により得られた同一のグループ内のリソースのうちの、同様の1つ以上のスレッドにより操作される可能性のあるリソースから構成されたセットであって、かつ、該セットに対応する上記1つ以上のスレッドが該グループ内の該セット以外のいずれのリソースも操作する可能性が無いセットに含まれるリソースを、別グループにさらに分けている。
図9に示す例を用いて説明する。この例では、共有リソースを操作しうるスレッドは、スレッドM1〜M2、スレッドL1〜L4の6つがある。それぞれのスレッドが獲得する可能性のあるリソースは、スレッドM1、スレッドM2、スレッドL1、スレッドL2、スレッドL3、スレッドL4の順で、「リソースA、リソースB、リソースC」、「リソースA、リソースD」、「リソースB、リソースE」、「リソースA、リソースE」、「リソースC、リソースE」、「リソースD、リソースF」である。
また、リソースAのシーリング値は「高」であり、リソースB〜Dのシーリング値は「中」であり、リソースE〜Fのシーリング値は「低」であるとする。
リアルタイムシステム100において、このような複数のリソースに対して、図4に示すグループ分けがなされ、それぞれのグループにセマフォが付与される。
しかし、図9に示すように、シーリング値が「中」であるリソースDを獲得する可能性のあるスレッドは、スレッドL4とスレッドM2である。これらのいずれのスレッドも、シーリング値が「中」である他のリソース(リソースBとリソースC)を獲得対象としない。そのため、本実施の形態において、リソースDを別グループに分離し、別のセマフォを付与する。
同様に、リソースEとリソースFもそれぞれ1つの独立したグループに分けられる。
その結果、図10に示すように、リソースAはシーリング値が「高」であるグループに分けられ、セマフォ1が付与される。リソースB〜Cはシーリング値が「中」であるグループに分けられ、セマフォ3が付与される。リソースDはシーリング値が「中」である別のグループに分けられ、セマフォ2が付与される。リソースEは、シーリング値が「低」である1つのグループに分けられ、セマフォ4が付与される。リソースFは、シーリング値が「低」である別のグループに分けられ、セマフォ5が付与される。
こうすることにより、リソースDの操作時に、同じシーリング値を有するリソースBとリソースCが排他対象にならず、リソースDの操作時にリソースBとCが排他対象にならない。同様に、リソースEとリソースFも互いに排他対象にならない。これにより、排他待ちの発生率を抑制することができ、プロセッサコアをより効率良く利用できる。
なお、1つのグループからさらに別グループを分ける際に、別グループの数は1つに限らず、別グループに含まれるリソースの数も1つに限られない。
例えば、シーリング値が「中」であるリソースは、リソースB〜Eの4つがある。リソースBを操作する可能性のあるスレッドはスレッドM1とスレッドL1であり、リソースCを操作する可能性のあるスレッドも同様である。そこで、スレッドM1とスレッドL1がリソースDとリソースEのいずれも操作対象としない場合には、リソースBとリソースCは、同一の別グループに分けられる。これは、一つの別グループに複数のリソースが含まれる例である。
また、たとえば、シーリング値が「中」であるリソースは、リソースB〜Eの4つがある。リソースBを操作する可能性のあるスレッドは、スレッドM1とスレッドL1であり、リソースCを操作する可能性のあるスレッドは、スレッドM1、スレッドM2及びスレッドL2である。また、リソースDを操作する可能性のあるスレッドは、スレッドM3とスレッドL3であり、リソースEを操作する可能性のあるスレッドは、スレッドM4とL4である。この場合、リソースBとリソースCが同じグループになり、リソースDとリソースEは、それぞれ1つの別のグループになる。
以上、実施の形態をもとに本発明を説明した。実施の形態は例示であり、本発明の主旨から逸脱しない限り、上述した各実施の形態に対して、さまざまな変更、増減、組合せを行ってもよい。これらの変更、増減、組合せが行われた変形例も本発明の範囲にあることは当業者に理解されるところである。
本発明の第1の実施の形態にかかるリアルタイムシステムを示す図である。 図1に示すリアルタイムシステムにおける制御部を示す図である。 図1に示すリアルタイムシステムにおける各共有リソースに対して設定されたシーリング値の例を示す図である。 図1に示すリアルタイムシステムにおける共有リソースのグループ分けを示す図である。 図2に示す制御部におけるバイナリ・セマフォ管理部によるグループ毎のセマフォの管理態様を説明するための図である。 リソースの獲得要求が発行されたときの、図2に示す制御部における制御実行部の動作を示すフローチャートである。 リソースの解放要求が発行されたときの、図2に示す制御部における制御実行部の動作を示すフローチャートである。 図1に示すリアルタイムシステムにおけるスレッドの動作例を示す図である。 本発明の第2の実施の形態のリアルタイムシステムにおける共有リソースのグループ分けを説明するための図である(その1)。 本発明の第2の実施の形態のリアルタイムシステムにおける共有リソースのグループ分けを説明するための図である(その2)。 優先度ベースのスケジューリングポリシを説明するための図である。 スレッドによる共有リソースの操作時に行う排他処理を説明するための図である。 バイナリ・セマフォ方式を説明するための図である。 バイナリ・セマフォ方式で生じる優先度逆転問題を説明するための図である。 バイナリ・セマフォ方式で生じるデッドロック問題を説明するための図である。 プライオリティ・シーリング方式を説明するための図である。 マルチコアプロセッサ向けのリアルタイムシステムの排他処理機構にプライオリティ・シーリング方式を適用した際に生じるデッドロックを説明するための図である。 マルチコアプロセッサ向けのリアルタイムシステムの排他処理機構にプライオリティ・シーリング方式を適用すると共に、デッドロックの発生を回避可能な手法を説明するための図である。 図19に示す手法の問題点を説明するための図である。 マルチコアプロセッサ向けのリアルタイムシステムの排他処理機構にプライオリティ・シーリング方式を適用すると共に、デッドロックの発生を回避可能な他の手法および該手法の問題点を説明するための図である。
符号の説明
100 リアルタイムシステム
110 バス
121 プロセッサコア
122 プロセッサコア
130 制御部
132 制御実行部
140 リソース管理部
142 シーリング値管理部
144 リンク
150 バイナリ・セマフォ管理部
152 セマフォ値管理部
154 待ちスレッド・キュー

Claims (6)

  1. 複数のプロセッサコアと、複数のスレッドにより共有されうる複数のリソースとを備えたリアルタイムシステムにおけるスレッド制御方法において、
    各前記リソースのシーリング値に基づいたプライオリティ・シーリング方式で、スレッドによるリソース操作時の排他制御を行い、
    同一のシーリング値を有するリソースが同一のグループになるように前記複数のリソースをグループ分けし、グループ単位のセマフォ方式でスレッドのスケジューリングを行うことを特徴とするスレッド制御方法。
  2. 同一のグループ内のリソースのうちの、同様の1つ以上のスレッドにより操作される可能性のあるリソースから構成されたセットであって、かつ、該セットに対応する前記1つ以上のスレッドが前記グループ内の前記セット以外のいずれのリソースも操作する可能性が無い前記セットに含まれるリソースを別グループにさらに分けることを特徴とする請求項1に記載のスレッド制御方法。
  3. 複数のプロセッサコアと、複数のスレッドにより共有されうる複数のリソースとを備えたリアルタイムシステムにおけるスレッド制御装置であって、
    各前記リソースのシーリング値に基づいたプライオリティ・シーリング方式で、スレッドによるリソース操作時の排他制御を行い、
    同一のシーリング値を有するリソースが同一のグループになるように前記複数のリソースをグループ分けして得たグループ単位のセマフォ方式でスレッドのスケジューリングを行う制御部を備えることを特徴とするスレッド制御装置。
  4. 同一のグループ内のリソースのうちの、同様の1つ以上のスレッドにより操作される可能性のあるリソースから構成されたセットであって、かつ、該セットに対応する前記1つ以上のスレッドが前記グループ内の前記セット以外のいずれのリソースも操作する可能性が無い前記セットに含まれるリソースは、別グループにさらに分けられていることを特徴とする請求項3に記載のスレッド制御装置。
  5. 複数のプロセッサコアと、
    複数のスレッドにより共有されうる複数のリソースと、
    各前記リソースのシーリング値に基づいたプライオリティ・シーリング方式で、スレッドによる前記リソースの操作時の排他制御を行い、同一のシーリング値を有するリソースが同一のグループになるように前記複数のリソースをグループ分けして得たグループ単位のセマフォ方式でスレッドのスケジューリングを行う制御部とを備えることを特徴とするリアルタイムシステム。
  6. 同一のグループ内のリソースのうちの、同様の1つ以上のスレッドにより操作される可能性のあるリソースから構成されたセットであって、かつ、該セットに対応する前記1つ以上のスレッドが前記グループ内の前記セット以外のいずれのリソースも操作する可能性が無い前記セットに含まれるリソースは、別グループにさらに分けられていることを特徴とする請求項5に記載のリアルタイムシステム。
JP2008182668A 2008-07-14 2008-07-14 スレッド制御方法およびスレッド制御装置ならびにリアルタイムシステム Pending JP2010020683A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2008182668A JP2010020683A (ja) 2008-07-14 2008-07-14 スレッド制御方法およびスレッド制御装置ならびにリアルタイムシステム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2008182668A JP2010020683A (ja) 2008-07-14 2008-07-14 スレッド制御方法およびスレッド制御装置ならびにリアルタイムシステム

Publications (1)

Publication Number Publication Date
JP2010020683A true JP2010020683A (ja) 2010-01-28

Family

ID=41705485

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008182668A Pending JP2010020683A (ja) 2008-07-14 2008-07-14 スレッド制御方法およびスレッド制御装置ならびにリアルタイムシステム

Country Status (1)

Country Link
JP (1) JP2010020683A (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112068945A (zh) * 2020-09-16 2020-12-11 厦门势拓御能科技有限公司 一种优化嵌入式系统中优先级反转方法
CN112204523A (zh) * 2018-05-30 2021-01-08 超威半导体公司 多内核波前调度程序
CN112068945B (zh) * 2020-09-16 2024-05-31 厦门势拓御能科技有限公司 一种优化嵌入式系统中优先级反转方法

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112204523A (zh) * 2018-05-30 2021-01-08 超威半导体公司 多内核波前调度程序
CN112068945A (zh) * 2020-09-16 2020-12-11 厦门势拓御能科技有限公司 一种优化嵌入式系统中优先级反转方法
CN112068945B (zh) * 2020-09-16 2024-05-31 厦门势拓御能科技有限公司 一种优化嵌入式系统中优先级反转方法

Similar Documents

Publication Publication Date Title
US8893145B2 (en) Method to reduce queue synchronization of multiple work items in a system with high memory latency between processing nodes
CN108647104B (zh) 请求处理方法、服务器及计算机可读存储介质
JP5324934B2 (ja) 情報処理装置および情報処理方法
WO2017166777A1 (zh) 一种任务调度方法及装置
KR101332840B1 (ko) 병렬 컴퓨팅 프레임워크 기반의 클러스터 시스템, 호스트 노드, 계산 노드 및 어플리케이션 실행 방법
KR102334511B1 (ko) 작업 의존성 관리
US20110161943A1 (en) Method to dynamically distribute a multi-dimensional work set across a multi-core system
KR101640848B1 (ko) 멀티코어 시스템 상에서 단위 작업을 할당하는 방법 및 그 장치
JP2010079622A (ja) マルチコアプロセッサシステム、および、そのタスク制御方法
JP2007041720A (ja) ジョブステップ実行プログラムおよびジョブステップ実行方法
WO2007084700A2 (en) System and method for thread handling in multithreaded parallel computing of nested threads
JPH03144847A (ja) マルチプロセッサ・システムおよびそのプロセス同期方法
US9507633B2 (en) Scheduling method and system
JP4912927B2 (ja) タスク割当装置、及びタスク割当方法
WO2016092856A1 (ja) 情報処理装置、情報処理システム、タスク処理方法、及び、プログラムを記憶する記憶媒体
WO2016202153A1 (zh) 一种gpu资源的分配方法及系统
JP2017162522A (ja) マルチコアシステムのインターラプト割り当て方法及び装置
JP7122299B2 (ja) 処理タスクを実行するための方法、装置、デバイス、および記憶媒体
JP2010020683A (ja) スレッド制御方法およびスレッド制御装置ならびにリアルタイムシステム
CN111989651A (zh) 在多核系统中管理内核服务的方法和装置
KR101332839B1 (ko) 병렬 컴퓨팅 프레임워크 기반 클러스터 시스템의 호스트 노드 및 메모리 관리 방법
TWI442323B (zh) 用於多核心/眾核心的工作排程與分配管理架構及其方法
Ishibashi et al. A real-time operating system with can-based inter-node shared resource management and distributed shared memory
KR20130104958A (ko) 다중 운영체제들을 실행하는 장치 및 방법
JP2010026575A (ja) スケジューリング方法およびスケジューリング装置並びにマルチプロセッサシステム