JPH1063568A - マルチスレッド環境におけるメモリの割り当て方法及びシステム - Google Patents

マルチスレッド環境におけるメモリの割り当て方法及びシステム

Info

Publication number
JPH1063568A
JPH1063568A JP9168426A JP16842697A JPH1063568A JP H1063568 A JPH1063568 A JP H1063568A JP 9168426 A JP9168426 A JP 9168426A JP 16842697 A JP16842697 A JP 16842697A JP H1063568 A JPH1063568 A JP H1063568A
Authority
JP
Japan
Prior art keywords
memory
thread
pool
computer
threads
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
JP9168426A
Other languages
English (en)
Inventor
Gregory Nakhimovsky
グレゴリー・ナヒモフスキー
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.)
Sun Microsystems Inc
Original Assignee
Sun Microsystems Inc
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 Sun Microsystems Inc filed Critical Sun Microsystems Inc
Publication of JPH1063568A publication Critical patent/JPH1063568A/ja
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99951File or database maintenance
    • Y10S707/99952Coherency, e.g. same view to multiple users
    • Y10S707/99953Recoverability
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99951File or database maintenance
    • Y10S707/99956File allocation

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

(57)【要約】 【課題】 システム・メモリ内の多数のメモリ・プール
の1つと対応付けられた、プロセス内で並列に走るスレ
ッドに、マルチスレッド(並列)コンピュータ環境にお
いてメモリを割り当てる方法を提供する。 【解決手段】 この方法は、システム・メモリにおいて
メモリ・プールを確立するステップと、各スレッドを前
記メモリ・プールの1つにマップするステップと、各ス
レッドについて、対応するメモリ・プールからユーザ・
メモリ・ブロックを動的に割り当てるステップとを含
む。また、前記方法は、既存のあらゆるメモリ管理mall
ocパッケージをも、マルチスレッド・バージョンに変換
する。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、メモリの割り当て
に関し、更に特定すれば、マルチスレッド(並列)環境
におけるメモリの割り当てに関するものである。
【0002】
【従来の技術】コンピュータ・プログラムに対してメモ
リを割り当てる際、殆どの古い言語(例えば、FORTRA
N、COBOL)では、プログラムをコンパイルする前に、ア
レイやデータ項目のサイズを宣言しなければならない。
更に、アレイやデータ項目のサイズは、プログラムを変
更し再コンパイルするのでなければ、超過することはで
きなかった。しかしながら、今日、CやC++を含む最
近のプログラミング言語の殆どでは、ユーザは、実行時
にシステム・メモリからメモリのブロックを要求した
り、プログラムがかかるブロックをもはや必要としない
場合は、メモリ・ブロックをシステム・メモリに開放す
ることが可能となっている。例えば、これら最近の言語
では、データ要素は、次のデータ要素に対するポインタ
を含むフィールドを備えたデータ構造を有する場合が多
い。実行時に、リンク・リストまたはアレイ構造として
多数のデータ要素を割り当てることも可能である。
【0003】Cプログラミング言語は、「メモリ割り当
て」ルーチンとして知られている、1組のライブラリ関
数を、メモリ管理機能に与えている。最も基本的なメモ
リ割り当て関数は、mallocと呼ばれ、要求されたバイト
数を割り当て、割り当てられたメモリの先頭アドレスで
あるポインタを戻す。freeとして知られている別の関数
は、mallocによって既に割り当てられているメモリを返
し、そのメモリが他のルーチンによって再び使用できる
ようにする。
【0004】
【発明が解決しようとする課題】メモリ割り当てが並列
に発生する、例えば、マルチスレッド・プロセス(multi
thraded process)のようなアプリケーションでは、mall
ocおよびfree関数は、「コード・ロック」させなければ
ならない。コード・ロッキングとは、スレッドを含むプ
ロセスのライブラリ・コードを、グローバル・ロックに
よって保護することを意味する。これによって、1つの
スレッドが全体的な構造(global structure)を修正し、
他のスレッドがそれを読もうとしているという場合に、
データの劣化(corruption)を防止する。コード・ロッキ
ングは、いずれの所与の時刻においても、1つのスレッ
ドのみにmalloc関数のいずれか(例えば、malloc、fre
e、realloc)をコールさせるものであり、他のスレッド
は、当該スレッドがそのメモリ割り当てを終了するま
で、待つことになる。したがって、メモリ割り当て関数
が広く使用されるマルチスレッド・プロセスにおいて
は、システム速度が著しく低下する。
【0005】
【課題を解決するための手段】概して言えば、一態様に
おいて、本発明は、各々がシステム・メモリ内に対応す
るメモリ・プールを有する複数のスレッドがプロセス内
において並列に走る、マルチスレッド計算機環境におけ
るメモリ割り当て方法を提供する。この方法は、システ
ム・メモリ内にメモリ・プールを確立するステップと、
各スレッドを前記メモリ・プールの1つにマップするス
テップと、各スレッドについて、対応するメモリ・プー
ルからユーザ・メモリ・ブロックを動的に割り当てるス
テップとを含む。各スレッドは、メモリ割り当てルーチ
ン(例えば、malloc)を用いて、それ自体のメモリ・プ
ールを操作することにより、メモリ管理の効率向上を図
る。
【0006】また、本発明は、既存のメモリ管理malloc
パッケージを、マルチスレッド・バージョンに変換し、
効率を高めてマルチスレッド・プロセスを走らせるよう
にする。その上、本発明は、並列なメモリ管理を必要と
するあらゆるアプリケーションに適用可能であり、特
に、重大な並列メモリ管理を必要とするアプリケーショ
ンにも適用可能である。更に、本発明の使用は、アプリ
ケーション・プログラマの観点からは透明である。何故
なら、ユーザ・インターフェースが標準的なCライブラ
リ・メモリ管理関数(即ち、malloc、free、realloc)
と同一であるからである。
【0007】好適実施例では、前記方法は、更に、異な
るスレッドが1つのメモリ・プールに同時にアクセスす
るのを防止するステップを含む。別個のメモリ・プール
を有することにより、異なるスレッドがメモリ・プール
に同時にアクセスするのを、別個のコード・ロッキング
(例えば、mutex locking) によって防止することがで
き、これによって、データの劣化を排除する。並列実行
に適した既存の標準的なメモリ割り当てルーチンでは、
単一のコード・ロックがあるに過ぎない。したがって、
ある所与の時点においてメモリ割り当てルーチンをコー
ルできるのは、単一のスレッドだけである。当該プロセ
スにおいて実行中の他のスレッドは全て、前記スレッド
がそのメモリ割り当て処理を終了するまで、待っていな
ければならない。一方、本発明では、各スレッドがそれ
自体のメモリを操作している限りは、メモリ割り当て処
理は、全く遅延がなく、並列に実行することができる。
別個のコード・ロッキング構造は、スレッドが他のスレ
ッドのメモリ・プールにアクセスしようとした時にのみ
重要となる。当該スレッドには対応付けられていない、
かかるメモリ・プールのメモリ割り当ては、殆ど発生す
ることはない。このように、本発明は、メモリ割り当て
ルーチンのコールに伴う時間遅延を大幅に減少させるこ
とによって、マルチスレッド・プロセスの処理性能の改
善を図るものである。
【0008】好適実施例では、1つ以上の以下の特徴を
含むことができる。動的にメモリ・ブロックを割り当て
るステップは、割り当てを望むブロック内のバイト数を
指定することを含む。例えば、malloc関数をコールする
ことによって、メモリ・プールの最大サイズまでの必要
なあらゆるバイト数を割り当てる。各スレッドにメモリ
・プールを確立するステップは、予め選択されているサ
イズ(例えば、64kバイト)のメモリ・バッファを割
り当てることを含む。メモリ・プールのサイズを使い果
たした場合、このメモリ・プールのサイズは、バッファ
・メモリの予め選択されているサイズに等しい増加量だ
け、システム・メモリから追加メモリを割り当てること
によって、動的に増加させることができる。更に、前記
方法は、スレッドの1つに、他のスレッドのメモリ・プ
ールから、それ自体のメモリ・プールにメモリを転送さ
せることも含む。
【0009】各メモリ・プールは、例えば、メモリ・プ
ールの1つに対応付けられたスレッド・インデックスに
よって識別されるスタティック変数のアレイのような、
メモリ・ブロックのデータ構造として維持することがで
きる。このデータ構造は、メモリ・ブロックのサイズ
と、それが対応付けられているメモリ・プール・インデ
ックスとから成るヘッダを含む。ブロック・サイズおよ
びメモリ・プール・インデックスは、双方とも、例えば
4バイトとすることができる。
【0010】前記方法は、更に、各スレッドに、メモリ
・ブロックの割り当てを解除する、即ち、開放してをメ
モリ・プールに戻させるステップも含むことができる。
アプリケーションには、メモリ・ブロックの開放は、元
々そのメモリ・ブロックを割り当てたスレッドから行わ
なければならないものもある。また、他のアプリケーシ
ョンには、メモリ・ブロックを開放を、元々そのメモリ
・ブロックを割り当てたのではないスレッドから行うこ
とを許すものもある。
【0011】割り当て解除(解放)したメモリ・ブロッ
クの合体即ち併合を実行し、小さな断片状のブロックを
結合することも可能である。しかしながら、本方法は、
異なるプールからのメモリ・ブロックの合体は防止す
る。
【0012】メモリ・ブロックのサイズを拡大し、より
多くのデータ要素を格納する必要がある場合、メモリ・
プールによって割り当てられるメモリの割り当て済みブ
ロックのサイズは、reallocルーチンを用いて変更する
ことができる。本方法は、reallocが元のメモリ・プー
ルを保存することを必要とする。
【0013】概して言えば、別の態様において、本発明
は、プロセス内で、各々システム・メモリへのアクセス
を有する、複数のスレッドが並列に走るマルチスレッド
・コンピュータ環境において、メモリを割り当てるため
のコンピュータ・プログラムを記憶した、コンピュータ
読み取り可能媒体を提供する。記憶されているプログラ
ムは、(1)前記システム・メモリ内に複数のメモリ・
プールを確立するコンピュータ読み取り可能命令と、
(2)各スレッドを前記複数のメモリ・プールの1つに
マップするコンピュータ読み取り可能命令と、(3)各
スレッドについて、対応するメモリ・プールからユーザ
・メモリ・ブロックを動的に割り当てるコンピュータ読
み取り可能命令とを含む。コンピュータ読み取り可能媒
体は、RAMまたはROMメモリのような多種多様なメ
モリ媒体、ならびにコンピュータ・ディスクまたはCD
ROMのような外部のコンピュータ読み取り可能媒体
のいずれかを含む。また、コンピュータ・プログラム
は、ネットワークを通じて、コンピュータの一時的にア
クティブな記憶装置(例えば、RAM、出力バッファ)
にダウンロードすることも可能である。例えば、上述の
コンピュータ・プログラムは、インターネットを通じ
て、ウエブ・サイトからコンピュータのメモリにダウン
ロードすることができる。したがって、本発明のコンピ
ュータ読み取り可能媒体は、ネットワークからダウンロ
ードされる上述のコンピュータ・プログラムを格納する
コンピュータのメモリを含むことを意図するものであ
る。
【0014】本発明の別の態様において、システムは、
一部分が上述のコンピュータ・プログラムを格納するメ
モリと、格納されたコンピュータ・プログラムのコンピ
ュータ読み取り可能命令を実行するプロセッサと、メモ
リおよびプロセッサを接続するバスとを含む。
【0015】その他の利点および特徴は、以下の好適実
施例の記載および特許請求の範囲から明白となろう。
【0016】
【発明の実施の形態】図1を参照すると、マルチ処理ネ
ットワーク10を簡略に表現した図は、システム・バス
16を通じてシステム・メモリ14に相互接続されてい
る、同等の能力の個々のプロセッサ12a〜12nを含
む。プロセッサは全て、システム・メモリ、ならびにそ
の他のI/Oチャネルおよび周辺装置(図示せず)への
アクセスを共有する。各プロセッサは、例えば、アプリ
ケーションのような1つ以上のプロセスを実行するため
に用いられる。
【0017】図2を参照すると、プロセッサ12a〜1
2n(図1)の1つ以上において走るアプリケーション
20が示されている。アプリケーション20は、ここで
は、単一のスレッド22を含み、このスレッドは、シス
テム・メモリ14内において割り当てられたメモリの一
部分24に対するアクセスを有する。このメモリ部分の
ことを、メモリ・プールと呼ぶ。また、アプリケーショ
ン20は、マルチスレッド部分も含む。マルチスレッド
部分は、ここでは、4つのスレッド30〜33を有する
ものとして示されている。4つのスレッドを示すが、ア
プリケーションの実行中には、新たなスレッドが繰り返
し作成され、古いスレッドが消滅していくので、個々の
時点で実行中のスレッドの数は変化し得る。スレッド3
0〜33の各々は、例えば、プロセッサ12a〜12n
の内対応する1つにおいて走るようにしてもよい。他の
アプリケーションでは、全てのスレッドまたは多数のス
レッドが単一のプロセッサ上で走ることもあり得る。ス
レッド30は、単一のスレッドとしてのアプリケーショ
ンによって割り当てられたメモリ部分24を使用し続け
る、主スレッドであると見なされる。しかしながら、追
加のスレッド31〜33は、システム・メモリ14か
ら、それら自体のメモリ・プール38〜40を割り当て
る。したがって、各スレッドは、その処理実行に使用す
るために、1つのメモリ・プールと対応付けられる。こ
れらのスレッド上で走るアプリケーションの実行の間、
各スレッドは、メモリ割り当て関数(即ち、malloc、fr
ee、realloc)を用いて、それに対応するメモリ・プー
ルからのメモリ・ブロックの割り当て、解放、および再
割り当てを繰り返し行う。これについては、以下で詳細
に説明する。更に、通常1つのスレッドを主スレッドと
して指名するが、残りのスレッドのいくつかを、特定の
目的のために指名することも可能である。
【0018】メモリ・プールの確立 メモリ・プールの数(NUM_POOLS)は固定されている。mal
locパッケージ・プログラマはプール数の変更が可能で
あるが、それを行った後、パッケージを再構築しなけれ
ばならない。
【0019】各スレッドのためのメモリ・プールの確立
は、予め選択されているサイズ(例えば、64Kバイ
ト)のメモリ・バッファを割り当てることを含む。メモ
リ・プールのサイズ使い果たした場合、システムメモリ
から追加のメモリを割り当てることによって、メモリ・
プールのサイズを動的に増加することができる。追加の
メモリを割り当てるには、例えば、Unixシステムのsbrk
()と呼ばれるルーチンを用いればよい。この実施態様で
は、sbrk()をmallocの中から内部的にコールし、バッフ
ァ・メモリの予め選択されているサイズに等しい増加分
だけ、追加メモリを割り当てる。追加のメモリを割り当
てるには、プールをロックし、他のメモリ関数が同時に
実行されるのを防止する必要がある。したがって、メモ
リ・バッファのサイズは、malloc()によって要求される
メモリの平均量に比較して大きく選択することにより、
プール・サイズの増加要求が頻繁には起こらないように
する。
【0020】各メモリ・プールは、個々のメモリ・ブロ
ックがプールから成る、バイナリ・ツリー・データ構造
として設定することもできる。バイナリ・ツリーは、サ
イズによって順序付けられるが、アドレスによる順序付
けも可能である。あるいは、他のデータ構造(例えば、
リンク・リスト)を用いてもよいが、バイナリ・ツリー
構造は、検索時に高速処理が可能なので好ましい。更
に、バランス・アルゴリズムまたは自己調節アルゴリズ
ムを用いて、検索の効率を高めることも可能である。
【0021】図3を参照すると、メモリ40の各ブロッ
クは、データ・オブジェクト40によって識別される。
データ・オブジェクト40は、使用される特定のハード
ウエア・アーキテクチャの整合要件に合わせた長さのヘ
ッダ42を有する。例えば、カリフォルニア州、マウン
テン・ビューのSun Microsystems社が使用するある種の
ハードウエア構成では、SPARCアーキテクチャに合わせ
た整合境界(alignmentboundary)を得るために、ヘッダ
の長さが8バイトでなければならない。ヘッダの最初の
4バイトは、ブロックのサイズを示し、残りの4バイト
はプール番号を示す。
【0022】メモリ管理関数 各スレッド20〜23は、標準的なCライブラリからの
ルーチンと同様の1組のメモリ割り当てルーチンを用い
て、そのメモリ・プールにメモリを割り当てる。メモリ
を割り当てる基本関数はmalloと呼ばれ、以下の構文を
有する。
【0023】void * malloc (size) sizeは要求されたバイト数を示す。
【0024】他のメモリ割り当てルーチンにfreeがあ
る。これは、割り当てられた記憶ブロックを、空きメモ
リのプールに解放するもので、以下の構文を有する。
【0025】void * free (old) oldは解放するメモリのブロックへのポインタである。
【0026】更に他のメモリ割り当てルーチンにreallo
cがある。これは、mallocによって割り当てられたメモ
リのブロック・サイズを調節するものである。realloc
は以下の構文を有する。
【0027】void * realloc (old, size) oldは、サイズを変更するメモリのブロックへのポイン
タであり、sizeは、当該ブロックの新たなサイズであ
る。
【0028】既存のmallocパッケージのマルチスレッド
mallocパッケージへの変換 単一のロックを用いる既存のメモリ管理パッケージを、
並列メモリ管理パッケージに変換するためには、上述の
メモリ管理関数において用いられている全てのスタティ
ック変数をスタティック・アレイに変換する。例えば、
メモリ・プールに対応付けられたバイナリ・ツリー構造
は、スタティック・アレイとして格納される。スタティ
ック・アレイの各要素は、そのスレッド・インデックス
によって識別され、所与のメモリ・プールと対応付けら
れる。各アレイには、各プールに対して別個のスタティ
ック・アレイ要素がある。したがって、各スレッドを求
めるための特定のデータ構造(例えば、バイナリ・ツリ
ー)全体の検索は、並列的に実行することができる。
【0029】したがって、各スレッドは、上述のルーチ
ンのいずれでも繰り返し実行し、それらに対応するメモ
リ・プールのメモリ割り当てを管理することができる。
例えば、再び図2を参照すると、主スレッド30は、メ
モリ・プール24内のメモリ・ブロックの割り当て、解
放、および再割り当てを多数回行うプロシージャを実行
することができる。同時に、スレッド31〜33は、メ
モリをそれらの各メモリ・プール38〜40に割り当て
たりおよび解放するプロシージャを実行することができ
る。
【0030】スレッドのメモリ・プールへのマッピング メモリ割り当て関数をコールしたときはいつでも、これ
ら関数の各1つの中にあるスレッド識別ルーチンを用い
て、メモリ割り当て要求を行ったスレッドを識別する。
スレッド識別関数は、要求を行ったスレッドのスレッド
・インデックスを返す。例えば、Sun Microsystems社の
製品である、Solarisオペレーティング・システム(O
S)は、一実施態様において、thr_self()と呼ばれる関
数を用いる。
【0031】次に、他のアルゴリズムを用いて、各スレ
ッド・インデックスをメモリ・プール番号にマップす
る。例えば、記載中の実施例は、スレッド・インデック
スを受け取り対応するプール番号を返す、GET_THREAD_I
NDEXとして知られている以下のマクロを用いる。
【0032】 # define GET_THRED_INDEX (self) \ ((self) == 1 ? 0 : 1 + ((self) - 4 % (NUM_POOLS-1) ここで、selfはスレッド・インデックス、およびNUM_PO
OLSはメモリ・プール数である。
【0033】上述のように、通常1つのスレッドを主ス
レッドとして指定し、残りのスレッドを他の目的のため
に指定する。例えば、SOLARIS OSが用いるスレッド付
番システムは、最初のスレッドを主スレッドとして保存
し、2番目および3番目のスレッドをシステム・スレッ
ドとし、残りのスレッドをユーザ・スレッドとしてい
る。上述のマクロを用いて、メモリ・プールに0からNU
M_POOLS-1まで付番する。上述のマクロの最初の部分(s
elf == 1 ? 0)は、主スレッドが常に最初のプール番号
に対応することを保証する。したがって、selfが1に等
しい(即ち、それが主スレッドである)場合、プール番
号は0となる。その他の場合、マクロの":"の後ろの残
り部分に示すように、スレッド・インデックスから定数
の4を引いたものとNUM_POOLS-1との剰余を番号1に加
算して、プール番号にする。例えば、メモリ・プールが
4つのみであり(即ち、NUM_POOLS=4)、スレッド・イ
ンデックスが4である場合、前記マクロによって返され
る対応するプール番号は1となる。5および6のスレッ
ド・インデックスは、それぞれ、2および3と付番され
た対応するメモリ・プールを有することになる。
【0034】いずれかの所与の時刻に存在するスレッド
数が、確立したプール数を超過するアプリケーションで
は、追加のスレッドが、あるメモリ・プールに対応付け
られている他のスレッドと、そのプールを共有する。例
えば、図4を参照すると、新たな5番目のスレッド34
が作成されたアプリケーションを示す。4つのメモリ・
プールしか確立しておかなかったので、上述のマクロを
用いて、元々スレッド30のみに対応付けられていた第
1メモリ・プール24に、スレッド34をマップする。
この状況では、主プール24に対応するミューテックス
・ロック(mutexlock)が、スレッド24または34の一
方がプールを使用している場合に、スレッド24または
34の他方によるアクセスを防止する。前章の例では、
マクロGET_THREAD_INDEXは、メモリ・プール#1に対し
て、4および7のスレッド・インデックスを有するスレ
ッドをマップする。
【0035】コード・ロッキング・メモリ・プール 各メモリ・プール24および38〜40は、それ自体の
相互除外(mutex)ロックによって保護されている。各メ
モリ・プールに対応するデータ構造と同様に、ミューテ
ックス・ロックは、スタティック・アレイに格納され
る。各ミューテックス・ロックは、それ自体のメモリ・
プールから1つ以上のメモリ・ブロックの割り当て、割
り当て解除または再割り当てを行っているスレッドにお
いては、遅延を発生させない。しかしながら、特定のメ
モリ・プールに対応付けられていないスレッドが、当該
プールに対応付けられているスレッドによって既に割り
当てられているメモリ・ブロックにアクセスしようとす
ると、ミューテックス・ロックは、対応付けられていな
いスレッドが、当該プールからメモリ・ブロックの割り
当て解除や再割り当てを行うのを防止する。したがっ
て、ロックは、一度に2つ以上のスレッドによる更新ま
たは使用からメモリを保護することによって、メモリ・
ブロックにおけるデータの劣化を防止する。このような
スレッドに対応付けられていないメモリ・プールからの
メモリ・ブロックに対する割り当て、割り当て解除また
は再割り当ての試みは、比較的頻度が少ない。この特徴
は、単一のミューテックス・ロックを全てのメモリ管理
ルーチンに用いる従来の方式に対して、システムの速度
性能において大幅な改善をもたらすものである。単一の
ミューテックス・ロックの使用では、マルチスレッド型
アプリケーションの性能を大幅に低下させる可能性があ
る。この手法では、一旦スレッドがメモリ管理関数(即
ち、malloc、free、またはrealloc)をコールしたな
ら、他のスレッドは全て、当該スレッドがそのメモリ管
理関数を実行し終わるまで待たなければならない。各メ
モリ・プールに別個のミューテックス・ロックを与える
ことによって、各スレッドは、並列に、それ自体のメモ
リ・プール内でそれ自体のメモリの割り当てや解放を行
うことができ、しかも対応されていないスレッドからの
アクセスを防止する。
【0036】スレッドによってメモリ・ブロックを繰り
返し割り当て、解放し、そして再割り当てするに連れ
て、メモリ・プールは更に小さなブロックに細分されて
いく可能性がある。隣接する解放メモリ・ブロックの合
体即ち併合を周期的に実行し、スレッドによって再割り
当て可能な、より大きなメモリ・ブロックを形成する。
しかしながら、メモリ・ブロックを隣接するメモリ・ブ
ロックと合体できるようにする前に、記載中の実施例で
は、最初に、これらのブロックが同一プールからのもの
か否かについて判定を行う。同一プールからのものでな
い場合、これらのブロックの合体を行わず、こうしてデ
ータ劣化の可能性を回避する。
【0037】mallocプールの併合 個々のスレッドがメモリ管理を使用する程度には、著し
い変化がある。例えば、再び図2を参照すると、スレッ
ド31〜33は、主スレッド30によって実行されるタ
スクの完了以前に、それらのタスクを完了する場合もあ
る。かかる状況では、主スレッドは、随意選択のインタ
ーフェース関数をコールし、スレッド31〜33によっ
て割り当てられたメモリを主スレッド30に転送するこ
とができる。言い換えれば、マルチスレッド部分の終了
時に、主スレッドによってこの関数をコールし、他のス
レッドによって以前に割り当てられたメモリを主スレッ
ドに統合化することができる。この実施例において用い
たルーチンは、以下のプロトタイプを有する。
【0038】void merge_malloc_pools (void); 多数のスレッドがアプリケーション全体にわたって重要
なメモリ管理を行うような場合には、かかるアプリケー
ションにはこの関数の使用は不要であろう。
【0039】図5を参照すると、主スレッド30および
ユーザ・スレッド31内で走るアプリケーションの簡略
表現が示されている。ここでは、それぞれスレッド3
0,31と対応付けられているメモリ・プール24,3
8(図2)が既に確立されていると仮定する。主スレッ
ド30に関して、第1のmallocルーチン・コールを実行
し、SIZE#1バイトを有するメモリのブロックを要求す
る。このアプリケーションでは後に、第1のfreeルーチ
ン・コール52を実行し、ポインタOLDによって識別さ
れるメモリのブロックを返す。この時点で、通常合体を
行い、返されたメモリのブロックを隣接するブロックと
結合するが、これらが双方とも同一メモリ・プールから
来た場合に限る。更に後に、このスレッドにおいて、第
2のmallocルーチン・コール54を行い、SIZE#2バイト
を有するメモリのブロックを要求する。次に、ポインタ
OLDによって識別されるメモリのブロックをSIZE#3バイ
トにサイズ変更するreallocコール56が続く。スレッ
ド31は、スレッド30と同時にプロシージャを実行す
るものとして示されている。例えば、第1のmallocルー
チン・コール60を実行した後のある時刻に、第1のfr
eeルーチン・コール62を実行する。最後に、この例で
は、アプリケーションのマルチスレッド部分の完了後
に、merge_malloc_poolsルーチン64をコールし、スレ
ッド31によって割り当てられたメモリ・ブロックを、
主スレッド30に統合する。
【0040】[資料]として添付したのは、既存のmall
ocパッケージをマルチスレッド・バージョンのmallocパ
ッケージに変換する方法の一実施態様についての、ソー
ス・コード・ソフトウエアである。このソース・コード
は、The C programming language (B. W. Kerninghan
and D. M. Richie, Prentice Hall (1988))に記載され
ている1組のメモリ割り当てルーチンに基づくプログラ
ムの1バージョンを表わす。
【0041】他の実施例は、特許請求の範囲に記載する
通りである。
【0042】 [資料] /* A multithreaded (MT-hot) version of malloc and friends. Based on the malloc package from the Kernighan & Ritchie ANSI C book (page 185), with modifications. By Greg Nakhimovsky Sun Microsystems, Inc. Market Development Engineering January 1996 Changes from the original K&R version: * All malloc routines are made MT-safe. * realloc() is added. * A separate free pool is created for each thread up to NUM_POOLS. NUM_POOLS is currently set to 4 but can be adjusted. * The pool number is stored in the same header. * Increased header size to 16 bytes to make room for pool number. * Each pool is protected by its own mutex lock. * free() returns the freed block to the pool the block was malloc'ed from. * realloc() modifies the block in the original pool. * Coalescing (merging) is only done within the same pool. * A new routine is added for external interface: merge_malloc_pools(). If called by the application from the main thread after the threaded section is over, it transfers all memory blocks fro m the additional pools back to the main pool. This call will eliminate a "memory leak", in a sense that the main thread c an reuse memory used by other threads. * To reduce additional fragmentation, the default block size for sbrk() is increased from 8K to 64K. When multiple treads allocate and deallocate their own memory, they don't wait on their own locks. When one thread tries to free or reallocate memory allocated by another thread, the lock protects the free list from being updated or used by more than one thread at a time. The lock is also used when there are more than NUM_POOLS threads active at the same time. */ #include <stdio.h> #include <thread.h> #include <synch.h> */ number of pools for different threads */ #define NUM_POOLS 4 /* minimum number of 16-byte units to request from system = 64K in this case */ #define NALLOC 4096 #define MAGIC 0x5555 /* to check integrity of pointers to free, realloc */ #ifdef _REENTRANT /* will not compile without _REENTRANT defined */ static mutex_t_pool_locks[NUM_POOLS]; #endif /* _REENTRANT */ #define GET_THREAD_INDEX(self) ((self) == 1) ? 0 : 1 + ((self)- 4)%(NUM_POOLS-1) #ifndef NULL #define NULL (0) #endif typedef double Align; /* increaded the header size to 16 bytes - GN */ union header { struct { union header *ptr; /* next block if on the free list */ unsigned size; /* size of this block */ unsigned pool; /* pool number */ unsigned magic; /* for checking - using 4 extra bytes */ } s; Align x[2]; /* need 16 bytes because of the pool number * / } ; typedef union header Header; static Header base[NUM_POOLS]; /* empty lists to get started */ /* starts of free lists */ static Header *freep[NUM_POOLS] = {NULL, NULL, NULL, NULL}; static void *malloc_locked(unsigned nbytes, unsigned thread_index); static void free_locked(void *ap, unsigned thread_index); static Header *morecore(unsigned nunits, unsigned thread_index); void *malloc(unsigned nbytes) { void *ret; unsigned self, thread_index; self = thr_self(); thread_index = GET_THREAD_INDEX(self); mutex_lock(&_pool_locks[thread_index]); ret = malloc_locked(nbytes, thread_index); mutex_unlock(&_pool_locks[thread_index]); return ret; } static void *malloc_locked(unsigned nbytes, unsigned thread_index) { Header *p, *prevp; unsigned nunits; nunits = (nbytes+sizeof(Header)-1)/sizeof(Header) + 1; if ((prevp = freep[thread_index]) == NULL) { /* no free list yet */ base[thread_index].s.ptr = freep[thread_index] = prevp = &base[thread_index]; base[thread_index].s.size = 0; base[thread_index].s.pool = thread_index; base[thread_index].s.magic = MAGIC; } for (p = prevp->s.ptr; ; prevp = p, p = P->s.ptr) { if (p->s.size >= nunits) { /* big enough */ if (p->s.size == nunits) /* exactly */ prevp->s.ptr = p->s.ptr; else { p->s.size -= nunits; p (= p->s.size; p->s.size = nunits; p->s.pool = thread_index; p->s.magic = MAGIC; } freep[thread_index] = prevp; return (void *)(p(1); } if (p == freep[thread_index]) /* wrapped around free list */ if ((p = morecore(nunits, thread_index)) == NULL) return NULL; /* none left */ } } static Header *morecore(unsigned nu, unsigned thread_index) { char *cp, *sbrk(int); Header *up; if (nu < NALLOC) nu = NALLOC; cp = sbrk(nu * sizeof(Header)); /* sbrk() assumed locked - GN */ if (cp == (char *) -1) /* no space at all */ return NULL; up = (Header *) cp; up->s.size = nu; up->s.pool = thread_index; up->s.magic = MAGIC; free_locked((void *)(up(1), thread_index); return freep[thread_index]; } void free(void *ap) { Header *bp; unsigned thread_index; int i; if(ap == NULL) return; /* free the block of the thread which allocated it */ bp = (Header *)ap - 1; /* point to block header */ if (bp->s.magic != MAGIC) { printf("bogus pointer %x passed to free()\n", ap); abort(); } thread_index = bp->s.pool; mutex_lock(&_pool_locks[thread_index]); free_locked(ap, thread_index); mutex_unlock(&_pool_locks[thread_index]); } static void free_locked(void *ap, unsigned thread_index) { Header *bp, *p; int i; bp = (Header *)ap - 1; /* point to block header */ for (p = freep[thread_index]; !(bp > p && bp < p->s.ptr); p = p->s.ptr) if (p >= p->s.ptr && (bp > p || bp < p->s.ptr)) break; /*freed block at start or end of arena * / if (bp ( bp->s.size == p->s.ptr && bp->s.pool == p->s.pool) { /* join to upper nbr */ bp->s.size (= p->s.ptr->s.size; bp->s.ptr = p->s.ptr->s.ptr; } else bp->s.ptr = p->s.ptr; if (p ( p->s.size == bp && p->s.pool == bp->s.pool) { /* join to lower nbr */ p->s.size (= bp->s.size; p->s.ptr = bp->s.ptr; } else p->s.ptr = bp; freep[thread_index] = p; } void *realloc(void* old, unsigned nbytes) /* Added by GN, since realloc() is not given in the K&R book */ { void *new; Header *bp; unsigned self, thread_index, ncopy; if(old == NULL) return malloc(nbytes); self = thr_self(); thread_index = GET_THREAD_INDEX(self); bp = (Header *)old - 1; /* point to block header */ if (bp->s.magic != MAGIC) { printf("bogus pointer %x passed to realloc\n", old); abort(); } if (bp->s.pool != thread_index) thread_index = bp->s.pool; mutex_lock(&_pool_locks[thread_index]); /* for simplicity, always allocate a new block, copy and free the old one */ if ((new = malloc_locked(nbytes, thread_index)) == NULL) { mutex_unlock(&_pool_locks[thread_index]); return NULL; } if(nbytes > 0) { ncopy = sizeof(Header) * (bp->s.size - 1); if(ncopy > nbytes) ncopy = nbytes; memcpy(new, old, ncopy); } free_locked(old, thread_index); mutex_unlock(&_pool_locks[thread_index]); return new; } /* New externally called function merging all additional pools into the main thread's pool. Should only be called from the main thread. Assumes that only the main thead is active. */ void merge_malloc_pools(void) { int i; Header *p, *prevp; /* skip the main thread's pool (0) */ for (i=1; i<NUM_POOLS; i(() { prevp = freep[i]; if(prevp != NULL) { for (p = prevp->s.ptr; ; prevp = p, p = p->s.ptr) { if(p->s.size > 0) { p->s.pool = 0; /* no need to lock - main thread only */ free_locked((void *)(p(1), 0); } if (p == freep[i]) /* end of list */ break; } freep[i] = NULL; } } }
【図面の簡単な説明】
【図1】本発明と共に使用するのに適した、マルチ処理
コンピュータ・システムのブロック図。
【図2】マルチスレッド・アプリケーションと共有メモ
リとの間の関係を示す図。
【図3】メモリ内のデータ・オブジェクトを示す図。
【図4】マルチスレッド・アプリケーションと、メモリ
・プールより多いスレッドが存在する共有メモリとの間
の関係を示す図。
【図5】あるプロセス内で実行中のスレッドからメモリ
管理関数をコールするアプリケーションの一例を示す
図。
【符号の説明】
10 マルチ処理ネットワーク 12a〜12n プロセッサ 14 システム・メモリ 16 システム・バス 20 アプリケーション 22 スレッド 24 メモリ・プール 30〜33 スレッド 38〜40 メモリ・プール 52 第1のfreeルーチン・コール 54 第2のmallocルーチン・コール 56 reallocコール 60 第1のmallocルーチン・コール 62 第1のfreeルーチン・コール 64 merge_malloc_poolsルーチン
───────────────────────────────────────────────────── フロントページの続き (71)出願人 597004720 2550 Garcia Avenue,MS PAL1−521,Mountain V iew,California 94043− 1100,United States of America (72)発明者 グレゴリー・ナヒモフスキー アメリカ合衆国マサチューセッツ州01880, ウェイクフィールド,フランダース・レー ン 22

Claims (21)

    【特許請求の範囲】
  1. 【請求項1】各々システム・メモリへのアクセスを有す
    る複数のスレッドがプロセス内で並列に走る、マルチス
    レッド・コンピュータ環境において、メモリを割り当て
    る方法であって、 前記システム・メモリにおいて複数のメモリ・プールを
    確立するステップと、各スレッドを、前記複数のメモリ
    ・プールの1つにマップするステップと、 各スレッドについて、対応するメモリ・プールからのユ
    ーザ・メモリ・ブロックを動的に割り当てるステップ
    と、から成ることを特徴とする方法。
  2. 【請求項2】請求項1記載の方法において、前記メモリ
    ・ブロックを動的に割り当てるステップは、割り当てを
    望むブロックにおけるバイト数を指定するステップを含
    むことを特徴とする方法。
  3. 【請求項3】請求項1記載の方法であって、更に、異な
    るスレッドによる、1つのメモリ・プールへの同時アク
    セスを防止するステップを含むことを特徴とする方法。
  4. 【請求項4】請求項1記載の方法において、各スレッド
    にメモリ・プールを確立するステップは、予め選択され
    ているサイズのメモリ・バッファを割り当てるステップ
    を含むことを特徴とする方法。
  5. 【請求項5】請求項4記載の方法であって、更に、前記
    バッファ・メモリの予め選択されているサイズに等しい
    増加分だけ、前記システム・メモリから追加メモリを割
    り当てることによって、前記メモリ・プールのサイズを
    動的に増加させるステップを含むことを特徴とする方
    法。
  6. 【請求項6】請求項4記載の方法において、前記バッフ
    ァの予め選択されているサイズは64Kバイトであるこ
    とを特徴とする方法。
  7. 【請求項7】請求項1記載の方法であって、更に、前記
    スレッドの1つが、前記スレッドの他のもののメモリ・
    プールから、当該スレッドのメモリ・プールにメモリを
    転送するステップを含むことを特徴とする方法。
  8. 【請求項8】請求項1記載の方法において、前記各メモ
    リ・プールは、メモリ・プールに対応付けられたスレッ
    ド・インデックスによって識別されるスタティック変数
    のアレイによって定義されることを特徴とする方法。
  9. 【請求項9】請求項8記載の方法において、前記各メモ
    リ・プールは、メモリ・ブロックのデータ構造として維
    持されることを特徴とする方法。
  10. 【請求項10】請求項9記載の方法において、各メモリ
    ・ブロックは、当該メモリ・ブロックのサイズと、それ
    が対応付けられているメモリ・プール・インデックスと
    を含むヘッダを備えていることを特徴とする方法。
  11. 【請求項11】請求項10記載の方法において、前記ブ
    ロックのサイズおよび前記メモリ・プール・インデック
    スは各々4バイトであることを特徴とする方法。
  12. 【請求項12】請求項1記載の方法であって、更に、各
    スレッドがメモリ・ブロックの割り当てを解除し、前記
    メモリ・プールに返すステップを含むことを特徴とする
    方法。
  13. 【請求項13】請求項12記載の方法において、元々前
    記メモリ・ブロックを割り当てたスレッドが、該メモリ
    ・ブロックの割り当てを解除し、前記スレッドに対応す
    るメモリ・プールに返すことを特徴とする方法。
  14. 【請求項14】請求項12記載の方法であって、更に、
    割り当て解除されたメモリ・ブロックを合体し、異なる
    プールからのメモリ・ブロックの合体を防止するステッ
    プを含むことを特徴とする方法。
  15. 【請求項15】請求項1記載の方法であって、更に、メ
    モリ・プールによって割り当てられたメモリの割り当て
    済みブロックのサイズを変更するステップを含むことを
    特徴とする方法。
  16. 【請求項16】メモリを含むコンピュータ上で実行可能
    なコンピュータ・プログラムを記憶するコンピュータ読
    み取り可能媒体であって、前記コンピュータ・プログラ
    ムは、各々システム・メモリへのアクセスを有する複数
    のスレッドがプロセス内で並列に走る、マルチスレッド
    ・コンピュータ環境において、メモリを割り当てるもの
    であり、前記記憶されているプログラムは、 前記システム・メモリにおいて複数のメモリ・プールを
    確立するコンピュータ読み取り可能命令と、 各スレッドを、前記複数のメモリ・プールの1つにマッ
    プするコンピュータ読み取り可能命令と、 各スレッドについて、対応するメモリ・プールからのユ
    ーザ・メモリ・ブロックを動的に割り当てるコンピュー
    タ読み取り可能命令と、から成ることを特徴とするコン
    ピュータ読み取り可能媒体。
  17. 【請求項17】請求項16記載のコンピュータ読み取り
    可能媒体において、前記記憶されているプログラムは、
    更に、異なるスレッドによる、1つのメモリ・プールへ
    の同時アクセスを防止するコンピュータ命令を含むこと
    を特徴とするコンピュータ読み取り可能媒体。
  18. 【請求項18】請求項16記載のコンピュータ読み取り
    可能媒体において、前記記憶されているプログラムは、
    更に、前記スレッドの1つに、該スレッドの他のものの
    メモリ・スレッドから、それ自体のメモリ・プールにメ
    モリを転送させるコンピュータ命令を含むことを特徴と
    するコンピュータ読み取り可能媒体。
  19. 【請求項19】請求項16記載のコンピュータ読み取り
    可能媒体において、各メモリ・プールは、メモリ・プー
    ルに対応付けられたスレッド・インデックスによって識
    別される、スタティック変数のアレイによって定義され
    ることを特徴とするコンピュータ読み取り可能媒体。
  20. 【請求項20】請求項16記載のコンピュータ読み取り
    可能媒体において、前記記憶されているプログラムは、
    更に、割り当て解除されたメモリ・ブロックを合体し、
    異なるプールからのメモリ・ブロックの合体を防止する
    コンピュータ命令を含むことを特徴とするコンピュータ
    読み取り可能媒体。
  21. 【請求項21】システムであって、 各スレッドがメモリへのアクセスを有する、複数のスレ
    ッドがプロセス内で並列に走る、マルチスレッド・コン
    ピュータ環境において、メモリを割り当てるコンピュー
    タ・プログラムをその一部に記憶するメモリであって、
    前記記憶されているプログラムが、 前記メモリにおいて複数のメモリ・プールを確立するコ
    ンピュータ読み取り可能命令と、 各スレッドを、前記複数のメモリ・プールの1つにマッ
    プするコンピュータ読み取り可能命令と、 各スレッドについて、対応するメモリ・プールからのユ
    ーザ・メモリ・ブロックを動的に割り当てるコンピュー
    タ読み取り可能命令と、 から成る前記メモリと、 前記コンピュータ読み取り可能命令を実行するプロセッ
    サと、 前記メモリを前記プロセッサに接続するバスと、から成
    ることを特徴とするシステム。
JP9168426A 1996-06-28 1997-06-25 マルチスレッド環境におけるメモリの割り当て方法及びシステム Pending JPH1063568A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US08/673,382 US6058460A (en) 1996-06-28 1996-06-28 Memory allocation in a multithreaded environment
US673382 1996-06-28

Publications (1)

Publication Number Publication Date
JPH1063568A true JPH1063568A (ja) 1998-03-06

Family

ID=24702431

Family Applications (1)

Application Number Title Priority Date Filing Date
JP9168426A Pending JPH1063568A (ja) 1996-06-28 1997-06-25 マルチスレッド環境におけるメモリの割り当て方法及びシステム

Country Status (4)

Country Link
US (1) US6058460A (ja)
EP (1) EP0817044B1 (ja)
JP (1) JPH1063568A (ja)
DE (1) DE69715532T2 (ja)

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100488836B1 (ko) * 2000-06-20 2005-05-11 인터내셔널 비지네스 머신즈 코포레이션 컴퓨터 프로그램 저장 장치 및 병렬 처리 방법
KR100488846B1 (ko) * 2000-06-20 2005-05-11 인터내셔널 비지네스 머신즈 코포레이션 병렬 처리 컴퓨팅 시스템에서의 메모리 할당 방법 및 프로그램 저장 장치
KR100771728B1 (ko) * 2000-12-09 2007-10-30 엘지엔시스(주) 자동은행거래단말기에서의 상호 스레드 통신방법
JP2007531114A (ja) * 2004-03-26 2007-11-01 キョウセラ ワイヤレス コープ. メモリ割り当てのためのフックした複製値を有するバイナリサーチツリー
JP2008525887A (ja) * 2004-12-23 2008-07-17 インテル・コーポレーション スレッドプロセッサにおける多重クライアントへのバッファの動的割り当て
KR100871587B1 (ko) 2007-04-20 2008-12-02 (주)엔텔스 공유 메모리 페이징 기법에 의한 프로세스간 가변 길이데이터 흐름 제어 방법 및 그 장치
JP2015515076A (ja) * 2012-04-27 2015-05-21 マイクロソフト コーポレーション メモリ要素の割当てのために一方向リンク付けリストを区分化するシステム及び方法
US9448864B2 (en) 2012-08-10 2016-09-20 Hanwha Techwin Co., Ltd. Method and apparatus for processing message between processors

Families Citing this family (74)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6324623B1 (en) * 1997-05-30 2001-11-27 Oracle Corporation Computing system for implementing a shared cache
US6363467B1 (en) * 1997-09-25 2002-03-26 British Telecommunications Plc Apparatus and method for allocating memory space for program use and management purposes
US6691118B1 (en) * 1997-10-31 2004-02-10 Oracle International Corporation Context management system for modular software architecture
US6490609B1 (en) * 1998-01-09 2002-12-03 Sun Microsystems, Inc. Method, apparatus and computer program product for invoking a thread-unaware routine that uses an operation-dependent temporary data structure
US6701420B1 (en) * 1999-02-01 2004-03-02 Hewlett-Packard Company Memory management system and method for allocating and reusing memory
US6434714B1 (en) 1999-02-04 2002-08-13 Sun Microsystems, Inc. Methods, systems, and articles of manufacture for analyzing performance of application programs
US6341338B1 (en) * 1999-02-04 2002-01-22 Sun Microsystems, Inc. Protocol for coordinating the distribution of shared memory
US6771595B1 (en) * 1999-08-31 2004-08-03 Intel Corporation Apparatus and method for dynamic resource allocation in a network environment
AU2112301A (en) 1999-09-24 2001-04-24 Sun Microsystems, Inc. Mechanism for enabling session information to be shared across multiple processes
US6542920B1 (en) * 1999-09-24 2003-04-01 Sun Microsystems, Inc. Mechanism for implementing multiple thread pools in a computer system to optimize system performance
US6766349B1 (en) 1999-09-24 2004-07-20 Sun Microsystems, Inc. Mechanism for obtaining a thread from, and returning a thread to, a thread pool without attaching and detaching
US6701367B1 (en) 1999-09-24 2004-03-02 Sun Microsystems, Inc. Mechanism for enabling customized session managers to interact with a network server
US6690951B1 (en) * 1999-12-20 2004-02-10 Telefonaktiebolaget Lm Ericsson (Publ) Dynamic size allocation system and method
AU2001236989A1 (en) * 2000-02-16 2001-08-27 Sun Microsystems, Inc. An implementation for nonblocking memory allocation
US7073033B2 (en) * 2000-02-25 2006-07-04 Oracle International Corporation Memory model for a run-time environment
US6539464B1 (en) * 2000-04-08 2003-03-25 Radoslav Nenkov Getov Memory allocator for multithread environment
US6546359B1 (en) 2000-04-24 2003-04-08 Sun Microsystems, Inc. Method and apparatus for multiplexing hardware performance indicators
US6802057B1 (en) 2000-05-03 2004-10-05 Sun Microsystems, Inc. Automatic generation of fortran 90 interfaces to fortran 77 code
US6647546B1 (en) 2000-05-03 2003-11-11 Sun Microsystems, Inc. Avoiding gather and scatter when calling Fortran 77 code from Fortran 90 code
US6427195B1 (en) * 2000-06-13 2002-07-30 Hewlett-Packard Company Thread local cache memory allocator in a multitasking operating system
US7140018B1 (en) 2000-06-20 2006-11-21 International Business Machines Corporation Method of using a distinct flow of computational control as a reusable abstract data object
US6754788B2 (en) * 2001-03-15 2004-06-22 International Business Machines Corporation Apparatus, method and computer program product for privatizing operating system data
US6848033B2 (en) * 2001-06-07 2005-01-25 Hewlett-Packard Development Company, L.P. Method of memory management in a multi-threaded environment and program storage device
US7334228B2 (en) * 2001-07-27 2008-02-19 International Business Machines Corporation Runtime-resource management
US7093097B2 (en) 2001-11-27 2006-08-15 International Business Machines Corporation Dynamic self-tuning memory management method and system
CN1328877C (zh) * 2001-12-03 2007-07-25 中兴通讯股份有限公司 共享线程实现和调度方法
US6941436B2 (en) * 2002-05-09 2005-09-06 International Business Machines Corporation Method and apparatus for managing memory blocks in a logical partitioned data processing system
US7243342B2 (en) * 2002-06-11 2007-07-10 Intel Corporation Methods and apparatus for determining if a user-defined software function is a memory allocation function during compile-time
US20040039884A1 (en) * 2002-08-21 2004-02-26 Qing Li System and method for managing the memory in a computer system
AU2003270288A1 (en) * 2002-09-30 2004-04-23 Theuer Thomas Schobel Method for regulating access to data in at least one data storage device in a system consisting of several individual systems
US20040107227A1 (en) * 2002-12-03 2004-06-03 International Business Machines Corporation Method for efficient implementation of dynamic lock-free data structures with safe memory reclamation
US7222343B2 (en) 2003-01-16 2007-05-22 International Business Machines Corporation Dynamic allocation of computer resources based on thread type
US7233335B2 (en) * 2003-04-21 2007-06-19 Nividia Corporation System and method for reserving and managing memory spaces in a memory resource
US7185167B2 (en) * 2003-06-06 2007-02-27 Microsoft Corporation Heap allocation
US6912482B2 (en) * 2003-09-11 2005-06-28 Veritas Operating Corporation Data storage analysis mechanism
JP2005100262A (ja) * 2003-09-26 2005-04-14 Seiko Epson Corp メモリ管理装置およびメモリ管理プログラム、並びにメモリ管理方法
US7140023B2 (en) * 2003-10-31 2006-11-21 Intel Corporation Symbolic buffer allocation in local cache at a network processing element
US7206890B2 (en) * 2004-05-19 2007-04-17 Sun Microsystems, Inc. System and method for reducing accounting overhead during memory allocation
GB0415850D0 (en) * 2004-07-15 2004-08-18 Imagination Tech Ltd Memory management system
US20060020760A1 (en) * 2004-07-22 2006-01-26 International Business Machines Corporation Method, system, and program for storing sensor data in autonomic systems
JP4144609B2 (ja) * 2004-09-29 2008-09-03 ソニー株式会社 情報処理装置、メモリ領域管理方法、並びにコンピュータ・プログラム
US20060153185A1 (en) * 2004-12-28 2006-07-13 Intel Corporation Method and apparatus for dynamically changing ring size in network processing
US7937709B2 (en) 2004-12-29 2011-05-03 Intel Corporation Synchronizing multiple threads efficiently
US7890738B2 (en) * 2005-01-20 2011-02-15 International Business Machines Corporation Method and logical apparatus for managing processing system resource use for speculative execution
US7680967B2 (en) * 2005-01-27 2010-03-16 Innovasic, Inc. Configurable application specific standard product with configurable I/O
US7823158B2 (en) * 2005-08-18 2010-10-26 International Business Machines Corporation Adaptive scheduling and management of work processing in a target context in resource contention
US9176741B2 (en) * 2005-08-29 2015-11-03 Invention Science Fund I, Llc Method and apparatus for segmented sequential storage
US20160098279A1 (en) * 2005-08-29 2016-04-07 Searete Llc Method and apparatus for segmented sequential storage
US20070229520A1 (en) * 2006-03-31 2007-10-04 Microsoft Corporation Buffered Paint Systems
US20080147915A1 (en) * 2006-09-29 2008-06-19 Alexander Kleymenov Management of memory buffers for computer programs
US7873801B2 (en) * 2007-02-01 2011-01-18 Oracle America, Inc. Partitionable accounting of memory utilization
CA2677131C (en) * 2007-02-06 2014-10-14 Mba Sciences, Inc. A resource tracking method and apparatus
US8839225B2 (en) 2008-01-23 2014-09-16 International Business Machines Corporation Generating and applying patches to a computer program code concurrently with its execution
US8752057B1 (en) * 2008-06-30 2014-06-10 Emc Corporation Techniques for synchronizing processing of at least two code threads
CN101685408B (zh) * 2008-09-24 2013-10-09 国际商业机器公司 多个线程并行访问共享数据结构的方法及装置
US8510710B2 (en) 2008-10-06 2013-08-13 Sap Ag System and method of using pooled thread-local character arrays
US8375175B2 (en) * 2009-12-09 2013-02-12 Oracle America, Inc. Fast and efficient reacquisition of locks for transactional memory systems
US8776061B2 (en) 2010-12-16 2014-07-08 International Business Machines Corporation Real-time distributed monitoring of local and global processor resource allocations and deallocations
US9858241B2 (en) 2013-11-05 2018-01-02 Oracle International Corporation System and method for supporting optimized buffer utilization for packet processing in a networking device
US20130007370A1 (en) * 2011-07-01 2013-01-03 Oracle International Corporation Method and apparatus for minimizing working memory contentions in computing systems
US9292359B2 (en) 2012-07-27 2016-03-22 Intel Corporation System and method for memory management
US9396030B2 (en) * 2013-03-13 2016-07-19 Samsung Electronics Co., Ltd. Quota-based adaptive resource balancing in a scalable heap allocator for multithreaded applications
WO2015069408A1 (en) * 2013-11-05 2015-05-14 Oracle International Corporation System and method for supporting efficient packet processing model and optimized buffer utilization for packet processing in a network environment
US20160179668A1 (en) * 2014-05-28 2016-06-23 Mediatek Inc. Computing system with reduced data exchange overhead and related data exchange method thereof
EP2963558A1 (en) * 2014-06-26 2016-01-06 Wipro Limited Systems and methods for performing memory management in a distributed environment
CN104461915B (zh) * 2014-11-17 2017-06-20 阔地教育科技有限公司 一种在线课堂系统中内存动态分配方法及设备
US9952967B2 (en) 2015-03-10 2018-04-24 Toshiba Memory Corporation Method for controlling nonvolatile memory and storage medium storing program
WO2017011223A1 (en) 2015-07-10 2017-01-19 Rambus, Inc. Thread associated memory allocation and memory architecture aware allocation
US10372488B2 (en) 2016-09-16 2019-08-06 Oracle International Corporation Parallel processing using memory mapping
CN107515788A (zh) * 2017-08-31 2017-12-26 郑州云海信息技术有限公司 一种内存分配的方法及装置
US10380013B2 (en) 2017-12-01 2019-08-13 International Business Machines Corporation Memory management
US10635494B2 (en) 2018-05-08 2020-04-28 Microchip Technology Incorporated Memory pool allocation for a multi-core system
EP3716442A1 (de) * 2019-03-25 2020-09-30 Siemens Aktiengesellschaft Einrichtung, system und verfahren zum betrieb eines elektrischen energieversorgungsnetzes
US20220327063A1 (en) * 2021-04-07 2022-10-13 Nokia Solutions And Networks Oy Virtual memory with dynamic segmentation for multi-tenant fpgas

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4805097A (en) * 1984-08-03 1989-02-14 Motorola Computer Systems, Inc. Memory management unit with dynamic page allocation
US4811216A (en) * 1986-12-22 1989-03-07 American Telephone And Telegraph Company Multiprocessor memory management method
US5339415A (en) * 1990-06-11 1994-08-16 Cray Research, Inc. Dual level scheduling of processes to multiple parallel regions of a multi-threaded program on a tightly coupled multiprocessor computer system
US5434992A (en) * 1992-09-04 1995-07-18 International Business Machines Corporation Method and means for dynamically partitioning cache into a global and data type subcache hierarchy from a real time reference trace
US5684993A (en) * 1993-01-04 1997-11-04 Microsoft Corporation Segregation of thread-specific information from shared task information
JP2570969B2 (ja) * 1993-07-05 1997-01-16 日本電気株式会社 メモリ管理システム及び方法
JPH0784851A (ja) * 1993-09-13 1995-03-31 Toshiba Corp 共有データ管理方法
WO1995012165A1 (en) * 1993-10-22 1995-05-04 Gestalt Technologies, Incorporated Distributed management in a partitioned memory system
US5566321A (en) * 1993-12-13 1996-10-15 Cray Research, Inc. Method of managing distributed memory within a massively parallel processing system
US5557786A (en) * 1994-01-24 1996-09-17 Advanced Computer Applications, Inc. Threaded, height-balanced binary tree data structure
US5727178A (en) * 1995-08-23 1998-03-10 Microsoft Corporation System and method for reducing stack physical memory requirements in a multitasking operating system
US5784697A (en) * 1996-03-27 1998-07-21 International Business Machines Corporation Process assignment by nodal affinity in a myultiprocessor system having non-uniform memory access storage architecture

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100488836B1 (ko) * 2000-06-20 2005-05-11 인터내셔널 비지네스 머신즈 코포레이션 컴퓨터 프로그램 저장 장치 및 병렬 처리 방법
KR100488846B1 (ko) * 2000-06-20 2005-05-11 인터내셔널 비지네스 머신즈 코포레이션 병렬 처리 컴퓨팅 시스템에서의 메모리 할당 방법 및 프로그램 저장 장치
KR100771728B1 (ko) * 2000-12-09 2007-10-30 엘지엔시스(주) 자동은행거래단말기에서의 상호 스레드 통신방법
JP2007531114A (ja) * 2004-03-26 2007-11-01 キョウセラ ワイヤレス コープ. メモリ割り当てのためのフックした複製値を有するバイナリサーチツリー
JP2008525887A (ja) * 2004-12-23 2008-07-17 インテル・コーポレーション スレッドプロセッサにおける多重クライアントへのバッファの動的割り当て
JP4787844B2 (ja) * 2004-12-23 2011-10-05 インテル・コーポレーション スレッドプロセッサにおける多重クライアントへのバッファの動的割り当て
KR100871587B1 (ko) 2007-04-20 2008-12-02 (주)엔텔스 공유 메모리 페이징 기법에 의한 프로세스간 가변 길이데이터 흐름 제어 방법 및 그 장치
JP2015515076A (ja) * 2012-04-27 2015-05-21 マイクロソフト コーポレーション メモリ要素の割当てのために一方向リンク付けリストを区分化するシステム及び方法
US10223253B2 (en) 2012-04-27 2019-03-05 Microsoft Technology Licensing, Llc Allocation systems and method for partitioning lockless list structures
US9448864B2 (en) 2012-08-10 2016-09-20 Hanwha Techwin Co., Ltd. Method and apparatus for processing message between processors

Also Published As

Publication number Publication date
EP0817044A3 (en) 1998-04-15
DE69715532T2 (de) 2003-05-15
EP0817044A2 (en) 1998-01-07
DE69715532D1 (de) 2002-10-24
EP0817044B1 (en) 2002-09-18
US6058460A (en) 2000-05-02

Similar Documents

Publication Publication Date Title
JPH1063568A (ja) マルチスレッド環境におけるメモリの割り当て方法及びシステム
CA2136154C (en) User control of multiple memory heaps
US6065019A (en) Method and apparatus for allocating and freeing storage utilizing multiple tiers of storage organization
US5797004A (en) System and method for caching and allocating thread synchronization constructs
US7194495B2 (en) Non-blocking memory management mechanism for supporting dynamic-sized data structures
US5345588A (en) Thread private memory storage of multi-thread digital data processors using access descriptors for uniquely identifying copies of data created on an as-needed basis
US6134602A (en) Application programming interface enabling application programs to group code and data to control allocation of physical memory in a virtual memory system
US7840773B1 (en) Providing memory management within a system management mode
US6128713A (en) Application programming interface enabling application programs to control allocation of physical memory in a virtual memory system
US6247042B1 (en) Method and system for restoring the state of physical memory as the focus changes among application programs in a computer
US5835958A (en) Method and apparatus for dynamically sizing non-contiguous runtime stacks
US6848033B2 (en) Method of memory management in a multi-threaded environment and program storage device
JPH02201653A (ja) アプリケーシヨン・プログラム・インターフエース方法
US7624246B2 (en) Method and system for memory allocation in a multiprocessing environment
US6842853B1 (en) Thread suspension system and method
JPH1049380A (ja) スペース効率の良いオブジェクト・ロッキング・システム及び方法
JP2000222281A (ja) マルチスレッド仮想マシン内におけるメモリ・アロケ―ションの方法及び装置
JPH08129457A (ja) 外部記憶ストラクチャを拡大、縮小、及び再配分するための方法及び装置
US7035989B1 (en) Adaptive memory allocation
US10929035B2 (en) Memory management via dynamic tiering pools
US7058656B2 (en) System and method of using extensions in a data structure without interfering with applications unaware of the extensions
US6665777B2 (en) Method, apparatus, network, and kit for multiple block sequential memory management
JPH1185545A (ja) 選択的なオブジェクトロッキングによるスレッド同期
US7360213B1 (en) Method for promotion and demotion between system calls and fast kernel calls
WO2001061471A2 (en) An implementation for nonblocking memory allocation

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20040609

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20060802

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20060808

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20061107

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20061110

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20070208

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20070227

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20070228

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20070305

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20071018