(57)【要約】【課題】マルチプロセッサシステムにおいて、デットロックの回避を効率よく行う。【解決手段】ＣＰＵ１１０とＣＰＵ１５０を備えたリアルタイムシステム１００において、プライオリティ・シーリング方式で共有リソースの排他制御を行う。また、共有リソースのうちの、ＣＰＵ１１０とＣＰＵ１５０により共有されうるプロセッサ間共有リソースの獲得要求をしたスレッドに対して、共有メモリ２００に記憶されたプロセッサ間共有リソース獲得情報２１０を参照して、該プロセッサ間共有リソースの優先度シーリング値が、該スレッドが動作するＣＰＵ以外のＣＰＵにおけるスレッドにより排他制御中のいずれのプロセッサ間共有リソースの優先度シーリング値よりも大きいことを条件に、獲得要求をしたスレッドに当該プロセッサ間共有リソースを獲得させる。【選択図】図１
2010026575.tif 000002
【特許請求の範囲】
【請求項１】
複数のスレッドにより共有されうる共有リソースを備えたマルチプロセッサシステムにおいて、
プライオリティ・シーリング方式で前記共有リソースの排他制御を行い、
前記共有リソースのうちの、複数のプロセッサコアにより共有されうるプロセッサ間共有リソースの獲得要求をしたスレッドに対して、該プロセッサ間共有リソースの優先度シーリング値が、該スレッドが動作するプロセッサコア以外のプロセッサコアにおけるスレッドにより排他制御中のいずれのプロセッサ間共有リソースの優先度シーリング値よりも大きいことを条件に、前記スレッドに当該プロセッサ間共有リソースを獲得させることを特徴とするスケジューリング方法。
【請求項２】
各スレッドは、前記複数のプロセッサコアのうちの、該スレッドに対して定められた１つのプロセッサコアでのみ動作するものであり、
自身が動作するプロセッサコア以外のプロセッサコアにおけるスレッドにより排他制御中のプロセッサ間共有リソースの獲得要求をしていないスレッドに対して、該スレッドと同一のプロセッサコアで動作するスレッド同士間でスケジューリングを行うことを特徴とする請求項１に記載のスケジューリング方法。
【請求項３】
排他制御中のプロセッサ間共有リソースのシーリング値と、該プロセッサ間共有リソースを獲得したスレッドが動作するプロセッサコアの識別子とを対応付けてなるプロセッサ間共有リソース獲得情報を記憶し、
いずれかのプロセッサ間共有リソースの獲得要求をしたスレッドに対して、前記プロセッサ間共有リソース取得情報に基づいて、該プロセッサ間共有リソースを獲得させるかを決定することを特徴とする請求項１または２に記載のスケジューリング方法。
【請求項４】
複数のスレッドにより共有されうる共有リソースを備えたマルチプロセッサシステムにおけるスケジューリング装置であって、
プライオリティ・シーリング方式で前記共有リソースの排他制御を行い、
前記共有リソースのうちの、複数のプロセッサコアにより共有されうるプロセッサ間共有リソースの獲得要求をしたスレッドに対して、該プロセッサ間共有リソースの優先度シーリング値が、該スレッドが動作するプロセッサコア以外のプロセッサコアにおけるスレッドにより排他制御中のいずれのプロセッサ間共有リソースの優先度シーリング値よりも大きいことを条件に、前記スレッドに当該プロセッサ間共有リソースを獲得させることを特徴とするスケジューリング装置。
【請求項５】
各スレッドは、前記複数のプロセッサコアのうちの、該スレッドに対して定められた１つのプロセッサコアでのみ動作するものであり、
自身が動作するプロセッサコア以外のプロセッサコアにおけるスレッドにより排他制御中のプロセッサ間共有リソースの獲得要求をしていないスレッドに対して、該スレッドと同一のプロセッサコアで動作するスレッド同士間でスケジューリングを行うことを特徴とする請求項４に記載のスケジューリング装置。
【請求項６】
プロセッサコア毎に設けられており、自身が設けられたプロセッサコアで動作するスレッドのスケジューリングを行うことを特徴とする請求項５に記載のスケジューリング装置。
【請求項７】
排他制御中のプロセッサ間共有リソースのシーリング値と、該プロセッサ間共有リソースを獲得したスレッドが動作するプロセッサコアの識別子とを対応付けてなるプロセッサ間共有リソース獲得情報を記憶した記憶装置に記憶された前記プロセッサ間共有リソース取得情報に基づいて、いずれかのプロセッサ間共有リソースの獲得要求をしたスレッドに対して該プロセッサ間共有リソースを獲得させるかを決定することを特徴とする請求項４から６のいずれか１項に記載のスケジューリング装置。
【請求項８】
複数のプロセッサコアと、
該複数のスレッドにより共有されうる共有リソースと、
プライオリティ・シーリング方式で前記共有リソースの排他制御を行い、
前記共有リソースのうちの、複数のプロセッサコアにより共有されうるプロセッサ間共有リソースの獲得要求をしたスレッドに対して、該プロセッサ間共有リソースの優先度シーリング値が、該スレッドが動作するプロセッサコア以外のプロセッサコアにおけるスレッドにより排他制御中のいずれのプロセッサ間共有リソースの優先度シーリング値よりも大きいことを条件に、前記スレッドに当該プロセッサ間共有リソースを獲得させるスケジューリング装置とを備えることを特徴とするマルチプロセッサシステム。
【請求項９】
各スレッドは、前記複数のプロセッサコアのうちの、該スレッドに対して定められた１つのプロセッサコアでのみ動作するものであり、
前記スケジューリング装置は、自身が動作するプロセッサコア以外のプロセッサコアにおけるスレッドにより排他制御中のプロセッサ間共有リソースの獲得要求をしていないスレッドに対して、該スレッドと同一のプロセッサコアで動作するスレッド同士間でスケジューリングを行うことを特徴とする請求項８に記載のマルチプロセッサシステム。
【請求項１０】
前記スケジューリング装置は、プロセッサコア毎に設けられており、自身が設けられたプロセッサコアで動作するスレッドのスケジューリングを行うことを特徴とする請求項９に記載のマルチプロセッサシステム。
【請求項１１】
排他制御中のプロセッサ間共有リソースのシーリング値と、該プロセッサ間共有リソースを獲得したスレッドが動作するプロセッサコアの識別子とを対応付けてなるプロセッサ間共有リソース獲得情報を記憶した記憶装置をさらに備え、
前記スケジューリング装置は、いずれかのプロセッサ間共有リソースの獲得要求をしたスレッドに対して、記憶装置に記憶された前記プロセッサ間共有リソース取得情報に基づいて、当該プロセッサ間共有リソースを獲得させるかを決定することを特徴とする請求項８から１０のいずれか１項に記載のマルチプロセッサシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、スケジューリング、特にマルチプロセッサシステムにおけるスケジューリング技術に関する。
【背景技術】
【０００２】
リアルタイムシステムで実行される逐次処理の単位は「スレッド」または「タスク」などの呼称があり、本明細書においては、「スレッド」と呼ぶ。多くのリアルタイムＯＳ（オペレーティングシステム）は、リアルタイム性を確保するためのスケジューリングポリシとしてプリエンプティブな優先度ベースのスケジューリングポリシをサポートする。このスケジューリングポリシは、下記のように定められている。
１．その時点で最も高い優先度のスレッドが実行される。
２．その時点で最も高い優先度のスレッドの処理は中断されてはいけない。
３．同一優先度の場合は先着順とする。「先着順」は、スレッドが実行可能状態に遷移した順番を意味する。
４．優先度の高いスレッドが実行可能状態になった場合、該スレッドより優先度が低いスレッドの処理の途中であっても、スレッドの切替えを行って高い優先度のスレッドを実行させる。
【０００３】
上述した「実行可能状態」は、プリエンプトされた他のスレッドが無いとき、またはプリエンプトされた他のスレッドがＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）の実行権を解放すれば実行できる状態を意味する。
【０００４】
リアルタイムシステムにおいて、スレッドにより共有可能なリソース（以下共有リソースという）の衝突問題を解決するために、共有リソースの排他制御（以下単に排他制御という）が行われる。図５は、排他制御処理の模式図である。
【０００５】
図５に示すように、あるスレッドは、共有リソースの操作に当たって、まず、ＯＳに対してリソース獲得要求（以下単に獲得要求ともいう）を発行する。そして、リソース獲得要求に応じてＯＳから共有リソースの操作が許可されれば、共有リソースを操作し、操作完了後、リソース解放要求（以下単に解放要求ともいう）をＯＳに発行して該共有リソースを解放する。スレッドが共有リソースを獲得してから、共有リソースを解放するまでの期間は、「ブロック期間」といい、ブロック期間における共有リソースの状態は、「排他制御中」という。
【０００６】
ＯＳは、他のスレッドにより排他制御中ではないことを条件に、当該共有リソースの獲得要求を発行したスレッドにリソース操作を許可する。これにより、複数のスレッドが同時に共有リソースを操作することを回避することができる。
【０００７】
ここで、シングルプロセッサコアのリアルタイムシステムにおける排他処理機構について説明する。なお、以下において、スレッドの表記に「Ｈ」、「Ｍ」、「Ｌ」を付けることにより当該スレッドの優先度が「高」、「中」、「低」であることを示す。
【０００８】
共有リソースの衝突問題を簡単に解決できる排他処理機構として、多くのリアルタイムＯＳにはセマフォが装備されている。セマフォには、非負整数をとるカウンティングセマフォ、「０」と「１」をとるバイナリ・セマフォがあり、以下バイナリ・セマフォを例に説明する。なお、共有リソースを操作するような、排他処理が必要な区間をクリティカルリージョンという。
【０００９】
セマフォを使用する上では、下記の約束事が定められている。
１．スレッドがクリティカルリージョンに入るときにセマフォをとる。
２．セマフォがない間は、他のスレッドはクリティカルリージョンに入れない。
３．セマフォが他のスレッドにとられているときはセマフォが戻るまで待つ。
４．クリティカルリージョンから出るときにセマフォを戻す。
５．スレッドをとる間は不可分に（スレッドが切り替わることがなく）実行される。
６．セマフォを戻す間も不可分に実行される。
７．セマフォを戻すときに待っているスレッドがあればそのスレッドの待ち状態を解除すする。
【００１０】
図６は、セマフォを用いたリアルタイムシステムにおけるスレッドの実行模式を示す。図中において、優先度が「Ｌ：低」であるスレッドＬ１は、獲得要求をＯＳに発行してセマフォを取得してリソース操作をする。その後、スレッドＬ１が解放要求をＯＳに発行してセマフォを戻すまでは、ブロック期間であり、この期間において他のスレッドは該共有リソースのセマフォをとることができない。時刻ｔ０において、優先度が「Ｍ：中」であるスレッドＭ１が実行可能状態に遷移したため、スレッドＬ１の実行は中断され、スレッドＭ１は実行される。時刻ｔ１において、スレッドＭ１が獲得要求を発行するものの、セマフォがスレッドＬ１により排他制御中であるため、スレッドＭ１は中断され、スレッドＬ１は再開される。のちに、スレッドＬ１がセマフォを解放すると、スレッドＭ１は、やっとセマフォを取得する。これに伴って、スレッドＭ１は実行され、スレッドＬ１は中断される。
【００１１】
以下、スレッドがセマフォを待つことを「排他待ち」といい、図６に示す時刻ｔ０〜時刻ｔ１のような、排他待ちをしている区間を「排他待ち期間」という。
【００１２】
セマフォを利用した場合に、デッドロックの問題が生じる、図７を参照して説明する。
図７の例に示すように、まず、スレッドＬ１は共有リソースであるリソースＡのセマフォを取得してリソースＡを操作する。時刻ｔ０において、スレッドＭ１が実行可能状態に遷移したため、スレッドＭ１は実行され、スレッドＬ１は中断される。そして、時刻ｔ１において、スレッドＭ１は別の共有リソースであるリソースＢのセマフォを取得して、リソースＢを操作する。処理が進み、時刻ｔ２において、スレッドＭ１は、リソースＡを操作するためにリソースＡのセマフォを要求するが、リソースＡのセマフォはスレッドＬ１により所有されているため、スレッドＭ１は中断され、排他待ち期間に入る。そこで、スレッドＬ１は、実行が再開される。
【００１３】
処理がさらに進み、スレッドＬ１はリソースＢを操作するためにリソースＢのセマフォを要求するが、リソースＢのセマフォはスレッドＭ１により所有されているため、スレッドＬ１も中断され、排他待ち期間に入る。
こうなると、スレッドＭ１とスレッドＬ１のいずれも実行することができず、いわゆるデットロックが発生する。
【００１４】
セマフォを利用する際に生じるデットロックの問題を解決するために、セマフォを取得したスレッドの優先度を一時的に高くするプライオリティ・シーリング方式を用いた手法がある。
【００１５】
プライオリティ・シーリング方式は、プリエンプティブな優先度ベースのスケジューリングポリシの前提下に、スレッドがリソースのセマフォを取得すると、直ちにこのスレッドの優先度を該リソースの優先度シーリング値（以下単にシーリング値という）に一時的に上げる方式である。図８を参照して説明する。なお、シーリング値は、当該リソースを獲得する可能性のあるすべてのスレッドの優先度以上の優先度であり、予めリソースに対して設定されている。また、スレッドは、自身の優先度（優先度が一時的に挙げられているときには、そのときの優先度）より低いシーリング値を有するリソースを取得できないように規定されている。
【００１６】
図８の例において、リソースＡのシーリング値とリソースＢのシーリング値は、「高」である。図示のように、時刻ｔ０において、動作中のスレッドＬ１はリソースＡのセマフォを取得してリソースＡを操作する。これに伴って、スレッドＬ１の優先度は、リソースＡのシーリング値「高」に変更される。
【００１７】
時刻ｔ１において、スレッドＭ１が実行可能状態に遷移したが、優先度が「高」に変更されたスレッドＬ１が動作中であるため、スレッドＭ１は動作できない。スレッドＬ１は、時刻ｔ２においてリソースＢのセマフォを取得し、時刻ｔ３においてリソースＢのセマフォを解放する。
【００１８】
時刻ｔ４において、スレッドＬ１は、リソースＡのセマフォを解放する。同時に、その優先度は元の「低」に戻る。これにより、スレッドＭ１の優先度がスレッドＬ１の優先度より高くなるため、スレッドＭ１は実行され、スレッドＬ１の実行は中断される。
【００１９】
その後、スレッドＭ１はリソースＡのセマフォを取得して操作するなどの処理を行う。スレッドＭ１が実行されている間、スレッドＬ１は実行されることがない。
【００２０】
図８に示す例では、リソースＡとリソースＢのシーリング値が同一の「高」であるが、リソースＡのシーリング値が「高」であり、リソースＢのシーリングが「中」である場合においては、スレッドＬ１がリソースＡのセマフォを取得して優先度が「高」に変更されたとき、リソースＢを取得することが無い。
【００２１】
このように、プライオリティ・シーリング方式を用いれば、シングルコアプロセッサのリアルタイムシステムにおいて、デットロックを回避することができる。また、スレッドが共有リソースを排他制御している時間を短縮できるため、システム全体の効率が向上する。
【００２２】
ところで、マルチコアプロセッサのリアルタイムシステムでは、複数のプロセッサコアにより共有可能な共有リソースに対して、プライオリティ・シーリング方式を適用しても、デットロックの可能性がある。図９を参照して説明する。
【００２３】
図９において、縦軸が優先度を示す。プロセッサコアとしてプロセッサコアＡとプロセッサコアＢの２つがあり、共有リソースとしてリソースＡとリソースＢの２つがあるとする。また、リソースＡとリソースＢのいずれも、シーリング値は「高」である。
【００２４】
図９の例では、まず、プロセッサコアＡで実行中のスレッドＬ１は、リソースＡを操作するためにリソースＡのセマフォを取得する。これにより、スレッドＬ１の優先度はリソースＡのシーリング値「高」に一時的に変更される。
【００２５】
優先度「高」で動作するスレッドＬ１によるリソースＡの操作中に、スレッドＭ１が実行可能状態に遷移する。このとき、プロセッサコアＢが空いているので、スレッドＭ１はプロセッサコアＢで実行される。そして、スレッドＭ１は、リソースＢを操作するためにリソースＢのセマフォを取得する。これにより、スレッドＭ１の優先度はリソースＢのシーリング値の「高」に一時的に変更される。
【００２６】
処理が続き、リソースＡの操作中のスレッドＬ１はさらにリソースＢのセマフォ獲得要求を発行する。このとき、リソースＢのセマフォがスレッドＭ１により所有されているため、スレッドＬ１は、実行が中断され、排他待ちする。
【００２７】
その後、リソースＢの操作中のスレッドＭ１はさらにリソースＡのセマフォ獲得要求を発行する。リソースＡのセマフォがスレッドＬ１により所有されているので、スレッドＭ１も実行が中断され、排他待ちする。
こうなると、スレッドＨ１とスレッドＭ１のいずれも実行することができず、デットロックが発生する。
【００２８】
このように、マルチコアプロセッサによるリアルタイムシステムにおいて、優先度が異なる複数のスレッドが同時に動作可能であるため、優先度の高いスレッドの実行中に優先度の低いスレッドが実行されないことを利用したプライオリティ・シーリング方式を適用してもデッドロックが生じ得る。
【００２９】
マルチコアプロセッサシステムにおけるデットロックの問題を解消するために様々な試みがなされている。たとえば、特許文献１に開示された手法は、共有リソース毎に現在排他制御中のスレッド名及び排他待ちのスレッド名を格納した排他制御管理テーブルと、スレッド毎に該スレッドが現在排他制御中の共有リソース名を格納した排他制御共有資源情報テーブルを設ける。
【００３０】
そして、あるスレッドが共有リソースの獲得要求を行う際に、上記排他制御管理テーブルと排他制御共有資源情報テーブルを参照して、該獲得要求がデットロックを生じさせるかを判断し、デットロックが発生すると判断した場合に、その時点では当該共有リソースの獲得要求を行わないようにする。
【００３１】
具体的には、あるスレッドから共有リソースの獲得を要求するシステムコールを発行した際に、該スレッドの排他制御共有資源情報テーブルから該スレッドにより排他制御中の共有リソース名を読み取ると共に、排他制御管理テーブルから、該スレッドが獲得要求している共有リソースを現在排他制御中のスレッド名を読み取る。さらに、排他制御共有資源情報テーブルから読み取った各共有リソースについて、排他制御管理テーブルから、これらの共有リソースの排他待ち中のスレッド名を読み取る。そして、上記読み取った両者のスレッド名を比較し、一致するスレッド名がある場合には、このまま獲得要求を行うとデットロックが発生すると判断し、獲得要求をしたスレッドに対して、現在排他制御中の共有リソースを解放してから、次に使用する共有リソースの獲得要求を行うように制御する。
【００３２】
すなわち、スレッドからの共有リソースの獲得要求に対して、該スレッドにより排他制御中の共有リソースを排他待ちしているいずれのスレッドも、上記スレッドが獲得しようとしている共有リソースの排他制御中ではない場合においてのみ、上記獲得要求を発行できるように制御する。こうすることにより、マルチコアプロセッサシステムにおいてもデットロックを回避することができる。
【特許文献１】特開平７−１０５１５２号公報
【発明の開示】
【発明が解決しようとする課題】
【００３３】
特許文献１の手法は、実質的には、セマフォのみを用いてマルチコアプロセッサシステムにおけるデットロック問題の解消を図っている。共有リソースの獲得要求を発行させるか否かの判断を行う際に、該スレッドにより排他制御中の共有リソース名の取得、これらの共有リソースの排他待ち中のスレッド名の取得、獲得要求先の共有リソースの排他制御中のスレッド名の取得、取得したスレッド名の比較などの処理を必要とする。これでは、共有リソースの排他制御処理が煩雑になり、時間がかかる。
【課題を解決するための手段】
【００３４】
本発明の１つの態様は、スケジューリング方法である。この方法は、複数のスレッドにより共有されうる共有リソースを備えたマルチプロセッサシステムにおいて、プライオリティ・シーリング方式でこれらの共有リソースの排他制御を行うと共に、上記共有リソースのうちの、複数のプロセッサコアにより共有されうるプロセッサ間共有リソースの獲得要求をしたスレッドに対して、該プロセッサ間共有リソースの優先度シーリング値が、該スレッドが動作するプロセッサコア以外のプロセッサコアにおけるスレッドにより排他制御中のいずれのプロセッサ間共有リソースの優先度シーリング値よりも大きいことを条件に、上記獲得要求を発行したスレッドに当該プロセッサ間共有リソースを獲得させる。
【００３５】
なお、上記態様の方法を実行する装置、該方法を適用したマルチプロセッサシステム、コンピュータに上記方法を実行せしめるプログラム、該プログラムを含むＯＳなどに置き換えて表現したものも、本発明の態様として有効である。
【発明の効果】
【００３６】
本発明にかかるスケジューリング技術によれば、マルチプロセッサシステムにおいて、デットロックの回避を効率よく行う。
【発明を実施するための最良の形態】
【００３７】
以下、図面を参照して本発明の実施の形態について説明する。なお、以下の説明に用いられる図面に、様々な処理を行う機能ブロックとして記載される各要素は、ハードウェア的には、プロセッサ、メモリ、その他の回路で構成することができ、ソフトウェア的には、メモリに記録された、またはロードされたプログラムなどによって実現される。したがって、これらの機能ブロックがハードウェアのみ、ソフトウェアのみ、またはそれらの組合せによっていろいろな形で実現できることは当業者には理解されるところであり、いずれかに限定されるものではない。また、分かりやすいように、これらの図面において、本発明の技術を説明するために必要なもののみを示す。
【００３８】
本発明の具体的な実施の形態を説明する前に、まず本発明の原理を説明する。
前述したように、シングルプロセッサシステムにおいて、デットロックを回避する手法として、プリオリティ・シーリング方式が有効である。本願発明者は、複数のプロセッサコアにより共有されうる共有リソースを備えたマルチプロセッサシステムにおいて、これらの共有リソースの排他制御について鋭意研究模索した結果、マルチプロセッサシステムにおける排他制御にプライオリティ・シーリング方式を適用し、共有リソースの排他制御の効率向上を図る手法を確立した。
【００３９】
分かりやすいように、マルチプロセッサシステムにおけるリソースを３種類に分類する。１つ目は、スレッドにより共有されることの無いリソースである。このようなリソースに対しては、排他制御を行う必要が無いため、以下の説明においては、このようなリソースの取扱いについて省略する。
【００４０】
２つ目は、同一のプロセッサコア内で動作する複数のスレッドにのみ共有されうるリソースである。このようなリソースを、以下「プロセッサ内共有リソース」という。
【００４１】
３つ目は、複数のプロセッサコアにより共有されうるリソースである。このようなリソースは、異なるプロセッサコアでそれぞれ動作する複数のスレッドにより操作される可能性があり、以下「プロセッサ間共有リソース」という。
【００４２】
以下の説明において、単に「共有リソース」をいうときは、プロセッサ間共有リソースとプロセッサ内共有リソースのいずれも含むことを意味する。
【００４３】
前述したように、マルチプロセッサシステムにおいて、共有リソースの排他制御にプライオリティ・シーリングを適用しても、デットロックが生じ得る。図９に示すように、プロセッサコアＡで動作中のスレッドＬ１がプロセッサ間共有リソースＡ（シーリング値：Ｈ）の排他制御中に、プロセッサＢで動作中のスレッドＭ１がプロセッサ間共有リソースＢ（シーリング値：Ｈ）を獲得した場合、その後、スレッドＬ１とスレッドＭ１がそれぞれリソースＢとリソースＡを獲得しようとするときに、デットロックが発生する。
【００４４】
すなわち、プライオリティ・シーリング方式を排他制御に適用しただけでは、あるスレッドが、自身による１つのプロセッサ間共有リソースの排他制御中に、該プロセッサ間共有リソースと同一のシーリング値を有し、かつ、他のプロセッサコアにおけるスレッドにより排他制御中の他のプロセッサ間共有リソースを獲得可能であれば、デットロックが生じる。
【００４５】
本願発明者が確立した手法は、このことに着目してなされたものであり、プライオリティ・シーリング方式を共有リソースの排他制御に適用すると共に、上記可能性を無くすべく、あるプロセッサコアで動作するスレッドがプロセッサ間共有リソースの獲得要求をした際に、該プロセッサ間共有リソースのシーリング値が、他のプロセッサコアにおけるスレッドにより排他制御中のいずれのプロセッサ間共有リソースのシーリング値よりも大きい場合にのみ、当該プロセッサ間共有リソースを獲得させる。
【００４６】
こうすることにより、例えば、図９の例では、スレッドＬ１がリソースＡを解放するまで、スレッドＭ１がリソースＢを獲得できないので、デットロックは発生しない。
【００４７】
この手法によれば、シングルコアプロセッサの場合と比べ、スレッドが獲得要求をしたプロセッサ間共有リソースのシーリング値と、他のプロセッサコアにおけるスレッドにより排他制御中のプロセッサ間共有リソースのシーリング値とを比較する作業のみが多くなるので、処理が簡単である。
【００４８】
本発明にかかる技術は、機能分散型のマルチプロセッサシステムにおいて特に有用である。機能分散型のマルチプロセッサシステムでは、各スレッドは、該スレッドに対して定められた１つのプロセッサコア内でのみ動作する。本発明にかかる技術を適用することによりプロセッサ間共有リソースの獲得に起因するデットロックを防ぐことができるので、スレッドがプロセッサ間共有リソースの獲得要求をしていない限り、夫々のプロセッサコアをシングルコアプロセッサとして看做すことができ、プロセッサコア毎に、シングルコアプロセッサのときと同様のスケジューリングを行うができ、システムの構築が容易である。
【００４９】
以上の原理を踏まえて、本発明の具体的な実施例を説明する。
図１は、本発明の実施の形態にかかるリアルタイムシステム１００を示す。リアルタイムシステム１００は、複数のＣＰＵ（図示の例では２つ：ＣＰＵ１１０、ＣＰＵ１５０）と、各ＣＰＵがバス１９０を介してアクセス可能な共有メモリ２００を備える。
【００５０】
ＣＰＵ１１０は、プロセッサコア１１２と、スケジューリング部１１４と、プロセッサコア１１２で動作する複数のスレッド（図示の例では４つ：スレッド１２２〜１２８）と、複数のリソース（図示の例では４つ：リソース１３２、１３４、１４２、１４４）を有する。
【００５１】
ＣＰＵ１５０は、プロセッサコア１５２と、スケジューリング部１５４と、プロセッサコア１５２で動作する複数のスレッド（図示の例では４つ：スレッド１６２〜１６８）と、複数のリソース（図示の例では４つ：リソース１７２、１７４、１８２、１８４）を有する。
【００５２】
リアルタイムシステム１００は、機能分散型のマルチプロセッサシステムであり、スレッド１２２〜１２８はプロセッサコア１１２でのみ動作し、スレッド１６２〜１６８はプロセッサコア１５２でのみ動作する。また、各スレッドは、優先度が設定されている。
【００５３】
スケジューリング部１１４は、プロセッサコア１１２で動作する各スレッドのスケジューリングを行い、スケジューリング部１５４は、プロセッサコア１５２で動作する各スレッドのスケジューリングを行う。
【００５４】
ＣＰＵ１１０内の各リソースのうち、リソース１３２とリソース１３４は、プロセッサコア１１２で動作するスレッドにのみ共有されるプロセッサ内共有リソースであり、リソース１４２とリソース１４４は、プロセッサコア１１２で動作するスレッドに限らず、プロセッサコア１５２で動作するスレッドからも操作されうるプロセッサ間共有リソースである。
【００５５】
ＣＰＵ１５０内の各リソースのうち、リソース１７２とリソース１７４は、プロセッサコア１５２で動作するスレッドにのみ共有されるプロセッサ内共有リソースであり、リソース１８２とリソース１８４は、プロセッサコア１５２で動作するスレッドに限らず、プロセッサコア１１２で動作するスレッドからも操作されうるプロセッサ間共有リソースである。
【００５６】
なお、スレッドにより共有されることの無いリソースについては、排他制御の必要が無いため、その説明および図示を省略する。
【００５７】
共有メモリ２００は、プロセッサ間共有リソース獲得情報２１０を記憶している。図２に示すように、プロセッサ間共有リソース獲得情報２１０は、排他制御中のプロセッサ間共有リソースのシーリング値と、該プロセッサ間共有リソースを獲得したスレッドが動作するＣＰＵの識別子とを対応付けてなるものである。
【００５８】
なお、共有メモリ２００は、ＣＰＵ１１０とＣＰＵ１５０により共有されるプロセッサ間共有リソースであり、最も高いシーリング値が設定されている。
【００５９】
スケジューリング部１１４とスケジューリング部１５４は、スケジューリングする対象スレッドが異なる点を除き、同様の構成と機能を有するため、ここでスケジューリング部１１４を代表にして、スケジューリング部１１４とスケジューリング部１５４を説明する。
【００６０】
スケジューリング１１４は、スレッド１２２〜１２８に対して、プリエンプティブな優先度ベースのスケジューリングポリシを用いてスケジューリングを行う。また、共有リソースの排他制御についてはプライオリティ・シーリング方式を用いる。具体的には、プロセッサコア１１２で動作するいずれかのスレッドが共有リソースを獲得した際に、該スレッドの優先度を、獲得した共有リソースのシーリング値に一時的に上げる。また、実行中のスレッドが、そのときの該スレッドの優先度より低いシーリング値を有する共有リソースを獲得できないように制御する。
【００６１】
また、スケジューリング部１１４は、プロセッサコア１１２で動作するいずれかのスレッドがプロセッサ間共有リソースを獲得した際に、プロセッサコア１１２で動作する各スレッド（上記プロセッサ間共有リソースを獲得したスレッドを含む）のうちに、該プロセッサ間共有リソースと同一のシーリング値を有する別のプロセッサ間共有リソースを獲得したスレッドが無い場合に、該プロセッサ間共有リソースのシーリング値と、ＣＰＵ１１０の識別子とを対応付けて共有メモリ２００に書き込む。また、プロセッサ間共有リソースを獲得したスレッドが該共有リソースを解放した際に、プロセッサコア１１２で動作する各スレッドのうちに、該プロセッサ間共有リソースと同一のシーリング値を有するプロセッサ間共有リソースを獲得したスレッドが無い場合に、該共有リソースに対応する項目を削除する。
【００６２】
後述の説明で分かるが、ＣＰＵ１１０内のスレッドがプロセッサ間共有リソースの獲得要求を発行した際に、スケジューリング部１１４は、該プロセッサ間共有リソースを獲得させるかの決定に必要な情報は、ＣＰＵ１５０におけるスレッドにより排他制御中のプロセッサ間共有リソースのうちに、獲得要求された上記プロセッサ間共有リソースのシーリング値以上のシーリング値のプロセッサ間共有リソースの有無を示す情報である。そのため、１つのＣＰＵについて、該ＣＰＵにおけるスレッドにより排他制御中であり、かつシーリング値が同一である複数のプロセッサ間共有リソースがある場合にも、プロセッサ間共有リソース獲得情報２１０には、上記シーリング値とＣＰＵとを対応付けた内容があればよく、これらの全てのプロセッサ間共有リソースについてシーリング値とＣＰＵとを対応付けた内容を書き込む必要が無い。こうすることにより、プロセッサ間共有リソース獲得情報２１０が共有メモリ２００に占める容量を節約できる。
【００６３】
スケジューリング部１１４は、プロセッサコア１１２で動作するいずれかのスレッドがプロセッサ間共有リソースの獲得要求した際に、共有メモリ２００に記憶されたプロセッサ間共有リソース獲得情報２１０を参照して、要求されたプロセッサ間共有リソースを該スレッドに獲得させるかを決定する。具体的には、獲得要求されたプロセッサ間共有リソースのシーリング値が、プロセッサ間共有リソース獲得情報２１０に含まれた、ＣＰＵ１５０に対応するいずれのシーリング値もより大きい場合においてのみ、獲得要求されたプロセッサ間共有リソースを当該スレッドに獲得させる。
【００６４】
図３に示すフローチャートを参照して、スケジューリング部１１４の動作をより詳細に説明する。
プロセッサコア１１２で実行中のスレッドが共有リソースの獲得要求をした際に（Ｓ１００）、スケジューリング部１１４は、該共有リソースがプロセッサ間共有リソースであるかを確認する（Ｓ１１０）。プロセッサ間共有リソースではないときには、ＣＰＵ１１０内でリソース獲得処理を行う（Ｓ１１０：Ｎｏ、Ｓ１６０）。ＣＰＵ１１０内でのリソース獲得処理は、ＣＰＵ１１０をシングルコアプロセッサと看做した場合と同じ処理であるため、ここで詳細な説明を省略する。
【００６５】
一方、獲得要求されたリソースがプロセッサ間共有リソースであるときに、スケジューリング部１１４は、共有メモリ２００に記憶されたプロセッサ間共有リソース獲得情報２１０を参照して、プロセッサコア１１２で動作する各スレッドのうちに、該プロセッサ間共有リソースと同一のシーリング値を有する別のプロセッサ間共有リソースの排他制御中のスレッドの有無を確認する（Ｓ１１０：Ｙｅｓ、Ｓ１２０、Ｓ１３０）。ステップＳ１３０での確認は、具体的には、プロセッサ間共有リソース獲得情報２１０の中に、獲得要求されたプロセッサ間共有リソースと同一のシーリング値と、ＣＰＵ１１０とを対応付けられて記憶された内容の有無の確認である。
【００６６】
ステップＳ１３０での確認の結果が「有」である場合は、他のＣＰＵ（ここでＣＰＵ１５０）におけるいずれのスレッドが獲得したプロセッサ間共有リソースのシーリング値も、獲得要求されたプロセッサ間共有リソースのシーリング値以下であることが分かるため、スケジューリング部１１４は、獲得要求をしたスレッドに当該プロセッサ間共有リソースを獲得させるＣＰＵ１１０内でのリソース獲得処理を行う（Ｓ１３０：Ｙｅｓ、Ｓ１６０）。
【００６７】
一方、ステップＳ１３０での確認の結果が「無」である場合は、スケジューリング部１１４は、さらに、獲得要求されたプロセッサ間共有リソースのシーリング値が、他のＣＰＵで排他制御中のいずれのプロセッサ間共有リソースのシーリング値よりも大きいかを確認する（Ｓ１３０：Ｎｏ、Ｓ１４０）。
【００６８】
獲得要求されたプロセッサ間共有リソースのシーリング値以上のシーリング値を有するプロセッサ間共有リソースが、他のＣＰＵで排他制御中であれば（Ｓ１４０：Ｙｅｓ）、スケジューリング部１１４は、他のＣＰＵで上記プロセッサ間共有リソースが解放されるまで、獲得要求されたプロセッサ間共有リソースを当該スレッドに獲得させない（Ｓ１４０：Ｙｅｓ、Ｓ１４０）。なお、スケジューリング部１１４は、この間において、プロセッサコア１１２を割込みによるエンプトプリエンプト可能な状態にする。こうすることにより、上記スレッドがプロセッサ間共有リソースを獲得できず、待っているときに、ＣＰＵ１１０において、他のスレッドが実行可能状態に遷移したときに、該スレッドをプロセッサコア１１２で実行させることができる。
【００６９】
一方、獲得要求されたプロセッサ間共有リソースのシーリング値が、他のＣＰＵで排他制御中のいずれのプロセッサ間共有リソースのシーリング値よりも大きいときには、スケジューリング部１１４は、獲得要求したスレッドに当該プロセッサ間共有リソースを獲得させるＣＰＵ１１０内でのリソース獲得処理を行うとともに、該共有リソースのシーリング値と、ＣＰＵ１１０の識別子とを対応付けて共有メモリ２００に書き込んでプロセッサ間共有リソース獲得情報を更新する（Ｓ１４０：Ｎｏ、Ｓ１５０、Ｓ１６０）。
【００７０】
図４に示す動作例を用いて、リアルタイムシステム１００におけるスケジューリング手法の効用を説明する。
【００７１】
＜時刻ｔ０＞
ＣＰＵ１１０において、優先度「Ｌ」のスレッド１２２が実行されており、ＣＰＵ１５０には、実行されているスレッドが無い。
【００７２】
＜時刻ｔ１＞
スレッド１２２がプロセッサ間共有リソース１４２の獲得要求を発行して、プロセッサ間共有リソース１４２を獲得する。それに伴って、スレッド１２２の優先度が、プロセッサ間共有リソース１４２のシーリング値「Ｈ」に変更される。また、プロセッサ間共有リソース獲得情報２１０には、シーリング値「Ｈ」とＣＰＵ１１０は、対応付けて書き込まれる。
【００７３】
＜時刻ｔ２＞
ＣＰＵ１５０において、スレッド１６２が実行可能状態に遷移したため、実行される。
【００７４】
＜時刻ｔ３＞
ＣＰＵ１５０において、スレッド１６２がシーリング値「Ｈ」であるプロセッサ間共有リソース１４４の獲得要求をする。しかし、プロセッサ間共有リソース獲得情報２１０には、ＣＰＵ１１０と対応付けて記憶されたシーリング値「Ｈ」があるため、スレッド１６２は、プロセッサ間共有リソース１４４を取得できずに待ち状態になる。
【００７５】
＜時刻ｔ４＞
ＣＰＵ１１０において、スレッド１２２はプロセッサ間共有リソース１４４の獲得要求を発行してプロセッサ間共有リソース１４４を獲得する。
【００７６】
＜時刻ｔ５＞
ＣＰＵ１１０において、スレッド１２２はプロセッサ間共有リソース１４４を解放する。
ＣＰＵ１５０において、スレッド１６２は待ち状態を続ける。
【００７７】
＜時刻ｔ６＞
ＣＰＵ１１０において、スレッド１２２はプロセッサ間共有リソース１４２を解放して、優先度が元の「Ｌ」に戻る。これに伴って、プロセッサ間共有リソース獲得情報２１０には、シーリング値「Ｈ」とＣＰＵ１１０とを対応付けた内容が削除される。
【００７８】
そのため、ＣＰＵ１５０において、スレッド１６２は、プロセッサ間共有リソース１４４を取得して処理を再開する。これに伴って、スレッド１６２の優先度は「Ｈ」に変更される。
【００７９】
その後、ＣＰＵ１１０において、スレッド１２２は、優先度「Ｌ」で動作する。
ＣＰＵ１５０において、スレッド１６２は、プロセッサ間共有リソース１４２の取得（時刻ｔ７）、プロセッサ間共有リソース１４２の解放（時刻ｔ８）、プロセッサ間共有リソース１４４の解放（時刻ｔ９）を経て、優先度が「Ｍ」に戻る。
【００８０】
このように、本実施の形態のリアルタイムシステム１００において、時刻ｔ２〜ｔ３間、時刻ｔ６以降のように、高い優先度のスレッドの実行中にも、他のプロセッサコアで低い優先度のスレッドが実行できる。また、プロセッサ間共有リソース共有リソースが存在する場合にもデットロックの発生を回避することができる。
【００８１】
以上、実施の形態をもとに本発明を説明した。実施の形態は例示であり、本発明の主旨から逸脱しない限り、上述した各実施の形態に対して、さまざまな変更、増減、組合せを行ってもよい。これらの変更、増減、組合せが行われた変形例も本発明の範囲にあることは当業者に理解されるところである。
【００８２】
また、リアルタイムシステム１００は、分散型のマルチプロセッサシステムに本発明の技術を適用した例であるが、本発明のスケジューリング技術は、分散型ではないマルチプロセッサシステムにも適用することができる。
【００８３】
また、リアルタイムシステム１００において、プロセッサ間共有リソース獲得情報２１０を共有メモリ２００に記憶させている。どのＣＰＵからもプロセッサ間共有リソース獲得情報２１０にアクセスできれば、いかなる態様でプロセッサ間共有リソース獲得情報２１０を保持してもよい。例えば、プロセッサ間共有リソース獲得情報２１０をライブラリとして更新しながら保持することもできる。
【図面の簡単な説明】
【００８４】
【図１】本発明の実施の形態にかかるリアルタイムシステムを示す図である。
【図２】図１に示すリアルタイムシステムにおける共有メモリに記憶されたプロセッサ間共有リソース獲得情報の例を示す図である。
【図３】図１に示すリアルタイムシステムにおけるスケジューリング部が、共有リソースに対して獲得要求がなされたときの処理を示すフローチャートである。
【図４】図１に示すリアルタイムシステムにおける動作例を示す図である。
【図５】スレッドによる共有リソースの操作時に行う排他制御の模式図である。
【図６】バイナリ・セマフォ方式を説明するための図である。
【図７】バイナリ・セマフォ方式で生じるデッドロック問題を説明するための図である。
【図８】プライオリティ・シーリング方式を説明するための図である。
【図９】マルチプロセッサシステムの排他処理機構にプライオリティ・シーリング方式を適用した際に生じるデッドロックを説明するための図である。
【符号の説明】
【００８５】
１００  リアルタイムシステム
１１０  ＣＰＵ
１１２  プロセッサコア
１１４  スケジューリング部
１２２〜１２８  スレッド
１３２〜１３４  プロセッサ内共有リソース
１４２〜１４４  プロセッサ間共有リソース
１５０  ＣＰＵ
１５２  プロセッサコア
１５４  スケジューリング部
１６２〜１６８  スレッド
１７２〜１７４  プロセッサ内共有リソース
１８２〜１８４  プロセッサ間共有リソース
１９０  バス
２００  共有メモリ
２１０  プロセッサ間共有リソース獲得情報
【図１】
2010026575.tif 000003
【図２】
2010026575.tif 000004
【図３】
2010026575.tif 000005
【図４】
2010026575.tif 000006
【図５】
2010026575.tif 000007
【図６】
2010026575.tif 000008
【図７】
2010026575.tif 000009
【図８】
2010026575.tif 000010
【図９】
2010026575.tif 000011