JP2010134558A - メモリ管理システム及びメモリ管理プログラム - Google Patents

メモリ管理システム及びメモリ管理プログラム Download PDF

Info

Publication number
JP2010134558A
JP2010134558A JP2008307875A JP2008307875A JP2010134558A JP 2010134558 A JP2010134558 A JP 2010134558A JP 2008307875 A JP2008307875 A JP 2008307875A JP 2008307875 A JP2008307875 A JP 2008307875A JP 2010134558 A JP2010134558 A JP 2010134558A
Authority
JP
Japan
Prior art keywords
memory
area
memory area
acquisition
malloc
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2008307875A
Other languages
English (en)
Inventor
Shigeru Kimura
茂 木村
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Semiconductor Ltd
Original Assignee
Fujitsu Semiconductor Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Semiconductor Ltd filed Critical Fujitsu Semiconductor Ltd
Priority to JP2008307875A priority Critical patent/JP2010134558A/ja
Publication of JP2010134558A publication Critical patent/JP2010134558A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Memory System Of A Hierarchy Structure (AREA)

Abstract

【課題】獲得メモリ領域が特定の位置にアラインメントされることのないメモリ領域獲得機能を容易な方法で提供する。
【解決手段】メモリ管理システムは、獲得メモリ領域の先頭アドレスが所定のアドレス位置にアラインメントされるようにメモリ領域を獲得する第1のメモリ領域獲得手段と、メモリ獲得要求に応じて前記第1のメモリ領域獲得手段を用いて獲得した獲得メモリ領域において前記先頭アドレスから始まる先頭部分にサイズが変動する第1の領域を割り当て、前記第1の領域を除いた前記獲得メモリ領域の残りの第2の領域を獲得メモリ領域として提供する第2のメモリ領域獲得手段とを含む。
【選択図】図3

Description

本願開示は、一般にメモリ管理システム及びメモリ管理プログラムに関し、詳しくはキャッシュメモリシステムにおけるメモリ管理システム及びメモリ管理プログラムに関する。
組込み向けLinux等のOS(Operating System)には、メモリ管理システムの処理を簡易化するために、特定のサイズ以上のメモリ領域の獲得要求に対しては、ある程度大きなサイズの単位毎にメモリ領域を割りつける構成のものがある。このような構成では、例えば、4096バイト(4Kバイト)以上のメモリ領域を動的に獲得すると、メモリ空間内での各セグメント(4Kバイト)の配置に従って、メモリ領域がセグメント単位で獲得される。その結果、獲得したメモリ領域の先頭アドレスが4096バイトにアラインメントされる。つまり、獲得したメモリ領域の先頭アドレスは、16進表示した場合にその下位3桁が常にゼロとなる。このような構成となっている理由の1つは、組込み向けOSではメモリ制約が厳しいために、汎用システムとは異なり、プログラムコードの効率を追求してメモリ管理等の処理を単純化しているからである。
一方、キャシュメモリは複数のキャッシュラインを含むが、キャッシュメモリの容量は主記憶メモリの容量よりも小さいので、主記憶メモリのメモリ領域を繰り返して同一のキャッシュラインに割当てることになる。即ち、キャッシュライン単位で分割した外部メモリのメモリ領域を先頭のキャッシュラインから順番にキャッシュラインに割当てていき、キャッシュラインが一巡すると、先頭のキャッシュラインに戻って外部メモリのメモリ領域を割り当てている。
プログラムの実行において、異なるアドレスに配置された異なるデータや関数が同一のキャッシュラインに割当てられている場合、これらのデータや関数が交互に読み出されるたびに、主記憶メモリからキャシュにデータや関数をコピーする必要が生じる。これをキャシュ競合という。キャシュ競合が頻繁に起こるとプログラムの実行速度が遅くなるという問題がある。
前述のように、各獲得要求に対して獲得されたメモリ領域の先頭アドレスが4096バイトにアラインメントされると、メモリ空間のキャッシュラインへの分割の仕方によっては、獲得メモリ領域の先頭アドレスが常に同一のキャッシュラインになってしまう場合がある。その場合、頻繁にデータアクセスするプログラムでは、キャッシュ競合多発による性能劣化が発生してしまう。
獲得メモリ領域の先頭アドレスが特定の位置にアラインメントされてしまうという問題は、例えば、メモリ獲得に関するシステムプログラムを修正することにより解決できる。しかしながら、OSのシステムプログラムを変更することは容易ではなく、またユーザの立場では不可能な場合も多い。また別の解決方法として、ユーザプログラムを修正するという対応もあり得る。即ち、メモリ領域獲得用にシステム側から用意されているルーチンを用いて、ユーザプログラム側でメモリ獲得時の獲得領域の管理を行なうことが考えられる。しかしこの方法では、メモリ管理の処理のオーバーヘットが大きくて効率的でなく、またメモリプロテクト機能がない場合にはメモリ破壊による影響が大きいという問題がある。
特開2001−154860号公報 特開平5−265864号公報 特開平9−120372号公報
以上を鑑みると、獲得メモリ領域が特定の位置にアラインメントされることのないメモリ領域獲得機能を容易な方法で提供することが望まれる。
メモリ管理システムは、先頭アドレスが所定のアドレス位置にアラインメントされるようにメモリ領域を獲得する第1のメモリ領域獲得手段と、メモリ獲得要求に応じて前記第1のメモリ領域獲得手段を用いて獲得したメモリ領域において前記先頭アドレスから始まる先頭部分から第1の領域を割り当て、前記第1の領域を除いた前記メモリ領域の残りの第2の領域を他のメモリ領域とする第2のメモリ領域獲得手段と、を含むことを特徴とする。
処理ユニットにより実行することによりメモリ装置のメモリ空間を管理するメモリ管理プログラムは、メモリ獲得要求に応じて、先頭アドレスが所定のアドレス位置にアラインメントされるようにメモリ領域を獲得する第1のメモリ領域獲得手段を用いて獲得したメモリ領域において、前記先頭アドレスから始まる先頭部分から第1の領域を割り当て、前記第1の領域を除いた前記メモリ領域の残りの第2の領域を他のメモリ領域とする第2のメモリ領域獲得手段を含むことを特徴とする。
本願開示の少なくとも1つの実施例によれば、獲得メモリ領域において先頭アドレスから始まる先頭部分にサイズが変動する第1の領域を割り当てる。そして、獲得メモリ領域の開始アドレスを示す値として、獲得したメモリ領域から第1の領域を除いた第2の領域の開始アドレスの値を返す。これにより、獲得メモリ領域の先頭アドレスは、セグメントの境界から第1の領域のサイズの分だけずれた位置にあることになる。従って、セグメントの境界が同一のキャッシュラインに対応しているような場合であっても、獲得メモリ領域の先頭はこのキャッシュラインには配置されないことになり、データアクセス時のキャッシュ競合を避けることが可能となる。
以下に、本発明の実施例を添付の図面を用いて詳細に説明する。
メモリ管理システムは言語に依存するものではなく、所望のプログラミング言語を用いて実現することができる。以下に説明する例では、C言語を使用してメモリ管理システムを構築する場合について説明するが、本発明はC言語に限らず他の言語システムを用いて実現してもよい。またメモリ獲得ルーチン及びメモリ解放ルーチンとして、標準Cライブラリであるmalloc及びfreeを例として用いて説明するが、言語によらず他のメモリ獲得ルーチン及びメモリ解放ルーチンを用いてもよい。またメモリ獲得機能には、新規にメモリ領域を獲得する機能だけでなく、例えば標準Cライブラリにおける関数realloc等のように一度獲得したメモリ領域を拡張する機能があるが、そのような機能にも同様に本発明を適用できる。以下の説明においては、オペレーティングシステムとしてLinuxを用いているが、特定のオペレーティングシステムに限られるものではなく、他の任意のオペレーティングシステムを用いてよい。
本実施例のメモリ管理システムは、第1のメモリ領域獲得手段と第2のメモリ領域獲得手段とを含む。第1のメモリ領域獲得手段は、獲得メモリ領域の先頭アドレスが所定のアドレス位置にアラインメントされるようにメモリ領域を獲得する。例えば、組込み向けOS等のように単純化したメモリ管理システムを採用している場合には、mallocを実行すると、mallocはシステムコールmmapを呼び出してメモリ領域を獲得する。このmmapは、通常、セグメント単位にメモリ領域を獲得する。例えば、獲得メモリ領域の先頭アドレスはすべて4Kバイトのセグメントの境界に位置され、16進表示した場合にその下位3桁が常にゼロとなる。即ちこの例の場合には、このmmapが、先頭アドレスが所定のアドレス位置にアラインメントされるようにメモリ領域を獲得する上記第1のメモリ領域獲得手段に対応する。
第2のメモリ領域獲得手段は、メモリ獲得要求に応じて第1のメモリ領域獲得手段を用いて獲得した獲得メモリ領域において先頭アドレスから始まる先頭部分にサイズが変動する第1の領域を割り当てる。更に第2のメモリ領域獲得手段は、第1の領域を除いた獲得メモリ領域の残りの第2の領域を獲得メモリ領域として提供する。例えば、標準Cライブラリ関数のmallocを置き換える形で実行できる新規のメモリ獲得関数mallocを用意する。この新規mallocは、システムコールmmapを呼び出してメモリ領域を獲得し、この獲得メモリ領域において先頭アドレスから始まる先頭部分にサイズが変動する第1の領域を割り当てる。そして、新規mallocは、獲得メモリ領域の開始アドレスを示す値(開始アドレスへのポインタ変数)として、システムコールmmapが獲得したメモリ領域から第1の領域を除いた第2の領域の開始アドレスの値を返す。これにより、新規mallocが返す獲得メモリ領域の先頭アドレスは、4Kバイトのセグメントの境界から第1の領域のサイズの分だけずれた位置にあることになる。従って、4Kバイトのセグメントの境界が同一のキャッシュラインに対応しているような場合であっても、獲得メモリ領域の先頭はこのキャッシュラインには配置されないことになり、データアクセス時のキャッシュ競合を避けることが可能となる。
以下に、組込み向けOS等のように単純化したメモリ管理システムを採用している場合の標準ライブラリ関数mallocの動作について説明する。標準ライブラリ関数mallocでは、上記の新規mallocとは異なり、獲得メモリ領域の先頭位置をずらす処理は行なわれない。
図1は、標準ライブラリ関数mallocの動作について説明するための図である。ユーザプログラム10の実行時にメモリ獲得関数mallocが実行されると、標準Cライブラリ(libc)11中に用意されているmallocのコードが実行される。このmallocのコード中にはシステムコールmmapを呼び出すコードが含まれており、これに応じてmmapシステムコール12が実行される。メモリ獲得関数mallocの呼び出し時には、獲得したいメモリ領域のサイズlenが指定されており、このサイズに応じてmmapシステムコール12がメモリ領域13を獲得する。このmmapシステムコール12が獲得した獲得メモリ領域13は、領域サイズlen(獲得したいメモリ領域のサイズ)に依存して、セグメント単位にアラインメントされている。
図2は、mmapシステムコール12の獲得する獲得メモリ領域13と標準ライブラリ関数mallocの返す復帰値とを説明する図である。標準ライブラリ関数malloc呼び出し時に指定した獲得したいメモリ領域のサイズがlenであるとき、mmapシステムコール12はlen+4のサイズの獲得メモリ領域13を割り当てる。獲得メモリ領域13の先頭4バイトは、上記のlenの値(獲得メモリ長)を格納する管理領域14として確保される。獲得メモリ領域13のうち管理領域14を除いた残りの領域は、そのメモリ長がlenであり、mallocの取得領域15となる。標準ライブラリ関数mallocの返す復帰値は、取得領域15の先頭位置のアドレス値である。
実際には、mmapシステムコール12が獲得する獲得メモリ領域13のサイズがlen+4に等しくなることはまれであり、所定のセグメント長の倍数となる。具体的には、4092バイト未満のサイズlenを標準ライブラリ関数mallocにより獲得しようとすると、mmapシステムコール12は、少なくともlen+4のメモリ領域を確保するような、64バイト単位で計ったメモリ領域を獲得する。また4092バイト以上のサイズlenを標準ライブラリ関数mallocにより獲得しようとすると、mmapシステムコール12は、len+4のメモリ領域を確保するような、4096バイト単位で計ったメモリ領域を獲得する。この場合、獲得メモリ領域13の先頭アドレスは、4Kバイトのセグメントの境界にアラインメントされることになる。従って、mallocの取得領域15の先頭アドレスは、16進表示したときの下位3桁が常に「004」になる。
キャッシュライン数が128であり、キャッシュライン長が64バイトであるとすると、同一キャッシュラインは、メモリ空間上で8192バイト(8Kバイト)毎に現れることになる。従って、標準ライブラリ関数mallocにより4092バイト以上のサイズのデータ領域を複数獲得し、これら複数のデータに並列的にアクセスする場合、同一キャシュラインへのアクセスとなりキャシュ競合が発生してしまう。
図3は、新規mallocによるメモリ領域獲得について説明するための図である。新規mallocは、標準Cライブラリ関数のmallocを置き換える形で実行される。即ち、ユーザプログラム10の実行時にメモリ獲得関数mallocが実行されると、標準Cライブラリ11のmallocのコードが実行されるのではなく、新規mallocのコードが実行される。この新規mallocのコード中にはシステムコールmmapを呼び出すコードが含まれており、これに応じてmmapシステムコール12が実行される。メモリ獲得関数mallocの呼び出し時には、獲得したいメモリ領域のサイズlenが指定されており、このサイズに応じてmmapシステムコール12がメモリ領域20を獲得する。このmmapシステムコール12が獲得した獲得メモリ領域20は、領域サイズlenに依存して、セグメント単位にアラインメントされている。
標準ライブラリ関数malloc呼び出し時に指定した獲得したいメモリ領域のサイズがlenであるとき、mmapシステムコール12はAlen+8+lenのサイズの獲得メモリ領域20を割り当てる。ここでAlenは、後述するアルゴリズムにより計算されるメモリ長であり、メモリ獲得要求毎に変動する値をとる。獲得メモリ領域20の先頭Alenバイトは、使用されることのない可変長の遊び領域21として確保される。また遊び領域21に続く8バイトは、Alenの値(遊び領域値長)及びlenの値(獲得メモリ長)を格納する管理領域22として確保される。前述の第1の領域は、遊び領域21と管理領域22とを合わせたものと考えてよい。
獲得メモリ領域20のうち遊び領域21及び管理領域14を除いた残りの領域は、そのメモリ長がlenであり、新規malloc取得領域23となる。新規mallocの返す復帰値は、取得領域23の先頭位置のアドレス値である。
前述のように4096バイト以上のサイズをmmapシステムコール12で獲得すると、獲得メモリ領域20の先頭アドレスは、4Kバイトのセグメントの境界にアラインメントされる。しかしながら新規mallocを用いた場合には、新規malloc取得領域23の先頭アドレスは、4Kバイトのセグメントの境界位置からAlen+8だけずれた位置にある。Alenの値はメモリ空間獲得要求毎に変動するので、新規malloc取得領域23により獲得したデータ領域の先頭アドレスは、それぞれのデータ毎に異なった量だけセグメントの境界位置からずれることになる。
キャッシュライン数が128であり、キャッシュライン長が64バイトであるとすると、同一キャッシュラインは、メモリ空間上で8192バイト(8Kバイト)毎に現れる。しかしながら新規mallocによりデータ領域を複数獲得し、これら複数のデータに並列的にアクセスする場合であっても、データ毎にその先頭アドレスと4Kバイトのセグメントの境界位置との距離が異なる。従って、同一キャシュラインへのアクセスが発生する頻度は大幅に減少し、頻繁なキャシュ競合の発生を避けることができる。
図4は、標準Cライブラリ関数のmallocを置き換える形で新規mallocを実行するシステム構成を示す図である。図4に示すシステム構成では、リンク処理により、標準Cライブラリ関数のmallocではなく新規mallocをリンクすることにより、標準Cライブラリ関数のmallocに対して優先的に新規mallocを実行する。ユーザプログラムのオブジェクトコード31としてo1.o、o2.o、・・・、on.oが与えられると、これらのオブジェクトコード31をリンカによりリンク処理することにより、実行可能形式ファイル(main)33が生成される。このリンク処理においては、オブジェクトコード31と、オブジェクトコード31内で参照しているライブラリ関数とを結合し、また変数の参照を絶対アドレスに変更する等の処理が行なわれる。
上記のリンク処理において、図4の構成では、標準Cライブラリ(libc.a)11中のmallocではなく、ラッパ関数ライブラリ(libnew.a)32中のmallocがリンクされる。これにより、オブジェクトコード31中でmalloc関数を呼び出すコードが実行されると、標準Cライブラリ11のmallocではなくラッパ関数ライブラリ32のmalloc(新規malloc)が実行されることになる。なおリンク処理を実行するリンカのコマンドを実行する際に、標準Cライブラリ11のリンクを指定するオプション“−lc”の前に、ラッパ関数ライブラリ32のリンクを指定するオプション“−lnew”を記載する。これにより、標準Cライブラリ11のmallocではなくラッパ関数ライブラリ32のmallocをリンク対象とすることができる。
図5は、メモリ管理システムの構成を概略的に示す図である。ユーザプログラム40中では、メモリ領域を獲得するメモリ獲得関数mallocや獲得メモリ領域を開放するメモリ解放関数freeが呼び出されている。これらの関数の呼び出しに応じて、mmapシステムコールを用いてメモリ領域を獲得するラッパ関数41のmallocや、munmapシステムコールを用いてメモリ領域を解放するラッパ関数41のfreeが実行される。mmapシステムコールやmunmapシステムコールの呼び出しにより、オペレーティングシステム42に備えられている一群のシステムコール43のうち、mmapシステムコールやmunmapシステムコールが実行される。これらのシステムコールの実行により、オペレーティングシステム42のカーネル中のメモリ管理機能44が、メモリ領域を獲得したり、メモリ領域を開放したりする。
図6は、新規mallocの処理の流れを示すフローチャートである。図7は、新規mallocのソースコードの一例を示す図である。以下に、図6と図7とを参照して、新規mallocで実行する処理について説明する。
まず、獲得したいメモリ領域のサイズを変数lenとして指定して新規mallocを呼び出すと、ステップS1で、len+8が4092バイト以上であるか否かを判定する。これは図7のmallocのソースコードにおいて、行51に示すif文の実行に相当する。ここで定数ALIGNはソースコードの先頭に示すように“4092”に定義されている。
ステップS1の判定の結果、len+8が4092バイト以上でない場合、ステップS2で、遊び領域の長さAlenとして0を設定する。またステップS1の判定の結果、len+8が4092バイト以上である場合、ステップS3で、遊び領域の長さAlenを所定の規則に基づいて計算する。
遊び領域の長さAlenの計算方法としては、例えば、以下の式を用いてよい。
Alen=(N mod S)×Line_size (1)
ここで、Nは関数mallocを呼び出した順番を示すmalloc呼び出し連番であり、Sはキャッシュメモリに設けられたキャッシュラインの総数(例えば128)であり、Line_sizeは各キャッシュラインのサイズ(例えば64バイト)である。Nは、最初の関数mallocの呼び出しでは1となり、2番目の関数mallocの呼び出しでは2となり、以下同様にして、n番目の関数mallocの呼び出しではnとなる。なおmodはモジュロ演算であり、NをSで除算した剰余を計算する。上記の式(1)の計算により、各メモリ獲得要求毎に変動するようなサイズをAlenに設定することができる。なお上式(1)の計算は、図7のmallocのソースコードにおいて、行52に示す“64*l”の計算に相当する。ここでlは“(N mod S)”に相当する項であり、行53において、“counter%128”として計算されている。
図6においてステップS2又はS3の後は、ステップS4において、mmapシステムコール呼び出し時に指定する獲得領域サイズを設定する。前述のように、このサイズはAlen+8+lenである。これは図7のmallocのソースコードにおいて、行52に示すalloc_lenの計算に相当する。なおlen+8が4092バイト以上でなく、ステップS2で遊び領域の長さAlenとして0を設定した場合は、行53に示すalloc_lenの計算が実行される。
ステップS5で、mmapシステムコールを実行することにより獲得メモリ領域20(図3参照)を獲得し、その先頭アドレスαを取得する。これは図7のmallocのソースコードにおいて、行54に示すmmapの呼び出しに相当する。mmapの関数値として返される整数値が先頭アドレスαであり、addrに代入されている。
ステップS6で、mallocの復帰アドレスβ(図3参照)を計算する。これは以下のようにして計算される。
β=α+8+Alen (2)
即ち、獲得メモリ領域20のうち遊び領域21(長さAlen)及び管理領域14(長さ8)を除いた残りの領域が、新規malloc取得領域23となる。新規mallocの返す復帰値βは、取得領域23の先頭位置のアドレス値である。上式(2)の計算は、図7のmallocのソースコードにおいて、行55に示す“addr+8+64*l”の復帰に相当する。以上で新規mallocの処理を終了する。
図8は、新規mallocによるメモリ領域獲得の例を示す図である。前述の例と同様に、キャッシュライン数が128であり、キャッシュライン長が64バイトであるとする。(a)は、130回目の新規malloc呼び出しにおいて、獲得サイズlenとして4000を指定した場合を示す図である。この場合、lenが4092バイト未満であるので、遊び領域21は確保されない。管理領域22のうちAlenの値を示す4バイトは値“0”を示している。この場合、新規malloc取得領域23の先頭アドレスβは、第1番目のキャッシュラインに割り当てられる。
(b)は、131回目の新規malloc呼び出しにおいて、獲得サイズlenとして4092を指定した場合を示す図である。この場合、lenが4092バイトであるので、遊び領域21が確保される。遊び領域21の長さAlenは、(131mod128)×64で192バイトとなる。管理領域22のうちAlenの値を示す4バイトは値“3”を示している。この値“3”は、実際の遊び領域21のサイズのバイト値を64で割った値であり、Alenの値を64バイト単位(キャッシュラインの長さ)で表記したものと考えればよい。この場合、新規malloc取得領域23の先頭アドレスβは、第4番目のキャッシュラインに割り当てられる。
(c)は、132回目の新規malloc呼び出しにおいて、獲得サイズlenとして4092を指定した場合を示す図である。この場合、lenが4092バイトであるので、遊び領域21が確保される。遊び領域21の長さAlenは、(132mod128)×64で256バイトとなる。管理領域22のうちAlenの値を示す4バイトは値“4”を示している。この場合、新規malloc取得領域23の先頭アドレスβは、第5番目のキャッシュラインに割り当てられる。
図9は、標準Cライブラリの関数reallocを置き換えるラッパ関数として提供する新規reallocのソースコードの一例を示す図である。ここで関数reallocは、一度獲得したメモリ領域を拡張する機能を実行する。この新規reallocでは、行61においてmallocを呼び出すことにより、ラッパ関数41として提供される新規mallocが実行される。これにより、上記説明したようなセグメント境界へのアラインメントを避けたメモリ領域の獲得が可能となる。
図10は、新規freeの処理の流れを示すフローチャートである。図11は、新規freeのソースコードの一例を示す図である。以下に、図10と図11とを参照して、新規freeで実行する処理について説明する。なおこの新規freeは、新規mallocと同様に、標準Cライブラリの対応する関数に対して優先的に実行されるものである。
まず、解放したいメモリ領域の先頭アドレスを変数addrとして指定して新規freeを呼び出すと、ステップS1で、システムコールmunmap呼び出し時に指定する解放アドレスを算出する。この解放アドレスは、addr−8−Alenにより計算される。ここで8は管理領域22のサイズ、Alenは遊び領域21のサイズである。この解放アドレスの計算は、図11のfreeのソースコードにおいて、行71に示す計算式及び行72に示す計算式の実行に相当する。なおこれらの計算式に現れるlは、管理領域22のうちAlenの値を示す4バイトに格納されている値である。
ステップS2で、munmapシステムコールを実行することにより解放アドレスから始まる獲得メモリ領域を解放する。これは図11のfreeのソースコードにおいて、行73に示すmunmapの呼び出しに相当する。このunmapシステムコールの呼び出しでは、解放アドレスmem_addr(解放すべき領域の先頭アドレス)と、解放すべきメモリ領域のサイズsizeとを指定している。以上で新規freeの処理を終了する。
図12は、メモリ管理プログラムを実行する装置の構成を示す図である。図12に示されるように、メモリ管理プログラムを実行する装置は、例えばパーソナルコンピュータやエンジニアリングワークステーション等のコンピュータにより実現される。図12の装置は、コンピュータ510と、コンピュータ510に接続されるディスプレイ装置520、通信装置523、及び入力装置よりなる。入力装置は、例えばキーボード521及びマウス522を含む。コンピュータ510は、CPU511、キャッシュ511A、RAM512、ROM513、ハードディスク等の二次記憶装置514、可換媒体記憶装置515、及びインターフェース516を含む。
キーボード521及びマウス522は、ユーザとのインターフェースを提供するものであり、コンピュータ510を操作するための各種コマンドや要求されたデータに対するユーザ応答等が入力される。ディスプレイ装置520は、コンピュータ510で処理された結果等を表示すると共に、コンピュータ510を操作する際にユーザとの対話を可能にするために様々なデータ表示を行う。通信装置523は、遠隔地との通信を行なうためのものであり、例えばモデムやネットワークインターフェース等よりなる。
本発明によるメモリ管理プログラムは、コンピュータ510が実行可能なコンピュータプログラムとして提供される。このコンピュータプログラムは、可換媒体記憶装置515に装着可能な記憶媒体Mに記憶されており、記憶媒体Mから可換媒体記憶装置515を介して、RAM512或いは二次記憶装置514にロードされる。或いは、このコンピュータプログラムは、遠隔地にある記憶媒体(図示せず)に記憶されており、この記憶媒体から通信装置523及びインターフェース516を介して、RAM512或いは二次記憶装置514にロードされる。
キーボード521及び/又はマウス522を介してユーザからプログラム実行指示があると、CPU511は、記憶媒体M、遠隔地記憶媒体、或いは二次記憶装置514からプログラムをRAM512にロードする。CPU511は、RAM512の空き記憶空間をワークエリアとして使用して、RAM512にロードされたプログラムを実行し、適宜ユーザと対話しながら処理を進める。なおCPU511がアクセスするメモリ空間は階層構造となっており、キャッシュ511Aが設けられている。なおROM513は、コンピュータ510の基本動作を制御するための制御プログラムが格納されている。
上記コンピュータプログラムを実行することにより、コンピュータ510が、上記各実施例で説明されたようにメモリ管理プログラムを実行する。上記コンピュータプログラムには、前述のラッパ関数ライブラリ、標準Cライブラリ、システムコールを含むOS等が含まれてよい。ここでラッパ関数ライブラリは、システムコールを含むOSやそれに付随する標準Cライブラリとは別個の媒体を介して提供されてよい。
以上、本発明を実施例に基づいて説明したが、本発明は上記実施例に限定されるものではなく、特許請求の範囲に記載の範囲内で様々な変形が可能である。
なお本発明は、以下の内容を含むものである。
(付記1)
先頭アドレスが所定のアドレス位置にアラインメントされるようにメモリ領域を獲得する第1のメモリ領域獲得手段と、
メモリ獲得要求に応じて前記第1のメモリ領域獲得手段を用いて獲得したメモリ領域において前記先頭アドレスから始まる先頭部分から第1の領域を割り当て、前記第1の領域を除いた前記メモリ領域の残りの第2の領域を他のメモリ領域とする第2のメモリ領域獲得手段と、
を含むことを特徴とするメモリ管理システム。
(付記2)
前記第1の領域はサイズが変動することを特徴とする付記1に記載のメモリ管理システム。
(付記3)
前記第1のメモリ領域獲得手段はシステムコールであり、前記第2のメモリ領域獲得手段はライブラリ関数であり、プログラムから前記ライブラリ関数を介して前記システムコールを呼び出して実行するように制御する制御手段を更に含むことを特徴とする付記1記載のメモリ管理システム。
(付記4)
前記制御手段は、前記プログラムをリンクする際に前記ライブラリ関数をリンクさせ、メモリ領域獲得用の他のライブラリ関数に対して優先的に前記ライブラリ関数を実行するように設定することを特徴とする付記3記載のメモリ管理システム。
(付記5)
前記第1の領域のサイズをメモリ獲得要求毎に変動させることを特徴とする付記2乃至4いずれか一項記載のメモリ管理システム。
(付記6)
処理ユニットにより実行することによりメモリ装置のメモリ空間を管理するメモリ管理プログラムであって、
メモリ獲得要求に応じて、先頭アドレスが所定のアドレス位置にアラインメントされるようにメモリ領域を獲得する第1のメモリ領域獲得手段を用いて獲得したメモリ領域において、前記先頭アドレスから始まる先頭部分から第1の領域を割り当て、前記第1の領域を除いた前記メモリ領域の残りの第2の領域を他のメモリ領域とする第2のメモリ領域獲得手段を含むことを特徴とするメモリ管理プログラム。
(付記7)
前記第1のメモリ領域獲得手段はシステムコールであり、前記第2のメモリ領域獲得手段はライブラリ関数であり、プログラムから前記ライブラリ関数を介して前記システムコールを呼び出して実行するように制御する制御手段を更に含むことを特徴とする付記5記載のメモリ管理プログラム。
(付記8)
前記制御手段は、前記プログラムをリンクする際に前記ライブラリ関数をリンクさせ、メモリ領域獲得用の他のライブラリ関数に対して優先的に前記ライブラリ関数を実行するように設定することを特徴とする付記7記載のメモリ管理プログラム。
(付記9)
前記第1の領域のサイズをメモリ獲得要求毎に変動させることを特徴とする付記6乃至8いずれか一項記載のメモリ管理プログラム。
標準ライブラリ関数mallocの動作について説明するための図である。 システムコールの獲得する獲得メモリ領域と標準ライブラリ関数の返す復帰値とを説明する図である。 新規mallocによるメモリ領域獲得について説明するための図である。 標準Cライブラリ関数のmallocを置き換える形で新規mallocを実行するシステム構成を示す図である。 メモリ管理システムの構成を概略的に示す図である。 新規mallocの処理の流れを示すフローチャートである。 新規mallocのソースコードの一例を示す図である。 新規mallocによるメモリ領域獲得の例を示す図である。 標準Cライブラリの関数reallocを置き換えるラッパ関数として提供する新規reallocのソースコードの一例を示す図である。 新規freeの処理の流れを示すフローチャートである。 新規freeのソースコードの一例を示す図である。 メモリ管理プログラムを実行する装置の構成を示す図である。
符号の説明
11 標準Cライブラリ
12 mmapシステムコール
13 獲得メモリ領域
14 管理領域
15 取得領域
20 獲得メモリ領域
21 遊び領域
22 管理領域
23 新規malloc取得領域
31 オブジェクトコード
32 ラッパ関数ライブラリ
33 実行可能ファイル
510 コンピュータ
511 CPU
512 RAM
513 ROM
514 二次記憶装置
515 可換媒体記憶装置
516 インターフェース
520 ディスプレイ装置
521 キーボード
522 マウス
523 通信装置

Claims (5)

  1. 先頭アドレスが所定のアドレス位置にアラインメントされるようにメモリ領域を獲得する第1のメモリ領域獲得手段と、
    メモリ獲得要求に応じて前記第1のメモリ領域獲得手段を用いて獲得したメモリ領域において前記先頭アドレスから始まる先頭部分から第1の領域を割り当て、前記第1の領域を除いた前記メモリ領域の残りの第2の領域を他のメモリ領域とする第2のメモリ領域獲得手段と、
    を含むことを特徴とするメモリ管理システム。
  2. 前記第1のメモリ領域獲得手段はシステムコールであり、前記第2のメモリ領域獲得手段はライブラリ関数であり、プログラムから前記ライブラリ関数を介して前記システムコールを呼び出して実行するように制御する制御手段を更に含むことを特徴とする請求項1記載のメモリ管理システム。
  3. 前記制御手段は、前記プログラムをリンクする際に前記ライブラリ関数をリンクさせ、メモリ領域獲得用の他のライブラリ関数に対して優先的に前記ライブラリ関数を実行するように設定することを特徴とする請求項2記載のメモリ管理システム。
  4. 前記第1の領域のサイズをメモリ獲得要求毎に変動させることを特徴とする請求項1乃至3いずれか一項記載のメモリ管理システム。
  5. 処理ユニットにより実行することによりメモリ装置のメモリ空間を管理するメモリ管理プログラムであって、
    メモリ獲得要求に応じて、先頭アドレスが所定のアドレス位置にアラインメントされるようにメモリ領域を獲得する第1のメモリ領域獲得手段を用いて獲得したメモリ領域において、前記先頭アドレスから始まる先頭部分から第1の領域を割り当て、前記第1の領域を除いた前記メモリ領域の残りの第2の領域を他のメモリ領域とする第2のメモリ領域獲得手段を含むことを特徴とするメモリ管理プログラム。
JP2008307875A 2008-12-02 2008-12-02 メモリ管理システム及びメモリ管理プログラム Pending JP2010134558A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2008307875A JP2010134558A (ja) 2008-12-02 2008-12-02 メモリ管理システム及びメモリ管理プログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2008307875A JP2010134558A (ja) 2008-12-02 2008-12-02 メモリ管理システム及びメモリ管理プログラム

Publications (1)

Publication Number Publication Date
JP2010134558A true JP2010134558A (ja) 2010-06-17

Family

ID=42345822

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008307875A Pending JP2010134558A (ja) 2008-12-02 2008-12-02 メモリ管理システム及びメモリ管理プログラム

Country Status (1)

Country Link
JP (1) JP2010134558A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104268093A (zh) * 2014-09-22 2015-01-07 可牛网络技术(北京)有限公司 内存分配方法及装置
JP2015095001A (ja) * 2013-11-08 2015-05-18 キヤノン株式会社 情報処理装置、その制御方法とプログラム

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2015095001A (ja) * 2013-11-08 2015-05-18 キヤノン株式会社 情報処理装置、その制御方法とプログラム
CN104268093A (zh) * 2014-09-22 2015-01-07 可牛网络技术(北京)有限公司 内存分配方法及装置

Similar Documents

Publication Publication Date Title
KR0132696B1 (ko) 메모리 처리 방법
KR101310412B1 (ko) 프레임 관리를 이용한 동적 주소 변환 방법
US10496534B2 (en) Manual memory management using lazy patching
US7543124B1 (en) Method for preventing page replacement of unreferenced read-ahead file pages
KR20000006565A (ko) 멀티-스레드가상머신에서메모리할당방법및그장치
CN108292162B (zh) 用于多线程访问的软件定义fifo缓冲器
JPH03126144A (ja) 仮想アドレス式情報処理システムにおけるメモリの使用方法及びこの方法を実施するための装置
US11347698B2 (en) Garbage collection for hash-based data structures
CN110781016B (zh) 一种数据处理方法、装置、设备及介质
US20220237041A1 (en) Parallel processing system performing in-memory processing
JP2017037370A (ja) 計算機、プロセス制御方法およびプロセス制御プログラム
KR102114245B1 (ko) 그래픽스 상태 관리 장치 및 방법
CN113485716B (zh) 防内存越界的程序编译方法及装置
US8151086B2 (en) Early detection of an access to de-allocated memory
JP2010134558A (ja) メモリ管理システム及びメモリ管理プログラム
JP5489884B2 (ja) 命令実行装置、命令実行方法、及び命令実行プログラム
KR102658600B1 (ko) 디바이스를 디버깅할 때 메타데이터에 액세스하기 위한 장치 및 방법
US12019629B2 (en) Hash-based data structure
US9489405B2 (en) Geometric array data structure
JP5891963B2 (ja) アドレス管理装置、及びプログラム
CN108958879B (zh) 一种虚拟机的监控方法和装置
US20130110882A1 (en) System and method for persisting object pointers
KR102673748B1 (ko) 다차원 직접 메모리 접근 컨트롤러 및 그것을 포함하는 컴퓨터 시스템
US10817288B2 (en) Combined instruction for addition and checking of terminals
KR100928865B1 (ko) 컴퓨터 시스템에서의 스택 확장 및 보호 방법과 그 장치