(57)【要約】【課題】ＣＰＵの処理効率を向上させる。【解決手段】マイコン１は、ＣＰＵ２，３を搭載し、共有ＲＡＭ９を備える。ＣＰＵ２，３は、共有データにアクセスするときに、ロックフラグがセットされているか否かを判断する。ＣＰＵ２，３は、対象データにアクセスしている関数（以下、対象データ使用関数）の開始から終了までに要する平均ロック時間を、対象データ使用関数を示す関数ＩＤと対応付けて記憶する。ＣＰＵ２，３は、ロック残時間が切替判定時間以下であるか否かを判断する。ＣＰＵ２，３は、ロック残時間が切替判定時間以下である場合に、ロックフラグがクリアされていると判断するまで、ロックフラグがセットされているか否かの判断を繰り返し実行する。ＣＰＵ２，３は、ロック残時間が切替判定時間より大きい場合に、自身のＣＰＵにおいて対象データにアクセスしようとしている関数を一旦中断させて、他処理を実行する。【選択図】図１
2019106066.tif 000002
【特許請求の範囲】
【請求項１】
ＣＰＵ（２，３，４）を複数搭載する情報処理装置（１）であって、
前記情報処理装置は、複数の前記ＣＰＵの間で共有する必要があるデータとして予め設定された複数の共有データを記憶するように構成された共有記憶部（９）を備え、
複数の前記ＣＰＵはそれぞれ、
複数の前記共有データの何れか一つにアクセスするときに、アクセスする対象となる前記共有データである対象データが他の前記ＣＰＵによって使用中である使用中状態であるか否かを判断するように構成された使用判断部（Ｓ１０，Ｓ２０）と、
前記使用中状態において前記対象データにアクセスしている処理である対象データ使用処理の開始から終了までに要する使用時間を、前記対象データ使用処理を示す処理識別情報と対応付けて記憶するように構成された時間記憶部（Ｓ３０〜Ｓ７０）と、
前記使用中状態であると前記使用判断部が判断した場合に、前記対象データ使用処理を示す処理識別情報と対応付けられている前記使用時間と、前記対象データ使用処理の開始から現時点までの使用経過時間との差が小さいことを示す予め設定された使用判断条件が成立したか否かを判断するように構成された時間判断部（Ｓ９０〜Ｓ１２０）と、
前記使用判断条件が成立したと前記時間判断部が判断した場合に、前記使用中状態ではないと判断するまで前記使用判断部による判断を繰り返し実行させるように構成された判断継続部（Ｓ１５０，Ｓ１６０）と、
前記使用判断条件が成立していないと前記時間判断部が判断した場合に、自身の前記ＣＰＵにおいて前記対象データにアクセスしようとしている処理であるアクセス対象処理を一旦中断させて、前記アクセス対象処理とは異なる他処理を実行させるように構成された処理切替部（Ｓ１３０）と
を備える情報処理装置。
【請求項２】
請求項１に記載の情報処理装置であって、
前記使用中状態であると前記使用判断部が判断した場合に、前記対象データへのアクセスを待機している他の前記ＣＰＵである待機ＣＰＵが存在するか否かを判断するように構成された待機判断部（Ｓ８１）と、
前記待機ＣＰＵが存在しないと前記待機判断部が判断した場合には、前記時間判断部による判断を実行させ、前記待機ＣＰＵが存在すると前記待機判断部が判断した場合には、前記アクセス対象処理を一旦中断させて前記他処理を実行させるように構成された先着選択部（Ｓ８１）と
を備える情報処理装置。
【請求項３】
請求項１に記載の情報処理装置であって、
前記使用中状態であると前記使用判断部が判断した場合に、前記対象データへのアクセスを待機しており且つ自身の前記ＣＰＵよりも高い優先度が設定されている他の前記ＣＰＵである高優先待機ＣＰＵが存在するか否かを判断するように構成された高優先ＣＰＵ判断部（Ｓ８４）と、
前記高優先待機ＣＰＵが存在しないと前記高優先ＣＰＵ判断部が判断した場合には、前記時間判断部による判断を実行させ、前記高優先待機ＣＰＵが存在すると前記高優先ＣＰＵ判断部が判断した場合には、前記アクセス対象処理を一旦中断させて前記他処理を実行させるように構成された高優先ＣＰＵ選択部（Ｓ８４）と
を備える情報処理装置。
【請求項４】
請求項１に記載の情報処理装置であって、
前記使用中状態であると前記使用判断部が判断した場合に、前記対象データへのアクセスを待機しており且つ自身の前記ＣＰＵの前記アクセス対象処理よりも高い優先度が設定されている処理である高優先待機処理が存在するか否かを判断するように構成された高優先処理判断部（Ｓ８７）と、
前記高優先待機処理が存在しないと前記高優先処理判断部が判断した場合には、前記時間判断部による判断を実行させ、前記高優先待機処理が存在すると前記高優先処理判断部が判断した場合には、前記アクセス対象処理を一旦中断させて前記他処理を実行させるように構成された高優先処理選択部（Ｓ８７）と
を備える情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、ＣＰＵを複数搭載する情報処理装置に関する。
【背景技術】
【０００２】
特許文献１には、ＣＰＵを複数搭載する情報処理装置において、ロック獲得に失敗した場合に、ロックを獲得した処理の継続時間（以下、ロック継続時間）が判定閾値時間を超えているときにはスピンロックを実行し、ロック継続時間が判定閾値時間以下であるときにはスリープを実行する技術が記載されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１０−１９１５７５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
１つのコアの演算で利用される複数の関数が同一の共有データにアクセスする場合には、関数に応じて、ロックを獲得してから解放するまでの時間が異なる。このため、単純に、ロック継続時間が判定閾値時間以下であるか否かにより、スピンロックを実行するか否かを判断すると、ロックを獲得した関数によっては、無駄に長くスピンロックを実行してしまい、ＣＰＵの処理効率を低下させる恐れがあった。
【０００５】
本開示は、ＣＰＵを複数搭載する情報処理装置においてＣＰＵの処理効率を向上させることを目的とする。
【課題を解決するための手段】
【０００６】
本開示の一態様は、ＣＰＵ（２，３，４）を複数搭載する情報処理装置（１）であって、情報処理装置は、共有記憶部（９）を備え、複数のＣＰＵはそれぞれ、使用判断部（Ｓ１０，Ｓ２０）と、時間記憶部（Ｓ３０〜Ｓ７０）と、時間判断部（Ｓ９０〜Ｓ１２０）と、判断継続部（Ｓ１５０，Ｓ１６０）と、処理切替部（Ｓ１３０）とを備える。
【０００７】
共有記憶部は、複数のＣＰＵの間で共有する必要があるデータとして予め設定された複数の共有データを記憶するように構成される。
使用判断部は、複数の共有データの何れか一つにアクセスするときに、アクセスする対象となる共有データである対象データが他のＣＰＵによって使用中である使用中状態であるか否かを判断するように構成される。
【０００８】
時間記憶部は、使用中状態において前記対象データにアクセスしている処理である前記対象データ使用処理の開始から終了までに要する使用時間を、前記対象データ使用処理を示す処理識別情報と対応付けて記憶するように構成される。
【０００９】
時間判断部は、使用中状態であると使用判断部が判断した場合に、対象データ使用処理を示す処理識別情報と対応付けられている使用時間と、対象データ使用処理の開始から現時点までの使用経過時間との差が小さいことを示す予め設定された使用判断条件が成立したか否かを判断するように構成される。
【００１０】
判断継続部は、使用判断条件が成立したと時間判断部が判断した場合に、使用中状態ではないと判断するまで使用判断部による判断を繰り返し実行させるように構成される。
処理切替部は、使用判断条件が成立していないと時間判断部が判断した場合に、自身のＣＰＵにおいて対象データにアクセスしようとしている処理であるアクセス対象処理を一旦中断させて、アクセス対象処理とは異なる他処理を実行させるように構成される。
【００１１】
このように構成された本開示の情報処理装置は、複数の対象データ使用処理のそれぞれに対応した使用時間を記憶する。このため、本開示の情報処理装置は、使用中状態において、使用時間と使用経過時間との差が小さいか否かを対象データ使用処理に応じて適切に判断して、使用判断部による判断を繰り返し実行させるか、アクセス対象処理とは異なる他処理を実行させるかを決定することができる。これにより、本開示の情報処理装置は、使用判断部による判断を無駄に長く実行させてしまう事態の発生を抑制し、ＣＰＵの処理効率を向上させることができる。
【００１２】
なお、この欄及び特許請求の範囲に記載した括弧内の符号は、一つの態様として後述する実施形態に記載の具体的手段との対応関係を示すものであって、本開示の技術的範囲を限定するものではない。
【図面の簡単な説明】
【００１３】
【図１】第１実施形態のマイコンの構成を示すブロック図である。
【図２】第１実施形態のロック取得処理を示すフローチャートである。
【図３】第１実施形態のＣＰＵの動作の具体例を示すシーケンス図である。
【図４】第２，３，４実施形態のマイコンの構成を示すブロック図である。
【図５】第２実施形態のロック取得処理の前半部分を示すフローチャートである。
【図６】第２実施形態のロック取得処理の後半部分を示すフローチャートである。
【図７】第２実施形態のＣＰＵの動作の具体例を示すシーケンス図である。
【図８】第３実施形態のロック取得処理の前半部分を示すフローチャートである。
【図９】第３実施形態のロック取得処理の後半部分を示すフローチャートである。
【図１０】第３実施形態のＣＰＵの動作の具体例を示すシーケンス図である。
【図１１】第４実施形態のロック取得処理の前半部分を示すフローチャートである。
【図１２】第４実施形態のロック取得処理の後半部分を示すフローチャートである。
【図１３】第４実施形態のＣＰＵの動作の具体例を示すシーケンス図である。
【発明を実施するための形態】
【００１４】
（第１実施形態）
以下に本開示の第１実施形態を図面とともに説明する。
本実施形態のマイクロコンピュータ１（以下、マイコン１）は、例えば、車両に搭載されて、エンジンの制御を行う。マイコン１は、図１に示すように、ＣＰＵ２，３と、ＲＯＭ５と、ローカルＲＡＭ６，７と、共有ＲＡＭ９と、Ｉ／Ｏ１０，１１と、タイマ１２とを備える。
【００１５】
ＣＰＵ２，３は、ＲＯＭ５に記憶されたプログラムに基づいて、エンジンを制御するための各種制御処理を分散して実行する。ＲＯＭ５は、不揮発性メモリであり、ＣＰＵ２，３が実行するプログラムと、プログラムの実行時に参照されるデータとを記憶する。
【００１６】
マイクロコンピュータの各種機能は、ＣＰＵ２，３が非遷移的実体的記録媒体に格納されたプログラムを実行することにより実現される。この例では、ＲＯＭ５が、プログラムを格納した非遷移的実体的記録媒体に該当する。また、このプログラムの実行により、プログラムに対応する方法が実行される。なお、ＣＰＵが実行する機能の一部または全部を、一つあるいは複数のＩＣ等によりハードウェア的に構成してもよい。
【００１７】
ローカルＲＡＭ６は、揮発性メモリであり、ＣＰＵ２の演算結果等を一時的に記憶する。ローカルＲＡＭ７は、揮発性メモリであり、ＣＰＵ３の演算結果等を一時的に記憶する。
【００１８】
共有ＲＡＭ９は、揮発性メモリであり、ＣＰＵ２，３が共有して使用するデータ（以下、共有データ）を一時的に記憶する。
Ｉ／Ｏ１０，１１は、マイコン１の外部とマイコン１との間で信号の入出力を行わせるための回路である。タイマ１２は、現在時刻を計測する回路である。
【００１９】
次に、ＣＰＵ２，３が実行するロック取得処理の手順を説明する。ロック取得処理は、ＣＰＵ２，３が実行しているプロセスが、共有ＲＡＭ９に記憶されている複数の共有データのそれぞれにアクセスするときに開始される処理である。
【００２０】
このロック取得処理が実行されると、ＣＰＵ２，３は、図２に示すように、まずＳ１０にて、アクセス対象の共有データのロック（以下、アクセス対象のロック）を取得するための処理を実行する。具体的には、まず、アクセス対象の共有データに対応するロックフラグ（以下、アクセス対象のロックフラグ）がセットされているか否かを判断する。ロックフラグは、共有ＲＡＭ９に記憶されており、複数の共有データのそれぞれに対応して設けられている。そして、アクセス対象のロックフラグがセットされている場合には、アクセス対象のロックの取得に失敗したと判断する。一方、アクセス対象のロックフラグがクリアされている場合には、アクセス対象のロックの取得に成功したと判断し、アクセス対象のロックフラグをセットする。これにより、ＣＰＵ２，３は、アクセス対象の共有データを使用した演算を実行することが可能となる。
【００２１】
次にＳ２０にて、Ｓ１０においてロックの取得に成功したか否かを判断する。ここで、ロックの取得に成功した場合には、Ｓ３０にて、ロックＩＤを更新する。具体的には、アクセス対象の共有データのロックＩＤ（以下、アクセス対象のロックＩＤ）を、ロック取得処理を開始する起因となった関数（すなわち、アクセス対象の共有データにアクセスする関数）を識別するために予め設定された関数識別情報（以下、関数ＩＤ）に設定する。ロックＩＤは、複数の共有データのそれぞれに対応して、共有ＲＡＭ９に設けられている。
【００２２】
そしてＳ４０にて、現在時刻を示す現在時刻情報をタイマ１２から取得して、この現在時刻情報を、アクセス対象のロックＩＤに設定されている関数ＩＤと対応付けて共有ＲＡＭ９に記憶する。
【００２３】
さらにＳ５０にて、アクセス対象の共有データを使用した演算が終了したか否かを判断する。ここで、演算が終了していない場合には、Ｓ５０の処理を繰り返すことにより、演算が終了するまで待機する。一方、演算が終了した場合には、Ｓ６０にて、ロック時間を算出して記憶する。具体的には、まず、現在時刻情報をタイマ１２から取得する。そして、Ｓ４０にて共有ＲＡＭ９に記憶した現在時刻情報が示す時刻から、Ｓ６０にて取得した現在時刻情報が示す時刻までに経過した時間を算出し、この経過時間をロック時間とする。さらに、このロック時間を、アクセス対象のロックＩＤに設定されている関数ＩＤと対応付けて共有ＲＡＭ９に記憶する。
【００２４】
またＳ７０にて、アクセス対象のロックＩＤに設定されている関数ＩＤの平均ロック時間を算出して記憶する。具体的には、まず、共有ＲＡＭ９に記憶されているデータの中から、アクセス対象のロックＩＤに設定されている関数ＩＤに対応付けられているロック時間を全て抽出する。そして、抽出した全てのロック時間の平均値を算出し、この平均値を平均ロック時間として、アクセス対象のロックＩＤに設定されている関数ＩＤと対応付けて共有ＲＡＭ９に記憶する。なお、抽出されたロック時間が１つである場合には、抽出された１つのロック時間を平均ロック時間とする。
【００２５】
次にＳ８０にて、ロックを開放する。具体的には、アクセス対象の共有データに対応するロックフラグをクリアする。そして、Ｓ８０の処理が完了した後に、ロック取得処理を終了する。
【００２６】
またＳ２０にて、ロックの取得に成功しなかった場合には、Ｓ９０にて、アクセス対象のロックＩＤを取得する。すなわち、アクセス対象のロックＩＤに設定されている関数ＩＤを抽出する。
【００２７】
そしてＳ１００にて、ロック経過時間を算出する。具体的には、まず、現在時刻情報をタイマ１２から取得する。また、共有ＲＡＭ９から、Ｓ９０で取得されたロックＩＤと同じ関数ＩＤが対応付けられている現在時刻情報を抽出する。そして、抽出した現在時刻情報が示す時刻（すなわち、ロック開始時刻）から、タイマ１２から取得した現在時刻情報が示す時刻（すなわち、現在時刻）までに経過した時間を算出し、この経過時間をロック経過時間とする。
【００２８】
さらにＳ１１０にて、ロック残時間を算出する。具体的には、まず、共有ＲＡＭ９から、Ｓ９０で取得されたロックＩＤと同じ関数ＩＤが対応付けられている平均ロック時間を抽出する。そして、抽出された平均ロック時間から、Ｓ１００で算出されたロック経過時間を減算した減算値を、ロック残時間とする。
【００２９】
そしてＳ１２０にて、Ｓ１１０で算出されたロック残時間が予め設定された切替判定時間より大きいか否かを判断する。ここで、ロック残時間が切替判定時間より大きい場合には、Ｓ１３０にて、実行しているプロセスをスリープさせる。これにより、他のプロセス（以下、切替後プロセス）が実行される。
【００３０】
そしてＳ１４０にて、切替後プロセスが終了したか否かを判断する。ここで、切替後プロセスが終了していない場合には、Ｓ１４０の処理を繰り返すことにより、切替後プロセスが終了するまで待機する。そして、切替後プロセスが終了すると、Ｓ１０に移行する。
【００３１】
またＳ１２０にて、ロック残時間が切替判定時間以下である場合には、Ｓ１５０にて、Ｓ１０と同様にして、アクセス対象のロックを取得するための処理を実行する。さらにＳ１６０にて、Ｓ２０と同様にして、Ｓ１５０においてロックの取得に成功したか否かを判断する。ここで、ロックの取得に成功した場合には、Ｓ３０に移行する。一方、ロックの取得に成功しなかった場合には、Ｓ１５０に移行する。
【００３２】
次に、ＣＰＵ２，３の動作の具体例を説明する。
図３に示すように、まず、ＣＰＵ２は、実行中のプロセスにおいて、関数Ａを用いて演算する処理Ｐ１を行うために、矢印Ｌ１に示すように、アクセス対象のロックを取得する。そして、処理Ｐ１が終了すると、ＣＰＵ２は、矢印Ｌ２に示すように、アクセス対象のロックを解放する。
【００３３】
次に、ＣＰＵ２は、実行中のプロセスにおいて、関数Ｂを用いて演算する処理Ｐ２を行うために、矢印Ｌ３に示すように、アクセス対象のロックを取得する。
その後、ＣＰＵ３は、実行中のプロセスにおいて、矢印Ｌ５に示すように、処理Ｐ２と同じアクセス対象のロックを取得する処理Ｐ３を実行する。しかし、既にアクセス対象のロックが取得されているため、ＣＰＵ３は、ロックの取得に失敗する。
【００３４】
このため、ＣＰＵ３は、アクセス対象のロックＩＤを取得する処理Ｐ４を行う。またＣＰＵ３は、ロック残時間を算出する処理Ｐ５を行う。そしてＣＰＵ３は、ロック残時間が切替判定時間より大きいために、実行しているプロセスをスリープさせる処理Ｐ６を行う。これにより、ＣＰＵ３は、他のプロセスの処理Ｐ７を実行する。
【００３５】
そして、処理Ｐ２が終了すると、ＣＰＵ２は、矢印Ｌ４に示すように、アクセス対象のロックを解放する。
その後、ＣＰＵ３は、他のプロセスの処理Ｐ７が終了すると、矢印Ｌ６に示すように、処理Ｐ２と同じアクセス対象のロックを取得する処理Ｐ８を実行する。この時点で、アクセス対象のロックが解放されているため、ＣＰＵ３は、ロックの取得に成功する。
【００３６】
このように構成されたマイコン１は、ＣＰＵ２，３を搭載し、共有ＲＡＭ９を備える。共有ＲＡＭ９は、ＣＰＵ２，３の間で共有する必要がある複数の共有データを記憶する。
ＣＰＵ２，３は、複数の共有データの何れか一つにアクセスするときに、アクセスする対象となる共有データ（以下、対象データ）に対応するロックフラグ（すなわち、上記のアクセス対象のロックフラグ）がセットされているか否かを判断する。
【００３７】
ＣＰＵ２，３は、ロックフラグがセットされている状態（以下、使用中状態）において対象データにアクセスしている関数（以下、対象データ使用関数）の開始から終了までに要する平均ロック時間を、対象データ使用関数を示す関数ＩＤと対応付けて記憶する。
【００３８】
ＣＰＵ２，３は、使用中状態であると判断した場合に、対象データ使用関数を示す関数ＩＤと対応付けられている平均ロック時間と、対象データ使用関数の開始から現時点までのロック経過時間との差（すなわち、ロック残時間）が切替判定時間以下であるか否かを判断する。
【００３９】
ＣＰＵ２，３は、ロック残時間が切替判定時間以下であると判断した場合に、ロックフラグがクリアされている（すなわち、使用中状態ではない）と判断するまで、アクセス対象のロックフラグがセットされているか否かの判断を繰り返し実行する。
【００４０】
ＣＰＵ２，３は、ロック残時間が切替判定時間より大きいと判断した場合に、スリープすることにより、自身のＣＰＵにおいて対象データにアクセスしようとしている関数（以下、アクセス対象関数）を一旦中断させて、アクセス対象関数とは異なる他処理を実行する。
【００４１】
このようにマイコン１は、複数の対象データ使用関数のそれぞれに対応した平均ロック時間を記憶する。このため、マイコン１は、使用中状態において、平均ロック時間とロック経過時間との差が小さいか否かを対象データ使用関数に応じて適切に判断して、アクセス対象のロックフラグがセットされているか否かの判断を繰り返し実行させるか、アクセス対象関数とは異なる他処理を実行するかを決定することができる。これにより、マイコン１は、アクセス対象のロックフラグがセットされているか否かの判断を無駄に長く実行させてしまう事態の発生を抑制し、ＣＰＵの処理効率を向上させることができる。
【００４２】
以上説明した実施形態において、マイコン１は情報処理装置に相当し、共有ＲＡＭ９は共有記憶部に相当し、Ｓ１０，Ｓ２０は使用判断部としての処理に相当する。
また、Ｓ３０〜Ｓ７０は時間記憶部としての処理に相当し、Ｓ９０〜Ｓ１２０は時間判断部としての処理に相当し、Ｓ１５０，Ｓ１６０は判断継続部としての処理に相当し、Ｓ１３０は処理切替部としての処理に相当する。
【００４３】
また、平均ロック時間は使用時間に相当し、関数ＩＤは処理識別情報に相当し、ロック経過時間は使用経過時間に相当し、Ｓ１２０の判断条件は使用判断条件に相当する。
（第２実施形態）
以下に本開示の第２実施形態を図面とともに説明する。なお第２実施形態では、第１実施形態と異なる部分を説明する。共通する構成については同一の符号を付す。
【００４４】
第２実施形態のマイコン１は、図４に示すように、ＣＰＵ４とローカルＲＡＭ８とが追加された点が第１実施形態と異なる。
ＣＰＵ２，３，４は、ＲＯＭ５に記憶されたプログラムに基づいて、エンジンを制御するための各種制御処理を分散して実行する。ＲＯＭ５は、不揮発性メモリであり、ＣＰＵ２，３，４が実行するプログラムと、プログラムの実行時に参照されるデータとを記憶する。
【００４５】
マイクロコンピュータの各種機能は、ＣＰＵ２，３，４が非遷移的実体的記録媒体に格納されたプログラムを実行することにより実現される。この例では、ＲＯＭ５が、プログラムを格納した非遷移的実体的記録媒体に該当する。
【００４６】
ローカルＲＡＭ８は、揮発性メモリであり、ＣＰＵ４の演算結果等を一時的に記憶する。共有ＲＡＭ９は、揮発性メモリであり、ＣＰＵ２，３，４が共有して使用するデータ（以下、共有データ）を一時的に記憶する。
【００４７】
次に、ＣＰＵ２，３，４が実行するロック取得処理の手順を説明する。ロック取得処理は、ＣＰＵ２，３，４が実行しているプロセスが、共有ＲＡＭ９に記憶されている複数の共有データのそれぞれにアクセスするときに開始される処理である。
【００４８】
第２実施形態のロック取得処理は、Ｓ２１，Ｓ８１，Ｓ８２の処理が追加された点が第１実施形態と異なる。
すなわち、図５に示すように、Ｓ２０にて、ロックの取得に成功した場合には、Ｓ２１にて、アクセス対象の共有データに対応するロック待ちフラグをクリアし、Ｓ３０に移行する。ロック待ちフラグは、共有ＲＡＭ９に記憶されており、複数の共有データのそれぞれに対応して設けられている。
【００４９】
またＳ２０にて、ロックの取得に成功しなかった場合には、Ｓ８１にて、アクセス対象の共有データに対応するロック待ちフラグがセットされているか否かを判断する。ここで、ロック待ちフラグがクリアされている場合には、Ｓ８２にて、アクセス対象の共有データに対応するロック待ちフラグをセットして、Ｓ９０に移行する。一方、ロック待ちフラグがセットされている場合には、図６に示すように、Ｓ１３０に移行する。
【００５０】
またＳ１６０にて、ロックの取得に成功した場合には、Ｓ２１に移行する。
次に、ＣＰＵ２，３，４の動作の具体例を説明する。
図７に示すように、まず、ＣＰＵ２は、実行中のプロセスにおいて、関数Ａを用いて演算する処理Ｐ１１を行うために、矢印Ｌ１１に示すように、アクセス対象のロックを取得する。
【００５１】
その後、ＣＰＵ３は、実行中のプロセスにおいて、矢印Ｌ１２に示すように、処理Ｐ１１と同じアクセス対象のロックを取得する処理Ｐ１２を実行する。しかし、既にアクセス対象のロックが取得されているため、ＣＰＵ３は、ロックの取得に失敗する。この時点で、ロック待ちフラグがクリアされている。このため、ＣＰＵ３は、ロック待ちフラグをセットする。
【００５２】
そしてＣＰＵ３は、アクセス対象のロックＩＤを取得する処理Ｐ１３を行う。またＣＰＵ３は、ロック残時間を算出する処理Ｐ１４を行う。そしてＣＰＵ３は、ロック残時間が切替判定時間より大きいために、実行しているプロセスをスリープさせる処理Ｐ１５を行う。これにより、ＣＰＵ３は、他のプロセスの処理Ｐ１６を実行する。
【００５３】
またＣＰＵ２は、処理Ｐ１１が終了すると、矢印Ｌ１３に示すように、アクセス対象のロックを解放する。
その後、ＣＰＵ３は、他のプロセスの処理Ｐ１６が終了すると、矢印Ｌ１４に示すように、処理Ｐ１１と同じアクセス対象のロックを取得する処理Ｐ１７を実行する。この時点で、アクセス対象のロックが解放されているため、ＣＰＵ３は、ロックの取得に成功する。これにより、ＣＰＵ３は、ロック待ちフラグをクリアし、処理Ｐ１１と同じアクセス対象の共有データにアクセスする関数Ｃを用いて演算する処理Ｐ１８を行う。そして、処理Ｐ１８が終了すると、ＣＰＵ３は、矢印Ｌ１５に示すように、アクセス対象のロックを解放する。
【００５４】
またＣＰＵ４は、実行中のプロセスにおいて、矢印Ｌ１６に示すように、処理Ｐ１１と同じアクセス対象のロックを取得する処理Ｐ１９を実行する。しかし、既にアクセス対象のロックが取得されているため、ＣＰＵ４は、ロックの取得に失敗する。さらに、ロック待ちフラグがセットされている。このため、ＣＰＵ４は、実行しているプロセスをスリープさせる処理Ｐ２０を行う。これにより、ＣＰＵ４は、他のプロセスの処理Ｐ２１を実行する。
【００５５】
その後、処理Ｐ２１が終了すると、ＣＰＵ４は、矢印Ｌ１７に示すように、処理Ｐ１１と同じアクセス対象のロックを取得する処理Ｐ２２を実行する。しかし、既にアクセス対象のロックが取得されているため、ＣＰＵ４は、ロックの取得に失敗する。この時点で、ロック待ちフラグがクリアされている。このため、ＣＰＵ４は、ロック待ちフラグをセットする。
【００５６】
そしてＣＰＵ４は、アクセス対象のロックＩＤを取得する処理Ｐ２３を行う。またＣＰＵ４は、ロック残時間を算出する処理Ｐ２４を行う。そしてＣＰＵ４は、ロック残時間が切替判定時間以下であるために、アクセス対象のロックの取得を繰り返すスピンロック処理Ｐ２５を行う。そして、処理Ｐ１８の終了後に、アクセス対象のロックを取得する処理Ｐ２６を実行すると、この時点で、アクセス対象のロックが解放されているため、ＣＰＵ４は、ロックの取得に成功する。
【００５７】
このようにマイコン１のＣＰＵ２，３，４は、アクセス対象のロックフラグがセットされている（すなわち、使用中状態である）と判断した場合に、アクセス対象に対応するロック待ちフラグがセットされているか否か（すなわち、対象データへのアクセスを待機している他のＣＰＵが存在するか否か）を判断する。
【００５８】
ＣＰＵ２，３，４は、ロックフラグがクリアされていると判断した場合には、ロック残時間が切替判定時間以下であるか否かの判断を実行し、ロックフラグがセットされていると判断した場合には、アクセス対象関数を一旦中断させて、アクセス対象関数とは異なる他処理を実行する。
【００５９】
これにより、マイコン１は、対象データへアクセスするＣＰＵが複数存在する場合において、対象データへアクセスするために先に待機を開始したＣＰＵに対して、このＣＰＵより後に待機を開始したＣＰＵより優先して、対象データへアクセスさせることができる。すなわち、マイコン１は、先に待機を開始したＣＰＵよりも、後に待機を開始したＣＰＵの方が早く対象データへアクセスしてしまう事態の発生を抑制することができる。
【００６０】
以上説明した実施形態において、Ｓ８１は待機判断部および先着選択部としての処理に相当する。
（第３実施形態）
以下に本開示の第３実施形態を図面とともに説明する。なお第３実施形態では、第２実施形態と異なる部分を説明する。共通する構成については同一の符号を付す。
【００６１】
第３実施形態のマイコン１は、ロック取得処理が変更された点が第２実施形態と異なる。
第３実施形態のロック取得処理は、Ｓ２１，Ｓ８１，Ｓ８２の処理が省略された点と、Ｓ２，Ｓ２３，Ｓ８４，Ｓ８５，Ｓ１４１の処理が追加された点が第２実施形態と異なる。
【００６２】
すなわち、ロック取得処理が実行されると、ＣＰＵ２，３，４は、図８に示すように、まずＳ２にて、自身のＣＰＵより優先度が高いＣＰＵについて、アクセス対象の共有データに対応する自ＣＰＵ待ちフラグがセットされているか否かを判断する。自ＣＰＵ待ちフラグは、共有ＲＡＭ９に記憶されており、ＣＰＵ２，３，４毎に設けられるとともに、複数の共有データのそれぞれに対応して設けられている。
【００６３】
ここで、自ＣＰＵ待ちフラグがクリアされている場合には、Ｓ１０に移行する。一方、自ＣＰＵ待ちフラグがセットされている場合には、図９に示すように、Ｓ１３０に移行する。
【００６４】
また図８に示すように、Ｓ２０にて、ロックの取得に成功した場合には、Ｓ２３にて、アクセス対象の共有データに対応する自ＣＰＵ待ちフラグをクリアし、Ｓ３０に移行する。
【００６５】
またＳ２０にて、ロックの取得に成功しなかった場合には、Ｓ８４にて、自身のＣＰＵより優先度が高いＣＰＵについて、アクセス対象の共有データに対応する自ＣＰＵ待ちフラグがセットされているか否かを判断する。ここで、自ＣＰＵ待ちフラグがクリアされている場合には、Ｓ８５にて、アクセス対象の共有データに対応する自ＣＰＵ待ちフラグをセットして、Ｓ９０に移行する。一方、Ｓ８４にて、自ＣＰＵ待ちフラグがセットされている場合には、図９に示すように、Ｓ１３０に移行する。
【００６６】
またＳ１２０にて、ロック残時間が切替判定時間以下である場合には、Ｓ１４１にて、Ｓ８４と同様にして、自身のＣＰＵより優先度が高いＣＰＵについて、アクセス対象の共有データに対応する自ＣＰＵ待ちフラグがセットされているか否かを判断する。ここで、自ＣＰＵ待ちフラグがクリアされている場合には、Ｓ１５０に移行する。一方、自ＣＰＵ待ちフラグがセットされている場合には、Ｓ１３０に移行する。
【００６７】
またＳ１６０にて、ロックの取得に成功した場合には、Ｓ２３に移行する。一方、ロックの取得に失敗した場合には、Ｓ１４１に移行する。
次に、ＣＰＵ２，３，４の動作の具体例を説明する。
【００６８】
図１０に示すように、まず、ＣＰＵ２は、実行中のプロセスにおいて、関数Ａを用いて演算する処理Ｐ３１を行うために、矢印Ｌ３１に示すように、アクセス対象のロックを取得する。
【００６９】
その後、ＣＰＵ３は、実行中のプロセスにおいて、矢印Ｌ３２に示すように、処理Ｐ３１と同じアクセス対象のロックを取得する処理Ｐ３２を実行する。しかし、既にアクセス対象のロックが取得されているため、ＣＰＵ３は、ロックの取得に失敗する。この時点で、自身のＣＰＵより優先度が高いＣＰＵについて、アクセス対象の共有データに対応する自ＣＰＵ待ちフラグがセットされていない。このため、ＣＰＵ３は、アクセス対象の共有データに対応する自ＣＰＵ待ちフラグをセットする。なお、ＣＰＵ４の優先度は、ＣＰＵ３の優先度より高いとする。
【００７０】
そしてＣＰＵ３は、アクセス対象のロックＩＤを取得する処理Ｐ３３を行う。またＣＰＵ３は、ロック残時間を算出する処理Ｐ３４を行う。そしてＣＰＵ３は、ロック残時間が切替判定時間より大きいために、実行しているプロセスをスリープさせる処理Ｐ３５を行う。これにより、ＣＰＵ３は、他のプロセスの処理Ｐ３６を実行する。
【００７１】
またＣＰＵ４は、ＣＰＵ３が処理Ｐ３２を実行した後に、矢印Ｌ３３に示すように、実行中のプロセスにおいて処理Ｐ３１と同じアクセス対象のロックを取得する処理Ｐ３７を実行する。しかし、既にアクセス対象のロックが取得されているため、ＣＰＵ４は、ロックの取得に失敗する。この時点で、自身のＣＰＵより優先度が高いＣＰＵについて、アクセス対象の共有データに対応する自ＣＰＵ待ちフラグがセットされていない。このため、ＣＰＵ４は、アクセス対象の共有データに対応する自ＣＰＵ待ちフラグをセットする。
【００７２】
そしてＣＰＵ４は、アクセス対象のロックＩＤを取得する処理Ｐ３８を行う。またＣＰＵ４は、ロック残時間を算出する処理Ｐ３９を行う。そしてＣＰＵ４は、ロック残時間が切替判定時間より大きいために、実行しているプロセスをスリープさせる処理Ｐ４０を行う。これにより、ＣＰＵ４は、他のプロセスの処理Ｐ４１を実行する。
【００７３】
そして、他のプロセスの処理Ｐ３６が終了した時点で、ＣＰＵ３より優先度が高いＣＰＵ４の自ＣＰＵ待ちフラグがセットされているため、ＣＰＵ３は、再度、スリープさせる処理Ｐ４２を行う。これにより、ＣＰＵ３は、他のプロセスの処理Ｐ４３を実行する。
【００７４】
そして、処理Ｐ４１が終了すると、ＣＰＵ４は、矢印Ｌ３５に示すように、処理Ｐ３１と同じアクセス対象のロックを取得する処理Ｐ４４を実行する。この時点で、アクセス対象のロックが解放されているため、ＣＰＵ４は、ロックの取得に成功する。このため、ＣＰＵ４は、アクセス対象の共有データに対応する自ＣＰＵ待ちフラグをクリアする。さらにＣＰＵ４は、関数Ｄを用いて演算する処理Ｐ４５を行う。そして、処理Ｐ４５が終了すると、ＣＰＵ４は、矢印Ｌ３６に示すように、アクセス対象のロックを解放する。
【００７５】
その後、ＣＰＵ３は、他のプロセスの処理Ｐ４３が終了すると、ＣＰＵ３より優先度が高いＣＰＵ４の自ＣＰＵ待ちフラグがセットされていないため、矢印Ｌ３７に示すように、処理Ｐ３１と同じアクセス対象のロックを取得する処理Ｐ４６を実行する。この時点で、アクセス対象のロックが解放されているため、ＣＰＵ３は、ロックの取得に成功する。これにより、ＣＰＵ３は、自ＣＰＵ待ちフラグをクリアし、処理Ｐ３１と同じアクセス対象の共有データにアクセスする関数Ｃを用いて演算する処理Ｐ４７を行う。そして、処理Ｐ４７が終了すると、ＣＰＵ３は、矢印Ｌ３８に示すように、アクセス対象のロックを解放する。
【００７６】
このようにマイコン１のＣＰＵ２，３，４は、アクセス対象のロックフラグがセットされている（すなわち、使用中状態である）と判断した場合に、自身のＣＰＵより優先度が高いＣＰＵ（以下、高優先度ＣＰＵ）について、アクセス対象に対応する自ＣＰＵ待ちフラグがセットされているか否かを判断する。
【００７７】
ＣＰＵ２，３，４は、高優先度ＣＰＵの自ＣＰＵ待ちフラグがクリアされていると判断した場合には、ロック残時間が切替判定時間以下であるか否かの判断を実行する。またＣＰＵ２，３，４は、高優先度ＣＰＵの自ＣＰＵ待ちフラグがセットされていると判断した場合には、アクセス対象関数を一旦中断させて、アクセス対象関数とは異なる他処理を実行する。
【００７８】
これにより、マイコン１は、対象データへアクセスするＣＰＵが複数存在する場合において、優先度が高いＣＰＵに対して、優先度が低いＣＰＵより優先して、対象データへアクセスさせることができる。すなわち、マイコン１は、優先度が高いＣＰＵよりも、優先度が低いＣＰＵの方が早く対象データへアクセスしてしまう事態の発生を抑制することができる。
【００７９】
以上説明した実施形態において、Ｓ８４は高優先ＣＰＵ判断部および高優先ＣＰＵ選択部としての処理に相当する。
（第４実施形態）
以下に本開示の第４実施形態を図面とともに説明する。なお第４実施形態では、第３実施形態と異なる部分を説明する。共通する構成については同一の符号を付す。
【００８０】
第４実施形態のマイコン１は、ロック取得処理が変更された点が第３実施形態と異なる。
第４実施形態のロック取得処理は、Ｓ２，Ｓ２３，Ｓ８４，Ｓ８５，Ｓ１４１の処理の代わりに、Ｓ４，Ｓ２５，Ｓ８７，Ｓ８８，Ｓ１４３の処理を実行する点が第３実施形態と異なる。
【００８１】
すなわち、ロック取得処理が実行されると、ＣＰＵ２，３，４は、図１１に示すように、まずＳ２にて、ロック取得処理を開始する起因となった関数（以下、開始起因関数）よりも優先度が高い関数の関数待ちフラグがセットされているか否かを判断する。関数待ちフラグは、共有ＲＡＭ９に記憶されており、共有データにアクセスする複数の関数のそれぞれに対応して設けられている。
【００８２】
ここで、関数待ちフラグがクリアされている場合には、Ｓ１０に移行する。一方、関数待ちフラグがセットされている場合には、図１２に示すように、Ｓ１３０に移行する。
また図１１に示すように、Ｓ２０にて、ロックの取得に成功した場合には、Ｓ２５にて、開始起因関数に対応する関数待ちフラグをクリアし、Ｓ３０に移行する。
【００８３】
またＳ２０にて、ロックの取得に成功しなかった場合には、Ｓ８７にて、開始起因関数よりも優先度が高い関数の関数待ちフラグがセットされているか否かを判断する。ここで、関数待ちフラグがクリアされている場合には、Ｓ８８にて、開始起因関数に対応する関数待ちフラグをセットして、Ｓ９０に移行する。一方、関数待ちフラグがセットされている場合には、図１２に示すように、Ｓ１３０に移行する。
【００８４】
またＳ１２０にて、ロック残時間が切替判定時間以下である場合には、Ｓ１４３にて、Ｓ８７と同様にして、開始起因関数よりも優先度が高い関数の関数待ちフラグがセットされているか否かを判断する。ここで、関数待ちフラグがクリアされている場合には、Ｓ１５０に移行する。一方、関数待ちフラグがセットされている場合には、Ｓ１３０に移行する。
【００８５】
またＳ１６０にて、ロックの取得に成功した場合には、Ｓ２５に移行する。一方、ロックの取得に失敗した場合には、Ｓ１４３に移行する。
次に、ＣＰＵ２，３，４の動作の具体例を説明する。
【００８６】
図１３に示すように、まず、ＣＰＵ２は、実行中のプロセスにおいて、関数Ａを用いて演算する処理Ｐ６１を行うために、矢印Ｌ６１に示すように、アクセス対象のロックを取得する。
【００８７】
その後、ＣＰＵ３は、実行中のプロセスにおいて、矢印Ｌ６２に示すように、処理Ｐ６１と同じアクセス対象のロックを取得する処理Ｐ６２を実行する。しかし、既にアクセス対象のロックが取得されているため、ＣＰＵ３は、ロックの取得に失敗する。この時点で、関数Ｃより優先度が高い関数に対応する関数待ちフラグがセットされていない。このため、ＣＰＵ３は、関数Ｃに対応する関数待ちフラグをセットする。なお、関数Ｄの優先度は、関数Ｃの優先度より高いとする。
【００８８】
そしてＣＰＵ３は、アクセス対象のロックＩＤを取得する処理Ｐ６３を行う。またＣＰＵ３は、ロック残時間を算出する処理Ｐ６４を行う。そしてＣＰＵ３は、ロック残時間が切替判定時間より大きいために、実行しているプロセスをスリープさせる処理Ｐ６５を行う。これにより、ＣＰＵ３は、他のプロセスの処理Ｐ６６を実行する。
【００８９】
またＣＰＵ４は、ＣＰＵ３が処理Ｐ６２を実行した後に、矢印Ｌ６３に示すように、実行中のプロセスにおいて処理Ｐ６１と同じアクセス対象のロックを取得する処理Ｐ６７を実行する。しかし、既にアクセス対象のロックが取得されているため、ＣＰＵ４は、ロックの取得に失敗する。この時点で、関数Ｄより優先度が高い関数に対応する関数待ちフラグがセットされていない。このため、ＣＰＵ４は、関数Ｄに対応する関数待ちフラグをセットする。
【００９０】
そしてＣＰＵ４は、アクセス対象のロックＩＤを取得する処理Ｐ６８を行う。またＣＰＵ４は、ロック残時間を算出する処理Ｐ６９を行う。そしてＣＰＵ４は、ロック残時間が切替判定時間より大きいために、実行しているプロセスをスリープさせる処理Ｐ７０を行う。これにより、ＣＰＵ４は、他のプロセスの処理Ｐ７１を実行する。
【００９１】
そして、他のプロセスの処理Ｐ６６が終了した時点で、関数Ｃより優先度が高い関数Ｄに対応する関数待ちフラグがセットされているため、ＣＰＵ３は、再度、スリープさせる処理Ｐ７２を行う。これにより、ＣＰＵ３は、他のプロセスの処理Ｐ７３を実行する。
【００９２】
そして、処理Ｐ７１が終了すると、ＣＰＵ４は、矢印Ｌ６５に示すように、処理Ｐ６１と同じアクセス対象のロックを取得する処理Ｐ７４を実行する。この時点で、アクセス対象のロックが解放されているため、ＣＰＵ４は、ロックの取得に成功する。このため、ＣＰＵ４は、関数Ｄに対応する関数待ちフラグをクリアする。さらにＣＰＵ４は、関数Ｄを用いて演算する処理Ｐ７５を行う。そして、処理Ｐ７５が終了すると、ＣＰＵ４は、矢印Ｌ６６に示すように、アクセス対象のロックを解放する。
【００９３】
その後、ＣＰＵ３は、他のプロセスの処理Ｐ７３が終了すると、関数Ｃより優先度が高い関数に対応する関数待ちフラグがセットされていないため、矢印Ｌ６７に示すように、処理Ｐ６１と同じアクセス対象のロックを取得する処理Ｐ７６を実行する。この時点で、アクセス対象のロックが解放されているため、ＣＰＵ３は、ロックの取得に成功する。これにより、ＣＰＵ３は、関数Ｃに対応する関数待ちフラグをクリアし、処理Ｐ６１と同じアクセス対象の共有データにアクセスする関数Ｃを用いて演算する処理Ｐ７７を行う。そして、処理Ｐ７７が終了すると、ＣＰＵ３は、矢印Ｌ６８に示すように、アクセス対象のロックを解放する。
【００９４】
このようにマイコン１のＣＰＵ２，３，４は、アクセス対象のロックフラグがセットされている（すなわち、使用中状態である）と判断した場合に、開始起因関数よりも優先度が高い関数の関数待ちフラグがセットされているか否かを判断する。
【００９５】
ＣＰＵ２，３，４は、開始起因関数よりも優先度が高い関数の関数待ちフラグがクリアされていると判断した場合には、ロック残時間が切替判定時間以下であるか否かの判断を実行する。またＣＰＵ２，３，４は、開始起因関数よりも優先度が高い関数の関数待ちフラグがセットされていると判断した場合には、アクセス対象関数を一旦中断させて、アクセス対象関数とは異なる他処理を実行する。
【００９６】
これにより、マイコン１は、対象データへアクセスするアクセス対象関数が複数存在する場合において、優先度が高いアクセス対象関数に対して、優先度が低いアクセス対象関数より優先して、対象データへアクセスさせることができる。すなわち、マイコン１は、優先度が高いアクセス対象関数よりも、優先度が低いアクセス対象関数の方が早く対象データへアクセスしてしまう事態の発生を抑制することができる。
【００９７】
以上説明した実施形態において、Ｓ８７は高優先処理判断部および高優先処理選択部としての処理に相当する。
以上、本開示の一実施形態について説明したが、本開示は上記実施形態に限定されるものではなく、種々変形して実施することができる。
【００９８】
［変形例１］
例えば上記実施形態では、平均ロック時間を算出して記憶する形態を示した。しかし、算出された最新のロック時間を記憶し、この最新のロック時間とロック経過時間との差をロック残時間とするようにしてもよい。または、固定値としてのロック時間を予め計算した後に記憶し、この固定値としてのロック時間とロック経過時間との差をロック残時間とするようにしてもよい。
【００９９】
［変形例２］
上記実施形態では、関数が共有データにアクセスする形態を示したが、関数に限定されるものではなく、共有データにアクセスする処理であればよい。共有データにアクセスする処理として、例えば、タスクが挙げられる。
［変形例３］
上記実施形態では、ロックフラグが共有ＲＡＭ９に記憶される形態を示したが、ロックフラグが記憶されるのは共有ＲＡＭに限定されるものではなく、複数のＣＰＵがそれぞれロックの獲得および解放を適切に実行することができればよい。例えば、ロックフラグをマイコンのレジスタに記憶するようにしてもよい。
【０１００】
また、上記実施形態における１つの構成要素が有する機能を複数の構成要素に分担させたり、複数の構成要素が有する機能を１つの構成要素に発揮させたりしてもよい。また、上記実施形態の構成の一部を省略してもよい。また、上記実施形態の構成の少なくとも一部を、他の上記実施形態の構成に対して付加、置換等してもよい。なお、特許請求の範囲に記載の文言から特定される技術思想に含まれるあらゆる態様が本開示の実施形態である。
【０１０１】
上述したマイコン１の他、当該マイコン１を構成要素とするシステム、当該マイコン１としてコンピュータを機能させるためのプログラム、このプログラムを記録した媒体、情報処理方法など、種々の形態で本開示を実現することもできる。
【符号の説明】
【０１０２】
１…マイコン、２，３，４…ＣＰＵ、９…共有ＲＡＭ
【図１】
2019106066.tif 000003
【図２】
2019106066.tif 000004
【図３】
2019106066.tif 000005
【図４】
2019106066.tif 000006
【図５】
2019106066.tif 000007
【図６】
2019106066.tif 000008
【図７】
2019106066.tif 000009
【図８】
2019106066.tif 000010
【図９】
2019106066.tif 000011
【図１０】
2019106066.tif 000012
【図１１】
2019106066.tif 000013
【図１２】
2019106066.tif 000014
【図１３】
2019106066.tif 000015