(57)【要約】【課題】アクセス違反が発生するアクセス先のアドレスのデータをアクセスすることなく、ソフトウェア処理を継続する技術を提供する。【解決手段】本開示の情報処理装置は、実行部と例外処理部とを備えている。実行部は、プログラムカウンタが示すアドレスの命令を実行する。Ｓ４００〜Ｓ４１４において例外処理部は、メモリ空間においてアクセスが禁止されている禁止領域にアクセスする命令を実行部が実行するアクセス違反が発生すると、アクセス違反に対する例外処理において、アクセス違反を発生した命令の命令長と、プログラムカウンタが示すアクセス違反を発生した命令のアドレスとを加算し、例外処理の終了後に復帰するアドレスを決定する。【選択図】図３
2017208058.tif 000002
【特許請求の範囲】
【請求項１】
プログラムカウンタ（２４）が示すアドレスの命令を実行するように構成された実行部（２２）と、
メモリ空間においてアクセスが禁止されている禁止領域にアクセスする命令を前記実行部が実行するアクセス違反が発生すると、前記プログラムカウンタが示す前記アクセス違反を発生した命令のアドレスに基づいて前記アクセス違反を発生した命令を実行するアプリケーションを特定し、特定した前記アプリケーションに対応した前記アクセス違反に対する例外処理を実行し、前記例外処理において、前記アクセス違反を発生した命令の命令長と、前記プログラムカウンタが示す前記アクセス違反を発生した命令のアドレスとを加算し、前記例外処理の終了後に復帰するアドレスを設定するように構成された例外処理部（２２、Ｓ４００〜Ｓ４１４）と、
を備える情報処理装置。
【請求項２】
プログラムカウンタ（２４）が示すアドレスの命令を実行するように構成された実行部（２２）と、
メモリ空間においてアクセスが禁止されている禁止領域にアクセスする命令を前記実行部が実行するアクセス違反が発生すると、前記アクセス違反を発生した命令を実行するアプリケーションの種類に関わらず共通の例外処理を実行し、前記例外処理において、前記アクセス違反を発生した命令の命令長と、前記プログラムカウンタが示す前記アクセス違反を発生した命令のアドレスとを加算し、前記例外処理の終了後に復帰するアドレスを設定するように構成された例外処理部（２２）と、
を備える情報処理装置。
【請求項３】
請求項１または２に記載の情報処理装置において、
前記アクセス違反を検出して前記実行部による前記禁止領域へのアクセスを停止させ、前記アクセス違反を発生した命令のアドレスを記憶し、前記例外処理部に前記例外処理を実行させるように構成されたアクセス管理部（２６）をさらに備える、
情報処理装置。
【請求項４】
請求項１から３のいずれか一項に記載の情報処理装置において、
前記例外処理部は、前記アクセス違反がリード命令により発生する場合、リードデータの設定先に初期値を設定する、
情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、メモリに対するアクセス違反が発生したときの処理技術に関する。
【背景技術】
【０００２】
ＣＰＵに搭載されたＣＰＵコアがメモリに記憶されているアプリケーションを実行する場合、アプリケーションがメモリをアクセスすることがある。アプリケーションによるメモリへのアクセスは、アプリケーションがメモリをアクセスするアドレスに基づいて、例えば、ＣＰＵに搭載されたメモリ保護装置により監視される。
【０００３】
メモリ保護装置には、アプリケーション毎に、アクセスが許可されているメモリ領域と、アクセスが禁止されているメモリ領域とがメモリ保護情報として設定されている。そして、アクセスが禁止されているメモリ領域のアドレスにアプリケーションがアクセスすると、メモリ保護装置は、メモリに対するアクセス違反の例外を発生させる。
【０００４】
従来、アクセス違反の例外が発生しアプリケーションからＯＳに処理が移行すると、ＯＳは、アクセス違反を発生したアプリケーションの命令の実行アドレスをメモリに退避する等の例外処理を実行する。ＯＳはOperating Systemの略である。
【０００５】
しかし、例外処理を終了したＯＳが、アクセス違反を発生したアプリケーションの処理を退避していた実行アドレスから再開させると、アクセス違反が発生した同じアクセス先のアドレスがアクセスされる。その結果、アクセス違反が繰り返し発生する可能性があるので、アクセス違反を発生するアプリケーションの実行アドレスでアプリケーションの処理が停止するという問題がある。
【０００６】
このような問題に対処するため、例えば特許文献１に記載の技術では、アプリケーションにおいてメモリに対するライト命令によりアクセス違反が発生すると、アクセス違反が発生する前のアクセス先のデータが、メモリに予め設定されている退避領域にＯＳにより退避される。
【０００７】
そして、ＯＳがメモリ保護装置のメモリ保護情報を変更することにより、アクセス違反の原因であるアプリケーションに対し、アクセス先のアドレスへの書き込みが許可される。これにより、ＯＳから処理を戻されたアプリケーションは、アクセス違反となるアクセス先のアドレスへの書き込みであっても、アクセス違反を発生することなくアクセス先のアドレスにデータを書き込んで処理を継続できる。
【０００８】
アプリケーションがアクセス違反のアクセス先のアドレスにデータを書き込むと、書き込まれたデータは、次回、同じアプリケーションが実行されるときのために、メモリに予め設定されているバックアップ領域にＯＳによりバックアップされる。そして、アプリケーションが書き込む前に退避領域に退避されていたデータが、ＯＳによりアクセス先のアドレスに戻される。
【０００９】
これにより、アクセス先のアドレスへのアクセスが許可されている他のアプリケーションは、アクセス違反を起こしたアプリケーションがデータを書き込む前のアクセス先のアドレスのデータにアクセスできる。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特開２０１４−１３７７３４号公報
【発明の概要】
【発明が解決しようとする課題】
【００１１】
特許文献１に記載の技術では、例えば、アプリケーションがアクセス先のアドレスのＧＰＩＯのペリフェラルレジスタにライト命令によりデータを書き込むときにアクセス違反が発生すると、アクセス違反が発生する前のペリフェラルレジスタのデータがＯＳにより退避領域に退避される。尚、ＧＰＩＯは、General Purpose Input/Outputの略である。
【００１２】
ペリフェラルレジスタのデータが退避されると、ＯＳがメモリ保護装置のメモリ保護情報を変更することにより、アクセス違反の原因であるアプリケーションに対し、アクセス先のアドレスのペリフェラルレジスタへの書き込みが許可される。これにより、ＯＳから処理を戻されたアプリケーションは、アクセス先のアドレスのペリフェラルレジスタにデータを書き込む。
【００１３】
しかし、ペリフェラルレジスタに書き込みが行われることにより、ＧＰＩＯポートのいずれかが入力または出力に設定される。その結果、本来であれば、ペリフェラルレジスタへの書き込みを禁止されているアプリケーションにより、マイクロコンピュータのＧＰＩＯポートの入出力の状態が変更される。
【００１４】
このように、特許文献１に記載の技術では、アクセス違反が発生しても、アクセス違反の原因となるアプリケーションは処理を継続できるかも知れない。しかし、本来であればアクセスを禁止されているアプリケーションが、アクセス違反となるアクセス先のアドレスにデータを書き込んでしまうという問題がある。
【００１５】
本開示の一側面は、アクセス違反が発生するアクセス先のアドレスをアクセスすることなく、ソフトウェア処理を継続する技術を提供することにある。
【課題を解決するための手段】
【００１６】
本開示の一態様は、実行部と例外処理部とを備えている。
実行部（２２）は、プログラムカウンタ（２４）が示すアドレスの命令を実行する。例外処理部（２２、Ｓ４００〜Ｓ４１４）は、メモリ空間においてアクセスが禁止されている禁止領域にアクセスする命令を実行部が実行するアクセス違反が発生すると、プログラムカウンタが示すアクセス違反を発生した命令のアドレスに基づいてアクセス違反を発生した命令を実行するアプリケーションを特定し、特定したアプリケーションに対応したアクセス違反に対する例外処理を実行し、例外処理において、アクセス違反を発生した命令の命令長と、プログラムカウンタが示すアクセス違反を発生した命令のアドレスとを加算し、例外処理の終了後に復帰するアドレスを設定する。
【００１７】
本開示の他の態様は、実行部と例外処理部とを備えている。
実行部（２２）は、プログラムカウンタ（２４）が示すアドレスの命令を実行する。例外処理部（２２）は、メモリ空間においてアクセスが禁止されている禁止領域にアクセスする命令を実行部が実行するアクセス違反が発生すると、アクセス違反を発生した命令を実行するアプリケーションの種類に関わらず共通の例外処理を実行し、例外処理において、アクセス違反を発生した命令の命令長と、プログラムカウンタが示すアクセス違反を発生した命令のアドレスとを加算し、例外処理の終了後に復帰するアドレスを設定する。
【００１８】
これらの構成によれば、アクセス違反が発生するデータアドレスのデータをアクセスすることなく、アクセス違反が発生する次の命令からソフトウェア処理を実行してソフトウェア処理を継続できる。
【００１９】
尚、この欄および特許請求の範囲に記載した括弧内の符号は、一つの態様として後述する実施形態に記載の具体的手段との対応関係を示すものであって、本発明の技術的範囲を限定するものではない。
【図面の簡単な説明】
【００２０】
【図１】本実施形態の情報処理装置を示すハードウェア構成図。
【図２】メモリ保護機能を説明するブロック図。
【図３】例外処理を示すフローチャート。
【図４】アクセス違反発生時のメモリ保護機能を示す模式図。
【図５】アプリケーション毎のアクセス権の設定状態を示す説明図。
【図６】命令長を示す説明図。
【図７】アプリケーション毎のプログラム格納領域を示す説明図。
【発明を実施するための形態】
【００２１】
以下、本開示の実施形態を図に基づいて説明する。
［１．構成］
図１に示す情報処理装置１０は、ＣＰＵ２０と、ＲＯＭ３０と、ＲＡＭ４０と、ＩＮＴＣ５０と、周辺装置６０とを備えるマイクロコンピュータにより実現される。尚、情報処理装置１０を構成するマイクロコンピュータの数は一つでも複数でもよい。ＩＮＴＣは、Interrupt Controllerの略である。
【００２２】
ＣＰＵ２０は、半導体メモリであるＲＯＭ３０とＲＡＭ４０とをプログラムやデータ等の記憶領域として使用する。ＣＰＵ２０に搭載されているＣＰＵコア２２は、ＰＣ２４のアドレスが示すＲＯＭ３０またはとＲＡＭ４０に記憶されているアプリケーションやＯＳの命令を実行する。ＰＣはプログラムカウンタ（Program Counter）の略である。ＣＰＵ２０に搭載されるＣＰＵコア２２は、１個でも複数でもよい。
【００２３】
ＣＰＵコア２２がプログラムを実行することによりアクセス可能なメモリ空間は、ＲＯＭ３０とＲＡＭ４０とペリフェラルレジスタ等のマイコンリソースとにより構成される。
ＣＰＵ２０に搭載されているＭＰＵ２６は、図２に示すように、マイコンリソース８０が構成するメモリ空間をアプリケーション９０、９２がアクセスする場合、アクセスが禁止されている禁止領域へのアクセスを防止する。ＭＰＵは、メモリ保護装置（Memory Protection Unit）の略である。
【００２４】
メモリの禁止領域へのリードまたはライトによるアクセス違反が発生すると、ＭＰＵ２６はＯＳ１００にアクセス違反の発生を通知する。アクセス違反の発生を通知されたＯＳ１００は、アクセス違反による例外処理１０２を実行する。
【００２５】
ＩＮＴＣ５０は、周辺装置６０から割り込みを要求されると、割り込み要求の優先順位を判定する。そして、ＩＮＴＣ５０は、優先度が最も高い割り込み要求に対する割り込み処理をＣＰＵ２０に要求する。
【００２６】
図１に示すように、周辺装置６０は、Ａ／Ｄコンバータ６２、ＧＰＩＯ６４、ＣＡＮ６６、タイマ６８、ＳＰＩ７０等を備えている。ＣＡＮは登録商標であり、Controller Area Networkの略である。ＳＰＩは、Serial Peripheral Interfaceの略である。
【００２７】
情報処理装置１０の各機能は、ＣＰＵコア２２とＭＰＵ２６とにより実現される。例えば、ＣＰＵコア２２がＲＯＭ３０、ＲＡＭ４０等の非遷移的実体的記録媒体に記憶されているプログラムを実行することにより、後述する例外処理が実現される。このプログラムが実行されることにより、プログラムに対応する方法が実行される。
【００２８】
情報処理装置１０の各機能を実現する手法は、ソフトウェアに限るものではなく、その一部または全部の要素を、論理回路やアナログ回路等を組み合わせたハードウェアを用いて実現してもよい。
【００２９】
ＣＰＵコア２２は、ＰＣ２４が示すアドレスの命令を実行することにより、メモリ空間においてアクセスが禁止されている禁止領域にアクセスするアクセス違反が発生すると、アクセス違反に対する例外処理を実行する。
【００３０】
ＣＰＵコア２２は、例外処理において、アクセス違反を発生した命令の命令長と、ＰＣ２４が示すアクセス違反を発生した命令のアドレスとを加算し、例外処理の終了後に復帰するアドレスを設定する。ＭＰＵ２６は、アクセス違反を検出して禁止領域へのアクセスを停止させ、ＣＰＵコア２２に例外処理を実行させる。
【００３１】
［２．処理］
図３に示す例外処理は、ＭＰＵ２６がアクセス違反を検出すると、ＣＰＵコア２２により実行される。
【００３２】
例えば、図４に示すように、アプリケーションＡが０ｘ１８００番地の命令をフェッチして、０ｘ１８００番地の命令を実行する場合の例外処理を例に説明する。以下、アプリケーションを単にアプリとも言う。尚、図５に示すように、メモリ領域に対するアクセス権は、ＭＰＵ２６により設定されている。
【００３３】
０ｘ１０００〜０ｘ１ＦＦＦ番地については、アプリＡがリードとライトとによるアクセスを許可されており、アプリＢがリードとライトとによるアクセスを禁止されている。０ｘ２０００〜０ｘ２ＦＦＦ番地については、アプリＡがリードとライトとによるアクセスを禁止され、アプリＢがリードとライトとによるアクセスを許可されている。０ｘ３０００〜０ｘ３ＦＦＦ番地については、アプリＡ、Ｂの両方が、リードによるアクセスを許可され、ライトによるアクセスを禁止されている。
【００３４】
ここで、図４に示すように、アプリＡによる０ｘ１８００番地の命令が０ｘ２１００番地に対するライト命令の場合、アプリＡは０ｘ２１００番地に対するライトを禁止されているので、ＭＰＵ２６はアクセス違反が発生したことを検出する。
【００３５】
アクセス違反が発生したことを検出すると、ＭＰＵ２６は、ＣＰＵコア２２によるアクセス先のアドレスへのアクセスを停止させ、アクセス違反の発生原因である命令の先頭アドレスを違反アドレスとして記憶する。そして、ＭＰＵ２６は、図３のＳ４００〜Ｓ４１４に示す例外処理をＣＰＵコア２２に実行させる。
【００３６】
Ｓ４００においてＣＰＵコア２２は、ＭＰＵ２６が記憶しておいた違反アドレスに基づき、アクセス違反の原因である命令のオペコードを解析する。Ｓ４０２の判定がＹｅｓであり、違反アドレスの命令のオペコードが予め登録してあるオペコードに一致すると、Ｓ４０４においてＣＰＵコア２２は、例外処理の終了後に復帰するアドレスを設定する。
【００３７】
例えば、図６に示すように、ＣＰＵコア２２は、アクセス違反の発生したオペコード１を解析する。オペコード毎に命令長は決定されているので、オペコードを解析すれば命令長を決定できる。
【００３８】
そして、ＣＰＵコア２２は、オペコード１を含む命令が実行されたことによりアクセス違反の発生した違反アドレスに違反アドレスの命令の命令長を加算して、オペコード２を含む次の命令の実行アドレスを設定する。これにより、ＣＰＵコア２２は、例外処理を終了後に復帰するアドレスを設定する。
【００３９】
図４の例では、違反アドレスが０ｘ１８００であり、違反アドレスの命令長が２である。したがって、復帰アドレスは０ｘ１８０２に設定されている。
次に、Ｓ４０６においてＣＰＵコア２２は、アクセス違反の発生した違反アドレスの命令のオペコードがリード命令であるか否かを判定する。Ｓ４０６の判定がＮｏであり、違反アドレスの命令のオペコードがリード命令ではない場合、処理はＳ４１０に移行する。
【００４０】
例えば、違反アドレスの命令のオペコードがリード命令ではなくライト命令の場合、ライト命令は実行されない。したがって、例えば、違反アドレスの命令のオペコードがＧＰＩＯのペリフェラルレジスタに対するライト命令であり、ＧＰＩＯポートの入力または出力を設定する命令であっても、ＧＰＩＯポートの入力または出力の設定は変更されない。
【００４１】
Ｓ４０６の判定がＹｅｓであり、違反アドレスの命令のオペコードがリード命令の場合、アクセス先のアドレスのデータはリードされない。しかし、リードしたデータの設定先がＲＡＭ４０であるか汎用レジスタであるかに関わらず、リードデータの設定先のデータを更新しないと設定先の値は更新前の値のままである。設定先の値が更新前の状態でアプリＡを含むアプリケーションが設定先の値を使用すると、不適切な処理が実行される可能性がある。
【００４２】
そこで、Ｓ４０８においてＣＰＵコア２２は、リードデータの設定先に初期値を設定する。例えば、初期値として０が設定される。これにより、初期値として０を使用した処理が実行される。Ｓ４０８の実行後、処理はＳ４１０に移行する。
【００４３】
Ｓ４１０においてＣＰＵコア２２は、違反アドレスに基づいてアクセス違反を発生したアプリケーションを特定する。図７の例では、違反アドレスを０ｘ１８００とし、アクセス違反を発生したアプリケーションをアプリケーションＡと特定している。そして、Ｓ４１２においてＣＰＵコア２２は、アクセス違反を発生したアプリケーションに対応した例外処理を実行する。
【００４４】
例外処理の実行が終了すると、Ｓ４１４においてＣＰＵコア２２は、Ｓ４０４で設定した復帰アドレスをＰＣ２４に設定する。これにより、アクセス違反が発生した命令の次の命令からアプリケーションの実行が再開される。
【００４５】
［３．効果］
以上説明した上記実施形態では、以下の効果を得ることができる。
（１）アクセス違反が発生すると、アクセス違反に対する例外処理の終了後、アクセス違反が発生した次の命令からアプリケーションの実行を再開して継続するので、同じアプリケーションが違反アドレスの命令を繰り返し実行することを防止できる。
【００４６】
（２）アクセス違反が発生すると、アクセス先のアドレスのデータに対するリードとライトとを実行しない。したがって、例えば、ＧＰＩＯのペリフェラルレジスタにライトされてＧＰＩＯポートの入出力の設定が変更されることを抑制できる。
【００４７】
（３）アクセス違反が発生すると、アクセス違反の発生原因であるアプリケーションに応じた例外処理を実行するので、アプリケーションの種類とアクセス違反が発生するときのアクセス先のアドレスとに基づいてアクセス違反の原因を解析できる可能性がある。アクセス違反の原因を解析できると、アクセス違反の原因を解消できる可能性がある。
【００４８】
（４）リード命令はリードデータの設定先に適切な値を設定して更新する命令であるから、リード命令によるアクセス違反が発生してリードデータの設定先の値がアクセス違反の発生前のまま更新されないと、不適切な値のまま不適切な処理が実行される可能性がある。
【００４９】
そこで、上記実施形態では、アクセス違反の原因である命令がリード命令の場合、リードデータの設定先に初期値を設定して更新する。これにより、最も適切ではないが、アクセス違反の発生前よりも適切な値がリードデータの設定先に設定される。
【００５０】
以上説明した上記実施形態において、ＣＰＵコア２２が実行部と例外処理部とに対応し、ＰＣ２４がプログラムカウンタに対応し、ＭＰＵ２６がアクセス管理部に対応する。
また、上記実施形態において、Ｓ４００〜Ｓ４１４が例外処理部としての処理に対応する。
【００５１】
［４．他の実施形態］
（１）上記実施形態では、アクセス違反が発生すると、アクセス違反の発生原因であるアプリケーションに応じた例外処理を実行した。これに対し、アクセス違反の発生原因であるアプリケーションの種類に関わらず、共通の例外処理を実行してもよい。
【００５２】
（２）リード命令によるアクセス違反が発生してリードデータの設定先の値がアクセス違反の発生前のまま更新されなくても、不適切な処理が実行されない場合には、リードデータの設定先の値を更新しなくてもよい。
【００５３】
（３）上記実施形態における一つの構成要素が有する複数の機能を複数の構成要素によって実現したり、一つの構成要素が有する一つの機能を複数の構成要素によって実現したりしてもよい。また、複数の構成要素が有する複数の機能を一つの構成要素によって実現したり、複数の構成要素によって実現される一つの機能を一つの構成要素によって実現したりしてもよい。また、上記実施形態の構成の一部を省略してもよい。また、上記実施形態の構成の少なくとも一部を、他の上記実施形態の構成に対して付加又は置換してもよい。尚、特許請求の範囲に記載した文言のみによって特定される技術思想に含まれるあらゆる態様が本発明の実施形態である。
【００５４】
（４）上述した情報処理装置１０の他、当該情報処理装置１０を構成要素とする情報処理システム、当該情報処理装置１０としてコンピュータを機能させるための情報処理プログラム、この情報処理プログラムを記録した記録媒体、情報処理方法など、種々の形態で本発明を実現することもできる。
【符号の説明】
【００５５】
１０：情報処理装置、２２：ＣＰＵコア（実行部、例外処理部）、２４：ＰＣ（プログラムカウンタ）、２６：ＭＰＵ（アクセス管理部）
【図１】
2017208058.tif 000003
【図２】
2017208058.tif 000004
【図３】
2017208058.tif 000005
【図４】
2017208058.tif 000006
【図５】
2017208058.tif 000007
【図６】
2017208058.tif 000008
【図７】
2017208058.tif 000009