(57)【要約】  ページ単位でアドレス変換を行うメモリ管理装置を提供する。  メモリ管理装置は、仮想アドレス空間上に定義された各リージョンのベース仮想アドレスと、物理メモリ上に置かれたリージョン毎のページテーブルのアドレスと、リージョンに定義されたページサイズ、及びリージョンサイズに関する情報をリージョン毎のエントリに保持するリージョン情報保持部と、仮想アドレスを含むリージョンに対応するページテーブルアドレスに基づいて、前記物理メモリ上の該当するページテーブルから仮想アドレスに対応する物理アドレスの情報を探索する探索部を具備する。
2019159472.tif 000002
【特許請求の範囲】
【請求項１】
ページ単位で仮想アドレスから物理アドレスへのアドレス変換を行うメモリ管理装置であって、
前記仮想アドレス空間に定義されたリージョンのアドレス変換情報と、リージョンが持つ固有のページサイズを保持するリージョン情報保持部と、
仮想アドレスを含むリージョンの前記アドレス変換情報を用いて、仮想アドレスに対応する物理アドレスの情報を探索する探索部と、
を具備するメモリ管理装置。
【請求項２】
前記リージョン情報保持部は、仮想アドレス空間上に定義された各リージョンのベース仮想アドレスと、物理メモリ上に置かれたリージョン毎のページテーブルのアドレスと、リージョンに定義されたページサイズ、及びリージョンサイズに関する情報をリージョン毎のエントリに保持し、
前記探索部は、仮想アドレスを含むリージョンに対応するページテーブルアドレスに基づいて、前記物理メモリ上の該当するページテーブルから仮想アドレスに対応する物理アドレスの情報を探索する、
請求項１に記載のメモリ管理装置。
【請求項３】
前記探索部は、
前記リージョン情報保持部内の、ベース仮想アドレスと、ベース仮想アドレスにリージョンのページサイズを加算したアドレス範囲に仮想アドレスが含まれるエントリから、仮想アドレスを含むリージョンのページテーブルアドレスを特定して、
そのページテーブルアドレスで指定されるページテーブル上の、仮想アドレスとベース仮想アドレスの差分をページサイズで割算して特定されるページから物理アドレス情報を取得する、
請求項２に記載のメモリ管理装置。
【請求項４】
ページ単位でベース仮想アドレスとベース物理アドレスの対応関係を示す情報と、その仮想アドレスを含むリージョンに定義されたページサイズの情報を保持するアドレス変換バッファと、
前記アドレス変換バッファ中の仮想アドレスにヒットするエントリから取得されるベース物理アドレスと仮想アドレスを組み合わせて、仮想アドレスに対応する物理アドレスに変換するアドレス変換部と、
をさらに備える請求項１に記載のメモリ管理装置。
【請求項５】
前記アドレス変換部は、ベース仮想アドレスと、ベース仮想アドレスにリージョンのページサイズを加算したアドレス範囲に仮想アドレスが含まれるエントリを、前記アドレス変換バッファ内で検索する、
請求項４に記載のメモリ管理装置。
【請求項６】
用途が異なるデータを格納する複数のメモリ領域に対して、仮想アドレス空間上で異なるリージョンを割り当てる、
請求項１に記載のメモリ管理装置。
【請求項７】
テキスト領域、ヒープ領域、及びスタック領域に対して、仮想アドレス空間上で異なるリージョンを割り当てる、
請求項１に記載のメモリ管理装置。
【請求項８】
テキスト領域に対して、所定のブロックサイズに基づいてページサイズが定義されたリージョンを割り当てる、
請求項１に記載のメモリ管理装置。
【請求項９】
ヒープ領域に対して、ページサイズが異なる２以上のリージョンを割り当てる、
請求項１に記載のメモリ管理装置。
【請求項１０】
ヒープ領域からメモリ領域を確保する際に、確保したいメモリサイズを超えないページサイズが定義されたリージョンを割り当てる、
請求項９に記載のメモリ管理装置。
【請求項１１】
スタック領域に割り当てられたリージョンでバスフォルトが発生したことに応答して、ページサイズ単位で物理メモリを割り当てる、
請求項１に記載のメモリ管理装置。
【請求項１２】
ページ単位で仮想アドレスから物理アドレスへのアドレス変換を行うメモリ管理方法であって、
前記仮想アドレス空間に定義されたリージョンのアドレス変換情報とリージョンが持つ固有のページサイズを保持するリージョン情報保持部に保持された前記アドレス変換情報を用いて、仮想アドレスに対応する物理アドレスの情報を探索する探索ステップと、
ページ単位でベース仮想アドレスとベース物理アドレスの対応関係を示す情報と、その仮想アドレスを含むリージョンに定義されたページサイズの情報を保持するアドレス変換バッファ中の仮想アドレスにヒットするエントリから取得されるベース物理アドレスと仮想アドレスを組み合わせて、仮想アドレスに対応する物理アドレスに変換するアドレス変換ステップと、
を有するメモリ管理方法。
【請求項１３】
物理メモリと、
仮想アドレス空間に定義されたリージョンのアドレス変換情報とリージョンが持つ固有のページサイズを保持するリージョン情報保持部と、仮想アドレスを含むリージョンの前記アドレス変換情報を用いて仮想アドレスに対応する物理アドレスの情報を探索する探索部を備えて、ページ単位で仮想アドレスから物理アドレスへのアドレス変換を行うメモリ管理ユニットと、
を具備する情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本明細書で開示する技術は、ページ単位でアドレス変換を行うメモリ管理装置及びメモリ管理方法、並びに情報処理装置に関する。
【背景技術】
【０００２】
メモリ管理ユニット（Ｍｅｍｏｒｙ  Ｍａｎａｇｅｍｅｎｔ  Ｕｎｉｔ：ＭＭＵ）は、ページテーブルを用いて仮想アドレスから物理アドレスへのアドレス変換を行うハードウェアである。通常、ＭＭＵは、仮想アドレス空間全体に対してこのようなアドレス変換を行うことで、プロセス毎の仮想アドレス空間を実現するとともに、実メモリ容量以上の仮想メモリを提供する。【０００３】
ところが、組み込み向け機器のような小容量のメモリしか持たない機器に対して仮想アドレス空間全体にわたりページ単位でアドレス変換を行う仕組みを適用すると、仮想アドレス空間の中で実際に使われる領域が小さいため、ページテーブルの中でまったく使用されない箇所が多くなり、無駄なメモリ消費が発生する。【０００４】
また、既存のＭＭＵでは、アドレス変換の単位となるページサイズが固定されている（典型的には、１ページは４ＫＢ程度である）。小容量のヒープメモリ管理などで発生するフラグメンテーションを抑えるためには、ページサイズは小さいことが望ましい。一方、ページサイズが小さいと、同じアドレス範囲のアドレス変換を行うのに必要なページテーブルが大きくなり、ここでも無駄なメモリ消費が発生する。【０００５】
例えば、複数のページテーブルを用いて異なるアドレス変換を行うシーケンサーアドレス管理について提案がなされている（例えば、特許文献１を参照のこと）。このシーケンサーアドレス管理によれば、実行する各スレッドがそれぞれ個別のページテーブルを持つため、小規模メモリのシステムで多数のスレッドを持っているような場合には必要なページテーブルの分量が大きくなってしまうことが懸念される。【０００６】
また、基本となるページサイズの整数倍のメモリを１つのページとして扱って、可変のページサイズを実現するメモリ管理方式について提案がなされている（例えば、特許文献２を参照のこと）。このメモリ管理方式によれば、アドレス変換のためにページテーブル上でも複数のページテーブルエントリが必要であるため、ページ変換のためのページテーブルサイズが大きくなってしまうことが懸念される。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特表２００８−５３６２２４号公報
【特許文献２】特開平９−３１９６５８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
本明細書で開示する技術の目的は、小容量メモリシステム上でもページ単位で効率的にアドレス変換を行うメモリ管理装置及びメモリ管理方法、並びに情報処理装置を提供することにある。
【課題を解決するための手段】
【０００９】
本明細書で開示する技術は、上記課題を参酌してなされたものであり、その第１の側面は、ページ単位で仮想アドレスから物理アドレスへのアドレス変換を行うメモリ管理装置であって、
前記仮想アドレス空間に定義されたリージョンのアドレス変換情報と、リージョンが持つ固有のページサイズを保持するリージョン情報保持部と、
仮想アドレスを含むリージョンの前記アドレス変換情報を用いて、仮想アドレスに対応する物理アドレスの情報を探索する探索部と、
を具備するメモリ管理装置である。【００１０】
前記リージョン情報保持部は、仮想アドレス空間上に定義された各リージョンのベース仮想アドレスと、物理メモリ上に置かれたリージョン毎のページテーブルのアドレスと、リージョンに定義されたページサイズ、及びリージョンサイズに関する情報をリージョン毎のエントリに保持している。したがって、前記探索部は、前記リージョン情報保持部内の、ベース仮想アドレスと、ベース仮想アドレスにリージョンのページサイズを加算したアドレス範囲に仮想アドレスが含まれるエントリから、仮想アドレスを含むリージョンのページテーブルアドレスを特定し、そのページテーブルアドレスで指定されるページテーブル上の、仮想アドレスとベース仮想アドレスの差分をページサイズで割算して特定されるページから物理アドレス情報を取得することができる。【００１１】
また、第１の側面に係るメモリ管理装置は、ページ単位でベース仮想アドレスとベース物理アドレスの対応関係を示す情報と、その仮想アドレスを含むリージョンに定義されたページサイズの情報を保持するアドレス変換バッファと、前記アドレス変換バッファ中の仮想アドレスにヒットするエントリから取得されるベース物理アドレスと仮想アドレスを組み合わせて、仮想アドレスに対応する物理アドレスに変換するアドレス変換部をさらに備えている。そして、前記アドレス変換部は、ベース仮想アドレスと、ベース仮想アドレスにリージョンのページサイズを加算したアドレス範囲に仮想アドレスが含まれるエントリを、前記アドレス変換バッファ内で検索することができる。【００１２】
また、第１の側面に係るメモリ管理装置は、用途が異なるデータを格納する複数のメモリ領域に対して、仮想アドレス空間上で異なるリージョンを割り当てる。具体的には、メモリ管理装置は、テキスト領域、ヒープ領域、及びスタック領域に対して、仮想アドレス空間上で、それぞれ固有のページサイズが定義された異なるリージョンを割り当てる。【００１３】
また、本明細書で開示する技術の第２の側面は、ページ単位で仮想アドレスから物理アドレスへのアドレス変換を行うメモリ管理方法であって、
前記仮想アドレス空間に定義されたリージョンのアドレス変換情報とリージョンが持つ固有のページサイズを保持するリージョン情報保持部に保持された前記アドレス変換情報を用いて、仮想アドレスに対応する物理アドレスの情報を探索する探索ステップと、
ページ単位でベース仮想アドレスとベース物理アドレスの対応関係を示す情報と、その仮想アドレスを含むリージョンに定義されたページサイズの情報を保持するアドレス変換バッファ中の仮想アドレスにヒットするエントリから取得されるベース物理アドレスと仮想アドレスを組み合わせて、仮想アドレスに対応する物理アドレスに変換するアドレス変換ステップと、
を有するメモリ管理方法である。【００１４】
また、本明細書で開示する技術の第３の側面は、
物理メモリと、
仮想アドレス空間に定義されたリージョンのアドレス変換情報とリージョンが持つ固有のページサイズを保持するリージョン情報保持部と、仮想アドレスを含むリージョンの前記アドレス変換情報を用いて仮想アドレスに対応する物理アドレスの情報を探索する探索部を備えて、ページ単位で仮想アドレスから物理アドレスへのアドレス変換を行うメモリ管理ユニットと、
を具備する情報処理装置である。
【発明の効果】
【００１５】
本明細書で開示する技術によれば、アドレス変換の対象となる複数のリージョンを定義するとともに、リージョン毎のページサイズを定義することによって、小容量メモリシステム上でもページ単位で効率的にアドレス変換を行うメモリ管理装置及びメモリ管理方法、並びに情報処理装置を提供することができる。【００１６】
なお、本明細書に記載された効果は、あくまでも例示であり、本発明の効果はこれに限定されるものではない。また、本発明が、上記の効果以外に、さらに付加的な効果を奏する場合もある。【００１７】
本明細書で開示する技術のさらに他の目的、特徴や利点は、後述する実施形態や添付する図面に基づくより詳細な説明によって明らかになるであろう。
【図面の簡単な説明】
【００１８】
【図１】図１は、本明細書で開示する技術を適用可能な組み込み機器を含むシステム１の構成例を模式的に示した図である。
【図２】図２は、センシングデバイス１００のハードウェア構成例を示した図である。
【図３】図３は、ＭＭＵ１０２の構成例をアドレス変換の仕組みとともに示した図である。
【図４】図４は、ＭＭＵ１０２を初期化する処理手順を示したフローチャートである。
【図５】図５は、初期化した後のＭＭＵ１０２において仮想アドレスから物理アドレスに変換するための処理手順を示したフローチャートである。
【図６】図６は、アドレス変換機構３０３が仮想アドレスを物理アドレスに変換するための処理手順を示したフローチャートである。
【図７】図７は、ページウォーク機構３０４が物理メモリ３０５上のページテーブルを参照するための処理手順を示したフローチャートである。
【図８】図８は、ＭＭＵ１０２を用いてアドレス変換を行う具体例を示した図である。
【図９】図９は、ＭＭＵ１０２を用いてアドレス変換を行う具体例を示した図である。
【図１０】図１０は、ＭＭＵ１０２を用いてアドレス変換を行う具体例を示した図である。
【図１１】図１１は、ＭＭＵ１０２を用いてアドレス変換を行う具体例を示した図である。
【図１２】図１２は、ＭＭＵ１０２を用いて実現される、仮想アドレス空間におけるリージョンの構成例を示した図である。
【図１３】図１３は、図１及び図２に示した組込み機器を実現するハードウェアで動作するソフトウェアの構成例を示した図である。
【図１４】図１４は、オペレーティングシステムを用いたメモリ管理方法を説明するための図である。
【図１５】図１５は、仮想メモリマネージャによって提供される仮想アドレス空間と、その上で実行される各タスクの関係を示した図である。
【図１６】図１６は、仮想メモリマネージャによって提供されるリージョンのうち、Ｒｅｇｉｏｎ＃０をテキスト領域として使用するための仕組みを説明するための図である。
【図１７】図１７は、フラッシュメモリ１０４内のファイルをメモリ空間へマッピングするための処理手順を示したフローチャートである。
【図１８】図１８は、メモリ空間へマッピングしたファイルを解放するための処理手順を示したフローチャートである。
【図１９】図１９は、Ｒｅｇｉｏｎ＃１及びＲｅｇｉｏｎ＃２をヒープ領域として使用するための仕組みを説明するための図である。
【図２０】図２０は、ヒープ領域からメモリを確保するための処理手順を示したフローチャートである。
【図２１】図２１は、ヒープ領域に確保したメモリを解放するための処理手順を示したフローチャートである。
【図２２】図２２は、ページサイズが４ＫＢに定義されているＲｅｇｉｏｎ＃１からメモリを確保する処理を示したフローチャートである。
【図２３】図２３は、ページサイズが４ＫＢに定義されているＲｅｇｉｏｎ＃１に確保したメモリを解放する処理を示したフローチャートである。
【図２４】図２４は、ページサイズが１ＫＢに定義されているＲｅｇｉｏｎ＃２からメモリを確保する処理を示したフローチャートである。
【図２５】図２５は、ページサイズが１ＫＢに定義されているＲｅｇｉｏｎ＃２に確保したメモリを解放する処理を示したフローチャートである。
【図２６】図２６は、メモリブロックマネージャから空きメモリブロックを取得するための処理手順を示したフローチャートである。
【図２７】図２７は、メモリブロックマネージャへメモリブロックを返すための処理手順を示したフローチャートである。
【図２８】図２８は、仮想メモリマネージャによって提供されるリージョンのうち、Ｒｅｇｉｏｎ＃３をスタック領域として使用するための仕組みを説明するための図である。
【図２９】図２９は、スタック領域を動的に割り当てるための処理手順を示した図である。
【図３０】図３０は、タスク終了時にスタックを解放するための処理手順を示したフローチャートである。
【発明を実施するための形態】
【００１９】
以下、図面を参照しながら本明細書で開示する技術の実施形態について詳細に説明する。
【００２０】
本明細書では、仮想アドレス空間全体に対してアドレス変換を行うメモリ管理方式を小容量のメモリしか持たない機器に適用した場合に、仮想アドレス空間の中で実際に使われる領域が小さいために無駄なメモリ消費が発生することや、フラグメンテーション抑止のために小さいページサイズに固定するとページテーブルが大きくなり無駄なメモリ消費が発生することに鑑みて、新規のメモリ管理方式を提案する。
【００２１】
本明細書で開示する技術によれば、仮想アドレス空間の中で、アドレス変換の対象となる複数の領域（リージョン）を定義して、各リージョンにおいてページ単位でアドレス変換を行うが、リージョン毎に固有のページサイズを定義することが可能であり、したがって、小容量メモリシステム上でも効率的にＭＭＵを用いたアドレス変換を実現することができる。また、本明細書で開示する技術によれば、リージョン毎に固定のページサイズを持ち、各リージョンのアドレス変換を行うページテーブル上では、ページサイズに拘わらず１ページは１エントリを使用するので、アドレス変換を効率的に行うことができる。
【００２２】
一般に、プログラムが動作する際にはテキスト領域、ヒープ領域、スタック領域といった複数の種類の領域を使用するが、これらの領域はそれぞれ異なる特徴を持つ。
【００２３】
テキスト領域は、命令コードやプログラムの実行時に参照する読み込み専用のデータなどが含まれる。組み込み機器の場合にはフラッシュメモリなどの不揮発メモリに置かれたデータがこれに使用されることが多い。フラッシュメモリへの書き込みは特定のブロックサイズ（典型的には６４ＫＢ程度）を単位として行われることを考慮すると、テキスト領域はこうしたブロックサイズを単位として扱うことが効率的である。
【００２４】
ヒープ領域は、プログラムの実行中に保持する必要のあるデータを置くために、実行中に動的に確保と解放が行われる領域である。ヒープ領域からどのような単位でメモリを確保するかは、処理内容やプログラムの書き方に大きく依存し、数バイトのこともあれば数１００ＫＢを超えることもある。異なるサイズのメモリの確保と解放が繰り返されると、メモリの断片化が発生し、全体としては空きがあるにも関わらず要求を満たす連続したメモリを確保することができなくなることがある。メモリの断片化の状況を避けるためには、ヒープ領域をいくつかの領域に分類し、確保するメモリのサイズによってそれらを使い分けるといった方法が考えられる。
【００２５】
スタック領域は、プログラムの実行における関数呼び出しの進行などにより、動的に使用量が増えていく領域であるが、プログラムの書き方や処理内容によって使用量が大きく変化するため、事前に容量を決めておくことが難しい。そのため、使用状況に応じてページサイズ毎にメモリを動的に割り当てていくことが考えられるが、システムで動作するタスクの平均的なスタック消費量が小さい場合は、それに合わせて割り当て単位となるページサイズも小さいことが望ましい。
【００２６】
このように異なる特徴をもった複数のメモリ領域に対しても、本明細書で開示する技術を適用したＭＭＵによって、それぞれに適切なページサイズを持ったリージョンを割り当てることができ、各メモリ領域それぞれの特徴に合致した、効率的なメモリ管理が行えるようになる。
【００２７】
図１には、本明細書で開示する技術を適用可能な組み込み機器を含むシステム１の構成例を模式的に示している。図示のシステム１は、組み込み機器に相当するセンシングデバイス１００と、基地局２００と、クラウド２０１上に設置されたサーバ２０２で構成される。センシングデバイス１００は、基地局２００に無線接続して、クラウド２０１経由でサーバ２０２にアクセスすることができる。
【００２８】
センシングデバイス１００は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１０１、ＭＭＵ１０２、ＳＲＡＭ（Ｓｔａｔｉｃ  ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ））１０３やフラッシュメモリ１０４などのメモリ、センサ１０５、通信モジュール１０６を備え、電池１０７で駆動する機器である。
【００２９】
センシングデバイス１００は、例えば装着者に装着して用いられる。ＣＰＵ１０１は、センサ１０５の検出信号に基づいて装着者の行動（止まっている、歩いている、走っているなど）を解析する。そして、解析結果を通信モジュール１０６から基地局２００へ無線送信し、クラウド２０１経由でサーバ２０２に記録される。サーバ２０２は、センシングデバイス１００から受け取ったデータを、装着者の見守りなどに使用する。
【００３０】
図２には、組み込み機器の一例としてのセンシングデバイス１００のハードウェア構成例を示している。
【００３１】
ＣＰＵ１０１は、ＭＭＵ１０２経由でシステムバス１１０に接続されている。また、システムバス１１０上には、ＳＲＡＭ１０３、フラッシュメモリ１０４、センサ１０５、通信モジュール１０６といったデバイスが接続されている。
【００３２】
フラッシュメモリ１０４は、例えば、センサ１０５の信号に基づいて装着者の行動を推定するアプリケーションや、アプリケーションを実行する際に使用するライブラリ、装着者の行動を推定するための行動推定辞書などのデータを格納している。また、センサ１０５は、加速度センサ、気圧センサ、ジャイロ、ＧＰＳ（Ｇｌｏｂａｌ  Ｐｏｓｉｔｉｏｎｉｎｇ  Ｓｙｓｔｅｍ）、ＴＯＦ（Ｔｉｍｅ  Ｏｆ  Ｆｌｉｇｈｔ）画像距離センサ、ＬＩＤＡＲ（Ｌｉｇｈｔ  Ｄｅｔｅｃｔｉｏｎ  ａｎｄ  Ｒａｎｇｉｎｇ）センサなど、１以上のセンサデバイスで構成される。
【００３３】
システムバス１１０に接続されたこれらデバイスが配置される物理アドレス空間が、ＭＭＵ１０２によるアドレス変換の対象となる。この物理アドレス空間には、ＳＲＡＭ１０３が配置される他、フラッシュメモリ１０４がその内容がＣＰＵ１０１若しくはＭＭＵ１０２から直接見える形で配置されていたり、通信モジュール１０６や、センサ１０５に含まれる各種センサデバイスのＩ／Ｏポートが配置されていたりする。
【００３４】
図３には、本実施形態に係るＭＭＵ１０２の構成例を示している。同図では、ＭＭＵ１０２によって、仮想アドレス（Ｖｉｒｔｕａｌ  Ａｄｄｒｅｓｓ：ＶＡ）から物理アドレス（Ｐｈｙｓｉｃａｌ  Ａｄｄｒｅｓｓ：ＰＡ）へ変換される流れを併せて示している。
【００３５】
図示のＭＭＵ１０２は、トランスレーションルックアサイドバッファ（ＴＬＢ）３０１と、リージョンデスクリプタ３０２の２つのブロックを備えている。
【００３６】
ＴＬＢ３０１は、一般的なＭＭＵと同様に、ページ単位で仮想アドレスから物理アドレスへ変換するための情報を持つために用いられる。ＴＬＢ３０１のエントリ数は任意である。例えば、アドレス変換の効率とＭＭＵを実現する回路規模のトレードオフから、ＭＭＵの設計者がＴＬＢのエントリ数を決定する。
【００３７】
ＴＬＢ３０１の各エントリＴ0〜Ｔnは、ベース仮想アドレスＴＢ0〜ＴＢn、ベース物理アドレスＴＴ0〜ＴＴn、ページサイズＴＰ0〜ＴＰn、エントリ有効フラグＴＶ0〜ＴＶnをそれぞれ持つ。ベース仮想アドレスＴＢ0〜ＴＢnには、各々のＴＬＢエントリＴ0〜Ｔnによってアドレス変換が行われるページの仮想アドレスが格納される。ベース物理アドレスＴＴ0〜ＴＴnには、各々のＴＬＢエントリＴ0〜Ｔnのベース仮想アドレスＴＢ0〜ＴＢnに対応する変換後の物理アドレスが格納される。ページサイズＴＰ0〜ＴＰnには、各々のＴＬＢエントリＴ0〜Ｔnが示すページのサイズ（すなわち、仮想アドレスＴＢ0〜ＴＢnが属するリージョンに定義されているページのサイズ）が格納される。エントリ有効フラグＴＶ0〜ＴＶnには、各々のＴＬＢエントリＴ0〜Ｔn自体の有効性（有効又は無効）を示すフラグが格納される。
【００３８】
リージョンデスクリプタ３０２は、ＭＭＵ１０２によるアドレス変換の対象となる領域（リージョン）を設定するために用いられる。そのため、このＭＭＵ１０２が提供することのできるリージョンの個数だけのエントリをリージョンデスクリプタ３０２が持つ。図３に示す例では、リージョンデスクリプタ３０２は、Ｒ0〜Ｒ3の４つのエントリを持っている。
【００３９】
リージョンデスクリプタ３０２の各エントリＲ0〜Ｒ3は、ベース仮想アドレスＲＢ0〜ＲＢ3、ページテーブルアドレスＲＴ0〜ＲＴ3、ページサイズＲＰ0〜ＲＰ3、リージョンサイズＲＳ0〜ＲＳ3を持つ。ベース仮想アドレスＲＢ0〜ＲＢ3には、各々のリージョンＲ0〜Ｒ3が配置される仮想アドレス空間上の先頭アドレスが格納される。ページテーブルアドレスＲＴ0〜ＲＴ3には、各々のリージョンＲ0〜Ｒ3について仮想アドレスから物理アドレスへの変換に使用されるページテーブルＰ0〜Ｐ3が置かれている物理アドレスが格納される。ページサイズＲＰ0〜ＲＰ3には、各々のリージョンＲ0〜Ｒ3を構成するページのページサイズのサイズが格納される。リージョンサイズＲＳ0〜ＲＳ3には、各々のリージョンＲ0〜Ｒ3自体のサイズが格納される。
【００４０】
物理メモリ３０５上には、リージョンの数と同数のページテーブルＰ0〜Ｐ3が存在する。リージョン毎のページテーブルＰ0〜Ｐ3はそれぞれ、対応するリージョンのページ数と同じエントリ数を持ち、各エントリには対応するリージョンにおけるページの変換先の物理アドレスが格納されている。リージョンサイズをそのリージョンのページサイズで割った値が、そのリージョンのページ数となる（リージョンＲxの場合、ＲＳx／ＲＰxがそのリージョンのページ数となる）。
【００４１】
図示のＭＭＵ１０２における仮想アドレスから物理アドレスへのアドレス変換は、仮想アドレスとＴＬＢ３０１及びリージョンデスクリプタ３０２それぞれの各エントリのベースアドレスを比較し、一致するエントリが存在するかどうかに応じて行われる。仮想アドレスから物理アドレスへ変換する流れについて説明しておく。
【００４２】
ＣＰＵ１０１は、仮想アドレスを用いてメモリ空間にアクセスする。ＭＭＵ１０２は、アクセス要求された仮想アドレスのベースアドレス部分と、ＴＬＢ３０１の各エントリＴ0〜Ｔnのベース仮想アドレスＴＢ0〜ＴＢnを比較する。ここで、対応するエントリが見つかった、すなわちＴＬＢヒットした場合には、アドレス変換機構３０３はそのエントリを用いてベース仮想アドレスをベース物理アドレスに変換する。そして、そのベース物理アドレスと、アクセス要求された仮想アドレスのオフセットアドレスとを組み合わせて、物理アドレスを得ることができる。
【００４３】
一方、ＴＬＢ３０１の中からアクセス要求された仮想アドレスのベースアドレス部分に対応するエントリが見つからなかった、すなわちＴＬＢミスした場合には、ＭＭＵ１０２は、アクセス要求された仮想アドレスのベースアドレス部分と、リージョンデスクリプタ３０２の各エントリＲ0〜Ｒ3のベース仮想アドレスＲＢ0〜ＲＢ3と比較して、対応するエントリ内のページテーブルアドレスＲＴXを参照する。ページウォーク機構３０４は、そのページテーブルアドレスＲＴXを用いて物理メモリ３０５上の該当するページテーブルＰXを参照して、アクセス要求された仮想アドレスに該当するページテーブルエントリを見つけ出すと、得られた内容に基づいてＴＬＢ３０１内の任意のエントリを更新する。このようにして、アクセス要求された仮想アドレスと物理アドレスをマッピングする新たなエントリがＴＬＢ３０１に格納される。
【００４４】
図４〜図７には、アドレス変換に関連する処理手順を、それぞれフローチャートの形式で示している。
【００４５】
図４には、ＭＭＵ１０２を初期化するための処理手順をフローチャートの形式で示している。ＭＭＵ１０２の初期化は、基本的には、オペレーティングシステム（ＯＳ）の起動時に実施される。
【００４６】
まず、ＴＬＢ３０１内のすべてのエントリを無効に設定する（ステップＳ４０１）。具体的には、すべてのエントリのエントリ有効フラグＴＶ0〜ＴＶnにＦａｌｓｅを代入する。
【００４７】
そして、リージョンデスクリプタ３０２内の各エントリＲ0〜Ｒ3に対して、各リージョンを定義するためにベース仮想アドレスＲＢ0〜ＲＢ3、ページテーブルアドレスＲＴ0〜ＲＴ3、ページサイズＲＰ0〜ＲＰ3、リージョンサイズＲＳ0〜ＲＳ3を設定する（ステップＳ４０２）。
【００４８】
なお、詳細な説明を省略するが、ＯＳの起動時には、物理メモリ３０５上のリージョン毎の各ページテーブルＰ0〜Ｐ3の初期化も実施される。
【００４９】
図５には、初期化した後のＭＭＵ１０２において仮想アドレスから物理アドレスに変換するための処理手順をフローチャートの形式で示している。
【００５０】
まず、要求された仮想アドレスとＴＬＢ３０１内の各エントリＴ0〜Ｔnを比較して（ステップＳ５０１）、いずれかのエントリと合致するかどうかをチェックする（ステップＳ５０２）。ここで、ｘ番目のエントリＴxに関して、ベース仮想アドレスＴＢxと、ベース仮想アドレスＴＢxにページサイズＴＰxを加算した範囲内に仮想アドレスＶＡが含まれていれば（すなわち、ＴＢx≦ＶＡ＜ＴＢx＋ＴＰx、且つ、ＴＶx＝Ｔｒｕｅ）、仮想アドレスＶＡはそのエントリＴxと合致することになる。
【００５１】
そして、要求された仮想アドレスに合致するエントリがＴＬＢ３０１内で見つかった場合には（ステップＳ５０２のＹｅｓ）、アドレス変換機構３０３による仮想アドレスから物理アドレスへの変換処理を実行する（ステップＳ５０３）。アドレス変換機構３０３による仮想アドレスから物理アドレスへの変換処理の詳細については、図６を参照されたい。
【００５２】
一方、要求された仮想アドレスに合致するエントリがＴＬＢ３０１内で見つからなかった場合（ステップＳ５０２のＮｏ）、すなわちＴＬＢミスした場合には、続いて、要求された仮想アドレスとリージョンデスクリプタ３０２内の各エントリＲ0〜Ｒnを比較して（ステップＳ５０４）、いずれかのエントリと合致するかどうかをチェックする（ステップＳ５０５）。ここで、ｘ番目のエントリＲxに関して、ベース仮想アドレスＲＢxと、ベース仮想アドレスＲＢxにページサイズＲＳxを加算した範囲内に仮想アドレスＶＡが含まれていれば（すなわち、ＲＢx≦ＶＡ＜ＲＢx＋ＲＳx）、仮想アドレスＶＡはそのエントリＲxと合致することになる。
【００５３】
そして、要求された仮想アドレスに合致するエントリがリージョンデスクリプタ３０２内で見つかった場合には（ステップＳ５０５のＹｅｓ）、ページウォーク機構３０４による物理メモリ３０５上のページテーブル参照処理を実行して（ステップＳ５０６）、アクセス要求された仮想アドレスと物理アドレスをマッピングする新たなエントリをＴＬＢ３０１に作成する。その後、ステップＳ５０１に戻り、アドレス変換機構３０３による仮想アドレスから物理アドレスへの変換処理を改めて実行する。ページウォーク機構３０４による物理メモリ３０５上のページテーブル参照処理の詳細については、図７を参照されたい。
【００５４】
なお、リージョンデスクリプタ３０２内でも、要求された仮想アドレスに合致するエントリが見つからなかった場合には（ステップＳ５０５のＮｏ）、アドレス変換が不能なので、バスフォルトエラーを発生して、仮想アドレスから物理アドレスへの変換処理を中止する。
【００５５】
図６には、図５に示したフローチャート中のステップＳ５０６で実行される、アドレス変換機構３０３が仮想アドレスを物理アドレスに変換するための処理手順をフローチャートの形式で示している。
【００５６】
アドレス変換機構３０３は、ＴＬＢ３０１内の、要求された仮想アドレスと合致するエントリＴxからベース物理アドレスＴＴxを取得すると（ステップＳ６０１）、そのベース物理アドレスと、アクセス要求された仮想アドレスのオフセットアドレスとを組み合わせて、物理アドレスを計算する（ステップＳ６０２）。
【００５７】
ステップＳ６０２では、具体的には、ＴＬＢ３０１内のエントリＴxから取得した物理アドレスＴＴxに、要求された仮想アドレスＶＡとベース仮想アドレスＴＢxの差分を加算して、物理アドレスＰＡを求めることができる（すなわち、ＰＡ←ＴＴx＋（ＶＡ−ＴＢx））。
【００５８】
図７には、図５に示したフローチャート中のステップＳ５０６で実行される、ページウォーク機構３０４が物理メモリ３０５上のページテーブルを参照して、仮想アドレスと物理アドレスをマッピングする新たなエントリをＴＬＢ３０１に作成するための処理手順をフローチャートの形式で示している。
【００５９】
ページウォーク機構３０４は、まず、リージョンデスクリプタ３０２の対応するエントリＲxに格納されている情報と、要求された仮想アドレスＶＡに基づいて、物理メモリ３０５上の該当するページテーブルの何ページ目のエントリを取得すべきかを決定する（ステップＳ７０１）。具体的には、仮想アドレスＶＡとベース仮想アドレスＲＢxの差分をそのリージョンのページサイズＲＰxで割って、整数に切り捨てた値ｎが、ページテーブルのエントリとなる（すなわち、ｎ←ｉｎｔ（（ＶＡ−ＲＢx）／ＲＰx））。
【００６０】
次いで、ページウォーク機構３０４は、リージョンデスクリプタ３０２の対応するエントリＲxに格納されているページテーブルアドレスＲＴxの物理アドレスに置かれているページテーブルから、ｎ番目のエントリの値ＰＰ、すなわち要求された仮想アドレスＶＡに対応するベース物理アドレスを取得する（すなわち、ＰＰ←Ｐxn）（ステップＳ７０２）。
【００６１】
次いで、ページウォーク機構３０４は、ＴＬＢ３０１内に無効のエントリＴＶyが存在するかどうかをチェックする（すなわち、ＴＶy＝Ｆａｌｓｅ）（ステップＳ７０３）。
【００６２】
ここで、ＴＬＢ３０１内に無効のエントリＴＶyが存在しない場合には（ステップＳ７０３のＮｏ）、ページウォーク機構３０４は、ＴＬＢ３０１内の任意のｙ番目のエントリを選択して、無効エントリに設定する（すなわち、ＴＶy←Ｆａｌｓｅ）（ステップＳ７０４）。
【００６３】
そして、ページウォーク機構３０４は、ＴＬＢ３０１内で見つけた無効のエントリｙ（若しくは、無効に設定したエントリｙ）を有効化して、当該エントリに新たなアドレス変換情報を設定する（ステップＳ７０５）。具体的には、エントリ有効フラグＴＶyを有効とし、新たなベース仮想アドレスＴＢy、ベース物理アドレスＴＴy、ページサイズＴＰyを設定する（すなわち、ＴＢy←ＲＢx＋（ＲＰx×ｎ）、ＴＴy←ＰＰ、ＴＰy←ＲＰx、ＴＶy←Ｔｒｕｅ）。
【００６４】
このようにして、アクセス要求された仮想アドレスと物理アドレスをマッピングする新たなエントリがＴＬＢ３０１に格納される。
【００６５】
図８〜図１１には、ＭＭＵ１０２を用いてアドレス変換を行う具体例を示している。ここでは、例として仮想アドレス空間上に以下の表１に示すような４つのリージョンが定義されているものする（但し、０ｘはその値が１６進数であることを示す）。
【００６６】
【表１】
2019159472.tif 000003
【００６７】
各リージョンは、ページテーブルアドレスに設定された物理アドレス（ＲＴ0〜ＲＴ3）にそれぞれページテーブル（Ｐ0〜Ｐ3）を持つ。各ページテーブル（Ｐ0〜Ｐ3）には、ページ単位で仮想アドレスを変換した後の物理アドレス（Ｐ00〜Ｐ3n）が格納されている。上記の表１に示す例では、リージョンＲ0の場合、リージョンサイズがＲＳ0＝１６ＭＢ、ページサイズがＲＰ0＝６４ＫＢなので、ＲＳ0／ＲＰ0＝２５６ が、このページテーブルのエントリ数となる。
【００６８】
したがって、リージョンデスクリプタ３０２のエントリＲ0には、ベース仮想アドレスＲＢ0＝０ｘ１０００００００、ページテーブルアドレスＲＴ0＝０ｘ０００１００００、ページサイズＲＰ0＝６４ＫＢ、リージョンサイズＲＳ0＝１６ＭＢが格納される。また、エントリＲ1には、ベース仮想アドレスＲＢ1＝０ｘ２０００００００、ページテーブルアドレスＲＴ1＝０ｘ０００２００００、ページサイズＲＰ0＝４ＫＢ、リージョンサイズＲＳ1＝１ＭＢが格納される。また、エントリＲ2には、ベース仮想アドレスＲＢ2＝０ｘ３０００００００、ページテーブルアドレスＲＴ2＝０ｘ０００３００００、ページサイズＲＰ2＝１ＫＢ、リージョンサイズＲＳ2＝２５６ＫＢが格納される。また、エントリＲ3には、ベース仮想アドレスＲＢ2＝０ｘ４０００００００、ページテーブルアドレスＲＴ3＝０ｘ０００４００００、ページサイズＲＰ3＝１ＫＢ、リージョンサイズＲＳ3＝２５６ＫＢが格納される。
【００６９】
また、図８に示すＭＭＵ１０２は、図４に示した処理手順に従って初期化した直後の状態であることを想定している。したがって、ＴＬＢ３０１内のすべてのエントリ０〜ｎのエントリ有効フラグＴＶ0〜ＴＶnには、エントリが無効であることを示すＦａｌｓｅが代入されている。
【００７０】
図９には、初期化直後のＭＭＵ１０２（図８を参照のこと）に対して変換前の仮想アドレスとしてＶＡ＝０ｘ１００２００１０が与えられた場合に、アドレス変換を行う具体例を示している。仮想アドレスから物理アドレスへの変換は、図６に示した処理手順に従って実行される。
【００７１】
初期状態では、ＴＬＢ３０１のすべてのエントリは無効なので（ＴＶ0〜ＴＶn＝Ｆａｌｓｅ）、要求された仮想アドレスに合致するエントリは存在しない。すなわちＴＬＢミスするので、リージョンデスクリプタ３０２の中に、要求された仮想アドレスに合致するものがあるかが調べられる。ここでは、リージョンデスクリプタ３０２のエントリＲ0について、ＲＢ0≦ＶＡ＜ＲＢ0＋ＲＳ0を満たすので（０ｘ１０００００００≦０ｘ１００２００１０＜０ｘ１０００００００＋０ｘ０１００００００）、この仮想アドレスはエントリＲ0と合致することになる。
【００７２】
次いで、ページウォーク機構３０４は、図７に示した処理手順に従って、ページウォーク機構３０４がページウォークを実行する。
【００７３】
ページウォーク機構３０４は、まず、リージョンデスクリプタ３０２のエントリＲ0から取得される情報に基づいて、物理メモリ３０５上のページテーブル参照処理を実行して、アクセス要求された仮想アドレスと物理アドレスをマッピングする新たなエントリをＴＬＢ３０１に作成する。具体的には、仮想アドレス０ｘ１００２００１０とベース仮想アドレスＲＢ0（＝０ｘ１０００００００）の差分をそのリージョンのページサイズＲＰ0＝６４ＫＢ（０ｘ０００１００００）で割って、整数に切り捨てた値ｎ＝２（すなわち、ｎ←ｉｎｔ（（ＶＡ−ＲＢx）／ＲＰx））が、物理メモリ３０５上の該当するページテーブルから取得すべきページとなる。
【００７４】
したがって、ページウォーク機構３０４は、物理メモリ３０５上の該当するページテーブルアドレスＲＴ0の２番目のエントリの値Ｐ02（＝０ｘ０００８００００）を、要求された仮想アドレスＶＡに対応するベース物理アドレスＴＴ0として取得する。
【００７５】
そして、ページウォーク機構３０４は、ＴＬＢ３０１内に無効のエントリの中からエントリＴ0を選択して、以下のように新たなベース仮想アドレスＴＢ0、ベース物理アドレスＴＴ0、ページサイズＴＰ0を設定して、当該エントリＴ0を有効化する。図１０には、ページウォークによってエントリＴ0が設定される様子を示している。
【００７６】
ＴＢ0（ベース仮想アドレス）←ＲＢ0＋（ＲＰ0×ｎ）＝０ｘ１０００００００＋（０ｘ０００１００００×２）＝０ｘ１００２００００
ＴＴ0（ベース物理アドレス）←Ｐ02＝０ｘ０００８００００
ＴＰ0（ページサイズ）←ＲＰ0＝６４ＫＢ
ＴＶ0（エントリ有効フラグ）←Ｔｒｕｅ
【００７７】
上記のようにページウォークによって、要求された仮想アドレスと物理アドレスをマッピングする新たなエントリがＴＬＢ３０１に作成されると、アドレス変換機構３０３による仮想アドレスから物理アドレスへの変換処理を改めて実行する。
【００７８】
図１１には、要求された仮想アドレスＶＡ（＝０ｘ１００２００１０）に対して、仮想アドレスから物理アドレスへの変換処理を再実行する様子を示している。今度は、リージョンデスクリプタ３０２に加えて、ＴＬＢ３０１内にも、要求された仮想アドレスに合致するエントリＴ0が見つかる（すなわち、ＴＢ0≦ＶＡ＜ＴＢ0＋ＴＰ0、且つ、ＴＶ0＝Ｔｒｕｅ）。要求された仮想アドレスＶＡがＴＬＢ３０１及びリージョンデスクリプタ３０２の両方で合致する場合には、ＴＬＢ３０１のエントリＴ0が優先される。何故ならば、ＴＬＢヒットした場合には、アドレス変換機構３０３はそのエントリを用いてベース仮想アドレスをベース物理アドレスに直接変換することができ、ページウォークのためのアドレス計算が不要だからである。
【００７９】
アドレス変換機構３０３は、図６に示した処理手順に従って、ＴＬＢ３０１のエントリＴ0とから取得されるベース物理アドレスＴＴ0と、要求された仮想アドレスＶＡから、物理アドレスＰＡを計算する（すなわち、ＰＡ←ＴＴ0＋（ＶＡ−ＴＢ0））。この例では、０ｘ０００８００００＋（０ｘ１００２００１０−０ｘ１００２００００）＝０ｘ０００８００１０が、ＴＬＢ３０１を用いたアドレス変換によって得られる物理アドレスＰＡである。
【００８０】
要するに、本実施形態に係るＭＭＵ１０２は、仮想アドレスから物理アドレスへ変換するための情報を保持するＴＬＢ３０１の他に、アドレス変換の対象として定義された複数のリージョンの各々についてアドレス変換するための情報及びリージョン毎に定義されたページサイズの情報を保持するリージョンデスクリプタ３０２を備えている。ここまでの説明で、本実施形態に係るＭＭＵ１０２によれば、ＴＬＢミスした場合には、リージョン毎に異なるページサイズが定義されていても、リージョンデスクリプタ３０２を利用してページ単位で効率的にアドレス変換を行うことができる、という点を十分理解されたい。
【００８１】
図１２には、本実施形態に係るＭＭＵ１０２を用いて実現される、仮想アドレス空間におけるリージョンの構成例を示している。
【００８２】
図示の仮想アドレス空間には、Ｒｅｇｉｏｎ＃０〜＃３の４つのリージョンが定義されている。各リージョンは、それぞれ６４ＫＢ、４ＫＢ、１ＫＢ、１ＫＢのページサイズを持つ。Ｒｅｇｉｏｎ＃０はテキスト領域、Ｒｅｇｉｏｎ＃１とＲｅｇｉｏｎ＃２はヒープ領域、Ｒｅｇｉｏｎ＃３はスタック領域として使われる。但し、Ｒｅｇｉｏｎ＃１とＲｅｇｉｏｎ＃２は、確保するメモリブロックのサイズによって、これら２つのリージョンを使い分ける。
【００８３】
図１３には、図１及び図２に示した組込み機器（センシングデバイス１００）を実現するハードウェアで動作するソフトウェアの構成例を示している。
【００８４】
センシングデバイス１００は、例えば、スマートフォン、スマートウオッチ、スマートグラス、スマートヘッドフォンなど、ユーザが保持あるいは装着するような装置であってもよいし、電気自動車など移動交通手段に装備されてもよい。
【００８５】
センシングデバイス１００のようなハードウェア上で動作するアプリケーションは、例えば、装着者の動きをセンシングするためのセンシング処理、センシング結果に基づいて装着者の行動を推定する行動推定処理、推定した結果をクラウド２０１経由でサーバ２０２に送信するための通信処理の３つに大別される。また、行動推定処理に使用される行動辞書がアプリケーションに含まれている。これらのアプリケーションは、図１又は図２に示した機器ハードウェアをサポートするとともに、図３に示したＭＭＵ１０２によって実現されるアドレス空間（図１２を参照のこと）を各タスクに提供するＯＳの上で動作する。
【００８６】
センシングデバイス１００は、センサ１０５からの入力に基づいてセンシング処理を行う。センサ１０５で認識可能なセンシングデバイス１００の「動作／状況」を「行動」と関連付けて、「行動定義」として行動辞書に登録することで、行動推定処理において「行動」を認識し、認識された行動に基づいてデバイス自体の制御処理を行うとともに、必要に応じて推定した結果をクラウド２０１経由でサーバ２０２に送信するようにしてもよい。また、行動辞書は、センシング処理の結果や行動推定処理結果などを用いて、ディープニューラルネットワーク（Ｄｅｅｐ  Ｎｅｕｒａｌ  Ｎｅｔｗｏｒｋ）など人工知能の手法を利用して「動作／状況」と「行動」の関係を動的に学習するようになされていてもよい。動作の例としては、「ユーザの動作測定」などがある。状況の例としては、「加速度大」や「加速度小」などがある。例えば、動作「ユーザの動作測定」と状況「加速度大」に対して行動「ユーザが走っている」を関連付け、動作「ユーザの動作測定」と状況「加速度小」に対して行動「ユーザが歩行している」を関連付けて、行動辞書に定義することで、センサ１０５からの入力にしたがって行動認識処理を行うことにより、行動を認識することができる。
【００８７】
ＯＳは、各タスクの動作を制御するタスク管理、フラッシュメモリ１０４上のファイルシステムを管理するフラッシュファイルマネージャ、ＭＭＵ１０２を制御して仮想アドレス空間を構成する仮想メモリマネージャ、構成された仮想メモリに割り当てるための物理メモリの管理を行うメモリブロックマネージャ、などで構成される。また、ＯＳには、接続されているセンサ１０５や通信モジュール１０６、フラッシュメモリ１０４などのデバイスを制御するデバイスドライバも含まれる。
【００８８】
このＯＳを用いたメモリ管理方法について、図１４を参照しながら説明する。
【００８９】
仮想メモリマネージャは主に、ＭＭＵ１０２に設定する各リージョンのページテーブルを管理する。仮想メモリマネージャは、あるリージョンのページに物理メモリを割り当てる場合には、その物理メモリを得るためにメモリブロックマネージャを呼び出す。また、仮想メモリマネージャは、あるリージョンのページにフラッシュメモリ１０４上のファイルを割り当てる場合には、フラッシュファイルマネージャを用いて、該当するファイルがフラッシュメモリ上のどのブロックに配置されているかの情報をファイルシステム内のファイルシステム管理データから取得し、そのブロックの存在する物理アドレスを配置したいリージョンのページテーブルに設定することで、対応する仮想アドレス上に該当ファイルのそのブロックが配置されるようになる。これらのメモリ管理を行うためのメモリ管理ＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｉｎｔｅｒｆａｃｅ）は、ＯＳ自身又はＯＳ上で動くアプリケーションから使用される。
【００９０】
ＯＳは、起動すると自身の初期化が完了した後に、アプリケーション実行のための初期化を行う。アプリケーションはフラッシュメモリ１０４上にあらかじめファイルデータとして格納してあり、そのファイルをメモリ管理ＡＰＩの呼び出しによって仮想アドレス空間に配置し、実行開始アドレスからの実行を行うタスクを生成することで、アプリケーションの実行が始まる。
【００９１】
図１５には、仮想メモリマネージャによって提供される仮想アドレス空間と、その上で実行される各タスクの関係を表している。仮想メモリマネージャは、各タスクが呼び出すメモリ管理ＡＰＩによるメモリ確保並びにメモリ解放要求に従って、その要求に対応するリージョンに対して物理メモリ３０５、あるいはフラッシュメモリ１０４上のブロックを随時割り当てていく。
【００９２】
図１５に示す例では、センシングデバイス１００上でアプリケーションの処理の実行に応じてＯＳが管理するセンシングタスク、行動推定タスク、及び通信タスクが動作していることを想定している。同時に動作する複数のタスク間で、仮想アドレス空間は共有される。
【００９３】
フラッシュメモリ１０４に格納されているセンシング処理、行動推定処理、通信処理などの各アプリケーションの命令コードやプログラムの実行時に参照する読み込み専用のデータなどは、仮想アドレス空間のうち、テキスト領域として使用されるＲｅｇｉｏｎ＃０にマップされる。また、行動推定処理に使用する行動推定辞書も、同じくＲｅｇｉｏｎ＃０にマップされる。
【００９４】
センシングデバイス１００上で動作中のセンシングタスクは、Ｒｅｇｉｏｎ＃０にマップされるセンシング処理アプリケーションを利用する。また、センシングタスクは、プログラムの実行中に保持する必要のあるデータをヒープ領域として使用されるＲｅｇｉｏｎ＃１に置き、実行中に当該領域内でメモリの確保と解放が動的に行われる。また、センシングタスクは、プログラムの実行中に呼び出される関数を、スタック領域として使用されるＲｅｇｉｏｎ＃３に置く。
【００９５】
同様に、センシングデバイス１００上で動作中の行動推定タスクは、Ｒｅｇｉｏｎ＃０にマップされる行動推定処理アプリケーション並びに行動推定辞書を利用する。また、行動推定タスクは、プログラムの実行中に保持する必要のあるデータをヒープ領域として使用されるＲｅｇｉｏｎ＃１に置き、実行中に当該領域内でメモリの確保と解放が動的に行われる。また、行動推定タスクは、プログラムの実行中に呼び出される関数を、スタック領域として使用されるＲｅｇｉｏｎ＃３に置く。
【００９６】
同様に、センシングデバイス１００上で動作中の通信タスクは、Ｒｅｇｉｏｎ＃０にマップされる通信処理アプリケーションを利用する。また、通信タスクは、プログラムの実行中に保持する必要のあるデータをヒープ領域として使用されるＲｅｇｉｏｎ＃１に置き、実行中に当該領域内でメモリの確保と解放が動的に行われる。また、通信タスクは、プログラムの実行中に呼び出される関数を、スタック領域として使用されるＲｅｇｉｏｎ＃３に置く。
【００９７】
図１６には、仮想メモリマネージャによって提供されるリージョンのうち、Ｒｅｇｉｏｎ＃０をテキスト領域として使用するための仕組みを示している。
【００９８】
物理メモリ３０５上のＲｅｇｉｏｎ＃０用のページテーブルには、テキスト領域に貼り付けるフラッシュメモリ１０４上の特定のファイルについて、そのファイルのフラッシュメモリ１０４上のブロックの物理アドレスが設定される。
【００９９】
フラッシュメモリ１０４上にファイルシステムが構成されている場合、ブロックはフラッシュメモリ１０４の中で必ずしも連続したブロックとして並べられているとは限らないが、そうした場合でもページテーブルによるアドレス変換によって、仮想アドレス空間のテキスト領域（Ｒｅｇｉｏｎ＃０）上では連続した仮想アドレスとしてファイルを貼り付けることができる。
【０１００】
また、このＲｅｇｉｏｎ＃０におけるページサイズはフラッシュメモリ１０４のブロックサイズ（典型的には６４ＫＢ）と合致させてある。したがって、例えばフラッシュメモリ１０４上で３ブロックを占めているファイル（１９２ＫＢ）については、ページテーブル上でも３つのエントリがあればこのファイルをテキスト領域にマッピングことができる。
【０１０１】
図１７には、仮想メモリマネージャによって、フラッシュメモリ１０４内のファイルをメモリ空間（仮想アドレス空間のテキスト領域）へマッピングするための処理手順をフローチャートの形式で示している。
【０１０２】
仮想メモリマネージャは、まず、マッピング先のリージョン（Ｒｅｇｉｏｎ＃０）の空きアドレス空間の取得を試みる（ステップＳ１７０１）。
【０１０３】
ここで、マッピング先のリージョンから空きアドレス空間を取得できなかった場合には（ステップＳ１７０２のＮｏ）、アドレス空間不足エラーとして、ファイルのマッピングを諦め、本処理を終了する。
【０１０４】
また、マッピング先のリージョンから空きアドレス空間を取得できた場合には（ステップＳ１７０２のＹｅｓ）、仮想メモリマネージャは、当該リージョンにマップするファイルの、フラッシュメモリ１０４内の配置情報の取得を試みる（ステップＳ１７０３）。ステップＳ１７０３の処理は、図１４中において参照番号１４０２で示す処理に相当する。
【０１０５】
ここで、当該リージョンにマップするファイルの配置情報を取得できない、すなわち、マッピングすべきファイルが存在しない場合には（ステップＳ１７０４のＮｏ）、ファイル不存在エラーとして、ファイルのマッピングを諦め、本処理を終了する。
【０１０６】
また、当該リージョンにマップするファイルの配置情報を取得できたとき、すなわち、マッピングすべきファイルが存在する場合には（ステップＳ１７０４のＹｅｓ）、仮想メモリマネージャは、物理メモリ３０５上における当該リージョンのページテーブルに、そのファイルのメモリ内配置情報を書き込んで（ステップＳ１７０５）、ファイルのマッピング処理を終了する。ステップＳ１７０５の処理は、図１４中において参照番号１４０３で示す処理に相当する。
【０１０７】
また、図１８には、仮想メモリマネージャによって、メモリ空間（仮想アドレス空間のテキスト領域）へマッピングしたファイルを解放するための処理手順をフローチャートの形式で示している。
【０１０８】
仮想メモリマネージャは、解放を指定されたアドレスがファイルのマッピング先であるかどうかをチェックする（ステップＳ１８０１）。
【０１０９】
そして、解放を指定されたアドレスがファイルのマッピング先である場合には（ステップＳ１８０１のＹｅｓ）、仮想メモリマネージャは、リージョンのページテーブルを未使用に戻して（ステップＳ１８０２）、本処理を終了する。ステップＳ１８０２の処理は、図１４中において参照番号１４０３で示す処理に相当する。
【０１１０】
他方、解放を指定されたアドレスがファイルのマッピング先でない場合には（ステップＳ１８０１のＮｏ）、アドレス指定エラーとして、マッピングの解放を諦めて、本処理を終了する。
【０１１１】
図１９には、仮想メモリマネージャによって提供されるリージョンのうち、Ｒｅｇｉｏｎ＃１及びＲｅｇｉｏｎ＃２をヒープ領域として使用するための仕組みを示している。
【０１１２】
先述したように、ヒープ領域からどのような単位でメモリを確保するかは、処理内容やプログラムの書き方に大きく依存する。確保するメモリが数バイトのことも数１００ＫＢのこともある。こうしたサイズのメモリを混在させることによる断片化を防ぐため、本実施形態では、確保するメモリを４ＫＢ以上かそうでないかによって、ヒープアロケータが、Ｒｅｇｉｏｎ♯１とＲｅｇｉｏｎ♯２の２つのリージョンを使い分けている。
【０１１３】
ｍａｌｌｏｃは、動的にメモリを確保する関数であり、ｆｒｅｅは、確保したメモリを動的に開放する関数である。図１９に示す例では、ヒープアロケータが、確保するメモリサイズに応じて、使用するヒープ領域を選択する。
【０１１４】
４ＫＢ未満の小さなメモリ確保要求に対しては、ヒープアロケータは、ページサイズを１ＫＢに設定したＲｅｇｉｏｎ♯２に物理メモリを割り当てる。但し、ページサイズの１ＫＢを超えるメモリ要求については、複数のページを割り当てて使用するようにする。また、４ＫＢ以上のメモリ確保要求に対しては、ヒープアロケータは、ページサイズを４ＫＢに設定したＲｅｇｉｏｎ♯１に物理メモリを割り当てる。
【０１１５】
ヒープ領域に対するメモリ要求をいくつに分類するか、分類の際に閾値として設定するサイズは、アプリケーションのメモリ要求のパターンによって変わってくるが、少なくともこのように確保するサイズによる分類を行うことで、メモリの断片化を抑えることができるようになる。
【０１１６】
図２０には、ヒープ領域からメモリを確保するための処理手順をフローチャートの形式で示している。
【０１１７】
例えば、ｍａｌｌｏｃ関数を用いてメモリの動的確保が要求される。確保したいヒープ領域のメモリサイズが４ＫＢ以上の場合には（ステップＳ２００１のＹｅｓ）、ページサイズが４ＫＢに定義されているＲｅｇｉｏｎ＃１からメモリを確保する処理が実行される（ステップＳ２００２）。Ｒｅｇｉｏｎ＃１からメモリを確保する処理の詳細については、後述に譲る。
【０１１８】
一方、確保したいヒープ領域のメモリサイズが４ＫＢ未満の場合には（ステップＳ２００１のＮｏ）、ページサイズが１ＫＢに定義されているＲｅｇｉｏｎ＃２からメモリを確保する処理が実行される（ステップＳ２００３）。Ｒｅｇｉｏｎ＃２からメモリを確保する処理の詳細については、後述に譲る。
【０１１９】
また、図２１には、ヒープ領域に確保したメモリを解放するための処理手順をフローチャートの形式で示している。
【０１２０】
例えば、ｆｒｅｅ関数を用いてメモリの動的解放が要求される。解放要求されたメモリのアドレスが、ページサイズが４ＫＢに定義されているＲｅｇｉｏｎ＃１である場合には（ステップＳ２１０１のＹｅｓ）、Ｒｅｇｉｏｎ＃１（若しくは、ページサイズが４ＫＢの領域）のメモリを解放する処理が実行される（ステップＳ２１０２）。Ｒｅｇｉｏｎ＃１に確保されたメモリを解放する処理の詳細については、後述に譲る。
【０１２１】
一方、解放要求されたメモリのアドレスがＲｅｇｉｏｎ＃１でない場合には（ステップＳ２１０１のＮｏ）、Ｒｅｇｉｏｎ＃２（若しくは、ページサイズが１ＫＢの領域）のメモリを解放する処理が実行される（ステップＳ２１０３）。Ｒｅｇｉｏｎ＃２に確保されたメモリを解放する処理の詳細については、後述に譲る。
【０１２２】
図２２には、図２０に示したフローチャートのステップＳ２００２で実行される、ページサイズが４ＫＢに定義されているＲｅｇｉｏｎ＃１からメモリを確保するための処理手順をフローチャートの形式で示している。
【０１２３】
まず、仮想メモリマネージャは、Ｒｅｇｉｏｎ＃１内で指定されたサイズの空きアドレス空間の取得を試みる（ステップＳ２２０１）。
【０１２４】
ここで、Ｒｅｇｉｏｎ＃１内で指定されたサイズの空きアドレス空間を取得できなかった場合には（ステップＳ２２０２のＮｏ）、アドレス空間不足エラーとして、ファイルのマッピングを諦め、本処理を終了する。
【０１２５】
また、Ｒｅｇｉｏｎ＃１内で指定されたサイズの空きアドレス空間を取得できた場合には（ステップＳ２２０２のＹｅｓ）、仮想メモリマネージャは、メモリブロックマネージャから、空きメモリブロックを取得する（ステップＳ２２０３）。メモリマネージャから空きメモリブロックを取得する処理の詳細については、後述に譲る。
【０１２６】
そして、メモリブロックマネージャから空きメモリブロックを取得することができた場合には（ステップＳ２２０４のＹｅｓ）、仮想メモリマネージャは、物理メモリ３０５上における当該リージョンのページテーブルに、ステップＳ２２０１で取得したメモリブロックのアドレスを書き込んで（ステップＳ２２０５）、本処理を終了する。ステップＳ２２０５の処理は、図１４中において参照番号１４０３で示す処理に相当する。
【０１２７】
また、メモリブロックマネージャから空きメモリブロックを取得することができなかった場合には（ステップＳ２２０４のＮｏ）、メモリ不足エラーとしてメモリの確保を諦め、本処理を終了する。
【０１２８】
図２３には、図２１に示したフローチャートのステップＳ２１０２で実行される、ページサイズが４ＫＢに定義されているＲｅｇｉｏｎ＃１に確保したメモリを解放するための処理手順をフローチャートの形式で示している。
【０１２９】
仮想メモリマネージャは、解放を指定されたアドレスがＲｅｇｉｏｎ＃１に該当するかどうかをチェックする（ステップＳ２３０１）。
【０１３０】
解放を指定されたアドレスがＲｅｇｉｏｎ＃１に該当する場合には（ステップＳ２３０１のＹｅｓ）、仮想メモリマネージャは、メモリブロックマネージャへメモリブロックを返すための処理を実行する（ステップＳ２３０２）。メモリブロックマネージャへメモリブロックを返す処理の詳細については、後述に譲る。
【０１３１】
そして、仮想メモリマネージャは、リージョンのページテーブルを未使用に戻して（ステップＳ２３０３）、本処理を終了する。ステップＳ２３０３の処理は、図１４中において参照番号１４０３で示す処理に相当する。
【０１３２】
他方、解放を指定されたアドレスがＲｅｇｉｏｎ＃１でない場合には（ステップＳ２３０１のＮｏ）、アドレス指定エラーとして、メモリの解放を諦めて、本処理を終了する。
【０１３３】
図２４には、図２０に示したフローチャートのステップＳ２００３で実行される、ページサイズが１ＫＢに定義されているＲｅｇｉｏｎ＃２からメモリを確保するための処理手順をフローチャートの形式で示している。
【０１３４】
まず、仮想メモリマネージャは、Ｒｅｇｉｏｎ＃２内で指定されたサイズの空きアドレス空間の取得を試みる（ステップＳ２４０１）。
【０１３５】
ここで、Ｒｅｇｉｏｎ＃２内で指定されたサイズの空きアドレス空間を取得できなかった場合には（ステップＳ２４０２のＮｏ）、アドレス空間不足エラーとして、ファイルのマッピングを諦め、本処理を終了する。
【０１３６】
また、Ｒｅｇｉｏｎ＃２内で指定されたサイズの空きアドレス空間を取得できた場合には（ステップＳ２４０２のＹｅｓ）、仮想メモリマネージャは、メモリブロックマネージャから、空きメモリブロックを取得する（ステップＳ２４０３）。メモリマネージャから空きメモリブロックを取得する処理の詳細については、後述に譲る。
【０１３７】
そして、メモリブロックマネージャから空きメモリブロックを取得することができた場合には（ステップＳ２４０４のＹｅｓ）、仮想メモリマネージャは、物理メモリ３０５上における当該リージョンのページテーブルに、ステップＳ２４０１で取得したメモリブロックのアドレスを書き込んで（ステップＳ２４０５）、本処理を終了する。ステップＳ２４０５の処理は、図１４中において参照番号１４０３で示す処理に相当する。
【０１３８】
また、メモリブロックマネージャから空きメモリブロックを取得することができなかった場合には（ステップＳ２４０４のＮｏ）、メモリ不足エラーとしてメモリの確保を諦め、本処理を終了する。
【０１３９】
図２５には、図２１に示したフローチャートのステップＳ２１０３で実行される、ページサイズが１ＫＢに定義されているＲｅｇｉｏｎ＃２に確保したメモリを解放するための処理手順をフローチャートの形式で示している。
【０１４０】
仮想メモリマネージャは、解放を指定されたアドレスがＲｅｇｉｏｎ＃２に該当するかどうかをチェックする（ステップＳ２５０１）。
【０１４１】
解放を指定されたアドレスがＲｅｇｉｏｎ＃２に該当する場合には（ステップＳ２５０１のＹｅｓ）、仮想メモリマネージャは、メモリブロックマネージャへメモリブロックを返すための処理を実行する（ステップＳ２５０２）。メモリブロックマネージャへメモリブロックを返す処理の詳細については、後述に譲る。
【０１４２】
そして、仮想メモリマネージャは、リージョンのページテーブルを未使用に戻して（ステップＳ２５０３）、本処理を終了する。ステップＳ２３０３の処理は、図１４中において参照番号１４０３で示す処理に相当する。
【０１４３】
他方、解放を指定されたアドレスがＲｅｇｉｏｎ＃２でない場合には（ステップＳ２５０１のＮｏ）、アドレス指定エラーとして、メモリの解放を諦めて、本処理を終了する。
【０１４４】
図２６には、図２２に示したフローチャートのステップＳ２２０３、並びに図２４に示したフローチャートのステップＳ２４０３で実行される、メモリブロックマネージャから空きメモリブロックを取得するための処理手順をフローチャートの形式で示している。
【０１４５】
メモリブロックマネージャは、物理メモリブロックに空きがあるかどうかをチェックする（ステップＳ２６０１）。
【０１４６】
そして、物理メモリブロックに空きがある場合には（ステップＳ２６０１のＹｅｓ）、メモリブロックマネージャは、空きメモリブロックの状態を使用済みに変更して（ステップＳ２６０２）、本処理を終了する。
【０１４７】
他方、物理メモリブロックに空きがない場合には（ステップＳ２６０１のＮｏ）、メモリ不足エラーとして、空きメモリブロックの取得を諦め、本処理を終了する。
【０１４８】
図２７には、図２３に示したフローチャートのステップＳ２３０２、並びに図２５に示したフローチャートのステップＳ２５０３で実行される、メモリブロックマネージャへメモリブロックを返すための処理手順をフローチャートの形式で示している。
【０１４９】
メモリブロックマネージャは、仮想メモリマネージャから返されたメモリブロックの状態を空きに変更して（ステップＳ２７０１）、本処理を終了する。
【０１５０】
図２８には、仮想メモリマネージャによって提供されるリージョンのうち、Ｒｅｇｉｏｎ＃３をスタック領域として使用するための仕組みを示している。
【０１５１】
スタック領域は、プログラムを実現する各タスクについてそれぞれ１つずつ存在する。スタック領域は、プログラムの実行における関数呼び出しの進行などにより、動的に使用量が増えていく領域である。本実施形態では、システムで動作するタスクの平均的なスタック消費量が小さい場合を考慮して、スタック領域として使用されるＲｅｇｉｏｎ＃３のページサイズを１ＫＢとする。
【０１５２】
タスクを初期化する際には、まず１ページ分の物理メモリがそのタスクのスタック領域として仮想アドレス空間に割り当てられ、タスクの動作中にそのページを使い切ると動的に１ページずつ追加の物理メモリが仮想アドレス空間に割り当てられていく。
【０１５３】
タスクのスタック消費が進んで割り当てられた物理メモリを使い尽くすと、まだメモリが割り当てられていない仮想アドレスへのアクセスが発生するため、そのタスクがバスフォルトを起こす。ＯＳは、そのバスフォルトのハンドラ内で、メモリブロックマネージャから確保した物理メモリをバスフォルトの起きた仮想アドレスに割り当てることによって、動的にスタック領域の伸長を実現している。
【０１５４】
図２９には、タスクのバスフォルト処理として、スタック領域を動的に割り当てるための処理手順をフローチャートの形式で示している。
【０１５５】
タスクのバスフォルトが発生すると、バスフォルトハンドラは、そのフォルト発生アドレスが、スタック領域として使用しているＲｅｇｉｏｎ＃３かどうかをチェックする（ステップＳ２９０１）。
【０１５６】
フォルト発生アドレスがＲｅｇｉｏｎ＃３でない場合には（ステップＳ２９０１のＮｏ）、バスエラーによりタスクを停止して、本処理を終了する。
【０１５７】
また、フォルト発生アドレスがＲｅｇｉｏｎ＃３である場合には（ステップＳ２９０１のＹｅｓ）、バスフォルトハンドラは、メモリブロックマネージャから、空きメモリブロックを取得する（ステップＳ２９０２）。メモリマネージャから空きメモリブロックを取得する処理は、図２６に示した処理手順（前述）に従って実行される。
【０１５８】
そして、メモリブロックマネージャから空きメモリブロックを取得することができた場合には（ステップＳ２９０３のＹｅｓ）、バスフォルトハンドラは、物理メモリ３０５上における当該リージョンのページテーブルに、ステップＳ２９０２で取得したメモリブロックのアドレスを書き込んで（ステップＳ２９０４）、バスフォルトハンドラによる本処理を終了する。ステップＳ２９０４の処理は、図１４中において参照番号１４０３で示す処理に相当する。
【０１５９】
また、メモリブロックマネージャから空きメモリブロックを取得することができなかった場合には（ステップＳ２９０３のＮｏ）、メモリ不足エラーとしてメモリの確保を諦め、本処理を終了する。
【０１６０】
また、タスクが終了すると、それまでに割り当てられたスタックを解放する処理を実施する。
【０１６１】
図３０には、タスク終了時にスタックを解放するための処理手順をフローチャートの形式で示している。
【０１６２】
タスクの終了時に、仮想メモリマネージャは、メモリブロックマネージャへメモリブロックを返すための処理を実行する（ステップＳ３００１）。メモリブロックマネージャへメモリブロックを返す処理は、図２７に示した処理手順（前述）に従って実行される。
【０１６３】
そして、仮想メモリマネージャは、リージョンのページテーブルを未使用に戻して（ステップＳ３００２）、本処理を終了する。ステップＳ３００２の処理は、図１４中において参照番号１４０３で示す処理に相当する。
【０１６４】
なお、本実施形態における各リージョンのページサイズの設定（テキスト領域：６４ＫＢ、ヒープ領域：４ＫＢ又は１ＫＢ、スタック領域：１ＫＢ）は、一例に過ぎない。実行するアプリケーションタスクの規模や性質、機器（センシングデバイス１００）が搭載するメモリ容量などの条件に応じて、各リージョンにおける適切なページサイズは変わってくる。重要な点は、テキスト、ヒープ、スタックの各領域に対する要求は異なっており、本明細書で開示する技術によれば、かかる要求に対して少ないメモリで適切なページサイズを用いることができることである。
【０１６５】
本実施形態では、センシングデバイス１００上でセンシングタスク、行動推定タスク、及び通信タスクが動作していることを想定している（例えば、図１５を参照のこと）。また、本実施形態では、これらのタスクが以下のような性質とメモリへの要求を持っていることを想定している。
【０１６６】
（１）センシングタスク
センシングタスクは、定期的に一定の周期で各種センサ１０５から情報を取得して、行動推定タスクにセンサ値を渡す。センシングタスクの命令コードは、フラッシュメモリ１０４の１ブロック（６４ＫＢ）に収まる程度であり、ヒープ領域からは１ＫＢ程度のメモリ領域数個を使用する。スタック領域の消費量は１ＫＢ程度である。
【０１６７】
（２）行動推定タスク
行動推定タスクは、センシングタスクから渡されたセンサ値と、フラッシュメモリ１０４上の行動推定辞書を用い定期的に行動推定を行うアルゴリズムを実行し、推定した結果を通信タスクに渡す。行動推定タスクの命令コード、並びに行動推定辞書はそれぞれフラッシュメモリの１ブロック（６４ＫＢ）に収まる程度であり、ヒープ領域からは１６ＫＢ程度のメモリ領域と、１ＫＢ程度のメモリ領域数個を使用する。スタック領域の消費量は４ＫＢ程度である。
【０１６８】
（３）通信タスク
通信タスクは、行動推定タスクの推定結果をクラウド２０２上のサーバ２０２に送信する。行動推定タスクからは定期的に送信データを受け取るが、サーバ２０２との通信中の接続遮断やその後の再試行など、不定期にエラー処理などの例外処理が必要となる場合がある。通信タスクの命令コードはフラッシュメモリ１０４上の２５６ＫＢ程度（４ブロック）であり、ヒープ領域からは４ＫＢ程度のメモリ領域数個と、１ＫＢ程度のメモリ領域を１０数個使用する。スタック領域の消費量は、通常状態では２ＫＢ程度だが、例外処理などで４ＫＢ程度に増加する場合がある。
【０１６９】
上記のような前提において、本明細書で開示する技術によれば、仮想アドレス空間で各リージョンを以下のように実現することができる。
【０１７０】
（１）テキスト領域
テキスト領域を提供するＲｅｇｉｏｎ♯０は、フラッシュメモリ１０４のブロックサイズである６４ＫＢをページサイズとする。各タスクの必要ページ数はそれぞれ１ページ、２ページ、４ページであり、合計７ページ分のページテーブルがあれば、全タスクのテキスト領域を提供することができる。
【０１７１】
（２）ヒープ領域
ヒープ領域を提供するＲｅｇｉｏｎ♯１及びＲｅｇｉｏｎ♯２は、前述した通り、各種のメモリ確保要求に応じるために、４ＫＢページと１ＫＢページの２つのページサイズを使用する。上述した実施形態ではメモリ要求は１ＫＢ程度のものと４ＫＢを超えるものの２種類に大別できるため、それぞれでリージョンを使い分けることでメモリ断片化の防止に効果がある。
【０１７２】
（３）スタック領域
スタック領域を提供するＲｅｇｉｏｎ♯３は、タスクの中で必要とするスタック消費量の最低値である１ＫＢをページサイズとして使用する。各タスクはそれぞれ最大１ページ、４ページ、４ページ分の物理メモリをスタックとして割り当てることになる。例えば、ページサイズを４ＫＢに指定した際はセンシングタスクの場合、１ＫＢしか使われないために３ＫＢ分が無駄になるが、そうした無駄を抑えることができる。
【０１７３】
このように用途に応じた適切なページサイズを使用することは、メモリの無駄やページテーブルのサイズを抑えることにつながる。それに加えて、ＭＭＵ１０２においてアドレス変換に必要とするＴＬＢのエントリ数を抑えることにもなる。ＭＭＵ１０２によるアドレス変換には、最終的には変換元の仮想アドレス（ベース仮想アドレスＴＢ）と変換先の物理アドレス（ベース物理アドレスＴＴ）がＴＬＢ３０１に載ることが必要になる。ところが、ＴＬＢ３０１のエントリ数には限りがあり、ＴＬＢ３０１でのベース仮想アドレス比較が合致しなかった場合（すなわち、ＴＬＢミスした場合）には、リージョンデスクリプタ３０２を用いたページウォーク処理という追加の処理が必要になる（ＴＬＢ３０１を用いたアドレス変換や、ＴＬＢミス時のリージョンデスクリプタ３０２を用いたページウォーク処理については、図３〜図７を参照しながら、既に説明した通りである）。ページテーブルのサイズを抑えることは、こうしたページウォーク処理の頻度を下げることにもつながる。
【産業上の利用可能性】
【０１７４】
以上、特定の実施形態を参照しながら、本明細書で開示する技術について詳細に説明してきた。しかしながら、本明細書で開示する技術の要旨を逸脱しない範囲で当業者が該実施形態の修正や代用を成し得ることは自明である。【０１７５】
本明細書で開示するメモリ管理技術は、例えば小容量のメモリしか持たない組み込み機器に適用して、アドレス変換の対象となる複数のリージョンを定義するとともに、リージョン毎のページサイズを定義することによって、無駄なメモリ消費を抑制して、ページ単位で効率的にアドレス変換を行うことができる。勿論、本明細書で開示するメモリ管理技術を、通常又は大容量のメモリを装備する情報処理装置にも同様に適用することができる。【０１７６】
要するに、例示という形態により本明細書で開示する技術について説明してきたのであり、本明細書の記載内容を限定的に解釈するべきではない。本明細書で開示する技術の要旨を判断するためには、特許請求の範囲を参酌すべきである。【０１７７】
なお、本明細書の開示の技術は、以下のような構成をとることも可能である。
（１）ページ単位で仮想アドレスから物理アドレスへのアドレス変換を行うメモリ管理装置であって、
前記仮想アドレス空間に定義されたリージョンのアドレス変換情報と、リージョンが持つ固有のページサイズを保持するリージョン情報保持部と、
仮想アドレスを含むリージョンの前記アドレス変換情報を用いて、仮想アドレスに対応する物理アドレスの情報を探索する探索部と、
を具備するメモリ管理装置。
（２）前記リージョン情報保持部は、仮想アドレス空間上に定義された各リージョンのベース仮想アドレスと、物理メモリ上に置かれたリージョン毎のページテーブルのアドレスと、リージョンに定義されたページサイズ、及びリージョンサイズに関する情報をリージョン毎のエントリに保持し、
前記探索部は、仮想アドレスを含むリージョンに対応するページテーブルアドレスに基づいて、前記物理メモリ上の該当するページテーブルから仮想アドレスに対応する物理アドレスの情報を探索する、
上記（１）に記載のメモリ管理装置。
（３）前記探索部は、
前記リージョン情報保持部内の、ベース仮想アドレスと、ベース仮想アドレスにリージョンのページサイズを加算したアドレス範囲に仮想アドレスが含まれるエントリから、仮想アドレスを含むリージョンのページテーブルアドレスを特定して、
そのページテーブルアドレスで指定されるページテーブル上の、仮想アドレスとベース仮想アドレスの差分をページサイズで割算して特定されるページから物理アドレス情報を取得する、
上記（２）に記載のメモリ管理装置。
（４）ページ単位でベース仮想アドレスとベース物理アドレスの対応関係を示す情報と、その仮想アドレスを含むリージョンに定義されたページサイズの情報を保持するアドレス変換バッファと、
前記アドレス変換バッファ中の仮想アドレスにヒットするエントリから取得されるベース物理アドレスと仮想アドレスを組み合わせて、仮想アドレスに対応する物理アドレスに変換するアドレス変換部と、
をさらに備える上記（１）乃至（３）のいずれかに記載のメモリ管理装置。
（５）前記アドレス変換部は、ベース仮想アドレスと、ベース仮想アドレスにリージョンのページサイズを加算したアドレス範囲に仮想アドレスが含まれるエントリを、前記アドレス変換バッファ内で検索する、
上記（４）に記載のメモリ管理装置。
（６）用途が異なるデータを格納する複数のメモリ領域に対して、仮想アドレス空間上で異なるリージョンを割り当てる、
上記（１）乃至（５）のいずれかに記載のメモリ管理装置。
（７）テキスト領域、ヒープ領域、及びスタック領域に対して、仮想アドレス空間上で異なるリージョンを割り当てる、
上記（１）乃至（６）のいずれかに記載のメモリ管理装置。
（８）テキスト領域に対して、所定のブロックサイズに基づいてページサイズが定義されたリージョンを割り当てる、
上記（１）乃至（７）のいずれかに記載のメモリ管理装置。
（９）ヒープ領域に対して、ページサイズが異なる２以上のリージョンを割り当てる、
上記（１）乃至（８）のいずれかに記載のメモリ管理装置。
（１０）ヒープ領域からメモリ領域を確保する際に、確保したいメモリサイズを超えないページサイズが定義されたリージョンを割り当てる、
上記（９）に記載のメモリ管理装置。
（１１）スタック領域に割り当てられたリージョンでバスフォルトが発生したことに応答して、ページサイズ単位で物理メモリを割り当てる、
上記（１）乃至（１０）のいずれかに記載のメモリ管理装置。
（１２）ページ単位で仮想アドレスから物理アドレスへのアドレス変換を行うメモリ管理方法であって、
前記仮想アドレス空間に定義されたリージョンのアドレス変換情報とリージョンが持つ固有のページサイズを保持するリージョン情報保持部に保持された前記アドレス変換情報を用いて、仮想アドレスに対応する物理アドレスの情報を探索する探索ステップと、
ページ単位でベース仮想アドレスとベース物理アドレスの対応関係を示す情報と、その仮想アドレスを含むリージョンに定義されたページサイズの情報を保持するアドレス変換バッファ中の仮想アドレスにヒットするエントリから取得されるベース物理アドレスと仮想アドレスを組み合わせて、仮想アドレスに対応する物理アドレスに変換するアドレス変換ステップと、
を有するメモリ管理方法。
（１３）物理メモリと、
仮想アドレス空間に定義されたリージョンのアドレス変換情報とリージョンが持つ固有のページサイズを保持するリージョン情報保持部と、仮想アドレスを含むリージョンの前記アドレス変換情報を用いて仮想アドレスに対応する物理アドレスの情報を探索する探索部を備えて、ページ単位で仮想アドレスから物理アドレスへのアドレス変換を行うメモリ管理ユニットと、
を具備する情報処理装置。
【符号の説明】
【０１７８】
１００…センシングデバイス
１０１…ＣＰＵ、１０２…ＭＭＵ、１０３…ＳＲＡＭ
１０４…フラッシュメモリ、１０５…センサ
１０６…通信モジュール、１０７…電池、１１０…バス
２００…基地局、２０１…クラウド、２０２…サーバ
【図１】
2019159472.tif 000004
【図２】
2019159472.tif 000005
【図３】
2019159472.tif 000006
【図４】
2019159472.tif 000007
【図５】
2019159472.tif 000008
【図６】
2019159472.tif 000009
【図７】
2019159472.tif 000010
【図８】
2019159472.tif 000011
【図９】
2019159472.tif 000012
【図１０】
2019159472.tif 000013
【図１１】
2019159472.tif 000014
【図１２】
2019159472.tif 000015
【図１３】
2019159472.tif 000016
【図１４】
2019159472.tif 000017
【図１５】
2019159472.tif 000018
【図１６】
2019159472.tif 000019
【図１７】
2019159472.tif 000020
【図１８】
2019159472.tif 000021
【図１９】
2019159472.tif 000022
【図２０】
2019159472.tif 000023
【図２１】
2019159472.tif 000024
【図２２】
2019159472.tif 000025
【図２３】
2019159472.tif 000026
【図２４】
2019159472.tif 000027
【図２５】
2019159472.tif 000028
【図２６】
2019159472.tif 000029
【図２７】
2019159472.tif 000030
【図２８】
2019159472.tif 000031
【図２９】
2019159472.tif 000032
【図３０】
2019159472.tif 000033
【国際調査報告】
2019159472.tif 000034
2019159472.tif 000035