(57)【特許請求の範囲】
【請求項１】
複数のメモリ・セグメントを有し、少なくとも１つのメモリ・セグメントが圧縮中の使用のために予約される不揮発性メモリにおいて、記録された前記不揮発性メモリ内の空きスペースを除去することにより前記不揮発性メモリを圧縮する方法であって、
前記不揮発性メモリ内の解放されたメモリの位置より上位に、データおよび／またはコードを格納されたメモリが存在するかどうか判断するステップと、
前記データおよび／またはコードを格納されたメモリが存在することに応答して、前記解放されたメモリの最下部に、一部のみが利用可能な前記メモリ・セグメントが存在するかどうか判断するステップと、
前記一部のみが利用可能なメモリ・セグメントが存在することに応答して、前記データおよび／またはコードを、前記一部のみが利用可能な前記メモリ・セグメントの当該一部にコピーするステップと、
前記メモリ・セグメントの前記一部にコピーしきれなかった前記データおよび／またはコードの残りを、前記予約された少なくとも１つのメモリ・セグメントにコピーするステップと、
前記予約された少なくとも１つのメモリ・セグメントを、前記一部のみが利用可能なメモリ・セグメントに隣接する空きのメモリにスワップするステップと
を含む不揮発性メモリを圧縮する方法。
【請求項２】
前記複数のメモリ・セグメントが、データを受け取って下位から上位へ格納するように適合され、前記少なくとも１つのメモリ・セグメントが上位に予約される、請求項１に記載の不揮発性メモリを圧縮する方法。
【請求項３】
前記一部のみが利用可能な前記メモリ・セグメントへコピーされた前記データおよび／またはコードの新しいメモリ・ロケーションを参照するために、ポインタ／マーカーを調整するステップを更に含む、請求項１または２に記載の不揮発性メモリを圧縮する方法。
【請求項４】
前記不揮発性メモリ内の前記解放されたメモリは、解放前において特定のコードおよび／またはデータを格納しており、
前記メモリの解放は、
前記特定のコードおよび／またはデータと他のコードおよび／またはデータが同一のメモリ・セグメント内に格納されていないかを調べるために、前記特定のコードおよび／またはデータについて走査し、
圧縮中に使用するために予約された前記メモリ・セグメント内に、前記特定のコードおよび／またはデータと同一のメモリ・セグメント内に格納されている前記他のコードおよび／またはデータをコピーし、
前記予約されたメモリ・セグメント内の前記他のコードおよび／またはデータを、前記特定のコードおよび／またはデータが格納されていたメモリ・セグメントの最下位にスワップすることによってなされる、請求項１または２のいずれか一項に記載の方法。
【請求項５】
前記解放されたメモリの最下部に、全部が利用可能な前記メモリ・セグメントが存在することに応答して、前記データおよび／またはコードを前記全部が利用可能なメモリ・セグメントへ順次コピーするステップを更に含む、請求項１、２、４いずれか一項に記載の方法。
【請求項６】
請求項１ないし５のいずれか一項に記載の方法を実行させるためのプログラムを格納した、コンピュータ可読メモリ。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、埋込み装置などの分割されたメモリ・スペースを有するコンピュータ・システム内のメモリ管理の領域を対象とし、具体的には、メモリを安全に再利用し、不揮発性で消去可能な「フラッシュ」型メモリ内で残りのアプリケーションを連続的に再整列させるシステムを提供する。
【０００２】
【従来の技術】
本出願は、メモリの制約がある埋込みシステムにおいて特に有用であるが、新しいアプリケーションに最大限の連続した空きスペースを提供するために、アプリケーションをマシンから除去することができ、メモリ内に格納された残りのアプリケーションを圧縮することが望ましいどのような環境にも適用可能である。
【０００３】
埋込みシステムでは、合計のシステム・メモリは、１から４メガバイト程度であろう。理想的には、システム・メモリの半分は、読取り専用メモリ（ＲＯＭ）に振り向けられるべきであり、セッション間で存続するアプリケーションおよびデータを格納する。アプリケーションは、システムのメモリ限界に達するまで順番にロードすることができる。
【０００４】
本発明の目的のためには、「フラッシュ」型メモリを参照することになる。技術的にフラッシュは、不揮発性である点でＲＯＭの一形態であるが、現在の技術によれば一般に６４Ｋバイト・ブロック単位で消去可能でもある。
【０００５】
特に急速に発展している無線通信の領域では、新しいアプリケーションを収容するための充分なメモリを解放するためにも、アプリケーションのより新しいバージョンとの非互換性を回避するためにも、装置内の既存のアプリケーションを削除してから、新しいアプリケーションをダウンロードできることが必要または望ましい。
【０００６】
【発明が解決しようとする課題】
本発明は、ＲＯＭからアプリケーションを安全に除去し、次いでアプリケーションを除去したことによって残ったすべての「穴」を除去するためにＲＯＭを圧縮することを対象とする。これにより、最大限の連続した空きメモリが、新しいアプリケーションのダウンロードで確実に利用可能になる。
【０００７】
【課題を解決するための手段】
一実施形態において本発明は、装置の不揮発性メモリの改善を対象とする。このフラッシュ・メモリは、アプリケーション・コードおよびデータを受け取って格納するように適合された複数のメモリ・セグメントを有することを特徴とする。少なくとも１つのメモリ・セグメントがメモリ圧縮中に使用するために予約され、そのメモリ・セグメントが、その読取り専用メモリの他のメモリ・セグメントからコピーされたコードまたはデータあるいはその両方を受け取るように適合されることが好ましい。その読取り専用メモリの他のメモリ・セグメントからコピーされたコードまたはデータあるいはその両方の新しいメモリ・ロケーションを参照するように、コード内のポインタを訂正する機構も提供される。
【０００８】
他の態様によれば、本発明は、複数のメモリ・セグメントを有し、少なくとも１つのメモリ・セグメントが圧縮中の使用のために予約される不揮発性メモリにおいて、当該不揮発性メモリ内の空きスペースを除去することにより不揮発性メモリを圧縮する方法を提供する。当該方法は、不揮発性メモリ内の解放されたメモリの位置より上位に、データおよび／またはコードを格納されたメモリが存在するかどうか判断するステップと、データおよび／またはコードを格納されたメモリが存在することに応答して、解放されたメモリの最下部に、一部のみが利用可能なメモリ・セグメントが存在するかどうか判断するステップと、一部のみが利用可能なメモリ・セグメントが存在することに応答して、格納されたデータおよび／またはコードを、一部のみが利用可能なメモリ・セグメントの当該一部にコピーするステップと、メモリ・セグメントの一部にコピーしきれなかった格納されたデータおよび／またはコードの残りを、予約された少なくとも１つのメモリ・セグメントにコピーするステップと、予約された少なくとも１つのメモリ・セグメントを、一部のみが利用可能なメモリ・セグメントに隣接する空きのメモリにスワップするステップとを含む。
【０００９】
【発明の実施の形態】
図１ないし４に概略を示すとおり、セルラー電話などのメモリに制約のある装置内のＲＯＭ２は通常、一般的に４で示す６４Ｋメモリ・セグメント・ブロックを３２個備えることができ、装置内で総計２メガバイトのフラッシュ・メモリになる。
【００１０】
この好ましい実施形態のための本発明の実施例では、ＲＯＭ内のアプリケーションは下のメモリから上のメモリに割り振られる。
【００１１】
図１および２に示すとおり、クロスハッチの網掛けで示すアプリケーション６は、ＲＯＭ２内のメモリ・セグメント・ブロック４の２つ半にまたがる。斜線縞で示す連続して格納されたアプリケーションからのコードまたはデータ８は、アプリケーション６の最初の部分と１つのメモリ・セグメントを共用する。
【００１２】
上述のように、これらの装置内で使用されるフラッシュ・メモリでは、メモリ・ブロックの全体だけを消去できる。したがって、ユーザが６のアプリケーションを消去したいと考える場合は、装置のメモリ・マネージャが連続して格納されたアプリケーションのコードまたはデータ８を保管し、次いでこのロケーションに復元しなければならないだろう。
【００１３】
これは、１つまたは複数のスペア・メモリ・ブロックを保持し、これを使用して装置内に保持すべき格納コードまたはデータのブロックをスワップすることによって達成される。この好ましい実施形態では、「フラッシュ」メモリのマネージャが圧縮処理のために最も上のブロックを単純に確保する。図１に示す例では、メモリ・マネージャがコードまたはデータ８を上方のスペア・ブロック１０の中にコピーする（図２）。削除されるブロックからのコード／データだけがコピーされ、スペア・ブロックの最上部は空きのままである。次いで、コピーされたコード／データを含むスペア・ブロック１０が１２の元のメモリ・ブロックと「スワップ」され（図３）、次いでアプリケーション６の残りのコード／データを含むメモリ・ブロックを安全に消去することができる（図４）。このスワップは、２つの方法の１つで行うことができる。すなわち、「仮想」メモリ領域をサポートするメモリ管理ユニット（ＭＭＵ）が使用可能であれば、削除されるブロックによって先に使用されていたアドレスを「新しい」ブロックが使用するように、ＭＭＵマッピングを変更する。削除されるブロックが消去され、そのメモリ・マッピングが、スペア・ブロックによって先に使用されていたアドレスに変更される。ＭＭＵが使用可能でなければ、「スペア」ブロックの内容は、消去された後に元のブロックの最上部にコピーされる。
【００１４】
この処理のステップは、図５の流れ図の中で述べる。ユーザがメモリからアプリケーションを削除したいと希望する場合は、その装置のメモリ・マネージャがＲＯＭ内のアプリケーションの開始点および終了点を見つけ（ブロック２０）、コード／データがメモリ・セグメントの境界上に位置するかどうかを判断する（ブロック２２、２４）。境界上に位置する場合は、メモリ・マネージャがアプリケーションを含むすべてのメモリ・セグメント・ブロックを単純に消去し（ブロック２８）、図６に示す圧縮に進むことは安全である。
【００１５】
図５を続けると、アプリケーションの開始点または終了点がメモリ・セグメント・ブロックの内部にあるとメモリ・マネージャが判断すると（ブロック２２または２４）、次にメモリ・マネージャは、他のアプリケーションのコード／データ（ブロック２６）とこの点でメモリ・セグメント・ブロックを共用しているかどうかを判断する。「フラッシュ・マネージャ」は、各アプリケーションの開始および終了アドレスを追跡し続け、各メモリ・ブロックのアドレスもまたわかっているので、メモリ・ブロックおよび他のアプリケーションの開始／終了に関して、アプリケーション／データがどこにあるのかを判断することは単純な計算である。
【００１６】
他のアプリケーション・コード／データが何も見つからなければ、元のアプリケーションを削除し（ブロック２８）、ＲＯＭを圧縮することに進むのは安全である。
【００１７】
他のアプリケーションのデータまたはコードが、削除する元のアプリケーションの一部と同じブロック内に格納されているとメモリ・マネージャが判断した場合（ブロック２６）、元のアプリケーション・コードを含まずに、このコードまたはデータがスペア・メモリ・セグメント・ブロックにコピーされる（ブロック３０）（すなわちスペア・メモリ・セグメント・ブロックは部分的に空白である）。
【００１８】
スペア・メモリ・セグメント・ブロックに対するコピーは、メモリの削除／圧縮動作の途中で装置の電源が切れても、装置が復元できるような方法で行われる。この好ましい実施形態では、ロード、削除、および圧縮機能の途中のアプリケーションの状態を示すために、フラグおよびマーカーを使用する（ブロック３２）。
【００１９】
スペア・メモリ・セグメント・ブロック内の他のアプリケーションのコード／データは、次に削除される元のアプリケーションの最下位にスワップされて戻される（ブロック３４）。転送が進行中であることを示すために追加されたフラグおよびマーカーはリセットされ（ブロック３６）、元のアプリケーションの残りを含むメモリ・セグメント・ブロックを消去する（ブロック３８）。
【００２０】
アプリケーションが除去されると、それより上のアプリケーションを空きスペースに圧縮するかまたは「滑らせて」下ろすことにより、そのメモリを再利用される。これによりＲＯＭの最上部には、新しいアプリケーションをロードするための最大限の連続した空きスペースが残る。
【００２１】
本発明の好ましい一実施形態によれば、圧縮は、アプリケーションの削除と同じ原理に従う。すなわち、部分的に満たされたメモリ・セグメント・ブロックの内容を転送するためにスペア・メモリ・セグメント・ブロックが使用され、この処理を図６に示す。
【００２２】
アプリケーションがアンロードされると、いかなる「穴」をも除去するためにメモリを圧縮すべきである。これにより新しいアプリケーションをダウンロードするための最大の連続した空きメモリが与えられる。本発明の原理を利用する圧縮を実行するための好ましい一方法を図６に示す。
【００２３】
アプリケーションのアンロードに続いて、メモリ・マネージャがアプリケーションをアンロードすることによって解放されたメモリ・ブロック上にデータまたはコードを占めるメモリ・ブロックがあるかどうか、すなわち、アプリケーションをアンロードすることによって記録されたメモリ内に空の「穴」を残したかどうかを判断するためにメモリを走査する（ブロック４０）。もし、残っていなければ、アンロードされたアプリケーションは記録されたメモリの最上位にあり、圧縮は必要ない。
【００２４】
もし、解放されたメモリ上に記録されたデータ／コードがある場合、メモリ・マネージャは、一部または全体が空のメモリ・ブロックが、解放されたメモリの最下部にあるかどうかを判定する（ブロック４２）。
【００２５】
もし、解放されたメモリが、メモリ・ブロック全体の中にある場合、圧縮は単に、データ・ブロックをそのメモリの下方へ次の空きメモリ・ブロックに順次コピーし（ブロック４４）、データまたはコードの各ブロックの新しいロケーション用にフラグ／マーカーを調整すること（ブロック４６）によって実行される。
【００２６】
部分メモリのみが利用可能な場合、メモリ・マネージャは、その部分メモリ・ブロックを満たすために、そのデータ・ブロックからデータ／コードをコピーし（ブロック４８）、コピーされたデータ／コード用にフラグ／マーカーを調整する（ブロック５０）。
【００２７】
図５に関連して上述した方法で、データ・ブロックの残りのデータ／コードがスペア・メモリ・ブロックにコピーされ（ブロック５２）、フラグ／マーカーがこのコード／データのロケーションに調整される（ブロック５４）。このスペア・メモリ・ブロックは、既に圧縮されたデータに隣接する空きのメモリにスワップされ（ブロック５６）、スワップされたブロック内のデータ／コードのフラグ／マーカーが調整される（ブロック５８）。
【００２８】
この処理は、すべてのデータが圧縮されるまで繰り返し実行される（ブロック４０）。
【００２９】
本発明を好ましい諸実施形態に関連して述べたが、当業者には自明の修正を利用すれば、本発明が他のプラットフォームおよびメモリ構成に応用可能であることは理解されよう。
【００３０】
要約すると、アプリケーションが削除されるとき、または新しいアプリケーションを保持するための充分な余地がないときのいずれかで読取り専用メモリからコード（アプリケーションおよびデータ）を除去し、メモリ内の残りのコードを圧縮する方法がここに述べられている。１つまたは複数の「スペア」メモリ・セグメントが圧縮中に使用するために予約される。除去されるコードが、除去されない他のコードとメモリ・セグメントを共用している場合は、前記他のコードがスペア・メモリ・セグメントにコピーされ、次いでその元のロケーションにスワップで戻される。次いでこのコードは、消去されたコードによって残された「穴」を除去するために圧縮することができる。
【図面の簡単な説明】
【図１】  本発明により、制約のあるメモリ装置の読取り専用メモリ（ＲＯＭ）でコードを除去し圧縮することを示す。
【図２】  本発明により、制約のあるメモリ装置の読取り専用メモリ（ＲＯＭ）でコードを除去し圧縮することを示す。
【図３】  本発明により、制約のあるメモリ装置の読取り専用メモリ（ＲＯＭ）でコードを除去し圧縮することを示す。
【図４】  本発明により、制約のあるメモリ装置の読取り専用メモリ（ＲＯＭ）でコードを除去し圧縮することを示す。
【図５】  本発明により、コードを除去するためのステップを示す流れ図である。
【図６】  本発明の好ましい一実施形態により、コードの除去に続いてメモリ圧縮するためのステップを示す流れ図である。
【図１】
0003683814.tif 000002
【図２】
0003683814.tif 000003
【図３】
0003683814.tif 000004
【図４】
0003683814.tif 000005
【図５】
0003683814.tif 000006
【図６】
0003683814.tif 000007