JP2010026575A - スケジューリング方法およびスケジューリング装置並びにマルチプロセッサシステム - Google Patents

スケジューリング方法およびスケジューリング装置並びにマルチプロセッサシステム Download PDF

Info

Publication number
JP2010026575A
JP2010026575A JP2008183743A JP2008183743A JP2010026575A JP 2010026575 A JP2010026575 A JP 2010026575A JP 2008183743 A JP2008183743 A JP 2008183743A JP 2008183743 A JP2008183743 A JP 2008183743A JP 2010026575 A JP2010026575 A JP 2010026575A
Authority
JP
Japan
Prior art keywords
processor
thread
shared resource
inter
shared
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
JP2008183743A
Other languages
English (en)
Inventor
Makoto Sato
信 佐藤
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 JP2008183743A priority Critical patent/JP2010026575A/ja
Publication of JP2010026575A publication Critical patent/JP2010026575A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Multi Processors (AREA)

Abstract

【課題】マルチプロセッサシステムにおいて、デットロックの回避を効率よく行う。
【解決手段】CPU110とCPU150を備えたリアルタイムシステム100において、プライオリティ・シーリング方式で共有リソースの排他制御を行う。また、共有リソースのうちの、CPU110とCPU150により共有されうるプロセッサ間共有リソースの獲得要求をしたスレッドに対して、共有メモリ200に記憶されたプロセッサ間共有リソース獲得情報210を参照して、該プロセッサ間共有リソースの優先度シーリング値が、該スレッドが動作するCPU以外のCPUにおけるスレッドにより排他制御中のいずれのプロセッサ間共有リソースの優先度シーリング値よりも大きいことを条件に、獲得要求をしたスレッドに当該プロセッサ間共有リソースを獲得させる。
【選択図】図1

Description

本発明は、スケジューリング、特にマルチプロセッサシステムにおけるスケジューリング技術に関する。
リアルタイムシステムで実行される逐次処理の単位は「スレッド」または「タスク」などの呼称があり、本明細書においては、「スレッド」と呼ぶ。多くのリアルタイムOS(オペレーティングシステム)は、リアルタイム性を確保するためのスケジューリングポリシとしてプリエンプティブな優先度ベースのスケジューリングポリシをサポートする。このスケジューリングポリシは、下記のように定められている。
1.その時点で最も高い優先度のスレッドが実行される。
2.その時点で最も高い優先度のスレッドの処理は中断されてはいけない。
3.同一優先度の場合は先着順とする。「先着順」は、スレッドが実行可能状態に遷移した順番を意味する。
4.優先度の高いスレッドが実行可能状態になった場合、該スレッドより優先度が低いスレッドの処理の途中であっても、スレッドの切替えを行って高い優先度のスレッドを実行させる。
上述した「実行可能状態」は、プリエンプトされた他のスレッドが無いとき、またはプリエンプトされた他のスレッドがCPU(Central Processing Unit)の実行権を解放すれば実行できる状態を意味する。
リアルタイムシステムにおいて、スレッドにより共有可能なリソース(以下共有リソースという)の衝突問題を解決するために、共有リソースの排他制御(以下単に排他制御という)が行われる。図5は、排他制御処理の模式図である。
図5に示すように、あるスレッドは、共有リソースの操作に当たって、まず、OSに対してリソース獲得要求(以下単に獲得要求ともいう)を発行する。そして、リソース獲得要求に応じてOSから共有リソースの操作が許可されれば、共有リソースを操作し、操作完了後、リソース解放要求(以下単に解放要求ともいう)をOSに発行して該共有リソースを解放する。スレッドが共有リソースを獲得してから、共有リソースを解放するまでの期間は、「ブロック期間」といい、ブロック期間における共有リソースの状態は、「排他制御中」という。
OSは、他のスレッドにより排他制御中ではないことを条件に、当該共有リソースの獲得要求を発行したスレッドにリソース操作を許可する。これにより、複数のスレッドが同時に共有リソースを操作することを回避することができる。
ここで、シングルプロセッサコアのリアルタイムシステムにおける排他処理機構について説明する。なお、以下において、スレッドの表記に「H」、「M」、「L」を付けることにより当該スレッドの優先度が「高」、「中」、「低」であることを示す。
共有リソースの衝突問題を簡単に解決できる排他処理機構として、多くのリアルタイムOSにはセマフォが装備されている。セマフォには、非負整数をとるカウンティングセマフォ、「0」と「1」をとるバイナリ・セマフォがあり、以下バイナリ・セマフォを例に説明する。なお、共有リソースを操作するような、排他処理が必要な区間をクリティカルリージョンという。
セマフォを使用する上では、下記の約束事が定められている。
1.スレッドがクリティカルリージョンに入るときにセマフォをとる。
2.セマフォがない間は、他のスレッドはクリティカルリージョンに入れない。
3.セマフォが他のスレッドにとられているときはセマフォが戻るまで待つ。
4.クリティカルリージョンから出るときにセマフォを戻す。
5.スレッドをとる間は不可分に(スレッドが切り替わることがなく)実行される。
6.セマフォを戻す間も不可分に実行される。
7.セマフォを戻すときに待っているスレッドがあればそのスレッドの待ち状態を解除すする。
図6は、セマフォを用いたリアルタイムシステムにおけるスレッドの実行模式を示す。図中において、優先度が「L:低」であるスレッドL1は、獲得要求をOSに発行してセマフォを取得してリソース操作をする。その後、スレッドL1が解放要求をOSに発行してセマフォを戻すまでは、ブロック期間であり、この期間において他のスレッドは該共有リソースのセマフォをとることができない。時刻t0において、優先度が「M:中」であるスレッドM1が実行可能状態に遷移したため、スレッドL1の実行は中断され、スレッドM1は実行される。時刻t1において、スレッドM1が獲得要求を発行するものの、セマフォがスレッドL1により排他制御中であるため、スレッドM1は中断され、スレッドL1は再開される。のちに、スレッドL1がセマフォを解放すると、スレッドM1は、やっとセマフォを取得する。これに伴って、スレッドM1は実行され、スレッドL1は中断される。
以下、スレッドがセマフォを待つことを「排他待ち」といい、図6に示す時刻t0〜時刻t1のような、排他待ちをしている区間を「排他待ち期間」という。
セマフォを利用した場合に、デッドロックの問題が生じる、図7を参照して説明する。
図7の例に示すように、まず、スレッドL1は共有リソースであるリソースAのセマフォを取得してリソースAを操作する。時刻t0において、スレッドM1が実行可能状態に遷移したため、スレッドM1は実行され、スレッドL1は中断される。そして、時刻t1において、スレッドM1は別の共有リソースであるリソースBのセマフォを取得して、リソースBを操作する。処理が進み、時刻t2において、スレッドM1は、リソースAを操作するためにリソースAのセマフォを要求するが、リソースAのセマフォはスレッドL1により所有されているため、スレッドM1は中断され、排他待ち期間に入る。そこで、スレッドL1は、実行が再開される。
処理がさらに進み、スレッドL1はリソースBを操作するためにリソースBのセマフォを要求するが、リソースBのセマフォはスレッドM1により所有されているため、スレッドL1も中断され、排他待ち期間に入る。
こうなると、スレッドM1とスレッドL1のいずれも実行することができず、いわゆるデットロックが発生する。
セマフォを利用する際に生じるデットロックの問題を解決するために、セマフォを取得したスレッドの優先度を一時的に高くするプライオリティ・シーリング方式を用いた手法がある。
プライオリティ・シーリング方式は、プリエンプティブな優先度ベースのスケジューリングポリシの前提下に、スレッドがリソースのセマフォを取得すると、直ちにこのスレッドの優先度を該リソースの優先度シーリング値(以下単にシーリング値という)に一時的に上げる方式である。図8を参照して説明する。なお、シーリング値は、当該リソースを獲得する可能性のあるすべてのスレッドの優先度以上の優先度であり、予めリソースに対して設定されている。また、スレッドは、自身の優先度(優先度が一時的に挙げられているときには、そのときの優先度)より低いシーリング値を有するリソースを取得できないように規定されている。
図8の例において、リソースAのシーリング値とリソースBのシーリング値は、「高」である。図示のように、時刻t0において、動作中のスレッドL1はリソースAのセマフォを取得してリソースAを操作する。これに伴って、スレッドL1の優先度は、リソースAのシーリング値「高」に変更される。
時刻t1において、スレッドM1が実行可能状態に遷移したが、優先度が「高」に変更されたスレッドL1が動作中であるため、スレッドM1は動作できない。スレッドL1は、時刻t2においてリソースBのセマフォを取得し、時刻t3においてリソースBのセマフォを解放する。
時刻t4において、スレッドL1は、リソースAのセマフォを解放する。同時に、その優先度は元の「低」に戻る。これにより、スレッドM1の優先度がスレッドL1の優先度より高くなるため、スレッドM1は実行され、スレッドL1の実行は中断される。
その後、スレッドM1はリソースAのセマフォを取得して操作するなどの処理を行う。スレッドM1が実行されている間、スレッドL1は実行されることがない。
図8に示す例では、リソースAとリソースBのシーリング値が同一の「高」であるが、リソースAのシーリング値が「高」であり、リソースBのシーリングが「中」である場合においては、スレッドL1がリソースAのセマフォを取得して優先度が「高」に変更されたとき、リソースBを取得することが無い。
このように、プライオリティ・シーリング方式を用いれば、シングルコアプロセッサのリアルタイムシステムにおいて、デットロックを回避することができる。また、スレッドが共有リソースを排他制御している時間を短縮できるため、システム全体の効率が向上する。
ところで、マルチコアプロセッサのリアルタイムシステムでは、複数のプロセッサコアにより共有可能な共有リソースに対して、プライオリティ・シーリング方式を適用しても、デットロックの可能性がある。図9を参照して説明する。
図9において、縦軸が優先度を示す。プロセッサコアとしてプロセッサコアAとプロセッサコアBの2つがあり、共有リソースとしてリソースAとリソースBの2つがあるとする。また、リソースAとリソースBのいずれも、シーリング値は「高」である。
図9の例では、まず、プロセッサコア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のいずれも実行することができず、デットロックが発生する。
このように、マルチコアプロセッサによるリアルタイムシステムにおいて、優先度が異なる複数のスレッドが同時に動作可能であるため、優先度の高いスレッドの実行中に優先度の低いスレッドが実行されないことを利用したプライオリティ・シーリング方式を適用してもデッドロックが生じ得る。
マルチコアプロセッサシステムにおけるデットロックの問題を解消するために様々な試みがなされている。たとえば、特許文献1に開示された手法は、共有リソース毎に現在排他制御中のスレッド名及び排他待ちのスレッド名を格納した排他制御管理テーブルと、スレッド毎に該スレッドが現在排他制御中の共有リソース名を格納した排他制御共有資源情報テーブルを設ける。
そして、あるスレッドが共有リソースの獲得要求を行う際に、上記排他制御管理テーブルと排他制御共有資源情報テーブルを参照して、該獲得要求がデットロックを生じさせるかを判断し、デットロックが発生すると判断した場合に、その時点では当該共有リソースの獲得要求を行わないようにする。
具体的には、あるスレッドから共有リソースの獲得を要求するシステムコールを発行した際に、該スレッドの排他制御共有資源情報テーブルから該スレッドにより排他制御中の共有リソース名を読み取ると共に、排他制御管理テーブルから、該スレッドが獲得要求している共有リソースを現在排他制御中のスレッド名を読み取る。さらに、排他制御共有資源情報テーブルから読み取った各共有リソースについて、排他制御管理テーブルから、これらの共有リソースの排他待ち中のスレッド名を読み取る。そして、上記読み取った両者のスレッド名を比較し、一致するスレッド名がある場合には、このまま獲得要求を行うとデットロックが発生すると判断し、獲得要求をしたスレッドに対して、現在排他制御中の共有リソースを解放してから、次に使用する共有リソースの獲得要求を行うように制御する。
すなわち、スレッドからの共有リソースの獲得要求に対して、該スレッドにより排他制御中の共有リソースを排他待ちしているいずれのスレッドも、上記スレッドが獲得しようとしている共有リソースの排他制御中ではない場合においてのみ、上記獲得要求を発行できるように制御する。こうすることにより、マルチコアプロセッサシステムにおいてもデットロックを回避することができる。
特開平7−105152号公報
特許文献1の手法は、実質的には、セマフォのみを用いてマルチコアプロセッサシステムにおけるデットロック問題の解消を図っている。共有リソースの獲得要求を発行させるか否かの判断を行う際に、該スレッドにより排他制御中の共有リソース名の取得、これらの共有リソースの排他待ち中のスレッド名の取得、獲得要求先の共有リソースの排他制御中のスレッド名の取得、取得したスレッド名の比較などの処理を必要とする。これでは、共有リソースの排他制御処理が煩雑になり、時間がかかる。
本発明の1つの態様は、スケジューリング方法である。この方法は、複数のスレッドにより共有されうる共有リソースを備えたマルチプロセッサシステムにおいて、プライオリティ・シーリング方式でこれらの共有リソースの排他制御を行うと共に、上記共有リソースのうちの、複数のプロセッサコアにより共有されうるプロセッサ間共有リソースの獲得要求をしたスレッドに対して、該プロセッサ間共有リソースの優先度シーリング値が、該スレッドが動作するプロセッサコア以外のプロセッサコアにおけるスレッドにより排他制御中のいずれのプロセッサ間共有リソースの優先度シーリング値よりも大きいことを条件に、上記獲得要求を発行したスレッドに当該プロセッサ間共有リソースを獲得させる。
なお、上記態様の方法を実行する装置、該方法を適用したマルチプロセッサシステム、コンピュータに上記方法を実行せしめるプログラム、該プログラムを含むOSなどに置き換えて表現したものも、本発明の態様として有効である。
本発明にかかるスケジューリング技術によれば、マルチプロセッサシステムにおいて、デットロックの回避を効率よく行う。
以下、図面を参照して本発明の実施の形態について説明する。なお、以下の説明に用いられる図面に、様々な処理を行う機能ブロックとして記載される各要素は、ハードウェア的には、プロセッサ、メモリ、その他の回路で構成することができ、ソフトウェア的には、メモリに記録された、またはロードされたプログラムなどによって実現される。したがって、これらの機能ブロックがハードウェアのみ、ソフトウェアのみ、またはそれらの組合せによっていろいろな形で実現できることは当業者には理解されるところであり、いずれかに限定されるものではない。また、分かりやすいように、これらの図面において、本発明の技術を説明するために必要なもののみを示す。
本発明の具体的な実施の形態を説明する前に、まず本発明の原理を説明する。
前述したように、シングルプロセッサシステムにおいて、デットロックを回避する手法として、プリオリティ・シーリング方式が有効である。本願発明者は、複数のプロセッサコアにより共有されうる共有リソースを備えたマルチプロセッサシステムにおいて、これらの共有リソースの排他制御について鋭意研究模索した結果、マルチプロセッサシステムにおける排他制御にプライオリティ・シーリング方式を適用し、共有リソースの排他制御の効率向上を図る手法を確立した。
分かりやすいように、マルチプロセッサシステムにおけるリソースを3種類に分類する。1つ目は、スレッドにより共有されることの無いリソースである。このようなリソースに対しては、排他制御を行う必要が無いため、以下の説明においては、このようなリソースの取扱いについて省略する。
2つ目は、同一のプロセッサコア内で動作する複数のスレッドにのみ共有されうるリソースである。このようなリソースを、以下「プロセッサ内共有リソース」という。
3つ目は、複数のプロセッサコアにより共有されうるリソースである。このようなリソースは、異なるプロセッサコアでそれぞれ動作する複数のスレッドにより操作される可能性があり、以下「プロセッサ間共有リソース」という。
以下の説明において、単に「共有リソース」をいうときは、プロセッサ間共有リソースとプロセッサ内共有リソースのいずれも含むことを意味する。
前述したように、マルチプロセッサシステムにおいて、共有リソースの排他制御にプライオリティ・シーリングを適用しても、デットロックが生じ得る。図9に示すように、プロセッサコアAで動作中のスレッドL1がプロセッサ間共有リソースA(シーリング値:H)の排他制御中に、プロセッサBで動作中のスレッドM1がプロセッサ間共有リソースB(シーリング値:H)を獲得した場合、その後、スレッドL1とスレッドM1がそれぞれリソースBとリソースAを獲得しようとするときに、デットロックが発生する。
すなわち、プライオリティ・シーリング方式を排他制御に適用しただけでは、あるスレッドが、自身による1つのプロセッサ間共有リソースの排他制御中に、該プロセッサ間共有リソースと同一のシーリング値を有し、かつ、他のプロセッサコアにおけるスレッドにより排他制御中の他のプロセッサ間共有リソースを獲得可能であれば、デットロックが生じる。
本願発明者が確立した手法は、このことに着目してなされたものであり、プライオリティ・シーリング方式を共有リソースの排他制御に適用すると共に、上記可能性を無くすべく、あるプロセッサコアで動作するスレッドがプロセッサ間共有リソースの獲得要求をした際に、該プロセッサ間共有リソースのシーリング値が、他のプロセッサコアにおけるスレッドにより排他制御中のいずれのプロセッサ間共有リソースのシーリング値よりも大きい場合にのみ、当該プロセッサ間共有リソースを獲得させる。
こうすることにより、例えば、図9の例では、スレッドL1がリソースAを解放するまで、スレッドM1がリソースBを獲得できないので、デットロックは発生しない。
この手法によれば、シングルコアプロセッサの場合と比べ、スレッドが獲得要求をしたプロセッサ間共有リソースのシーリング値と、他のプロセッサコアにおけるスレッドにより排他制御中のプロセッサ間共有リソースのシーリング値とを比較する作業のみが多くなるので、処理が簡単である。
本発明にかかる技術は、機能分散型のマルチプロセッサシステムにおいて特に有用である。機能分散型のマルチプロセッサシステムでは、各スレッドは、該スレッドに対して定められた1つのプロセッサコア内でのみ動作する。本発明にかかる技術を適用することによりプロセッサ間共有リソースの獲得に起因するデットロックを防ぐことができるので、スレッドがプロセッサ間共有リソースの獲得要求をしていない限り、夫々のプロセッサコアをシングルコアプロセッサとして看做すことができ、プロセッサコア毎に、シングルコアプロセッサのときと同様のスケジューリングを行うができ、システムの構築が容易である。
以上の原理を踏まえて、本発明の具体的な実施例を説明する。
図1は、本発明の実施の形態にかかるリアルタイムシステム100を示す。リアルタイムシステム100は、複数のCPU(図示の例では2つ:CPU110、CPU150)と、各CPUがバス190を介してアクセス可能な共有メモリ200を備える。
CPU110は、プロセッサコア112と、スケジューリング部114と、プロセッサコア112で動作する複数のスレッド(図示の例では4つ:スレッド122〜128)と、複数のリソース(図示の例では4つ:リソース132、134、142、144)を有する。
CPU150は、プロセッサコア152と、スケジューリング部154と、プロセッサコア152で動作する複数のスレッド(図示の例では4つ:スレッド162〜168)と、複数のリソース(図示の例では4つ:リソース172、174、182、184)を有する。
リアルタイムシステム100は、機能分散型のマルチプロセッサシステムであり、スレッド122〜128はプロセッサコア112でのみ動作し、スレッド162〜168はプロセッサコア152でのみ動作する。また、各スレッドは、優先度が設定されている。
スケジューリング部114は、プロセッサコア112で動作する各スレッドのスケジューリングを行い、スケジューリング部154は、プロセッサコア152で動作する各スレッドのスケジューリングを行う。
CPU110内の各リソースのうち、リソース132とリソース134は、プロセッサコア112で動作するスレッドにのみ共有されるプロセッサ内共有リソースであり、リソース142とリソース144は、プロセッサコア112で動作するスレッドに限らず、プロセッサコア152で動作するスレッドからも操作されうるプロセッサ間共有リソースである。
CPU150内の各リソースのうち、リソース172とリソース174は、プロセッサコア152で動作するスレッドにのみ共有されるプロセッサ内共有リソースであり、リソース182とリソース184は、プロセッサコア152で動作するスレッドに限らず、プロセッサコア112で動作するスレッドからも操作されうるプロセッサ間共有リソースである。
なお、スレッドにより共有されることの無いリソースについては、排他制御の必要が無いため、その説明および図示を省略する。
共有メモリ200は、プロセッサ間共有リソース獲得情報210を記憶している。図2に示すように、プロセッサ間共有リソース獲得情報210は、排他制御中のプロセッサ間共有リソースのシーリング値と、該プロセッサ間共有リソースを獲得したスレッドが動作するCPUの識別子とを対応付けてなるものである。
なお、共有メモリ200は、CPU110とCPU150により共有されるプロセッサ間共有リソースであり、最も高いシーリング値が設定されている。
スケジューリング部114とスケジューリング部154は、スケジューリングする対象スレッドが異なる点を除き、同様の構成と機能を有するため、ここでスケジューリング部114を代表にして、スケジューリング部114とスケジューリング部154を説明する。
スケジューリング114は、スレッド122〜128に対して、プリエンプティブな優先度ベースのスケジューリングポリシを用いてスケジューリングを行う。また、共有リソースの排他制御についてはプライオリティ・シーリング方式を用いる。具体的には、プロセッサコア112で動作するいずれかのスレッドが共有リソースを獲得した際に、該スレッドの優先度を、獲得した共有リソースのシーリング値に一時的に上げる。また、実行中のスレッドが、そのときの該スレッドの優先度より低いシーリング値を有する共有リソースを獲得できないように制御する。
また、スケジューリング部114は、プロセッサコア112で動作するいずれかのスレッドがプロセッサ間共有リソースを獲得した際に、プロセッサコア112で動作する各スレッド(上記プロセッサ間共有リソースを獲得したスレッドを含む)のうちに、該プロセッサ間共有リソースと同一のシーリング値を有する別のプロセッサ間共有リソースを獲得したスレッドが無い場合に、該プロセッサ間共有リソースのシーリング値と、CPU110の識別子とを対応付けて共有メモリ200に書き込む。また、プロセッサ間共有リソースを獲得したスレッドが該共有リソースを解放した際に、プロセッサコア112で動作する各スレッドのうちに、該プロセッサ間共有リソースと同一のシーリング値を有するプロセッサ間共有リソースを獲得したスレッドが無い場合に、該共有リソースに対応する項目を削除する。
後述の説明で分かるが、CPU110内のスレッドがプロセッサ間共有リソースの獲得要求を発行した際に、スケジューリング部114は、該プロセッサ間共有リソースを獲得させるかの決定に必要な情報は、CPU150におけるスレッドにより排他制御中のプロセッサ間共有リソースのうちに、獲得要求された上記プロセッサ間共有リソースのシーリング値以上のシーリング値のプロセッサ間共有リソースの有無を示す情報である。そのため、1つのCPUについて、該CPUにおけるスレッドにより排他制御中であり、かつシーリング値が同一である複数のプロセッサ間共有リソースがある場合にも、プロセッサ間共有リソース獲得情報210には、上記シーリング値とCPUとを対応付けた内容があればよく、これらの全てのプロセッサ間共有リソースについてシーリング値とCPUとを対応付けた内容を書き込む必要が無い。こうすることにより、プロセッサ間共有リソース獲得情報210が共有メモリ200に占める容量を節約できる。
スケジューリング部114は、プロセッサコア112で動作するいずれかのスレッドがプロセッサ間共有リソースの獲得要求した際に、共有メモリ200に記憶されたプロセッサ間共有リソース獲得情報210を参照して、要求されたプロセッサ間共有リソースを該スレッドに獲得させるかを決定する。具体的には、獲得要求されたプロセッサ間共有リソースのシーリング値が、プロセッサ間共有リソース獲得情報210に含まれた、CPU150に対応するいずれのシーリング値もより大きい場合においてのみ、獲得要求されたプロセッサ間共有リソースを当該スレッドに獲得させる。
図3に示すフローチャートを参照して、スケジューリング部114の動作をより詳細に説明する。
プロセッサコア112で実行中のスレッドが共有リソースの獲得要求をした際に(S100)、スケジューリング部114は、該共有リソースがプロセッサ間共有リソースであるかを確認する(S110)。プロセッサ間共有リソースではないときには、CPU110内でリソース獲得処理を行う(S110:No、S160)。CPU110内でのリソース獲得処理は、CPU110をシングルコアプロセッサと看做した場合と同じ処理であるため、ここで詳細な説明を省略する。
一方、獲得要求されたリソースがプロセッサ間共有リソースであるときに、スケジューリング部114は、共有メモリ200に記憶されたプロセッサ間共有リソース獲得情報210を参照して、プロセッサコア112で動作する各スレッドのうちに、該プロセッサ間共有リソースと同一のシーリング値を有する別のプロセッサ間共有リソースの排他制御中のスレッドの有無を確認する(S110:Yes、S120、S130)。ステップS130での確認は、具体的には、プロセッサ間共有リソース獲得情報210の中に、獲得要求されたプロセッサ間共有リソースと同一のシーリング値と、CPU110とを対応付けられて記憶された内容の有無の確認である。
ステップS130での確認の結果が「有」である場合は、他のCPU(ここでCPU150)におけるいずれのスレッドが獲得したプロセッサ間共有リソースのシーリング値も、獲得要求されたプロセッサ間共有リソースのシーリング値以下であることが分かるため、スケジューリング部114は、獲得要求をしたスレッドに当該プロセッサ間共有リソースを獲得させるCPU110内でのリソース獲得処理を行う(S130:Yes、S160)。
一方、ステップS130での確認の結果が「無」である場合は、スケジューリング部114は、さらに、獲得要求されたプロセッサ間共有リソースのシーリング値が、他のCPUで排他制御中のいずれのプロセッサ間共有リソースのシーリング値よりも大きいかを確認する(S130:No、S140)。
獲得要求されたプロセッサ間共有リソースのシーリング値以上のシーリング値を有するプロセッサ間共有リソースが、他のCPUで排他制御中であれば(S140:Yes)、スケジューリング部114は、他のCPUで上記プロセッサ間共有リソースが解放されるまで、獲得要求されたプロセッサ間共有リソースを当該スレッドに獲得させない(S140:Yes、S140)。なお、スケジューリング部114は、この間において、プロセッサコア112を割込みによるエンプトプリエンプト可能な状態にする。こうすることにより、上記スレッドがプロセッサ間共有リソースを獲得できず、待っているときに、CPU110において、他のスレッドが実行可能状態に遷移したときに、該スレッドをプロセッサコア112で実行させることができる。
一方、獲得要求されたプロセッサ間共有リソースのシーリング値が、他のCPUで排他制御中のいずれのプロセッサ間共有リソースのシーリング値よりも大きいときには、スケジューリング部114は、獲得要求したスレッドに当該プロセッサ間共有リソースを獲得させるCPU110内でのリソース獲得処理を行うとともに、該共有リソースのシーリング値と、CPU110の識別子とを対応付けて共有メモリ200に書き込んでプロセッサ間共有リソース獲得情報を更新する(S140:No、S150、S160)。
図4に示す動作例を用いて、リアルタイムシステム100におけるスケジューリング手法の効用を説明する。
<時刻t0>
CPU110において、優先度「L」のスレッド122が実行されており、CPU150には、実行されているスレッドが無い。
<時刻t1>
スレッド122がプロセッサ間共有リソース142の獲得要求を発行して、プロセッサ間共有リソース142を獲得する。それに伴って、スレッド122の優先度が、プロセッサ間共有リソース142のシーリング値「H」に変更される。また、プロセッサ間共有リソース獲得情報210には、シーリング値「H」とCPU110は、対応付けて書き込まれる。
<時刻t2>
CPU150において、スレッド162が実行可能状態に遷移したため、実行される。
<時刻t3>
CPU150において、スレッド162がシーリング値「H」であるプロセッサ間共有リソース144の獲得要求をする。しかし、プロセッサ間共有リソース獲得情報210には、CPU110と対応付けて記憶されたシーリング値「H」があるため、スレッド162は、プロセッサ間共有リソース144を取得できずに待ち状態になる。
<時刻t4>
CPU110において、スレッド122はプロセッサ間共有リソース144の獲得要求を発行してプロセッサ間共有リソース144を獲得する。
<時刻t5>
CPU110において、スレッド122はプロセッサ間共有リソース144を解放する。
CPU150において、スレッド162は待ち状態を続ける。
<時刻t6>
CPU110において、スレッド122はプロセッサ間共有リソース142を解放して、優先度が元の「L」に戻る。これに伴って、プロセッサ間共有リソース獲得情報210には、シーリング値「H」とCPU110とを対応付けた内容が削除される。
そのため、CPU150において、スレッド162は、プロセッサ間共有リソース144を取得して処理を再開する。これに伴って、スレッド162の優先度は「H」に変更される。
その後、CPU110において、スレッド122は、優先度「L」で動作する。
CPU150において、スレッド162は、プロセッサ間共有リソース142の取得(時刻t7)、プロセッサ間共有リソース142の解放(時刻t8)、プロセッサ間共有リソース144の解放(時刻t9)を経て、優先度が「M」に戻る。
このように、本実施の形態のリアルタイムシステム100において、時刻t2〜t3間、時刻t6以降のように、高い優先度のスレッドの実行中にも、他のプロセッサコアで低い優先度のスレッドが実行できる。また、プロセッサ間共有リソース共有リソースが存在する場合にもデットロックの発生を回避することができる。
以上、実施の形態をもとに本発明を説明した。実施の形態は例示であり、本発明の主旨から逸脱しない限り、上述した各実施の形態に対して、さまざまな変更、増減、組合せを行ってもよい。これらの変更、増減、組合せが行われた変形例も本発明の範囲にあることは当業者に理解されるところである。
また、リアルタイムシステム100は、分散型のマルチプロセッサシステムに本発明の技術を適用した例であるが、本発明のスケジューリング技術は、分散型ではないマルチプロセッサシステムにも適用することができる。
また、リアルタイムシステム100において、プロセッサ間共有リソース獲得情報210を共有メモリ200に記憶させている。どのCPUからもプロセッサ間共有リソース獲得情報210にアクセスできれば、いかなる態様でプロセッサ間共有リソース獲得情報210を保持してもよい。例えば、プロセッサ間共有リソース獲得情報210をライブラリとして更新しながら保持することもできる。
本発明の実施の形態にかかるリアルタイムシステムを示す図である。 図1に示すリアルタイムシステムにおける共有メモリに記憶されたプロセッサ間共有リソース獲得情報の例を示す図である。 図1に示すリアルタイムシステムにおけるスケジューリング部が、共有リソースに対して獲得要求がなされたときの処理を示すフローチャートである。 図1に示すリアルタイムシステムにおける動作例を示す図である。 スレッドによる共有リソースの操作時に行う排他制御の模式図である。 バイナリ・セマフォ方式を説明するための図である。 バイナリ・セマフォ方式で生じるデッドロック問題を説明するための図である。 プライオリティ・シーリング方式を説明するための図である。 マルチプロセッサシステムの排他処理機構にプライオリティ・シーリング方式を適用した際に生じるデッドロックを説明するための図である。
符号の説明
100 リアルタイムシステム
110 CPU
112 プロセッサコア
114 スケジューリング部
122〜128 スレッド
132〜134 プロセッサ内共有リソース
142〜144 プロセッサ間共有リソース
150 CPU
152 プロセッサコア
154 スケジューリング部
162〜168 スレッド
172〜174 プロセッサ内共有リソース
182〜184 プロセッサ間共有リソース
190 バス
200 共有メモリ
210 プロセッサ間共有リソース獲得情報

Claims (11)

  1. 複数のスレッドにより共有されうる共有リソースを備えたマルチプロセッサシステムにおいて、
    プライオリティ・シーリング方式で前記共有リソースの排他制御を行い、
    前記共有リソースのうちの、複数のプロセッサコアにより共有されうるプロセッサ間共有リソースの獲得要求をしたスレッドに対して、該プロセッサ間共有リソースの優先度シーリング値が、該スレッドが動作するプロセッサコア以外のプロセッサコアにおけるスレッドにより排他制御中のいずれのプロセッサ間共有リソースの優先度シーリング値よりも大きいことを条件に、前記スレッドに当該プロセッサ間共有リソースを獲得させることを特徴とするスケジューリング方法。
  2. 各スレッドは、前記複数のプロセッサコアのうちの、該スレッドに対して定められた1つのプロセッサコアでのみ動作するものであり、
    自身が動作するプロセッサコア以外のプロセッサコアにおけるスレッドにより排他制御中のプロセッサ間共有リソースの獲得要求をしていないスレッドに対して、該スレッドと同一のプロセッサコアで動作するスレッド同士間でスケジューリングを行うことを特徴とする請求項1に記載のスケジューリング方法。
  3. 排他制御中のプロセッサ間共有リソースのシーリング値と、該プロセッサ間共有リソースを獲得したスレッドが動作するプロセッサコアの識別子とを対応付けてなるプロセッサ間共有リソース獲得情報を記憶し、
    いずれかのプロセッサ間共有リソースの獲得要求をしたスレッドに対して、前記プロセッサ間共有リソース取得情報に基づいて、該プロセッサ間共有リソースを獲得させるかを決定することを特徴とする請求項1または2に記載のスケジューリング方法。
  4. 複数のスレッドにより共有されうる共有リソースを備えたマルチプロセッサシステムにおけるスケジューリング装置であって、
    プライオリティ・シーリング方式で前記共有リソースの排他制御を行い、
    前記共有リソースのうちの、複数のプロセッサコアにより共有されうるプロセッサ間共有リソースの獲得要求をしたスレッドに対して、該プロセッサ間共有リソースの優先度シーリング値が、該スレッドが動作するプロセッサコア以外のプロセッサコアにおけるスレッドにより排他制御中のいずれのプロセッサ間共有リソースの優先度シーリング値よりも大きいことを条件に、前記スレッドに当該プロセッサ間共有リソースを獲得させることを特徴とするスケジューリング装置。
  5. 各スレッドは、前記複数のプロセッサコアのうちの、該スレッドに対して定められた1つのプロセッサコアでのみ動作するものであり、
    自身が動作するプロセッサコア以外のプロセッサコアにおけるスレッドにより排他制御中のプロセッサ間共有リソースの獲得要求をしていないスレッドに対して、該スレッドと同一のプロセッサコアで動作するスレッド同士間でスケジューリングを行うことを特徴とする請求項4に記載のスケジューリング装置。
  6. プロセッサコア毎に設けられており、自身が設けられたプロセッサコアで動作するスレッドのスケジューリングを行うことを特徴とする請求項5に記載のスケジューリング装置。
  7. 排他制御中のプロセッサ間共有リソースのシーリング値と、該プロセッサ間共有リソースを獲得したスレッドが動作するプロセッサコアの識別子とを対応付けてなるプロセッサ間共有リソース獲得情報を記憶した記憶装置に記憶された前記プロセッサ間共有リソース取得情報に基づいて、いずれかのプロセッサ間共有リソースの獲得要求をしたスレッドに対して該プロセッサ間共有リソースを獲得させるかを決定することを特徴とする請求項4から6のいずれか1項に記載のスケジューリング装置。
  8. 複数のプロセッサコアと、
    該複数のスレッドにより共有されうる共有リソースと、
    プライオリティ・シーリング方式で前記共有リソースの排他制御を行い、
    前記共有リソースのうちの、複数のプロセッサコアにより共有されうるプロセッサ間共有リソースの獲得要求をしたスレッドに対して、該プロセッサ間共有リソースの優先度シーリング値が、該スレッドが動作するプロセッサコア以外のプロセッサコアにおけるスレッドにより排他制御中のいずれのプロセッサ間共有リソースの優先度シーリング値よりも大きいことを条件に、前記スレッドに当該プロセッサ間共有リソースを獲得させるスケジューリング装置とを備えることを特徴とするマルチプロセッサシステム。
  9. 各スレッドは、前記複数のプロセッサコアのうちの、該スレッドに対して定められた1つのプロセッサコアでのみ動作するものであり、
    前記スケジューリング装置は、自身が動作するプロセッサコア以外のプロセッサコアにおけるスレッドにより排他制御中のプロセッサ間共有リソースの獲得要求をしていないスレッドに対して、該スレッドと同一のプロセッサコアで動作するスレッド同士間でスケジューリングを行うことを特徴とする請求項8に記載のマルチプロセッサシステム。
  10. 前記スケジューリング装置は、プロセッサコア毎に設けられており、自身が設けられたプロセッサコアで動作するスレッドのスケジューリングを行うことを特徴とする請求項9に記載のマルチプロセッサシステム。
  11. 排他制御中のプロセッサ間共有リソースのシーリング値と、該プロセッサ間共有リソースを獲得したスレッドが動作するプロセッサコアの識別子とを対応付けてなるプロセッサ間共有リソース獲得情報を記憶した記憶装置をさらに備え、
    前記スケジューリング装置は、いずれかのプロセッサ間共有リソースの獲得要求をしたスレッドに対して、記憶装置に記憶された前記プロセッサ間共有リソース取得情報に基づいて、当該プロセッサ間共有リソースを獲得させるかを決定することを特徴とする請求項8から10のいずれか1項に記載のマルチプロセッサシステム。
JP2008183743A 2008-07-15 2008-07-15 スケジューリング方法およびスケジューリング装置並びにマルチプロセッサシステム Pending JP2010026575A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2008183743A JP2010026575A (ja) 2008-07-15 2008-07-15 スケジューリング方法およびスケジューリング装置並びにマルチプロセッサシステム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2008183743A JP2010026575A (ja) 2008-07-15 2008-07-15 スケジューリング方法およびスケジューリング装置並びにマルチプロセッサシステム

Publications (1)

Publication Number Publication Date
JP2010026575A true JP2010026575A (ja) 2010-02-04

Family

ID=41732384

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008183743A Pending JP2010026575A (ja) 2008-07-15 2008-07-15 スケジューリング方法およびスケジューリング装置並びにマルチプロセッサシステム

Country Status (1)

Country Link
JP (1) JP2010026575A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9940278B2 (en) 2014-11-10 2018-04-10 Samsung Electronics Co., Ltd. System on chip having semaphore function and method for implementing semaphore function
US10185602B2 (en) 2015-03-18 2019-01-22 Ricoh Company, Ltd. Information processing apparatus, information processing method, and computer program product

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9940278B2 (en) 2014-11-10 2018-04-10 Samsung Electronics Co., Ltd. System on chip having semaphore function and method for implementing semaphore function
US10176136B2 (en) 2014-11-10 2019-01-08 Samsung Electronics Co., Ltd. System on chip having semaphore function and method for implementing semaphore function
US10678728B2 (en) 2014-11-10 2020-06-09 Samsung Electronics Co., Ltd. System on chip having semaphore function and method for implementing semaphore function
US11080220B2 (en) 2014-11-10 2021-08-03 Samsung Electronics Co., Ltd. System on chip having semaphore function and method for implementing semaphore function
US11599491B2 (en) 2014-11-10 2023-03-07 Samsung Electronics Co., Ltd. System on chip having semaphore function and method for implementing semaphore function
US11835993B2 (en) 2014-11-10 2023-12-05 Samsung Electronics Co., Ltd. System on chip having semaphore function and method for implementing semaphore function
US10185602B2 (en) 2015-03-18 2019-01-22 Ricoh Company, Ltd. Information processing apparatus, information processing method, and computer program product

Similar Documents

Publication Publication Date Title
JP4170227B2 (ja) 多重処理環境における処理の実行
US7395383B2 (en) Realtime-safe read copy update with per-processor read/write locks
US9378069B2 (en) Lock spin wait operation for multi-threaded applications in a multi-core computing environment
KR102334511B1 (ko) 작업 의존성 관리
US7661115B2 (en) Method, apparatus and program storage device for preserving locked pages in memory when in user mode
JP2009265963A (ja) 情報処理システム及びタスクの実行制御方法
JP2012104140A (ja) 待機状態にあるプロセッサ実行リソースの共有
JP2004288162A (ja) 同期タスクを利用したオペレーティングシステムアーキテクチャ
EP1693743A2 (en) System, method and medium for using and/or providing operating system information to acquire a hybrid user/operating system lock
JP5213485B2 (ja) マルチプロセッサシステムにおけるデータ同期方法及びマルチプロセッサシステム
US9372724B2 (en) System and method for conditional task switching during ordering scope transitions
JP7042105B2 (ja) プログラム実行制御方法および車両制御装置
JP7346649B2 (ja) 同期制御システムおよび同期制御方法
JP2010026575A (ja) スケジューリング方法およびスケジューリング装置並びにマルチプロセッサシステム
JP3893136B2 (ja) 組込みコンピュータ制御プログラム、そのプログラムを記録した記録媒体、及び組込みシステム
JP2008276322A (ja) 情報処理装置、情報処理システムおよび情報処理方法
JP2007122337A (ja) 演算装置
JP2010020683A (ja) スレッド制御方法およびスレッド制御装置ならびにリアルタイムシステム
JPH07319716A (ja) 計算機システムの資源の排他制御方式
JP2019204387A (ja) プログラム実行制御方法およびプログラム変換装置
US11860785B2 (en) Method and system for efficient communication and command system for deferred operation
US11809219B2 (en) System implementing multi-threaded applications
JP4833911B2 (ja) プロセッサユニットおよび情報処理方法
Shi et al. DFlow: Efficient Dataflow-based Invocation Workflow Execution for Function-as-a-Service
WO2019188180A1 (ja) スケジューリング方法、スケジューリング装置