(57)【要約】【課題】本発明は、シングルプロセッサシステムにおいて、実行中の処理に排他的制御がかけられていても、優先度の高い処理を先に処理できる情報処理装置を提供することを目的とする。【解決手段】情報処理を実行する単一のプロセッサ１０と、  前記情報処理を行うにあたり、参照又は書き込み対象とされる共有資源２０と、  割込処理を検知する割込検知手段１１と、  前記プロセッサが実行する各処理毎の優先度を管理する優先度監視手段１２と、を有する情報処理装置であって、  前記共有資源がスピンロックにより排他制御をかけられて前記プロセッサが処理実行中に、前記割込検知手段が割込処理の発生を検知したときには、前記優先度監視手段は、実行中処理と前記割込処理の優先度を比較し、  前記割込処理の優先度が前記実行中処理よりも高いときには、前記プロセッサは、前記割込処理を中断し、前記実行中処理が前記共有資源の解放を行った後、前記割込処理を再開することを特徴とする。【選択図】図６
2010044699.tif 000002
【特許請求の範囲】
【請求項１】
情報処理を実行する単一のプロセッサと、
前記情報処理を行うにあたり、参照又は書き込み対象とされる共有資源と、
割込処理を検知する割込検知手段と、
前記プロセッサが実行する各処理毎の優先度を管理する優先度監視手段と、を有する情報処理装置であって、
前記共有資源がスピンロックにより排他制御をかけられて前記プロセッサが処理実行中に、前記割込検知手段が割込処理の発生を検知したときには、前記優先度監視手段は、実行中処理と前記割込処理の優先度を比較し、
前記割込処理の優先度が前記実行中処理よりも高いときには、前記プロセッサは、前記割込処理を中断し、前記実行中処理が前記共有資源の解放を行った後、前記割込処理を再開することを特徴とする情報処理装置。
【請求項２】
前記割込処理の中断は、前記プロセッサの実行権を、前記割込処理から前記実行中処理に切り替える処理を実行することにより行われることを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記割込処理の再開は、前記プロセッサの実行権を、前記実行中処理から前記割込処理に復帰させる処理を実行することにより行われることを特徴とする請求項２に記載の情報処理装置。
【請求項４】
前記実行中処理は、前記割込処理よりも優先度の低い低優先度割込処理であることを特徴とする請求項１乃至３のいずれか一項に記載の情報処理装置。
【請求項５】
前記実行中処理及び前記割込処理は、前記共有資源内で不連続な使用スタック領域を割り当てられていることを特徴とする請求項１乃至４のいずれか一項に記載の情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置に関し、特に、単一のプロセッサを有する情報処理装置に関する。
【背景技術】
【０００２】
従来から、シングルプロセッサ構成のシステムにおいて、プロセッサがメモリに対して連続的にリクエストを発行する場合のリードリクエストの処理時間を短縮することを目的として、リードリクエストに対するリクエストアクノレッジをアサートしてからデータアクノレッジをアサートするまでの間に、後続のリクエストがアサートされた場合に、当該後続のリクエストは受け付けられてパイプライン処理され、先行的に後続のリードリクエストの処理を開始することによって、リードリクエストに続くリクエストの処理時間を短縮するようにしたシステムが知られている（例えば、特許文献１参照）。
【特許文献１】特開２００５−１９０３２０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
しかしながら、上述の特許文献１に記載の構成では、ライト処理を伴う処理においては、排他的制御が必須となるため、ライトリクエストが最初になされた場合には、排他的制御のため後続のライトリクエストをパイプライン処理することはできず、ライト処理には対応できないという問題があった。
【０００４】
そこで、本発明は、シングルプロセッサシステムにおいて、先に実行している処理に排他的制御がかけられている場合であっても、先に実行している処理の完了を待つことなく、優先度の高い処理を先に処理することができる情報処理装置を提供することを目的とする。
【課題を解決するための手段】
【０００５】
上記目的を達成するため、第１の発明に係る情報処理装置は、情報処理を実行する単一のプロセッサと、
前記情報処理を行うにあたり、参照又は書き込み対象とされる共有資源と、
前記プロセッサが実行する各処理毎の優先度を管理する優先度監視手段と、
割込処理を検知する割込検知手段と、を有する情報処理装置であって、
前記共有資源がスピンロックにより排他制御をかけられて前記プロセッサが処理実行中に、前記割込検知手段が割込処理の発生を検知したときには、前記優先度監視手段は、実行中処理と前記割込処理の優先度を比較し、
前記割込処理の優先度が前記実行中処理よりも高いときには、前記プロセッサは、前記割込処理を中断し、前記実行中処理が前記共有資源の解放を行った後、前記割込処理を再開することを特徴とする。
【０００６】
これにより、シングルプロセッサにおいて、先に実行している処理に排他的制御がかけられている場合であっても、先に実行している処理を待つことなく、優先レベルの高い処理を優先的に処理させることができる。
【０００７】
第２の発明は、第１の発明に係る情報処理装置において、
前記割込処理の中断は、前記プロセッサの実行権を、前記割込処理から前記実行中処理に切り替える処理を実行することにより行われることを特徴とする。
【０００８】
これにより、プロセッサの実行権を高優先度の割込処理から低優先度の実行中処理に一旦渡すことができ、共有資源を解放させる処理を行わせることができる。
【０００９】
第３の発明は、第２の発明に係る情報処理装置において、
前記割込処理の再開は、前記プロセッサの実行権を、前記実行中処理から前記割込処理に復帰させる処理を実行することにより行われることを特徴とする。
【００１０】
これにより、低優先度の実行中処理に共有資源を解放させた後は、高優先度の割込処理を再開させることができ、高優先度の割込処理が共有資源を占有して先に処理を行うことができる。
【００１１】
第４の発明は、第１〜３のいずれかの発明に係る情報処理装置において、
前記実行中処理は、前記割込処理よりも優先度の低い低優先度割込処理であることを特徴とする。
【００１２】
これにより、排他的制御機構を有する低優先度の割込処理が先に処理を行っている場合であっても、高優先度の割込処理に先に処理を行わせることができ、本来の目的に沿った優先度で処理を実行することができる。
【００１３】
第５の発明は、第１〜４のいずれかの発明に係る情報処理装置において、
前記実行中処理及び前記割込処理は、前記共有資源内で不連続な使用スタック領域を割り当てられていることを特徴とする。
【００１４】
これにより、実行中処理と割込処理との切り替えを行っても、各々の処理に使用するスタック領域を破壊するおそれが無く、安全に切り替え処理や復帰処理を行うことができる。
【発明の効果】
【００１５】
本発明によれば、シングルプロセッサシステムにおいて、排他的制御がかけられて先に処理が行われていても、優先度の高い割込処理を先に処理させることができる。
【発明を実施するための最良の形態】
【００１６】
以下、図面を参照して、本発明を実施するための最良の形態の説明を行う。
【００１７】
図１は、本発明を適用した実施例に係る情報処理装置の全体構成を示した図である。図１において、本実施例に係る情報処理装置は、プロセッサ１０と、メモリ５０とを有する。
【００１８】
プロセッサ１０は、制御装置と演算装置の役割を果たす処理装置であり、種々の情報処理を実行する処理手段である。プロセッサ１０は、ＣＰＵ（Central  Processing  Unit）又はＭＰＵ（Micro  Processing  Unit）と呼んでもよい。プロセッサ１０は、メモリ５０に記憶されたプログラムの指示に従って他の装置を制御したり、演算処理を行ったりし、用途に応じた種々の処理を行う。本実施例に係る情報処理装置は、種々の用途に適用することができ、例えば、車両用の電子制御ユニット（Electronic  Control  Unit）、携帯電話、電卓等の種々の電子機器に適用することができる。
【００１９】
プロセッサ１０は、割込検知手段１１を備える。割込検知手段１１は、プロセッサ内部又は外部からの割込発生要因により発生した割込処理を検知する。
【００２０】
プロセッサ１０は、プロセッサ１０が実行する各処理の優先度を管理する優先度監視手段１２を備える。割込検知手段１１により割込処理の発生が検知されたら、優先度監視手段１２は、現在実行中の処理と、割込検知手段１１により検知された割込処理との優先度を比較し、優先順位の高い処理をプロセッサ１０が優先的に処理実行するように設定がなされている。なお、処理の優先度は、実行レベルと呼んでもよく、実行レベルの高い処理の方が、優先順位は高いことになる。よって、優先度監視手段は、実行レベル監視手段と呼んでもよい。
【００２１】
なお、優先度監視手段１２は、図１に示すように、プロセッサ１０内で、割込検知手段１１の一部として組み込まれて構成されてもよい。
【００２２】
メモリ５０は、プロセッサ１０に命令を与えて動作させるプログラム、計算対象となるデータ、プロセッサ１０の計算結果等を記憶する記憶手段である。本実施例に係る情報処理装置のメモリ５０は、共有資源２０と、割込処理実行状態管理領域３０と、共有資源管理領域４０とを含む。
【００２３】
共有資源２０は、プロセッサ１０に実行させるプログラムを記憶した記憶手段であり、ＯＳ（オペレーティングシステム）の管理下にある通常のタスク処理の他、種々の割込処理のプログラムが記憶されている。
【００２４】
共有資源２０は、複数の処理に共有で使用される資源であるため、１つの処理に排他的に占有されている場合には、他の処理は使用することができなくなる。本実施例に係る情報処理装置においては、メモリ５０の一部の領域が共有資源２０として利用されており、共有資源２０は、割込処理１の使用スタック領域２１と割込処理２の使用スタック領域２２とを含んでいる。割込処理は、ＯＳの処理よりも優先する処理であるので、その処理を行う場合には、排他的制御を行い、共有資源２０を占有する。詳細は後述するが、本実施例に係る情報処理装置においては、そのような割込処理を、適切に実行する機能を有する。
【００２５】
複数の割込処理の間には、優先度が設定されていてよく、例えば、割込処理２が、割込処理１より高優先順位に設定されていてもよい。本実施例に係る情報処理装置においては、低優先度の割込処理が排他的制御をかけて処理実行中に、それよりも高優先度の割込処理が発生したときに、排他的制御を一旦解いて高優先度の割込処理を先に実行させる処理を行うが、詳細は後述する。
【００２６】
共有資源２０内には、各処理に応じて使用スタック領域２１、２２、２３が割り当てられているが、各使用スタック領域２１、２２、２３同士は、共有資源２０内の不連続なアドレス空間に配置されてよい。この点、詳細は後述する。また、各使用スタック領域２１、２２、２３には、基底番地が設定されている。図１においては、割込処理１の使用スタック領域２１の基底番地はＸ番地、割込処理２の使用スタック領域２２の基底番地はＹ番地及びタスク処理の使用スタック領域２３の基底番地はＺ番地に設定されている。これにより、各処理の使用タスク領域２１、２２、２３が定められる。
【００２７】
なお、共有資源２０は、図１には、１つの共有資源２０が示されているが、複数備えられていてもよい。
【００２８】
割込処理実行状態管理領域３０は、割込処理の実行状態を管理する記憶領域であり、各割込処理に応じて、管理情報を記憶する記憶領域が定められてよい。図１においては、割込処理１管理情報記憶領域３１、割込処理２管理情報記憶領域３２、・・・第ｎの割込処理管理情報記憶領域が示されている。各割込処理の管理情報は、割込処理の実行状態に関する種々の項目の情報を記憶していてよい。例えば、図１においては、割込処理２管理情報記憶領域３２が、実行状態記憶領域３２ａ、スタック基底番地記憶領域３２ｂ、使用バンク番号記憶領域３２ｃ及び優先順位記憶領域３２ｄを有しており、これらの情報を記憶している。これらの項目別の記憶領域３２ａ〜３２ｄは、スペースの都合上図示しないが、割込処理１管理情報記憶領域３１も含む第ｎの割込処理管理情報記憶領域が、共通の項目について各々の記憶領域を備えていてよい。
【００２９】
実行状態記憶領域３２ａは、割込処理の実行状態を示す記憶領域であり、例えば、該当する割込処理が実行中、中断中又は休止中であるか否かを示すようにしてもよい。
【００３０】
スタック基底番地記憶領域３２ｂは、該当する割込処理が使用するスタック領域の基底番地を示した情報を記憶する領域である。割込処理２の場合、Ｙ番地が記憶される。
【００３１】
使用バンク番号記憶領域３２ｃは、該当する割込処理が使用するレジスタバンクの番号の情報を記憶する領域である。各割込処理は、バンク切り替えによりメモリやレジスタが切り替えられるように設定されていてよく、使用バンク番号記憶領域３２ｃは、該当する割込処理に対応する使用バンク番号を記憶する。
【００３２】
優先順位記憶領域３２ｄは、割込処理の優先順位の情報を記憶する記憶領域である。優先順位記憶領域３２ｄは、該当する割込処理の優先順位を、例えば１〜２５６というように数字で記憶しておく領域である。これにより、割込処理の優先順位を管理することができる。
【００３３】
共有資源管理領域４０は、共有資源２０の管理情報を記憶する記憶領域である。共有資源管理領域４０は、共有資源２０が複数備えられている場合には、各々の共有資源について、共有資源管理情報記憶領域を有する。図１においては、共有資源１管理情報記憶領域４１、共有資源２管理情報記憶領域４２・・・共有資源ｎ管理情報記憶領域が示されている。
【００３４】
各共有資源管理情報記憶領域は、取得状態の情報と、取得処理ＩＤの情報を記憶する領域を備える。図１においては、共有資源２管理情報記憶領域４２が、取得状態記憶領域４２ａと、取得処理ＩＤ記憶領域４２ｂを備えた状態が示されている。
【００３５】
取得状態記憶領域４２ａは、該当する共有資源の占有状態を示す領域であり、例えば、占有状態であれば１、解放状態であれば０というように占有状態を示してよい。取得処理ＩＤ記憶領域４２ｂは、割込処理、タスク処理を示す処理単位の一意なＩＤを示す情報を記憶する領域である。これにより、該当する共有資源を、どの処理が取得しているかを知ることができる。
【００３６】
次に、図２を用いて、本実施例に係る情報処理装置の処理内容の概要を、従来の処理内容との比較において説明する。図２は、本実施例に係る情報処理装置と従来の情報処理装置の処理内容の概要比較図である。図２（ａ）は、本実施例に係る情報処理装置の処理内容の概要を示した図であり、図２（ｂ）は、従来の処理内容の概要を示した図である。
【００３７】
図２（ｂ）において、共有資源と低優先割込処理と高優先割込処理とが示されている。横軸は、時間軸である。まず、時刻ｔ１で低優先の割込処理が発生したときには、低優先の割込処理は、時刻ｔ２で共有資源２０の獲得に成功する。このとき、排他的制御機構により、共有資源２０は、低優先割込処理に排他的に占有された状態である。低優先割込処理が共有資源２０を排他的に占有している状態で、時刻ｔ３で低優先割込処理よりも優先順位が高い高優先割込処理による割り込みが発生したときには、プロセッサ１０の実行権は高優先割込処理が保持するが、共有資源２０は低優先割込処理が排他的に占有しているため、高優先割込処理は共有資源２０を獲得することができない。よって、時刻ｔ４に示すように、高優先割込処理は、共有資源２０の獲得に失敗する。その後、高優先処理は、プロセッサ１０の実行権を確保した状態で、共有資源２０の解放を待ち続けるため、処理を継続することができない。
【００３８】
一方、図２（ａ）は、本実施例に係る情報処理装置の処理内容の概要を示した図である。共有資源、低優先割込処理及び高優先割込処理の処理内容が、横軸を時間軸として配列されている点は、図２（ｂ）と同様である。
【００３９】
図２（ａ）において、時刻ｔ１で低優先割込処理が発生し、時刻ｔ２で共有資源２０を獲得したとする。このとき、低優先割込処理は、スピンロックによる排他的制御機構により、排他的に共有資源２０を占有する。そして、時刻ｔ３で実行中の低優先割込処理よりも優先度の高い高優先割込処理が発生したときには、プロセッサ１０の実行権は、高優先割込処理が保持する。そして、高優先割込処理は、処理の実行に必要な共有資源２０を獲得しようとするが、共有背源２０は、低優先割込処理に排他的に占有されているので、獲得できず、時刻ｔ４の箇所に示すように、共有資源２０の獲得に失敗する。ここまでは、図２（ｂ）に示した従来の処理内容と同様である。
【００４０】
次に、高優先割込処理は、時刻ｔ５で、切り替え処理を実行する。この切り替え処理は、高優先割込処理の処理を一時中断し、プロセッサ１０の実行権を低優先割込処理に渡す切り替えを行う処理である。これにより、低優先割込処理は、確保している共有資源２０を用いて、低優先処理を実行することが可能な状態となるが、ここで低優先処理を最後まで先に実行するのではなく、即座に又は区切りの良い短時間だけ低優先処理を行い、時刻ｔ６に示すように、共有資源２０を解放する処理を行う。そして、時刻ｔ７で、プロセッサ１０の実行権を高優先割込処理に復帰させる復帰処理を行う。
【００４１】
高優先割込処理は、プロセッサ１０の実行権を取得したので、中断した処理を再開させるが、今度は、共有資源２０が解放されているので、時刻ｔ８に示すように、共有資源２０を獲得することができる。そして、共有資源２０を排他的に占有して高優先処理を最後まで実行することができ、高優先処理が終了したら、時刻ｔ９に示すように、共有資源２０を解放する。そして、時刻ｔ１０に示すように、プロセッサ１０の実行権を低優先割込処理に渡すことにより、低優先割込処理は、中断していた自己の処理を再開することになる。
【００４２】
このように、本実施例に係る情報処理装置によれば、高優先割込処理が共有資源２０の獲得に失敗した場合には、一旦プロセッサの実行権を、共有資源２０を占有している低優先割込に渡す切り替え処理を行う。そして、ＣＰＵ実行権を取得した低優先割込処理は速やかに共有資源２０の解放し、高優先割込処理にＣＰＵ実行権を復帰させる復帰処理を実行させることにより、高優先割込処理を低優先割込処理より先に処理を行わせることが可能となる。
【００４３】
次に、図３を用いて、本実施例に係る情報処理装置の処理内容を実現するための共有資源２０のスタック領域の配置の一例について説明する。図３は、本実施例に係る情報処理装置の共有資源２０のスタック領域の配置の一例を示した図である。
【００４４】
図３（ａ）は、タスク処理、割込処理１及び割込処理２の処理の流れを模式的に示した図の一例である。各処理の実行レベルは、割込処理２、割込処理１、タスク処理の順で実行レベルが高く、この順位で優先的に処理が実行されるように優先度監視手段１２は設定されている。また、図３（ａ）において、縦軸は時間の経過又は共有資源２０のスタック領域を模式的に示している。
【００４５】
図３（ａ）において、プロセッサ１０によりタスク処理が実行されているときに、Ａ点で割込検知手段１１により割込処理１の発生が検知されたら、優先度監視手段１２によりタスク処理と割込処理１の優先度が比較され、割込処理１の優先度が高いと判定されたら、割込処理１の処理開始点のＢ点に処理が遷移し、割込処理１の処理を開始する。このとき、割込処理１は、共有資源２０を確保するが、スピンロック機構により、排他的に共有資源２０を占有する。
【００４６】
割込処理１をプロセッサ１０が実行中に、Ｃ点で割込処理２の発生が割込検知手段１０により検知され、優先度監視手段１２により割込処理２の優先順位が割込処理１より高いと判定されたときには、割込処理２の処理開始点のＤ点に処理が遷移し、プロセッサ１０は割込処理２を実行する。ここで、共有資源２０は、割込処理１に排他制御がかけられて占有されているので、割込処理２は、共有資源の確保に失敗する。共有資源２０の確保に失敗した割込処理２は、プロセッサ１０の実行権を割込処理１に戻し、制御を割込処理１に戻す。従って、処理は、割込処理２のＥ点から、割込処理１のＣ点に遷移する。割込処理１は、プロセッサ１０の実行権を取得したので、確保した共有資源２０を用いて、割込処理１を実行するが、割込処理２の方が割込処理１よりも優先度が高く、共有資源２０の解放を促されているので、最後まで割込処理１を実行するのではなく、なるべく短時間で自己の処理を切り上げ、共有資源２０を解放する資源解放の処理を行う。資源解放処理が終わったら、割込処理１は、プロセッサ１０の実行権を割込処理２に戻す。よって、処理は、割込処理１のＦ点から、割込処理２のＥ点に戻って遷移する。
【００４７】
割込処理２は、中断していた処理をＥ点から再開し、解放された共有資源２０を確保し、割込処理２の処理を終了したら、共有資源２０を解放する。よって、処理は、割込処理２の基底番地のＹ番地から、割込処理１のＦ点に処理が遷移する。割込処理１は、中断していた処理をＦ点から再開し、解放された共有資源２０を用いて、最後まで処理を実行する。割込処理１が終了したら、共有資源２０を解放するとともに、基底番地であるＸ番地から、タスク処理のＡ点に処理が遷移し、中断していたタスク処理を再開する。そして、基底番地Ｚまでタスク処理が終了したら、タスク処理、割込処理１及び割込処理２の総ての処理が優先度順位通りに終了する。
【００４８】
本実施例に係る情報処理装置では、このような処理の遷移により、共有資源２０に排他的制御がかけられている状況であっても、高優先順位の処理から優先度に従って処理を行うことができるが、このような処理を実行するために、例えば、図３（ｂ）に示すようなスタック領域を用いてもよい。
【００４９】
図３（ｂ）は、本実施例に係る情報処理装置の共有資源２０内のスタック領域の配置の一例を示した図である。図３（ｂ）において、共有資源２０内のタスク処理、割込処理１及び割込処理２は、不連続なスタック領域の配置がなされている。このように、本実施例に係る情報処理装置は、各処理毎に不連続なスタック領域を用いるようにしてよい。これにより、各処理間で処理遷移が発生しても、データの上書きを防止することができる。
【００５０】
図３（ｂ）において、共有資源２０内のスタック領域は、一番下にタスク処理の使用スタック領域２３が割り当てされ、その上に間隔を空けて割込処理２の使用スタック領域２２が割り当てられ、その上に更に間隔を空けて割込処理１の使用スタック領域２１が割り当てられている。各処理へのスタックポインタを含むレジスタ切り替えは、バンク機構を使用して実現するものとする。初期化処理の設定として、例えば、割込処理１のバンクは１に設定し、スタック基底はＸ番地とし、割込処理２のバンクは２に設定し、スタック基底はＹ番地とし、タスク処理のバンクは１５に設定し、スタック基底はＺ番地とした場合を考える。なお、図３（ｂ）中のＡ〜Ｚの記号は、図３（ａ）と一致する。
【００５１】
まず、タスク処理を実行中に、例えばＡ点で割込処理１が発生した場合には、バンクレジスタにより現在動作中のタスク処理のバンク番号（１５）を取得し、割込処理１のバンク（１）に切り替え、スタック基底Ｘ番地より復帰情報を保存する。この動作により、タスク処理のＡ点から、割込処理１のＢ点に処理が遷移する。
【００５２】
割込処理１を開始し、割込処理１の実行中に、例えばＣ点で割込処理２が発生したときには、バンクレジスタにより現在動作中の割込処理１のバンク番号（１）を取得し、割込処理２のバンク（２）に切り替えるとともに、スタック基底Ｙ番地より復帰情報を保存する。処理は、割込処理１のＣ点から、割込処理２のＤ点に遷移する。
【００５３】
割込処理２は、Ｄ点から処理が開始されるが、資源確保に失敗するため、Ｅ点において、低優先度の割込処理１にプロセッサ１０の実行権を移す処理の遷移が実行される。よって、割込処理２の処理が一時中断し、処理は、Ｅ点から割込処理１のＣ点に遷移する。このときの処理遷移は、割込処理２の処理開始時にスタック領域に保存した割込処理１中断情報に従い実行する。また、このとき、バンクレジスタにより現在動作中の割込処理２のバンク番号（２）を取得し、割込処理１のバンク（１）に切り替えるとともに、スタック基底Ｘ番地より復帰情報を保存する。
【００５４】
割込処理１では、処理が再開されて実行されるが、ここで要求されているのは共有資源２０の解放を行うための処理であるので、短時間で割込処理１を終了するとともに、共有資源２０を解放する資源解放処理を実行する。ここで、プロセッサ１０の処理は、割込処理１のＦ点から、再び割込処理２のＥ点に戻ることになる。ここで、割込処理１から割込処理２に復帰する復帰処理は、バンクレジスタにより現在動作中の割込処理１のバンク番号（１）を取得し、割込処理２のバンク（２）に切り替えるとともに、スタック基底Ｙ番地より復帰情報を保存する。
【００５５】
割込処理２では、中断されていた処理が再開される。Ｅ点から処理が再開され、共有資源２０を確保し、割込処理２の処理を最後まで実行する。割込処理２の処理が終了したら、割込処理２のスタック領域に保存した復帰情報を元に戻し、スタック領域に保存したバンク番号をバンクレジスタへ設定して、割込処理１にプロセッサ１０の実行権を戻す。また、共有資源２０も解放する。処理状態は、割込処理２のＹ番地から割込処理１のＦ点に戻ることになる。
【００５６】
割込処理１においては、Ｆ点から処理が再開される。共有資源２０を再び占有し、割込処理１を実行する。割込処理１の実行終了後には、割込処理１のスタック領域に保存した復帰情報を戻し、スタック領域に保存したバンク番号をバンクレジスタへ設定して、タスク処理に実行権を戻す。また、共有資源２０も解放する。処理は、割込処理１のＸ番地から、タスク処理のＡ点に遷移する。
【００５７】
タスク処理は、Ａ点から再開され、Ｚ番地に到達することにより、タスク処理、割込処理１及び割込処理２は総て優先順位に従って実行される。
【００５８】
このように、不連続なアドレス空間に割込処理１の使用スタック領域２１、割込処理２の使用スタック領域２２及びタスク処理の使用スタック領域２３を配置することにより、各処理を遷移させることが可能となり、スタック領域を破壊することなく自由な移動が可能となる。
【００５９】
次に、対比のため、図４及び図５を用いて、従来の情報処理装置に用いられるスタック領域と、その処理内容との関係について説明する。
【００６０】
図４は、従来のリアルタイムＯＳでの多重割込とこれに用いられるスタック領域について示した図である。図４（ａ）は、割込処理間でも優先順位が設定できる多重割込の処理を示した図である。図４（ａ）に示すように、タスク処理の実行中に、割込処理１が発生した場合には（Ａ点）、タスク処理を中断し、割込処理１を実行する（Ｂ点）。また、割込処理１の実行中に、割込処理１よりも実行レベルの高い割込処理２が発生した場合には（Ｃ点）、割込処理１を中断して、割込処理２を実行する（Ｄ点）。割込処理２が終了したら（Ｅ点）、中断していた割込処理１を再開し（Ｃ点）、割込処理１が終了したら（Ｆ点）、タスク処理に戻り（Ａ点）、残りのタスク処理を実行するようにする。
【００６１】
図４（ｂ）は、従来の情報処理装置のスタック領域を示した図である。図４（ｂ）に示すように、従来のリアルタイムＯＳにおける割込処理の戻り先情報は、タスク処理で使用するスタック領域を連続して使用することにより、共有資源１２０を効率的に利用している。割込処理１がスピンロック機構を有しておらず、図４（ａ）に示したような実行レベル順の処理を実行でき、優先順位の高い割込処理２から順に割込処理１、タスク処理と処理してゆく場合には、このような連続配置でも問題無い。
【００６２】
図５は、低優先の割込処理が、排他的制御により共有資源２０を確保するスピンロック機構を備えている場合の各処理とスタック領域を示した図である。
【００６３】
図５（ａ）は、従来の情報処理装置の各処理間の処理内容と遷移関係を示した図である。図５（ａ）に示すように、タスク処理実行中に割込処理１が発生した場合には（Ａ点）、タスク処理を中断し、割込処理１を開始する（Ｂ点）。割込処理１は、共有資源２０の確保に成功し、割込処理１を実行するが、割込処理１よりも優先度の高い割込処理２が発生した場合には（Ｃ点）、割込処理１を中断して、割込処理２を開始する（Ｄ点）。しかしながら、割込処理１は、スピンロックによる排他制御により共有資源１２０ａを占有してしまうので、割込処理２は共有資源確保に失敗し、以後の処理が実行できなくなってしまう（Ｅ点）。
【００６４】
このような状況下で、仮に低優先の割込処理１に処理を遷移することができれば、図３で説明したように、処理を再開できる可能性があるが、スタック領域の構成により、そのような処理が実行できない場合がある。
【００６５】
図５（ｂ）は、従来の情報処理装置におけるスタック領域の例を示した図である。図５（ｂ）は、タスク処理、割込処理１及び割込処理２の使用スタック領域が、図４（ｂ）と同様に連続配置されたアドレス空間を示している。このようなスタック領域の配置で、割込処理２から割込処理１に処理を切り替える処理を行うと、割込処理１が割込処理２の使用スタック領域を上書きして破壊するおそれがあり、実際上、このようなスタック配置をとることができない。
【００６６】
よって、図３（ｂ）において説明したように、本実施例に係る情報処理装置においては、スタック領域を各処理間で不連続とし、間隔を置いた余裕のある配置としている。これにより、各処理間でスタック領域を破壊するおそれのない構成とすることができる。
【００６７】
次に、図６及び図１を用いて、本実施例に係る情報処理装置の処理内容を、更に詳細に説明する。図６は、本実施例に係る情報処理装置の各処理と処理間の遷移関係を示した図である。
【００６８】
図６において、プロセッサ１０がタスク処理の実行中に、Ａ点において割込処理１の発生が割込検知手段１１により検知され、優先度監視手段１２によりタスク処理と割込処理１の優先度を比較し、割込処理１の優先度の方が高いと判断されると、Ｂ点に処理が遷移し、割込処理１が開始される。
【００６９】
割込処理１は、スピンロック処理を行って、解放状態にある共有資源２０を排他的に占有し、資源確保に成功する。割込処理１は、確保した共有資源２０を用いて、処理を実行するが、Ｃ点において、割込検知手段１１により新たな割込発生が検知された場合には、優先度監視手段１２により、発生した割込処理と現在実行中の割込処理１との優先度が比較される。新たに発生した割込処理２の方が、割込処理１よりも実行レベルが高いと判定されたときには、プロセッサ１０は割込処理１を中断し、割込処理２を開始する。このとき、処理はＣ点からＤ点に遷移する。プロセッサ１０は、割込処理２を実行し、スピンロック処理により共有資源２０を排他的に占有しようとする。しかし、共有資源２０は、割込処理１によりスピンロックが掛かった状態であるので、割込処理２は共有資源２０の確保に失敗する。
【００７０】
ここで、割込処理２は、共有資源２０の確保を待ち続けると、そのままデッドロック状態となってしまうので、割込処理２を一時中断し、プロセッサ１０の実行権を割込処理２に戻す切り替え処理を行う。切り替え処理は、割込処理２が共有資源２０の確保に失敗したら、まず共有資源管理領域４０において、共有資源２０の獲得に失敗した対象の共有資源２０がどの共有資源２０であるのかを特定し、特定された共有資源２０をどの処理が占有しているのかを特定する。例えば、図１において共有資源２管理情報記憶領域４２に記憶されている共有資源２が対象の共有資源２０である場合には、取得状態記憶領域４２ａが取得状態（例えば、１が立つ）となり、取得処理ＩＤ記憶領域３２ｂを参照することにより、どの処理が占有しているのかを知ることができる。
【００７１】
次いで、バンクレジスタより現在動作中の割込処理２のバンク番号（例えば、（２））を取得し、割込処理１のバンク番号（例えば、（１））に切り替え、スタック基底（例えば、Ｘ番地）より復帰情報を保存する。図１においては、割込処理状態管理領域３０の割込処理２管理情報記憶領域３２の実行状態記憶領域３２ａが、実行中から中断の状態に書き換えられることになる。そして、図６に戻ると、プロセッサ１０による処理は、割込処理２のＥ点から割込処理１のＣ点に切り替えられ、割込処理２は、Ｃ点から処理を再開する。
【００７２】
割込処理１は、処理を再開するが、割込処理１を最後まで行うのではなく、割込処理１の処理を中断のタイミングに適する最小限の量に留め、スピンロック処理により排他的に占有している共有資源２０の解放処理を行う。このとき、共有資源管理領域４０の該当する共有資源２０（例えば、共有資源２）の取得状態記憶領域４２ａは、取得状態から解放状態に書き換えられる。次いで、割込処理１から、割込処理２にプロセッサ１０の実行権を復帰させる復帰処理を行う。バンク機構を用いて、現在動作中の割込処理１のバンク番号（例えば、（１））から、割込処理２のバンク番号（例えば、（２））に切り替えられ、スタック基底（例えば、Ｙ番地）より復帰情報を保存する。プロセッサ１０の処理は、割込処理１のＦ点から割込処理２のＥ点に遷移する。
【００７３】
プロセッサ１０は、Ｆ点から割込処理２を再開する。このとき、割込処理実行状態管理領域３０の割込処理２管理情報記憶領域３２の実行状態記憶領域３２ａは、中断状態から、実行状態に書き換えられる。次いで、割込処理２は、スピンロック処理を行い、共有資源２０の確保を行うが、共有資源２０は解放されているので、資源確保に成功する。このとき、共有資源管理領域４０の対象の共有資源（例えば、共有資源２）の共有資源２管理情報記憶領域４２の取得状態記憶領域４２ａは、解放状態から取得状態に書き換えられ、所得処理ＩＤ記憶領域４２ｂには、割込処理２の処理ＩＤが書き込まれる。そして、プロセッサ１０は、確保した共有資源２０を利用して割込処理２の処理を実行し、処理が終了したら、資源解放を行うとともに、割込処理２スタック領域２２に保存した復帰情報を戻し、割込処理２スタック領域２２に保存したバンク番号をバンクレジスタに設定して割込処理１にプロセッサ１０の実行権を戻す。プロセッサ１０による処理は、割込処理２のＧ点から、割込処理１のＦ点に移動する。
【００７４】
プロセッサ１０は、Ｆ点から割込処理１を再開し、最後まで割込処理１を実行する。割込処理１が終了したら、割込処理１スタック領域２１に保存した復帰情報を戻し、割込処理１スタック領域２１に保存したバンク番号を、バンクレジスタに設定し、タスク処理に実行権を戻す。プロセッサ１０による処理は、割込処理１のＨ点から、タスク処理のＡ点に移動する。
【００７５】
プロセッサ１０は、タスク処理をＡ点から再開し、最後まで実行する。Ｉ点に到達したときに、タスク処理、割込処理１及び割込処理２は、総て優先度順に処理されたことになる。
【００７６】
このように、本実施例に係る情報処理装置によれば、低優先度の割込処理がスピンロック処理により共有資源２０を排他的に占有している場合であっても、高優先度の割込処理を中断して低優先度の割込処理にＣＰＵ実行権を移す切り替え処理と、低優先度の割込処理が共有資源２０を解放して高優先度の割込処理を復帰させる復帰処理を実行することにより、プロセッサ１０に高優先度から順に処理を行わせることができる。
【００７７】
次に、図７乃至図９を用いて、スピンロック処理、切り替え処理及び復帰処理の各処理についての処理フローを説明する。
【００７８】
図７は、スピンロック処理の処理フロー図である。
【００７９】
ステップ１００では、処理実行中に割込処理が発生し、発生した割込処理の方が実行中の処理よりも優先度が高い場合には、発生した割込処理が共有資源２０をスピンロック処理により排他的占有を試みる。割込処理の発生は、割込処理検知手段１１により検知されてよく、現在実行中の実行中処理と新たに発生した割込処理の優先度の比較は、優先度監視手段１２により行われてよい。また、実行中処理は、タスク処理の他、自身よりも高優先度の割込処理が存在する低優先度の割込処理であってもよい。
【００８０】
ステップ１１０では、割込処理が共有資源２０の獲得に成功したか否かの判定がなされる。共有資源管理領域４０の、獲得しようとする共有資源ｎ管理情報（例えば、共有資源２管理情報）の取得状態記憶領域４２ａを参照し、取得状態であるか解放状態であるかを判断する。取得状態であるか解放状態であるかは、例えば、取得状態であれば１が書き込まれ、解放状態であれば０が書き込まれているというように表現されてよい。ステップ１１０において、発生した割込処理が共有資源２０を獲得できる状態（解放状態）である場合にはステップ１２０に進み、獲得できない状態（取得状態）の場合には、ステップ１４０に進む。
【００８１】
ステップ１２０では、共有資源管理領域４０に取得処理情報の書き込みがなされる。取得処理情報の書き込みは、該当する共有資源の共有資源管理情報記憶領域（例えば、共有資源２管理情報記憶領域４２）の取得状態記憶領域４２ａが取得状態に書き換えられ、取得処理ＩＤ記憶領域４２ｂに発生した割込処理のＩＤが書き込まれて情報が記憶されてよい。
【００８２】
ステップ１２０で共有資源管理領域４０に取得処理情報の書き込みが行われた場合には、ステップ１３０に進み、正常終了して処理フローを終了する。発生した割込処理は、共有資源２０の獲得に成功したので、共有資源２０を用いて、処理を実行することができる。
【００８３】
一方、ステップ１１０に戻り、共有資源２０の獲得に失敗した場合には、ステップ１４０に進み、エラーを返して異常終了し、処理フローを終了する。
【００８４】
このように、スピンロック処理においては、共有資源２０の獲得が試みられ、獲得できた場合には、そのまま共有資源２０を用いて処理を実行し、獲得できなかった場合には、エラーにより異常終了する。これにより、割込処理が共有資源２０の獲得に失敗したことを認識することができる。スピンロック処理が正常終了した場合には、そのまま通常の処理を継続して処理を終了するが、異常終了した場合には、次に切り替え処理を実行する。
【００８５】
図８は、切り替え処理の処理フローを示した図である。切り替え処理は、図７で示したスピンロック処理の処理フローにおいて、異常終了した場合に継続して実行される。従って、図８の切り替え処理の処理フローは、図７のスピンロック処理の異常終了した処理フローと連続している。
【００８６】
ステップ２００では、復帰処理情報の保存が行われる。発生した割込処理は、図７の処理フローにおいて共有資源２０の獲得に失敗したので、割込処理を中断させてプロセッサ１０の実行権を手放す切り替え処理に入るが、切り替え処理を終えた後、復帰処理でプロセッサ１０の実行権を取り戻して割込処理を再開するので、その際に中断した段階での処理状態に戻れるように、戻り情報をスタック領域に保存しておく。
【００８７】
ステップ２１０では、共有資源管理領域４０に記憶されている情報を読み出し、共有資源２０を現在占有している処理がどの処理であるかを特定する。共有資源２０の占有主体の特定は、取得処理ＩＤ記憶領域４２ｂに記憶されている取得処理ＩＤを読み出すことにより、行うことができる。
【００８８】
ステップ２２０では、共有資源２０を取得している取得処理が、割込処理であるか否かが判定される。この判定は、プロセッサ１０が行ってよい。ステップ２２０において、共有資源２０を取得している取得処理が割込処理であった場合には、ステップ２３０に進み、共有資源２０を取得している取得処理がタスク処理であった場合には、ステップ２４０に進む。
【００８９】
ステップ２３０では、プロセッサ１０が割込処理実行状態管理領域３０を参照し、対象となる共有資源２０の取得処理情報を特定し、切り替え処理のために必要な使用バンク番号等の情報を取得する。
【００９０】
一方、ステップ２４０では、ＯＳ内タスク管理テーブルより中断タスク情報を取り出し、ＯＳ管理下で通常のタスク処理を実行する。この場合には、ＯＳ管理下の通常の処理を行うので、本実施例に係る情報処理装置で説明した一連の処理を実行する必要はなく、通常のタスク処理を実行するようにしてよい。
【００９１】
ステップ２５０では、割込処理の情報を元に戻し、レジスタ及びバンクを復帰させる処理を行う。これにより、一旦、共有資源２０を確保している低優先度の処理に実行権を渡しても、次の復帰処理で高優先度の割込処理に即座に復帰することが可能となる。
【００９２】
ステップ２６０では、切り替え処理が実行され、プロセッサ１０の実行権の移動が行われる。割込処理は、自己の処理を中断させ、共有資源２０を取得している処理に、プロセッサ１０の実行権を渡す処理を行う。その際、レジスタ及びバンクに切り替え等が実行されてよい。また、割込処理実行状態管理領域３０の実行状態記憶領域３２ａは、中断状態に書き換えられる。
【００９３】
以上の処理フローにより、切り替え処理が実行されるが、その後、プロセッサ１０の実行権を取得した低優先度の処理は、自己の処理を再開させる。そして、共有資源２０を解放するのに適するタイミングで、速やかに共有資源２０を解放させる処理を行う。共有資源２０の解放処理の際、共有資源管理領域４０の取得状態記憶領域４２ａは、解放状態に書き換えられ、取得処理ＩＤ記憶領域４２ｂの取得処理ＩＤは消去される。
【００９４】
図９は、復帰処理の処理フローを示した図である。復帰処理フローは、低優先度の処理において、共有資源２０を解放した後に行われる。
【００９５】
ステップ３００では、共有資源２０を解放した低優先度の処理から、プロセッサ１０の実行権が高優先度の割込処理に移動するとともに、割込処理実行状態管理領域３０の高優先度の割込処理の実行状態記憶領域３２ａが、中断状態から実行状態に書き換えられる。
【００９６】
ステップ３１０では、復帰情報より、高優先度の割込処理のレジスタ及びバンクを復帰させる。
【００９７】
ステップ３２０では、高優先度の割込処理の処理が実行される。このとき、スピンロック処理により共有資源２０を排他的に占有し、共有資源２０を利用して処理を実行するようにしてよい。
【００９８】
以上で、復帰処理の処理フローを終了し、その後は通常の処理を実行する。図２、図３及び図６で説明したように、高優先度の割込処理を最後まで実行し、その後低優先度の割込処理を実行し、最後にタスク処理が実行され、総ての処理が、優先度順位に従って実行される。
【００９９】
なお、図７〜図９の処理フローにおいて、図９の復帰処理実行中に、更に高優先度の割込処理が発生すれば、当該高優先度の割込処理において、更に図７〜図９の処理フローが実行されることになる。本実施例においては、理解の容易のため、最も簡素な例を挙げて説明しているが、優先度が何段階にも分かれている場合には、それらの優先度の関係同士で、各々本実施例に係る情報処理装置の処理内容を適用することができる。
【０１００】
以上、本発明の好ましい実施例について詳説したが、本発明は、上述した実施例に制限されることはなく、本発明の範囲を逸脱することなく、上述した実施例に種々の変形及び置換を加えることができる。
【図面の簡単な説明】
【０１０１】
【図１】本発明を適用した実施例に係る情報処理装置の全体構成図である。
【図２】本実施例に係る情報処理装置と従来の情報処理装置の処理内容の比較図である。図２（ａ）は、本実施例に係る情報処理装置の処理内容の概要図である。図２（ｂ）は、従来の処理内容の概要図である。
【図３】共有資源２０のスタック領域の配置の一例を示した図である。図３（ａ）は、タスク処理、割込処理１及び割込処理２の処理の流れを模式的に示した図の一例である。図３（ｂ）は、スタック領域の配置の一例を示した図である。
【図４】従来の多重割込と用いられるスタック領域について示した図である。図４（ａ）は、割込処理間で優先順位が設定できる多重割込の処理を示した図である。図４（ｂ）は、従来の情報処理装置のスタック領域を示した図である。
【図５】割込処理がスピンロック機構を用いる場合の各処理とスタック領域を示した図である。図５（ａ）は、従来の情報処理装置の各処理と処理間の遷移関係を示した図である。図５（ｂ）は、従来の情報処理装置におけるスタック領域の例を示した図である。
【図６】本実施例に係る情報処理装置の各処理と処理間の遷移関係を示した図である。
【図７】スピンロック処理の処理フロー図である。
【図８】切り替え処理の処理フローを示した図である。
【図９】復帰処理の処理フローを示した図である。
【符号の説明】
【０１０２】
１０    プロセッサ
１１    割込検知手段
１２    優先度監視手段
２０    共有資源
２１    割込処理１使用スタック領域
２２    割込処理２使用スタック領域
２３    タスク処理使用スタック領域
３０    割込処理実行状態管理領域
３１    割込処理１管理情報記憶領域
３２    割込処理２管理情報記憶領域
３２ａ    実行状態記憶領域
３２ｂ    スタック基底番地記憶領域
３２ｃ    使用バンク番号記憶領域
３２ｄ    優先順位記憶領域
４０    共有資源管理領域
４１    共有資源１管理情報記憶領域
４２    共有資源２管理情報記憶領域
４２ａ    取得状態記憶領域
４２ｂ    取得処理ＩＤ記憶領域
５０    メモリ
【図１】
2010044699.tif 000003
【図２】
2010044699.tif 000004
【図３】
2010044699.tif 000005
【図４】
2010044699.tif 000006
【図５】
2010044699.tif 000007
【図６】
2010044699.tif 000008
【図７】
2010044699.tif 000009
【図８】
2010044699.tif 000010
【図９】
2010044699.tif 000011