(57)【特許請求の範囲】
【請求項１】
割り込み要求を受け付けた際には、先に実行していた処理を中断して割り込み処理を実行可能、かつ前記割り込み処理を終了した後に、前記先に実行していた処理を再開可能に構成された処理部（３）と、
前記割り込み処理の開始前の時点で前記処理部において保持されている情報であるコンテキスト情報を、前記処理部が前記割り込み処理を実行する際に前記処理部から退避させるために利用される記憶領域（２１）を有する記憶部（５）と
を備え、
前記処理部は、
イベントの発生まで待機するために実行される処理であるビジーウェイト処理を実行した際に、前記コンテキスト情報の少なくとも一部を対象にして、当該対象となる情報を、前記割り込み要求を受け付けていないにもかかわらず、投機的に前記記憶部に退避させる退避処理（Ｓ１２，Ｓ３２）と、
前記割り込み要求を受け付けた際に、前記退避処理が実行済みの状態にあるか否かを判定する判定処理（Ｓ２１，Ｓ４１）と
を実行可能に構成され、
前記処理部は、前記判定処理によって前記退避処理を実行済みの状態にあると判定された場合には、前記割り込み要求の受け付け後の時点では、前記対象となる情報を前記記憶部に退避させることなく前記割り込み処理を実行し（Ｓ２２，Ｓ２４，Ｓ２５，Ｓ４２，Ｓ４４，Ｓ４５）、前記判定処理によって前記退避処理を実行済みの状態にはないと判定された場合には、前記割り込み要求の受け付け後の時点で、前記対象となる情報を前記記憶部に退避させてから前記割り込み処理を実行するように構成され（Ｓ２３，Ｓ２４，Ｓ２５，Ｓ４３，Ｓ４４，Ｓ４５）、
前記記憶領域は、前記処理部が有するスタックポインタ（１５）によって読み書きするアドレスが管理されるスタック（２１）であり、
前記処理部は、前記退避処理を実行する時点では、前記スタックポインタを変更しないことで、前記対象となる情報が保存された前記スタック内の記憶領域を未使用領域扱いのままにし、前記判定処理によって前記退避処理を実行済みの状態にあると判定した場合に、前記スタックポインタを変更することで（Ｓ２１，Ｓ４２）、前記対象となる情報が前記スタック内の記憶領域に待避されている扱いとするように構成されている
情報処理装置。
【請求項２】
請求項１に記載の情報処理装置であって、
前記処理部は、前記退避処理を実行する際、前記コンテキスト情報の一部を対象にして、当該対象となる情報を投機的に前記記憶部に退避させるように構成され（Ｓ３２）、
前記処理部は、前記コンテキスト情報のうち、前記対象となる情報以外の情報は、前記割り込み要求の受け付け後に、前記記憶部に退避させるように構成されている（Ｓ４２）
情報処理装置。
【請求項３】
割り込み要求を受け付けた際には、先に実行していた処理を中断して割り込み処理を実行可能、かつ前記割り込み処理を終了した後に、前記先に実行していた処理を再開可能に構成された処理部（３）と、
前記割り込み処理の開始前の時点で前記処理部において保持されている情報であるコンテキスト情報を、前記処理部が前記割り込み処理を実行する際に前記処理部から退避させるために利用される記憶領域（２１）を有する記憶部（５）と
を備え、
前記処理部は、
イベントの発生まで待機するために実行される処理であるビジーウェイト処理を実行した際に、前記コンテキスト情報の少なくとも一部を対象にして、当該対象となる情報を、前記割り込み要求を受け付けていないにもかかわらず、投機的に前記記憶部に退避させる退避処理（Ｓ１２，Ｓ３２）と、
前記割り込み要求を受け付けた際に、前記退避処理が実行済みの状態にあるか否かを判定する判定処理（Ｓ２１，Ｓ４１）と
を実行可能に構成され、
前記処理部は、前記判定処理によって前記退避処理を実行済みの状態にあると判定された場合には、前記割り込み要求の受け付け後の時点では、前記対象となる情報を前記記憶部に退避させることなく前記割り込み処理を実行し（Ｓ４２，Ｓ４４，Ｓ４５）、前記判定処理によって前記退避処理を実行済みの状態にはないと判定された場合には、前記割り込み要求の受け付け後の時点で、前記対象となる情報を前記記憶部に退避させてから前記割り込み処理を実行するように構成され（Ｓ４３，Ｓ４４，Ｓ４５）、
前記処理部は、前記退避処理を実行する際、前記コンテキスト情報の一部を対象にして、当該対象となる情報を投機的に前記記憶部に退避させるように構成され（Ｓ３２）、
前記処理部は、前記コンテキスト情報のうち、前記対象となる情報以外の情報は、前記割り込み要求の受け付け後に、前記記憶部に退避させるように構成されている（Ｓ４２）
情報処理装置。
【請求項４】
請求項２又は請求項３に記載の情報処理装置であって、
前記コンテキスト情報のうち、前記対象となる情報は、前記ビジーウェイト処理の実行中には更新されない情報であり（Ｓ３２）、
前記コンテキスト情報のうち、前記対象となる情報以外の情報は、前記ビジーウェイト
処理の実行中に更新され得る情報である（Ｓ４２）
情報処理装置。
【請求項５】
請求項１に記載の情報処理装置であって、
前記処理部は、前記退避処理を実行する際、前記コンテキスト情報の全部を対象にして、当該対象となる情報を投機的に前記記憶部に退避させるように構成されている（Ｓ１２）
情報処理装置。
【請求項６】
請求項５に記載の情報処理装置であって、
前記処理部は、前記退避処理を実行する際、前記ビジーウェイト処理中のループ処理を開始する時点において前記処理部が保持する前記コンテキスト情報を生成し、当該生成した前記コンテキスト情報の全部を対象にして、当該対象となる情報を投機的に前記記憶部に退避させるように構成されている（Ｓ１２）
情報処理装置。
【請求項７】
請求項１から請求項６までのいずれか一項に記載の情報処理装置であって、
前記処理部は、前記ビジーウェイト処理の開始後、前記退避処理を実行する前に、前記ビジーウェイト処理の終了条件が成立しているか否かを判断し（Ｓ１１，Ｓ３１）、前記ビジーウェイト処理の終了条件が成立している場合には、前記退避処理を実行しないまま前記ビジーウェイト処理を終了するように構成されている
情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、情報処理装置に関する。
【背景技術】
【０００２】
車両に搭載されるＥＣＵには、割り込み要求が発生してから実際に割り込み処理が実行されるまでの遅延を削減すること、及び割り込み処理の実行時にＥＣＵにかかる負荷を軽減することなどが求められている。なお、ＥＣＵは、Electronic Control Unit（すなわち、電子制御装置。）の略称である。
【０００３】
割り込み要求が発生すると、ＥＣＵでは、割り込みハンドラが作動する。一般に、割り込みハンドラは、それまで実行していた処理を中断して割り込み処理を実行する。そのため、割り込みハンドラを起動する前のコンテキスト情報を、スタック等に退避する必要がある。このような退避処理は、割り込み処理の遅延、及びＥＣＵの負荷増大を招く原因の一つとなっている。なお、コンテキスト情報とは、ＥＣＵが備えるＣＰＵの状態を表すレジスタ値等、ＣＰＵが保持している情報の集合である。
【０００４】
コンテキスト情報の退避処理を高速化するための技術としては、例えば、下記特許文献１に記載された技術等が知られている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平６−８３６３９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかし、上記特許文献１に記載された技術の場合、専用のハードウェアを新たに導入することにより、所期の高速化を実現している。そのため、そのような専用のハードウェアを導入しないことを前提として、コンテキスト情報の退避処理を高速化したい場合には、上記技術で対処することは困難である。
【０００７】
以上のような事情から、コンテキスト情報の退避処理をより高速に実施することが可能な情報処理装置を提供することが望ましい。
【課題を解決するための手段】
【０００８】
以下に説明する情報処理装置（１）は、処理部（３）と、記憶部（５）とを備える。処理部は、割り込み要求を受け付けた際には、先に実行していた処理を中断して割り込み処理を実行可能、かつ割り込み処理を終了した後に、先に実行していた処理を再開可能に構成される。記憶部は、割り込み処理の開始前の時点で処理部において保持されている情報であるコンテキスト情報を、処理部が割り込み処理を実行する際に処理部から退避させるために利用される記憶領域（２１）を有する。
【０００９】
処理部は、退避処理（Ｓ１２，Ｓ３２）と判定処理（Ｓ２１，Ｓ４１）とを実行可能に構成される。退避処理では、イベントの発生まで待機するために実行される処理であるビジーウェイト処理を実行した際に、コンテキスト情報の少なくとも一部を対象にして、当該対象となる情報を、割り込み要求を受け付けていないにもかかわらず、投機的に記憶部に退避させる。
【００１０】
ここでいう、上記対象となる情報を投機的に記憶部に退避させるとは、上記対象となる情報を記憶部に退避させる必要があるか否かが確定していない時点で、上記対象となる情報を記憶部に退避させる、という意味である。割り込み要求を受け付けた場合は、上記対象となる情報を記憶部に退避させることが必須となる。一方、割り込み要求を受け付けていない場合、その時点では上記対象となる情報を記憶部に退避させることは必須ではない。しかし、上述のような処理を行う処理部は、割り込み要求を受け付けていない時点においては必須ではないのに、上記対象となる情報を記憶部に退避させる。このような処理が、上記対象となる情報を投機的に記憶部に退避させる処理である。
【００１１】
ビジーウェイト処理の実行中は、例えば周辺デバイスなど、処理部の外部でイベントが発生するのを待つ状態である。そのため、処理部としては特に実行すべき命令がない状態である。すなわち、ビジーウェイト処理の実行中は処理部にとっては空き時間である。したがって、ビジーウェイト中にコンテキスト情報の退避処理を行うことは、処理部の負荷を増大させることにはならず、処理部の能力を有効に利用することになる。
【００１２】
判定処理では、割り込み要求の受け付け後の時点で、退避処理が実行済みの状態にあるか否かを判定する。そして、判定処理によって退避処理を実行済みの状態にあると判定された場合、処理部は、割り込み要求の受け付け後の時点では、対象となる情報を記憶部に退避させることなく割り込み処理を実行する（Ｓ２２，Ｓ２４，Ｓ２５）。
【００１３】
そのため、割り込み要求の受け付け後に、対象となる情報を記憶部に退避させる場合に比べ、そのような退避処理を実行しない分だけ、割り込み要求の受け付けから割り込み処理を開始するまでの遅延時間を削減できる。したがって、そのような遅延時間がより大きくなるような構成となっている場合に比べ、割り込み処理をより迅速に開始することができる。
【００１４】
また、割り込み処理の開始タイミングが早くなる分だけ、割り込み処理の終了タイミングも早くなる。したがって、割り込み処理の終了タイミングが早くなる分だけ、処理部は早期に割り込み処理に起因する負荷から解放され、処理部の負荷を軽減することができる。すなわち、処理部にとっては空き時間であるビジーウェイト処理中に一部の処理を済ませておくことで、その分だけビジーウェイト処理よりも重要度が高い割り込み処理では処理時間を短縮できるので、割り込み処理時の処理部の負荷を軽減できるのである。
【００１５】
なお、判定処理によって退避処理を実行済みの状態にはないと判定された場合、処理部は、割り込み要求の受け付け後の時点で、対象となる情報を記憶部に退避させてから割り込み処理を実行する（Ｓ２３，Ｓ２４，Ｓ２５）。この場合、上述のような遅延時間の削減はできないものの、これは割り込み処理の開始までに従来と同程度の時間を要するに過ぎず、新たに余計な時間が増大することはない。
【００１６】
したがって、このような情報処理装置によれば、上述のような投機的な退避を行う機会が増える分だけ、コンテキスト情報の退避をより高速に実施することができる。よって、割り込み処理実行時の遅延の削減、及び処理部にかかる負荷の削減を図ることができる。
【００１７】
なお、本開示の構成と後述する実施形態で例示した具体的構成との対応関係を理解しやすくするため、特許請求の範囲及び課題を解決するための手段の欄には、後述する実施形態中で示した符号を括弧内に併記した。ただし、後述する実施形態は本開示の一態様として例示されるものであり、上記符号の併記は本開示の技術的範囲が後述する実施形態に限定されることを意味するものではない。
【図面の簡単な説明】
【００１８】
【図１】図１は情報処理装置の概略的な構成を示すブロック図である。
【図２】図２は第一実施形態のビジーウェイト処理を示すフローチャートである。
【図３】図３は第一実施形態の割り込み処理を示すフローチャートである。
【図４】図４は第一実施形態の各処理の開始・終了タイミングを示すタイミングチャートである。
【図５】図５は第二実施形態のビジーウェイト処理を示すフローチャートである。
【図６】図６は第二実施形態の割り込み処理を示すフローチャートである。
【発明を実施するための形態】
【００１９】
次に、上述の情報処理装置について、例示的な実施形態を挙げて説明する。
（１）第一実施形態
［ＥＣＵの構成］
以下に例示する情報処理装置は、図１に示すように、ＥＣＵ１である。本実施形態で例示するＥＣＵ１は、車両に搭載されて、車両が備えるエンジンを制御するエンジンＥＣＵである。ＥＣＵ１は、ＣＰＵ３と、ＲＡＭ５とを備える。これらＣＰＵ３及びＲＡＭ５は、それぞれがバス７に接続されることにより、ＣＰＵ３がＲＡＭ５にアクセス可能に構成されている。
【００２０】
ＣＰＵ３は、演算装置１１、及びロードストア装置１２などを備える。演算装置１１は、算術演算及び論理演算等を行う装置である。ロードストア装置１２は、ＲＡＭ５等のメモリからＣＰＵ３へのデータのロード、及びＣＰＵ３からＲＡＭ５等のメモリへのデータのストアを管理する装置である。
【００２１】
ＣＰＵ３は、専用の用途が割り当てられたレジスタとして、プログラムステータスワード（以下、ＰＳＷ。）１３、プログラムカウンタ（以下、ＰＣ。）１４、及びスタックポインタ（以下、ＳＰ。）１５等を備える。また、ＣＰＵ３は、それぞれにＲ０からＲｎまでの名称が付されたｎ＋１個の汎用レジスタ１６，１６，…，１６を備える。
【００２２】
ＰＳＷ１３は、演算結果に関する情報、及び命令の実行結果に関する状態を保持するレジスタである。ＰＳＷ１３は、ＰＳＷ１３に含まれる各ビットのオン／オフにより、種々の状態を表している。ＰＣ１４は、ＣＰＵ３が実行する命令が格納されたメモリのアドレスを管理するレジスタである。ＳＰ１５は、スタック２１のアドレスを管理するレジスタである。
【００２３】
スタック２１は、ＲＡＭ５に確保された記憶領域で、ＦＩＬＯ方式でデータを格納可能に構成されている。なお、ＦＩＬＯは、First-in Last-outの略称である。スタック２１へはＰＳＷ１３やＰＣ１４の値を退避させることができる。また、退避させた値をスタック２１から取り出してＰＳＷ１３やＰＣ１４に復帰させることができる。このようなデータの退避及び復帰が行われる際に、ＳＰ１５の格納値に基づいてスタック２１内の書き込み先アドレスや読み取り先アドレスが特定される。また、データの退避及び復帰が行われた際には、ＳＰ１５の格納値が更新される。
【００２４】
ＲＡＭ５には、上述のようなスタック２１の他、プログラム格納領域２３等が確保される。プログラム格納領域２３には、例えば、各種タスク３１に対応するプログラム、割り込みハンドラ３２に対応するプログラム、及び割り込みサービスルーチン３３に対応するプログラム等が格納されている。これらのプログラムは、各プログラムに対応する機能がＣＰＵ３において作動する際に、プログラム格納領域２３からＣＰＵ３に読み込まれる。
【００２５】
ＥＣＵ１の各種機能は、ＣＰＵ３が非遷移的実体的記録媒体に格納されたプログラムを実行することにより実現される。この例では、ＲＡＭ５が、プログラムを格納した非遷移的実体的記録媒体に該当する。非遷移的実体的記録媒体としては、ＲＡＭ５の他、ＲＯＭやフラッシュメモリなど、種々の半導体メモリを利用し得る。また、このプログラムの実行により、プログラムに対応する方法が実行される。
【００２６】
［ビジーウェイト処理］
次に、ＥＣＵ１において実行されるビジーウェイト処理について、図２に示すフローチャートに基づいて説明する。図２に示すビジーウェイト処理は、ＣＰＵ３において実行されるタスクが、ＣＰＵ３の外部において次のイベントが発生するまで一時的に処理を継続できなくなったことを契機にして、ＣＰＵ３において起動される処理である。タスクが一時的に処理を継続できなくなる状況としては、例えば、排他制御のためのアクセス権が取得できない状況、他のデバイスからの応答待ちになった状況などを考え得る。ビジーウェイト処理は、起動された後、上述のタスクが処理を再開可能な状況になるまでＣＰＵ３において実行される。また、オペレーティングシステムにおけるアイドル処理についても、次のイベントが発生するまでの間、タスクが処理を行わないという観点では、本開示でいうビジーウェイト処理の一種と考えることができる。すなわち、本開示でいうビジーウェイト処理には、オペレーティングシステムにおけるアイドル処理も含まれる。
【００２７】
ビジーウェイト処理を開始すると、Ｓ１１へと進み、ＣＰＵ３は、ビジーウェイト処理の終了条件が成立したか否かを判断する。Ｓ１１では、例えば、タスクが処理を続行できなくなった要因が解消されたかどうかを判断する。具体的な判断の内容は、タスクが処理を続行できなくなった要因によっても変わり得るが、例えば、排他制御時のアクセス権の取得待ちであった場合は、アクセス権が取得できた場合に、ビジーウェイト処理の終了条件が成立したと判断される。
【００２８】
Ｓ１１において、ビジーウェイト処理の終了条件が成立したとＣＰＵ３が判断した場合、ＣＰＵ３は、図２に示すビジーウェイト処理を終了する。一方、Ｓ１１において、ビジーウェイト処理の終了条件が成立していないとＣＰＵ３が判断した場合は、Ｓ１２へと進み、ＣＰＵ３は、コンテキスト退避処理を投機的に実行する。Ｓ１２において実行されるコンテキスト退避処理は、コンテキスト情報をスタック２１に退避させる処理である。コンテキスト情報は、ＣＰＵ３が内蔵するレジスタ群（例えば、ＰＳＷ１３、ＰＣ１４、及び汎用レジスタ１６。）に格納された格納値等を含む情報群である。
【００２９】
一般に、割り込み処理を実行する際には、このようなコンテキスト情報をＣＰＵ３からスタック２１に退避させることにより、割り込み処理実行前のＣＰＵ３の状態を保存する。そして、割り込み処理の実行後は、スタック２１に保存されていたコンテキスト情報をＣＰＵ３に復帰させることにより、ＣＰＵ３の状態を割り込み処理実行前相当の状態に戻すことができる。ただし、本実施形態の場合、ＣＰＵ３は、割り込み要求を受け付けていなくてもＳ１２を実行する。すなわち、Ｓ１２を実行する時点で、割り込み処理を実行する状況に至っているか否かは不定である。
【００３０】
また、本実施形態の場合、Ｓ１２では、図２中に示した時点Ｐまで処理が進んだ状況下におけるコンテキスト情報をＳ１２において生成し、生成されたコンテキスト情報をスタック２１に退避させる。すなわち、Ｓ１２においてスタック２１に退避させるコンテキスト情報は、Ｓ１２を実行している時点におけるコンテキスト情報そのものではない。例えば、Ｓ１２を実行している時点と上記時点ＰとではＰＣ１４の格納値が相違する。また、処理の内容に応じてＰＳＷ１３や汎用レジスタ１６の格納値も相違し得る。このようなコンテキスト情報を退避させる理由については後述する。
【００３１】
さらに、本実施形態の場合、Ｓ１２では、コンテキスト情報をスタック２１に退避させるものの、この時点ではＳＰ１５の格納値を変更しない。すなわち、スタック２１として利用されている記憶領域にはコンテキスト情報が保存されるが、ＳＰ１５による管理上は、コンテキスト情報が保存された記憶領域を未使用領域扱いのままにする。このような扱いにする理由についても後述する。
【００３２】
以上のようなＳ１２を終えたら、Ｓ１３へと進み、ＣＰＵ３は、投機的な退避状態を設定する。Ｓ１３では、Ｓ１２が完了したのに伴ってＣＰＵ３の状態が投機的な退避状態になった旨の情報が、割り込み処理等からも参照可能なフラグに保存される。なお、このようなフラグは、例えばＰＳＷ１３内に格納されてもよいし、ＲＡＭ５に確保された共有メモリ領域に格納されてもよい。
【００３３】
続いて、Ｓ１４へと進み、ＣＰＵ３は、ビジーウェイト処理の終了条件が成立したか否かを判断する。Ｓ１４では、Ｓ１１と同様な判断が行われる。Ｓ１４において、ビジーウェイト処理の終了条件が成立していないとＣＰＵ３が判断した場合は、Ｓ１４へと戻る。これにより、Ｓ１４で否定判断がなされる間は、Ｓ１４を繰り返すループ処理が実行されることになる。
【００３４】
一方、Ｓ１４において、ビジーウェイト処理の終了条件が成立したとＣＰＵ３が判断した場合は、Ｓ１５へと進み、ＣＰＵ３は、投機的な退避状態を解除する。Ｓ１５では、Ｓ１３において設定された情報が解除される。例えば、Ｓ１３においてフラグがオンにされる場合は、Ｓ１５においてフラグがオフにされる。そして、Ｓ１５を終えたら、ＣＰＵ３は、図２に示すビジーウェイト処理を終了する。
【００３５】
なお、ビジーウェイト処理を終了した後は、ビジーウェイト処理へと移行した原因が解消されている。そこで、ＣＰＵ３は、ビジーウェイト処理へ移行する前に実行していたタスク等を再開する。ただし、このようなタスクの再開以降の処理は、本開示では要部ではないので、これ以上の説明は省略する。
【００３６】
［割り込み処理］
次に、ＥＣＵ１において実行される割り込み処理について、図３に示すフローチャートに基づいて説明する。図３に示す割り込み処理は、ＣＰＵ３において割り込み要求を受け付けたことを契機にして、ＣＰＵ３において割り込みハンドラ３２が起動され、割り込みハンドラとして機能するＣＰＵ３によって実行される処理である。
【００３７】
割り込み処理を開始すると、Ｓ２１へと進み、ＣＰＵ３は、投機的な退避状態にあるか否かを判断する。Ｓ２１においては、上述のＳ１３が既に実行され、かつ、上述のＳ１５が未だ実行されていない場合に、Ｓ１３においてセットされるフラグ等に基づいて、投機的な退避状態にあると判断される。
【００３８】
Ｓ２１において投機的な退避状態にあると判断された場合は、Ｓ２２へと進み、ＣＰＵ３は、ＳＰ１５を変更する。すなわち、上述のＳ１２を実行する時点では変更されなかったＳＰ１５の格納値が、Ｓ２２を実行する時点で変更される。これにより、Ｓ１２においてスタック２１に保存されたコンテキスト情報は、ＳＰ１５による管理上でも、スタック２１に退避されている扱いになる。
【００３９】
一般に、コンテキスト情報をスタック２１に退避させる処理は、Ｓ２２と同様なタイミングで実行され、この時点でＳ１２相当の処理及びＳ２２相当の処理が実行される。しかし、本実施形態においては、上述のようなビジーウェイト処理の中でＳ１２を済ませておき、割り込み要求の受け付け後はＳ２２を実行する。これにより、割り込み要求の受け付け後には、Ｓ１２相当の処理を実行しなくても済み、その分だけ割り込み処理を迅速に開始することができる。
【００４０】
一方、Ｓ２１において投機的な退避状態にはないと判断された場合は、Ｓ２３へと進み、ＣＰＵ３は、コンテキスト退避処理を実行して、ＳＰ１５を変更する。Ｓ２３では、Ｓ１２相当の処理及びＳ２２相当の処理の双方が実行される。ただし、Ｓ１２では、割り込み要求がないにもかかわらず、投機的にコンテキスト情報の退避を行うのに対し、Ｓ２３では、割り込み要求を受け付けた後に、コンテキスト情報の退避を行っていることになる。
【００４１】
なお、上述のようなビジーウェイト処理の中で、Ｓ１２に加えてＳ２２相当の処理を済ませてもよい。ただし、この場合は、割り込み要求が発生しなくてもＳ２２相当の処理を実行することになる上に、ビジーウェイト処理を終了する際にはＳＰ１５を元の値に戻す処理が必要となる。したがって、このようなオーバーヘッドをも解消する観点からは、図２及び図３に示すような処理の方が好ましい。
【００４２】
さらに、Ｓ１２に加えてＳ２２相当の処理が実行され、かつ、Ｓ１３が未だ実行されていない状態で割り込みが発生した場合には、割り込み処理の中のＳ２１で投機的な退避状態にはないと判断されることがある。この場合、Ｓ２３においてもコンテキスト退避処理及びＳＰ１５の変更処理が行われると、その結果として、コンテキスト退避に使用されるスタック量が従来技術よりも増加する。この点、図２及び図３に示す処理であれば、スタック量が従来技術よりも増加するという問題は発生しない。よって、このような観点からも、図２及び図３に示す処理の方が好ましい。
【００４３】
上述のようなＳ２３が実行されるのは、上述のビジーウェイト処理以外の処理の実行中（例えば、タスクの実行中。）に割り込み処理へ移行した場合、あるいは、上述のビジーウェイト処理において、Ｓ１３の実行前に割り込み処理へ移行した場合などである。すなわち、これらの場合においては、コンテキスト情報の投機的な退避が実行されていない場合、あるいは、コンテキスト情報の投機的な退避が完了していない場合等に該当する。そのため、Ｓ２３により、割り込み処理の中でコンテキスト情報を退避させる。
【００４４】
こうしてＳ２２又はＳ２３のいずれかが実行されると、いずれにしてもコンテキスト情報の退避と、それに応じたＳＰ１５の更新が完了することになる。そこで、Ｓ２４へと進み、ＣＰＵ３は、割り込みサービスルーチンを実行する。このＳ２４を実行することにより、割り込み要求に対応した処理が実行されることになる。
【００４５】
Ｓ２４を終えたら、Ｓ２５へと進み、ＣＰＵ３は、コンテキスト情報の復帰処理を実行する。これにより、ＣＰＵ３の状態は、割り込み処理へ移行する前の状態に復帰する。ただし、本実施形態において、上述のＳ１２によってコンテキスト情報を投機的に退避させている場合は、ＣＰＵ３は、厳密な意味で割り込み処理へ移行する直前の状態に復帰するのではなく、図２中に示した時点Ｐに復帰する。
【００４６】
これは、既に説明した通り、Ｓ１２では、図２中に示した時点Ｐまで処理が進んだ状況下におけるコンテキスト情報をＳ１２において生成し、生成されたコンテキスト情報をスタック２１に退避させているからである。コンテキスト情報が上記時点Ｐにおいてどのような値になるのかは、上記時点Ｐまでに実行される処理ステップの内容に基づいて事前に特定することができる。
【００４７】
したがって、そのような特定結果に基づいて、上記時点Ｐにおけるコンテキスト情報をＳ１２において生成するようなプログラムを設計しておくことができる。上記時点Ｐにおけるコンテキスト情報を退避させる理由は、割り込み処理が実行された後、割り込み処理からビジーウェイト処理へ復帰する際に、上記時点Ｐへ強制的に復帰させるためである。
【００４８】
Ｓ１４を繰り返すループ処理では、ＣＰＵ３においていくつかのレジスタ値が変動し得る。そのため、ループ処理の途中で割り込み要求を受け付けた場合、割り込み処理を終えた後に、正確に割り込み要求を受け付けた時点へと復帰するには、割り込み要求を受け付けた時点におけるコンテキスト情報をスタック２１に退避させる必要がある。
【００４９】
しかし、Ｓ１４を繰り返すループ処理は、ビジーウェイト処理の終了条件が成立したか否かを判断する処理であり、その判断がいくつかの手順を踏んで実施される場合、それらの手順の途中へ厳密に復帰しなくても、それらの手順を最初からやり直せばよい。したがって、Ｓ１４を繰り返すループ処理において、コンテキスト情報の一部が変動するとしても、そのような変動値はＣＰＵ３の状態を上記時点Ｐへ戻す上では不要なので、上記Ｓ１２が実行されていれば十分ということになる。なお、Ｓ２５を終えたら、図３に示す割り込み処理を終了する。
【００５０】
［処理に要する時間が短縮される例］
次に、上記各処理により、処理に要する時間が短縮される例を、図４のタイミングチャートに基づいて説明する。図４において、上段に示した例は、従来同様に、割り込み要求の受け付け後にコンテキスト退避処理を実行する例である。下段に示した例は、上述した各処理により、ビジーウェイト処理中にコンテキスト退避処理を実行する例である。
【００５１】
上段に示した処理及び下段に示した処理の双方とも、タスクが処理を継続できない際には、ビジーウェイト処理に移行する。そして、ビジーウェイト処理に移行した後、下段に示した処理では、投機的にコンテキスト退避処理を実行する。上段に示した処理では、単にビジーウェイト処理を継続しており、この点で上段に示す処理と下段に示す処理は相違する。
【００５２】
その後、上段に示した処理及び下段に示した処理の双方とも、同じタイミングで割り込み要求を受け付けると、割り込みハンドラ３２が起動され、処理を開始する。このとき、下段に示した処理では、既に投機的にコンテキスト退避処理を実行済みとなっているので、この時点ではコンテキスト退避処理を実行することなく、図中の時刻ｔ１に至った時点で、割り込みサービスルーチン３３を起動することができる。
【００５３】
これに対し、上段に示した処理では、割り込みサービスルーチン３３を起動する前に、コンテキスト退避処理を実行する。そのため、ここでのコンテキスト退避処理に時間を要する分だけ、割り込みサービスルーチン３３の起動が遅れる。その結果、図中の時刻ｔ２に至った時点でないと、割り込みサービスルーチン３３を起動することができない。よって、割り込みサービスルーチン３３を起動した後の処理に要する時間は同等であっても、上段に示した処理では、図４に示す時刻ｔ２と時刻ｔ１との時差の分だけ処理の終了が遅れることになる。
【００５４】
つまり、上段に示した処理では、割り込み要求の受け付けから割り込みサービスルーチン３３の起動までの遅延時間が、下段に示した処理よりも増大する。また、割り込み要求の受け付けから割り込みハンドラ３２による処理の終了までに要する時間（すなわち、割り込み処理に要する時間。）が増大し、ＣＰＵ３の処理負荷が増大する。
【００５５】
エンジンＥＣＵの場合、高効率なエンジンを実現するためには、例えば、点火制御のタイミングを適正化することが重要である。点火制御では、一定のクランク角毎に発生する割り込み要求によって割り込みハンドラ３２を起動し、割り込みハンドラ３２によって実行される割り込み処理により、所期の制御を実現することが多い。そのため、割り込み要求が発生してから割り込みハンドラ３２が動作するまでに大きな遅延があると、適切なタイミングで点火処理を行うことが難しくなる。その結果、エンジンの効率を向上させることが困難になる。
【００５６】
この点、図４の下段に示したような処理であれば、上段に示したような処理に比べ、割り込み要求から割り込みサービスルーチンの起動に至るまでの遅延時間を削減できるので、より適切なタイミングで点火処理を行うことができるようになる。
【００５７】
また、別の例としては、高効率なエンジンを実現するための要求として、より細かいクランク角間隔での制御が求められることがある。この場合、割り込みハンドラ３２がより高頻度に動作する状況が求められる。割り込みハンドラ３２が高頻度で動作した際、割り込みハンドラ３２が動作する際のオーバーヘッドが大きいと、ＣＰＵ３の処理負荷が増大する。そのため、性能が低いＥＣＵでは破綻を招くため、より処理速度が速い高性能なＥＣＵが必要になる。
【００５８】
この点、図４の下段に示したような処理であれば、上段に示したような処理に比べ、割り込み要求から割り込みハンドラ３２による処理の終了までに要する時間を削減できるので、ＥＣＵ１は、より早期に負荷から解放され、次の処理を実行することが可能となる。したがって、ＣＰＵ３自体の性能を過度に向上させなくても、割り込みハンドラ３２がより高頻度に動作する状況に対応する余裕が生まれ、より細かいクランク角間隔での制御にも対応可能となる。
【００５９】
［効果］
以上説明したように、上記ＥＣＵ１によれば、Ｓ１２において、割り込み要求を受け付けていないにもかかわらず、コンテキスト情報を投機的にスタック２１に退避させる。そのため、図３に示す割り込み処理の中で、コンテキスト情報をスタック２１に退避させる場合に比べ、割り込み要求の受け付けから割り込み処理を開始するまでの遅延時間を削減でき、割り込み処理をより迅速に開始することができる。また、割り込み処理の開始から終了までに要する時間も短縮されるので、割り込み処理に起因するＣＰＵ３の負荷を軽減することができる。
【００６０】
また、上記ＥＣＵ１の場合、Ｓ１１でビジーウェイト処理の終了条件が成立していると判断した場合には、Ｓ１２の退避処理を無駄に実行しない。したがって、そのような退避処理を実行しない分だけ、ＣＰＵ３の性能低下を防ぐことができる。
【００６１】
また、上記ＥＣＵ１の場合、Ｓ１２で退避処理が終了してから、Ｓ２２でＳＰ１５を変更する。したがって、例えば、Ｓ１２の退避処理の途中で割り込み要求を受け付けた場合など、仮にスタック２１へのデータの格納を開始していたとしても、ＳＰ１５は変更されていない状態にある。そのため、その時点で単に割り込み処理へ移行しても、ＳＰ１５による管理上、スタック２１は全く消費されていないことになる。したがって、Ｓ１２よりも前の時点でＳＰ１５を変更してからＳ１２の退避処理を開始する場合とは異なり、退避処理の途中で割り込み要求を受け付けた場合に、ＳＰ１５を元に戻さないとスタック２１消費量が無駄に増大してしまう、という問題を回避することができる。あるいは、そのような問題を回避するために、割り込み要求を受け付けた後に、ＳＰ１５を元に戻すための処理が増えてしまうのを防ぐことができる。
【００６２】
また、上記ＥＣＵ１の場合、Ｓ１２において退避処理を実行する際、ビジーウェイト処理中のループ処理（すなわち、Ｓ１４を繰り返す処理。）を開始する時点ＰにおいてＣＰＵ３が保持するコンテキスト情報を生成する。そして、生成したコンテキスト情報の全部を投機的にスタック２１に退避させている。そのため、ビジーウェイト処理中のループ処理のどの時点で割り込みが入っても、割り込みハンドラ３２からの復帰時には、必ずループ処理の開始地点に戻すように制御することができる。よって、ループ処理中に変動するコンテキスト情報については考慮することなく、投機的な退避処理を実施することができる。
【００６３】
（２）第二実施形態
次に、第二実施形態について説明する。第二実施形態は、基本的な構成は第一実施形態と同様であり、ビジーウェイト処理の一部及び割り込み処理の一部が第一実施形態とは相違する。そのため、第一実施形態と同等な構成については、第一実施形態と同一の符号を付すことにして、その詳細な説明を省略する。
【００６４】
［ビジーウェイト処理］
第二実施形態におけるビジーウェイト処理について、図５に示すフローチャートに基づいて説明する。なお、図５に示すビジーウェイト処理も、起動される契機は第一実施形態と同様である。ビジーウェイト処理を開始すると、ＣＰＵ３は、Ｓ３１を実行する。Ｓ３１は、第一実施形態におけるＳ１１と同等な処理となるので、ここでの詳細な説明は省略する。
【００６５】
Ｓ３１において、ビジーウェイト処理の終了条件が成立していないとＣＰＵ３が判断した場合は、Ｓ３２へと進み、ＣＰＵ３は、コンテキスト退避処理を投機的に実行する。Ｓ３２は、第一実施形態のＳ１２に対応する処理であるが、その処理内容がＳ１１とは相違する。具体的には、Ｓ１２では、図２中に示した時点Ｐまで処理が進んだ状況下におけるコンテキスト情報を生成して、生成されたコンテキスト情報をスタック２１に退避させていた。
【００６６】
これに対し、Ｓ３２では、コンテキスト情報のうち、ビジーウェイト処理では使用しないレジスタの値のみを、投機的にスタック２１へ退避させる。Ｓ３２を終えたら、以降、ＣＰＵ３は、Ｓ３３，Ｓ３４，及びＳ３５を実行する。これらＳ３３，Ｓ３４，及びＳ３５は、第一実施形態におけるＳ１３，Ｓ１４，及びＳ１５と同等な処理となるので、ここでの詳細な説明は省略する。なお、Ｓ３１で肯定判断がなされた場合、又はＳ３５を終えた場合は、図５に示すビジーウェイト処理を終了する。
【００６７】
［割り込み処理］
次に、第二実施形態における割り込み処理について、図６に示すフローチャートに基づいて説明する。図６に示す割り込み処理も、起動される契機は第一実施形態と同様である。割り込み処理を開始すると、ＣＰＵ３は、Ｓ４１を実行する。Ｓ４１は、第一実施形態におけるＳ２１と同等な処理となるので、ここでの詳細な説明は省略する。
【００６８】
Ｓ４１において投機的な退避状態にあると判断された場合は、Ｓ４２へと進み、ＣＰＵ３は、コンテキスト退避処理を実行して、ＳＰ１５を変更する。Ｓ４２は、第一実施形態のＳ２２に対応する処理であるが、その処理内容がＳ２１とは相違する。具体的には、Ｓ２２では、ＳＰ１５の変更のみを行っていたが、Ｓ４２では、コンテキスト情報の退避処理をも実行する。
【００６９】
ただし、Ｓ４２でスタック２１に退避させるコンテキスト情報は、Ｓ３２では退避させなかった情報のみとなる。すなわち、第二実施形態では、全コンテキスト情報のうち、ビジーウェイト処理では使用しないレジスタの値をＳ３２で投機的にスタック２１へ退避させ、ビジーウェイト処理で使用するレジスタの値については、Ｓ４２でスタック２１へ退避させる。
【００７０】
なお、Ｓ４１で否定判断がなされた場合は、Ｓ４３を実行する。Ｓ４２又はＳ４３を終えた場合は、Ｓ４４及びＳ４５を実行して、図６に示す割り込み処理を終了する。これらＳ４３，Ｓ４４，及びＳ４５は、第一実施形態におけるＳ２３，Ｓ２４，及びＳ２５と同等な処理となるので、ここでの詳細な説明は省略する。
【００７１】
［効果］
以上説明したような第二実施形態の場合、割り込み要求を受け付けた後、Ｓ４２においてコンテキスト情報をスタック２１に退避させるので、第一実施形態に比べると、割り込み要求を受け付けた後に実行する処理が若干増えることになる。ただし、割り込み要求を受け付けた後に、全てのコンテキスト情報をスタック２１に退避させる技術に比べれば、割り込み要求を受け付けた後に退避させるべきデータの量が削減される。
【００７２】
したがって、全てのコンテキスト情報をスタック２１に退避させる技術よりも、割り込み要求の受け付けから割り込み処理を開始するまでの遅延時間を削減でき、割り込み処理をより迅速に開始することができる。また、割り込み処理の開始から終了までに要する時間も短縮されるので、割り込み処理に起因するＣＰＵ３の負荷を軽減することができる。
【００７３】
また、第一実施形態の場合は、割り込みハンドラ３２からの復帰時には、必ずループ処理の開始地点に戻すように制御していたが、第二実施形態の場合、割り込みハンドラ３２からの復帰時には、割り込み直後の状態に復帰することができる。したがって、ビジーウェイト処理の中でコンテキスト情報が変動し、その変動値を正確に再現する必要がある場合には、第二実施形態の構成を採用すると好適である。すなわち、第二実施形態の構成を採用することにより、例えば、ＰＣ１４の格納値、比較演算に使用する汎用レジスタ１６の格納値、状態フラグ等といったＰＳＷ１４の格納値等、処理の実行時に変動するレジスタ値を割り込みハンドラ３２側で正しく保存できる。
【００７４】
（３）その他の実施形態
以上、情報処理装置について、例示的な実施形態を挙げて説明したが、上述の実施形態は本開示の一態様として例示されるものに過ぎない。すなわち、本開示は、上述の例示的な実施形態に限定されるものではなく、本開示の技術的思想を逸脱しない範囲内において、様々な形態で実施することができる。
【００７５】
例えば、上記実施形態では、ＥＣＵ１が、エンジンＥＣＵである場合について、具体的な利点を例示したが、エンジンＥＣＵ以外のＥＣＵに本開示の技術思想を適用してもよいことはもちろんである。
【００７６】
また、上記実施形態における一つの構成要素が有する複数の機能を、複数の構成要素によって実現したり、一つの構成要素が有する一つの機能を、複数の構成要素によって実現したりしてもよい。また、複数の構成要素が有する複数の機能を、一つの構成要素によって実現したり、複数の構成要素によって実現される一つの機能を、一つの構成要素によって実現したりしてもよい。また、上記実施形態の構成の一部を省略してもよい。また、上記実施形態の構成の少なくとも一部を、他の上記実施形態の構成に対して付加又は置換してもよい。なお、特許請求の範囲に記載した文言のみによって特定される技術思想に含まれるあらゆる態様が本開示の実施形態である。
【００７７】
また、上述したＥＣＵ１の他、当該ＥＣＵ１を構成要素とするシステム、当該ＥＣＵ１としてコンピュータを機能させるためのプログラム、このプログラムを記録した半導体メモリ等の非遷移的実態的記録媒体、ＥＣＵ１において実行されていたビジーウェイト処理方法及び割り込み処理方法など、種々の形態で本開示を実現することもできる。
【００７８】
なお、上述の実施形態で示したＣＰＵ３が、本開示でいう処理部に相当する。また、上述の実施形態で示したＲＡＭ５が、本開示でいう記憶部に相当する。また、上述の実施形態で示したスタック２１が、本開示でいうコンテキスト情報を退避させるために利用される記憶領域に相当する。また、上述の実施形態で示したＳ１２，Ｓ３２が、本開示でいう退避処理に相当する。また、上述の実施形態で示したＳ２１，Ｓ４１が、本開示でいう判定処理に相当する。
【符号の説明】
【００７９】
１…ＥＣＵ、３…ＣＰＵ、５…ＲＡＭ、７…バス、１１…演算装置、１２…ロードストア装置、１３…ＰＳＷ、１４…ＰＣ、１５…ＳＰ、１６…汎用レジスタ、２１…スタック、２３…プログラム格納領域。
【図１】
0006493190.tif 000002
【図２】
0006493190.tif 000003
【図３】
0006493190.tif 000004
【図４】
0006493190.tif 000005
【図５】
0006493190.tif 000006
【図６】
0006493190.tif 000007