(57)【要約】仮想機械を実行する処理部を備え、仮想機械は、スタックマシンによりプログラムを動作させ、記憶媒体に割り当てられた記憶領域に、第１のプログラムが動作する第１の動作領域を確保し、第１のプログラムから第１のプログラムと異なる第２のプログラムを呼び出すときに、記憶領域に、第２のプログラムが動作する第２の動作領域を確保する、情報処理装置が、提供される。【選択図】図６
2019049542.tif 000002
【特許請求の範囲】
【請求項１】
仮想機械を実行する処理部を備え、
前記仮想機械は、スタックマシンによりプログラムを動作させ、
記憶媒体に割り当てられた記憶領域に、第１のプログラムが動作する第１の動作領域を確保し、
前記第１のプログラムから前記第１のプログラムと異なる第２のプログラムを呼び出すときに、前記記憶領域に、前記第２のプログラムが動作する第２の動作領域を確保する、情報処理装置。
【請求項２】
前記仮想機械は、呼び出された前記第２のプログラムの実行を終了させ、呼び出し元の前記第１のプログラムを実行するとき、前記第２の動作領域を解放する、請求項１に記載の情報処理装置。
【請求項３】
前記仮想機械は、前記第１のプログラムと前記第２のプログラムとの間のデータの授受を、前記第１の動作領域に設けられた第１のバッファおよび前記第２の動作領域に設けられた第２のバッファを介して行う、請求項１に記載の情報処理装置。
【請求項４】
前記仮想機械は、前記第２のバッファから前記第１のバッファを参照することにより、前記第１のプログラムのデータを前記第２のプログラムで共有する、請求項３に記載の情報処理装置。
【請求項５】
前記仮想機械は、前記第２のバッファから前記第１のバッファの一部を参照することにより、前記第１のプログラムのデータを前記第２のプログラムで共有する、請求項４に記載の情報処理装置。
【請求項６】
前記第２のバッファは、前記第１のバッファにリンクが張られている、前記第１のバッファの外部バッファを含み、
前記仮想機械は、前記外部バッファから前記第１のバッファを参照することにより、前記第１のプログラムのデータを前記第２のプログラムで共有する、請求項４に記載の情報処理装置。
【請求項７】
前記仮想機械は、プロセッサにより実行されるネイティブコードで実装され、
前記記憶領域に、プログラムと前記ネイティブコードとの連携のための連携領域を確保し、
前記プログラムと前記ネイティブコードとの間のデータの授受を、前記連携領域を介して行う、請求項１に記載の情報処理装置。
【請求項８】
前記情報処理装置は、ＩＣ（Integrated  Circuit）カードである、請求項１に記載の情報処理装置。
【請求項９】
仮想機械を実行するステップを有し、
前記仮想機械は、スタックマシンによりプログラムを動作させ、
記憶媒体に割り当てられた記憶領域に、第１のプログラムが動作する第１の動作領域を確保し、
前記第１のプログラムから前記第１のプログラムと異なる第２のプログラムを呼び出すときに、前記記憶領域に、前記第２のプログラムが動作する第２の動作領域を確保する、情報処理装置により実行される情報処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、情報処理装置、および情報処理方法に関する。
【背景技術】
【０００２】
仮想機械（以下「ＶＭ」（Virtual  Machine）と示す場合がある。）に関する技術が開発されている。複数のＶＭそれぞれにおける共有メモリ領域へのアクセスを制御する技術としては、例えば下記の特許文献１に記載の技術が挙げられる。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００２−３５８２０５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
例えば特許文献１に記載の技術では、共有メモリ領域からのデータの読み出しと、共有メモリ領域へのデータの書き込みとが、ＶＭごとに制限される。よって、特許文献１に記載の技術を用いることによって、各ＶＭで実行されて動作するアプリケーションプログラム間のファイアーウォールが確保されうる。【０００５】
しかしながら、例えば特許文献１に記載の技術を用いたとしても、１つのＶＭで動作する複数のプログラム間でファイアーウォールを確保することは、できない。よって、例えば特許文献１に記載の技術を用いたとしても、１つのＶＭで動作する複数のプログラム間におけるセキュリティの向上は、望めない。【０００６】
本開示では、仮想機械で複数のプログラムが動作するときにおいてセキュリティの向上を図ることが可能な、新規かつ改良された情報処理装置、および情報処理方法を提案する。
【課題を解決するための手段】
【０００７】
本開示によれば、仮想機械を実行する処理部を備え、上記仮想機械は、スタックマシンによりプログラムを動作させ、記憶媒体に割り当てられた記憶領域に、第１のプログラムが動作する第１の動作領域を確保し、上記第１のプログラムから上記第１のプログラムと異なる第２のプログラムを呼び出すときに、上記記憶領域に、上記第２のプログラムが動作する第２の動作領域を確保する、情報処理装置が、提供される。【０００８】
また、本開示によれば、仮想機械を実行するステップを有し、上記仮想機械は、スタックマシンによりプログラムを動作させ、記憶媒体に割り当てられた記憶領域に、第１のプログラムが動作する第１の動作領域を確保し、上記第１のプログラムから上記第１のプログラムと異なる第２のプログラムを呼び出すときに、上記記憶領域に、上記第２のプログラムが動作する第２の動作領域を確保する、情報処理装置により実行される情報処理方法が、提供される。
【発明の効果】
【０００９】
本開示によれば、仮想機械で複数のプログラムが動作するときにおいてセキュリティの向上を図ることが、できる。【００１０】
なお、上記の効果は必ずしも限定的なものではなく、上記の効果とともに、または上記の効果に代えて、本明細書に示されたいずれかの効果、または本明細書から把握されうる他の効果が奏されてもよい。
【図面の簡単な説明】
【００１１】
【図１】本実施形態に係る情報処理装置の構成の一例を示すブロック図である。
【図２】本実施形態に係る情報処理装置のハードウェア構成の一例を示す説明図である。
【図３】ＶＭ上で動作するプログラムを概念的に示す説明図である。
【図４】ＶＭ上で１つのプログラムが動作する場合におけるＶＭ上でのプログラムの動作の一例を示す説明図である。
【図５】ＶＭ上で１つのプログラムが動作する場合におけるＶＭ上でのプログラムの動作の一例を示す説明図である。
【図６】ＶＭ上で複数のプログラムが動作する場合におけるＶＭ上でのプログラムの動作の一例を示す説明図である。
【図７】ＶＭによる複数のプログラム間のデータの授受の制御の一例を説明するための説明図である。
【図８】ＶＭ上で実行されているプログラムと連携したネイティブコードの実行の一例を説明するための説明図である。
【発明を実施するための形態】
【００１２】
以下に添付図面を参照しながら、本開示の好適な実施の形態について詳細に説明する。なお、本明細書及び図面において、実質的に同一の機能構成を有する構成要素については、同一の符号を付することにより重複説明を省略する。
【００１３】
また、以下では、下記に示す順序で説明を行う。
１．本実施形態に係る情報処理装置、および本実施形態に係る情報処理方法
［１］本実施形態に係る情報処理装置の構成
［２］本実施形態に係る情報処理装置の適用例
［３］本実施形態に係る情報処理方法に係る処理
［４］本実施形態に係る情報処理方法が用いられることにより奏される効果の一例
【００１４】
（本実施形態に係る情報処理装置、および本実施形態に係る情報処理方法）
以下、本実施形態に係る情報処理装置の一例を説明しつつ、本実施形態に係る情報処理方法について説明する。
【００１５】
また、以下では、本実施形態に係る情報処理装置が、ＩＣ（Integrated  Circuit）カードである場合を主に例に挙げる。なお、本実施形態に係る情報処理装置は、ＩＣカードに限られない。本実施形態に係る情報処理装置の他の適用例については、後述する。
【００１６】
［１］本実施形態に係る情報処理装置の構成
図１は、本実施形態に係る情報処理装置１００の構成の一例を示すブロック図である。情報処理装置１００は、例えば、通信部１０２と、制御部１０４とを備える。
【００１７】
［情報処理装置１００のハードウェア構成例］
図２は、本実施形態に係る情報処理装置１００のハードウェア構成の一例を示す説明図である。情報処理装置１００は、例えば、アンテナ１５０と、ＩＣチップ１５２とを備える。なお、情報処理装置１００は、例えば図２に示すＩＣチップ１５２の構成を、ＩＣチップの形態で備えていなくてもよい。
【００１８】
図４に示す情報処理装置１００は、アンテナ１５０により受信された搬送波に応じた受信電圧によって駆動する。なお、情報処理装置１００は、例えば、情報処理装置１００が備えているバッテリなどの内部電源から供給される電力、または、接続されている外部電源から供給される電力などによって、駆動することも可能である。
【００１９】
アンテナ１５０は、例えば、所定のインダクタンスをもつコイル（インダクタ）Ｌ１と、所定の静電容量をもつキャパシタＣ１とからなる共振回路で構成され、搬送波の受信に応じて電磁誘導により誘起電圧を生じさせる。そして、アンテナ１５０は、所定の共振周波数で誘起電圧を共振させた受信電圧を出力する。ここで、アンテナ１５０における共振周波数は、例えば、１３．５６［ＭＨｚ］など搬送波の周波数に合わせて設定される。アンテナ１５０は、上記構成により、搬送波を受信し、また、ＩＣチップ１５２が備える負荷変調回路１６４において行われる負荷変調によって応答信号の送信を行う。
【００２０】
ＩＣチップ１５２は、例えば、キャリア検出回路１５４と、検波回路１５６と、レギュレータ１５８と、復調回路１６０と、プロセッサ１６２と、負荷変調回路１６４とを備える。なお、図２では示していないが、ＩＣチップ１５２は、例えば、過電圧や過電流がプロセッサ１６２に印加されることを防止するための保護回路（図示せず）をさらに備えていてもよい。ここで、保護回路（図示せず）としては、例えば、ダイオードなどで構成されたクランプ回路が挙げられる。
【００２１】
また、ＩＣチップ１５２は、例えば、ＲＯＭ（Read  Only  Memory）１６６と、ＲＡＭ（Random  Access  Memory）１６８と、不揮発性メモリ１７０とを備える。プロセッサ１６２と、ＲＯＭ１６６、ＲＡＭ１６８、および不揮発性メモリ１７０とは、例えば、データの伝送路としてのバス１７２によって接続される。
【００２２】
ＲＯＭ１６６は、プロセッサ１６２が使用するプログラムや演算パラメータなどの制御用データを記憶する。
【００２３】
ＲＡＭ１６８は、プロセッサ１６２により実行されるプログラム、演算結果、実行状態などを一時的に記憶する。また、プロセッサ１６２により実行されるプログラムがＶＭである場合、ＲＡＭ１６８には、ＶＭにより実行されるプログラム、演算結果、実行状態などを一時的に記憶する。
【００２４】
不揮発性メモリ１７０は、例えば、ＶＭや各種アプリケーションプログラムなどの、様々なデータを記憶する。ここで、不揮発性メモリ１７０としては、例えば、ＥＥＰＲＯＭ（Electrically  Erasable  and  Programmable  Read  Only  Memory）や、フラッシュメモリなどが挙げられる。
【００２５】
また、不揮発性メモリ１７０は、例えば耐タンパ性を有する。不揮発性メモリ１７０のような耐タンパ性を有するセキュアな記録媒体に、ＶＭなどの各種データが記憶されることによって、情報処理装置１００では、データのセキュリティが確保される。
【００２６】
キャリア検出回路１５４は、例えば、アンテナ１５０から伝達される受信電圧に基づいて矩形の検出信号を生成し、当該検出信号をプロセッサ１６２へ伝達する。また、プロセッサ１６２は、伝達される上記検出信号を、例えば、データ処理のための処理クロックとして用いる。ここで、上記検出信号は、アンテナ１５０から伝達される受信電圧に基づくものであるので、リーダ／ライタなどの外部装置から送信される搬送波の周波数と同期することとなる。したがって、ＩＣチップ１５２は、キャリア検出回路１５４を備えることによって、リーダ／ライタなどの外部装置との間の処理を、当該外部装置と同期して行うことができる。
【００２７】
検波回路１５６は、アンテナ１５０から出力される受信電圧を整流する。ここで、検波回路１５６は、例えばダイオードＤ１とキャパシタＣ２とで構成される。
【００２８】
レギュレータ１５８は、受信電圧を平滑、定電圧化し、プロセッサ１６２へ駆動電圧を出力する。ここで、レギュレータ１５８は、受信電圧の直流成分を駆動電圧として用いる。なお、上述したように、例えば、情報処理装置１００がバッテリなどの内部電源を備える場合、または、情報処理装置１００に外部電源が接続されている場合、情報処理装置１００は、当該内部電源から供給される電力、または、当該外部電源から供給される電力によって、駆動することも可能である。
【００２９】
復調回路１６０は、受信電圧に基づいて搬送波に含まれる搬送波信号を復調し、搬送波信号に対応するデータ（例えば、ハイレベルとローレベルとの二値化されたデータ信号）を出力する。ここで、復調回路１６０は、受信電圧の交流成分をデータとして出力する。
【００３０】
プロセッサ１６２は、例えばレギュレータ１５８から出力される駆動電圧を電源として駆動し、復調回路１６０において復調されたデータの処理を行う。プロセッサ１６２は、例えば、ＶＭを実行し、実行されたＶＭによって上記データの処理を行う。また、プロセッサ１６２は、例えば、ネイティブコードを実行することにより上記データの処理を行ってもよい。
【００３１】
また、プロセッサ１６２は、リーダ／ライタなどの外部装置への応答に係る負荷変調を制御する制御信号を処理結果に応じて選択的に生成する。そして、プロセッサ１６２は、制御信号を負荷変調回路１６４へと選択的に出力する。
【００３２】
なお、プロセッサ１６２における処理は、復調回路１６０において復調されたデータの処理に限られない。例えば、プロセッサ１６２は、任意のデータの処理を、実行されたＶＭによって、または、ネイティブコード（後述する）を実行することによって、行うことが可能である。
【００３３】
ここで、プロセッサ１６２は、例えば、ＭＰＵ（Micro  Processing  Unit）などの演算回路で構成される、１または２以上のプロセッサや、各種処理回路などで構成される。
【００３４】
負荷変調回路１６４は、例えば、負荷ＺとスイッチＳＷ１とを備え、プロセッサ１６２から伝達される制御信号に応じて負荷Ｚを選択的に接続する（有効化する）ことによって負荷変調を行う。ここで、負荷Ｚは、例えば、所定の抵抗値を有する抵抗で構成される。また、スイッチＳＷ１は、例えば、ｐチャネル型のＭＯＳＦＥＴ（Metal  Oxide  Semiconductor  Field  effect  transistor）や、ｎチャネル型のＭＯＳＦＥＴで構成される。
【００３５】
ＩＣチップ１５２は、例えば上記のような構成によって、アンテナ１５０が受信した搬送波信号を処理し、負荷変調によってアンテナ１５０に応答信号を送信させることができる。また、ＩＣチップ１５２は、例えば上記のような構成によって、任意のデータの処理を、実行されたＶＭによって、または、ネイティブコードを実行することによって、行うことができる。
【００３６】
なお、本実施形態に係る情報処理装置１００の構成は、図２に示す構成に限られない。例えば、情報処理装置１００は、後述する情報処理装置１００の適用例に応じた構成をとることが可能である。
【００３７】
再度図１を参照して、情報処理装置１００の構成の一例について説明する。通信部１０２は、情報処理装置１００が備える通信手段であり、外部装置と通信を行う。通信部１０２は、例えば制御部１０４により通信が制御される。
【００３８】
ここで、通信部１０２としては、例えば、図２に示すアンテナ１５０およびＩＣチップ１５２が挙げられる。通信部１０２がアンテナ１５０およびＩＣチップ１５２で構成される場合、情報処理装置１００は、例えば１３．５６［ＭＨｚ］など所定の周波数の搬送波によって、ＩＳＯ／ＩＥＣ１８０９２にて規定されているＮＦＣ（Near  Field  Communication）による非接触通信を、リーダ／ライタなどの外部装置と行う。
【００３９】
なお、通信部１０２は、アンテナ１５０およびＩＣチップ１５２に限られない。例えば、通信部１０２は、ＩＥＥＥ８０２．１５．１ポートおよび送受信回路や、ＩＥＥＥ８０２．１１ポートおよび送受信回路など、任意の通信方式に対応する通信デバイスで構成されていてもよい。また、通信部１０２は、複数の通信方式によって、１または２以上の外部装置などと通信を行うことが可能な構成であってもよい。
【００４０】
制御部１０４は、情報処理装置１００全体を制御する役目を果たす。また、制御部１０４は、例えば処理部１１０を有し、後述する本実施形態に係る情報処理方法に係る処理を主導的に行う役目を果たす。
【００４１】
なお、本実施形態に係る情報処理装置の構成は、図１に示す構成に限られない。
【００４２】
例えば、本実施形態に係る情報処理装置は、図１に示す処理部１１０を、制御部１０４とは個別に備えること（例えば、別の処理回路で実現すること）ができる。
【００４３】
また、本実施形態に係る情報処理装置の構成は、図１に示す構成に限られず、後述する本実施形態に係る情報処理方法に係る処理の切り分け方に応じた、任意の構成をとることが可能である。
【００４４】
また、例えば、本実施形態に係る情報処理装置がスタンドアロンで動作する場合、または、通信部１０２と同様の機能、構成を有する外部の通信デバイスを介して外部装置と通信を行う場合には、本実施形態に係る情報処理装置は、通信部１０２を備えていなくてもよい。
【００４５】
［２］本実施形態に係る情報処理装置の適用例
上記では、本実施形態に係る情報処理装置がＩＣカードである場合を例に挙げたが、本実施形態に係る情報処理装置の適用例は、上記に示す例に限られない。本実施形態に係る情報処理装置は、例えば、“ＰＣ（Personal  Computer）やサーバなどのコンピュータ”や、“タブレット型の装置”、“ゲーム機”、“任意のＩｏＴ（Internet  of  Things）機器”など、ＶＭを実行してＶＭ上でプログラムを動作させることが可能な、様々な機器に適用することができる。また、本実施形態に係る情報処理装置は、例えば、上記のような機器に組み込むことが可能な、“ＳＩＭ（Subscriber  Identity  Module）”や、“ｅＵＩＣＣ”、“ｅＳＥ”、“ＴＥＥ（Trusted  Execution  Environment）に対応するＩＣ”などのＩＣに適用することもできる。
【００４６】
［３］本実施形態に係る情報処理方法に係る処理
次に、情報処理装置１００において行われる本実施形態に係る情報処理方法に係る処理について、説明する。本実施形態に係る情報処理方法に係る処理は、例えば処理部１１０により行われる。以下では、便宜上、情報処理装置１００が本実施形態に係る情報処理方法に係る処理を行うものとして説明する。
【００４７】
情報処理装置１００は、ＶＭを実行する。情報処理装置１００では、実行されたＶＭ上で１または２以上のプログラムが実行され、実行されたプログラムがＶＭ上でそれぞれ動作する。ＶＭは、スタックマシンによりプログラムを動作させる。
【００４８】
ここで、ＶＭは、例えば、演算処理ブロックを有し、当該演算処理ブロックが、記憶媒体上に確保されたスタックとプログラム実行領域にアクセスして、順次、１つのプログラムを実行していく。本明細書では、ＶＭが有する演算処理ブロックがアクセスするスタックとプログラム実行領域を「スタックマシン」と定義する。本実施形態に係るスタックマシンは、ＶＭ上で実行されるプログラムごとに記憶媒体上に確保される。ＶＭは、例えば、物理的なプロセッサ、ＲＡＭ上で動作し、仮想的なプログラム実行環境である複数のスタックマシンを提供する。また、ＶＭは、記憶媒体上に確保された複数のスタックマシンに対して、ＶＭが有する演算処理ブロックがアクセスするスタックマシンを切り替えることによって、実行するプログラムを切り替える。
【００４９】
なお、ＶＭ上で動作するプログラムは、スタックマシンにより動作することに限られず、後述する動作領域でプログラムを動作させることが可能な任意の計算モデルに従って動作してもよい。
【００５０】
図３は、ＶＭ上で動作するプログラムを概念的に示す説明図である。図３では、プログラム＃１およびプログラム＃２という２つのプログラムが、ＶＭ上で動作する例を示している。
【００５１】
図３に示すように、ＶＭ上では、プログラム＃１およびプログラム＃２がそれぞれ動作し、各プログラムによりデータが処理される。
【００５２】
なお、ＶＭ上で動作するプログラムの数は、２つに限られない。例えば、ＶＭ上では、１つのプログラム、または、３つ以上のプログラムが動作しうる。以下では、プログラム＃１という１つのプログラムがＶＭ上で動作する場合、およびプログラム＃１およびプログラム＃２という２つのプログラムがＶＭ上で動作する場合などを例に挙げて、情報処理装置１００により実行されるＶＭについて、説明する。
【００５３】
ＶＭは、記憶媒体に割り当てられた記憶領域に、プログラムが動作する動作領域を、実行するプログラムごとに確保する。記憶媒体に割り当てられた記憶領域は、例えば、ＶＭのワークメモリ領域に該当する。
【００５４】
情報処理装置１００が図２に示すハードウェア構成を有する場合、動作領域が確保される記憶媒体としては、例えばＲＡＭ１６８のような揮発性メモリが挙げられる。なお、動作領域が確保される記憶媒体が、ＲＡＭ１６８に限られないことは、言うまでもない。
【００５５】
ＶＭは、例えば、実行するプログラムごとにスタックマシンを生成し、生成したスタックマシンを記憶する領域を、記憶媒体に割り当てられた記憶領域上で確保する。スタックマシンが記憶される領域が、動作領域に該当する。
【００５６】
動作領域が確保されると、ＶＭは、確保された動作領域で、当該動作領域に対応するプログラムを動作させる。
【００５７】
以下、ＶＭが生成したスタックマシンによりプログラムが動作する場合を例に挙げて、ＶＭ上でのプログラムの動作の一例を説明する。なお、上述したように、ＶＭ上で動作するプログラムは、スタックマシンにより動作することに限られず、記憶媒体に確保される動作領域でプログラムを動作させることが可能な任意の計算モデルに従って動作してもよい。
【００５８】
（１）ＶＭ上でのプログラムの動作の第１の例：ＶＭ上で１つのプログラムが動作する場合におけるプログラムの動作の一例
まず、ＶＭ上で１つのプログラムが動作する場合におけるＶＭ上でのプログラムの動作の一例を説明する。
【００５９】
図４、図５は、ＶＭ上で１つのプログラムが動作する場合におけるＶＭ上でのプログラムの動作の一例を示す説明図である。図４、図５に示す符号Ｒは、記憶領域を示している（以下、他の図でも同様とする。）。
【００６０】
図４に示すように、プログラム＃１が実行される場合、ＶＭは、プログラム＃１に対応するスタックマシン＃１を生成し、スタックマシン＃１を記憶する領域を記憶領域Ｒに確保することによって、プログラム＃１に対応する動作領域を確保する。ＶＭによりプログラム＃１に対応する動作領域が確保されることによって、プログラム＃１の動作が開始される。
【００６１】
ここで、動作が開始されたプログラム＃１の動作に要する動作領域の大きさは、スタックマシン＃１の動作状態、すなわち、プログラム＃１の動作状態に応じて変わりうる。
【００６２】
よって、ＶＭは、プログラムの動作に応じて動作領域の大きさを動的に変える。ここで、動作領域の大きさを動的に変えるとは、例えば図５のＡに示すように、記憶領域に確保されている動作領域の大きさを大きくすることと、例えば図５のＢに示すように、動作領域の一部を解放して動作領域の大きさを小さくすることとを含む。なお、動作領域の大きさを動的に変える例が、図５のＡに示す例および図５のＢに示す例に限られないことは、言うまでもない。
【００６３】
スタックマシンによりプログラムが動作する場合、ＶＭは、図５のＡに示すように、記憶領域内で、プログラム＃１の動作に必要な分、プログラム＃１に対応する動作領域を確保する。なお、ＶＭにより確保される動作領域は、記憶領域における物理アドレスが連続する領域に限られない。例えば、ＶＭにより確保される動作領域は、物理アドレスが不連続であり、論理アドレスが連続する領域であってもよい。また、ＶＭにより確保される動作領域は、例えば、物理アドレスおよび論理アドレスが不連続な領域であってもよい。ここで、論理アドレスは、「仮想アドレス」とも呼ばれる。
【００６４】
また、スタックマシンによりプログラムが動作する場合、ＶＭは、図５のＢに示すように、プログラム＃１の動作に不要となった分、プログラム＃１に対応する動作領域を解放する。
【００６５】
例えば図５に示すように、プログラムの動作に応じて動作領域の大きさが動的に変えられることによって、記憶領域内で確保される一のプログラムに対応する動作領域は、当該プログラムの動作に要する最小限の大きさとなる。
【００６６】
よって、ＶＭがプログラムの動作に応じて動作領域の大きさを動的に変えることによって、記憶媒体に割り当てられる記憶領域をより効率的に使用することができる。また、記憶領域をより効率的に使用することが可能となることによって、省メモリ化が図られる。
【００６７】
なお、ＶＭによる動作領域の制御は、プログラムの動作に応じて動作領域の大きさを動的に変えることに限られない。
【００６８】
例えば、ＶＭは、プログラムの実行を終了させた後に、対応する動作領域を解放する。
【００６９】
プログラムの実行を終了させた後に動作領域が解放されることによって、記憶領域において動作領域が確保されていない領域、すなわち、記憶領域において動作領域を確保することが可能な領域（いわゆる空き領域）を、より大きくすることが可能となる。
【００７０】
よって、ＶＭがプログラムの実行を終了させた後に対応する動作領域を解放することによって、記憶媒体に割り当てられる記憶領域をより効率的に使用することができる。また、上述したように、記憶領域をより効率的に使用することが可能となることによって、省メモリ化が図られる。
【００７１】
（２）ＶＭ上でのプログラムの動作の第２の例：ＶＭ上で複数のプログラムが動作する場合におけるプログラムの動作の一例
次に、ＶＭ上で複数のプログラムが動作する場合におけるＶＭ上でのプログラムの動作の一例を説明する。ＶＭ上で複数のプログラムが動作する場合、ＶＭは、複数のプログラムそれぞれを、上記（１）に示す第１の例と同様に動作させる。
【００７２】
より具体的には、ＶＭは、第１のプログラムを実行するときに、記憶領域に、第１のプログラムが動作する第１の動作領域を確保する。また、ＶＭは、第１のプログラムから第１のプログラムと異なる第２のプログラムを呼び出すときに、記憶領域に、第２のプログラムが動作する第２の動作領域を確保する。このとき、ＶＭは、例えば、呼び出し元の第１のプログラムの実行を中断する。そして、ＶＭは、複数のプログラムそれぞれを、上記（１）に示す第１の例と同様に動作させる。
【００７３】
また、ＶＭは、例えば、呼び出された第２のプログラムの実行を終了させ、呼び出し元の第１のプログラムを実行するとき、第２の動作領域を解放する。
【００７４】
図６は、ＶＭ上で複数のプログラムが動作する場合におけるＶＭ上でのプログラムの動作の一例を示す説明図である。図６は、プログラム＃１およびプログラム＃２という２つのプログラムがＶＭ上で動作する場合を示している。
【００７５】
上述したように、ＶＭは、実行するプログラムごとに動作領域を確保し、確保された動作領域で対応するプログラムを動作させる。一例を挙げると、ＶＭは、プログラム＃１（第１のプログラムの一例）を実行するときに、プログラム＃１に対応する動作領域（図６において“スタックマシン＃１”と示される動作領域）を確保し、確保された当該動作領域でプログラム＃１を動作させる。また、ＶＭは、プログラム＃１からプログラム＃２（第２のプログラムの一例）を呼び出すときに、プログラム＃２に対応する動作領域（図６において“スタックマシン＃２”と示される動作領域）を確保し、確保された当該動作領域でプログラム＃１を動作させる。そのため、図６に示すように、記憶領域において、プログラム＃１に対応する動作領域（図６において“スタックマシン＃１”と示される動作領域）と、プログラム＃２に対応する動作領域（図６において“スタックマシン＃２”と示される動作領域）とは、異なる領域となる。ここで、一の動作領域と他の動作領域とが異なる領域であるとは、例えば、一の動作領域と他の動作領域との物理アドレス、および一の動作領域と他の動作領域との論理アドレスが、異なることをいう。
【００７６】
図６に示すように一の動作領域と他の動作領域とが異なる領域となることによって、ＶＭ上で動作する複数のプログラム間でファイアーウォールを確保することが可能となる。
【００７７】
したがって、情報処理装置１００は、ＶＭで複数のプログラムが動作するときにおいてセキュリティの向上を図ることが、できる。
【００７８】
次に、ＶＭ上で複数のプログラムが動作する場合におけるプログラム間の連携について説明する。
【００７９】
情報処理装置１００におけるプログラム間の連携は、ＶＭが、実行されている複数のプログラム間のデータの授受を制御することによって、実現される。
【００８０】
後述する例に示すように、ＶＭは、実行されている複数のプログラムそれぞれに対応する動作領域の論理アドレスと、動作領域の物理アドレスとを変換することによって、データの授受を制御する。
【００８１】
ＶＭは、例えば、記憶媒体における論理アドレスと物理アドレスとを変換する変換情報を参照することによって、実行されている複数のプログラムそれぞれに対応する動作領域の論理アドレスと、動作領域の物理アドレスとを変換する。本実施形態に係る変換情報としては、例えば、記憶媒体における論理アドレスと物理アドレスとが対応付けられているテーブル（またはデータベース）が挙げられる。変換情報は、例えば不揮発性メモリ１７０などの任意の記憶媒体に記憶される。
【００８２】
ＶＭは、記憶領域内に動作領域を確保するときなどの動作領域の確保に係る任意のタイミング、記憶領域内に確保されている動作領域を解放するタイミング、複数のプログラム間でのデータの授受が終了したタイミング、または、動作領域の大きさを動的に変えるときなどの動作領域の変更に係る任意のタイミングで、変換情報を更新する。
【００８３】
なお、本実施形態に係る“動作領域の論理アドレスと動作領域の物理アドレスとを変換する方法”は、変換情報を用いる方法に限られない。例えば、ＶＭは、“記憶媒体における論理アドレスと物理アドレスとを変換することが可能な、任意のアルゴリズムの処理”によって、動作領域の論理アドレスと動作領域の物理アドレスとを変換してもよい。
【００８４】
ここで、記憶領域に確保されたプログラムそれぞれに対応する動作領域には、バッファ領域（以下、単に「バッファ」と示す。）が設けられる。動作領域に設けられたバッファは、当該動作領域に対応するプログラムからしか見えない領域である。しかしながら、動作領域に設けられたバッファの一部または全部は、例えば、他のバッファとの間でリンクを張ることによって、動作領域に対応していない外部のプログラムに公開することが可能である。異なるバッファ間にリンクを張ることは、上記変換情報などにより、実現される。ＶＭは、動作領域に設けられたバッファの一部または全部を、外部のプログラムに公開することが可能な仕組みにより、情報処理装置１００におけるプログラム間の連携を実現する。
【００８５】
以下では、一のプログラムからみたとき、一のプログラムに対応する動作領域のバッファを「内部バッファ」と示す。また、以下では、一のプログラムからみたとき、他のプログラムに対応する動作領域のバッファであって、公開されているバッファを「外部バッファ」と示す。
【００８６】
第１のプログラムと第２のプログラムとの間のデータの授受を例に挙げると、ＶＭは、第１のプログラムと第２のプログラムとの間のデータの授受を、第１の動作領域に設けられた第１のバッファおよび第２の動作領域に設けられた第２のバッファを介して行う。
【００８７】
例えば、第１のプログラムのデータを第２のプログラムで共有する場合、ＶＭは、第２のバッファから第１のバッファを参照する。このとき、ＶＭは、第２のバッファから第１のバッファの一部を参照することにより、第１のプログラムのデータを第２のプログラムで共有してもよい。異なるバッファ間の参照は、例えば、上記変換情報などにより、異なるバッファ間にリンクを張ることによって、実現される。また、異なるバッファ間に張られたリンクは、例えば、複数のプログラム間でのデータの授受が終了したタイミングなど、任意のタイミングで切断される。
【００８８】
異なる表現で表すと、第２のバッファに、第１のバッファの外部バッファ（第１のバッファにリンクが張られているバッファ）が含まれる場合、ＶＭは、当該外部バッファから第１のバッファを参照することにより、第１のプログラムのデータを第２のプログラムで共有する。
【００８９】
なお、上記では、第１のプログラムのデータを第２のプログラムで共有する例を示したが、同様の仕組みにより、ＶＭは、第２のプログラムのデータを第１のプログラムで共有することが可能である。
【００９０】
以下、図６に示す場合を例に挙げて、ＶＭ上で複数のプログラムが動作する場合におけるプログラム間の連携について説明する。以下では、複数のプログラム間でデータの授受が行われることを「プログラム間の通信」と示す場合がある。
【００９１】
例えば、プログラム＃１が動作しているときに、プログラム＃１における処理においてプログラム＃２に対する通信（プログラム間の通信の一例）が発生した場合、ＶＭは、プログラム＃２に対応する動作領域を確保する。プログラム＃２に対応する動作領域が確保されると、プログラム＃２の動作が開始され、プログラム＃１およびプログラム＃２におけるプログラム間の通信が行われる。
【００９２】
プログラム＃１およびプログラム＃２におけるプログラム間の通信が完了すると、ＶＭは、プログラム＃２に対応する動作領域を解放すると共に、プログラム＃１の動作を継続させる。
【００９３】
上述したように、プログラム＃１に対応する動作領域とプログラム＃２に対応する動作領域とは異なる領域である。よって、プログラム＃１およびプログラム＃２におけるプログラム間の通信では、ファイアーウォールが確保される。
【００９４】
以下、ＶＭによる複数のプログラム間のデータの授受の制御について、上述したプログラム＃１およびプログラム＃２におけるプログラム間の通信を例に挙げて、説明する。
【００９５】
図７は、ＶＭによる複数のプログラム間のデータの授受の制御の一例を説明するための説明図である。
【００９６】
例えば、プログラム＃１が動作しているときに、プログラム＃１における処理においてプログラム＃２に対する通信が発生した場合、ＶＭは、プログラム＃１のためのバッファを、プログラム＃１に対応する動作領域内に確保する。プログラム＃１に対応する動作領域内にバッファを確保するとき、ＶＭは、プログラム＃１に対応する動作領域の大きさを変えてもよい。
【００９７】
また、上述したように、プログラム＃１における処理においてプログラム＃２に対する通信が発生した場合、ＶＭは、プログラム＃２に対応する動作領域を確保する。また、ＶＭは、プログラム＃２のためのバッファを、プログラム＃２に対応する動作領域内に確保する。
【００９８】
ＶＭ上で動作するプログラム＃１からみて、プログラム＃１のためのバッファは、データの読み出しとデータの書き込みとの双方が可能な領域である。また、ＶＭ上で動作するプログラム＃２からみて、プログラム＃１のためのバッファは、データの読み出しとデータの書き込みとの双方を行うことができない領域である。なお、上述したように、プログラム＃１のためのバッファには、プログラム＃２の外部バッファ（プログラム＃２に公開されているバッファ）が含まれていてもよい。
【００９９】
プログラム＃１によるプログラム＃１のためのバッファからのデータの読み出しと、プログラム＃１によるプログラム＃１のためのバッファへのデータの書き込みとは、例えば、“ＶＭが、プログラム＃１に対応する動作領域の論理アドレスと、プログラム＃１に対応する動作領域の物理アドレスとを変換すること”によって、行われる。
【０１００】
また、ＶＭ上で動作するプログラム＃２からみて、プログラム＃２のためのバッファは、データの読み出しとデータの書き込みとの双方が可能な領域である。また、ＶＭ上で動作するプログラム＃１からみて、プログラム＃２のためのバッファは、データの読み出しとデータの書き込みとの双方を行うことができない領域である。なお、上述したように、プログラム＃２のためのバッファには、プログラム＃１の外部バッファ（プログラム＃１に公開されているバッファ）が含まれていてもよい。
【０１０１】
プログラム＃２によるプログラム＃２のためのバッファからのデータの読み出しと、プログラム＃２によるプログラム＃２のためのバッファへのデータの書き込みとは、例えば、“ＶＭが、プログラム＃２に対応する動作領域の論理アドレスと、プログラム＃２に対応する動作領域の物理アドレスとを変換すること”によって、行われる。
【０１０２】
プログラム＃１における処理においてプログラム＃２に対する通信が発生した場合、プログラム＃１は、プログラム＃１のためのバッファの論理アドレスを指定する。プログラム＃１のためのバッファの論理アドレスが指定されると、ＶＭは、プログラム＃１に対応する動作領域の論理アドレスと、プログラム＃１に対応する動作領域の物理アドレスとを変換する。プログラム＃１は、ＶＭを介して、指定した論理アドレスに対応する記憶媒体の物理アドレスにアクセスし、プログラム＃１のためのバッファに、プログラム＃２へ渡すデータを書き込む。
【０１０３】
ＶＭは、プログラム＃１のためのバッファに記憶されているデータを、プログラム＃２のためのバッファに書き込む。また、ＶＭは、プログラム＃２のためのバッファにデータを書き込んだ後に、プログラム＃１のためのバッファから当該データを削除してもよい。
【０１０４】
ここで、ＶＭは、例えば変換情報を参照することなどによって、プログラム＃１のためのバッファの物理アドレスと、プログラム＃２のためのバッファの物理アドレスとを特定することが可能である。よって、ＶＭは、図７のＴに示すように、“プログラム＃１のためのバッファとプログラム＃２のためのバッファとの間におけるデータのコピー”、または、“プログラム＃１のためのバッファとプログラム＃２のためのバッファとの間におけるデータの移動”を行うことができる。
【０１０５】
よって、プログラム＃１とプログラム＃２との間では、ＶＭを介したデータの授受が実現される。また、ＶＭを介したデータの授受によって、プログラム＃１とプログラム＃２との間におけるデータ共有が実現される。
【０１０６】
上述したように、プログラム＃１とプログラム＃２との間におけるデータの授受は、ＶＭによる論理アドレス−物理アドレス変換によって実現される。よって、プログラム＃１とプログラム＃２との間におけるデータの授受（ＶＭ上で動作する複数のプログラム間におけるデータの授受の一例）は、セキュアである。
【０１０７】
以下、プログラム＃１とプログラム＃２との間におけるデータの授受の一例を説明する。
【０１０８】
まず、プログラム＃１からプログラム＃２へのデータの授受の一例を説明する。
【０１０９】
プログラム＃１は、プログラム＃１のためのバッファの論理アドレスを指定する。プログラム＃１のためのバッファの論理アドレスが指定されると、ＶＭは、プログラム＃１に対応する動作領域の論理アドレスと、プログラム＃１に対応する動作領域の物理アドレスとを変換する。よって、プログラム＃１は、ＶＭを介して、指定した論理アドレスに対応する記憶媒体の物理アドレスにアクセスし、プログラム＃１のためのバッファにデータの書き込みを行うことができる。
【０１１０】
ＶＭは、図７のＴに示すように、プログラム＃１によってプログラム＃１のためのバッファに書き込まれたデータを、プログラム＃２のためのバッファにコピーし、プログラム＃１のためのバッファから当該データを削除する。
【０１１１】
プログラム＃２は、プログラム＃２のためのバッファの論理アドレスを指定する。プログラム＃２のためのバッファの論理アドレスが指定されると、ＶＭは、プログラム＃２に対応する動作領域の論理アドレスと、プログラム＃２に対応する動作領域の物理アドレスとを変換する。よって、プログラム＃２は、ＶＭを介して、指定した論理アドレスに対応する記憶媒体の物理アドレスにアクセスし、プログラム＃２のためのバッファから、データを読み出すことができる。
【０１１２】
例えば上記のように、ＶＭを介することによって、プログラム＃１からプログラム＃２へのデータの授受が実現される。ここで、プログラム＃１からプログラム＃２へのデータの授受は、例えば、プログラム＃１からプログラム＃２へのデータの送信、およびプログラム＃２による送信された当該データの受信と、捉えることが可能である。
【０１１３】
また、プログラム＃２は、プログラム＃１から受け取ったデータを用いて処理を行うことが可能である。よって、情報処理装置１００では、プログラム＃１とプログラム＃２との間における連携（ＶＭ上で動作する複数のプログラムの連携の一例）が、実現される。
【０１１４】
次に、プログラム＃２からプログラム＃１へのデータの授受の一例として、プログラム＃２からプログラム＃１への“プログラム＃２における処理の結果を示すデータ”の授受を説明する。
【０１１５】
プログラム＃２は、プログラム＃２のためのバッファの論理アドレスを指定する。プログラム＃２のためのバッファの論理アドレスが指定されると、ＶＭは、プログラム＃２に対応する動作領域の論理アドレスと、プログラム＃２に対応する動作領域の物理アドレスとを変換する。よって、プログラム＃２は、ＶＭを介して、指定した論理アドレスに対応する記憶媒体の物理アドレスにアクセスし、プログラム＃２のためのバッファに、プログラム＃２における処理の結果を示すデータの書き込みを、行うことができる。
【０１１６】
ＶＭは、図７のＴに示すように、プログラム＃２によってプログラム＃２のためのバッファに書き込まれたデータを、プログラム＃１のためのバッファにコピーし、プログラム＃２のためのバッファから当該データを削除する。
【０１１７】
プログラム＃１は、プログラム＃１のためのバッファの論理アドレスを指定する。プログラム＃１のためのバッファの論理アドレスが指定されると、ＶＭは、プログラム＃１に対応する動作領域の論理アドレスと、プログラム＃１に対応する動作領域の物理アドレスとを変換する。よって、プログラム＃１は、ＶＭを介して、指定した論理アドレスに対応する記憶媒体の物理アドレスにアクセスし、プログラム＃１のためのバッファから、プログラム＃２における処理の結果を示すデータを読み出すことができる。
【０１１８】
例えば上記のように、ＶＭを介することによって、プログラム＃２からプログラム＃１へのデータの授受が実現される。ここで、プログラム＃２からプログラム＃１へのデータの授受は、例えば、プログラム＃２からプログラム＃１へのデータの送信、およびプログラム＃１による送信された当該データの受信と、捉えることが可能である。
【０１１９】
また、プログラム＃１は、プログラム＃２から受け取ったデータを用いて処理を行うことが可能である。よって、情報処理装置１００では、プログラム＃１とプログラム＃２との間における連携（ＶＭ上で動作する複数のプログラムの連携の一例）が、実現される。
【０１２０】
プログラム＃１とプログラム＃２との間では、例えば上記のようにデータの授受が実現される。なお、プログラム＃１とプログラム＃２との間におけるデータの授受の例が、上記に示す例に限られないことは、言うまでもない。
【０１２１】
また、情報処理装置１００では、例えば“上述した例のような２つのプログラム間におけるデータの授受を、相異なる２つのプログラム間でそれぞれ行うこと”によって、ＶＭ上で動作する３つ以上のプログラム間における連携した処理を実現することが、可能である。
【０１２２】
（３）ＶＭ上でのプログラムの動作の第３の例：ＶＭ上で動作しているプログラムと連携したネイティブコードの実行
なお、ＶＭ上でのプログラムの動作の例は、上記第１の例、および上記第２の例に限られない。例えば、情報処理装置１００では、ＶＭ上で実行されているプログラムからネイティブコードを呼び出すことにより、ＶＭ上で実行されているプログラムと連携したネイティブコードの実行を実現することも可能である。
【０１２３】
本実施形態に係るネイティブコードとは、プロセッサ１６２などの情報処理装置１００が備える任意のプロセッサ上で実行可能なコードである。ネイティブコードは、情報処理装置１００が備えるプロセッサで実行されるので、ネイティブコードは、当該プロセッサが有する処理速度で動作する。また、ＶＭの一部または全部は、ネイティブコードで実装されていてもよい。以下では、ネイティブコードがプロセッサ１６２により実行される場合を例に挙げる。
【０１２４】
ＶＭ上で実行されているプログラムと連携したネイティブコードの実行は、ＶＭが、プログラムとネイティブコードとの間のデータの授受を制御することによって、実現される。
【０１２５】
ＶＭ上で実行されているプログラムと連携したネイティブコードの実行によって、情報処理装置１００では、例えば下記のようなデータ連携が実現される。なお、ＶＭ上で実行されているプログラムとプロセッサ１６２により実行されるネイティブコードとのデータ連携の例が、下記に示す例に限られないことは、言うまでもない。
・ＶＭ上で実行されているプログラムからネイティブコードへとデータが渡され、ネイティブコードの実行により、ＶＭ上で実行されているプログラムから渡されたデータを用いた処理が行われる。実行されているネイティブコードからＶＭ上で実行されているプログラムへと、ネイティブコードにおける処理の結果を示すデータが渡され、ＶＭ上で実行されているプログラムは、当該ネイティブコードにおける処理の結果を示すデータを用いた処理を行う。
【０１２６】
例えば上記のように、ＶＭ上で実行されているプログラムとプロセッサ１６２により実行されるネイティブコードとのデータ連携が行われることによって、情報処理装置１００では、ＶＭ上で実行されるプログラムの処理の一部をネイティブコードで実装することが、実現される。
【０１２７】
より具体的には、ＶＭは、プログラムとネイティブコードとの連携のための連携領域を、記憶媒体の記憶領域に確保する。ＶＭは、上述した動作領域と同様に、連携領域を確保する。
【０１２８】
また、ＶＭは、プログラムとネイティブコードとの間のデータの授受を、上述した第１のプログラムと第２のプログラムとの間のデータの授受と同様に、連携領域を介して行う。上記のような連携領域を介したデータ連携により、実行されているプログラムと連携したネイティブコードの実行が実現される。
【０１２９】
以下、ＶＭ上で実行されているプログラムと連携したネイティブコードの実行の一例を、“図４に示すプログラム＃１とプロセッサ１６２により実行されるネイティブコードとのデータ連携”を例に挙げて説明する。
【０１３０】
例えば、プログラム＃１が動作しているときに、プログラム＃１における処理においてネイティブコードが呼び出される場合、ＶＭは、プログラム＃１に対応するネイティブコードを特定する。ＶＭは、例えば“プログラムと、記録媒体におけるネイティブコードが記憶されているアドレスとが対応づけられている参照テーブル（または、参照データベース）”を参照することによって、プログラム＃１に対応するネイティブコードを特定する。ここで、上記参照テーブルに記憶される、記録媒体におけるネイティブコードが記憶されているアドレスは、物理アドレスであってもよいし、論理アドレスであってもよい。
【０１３１】
図８は、ＶＭ上で実行されているプログラムと連携したネイティブコードの実行の一例を説明するための説明図であり、参照テーブルの一例を示している。図８に示す参照テーブルでは、ＶＭ上で実行されるプログラムを示すプログラム番号と、ネイティブコードの先頭アドレスとが対応付けられている。なお、参照テーブルの例が、図８に示す例に限られないことは、言うまでもない。
【０１３２】
プログラム＃１に対応するネイティブコードが特定されると、プログラム＃１に対応するネイティブコードは、プロセッサ１６２により実行される。プロセッサ１６２は、例えば、ＶＭから伝達されるネイティブコードの先頭アドレスにアクセスすることによって、プログラム＃１に対応するネイティブコードを実行する。
【０１３３】
また、プログラム＃１に対応するネイティブコードが特定されると、ＶＭは、例えば、プログラム＃１の実行を一時的に停止させる。なお、ＶＭは、プログラム＃１の実行を停止させないことも可能である。
【０１３４】
また、ＶＭは、プログラム＃１とプログラム＃１に対応するネイティブコードとの連携のための連携領域を確保する。ＶＭは、例えば、プログラム＃１に対応するネイティブコード用のスタックマシンを生成し、上記連携領域にネイティブコード用のスタックマシンを記憶させる。
【０１３５】
ＶＭが、プログラム＃１とプログラム＃１に対応するネイティブコードとの連携のための連携領域を確保することによって、プログラム＃１に対応する動作領域と、当該連携領域とは、異なる領域となる。ここで、動作領域と連携領域とが異なる領域であるとは、例えば、動作領域と連携領域との物理アドレス、および動作領域と連携領域との論理アドレスが、異なることをいう。
【０１３６】
よって、動作領域と連携領域とが異なる領域となることによって、ＶＭ上で動作するプログラムと、プロセッサ１６２により実行されるネイティブコードとの間でファイアーウォールを確保することが可能となる。したがって、情報処理装置１００は、ＶＭ上で実行されているプログラムとプロセッサにより実行されるネイティブコードとのデータ連携において、セキュリティの向上を図ることができる。
【０１３７】
ＶＭは、プログラム＃１に対応する動作領域から、プログラム＃１とプログラム＃１に対応するネイティブコードとの連携のための連携領域へのデータの授受を制御する。プログラム＃１に対応する動作領域と、プログラム＃１とプログラム＃１に対応するネイティブコードとの連携のための連携領域との間のデータの授受は、上記（２）に示す第２の例と同様である。
【０１３８】
ＶＭは、プログラム＃１とプログラム＃１に対応するネイティブコードとの連携のための連携領域に記憶されているデータを、プロセッサ１６２がアクセスすることが可能な記憶媒体の記憶領域にコピーする。連携領域と、プロセッサ１６２がアクセスすることが可能な記憶媒体の記憶領域との間のデータの授受は、例えば上記（２）に示す第２の例と同様に、ＶＭによる論理アドレス−物理アドレス変換によって実現される。プロセッサ１６２がアクセスすることが可能な記憶媒体は、動作領域および連携領域が確保される記憶媒体と同一の記憶媒体であってもよいし、異なる記憶媒体であってもよい。また、ＶＭは、例えば、コピーしたデータを、プログラム＃１とプログラム＃１に対応するネイティブコードとの連携のための連携領域から削除する。
【０１３９】
プロセッサ１６２により実行されたプログラム＃１に対応するネイティブコードは、上記プロセッサ１６２がアクセスすることが可能な記憶媒体の記憶領域から、プログラム＃１とプログラム＃１に対応するネイティブコードとの連携のための連携領域からコピーされたデータを読み出す。そして、プロセッサ１６２により実行されたプログラム＃１に対応するネイティブコードは、読み出した上記コピーされたデータを用いて、処理を行う。
【０１４０】
上記のように、情報処理装置１００では、プロセッサ１６２により実行されたプログラム＃１に対応するネイティブコードからプログラム＃１に対応する動作領域へと直接的にアクセスされない。よって、情報処理装置１００では、プログラム＃１とプログラム＃１に対応するネイティブコードとの間で、セキュアなデータの授受が実現される。
【０１４１】
上記コピーされたデータを用いた処理が完了すると、プロセッサ１６２により実行されたプログラム＃１に対応するネイティブコードは、処理の結果を示すデータを、上記プロセッサ１６２がアクセスすることが可能な記憶媒体の記憶領域に書き込む。
【０１４２】
ＶＭは、プロセッサ１６２がアクセスすることが可能な記憶媒体の記憶領域に記憶されているデータを、プログラム＃１とプログラム＃１に対応するネイティブコードとの連携のための連携領域にコピーする。
【０１４３】
また、ＶＭは、プログラム＃１とプログラム＃１に対応するネイティブコードとの連携のための連携領域から、プログラム＃１に対応する動作領域へのデータの授受を制御する。プログラム＃１とプログラム＃１に対応するネイティブコードとの連携のための連携領域とプログラム＃１に対応する動作領域との間のデータの授受は、上記（２）に示す第２の例と同様である。
【０１４４】
プログラム＃１とプログラム＃１に対応するネイティブコードとの連携のための連携領域から、プログラム＃１に対応する動作領域へのデータの授受が完了すると、ＶＭは、プログラム＃１とプログラム＃１に対応するネイティブコードとの連携のための連携領域を、解放する。
【０１４５】
プログラム＃１とプログラム＃１に対応するネイティブコードとの連携のための連携領域から、プログラム＃１に対応する動作領域へのデータの授受が完了すると、ＶＭは、一時的に停止させていたプログラム＃１の実行を、開始させる。
【０１４６】
プログラム＃１は、プログラム＃１のためのバッファの論理アドレスを指定して、プログラム＃１のためのバッファから、ネイティブコードにおける処理の結果を示すデータを読み出す。そして、プログラム＃１は、ネイティブコードにおける処理の結果を示すデータを用いて処理を行う。
【０１４７】
例えば上記のように、ＶＭを介することによって、ＶＭ上で実行されているプログラム＃１とプロセッサ１６２により実行されるネイティブコードとのデータ連携が、実現される。なお、ＶＭ上で実行されているプログラム＃１とプロセッサ１６２により実行されるネイティブコードとのデータ連携の例が、上記に示す例に限られないことは、言うまでもない。
【０１４８】
（４）ＶＭ上でのプログラムの動作の第４の例
情報処理装置１００において実行されるＶＭ上で動作するプログラムは、例えば、上記（１）に示す第１の例と上記（３）に示す第３の例とを組み合わせた動作、または、上記（２）に示す第２の例と上記（３）に示す第３の例とを組み合わせた動作を、行うことも可能である。
【０１４９】
［４］本実施形態に係る情報処理方法が用いられることにより奏される効果の一例
本実施形態に係る情報処理方法が用いられることによって、本実施形態に係る情報処理装置では、例えば下記に示す効果が奏される。なお、本実施形態に係る情報処理方法が用いられることにより奏される効果が、下記に示す例に限られないことは、言うまでもない。
・本実施形態に係る情報処理方法が用いられることによって、上述したように、記憶媒体に割り当てられる記憶領域をより効率的に使用することができ、また、省メモリ化が図られる。よって、例えばメモリ容量が数キロバイト程度である場合など、本実施形態に係る情報処理装置が、リソースが限られたハードウェア環境を有する場合であっても、ＶＭ上で複数のプログラムが動作させることができる。
・本実施形態に係る情報処理装置が、上記のようなリソースが限られたハードウェア環境を有していない場合であっても、ＶＭ上で複数のプログラムが動作させることが可能である。よって、上述したように、本実施形態に係る情報処理装置は、サーバなどの、ＶＭを実行してＶＭ上でプログラムを動作させることが可能な様々な機器に適用することができる。
・ＶＭによって、プログラム間をファイアウォールで区切ったセキュアな実行環境が実現される。
・ＶＭによって、プログラム間のデータ通信（プログラム間のデータの授受）をセキュアなものとし、プログラム間におけるセキュアなデータ共有が実現される。
・情報処理装置１００がＳＩＭなどの物理的なセキュアなハードウェア環境を有する場合において、情報処理装置１００では、ＶＭによって、複数プログラム間のセキュアなデータ通信機能が実現される。
・ＶＭ上で複数のプログラムが動作させることが可能であり、かつ、プログラム間をファイアウォールで区切ったセキュアな実行環境が実現される。つまり、本実施形態に係る情報処理方法が用いられる場合には、例えば特許文献１に記載の技術が用いられる場合のように、プログラム間をファイアウォールで区切ったセキュアな実行環境を実現するために、プログラムごとにＶＭを実行する必要はない。よって、本実施形態に係る情報処理方法は、例えば特許文献１に記載の技術が用いられる場合よりもより容易に、リソースが限られたハードウェア環境を有する機器に適用することが可能である。
・情報処理装置１００では、ＶＭによって、ＶＭ上で実行されているプログラムからネイティブコードを呼び出す機能が実現される。よって、情報処理装置１００では、ＶＭ上で実行されるプログラムの処理の一部をネイティブコードで実装することが可能である。また、ＶＭ上で実行されるプログラムの処理の一部をネイティブコードで実装することは、情報処理装置１００においてメモリの制約がある場合に、有効である。
・ＶＭでは、外部バッファの仕組みにより、一部のメモリ領域のデータ共有が可能である。
・ＶＭのプログラムの少なくとも一部を、ネイティブコードで実装することができる。よって、例えば、不揮発メモリに保存されるプログラムサイズに応じて、ＶＭのプログラムの少なくとも一部を、ネイティブコードで実装することができ、また、プログラム実行速度が要求される処理をネイティブコードで実装することができる。
【０１５０】
以上、添付図面を参照しながら本開示の好適な実施形態について詳細に説明したが、本開示の技術的範囲はかかる例に限定されない。本開示の技術分野における通常の知識を有する者であれば、請求の範囲に記載された技術的思想の範疇内において、各種の変更例または修正例に想到し得ることは明らかであり、これらについても、当然に本開示の技術的範囲に属するものと了解される。
【０１５１】
また、本明細書に記載された効果は、あくまで説明的または例示的なものであって限定的ではない。つまり、本開示に係る技術は、上記の効果とともに、または上記の効果に代えて、本明細書の記載から当業者には明らかな他の効果を奏しうる。
【０１５２】
なお、以下のような構成も本開示の技術的範囲に属する。
（１）
仮想機械を実行する処理部を備え、
前記仮想機械は、スタックマシンによりプログラムを動作させ、
記憶媒体に割り当てられた記憶領域に、第１のプログラムが動作する第１の動作領域を確保し、
前記第１のプログラムから前記第１のプログラムと異なる第２のプログラムを呼び出すときに、前記記憶領域に、前記第２のプログラムが動作する第２の動作領域を確保する、情報処理装置。
（２）
前記仮想機械は、呼び出された前記第２のプログラムの実行を終了させ、呼び出し元の前記第１のプログラムを実行するとき、前記第２の動作領域を解放する、（１）に記載の情報処理装置。
（３）
前記仮想機械は、前記第１のプログラムと前記第２のプログラムとの間のデータの授受を、前記第１の動作領域に設けられた第１のバッファおよび前記第２の動作領域に設けられた第２のバッファを介して行う、（１）または（２）に記載の情報処理装置。
（４）
前記仮想機械は、前記第２のバッファから前記第１のバッファを参照することにより、前記第１のプログラムのデータを前記第２のプログラムで共有する、（３）に記載の情報処理装置。
（５）
前記仮想機械は、前記第２のバッファから前記第１のバッファの一部を参照することにより、前記第１のプログラムのデータを前記第２のプログラムで共有する、（４）に記載の情報処理装置。
（６）
前記第２のバッファは、前記第１のバッファにリンクが張られている、前記第１のバッファの外部バッファを含み、
前記仮想機械は、前記外部バッファから前記第１のバッファを参照することにより、前記第１のプログラムのデータを前記第２のプログラムで共有する、（４）または（５）に記載の情報処理装置。
（７）
前記仮想機械は、プロセッサにより実行されるネイティブコードで実装され、
前記記憶領域に、プログラムと前記ネイティブコードとの連携のための連携領域を確保し、
前記プログラムと前記ネイティブコードとの間のデータの授受を、前記連携領域を介して行う、（１）〜（６）のいずれか１つに記載の情報処理装置。
（８）
前記情報処理装置は、ＩＣ（Integrated  Circuit）カードである、（１）〜（７）のいずれか１つに記載の情報処理装置。
（９）
仮想機械を実行するステップを有し、
前記仮想機械は、スタックマシンによりプログラムを動作させ、
記憶媒体に割り当てられた記憶領域に、第１のプログラムが動作する第１の動作領域を確保し、
前記第１のプログラムから前記第１のプログラムと異なる第２のプログラムを呼び出すときに、前記記憶領域に、前記第２のプログラムが動作する第２の動作領域を確保する、情報処理装置により実行される情報処理方法。
【符号の説明】
【０１５３】
１００    情報処理装置
１０２    通信部
１０４    制御部
１１０    処理部
【図１】
2019049542.tif 000003
【図２】
2019049542.tif 000004
【図３】
2019049542.tif 000005
【図４】
2019049542.tif 000006
【図５】
2019049542.tif 000007
【図６】
2019049542.tif 000008
【図７】
2019049542.tif 000009
【図８】
2019049542.tif 000010
【国際調査報告】
2019049542.tif 000011
2019049542.tif 000012
2019049542.tif 000013