JPH1083339A - 標準メモリ・アロケーション・インタフェース用外部識別可能な記述子 - Google Patents
標準メモリ・アロケーション・インタフェース用外部識別可能な記述子Info
- Publication number
- JPH1083339A JPH1083339A JP9163989A JP16398997A JPH1083339A JP H1083339 A JPH1083339 A JP H1083339A JP 9163989 A JP9163989 A JP 9163989A JP 16398997 A JP16398997 A JP 16398997A JP H1083339 A JPH1083339 A JP H1083339A
- Authority
- JP
- Japan
- Prior art keywords
- memory
- memory space
- bucket
- buckets
- pages
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation 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/5016—Allocation 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
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
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 Of A Hierarchy Structure (AREA)
- Memory System (AREA)
Abstract
(57)【要約】
【課題】 本発明は、メモリ空間割付けに関係する情報
を非インベーシブに与える方法を提供する。 【解決手段】 メモリ空間割付け情報は、メモリ空間が
割付けられているプロセスの外側で知られており、ある
いは識別できる位置に維持される。メモリ空間アロケー
タは、この情報を記述子ブロック内に維持する。記述子
ブロックは、メモリ空間の割付けまたは割付け解除ごと
に更新される。メモリ・アロケータは、メモリ・ブロッ
ク内に存在するバケットと呼ばれる単位でメモリ空間を
割付ける。記述子ブロックは、特定のメモリ空間アロケ
ータによって制御される、その記述子ブロックに記憶さ
れているメモリ空間割付け情報を識別する識別子を含
む。記述子ブロックは、いくつのページが使用されてお
り、いくつのページが空いているかを示す情報も含む。
を非インベーシブに与える方法を提供する。 【解決手段】 メモリ空間割付け情報は、メモリ空間が
割付けられているプロセスの外側で知られており、ある
いは識別できる位置に維持される。メモリ空間アロケー
タは、この情報を記述子ブロック内に維持する。記述子
ブロックは、メモリ空間の割付けまたは割付け解除ごと
に更新される。メモリ・アロケータは、メモリ・ブロッ
ク内に存在するバケットと呼ばれる単位でメモリ空間を
割付ける。記述子ブロックは、特定のメモリ空間アロケ
ータによって制御される、その記述子ブロックに記憶さ
れているメモリ空間割付け情報を識別する識別子を含
む。記述子ブロックは、いくつのページが使用されてお
り、いくつのページが空いているかを示す情報も含む。
Description
【0001】
【発明の属する技術分野】本発明は、情報処理方法およ
び装置に関し、詳細にはメモリ・アロケーション・シス
テムに関する。
び装置に関し、詳細にはメモリ・アロケーション・シス
テムに関する。
【0002】
【従来の技術】従来技術では、メモリ・アロケーション
に関係する情報は、アロケータの外部のプロセスによっ
てその情報を調べることができるようには記憶されてい
ない。この情報を調べる能力が望ましいのは、特に長期
間(たとえば、5分以上)にわたって存在するアプリケ
ーションに関してコンピュータ・システムの性能を評価
し最適化する場合、割付け済みのメモリ空間および空き
メモリ空間の全体的な構成を理解することが有用である
からである。デスクトップ・アプリケーションは多くの
場合、月単位で測定される期間にわたって存在する。従
来技術においてメモリが特定のコードにどのように割付
けられているかを調べるには、そのコードを、実行する
前に修正しておく必要がある。したがって、実行される
コードは、メモリ・アロケーションに関係する情報を求
めるコードと同じではない。
に関係する情報は、アロケータの外部のプロセスによっ
てその情報を調べることができるようには記憶されてい
ない。この情報を調べる能力が望ましいのは、特に長期
間(たとえば、5分以上)にわたって存在するアプリケ
ーションに関してコンピュータ・システムの性能を評価
し最適化する場合、割付け済みのメモリ空間および空き
メモリ空間の全体的な構成を理解することが有用である
からである。デスクトップ・アプリケーションは多くの
場合、月単位で測定される期間にわたって存在する。従
来技術においてメモリが特定のコードにどのように割付
けられているかを調べるには、そのコードを、実行する
前に修正しておく必要がある。したがって、実行される
コードは、メモリ・アロケーションに関係する情報を求
めるコードと同じではない。
【0003】コンピュータは情報を処理するために使用
される。コンピュータは、情報を処理するために使用す
べきステップを指定するプログラムを実行する。コンピ
ュータ・オペレーティング・システムは、プログラムの
実行を制御する。いくつかのコンピュータ・オペレーテ
ィング・システムでは、複数のプログラムを並行して実
行することができる。そのようなオペレーティング・シ
ステムでは、複数のプログラムを実行できるようにする
複数のプロセスが確立される。オペレーティング・シス
テムは、プロセッサの処理時間をプロセスに割付ける。
プログラムによって処理されるプログラム情報とデータ
は、コンピュータのメモリ装置に記憶される。プログラ
ムの実行が開始すると、メモリ装置内のメモリ空間が、
対応するプロセスに割付けられる。不適当な量のメモリ
空間がプロセスに割付けられた場合、プロセスは実行時
に致命的な空間不足状態を経験する。プログラムの実行
が終了すると、プロセスに割付けられたメモリ空間が解
放され、メモリ空間を再使用することができる。
される。コンピュータは、情報を処理するために使用す
べきステップを指定するプログラムを実行する。コンピ
ュータ・オペレーティング・システムは、プログラムの
実行を制御する。いくつかのコンピュータ・オペレーテ
ィング・システムでは、複数のプログラムを並行して実
行することができる。そのようなオペレーティング・シ
ステムでは、複数のプログラムを実行できるようにする
複数のプロセスが確立される。オペレーティング・シス
テムは、プロセッサの処理時間をプロセスに割付ける。
プログラムによって処理されるプログラム情報とデータ
は、コンピュータのメモリ装置に記憶される。プログラ
ムの実行が開始すると、メモリ装置内のメモリ空間が、
対応するプロセスに割付けられる。不適当な量のメモリ
空間がプロセスに割付けられた場合、プロセスは実行時
に致命的な空間不足状態を経験する。プログラムの実行
が終了すると、プロセスに割付けられたメモリ空間が解
放され、メモリ空間を再使用することができる。
【0004】プロセスにメモリ空間に割付け、プロセス
がもはやメモリ空間を必要としなくなった後にメモリ空
間を解放または割付け解除する技法が必要である。従
来、Cプログラミング言語では、メモリ空間を割付け、
解放するために標準化されたCライブラリ・ルーチンが
与えられていた。メモリ空間を割付けるための標準Cラ
イブラリ・ルーチンを「malloc」関数と呼ぶ。メ
モリ空間を解放するための標準Cライブラリ・ルーチン
を「free」関数と呼ぶ。
がもはやメモリ空間を必要としなくなった後にメモリ空
間を解放または割付け解除する技法が必要である。従
来、Cプログラミング言語では、メモリ空間を割付け、
解放するために標準化されたCライブラリ・ルーチンが
与えられていた。メモリ空間を割付けるための標準Cラ
イブラリ・ルーチンを「malloc」関数と呼ぶ。メ
モリ空間を解放するための標準Cライブラリ・ルーチン
を「free」関数と呼ぶ。
【0005】「malloc」関数は、割付けるべきメ
モリ・ブロックのサイズを指定するパラメータを用いて
実行される。「malloc」関数は、適当なサイズの
メモリ空間のブロックを見つけ、メモリ・ブロックの始
めを指し示すポインタを返す。
モリ・ブロックのサイズを指定するパラメータを用いて
実行される。「malloc」関数は、適当なサイズの
メモリ空間のブロックを見つけ、メモリ・ブロックの始
めを指し示すポインタを返す。
【0006】「free」関数は、前に「mallo
c」関数によって割付けられたメモリ・ブロックを指し
示すポインタを指定するパラメータを用いて実行され
る。「free」関数は、同じプロセスによって再び使
用すべき指定されたメモリ・ブロックを解放する。
c」関数によって割付けられたメモリ・ブロックを指し
示すポインタを指定するパラメータを用いて実行され
る。「free」関数は、同じプロセスによって再び使
用すべき指定されたメモリ・ブロックを解放する。
【0007】「malloc」関数は、サイズに応じて
複数の空きブロック・リストを維持し、適当なリストか
ら空間を割付ける。「malloc」は、十分なサイズ
の未割付けメモリ・ブロックを見つけることができない
場合、「sbrk」関数を呼び出し、オペレーティング
・システムに、割付けを行うことのできるメモリ空間を
さらに与えさせる。
複数の空きブロック・リストを維持し、適当なリストか
ら空間を割付ける。「malloc」は、十分なサイズ
の未割付けメモリ・ブロックを見つけることができない
場合、「sbrk」関数を呼び出し、オペレーティング
・システムに、割付けを行うことのできるメモリ空間を
さらに与えさせる。
【0008】割付け済みのメモリ・ブロックのサイズを
変更する必要がある場合は、「realloc」関数を
呼び出すことができる。「realloc」関数は、割
付け済みのメモリ・ブロックを指し示すポインタを指定
するパラメータと、そのメモリ・ブロックに必要な新し
いサイズを指定するパラメータを用いて実行される。
「realloc」関数は、十分なサイズのメモリ・ブ
ロックを割付け、新しいメモリ・ブロックを指し示すポ
インタを返す。ポインタは、「realloc」関数の
呼出し時に存在していたメモリ・ブロックと同じ開始位
置を有するメモリ・ブロックを指し示し、あるいは前に
割付けられたメモリ・ブロックに不適当なメモリ空間が
存在していた場合には、異なる開始位置を有するメモリ
・ブロックを指し示し、そのメモリ・ブロックに連続す
るメモリ空間を解放する。
変更する必要がある場合は、「realloc」関数を
呼び出すことができる。「realloc」関数は、割
付け済みのメモリ・ブロックを指し示すポインタを指定
するパラメータと、そのメモリ・ブロックに必要な新し
いサイズを指定するパラメータを用いて実行される。
「realloc」関数は、十分なサイズのメモリ・ブ
ロックを割付け、新しいメモリ・ブロックを指し示すポ
インタを返す。ポインタは、「realloc」関数の
呼出し時に存在していたメモリ・ブロックと同じ開始位
置を有するメモリ・ブロックを指し示し、あるいは前に
割付けられたメモリ・ブロックに不適当なメモリ空間が
存在していた場合には、異なる開始位置を有するメモリ
・ブロックを指し示し、そのメモリ・ブロックに連続す
るメモリ空間を解放する。
【0009】「malloc」関数および「free」
関数は、メモリのブロックを得て解放するうえで妥当な
ものであるが、空きメモリ空間と割付け済みメモリ空間
の現在の状況を調べる能力は備えていない。この能力が
望ましいのは、特に存在期間の長いプロセスにおいてコ
ンピュータ・システムの性能を評価し最適化する場合
に、割付け済みメモリ空間および空きメモリ空間の全体
的な構成を理解することが有用であるからである。特
に、プロセスを指定することができ、プロセスに割付け
られているメモリ空間のブロックと、コンピュータ・シ
ステムのメモリ空間全体におけるブロックの位置を示す
情報が与えられると有用である。
関数は、メモリのブロックを得て解放するうえで妥当な
ものであるが、空きメモリ空間と割付け済みメモリ空間
の現在の状況を調べる能力は備えていない。この能力が
望ましいのは、特に存在期間の長いプロセスにおいてコ
ンピュータ・システムの性能を評価し最適化する場合
に、割付け済みメモリ空間および空きメモリ空間の全体
的な構成を理解することが有用であるからである。特
に、プロセスを指定することができ、プロセスに割付け
られているメモリ空間のブロックと、コンピュータ・シ
ステムのメモリ空間全体におけるブロックの位置を示す
情報が与えられると有用である。
【0010】従来、プログラムは、「mallinf
o」関数の呼出しを含めるように書き直すことができ
た。「mallinfo」関数は、メモリ空間割付けを
記述する情報を与える。「mallinfo」関数から
与えられる通常の情報には、アリーナ内の総空間、通常
のブロックの数、小型ブロックの数、保持ブロックの
数、保持ブロック・ヘッダ内の空間、使用中の小型ブロ
ック内の空間、空き小型ブロック内の空間、使用中の通
常のブロック内の空間、通常の空きブロック内の空間、
キープ・オプションをイネーブルするコスト、小型ブロ
ックの最大サイズ、保持ブロック内の小型ブロックの
数、小型ブロック丸め係数、通常のブロックに割付けら
れている空間(オーバヘッドを含む)、割付け済みの通
常のブロックの数、自由木を維持する際に使用されるバ
イトの数が含まれる。この情報を使用して性能を分析す
る間、分析中のプログラムに「mallinfo」関数
を追加しなければならない。したがって、「malli
nfo」関数を使用することはインベーシブ手続き(in
vasive procedure)であり、この場合、プログラムが使
用される形態でプログラムを分析することはできない。
o」関数の呼出しを含めるように書き直すことができ
た。「mallinfo」関数は、メモリ空間割付けを
記述する情報を与える。「mallinfo」関数から
与えられる通常の情報には、アリーナ内の総空間、通常
のブロックの数、小型ブロックの数、保持ブロックの
数、保持ブロック・ヘッダ内の空間、使用中の小型ブロ
ック内の空間、空き小型ブロック内の空間、使用中の通
常のブロック内の空間、通常の空きブロック内の空間、
キープ・オプションをイネーブルするコスト、小型ブロ
ックの最大サイズ、保持ブロック内の小型ブロックの
数、小型ブロック丸め係数、通常のブロックに割付けら
れている空間(オーバヘッドを含む)、割付け済みの通
常のブロックの数、自由木を維持する際に使用されるバ
イトの数が含まれる。この情報を使用して性能を分析す
る間、分析中のプログラムに「mallinfo」関数
を追加しなければならない。したがって、「malli
nfo」関数を使用することはインベーシブ手続き(in
vasive procedure)であり、この場合、プログラムが使
用される形態でプログラムを分析することはできない。
【0011】「mallinfo」関数を含めると、コ
ードの複雑さが増し、開発コストおよび維持コストが増
大する。さらに、「mallinfo」関数を含むプロ
セスに関連するメモリ空間割付け情報は、「malli
nfo」関数を含めることによってゆがむ恐れがある。
すなわち、「mallinfo」関数は、メモリ・アロ
ケーション情報を変更する恐れがある。この変更のため
に、アプリケーション開発者がメモリ・アロケーション
評価を行うことが困難になることがある。
ードの複雑さが増し、開発コストおよび維持コストが増
大する。さらに、「mallinfo」関数を含むプロ
セスに関連するメモリ空間割付け情報は、「malli
nfo」関数を含めることによってゆがむ恐れがある。
すなわち、「mallinfo」関数は、メモリ・アロ
ケーション情報を変更する恐れがある。この変更のため
に、アプリケーション開発者がメモリ・アロケーション
評価を行うことが困難になることがある。
【0012】
【発明が解決しようとする課題】「mallinfo」
機能を含まないプロセス実行コードにこの機能を含める
には、プロセスを終了し、「mallinfo」関数の
呼出しを含む新しいプロセス実行コードを開始する必要
がある。したがって、すでに実行されているコードにこ
の機能を追加することは厄介である。
機能を含まないプロセス実行コードにこの機能を含める
には、プロセスを終了し、「mallinfo」関数の
呼出しを含む新しいプロセス実行コードを開始する必要
がある。したがって、すでに実行されているコードにこ
の機能を追加することは厄介である。
【0013】
【課題を解決するための手段】本発明は、メモリ空間割
付けに関係する情報を非インベーシブに与える方法およ
び装置を提供する。本発明では、メモリ空間が割付けら
れるプロセスのコードを修正する必要なしに、メモリ空
間アロケータの外部のプロセスによってメモリ空間割付
けを調べることができる。
付けに関係する情報を非インベーシブに与える方法およ
び装置を提供する。本発明では、メモリ空間が割付けら
れるプロセスのコードを修正する必要なしに、メモリ空
間アロケータの外部のプロセスによってメモリ空間割付
けを調べることができる。
【0014】本発明の実施態様は、メモリ空間アリーナ
を保存するステップと、メモリ・アロケーション情報を
記憶すべきデータ構造を定めるステップと、メモリ・ア
ロケーション情報を記憶するステップとを含む、メモリ
・アロケーション情報を維持する方法および装置を提供
する。
を保存するステップと、メモリ・アロケーション情報を
記憶すべきデータ構造を定めるステップと、メモリ・ア
ロケーション情報を記憶するステップとを含む、メモリ
・アロケーション情報を維持する方法および装置を提供
する。
【0015】メモリ・アロケーション情報は、メモリ空
間アリーナ内で具体化されている第1のバケット・サイ
ズのある量のページを表す第1の値を含む。メモリ・ア
ロケーション情報は、メモリ空間アリーナ内で具体化さ
れている第1のバケット・サイズのある量のページのう
ちの1つのページ内の割付け済みのある量のバケットを
表す第2の値も含む。メモリ・アロケーション情報はさ
らに、メモリ空間アリーナ内で具体化されている第1の
バケット・サイズのある量のページのうちの1つのペー
ジ内の未割付けバケットを識別する連結リストを指し示
すポインタを含む。
間アリーナ内で具体化されている第1のバケット・サイ
ズのある量のページを表す第1の値を含む。メモリ・ア
ロケーション情報は、メモリ空間アリーナ内で具体化さ
れている第1のバケット・サイズのある量のページのう
ちの1つのページ内の割付け済みのある量のバケットを
表す第2の値も含む。メモリ・アロケーション情報はさ
らに、メモリ空間アリーナ内で具体化されている第1の
バケット・サイズのある量のページのうちの1つのペー
ジ内の未割付けバケットを識別する連結リストを指し示
すポインタを含む。
【0016】本発明の一実施形態は、メモリ・アロケー
ションが変更されたときにメモリ・アロケーション情報
を修正する方法および装置も提供する。本発明では、メ
モリを割付けるときおよび解放するときにメモリ・アロ
ケーション情報を適切に修正することができる。
ションが変更されたときにメモリ・アロケーション情報
を修正する方法および装置も提供する。本発明では、メ
モリを割付けるときおよび解放するときにメモリ・アロ
ケーション情報を適切に修正することができる。
【0017】本発明の実施態様は、データ構造にデータ
構造識別子を記憶することによってデータ構造を識別す
る方法および装置を提供する。データ構造識別子は、デ
ータ構造内の既知のメモリ位置あるいは容易に識別され
るメモリ位置に記憶される既知の値あるいは容易に識別
される値であることが好ましい。データ構造識別子が記
憶されるメモリ位置は、意図的に外部プログラムに知ら
され、それによって外部プログラムは、どこでデータ構
造識別子を探すべきかを知り、データ構造を識別するに
はそのメモリ位置で何を探すべきかを知ることができ
る。
構造識別子を記憶することによってデータ構造を識別す
る方法および装置を提供する。データ構造識別子は、デ
ータ構造内の既知のメモリ位置あるいは容易に識別され
るメモリ位置に記憶される既知の値あるいは容易に識別
される値であることが好ましい。データ構造識別子が記
憶されるメモリ位置は、意図的に外部プログラムに知ら
され、それによって外部プログラムは、どこでデータ構
造識別子を探すべきかを知り、データ構造を識別するに
はそのメモリ位置で何を探すべきかを知ることができ
る。
【0018】
【発明の実施の形態】コンピュータ・システムにおいて
メモリを割付け、メモリ・アロケーションに関係する情
報を与える方法および装置について説明する。下記の説
明では、本発明を完全に理解していただくためにバケッ
ト・サイズ、ページ・サイズ、記述子ブロック・フォー
マット、コンピューティング環境など多数の特定の詳細
について述べる。しかし、当業者には、これらの特定の
詳細なしで本発明を実施できることが明らかになろう。
他の例では、本発明を不要に曖昧にしないように周知の
特徴については詳しく説明しない。
メモリを割付け、メモリ・アロケーションに関係する情
報を与える方法および装置について説明する。下記の説
明では、本発明を完全に理解していただくためにバケッ
ト・サイズ、ページ・サイズ、記述子ブロック・フォー
マット、コンピューティング環境など多数の特定の詳細
について述べる。しかし、当業者には、これらの特定の
詳細なしで本発明を実施できることが明らかになろう。
他の例では、本発明を不要に曖昧にしないように周知の
特徴については詳しく説明しない。
【0019】従来技術では、メモリ・アロケーションに
関係する情報は、アロケータの外部のプロセスによって
調べることができるようには記憶されない。メモリが特
定のコードにどのように割付けられているかを調べるに
は、そのコードを実行時に修正する必要がある。したが
って、実行されるコードは、メモリ・アロケーションに
関係する情報が求められるコードと同じではない。
関係する情報は、アロケータの外部のプロセスによって
調べることができるようには記憶されない。メモリが特
定のコードにどのように割付けられているかを調べるに
は、そのコードを実行時に修正する必要がある。したが
って、実行されるコードは、メモリ・アロケーションに
関係する情報が求められるコードと同じではない。
【0020】外部プロセスが容易にかつ非インベーシブ
に得ることができるメモリ・アロケーションに関係する
情報を与えることによって従来技術の問題を回避する。
本発明を使用して、いかなる方法でも変更されていない
コードに割付けられているメモリを調べることができ
る。したがって、本発明は、メモリ・アロケーションの
分析を実行する前に、長い期間、場合によっては数週間
または数カ月にわたって実行されているプロセスでのメ
モリ使用状況を分析するという有用な目的を果たす。
に得ることができるメモリ・アロケーションに関係する
情報を与えることによって従来技術の問題を回避する。
本発明を使用して、いかなる方法でも変更されていない
コードに割付けられているメモリを調べることができ
る。したがって、本発明は、メモリ・アロケーションの
分析を実行する前に、長い期間、場合によっては数週間
または数カ月にわたって実行されているプロセスでのメ
モリ使用状況を分析するという有用な目的を果たす。
【0021】本発明は、メモリ空間割付けに関係する情
報を非インベーシブに与える方法および装置を提供す
る。本発明は、メモリ空間割付けに関係する情報が与え
られるようにプログラムを修正することを不要にする。
したがって、本発明では、所与のプログラムが使用され
る形態でプログラムを使用して、プログラムに関するメ
モリ空間割付けを分析することができる。本発明は、プ
ログラムを実行するためのプロセスを変更することも不
要にする。
報を非インベーシブに与える方法および装置を提供す
る。本発明は、メモリ空間割付けに関係する情報が与え
られるようにプログラムを修正することを不要にする。
したがって、本発明では、所与のプログラムが使用され
る形態でプログラムを使用して、プログラムに関するメ
モリ空間割付けを分析することができる。本発明は、プ
ログラムを実行するためのプロセスを変更することも不
要にする。
【0022】本発明の一つの実施形態は、メモリ空間が
割付けられているプロセスの外部で知られておりあるい
は識別できる位置に、メモリ空間割付けに関係する情報
を維持することによって、そのような情報を与える。メ
モリ空間アロケータは、データ構造内に情報を維持し、
メモリ空間のあらゆる割付けまたは割付け解除を用いて
データ構造を更新する。したがって、メモリ空間アロケ
ータは、データ構造内の情報が確実にメモリ空間の現在
の状況を表すようにする。
割付けられているプロセスの外部で知られておりあるい
は識別できる位置に、メモリ空間割付けに関係する情報
を維持することによって、そのような情報を与える。メ
モリ空間アロケータは、データ構造内に情報を維持し、
メモリ空間のあらゆる割付けまたは割付け解除を用いて
データ構造を更新する。したがって、メモリ空間アロケ
ータは、データ構造内の情報が確実にメモリ空間の現在
の状況を表すようにする。
【0023】本発明の好ましい実施形態では、メモリ空
間アロケータによって維持されるメモリ空間割付け情報
を含むデータ構造は、記述子ブロックと呼ばれるメモリ
のページに存在する。メモリ空間アロケータは、アリー
ナと呼ばれるメモリの領域を制御することができる。プ
ロセスは、オペレーティング・システム・カーネルが、
メモリ空間アロケータに専用させるためにアリーナによ
って占有されているメモリ領域を予約することを要求
し、他のプロセスがこのメモリ・アリーナを使用または
修正することを妨げる。
間アロケータによって維持されるメモリ空間割付け情報
を含むデータ構造は、記述子ブロックと呼ばれるメモリ
のページに存在する。メモリ空間アロケータは、アリー
ナと呼ばれるメモリの領域を制御することができる。プ
ロセスは、オペレーティング・システム・カーネルが、
メモリ空間アロケータに専用させるためにアリーナによ
って占有されているメモリ領域を予約することを要求
し、他のプロセスがこのメモリ・アリーナを使用または
修正することを妨げる。
【0024】バケットとは、メモリ・アロケータによっ
て割付けることができるメモリ空間の単位である。バケ
ットは、たとえば、小型バケット、中型バケット、大型
バケット、超大型バケットなど様々なタイプのものでよ
い。小型バケットは、割付けることのできる8バイトの
情報を与える。中型バケットは、割付けることのできる
16バイトの情報を与える。大型バケットは、割付ける
ことのできる24バイトの情報を与える。超大型バケッ
トは、割付けることのできる32バイトの情報を与え
る。これらのバケット・サイズは一例として与えたもの
であり、本発明によれば他のバケット・サイズおよびい
くつかの異なるバケット・サイズが可能であることを理
解されたい。記述子ブロックは、特定のメモリ空間アロ
ケータによって制御される、その記述子ブロックに記憶
されているメモリ空間割付け情報を識別する識別子を含
む。記述子ブロックは、いくつのバケットが使用される
か、いくつのバケットが空いているか、現在どのくらい
の量のメモリ空間が連続ブロックとして使用できるかを
示す情報も含む。
て割付けることができるメモリ空間の単位である。バケ
ットは、たとえば、小型バケット、中型バケット、大型
バケット、超大型バケットなど様々なタイプのものでよ
い。小型バケットは、割付けることのできる8バイトの
情報を与える。中型バケットは、割付けることのできる
16バイトの情報を与える。大型バケットは、割付ける
ことのできる24バイトの情報を与える。超大型バケッ
トは、割付けることのできる32バイトの情報を与え
る。これらのバケット・サイズは一例として与えたもの
であり、本発明によれば他のバケット・サイズおよびい
くつかの異なるバケット・サイズが可能であることを理
解されたい。記述子ブロックは、特定のメモリ空間アロ
ケータによって制御される、その記述子ブロックに記憶
されているメモリ空間割付け情報を識別する識別子を含
む。記述子ブロックは、いくつのバケットが使用される
か、いくつのバケットが空いているか、現在どのくらい
の量のメモリ空間が連続ブロックとして使用できるかを
示す情報も含む。
【0025】外部ユーティリティ・プログラムは、記述
子ブロックに記憶されている情報を読み取ることによっ
てメモリ空間割付け情報を決定することができる。メモ
リ空間アリーナの位置はオペレーティング・システム・
カーネルによって知られているので、外部ユーティリテ
ィ・プログラムは、記述子ブロックに記憶されている識
別子を探すことによって容易に記述子を見つけ、メモリ
空間アロケータの動作にも、あるいはメモリ空間アロケ
ータによってメモリ空間が割付けられているプロセスに
も干渉する必要なしに記述子ブロックを読み取ることが
できる。したがって、本発明は従来技術の欠点を解消す
る。
子ブロックに記憶されている情報を読み取ることによっ
てメモリ空間割付け情報を決定することができる。メモ
リ空間アリーナの位置はオペレーティング・システム・
カーネルによって知られているので、外部ユーティリテ
ィ・プログラムは、記述子ブロックに記憶されている識
別子を探すことによって容易に記述子を見つけ、メモリ
空間アロケータの動作にも、あるいはメモリ空間アロケ
ータによってメモリ空間が割付けられているプロセスに
も干渉する必要なしに記述子ブロックを読み取ることが
できる。したがって、本発明は従来技術の欠点を解消す
る。
【0026】図1は、本発明の一実施形態によるメモリ
空間アリーナの例を示す図である。メモリ空間アリーナ
は、メモリ・アロケータが使用できるようにオペレーテ
ィング・システムによって予約されたメモリ空間を含
む。オペレーティング・システムは、メモリ・アロケー
タがメモリ空間アリーナを使用できるようにし、同時に
他のプロセスがメモリ空間領域に干渉するのを禁止す
る。
空間アリーナの例を示す図である。メモリ空間アリーナ
は、メモリ・アロケータが使用できるようにオペレーテ
ィング・システムによって予約されたメモリ空間を含
む。オペレーティング・システムは、メモリ・アロケー
タがメモリ空間アリーナを使用できるようにし、同時に
他のプロセスがメモリ空間領域に干渉するのを禁止す
る。
【0027】メモリ空間アリーナは、記述子ブロック1
01といくつかのメモリ・ブロックとを含む。各メモリ
・ブロックは、いくつかのメモリ・ページを含む。一例
を挙げると、メモリ・ページは4096バイトを含むこ
とができる。各メモリ・ページはいくつかのバケットを
含む。バケットは、割付けることのできるメモリ空間単
位からなる。
01といくつかのメモリ・ブロックとを含む。各メモリ
・ブロックは、いくつかのメモリ・ページを含む。一例
を挙げると、メモリ・ページは4096バイトを含むこ
とができる。各メモリ・ページはいくつかのバケットを
含む。バケットは、割付けることのできるメモリ空間単
位からなる。
【0028】メモリ・ブロックは、そこに含まれるバケ
ットのサイズが互いに異なる。たとえば、メモリ・ブロ
ック102は、各バケットのサイズが好ましくは32バ
イトの超大型バケットを有する。メモリ・ブロック10
3は、各バケットのサイズが好ましくは24バイトの大
型バケットを有する。メモリ・ブロック104は、各バ
ケットのサイズが好ましくは16バイトの中型バケット
を有する。メモリ・ブロック105は、各バケットのサ
イズが好ましくは8バイトの小型バケットを有する。メ
モリ・アロケータは、それがメモリ空間を割付ける各プ
ロセスに対して、事前に経験的に求められた最適なバケ
ット・サイズを選択する。
ットのサイズが互いに異なる。たとえば、メモリ・ブロ
ック102は、各バケットのサイズが好ましくは32バ
イトの超大型バケットを有する。メモリ・ブロック10
3は、各バケットのサイズが好ましくは24バイトの大
型バケットを有する。メモリ・ブロック104は、各バ
ケットのサイズが好ましくは16バイトの中型バケット
を有する。メモリ・ブロック105は、各バケットのサ
イズが好ましくは8バイトの小型バケットを有する。メ
モリ・アロケータは、それがメモリ空間を割付ける各プ
ロセスに対して、事前に経験的に求められた最適なバケ
ット・サイズを選択する。
【0029】記述子ブロック101は、単一のページに
含まれ、メモリ・アロケーション情報を含むことが好ま
しい。本発明の好ましい実施形態では、記述子ブロック
101は、それが動作しているマシンのネイティブ・ペ
ージ・サイズに等しいサイズを有するメモリのページ上
に存在する。たとえば、記述子ブロック101のサイズ
は、ネイティブ・ページ・サイズが4096バイトであ
るマシン上では4096バイトであることが好ましい。
メモリ・アロケーション情報には、メモリ空間アリーナ
内に定義されたそれぞれの異なるタイプのメモリ・ブロ
ックの数、各メモリ・ブロック内のバケットのサイズ、
各メモリ・ブロック内で具体化されているメモリ・ペー
ジの数に関する情報が含まれる。この情報は、メモリ位
置107に記憶することが好ましい。メモリ位置107
は、記述子ブロック101内の任意の位置に配置するこ
とができる。
含まれ、メモリ・アロケーション情報を含むことが好ま
しい。本発明の好ましい実施形態では、記述子ブロック
101は、それが動作しているマシンのネイティブ・ペ
ージ・サイズに等しいサイズを有するメモリのページ上
に存在する。たとえば、記述子ブロック101のサイズ
は、ネイティブ・ページ・サイズが4096バイトであ
るマシン上では4096バイトであることが好ましい。
メモリ・アロケーション情報には、メモリ空間アリーナ
内に定義されたそれぞれの異なるタイプのメモリ・ブロ
ックの数、各メモリ・ブロック内のバケットのサイズ、
各メモリ・ブロック内で具体化されているメモリ・ペー
ジの数に関する情報が含まれる。この情報は、メモリ位
置107に記憶することが好ましい。メモリ位置107
は、記述子ブロック101内の任意の位置に配置するこ
とができる。
【0030】メモリ・ページを具体化するときは、バッ
クアップ記憶機能を有する仮想メモリ・システム内のペ
ージとしてこのメモリ・ページをマップし、システムが
このメモリ・ページをシステム・メモリとの間でスワッ
プできるようにすることが好ましい。メモリ・ページ
は、システム・メモリからスワップアウトされるときに
は大容量記憶装置上に記憶される。メモリ・ページは、
システム・メモリ内にスワップされるときにはシステム
・ランダム・アクセス・メモリに記憶される。
クアップ記憶機能を有する仮想メモリ・システム内のペ
ージとしてこのメモリ・ページをマップし、システムが
このメモリ・ページをシステム・メモリとの間でスワッ
プできるようにすることが好ましい。メモリ・ページ
は、システム・メモリからスワップアウトされるときに
は大容量記憶装置上に記憶される。メモリ・ページは、
システム・メモリ内にスワップされるときにはシステム
・ランダム・アクセス・メモリに記憶される。
【0031】記述子ブロック101に含まれるメモリ・
アロケーション情報には、各メモリ・ブロック内の各メ
モリ・ページごとに、メモリ・アロケータによっていく
つのバケットが割付け済みであるかと、メモリ・アロケ
ータによって割付けることのできるバケットがいくつ残
っているかを示す情報も含まれる。前者の情報を各メモ
リ・ページごとの割付けられたバケット・カウントと呼
び、後者の情報を各メモリ・ページごとの空きバケット
・カウントと呼ぶ。
アロケーション情報には、各メモリ・ブロック内の各メ
モリ・ページごとに、メモリ・アロケータによっていく
つのバケットが割付け済みであるかと、メモリ・アロケ
ータによって割付けることのできるバケットがいくつ残
っているかを示す情報も含まれる。前者の情報を各メモ
リ・ページごとの割付けられたバケット・カウントと呼
び、後者の情報を各メモリ・ページごとの空きバケット
・カウントと呼ぶ。
【0032】記述子ブロック101に含まれるメモリ・
アロケーション情報には、各メモリ・ブロック内の各メ
モリ・ページごとに、メモリ・ページ内の空きバケット
を識別する連結リストのヘッドを指し示すポインタも含
まれる。空きバケットは、メモリ・アロケータによって
割付けられていないメモリ・ページ内の割付け可能なメ
モリ単位である。リンク・データは各割付け可能バケッ
ト内に記憶される。
アロケーション情報には、各メモリ・ブロック内の各メ
モリ・ページごとに、メモリ・ページ内の空きバケット
を識別する連結リストのヘッドを指し示すポインタも含
まれる。空きバケットは、メモリ・アロケータによって
割付けられていないメモリ・ページ内の割付け可能なメ
モリ単位である。リンク・データは各割付け可能バケッ
ト内に記憶される。
【0033】メモリ位置108および109は、所与の
メモリ・ページ、たとえばメモリ・ブロック102内の
メモリ・ページ112に関するバケット・カウントと連
結リスト・ポインタの対の例を示す。割付け済みバケッ
ト・カウントまたは空きバケット・カウント、あるいは
その両方はメモリ位置108に記憶される。空きバケッ
トの連結リストを指し示すポインタはメモリ位置109
に記憶される。
メモリ・ページ、たとえばメモリ・ブロック102内の
メモリ・ページ112に関するバケット・カウントと連
結リスト・ポインタの対の例を示す。割付け済みバケッ
ト・カウントまたは空きバケット・カウント、あるいは
その両方はメモリ位置108に記憶される。空きバケッ
トの連結リストを指し示すポインタはメモリ位置109
に記憶される。
【0034】メモリ位置110および111は、他のメ
モリ・ページ、たとえばメモリ・ブロック102内のメ
モリ・ページ113に関するバケット・カウントと連結
リスト・ポインタとの対の例を示す。割付け済みバケッ
ト・カウントまたは空きバケット・カウント、あるいは
その両方はメモリ位置110に記憶される。空きバケッ
トの連結リストを指し示すポインタはメモリ位置111
に記憶される。
モリ・ページ、たとえばメモリ・ブロック102内のメ
モリ・ページ113に関するバケット・カウントと連結
リスト・ポインタとの対の例を示す。割付け済みバケッ
ト・カウントまたは空きバケット・カウント、あるいは
その両方はメモリ位置110に記憶される。空きバケッ
トの連結リストを指し示すポインタはメモリ位置111
に記憶される。
【0035】そのようなバケット・カウントと連結リス
ト・ポインタとの対は、メモリ空間アリーナ内の各メモ
リ・ブロック内の各メモリ・ページごとの記述子ブロッ
ク101に存在する。たとえば、他のバケット・カウン
トと連結リスト・ポインタとの対は、メモリ・ブロック
103内のメモリ・ページ114および115、メモリ
・ブロック104内のメモリ・ページ116および11
7、メモリ・ブロック105内のメモリ・ページ118
および119の記述子ブロック101に存在する。
ト・ポインタとの対は、メモリ空間アリーナ内の各メモ
リ・ブロック内の各メモリ・ページごとの記述子ブロッ
ク101に存在する。たとえば、他のバケット・カウン
トと連結リスト・ポインタとの対は、メモリ・ブロック
103内のメモリ・ページ114および115、メモリ
・ブロック104内のメモリ・ページ116および11
7、メモリ・ブロック105内のメモリ・ページ118
および119の記述子ブロック101に存在する。
【0036】記述子ブロック101は、データ構造識別
子106も含む。データ構造識別子106は、記述子ブ
ロック101内の既知の位置または容易に識別される位
置に記憶されている既知の値またはパターンあるいは容
易に識別できる値またはパターンを含む。データ構造識
別子は、メモリ空間アリーナ、特に記述子ブロックを見
つけるのを助ける。データ構造識別子によって、メモリ
・アロケータの外部のプロセスは、各メモリ・ページ上
の指定された位置に、指定された値またはパターンが存
在するかどうかを検査することによってメモリ空間を探
索し、記述子ブロックを見つける。
子106も含む。データ構造識別子106は、記述子ブ
ロック101内の既知の位置または容易に識別される位
置に記憶されている既知の値またはパターンあるいは容
易に識別できる値またはパターンを含む。データ構造識
別子は、メモリ空間アリーナ、特に記述子ブロックを見
つけるのを助ける。データ構造識別子によって、メモリ
・アロケータの外部のプロセスは、各メモリ・ページ上
の指定された位置に、指定された値またはパターンが存
在するかどうかを検査することによってメモリ空間を探
索し、記述子ブロックを見つける。
【0037】 表1 #ifndef_FLYWEIGHT_ALLOCATOR_H #define_FLYWEIGHT_ALLOCATOR_H #pragma ident "@(#)flyalloch.h 1.5 95/12/21 SMI" /* フライウエイト・アロケータは、CDEがメモリを使用する方法に対して適応化さ れたmalloc/realloc/freeインタプリタである。CDEは、非常に多数の非常に小型 のブロックを割付ける傾向がある。この大部分は32バイト以下である。 */ /*名前「flyalloc」の16進表現8^|は、セグメントの生データのダンプにおいて 、最初の8バイトとしての「flyalloc」が容易に識別できるという利点を有する 。*/ enum{ FLYMAGICI=0x666c7961, FLYMAGIC2=0x6c6c6f63 }; /*ヘッダ情報に関するページ単位のアリーナ・サイズ+1*/ enum{NBLOCK=400+1}; /*バケット・サイズの数*/ enum{NSIZES=4}; enum{ HGEBUCKETSIZE=32,/*均等にBLOCKSIZEとして分割する。*/ LRGBUCKETSIZE=24,/*末尾の無用な小ビット*/ MEDBUCKETSIZE=16,/*均等にBLOCKSIZEとして分割する。*/ WEEBUCKETSIZE=8 /*均等にBLOCKSIZEとして分割する。*/ }; enum{ HGEBUCKET, LRGBUCKET, MEDBUCKET, WEEBUCKET }; typedef struct_BucketRec* BucketListPtr;/*自由木に使用される。*/ struct_BucketRec{ struct_BucketRec* next; }; /*物理ページが割付けられていない場合にpage[n].countにセットされるフラグ */ typedef struct{ BucketListPtr freelist; /*第1の空きスロット*/ unsigned short count; /*空きスロットの数*/ }PageDescriptor; typedef struct_BucketDescriptorRec BucketDescriptor; struct_BucketDescriptorRec{ unsigned char* endAddress; unsigned char* startAddress; unsigned char* nextblock; PageDescriptor* hotpage; unsigned short bucketsize; /*外部クライアントによって使用される事前に算出された値*/ unsigned short offset;/*PageDescriptor開始インデックス*/ unsigned short count; /*このバケット・サイズでのページの数*/ }; /*すべてのマッピングおよびページ情報が追跡されるメイン・ブロック。この ブロックは、割付け統計上で報告するために外部エージェントによって識別し読 み取ることができるものとする。 /* typedef struct{ unsigned int magic1; /*自分を識別*/ unsigned int magic2; unsigned short pagesize; /*これは必要、ULTRASparcは8kを使用する。* / /*バケット情報。外部リーダに有用なのはカウント値、オフセット値、バケ ット・サイズ値だけである。 */ BucketDescriptor bukets[NSIZES]; /*バケット・サイズをそれに対応するBucketDescriptorにマップする迅速な 方法として使用される。順序付けは、init_bucket_descriptors()の初期設定シ ーケンスに依存する。 */ BucketDescriptor* bucket_map[HGEBUCKETSIZE+1]; PageDescriptor pages[NBLOCKS-1]; /*実際のページ・ハンドル*/ }ArenaDescriptor; #endif /*_FLYWEIGHT_ALLOCATOR_H*/
【0038】表1は、本発明を実施する一実施形態の例
としてCプログラミング言語におけるデータ構造定義を
与えるものである。表1に現れる特定の値は例として働
くものであり、本発明がこれらの値にも、あるいは特定
の一連の値にも限らないことが理解されよう。さらに、
本発明は、Cプログラミング言語を使用して実施するこ
とに限らず、他のプログラミング言語または環境を使用
して実施することができる。
としてCプログラミング言語におけるデータ構造定義を
与えるものである。表1に現れる特定の値は例として働
くものであり、本発明がこれらの値にも、あるいは特定
の一連の値にも限らないことが理解されよう。さらに、
本発明は、Cプログラミング言語を使用して実施するこ
とに限らず、他のプログラミング言語または環境を使用
して実施することができる。
【0039】図2は、本発明の一実施形態によるメモリ
・ページの例を示す図である。メモリ・ページは、バケ
ットに分割される。そのようなバケットの例はバケット
222、223、224である。ページ・サイズが整数
個のバケットとして分割できるように、ページ・サイズ
とバケット・サイズがなっている場合、メモリ・ページ
内のすべてのメモリ空間はバケットとして分割される。
ページが整数個のバケットを形成しない場合、少量の余
分の使用不能なメモリ空間がページ上に存在する可能性
がある。
・ページの例を示す図である。メモリ・ページは、バケ
ットに分割される。そのようなバケットの例はバケット
222、223、224である。ページ・サイズが整数
個のバケットとして分割できるように、ページ・サイズ
とバケット・サイズがなっている場合、メモリ・ページ
内のすべてのメモリ空間はバケットとして分割される。
ページが整数個のバケットを形成しない場合、少量の余
分の使用不能なメモリ空間がページ上に存在する可能性
がある。
【0040】所与のメモリ・ページ上では、すべてのバ
ケットを解放することも、あるいはすべてのバケットを
割付けることも、あるいはいくつかのバケットを解放
し、いくつかのバケットを割付けることもできる。たと
えば、図2に示したメモリ・ページでは、バケット22
2、223、224は割付けられており、バケット20
1ないし211は空いている。メモリ・ページ上のいく
つかあるいはすべてのバケットが空いている場合、記述
子ブロック上のポインタは、メモリ・ページ内の空きバ
ケットを識別するヌル終端リストを指し示す。図の例で
は、空きバケットの連結リストはバケット201から始
まる。バケット201は、連結リスト内の次のバケット
の位置を記憶している。この場合、バケット201は、
バケット202を指し示すポインタ212を記憶してい
る。バケット202は、連結リスト内の次のバケットの
位置を記憶している。この場合、バケット202は、バ
ケット203を指し示すポインタ213を記憶してい
る。同様に、バケット203は、バケット204を指し
示すポインタ214を記憶している。
ケットを解放することも、あるいはすべてのバケットを
割付けることも、あるいはいくつかのバケットを解放
し、いくつかのバケットを割付けることもできる。たと
えば、図2に示したメモリ・ページでは、バケット22
2、223、224は割付けられており、バケット20
1ないし211は空いている。メモリ・ページ上のいく
つかあるいはすべてのバケットが空いている場合、記述
子ブロック上のポインタは、メモリ・ページ内の空きバ
ケットを識別するヌル終端リストを指し示す。図の例で
は、空きバケットの連結リストはバケット201から始
まる。バケット201は、連結リスト内の次のバケット
の位置を記憶している。この場合、バケット201は、
バケット202を指し示すポインタ212を記憶してい
る。バケット202は、連結リスト内の次のバケットの
位置を記憶している。この場合、バケット202は、バ
ケット203を指し示すポインタ213を記憶してい
る。同様に、バケット203は、バケット204を指し
示すポインタ214を記憶している。
【0041】同様に、バケット204は、バケット20
5を指し示すポインタ215を記憶している。バケット
205は、バケット206を指し示すポインタ216を
記憶している。バケット206は、バケット207を指
し示すポインタ217を記憶している。バケット207
は、バケット208を指し示すポインタ218を記憶し
ている。バケット208は、バケット209を指し示す
ポインタ219を記憶している。バケット209は、バ
ケット210を指し示すポインタ220を記憶してい
る。バケット210は、バケット211を指し示すポイ
ンタ221を記憶している。バケット211は、それが
連結リストの終わりであり、後に続く他のバケットがな
いことを示す情報を記憶している。バケットが存在する
メモリ・ページに関する連結リストにバケットがない場
合、バケットは割付け済みであるものと理解される。
5を指し示すポインタ215を記憶している。バケット
205は、バケット206を指し示すポインタ216を
記憶している。バケット206は、バケット207を指
し示すポインタ217を記憶している。バケット207
は、バケット208を指し示すポインタ218を記憶し
ている。バケット208は、バケット209を指し示す
ポインタ219を記憶している。バケット209は、バ
ケット210を指し示すポインタ220を記憶してい
る。バケット210は、バケット211を指し示すポイ
ンタ221を記憶している。バケット211は、それが
連結リストの終わりであり、後に続く他のバケットがな
いことを示す情報を記憶している。バケットが存在する
メモリ・ページに関する連結リストにバケットがない場
合、バケットは割付け済みであるものと理解される。
【0042】ページ内に追加メモリ空間が割付けられる
と、連結リストは、空きバケットの変化を反映するよう
に更新される。たとえば、バケットは、連結リストの始
めからでも、あるいは終わりからでも、あるいは中央
(始めと終わりとの間の任意の位置)からでも割付ける
ことができる。好ましい実施形態では、バケットは連結
リストのヘッドから割付けられる。
と、連結リストは、空きバケットの変化を反映するよう
に更新される。たとえば、バケットは、連結リストの始
めからでも、あるいは終わりからでも、あるいは中央
(始めと終わりとの間の任意の位置)からでも割付ける
ことができる。好ましい実施形態では、バケットは連結
リストのヘッドから割付けられる。
【0043】バケットを連結リストの始めから割付ける
場合、記述子ブロック101のポインタは、連結リスト
の新しいヘッドを指し示すように更新される。バケット
を連結リストの終わりから割付ける場合、連結リスト
は、最後の空きバケットが連結リストの終わりであり、
後に続くバケットがないことを示す表示をこのバケット
に記憶することによって、割付け済みバケットの前で打
ち切られる。バケットを連結リストの中央から割付ける
場合、連結リストは、割付け済みバケットの後に続く次
のバケットを指し示すポインタを、割付け済みバケット
の前の最後のバケットに記憶することによって修正され
る。
場合、記述子ブロック101のポインタは、連結リスト
の新しいヘッドを指し示すように更新される。バケット
を連結リストの終わりから割付ける場合、連結リスト
は、最後の空きバケットが連結リストの終わりであり、
後に続くバケットがないことを示す表示をこのバケット
に記憶することによって、割付け済みバケットの前で打
ち切られる。バケットを連結リストの中央から割付ける
場合、連結リストは、割付け済みバケットの後に続く次
のバケットを指し示すポインタを、割付け済みバケット
の前の最後のバケットに記憶することによって修正され
る。
【0044】バケットを解放すると、連結リストは、空
きバケットの変化を反映するように更新される。たとえ
ば、解放されたバケットは、連結リストの始めに追加す
ることも、あるいは終わりに追加することも、あるいは
中央(始めと終わりとの間の任意の位置)にも追加する
こともできる。好ましい実施形態では、解放されたバケ
ットは連結リストのヘッドに追加される。
きバケットの変化を反映するように更新される。たとえ
ば、解放されたバケットは、連結リストの始めに追加す
ることも、あるいは終わりに追加することも、あるいは
中央(始めと終わりとの間の任意の位置)にも追加する
こともできる。好ましい実施形態では、解放されたバケ
ットは連結リストのヘッドに追加される。
【0045】バケットを連結リストの始めに付加する場
合、記述子ブロック101のポインタは、連結リストの
新しいヘッドを指し示すように更新される。バケットを
連結リストの終わりに付加する場合、連結リストは、そ
れぞれ連結リストに含められる次の空きバケットを指し
示すポインタを、前に連結リストの終わりであったバケ
ットと連結リストに追加すべき各追加空きバケットに記
憶することによって修正される。連結リストに追加され
る最後の空きバケットに、それが連結リストの終わりで
あり、後に続く他のバケットがないことを示す表示が記
憶される。
合、記述子ブロック101のポインタは、連結リストの
新しいヘッドを指し示すように更新される。バケットを
連結リストの終わりに付加する場合、連結リストは、そ
れぞれ連結リストに含められる次の空きバケットを指し
示すポインタを、前に連結リストの終わりであったバケ
ットと連結リストに追加すべき各追加空きバケットに記
憶することによって修正される。連結リストに追加され
る最後の空きバケットに、それが連結リストの終わりで
あり、後に続く他のバケットがないことを示す表示が記
憶される。
【0046】解放されたバケットを連結リストの中央に
付加する場合、連結リストは、連結リストに追加される
第1の空きバケットを指し示すパケットを、割付け済み
バケットの前の最後のバケットに記憶することによって
修正される。連結リストに追加される各空きバケット
は、連結リストに追加される次の空きバケットを指し示
すポインタが記憶されている。連結リストに追加される
最後の空きバケットは、連結リストに追加空きバケット
が追加される前にリスト内の次の空きバケットであった
バケットを指し示すポインタを記憶する。
付加する場合、連結リストは、連結リストに追加される
第1の空きバケットを指し示すパケットを、割付け済み
バケットの前の最後のバケットに記憶することによって
修正される。連結リストに追加される各空きバケット
は、連結リストに追加される次の空きバケットを指し示
すポインタが記憶されている。連結リストに追加される
最後の空きバケットは、連結リストに追加空きバケット
が追加される前にリスト内の次の空きバケットであった
バケットを指し示すポインタを記憶する。
【0047】メモリ・ページ上のメモリ空間が割付けら
れ、あるいは解放されると、メモリ・アロケータは、前
述のように空きバケットを識別する連結リストを更新す
る。メモリ・アロケータは、記述子ブロックに記憶され
ているカウンタも更新する。このカウンタは、いくつの
バケットが割付け済みであるか、いくつのブロックが空
いているか、現在どのくらいの量のメモリ空間が連続セ
グメントとして使用できるかを示す情報を記憶する。
れ、あるいは解放されると、メモリ・アロケータは、前
述のように空きバケットを識別する連結リストを更新す
る。メモリ・アロケータは、記述子ブロックに記憶され
ているカウンタも更新する。このカウンタは、いくつの
バケットが割付け済みであるか、いくつのブロックが空
いているか、現在どのくらいの量のメモリ空間が連続セ
グメントとして使用できるかを示す情報を記憶する。
【0048】カウンタが、いくつのバケットが割付け済
みであるかを示す情報を記憶している場合、空きバケッ
トの数は、バケットの総数から割付け済みバケットの数
を減じることによって算出することができる。したがっ
て、空きバケットの数は、その数を記憶する必要なしに
求めることができる。
みであるかを示す情報を記憶している場合、空きバケッ
トの数は、バケットの総数から割付け済みバケットの数
を減じることによって算出することができる。したがっ
て、空きバケットの数は、その数を記憶する必要なしに
求めることができる。
【0049】同様に、カウンタが、いくつのバケットが
空いているかを示す情報を記憶している場合、割付け済
みバケットの数は、具体化されているバケットの総数か
ら空きバケットの数を減じることによって算出すること
ができる。したがって、割付け済みバケットの数は、そ
の数を記憶する必要なしに求めることができる。
空いているかを示す情報を記憶している場合、割付け済
みバケットの数は、具体化されているバケットの総数か
ら空きバケットの数を減じることによって算出すること
ができる。したがって、割付け済みバケットの数は、そ
の数を記憶する必要なしに求めることができる。
【0050】メモリ・アロケーションが変更されると、
メモリ・アロケータは、メモリ・アロケーションの変更
の影響を受けた各メモリ・ページごとに連結リスト内の
空きバケットの数をカウントする。メモリ・アロケータ
は、各メモリ・ページごとの空きバケットの数を記憶
し、メモリ・アロケーションが変更されたときにカウン
タを増分または減分させるカウンタを維持することが好
ましい。メモリ・アロケータは、このカウントから得た
更新済み情報(たとえば、カウンタによって保持されて
いる値)を記述子ブロックに記憶する。
メモリ・アロケータは、メモリ・アロケーションの変更
の影響を受けた各メモリ・ページごとに連結リスト内の
空きバケットの数をカウントする。メモリ・アロケータ
は、各メモリ・ページごとの空きバケットの数を記憶
し、メモリ・アロケーションが変更されたときにカウン
タを増分または減分させるカウンタを維持することが好
ましい。メモリ・アロケータは、このカウントから得た
更新済み情報(たとえば、カウンタによって保持されて
いる値)を記述子ブロックに記憶する。
【0051】本発明のこの実施形態は、更新済みメモリ
・アロケーション情報を記述子ブロックに記憶すること
によって、メモリ・アロケーション動作を実行するたび
に、各メモリ・ページにアクセスし、各メモリ・ページ
ごとの空きバケットまたは割付け済みバケットをカウン
トすることを不要にする。本発明のこの実施形態では、
空きバケットの数および割付け済みバケットの数を、記
述子ブロックに記憶されている情報から容易に求めるこ
とができる。したがって、最小数のメモリ・ページにア
クセスしながらメモリ・アロケーションを迅速にかつ容
易に変更することができる。
・アロケーション情報を記述子ブロックに記憶すること
によって、メモリ・アロケーション動作を実行するたび
に、各メモリ・ページにアクセスし、各メモリ・ページ
ごとの空きバケットまたは割付け済みバケットをカウン
トすることを不要にする。本発明のこの実施形態では、
空きバケットの数および割付け済みバケットの数を、記
述子ブロックに記憶されている情報から容易に求めるこ
とができる。したがって、最小数のメモリ・ページにア
クセスしながらメモリ・アロケーションを迅速にかつ容
易に変更することができる。
【0052】図3は、汎用コンピュータ・システムを示
すブロック図である。本発明は、そのような汎用コンピ
ュータ・システム上で実施することができる。キーボー
ド310およびマウス入力装置311は、二方向システ
ム・バス318に結合される。キーボードおよびマウス
入力装置は、コンピュータ・システムにユーザ入力を導
入し、そのユーザ入力を中央演算処理装置(CPU)3
13に伝達するためのものである。
すブロック図である。本発明は、そのような汎用コンピ
ュータ・システム上で実施することができる。キーボー
ド310およびマウス入力装置311は、二方向システ
ム・バス318に結合される。キーボードおよびマウス
入力装置は、コンピュータ・システムにユーザ入力を導
入し、そのユーザ入力を中央演算処理装置(CPU)3
13に伝達するためのものである。
【0053】コンピュータ・システムは、ビデオ・メモ
リ314と、メイン・メモリ315と、大容量記憶域3
12と、入出力装置319も含み、これらはすべて、キ
ーボード310、マウス入力装置311、CPU313
と共に二方向システム・バス318に結合される。大容
量記憶域312には、磁気記憶システムや、光学記憶シ
ステムや、磁気光学記憶システムや、その他の使用可能
な大容量記憶技法など、固定媒体と取り外し可能な媒体
の両方を含めることができる。大容量記憶域312に
は、読取り可能および書込み可能な媒体システムと読取
り専用媒体システムを含めることができる。二方向シス
テム・バス318はたとえば、ビデオ・メモリ314ま
たはメイン・メモリ315にアドレスする32本のアド
レス線を含むことができる。
リ314と、メイン・メモリ315と、大容量記憶域3
12と、入出力装置319も含み、これらはすべて、キ
ーボード310、マウス入力装置311、CPU313
と共に二方向システム・バス318に結合される。大容
量記憶域312には、磁気記憶システムや、光学記憶シ
ステムや、磁気光学記憶システムや、その他の使用可能
な大容量記憶技法など、固定媒体と取り外し可能な媒体
の両方を含めることができる。大容量記憶域312に
は、読取り可能および書込み可能な媒体システムと読取
り専用媒体システムを含めることができる。二方向シス
テム・バス318はたとえば、ビデオ・メモリ314ま
たはメイン・メモリ315にアドレスする32本のアド
レス線を含むことができる。
【0054】二方向システム・バス318は、CPU3
13、メイン・メモリ315、ビデオ・メモリ314、
大容量記憶域312、入出力装置319などの構成要素
間でデータを転送する32ビット・データ・バスも含
む。別法として、別々のデータ線やアドレス線ではなく
多重データ/アドレス線を使用することもできる。
13、メイン・メモリ315、ビデオ・メモリ314、
大容量記憶域312、入出力装置319などの構成要素
間でデータを転送する32ビット・データ・バスも含
む。別法として、別々のデータ線やアドレス線ではなく
多重データ/アドレス線を使用することもできる。
【0055】入出力装置319には、直列通信ポート
や、並列通信ポートや、変調器/復調器(モデム)や、
ネットワーク・インタフェースや、プリンタや、スキャ
ナや、コンピュータ・システムから外部装置へデータを
転送し、あるいは外部装置からコンピュータ・システム
へデータを転送するその他の装置などの装置を含めるこ
とができる。
や、並列通信ポートや、変調器/復調器(モデム)や、
ネットワーク・インタフェースや、プリンタや、スキャ
ナや、コンピュータ・システムから外部装置へデータを
転送し、あるいは外部装置からコンピュータ・システム
へデータを転送するその他の装置などの装置を含めるこ
とができる。
【0056】本発明の好ましい実施形態では、CPU3
13は、680x0プロセッサなど、Motorola
社製の32ビット・マイクロプロセッサ、または80x
86やPentiumプロセッサなどIntel社製の
プロセッサである。しかし、他の適当なマイクロプロセ
ッサまたはマイクロコンピュータを使用することができ
る。
13は、680x0プロセッサなど、Motorola
社製の32ビット・マイクロプロセッサ、または80x
86やPentiumプロセッサなどIntel社製の
プロセッサである。しかし、他の適当なマイクロプロセ
ッサまたはマイクロコンピュータを使用することができ
る。
【0057】メイン・メモリ315は、ダイナミック・
ランダム・アクセス・メモリ(DRAM)を備える。ビ
デオ・メモリ314は、二重ポート・ビデオ・ランダム
・アクセス・メモリである。ビデオ・メモリ314の1
つのポートはビデオ・プロセッサ316に結合される。
ビデオ・プロセッサ316は、陰極管(CRT)ラスタ
・モニタ317を駆動するために使用される。ビデオ・
プロセッサ316は、当技術分野で良く知られており、
任意の適当な手段によって実施することができる。この
回路は、ビデオ・メモリ314に記憶されている画素デ
ータを、モニタ317が使用するのに適したラスタ信号
に変換する。モニタ317は、グラフィック画像を表示
するのに適したタイプのモニタである。
ランダム・アクセス・メモリ(DRAM)を備える。ビ
デオ・メモリ314は、二重ポート・ビデオ・ランダム
・アクセス・メモリである。ビデオ・メモリ314の1
つのポートはビデオ・プロセッサ316に結合される。
ビデオ・プロセッサ316は、陰極管(CRT)ラスタ
・モニタ317を駆動するために使用される。ビデオ・
プロセッサ316は、当技術分野で良く知られており、
任意の適当な手段によって実施することができる。この
回路は、ビデオ・メモリ314に記憶されている画素デ
ータを、モニタ317が使用するのに適したラスタ信号
に変換する。モニタ317は、グラフィック画像を表示
するのに適したタイプのモニタである。
【0058】前述のコンピュータ・システムは、例示の
みのためのものである。本発明は、任意のタイプのコン
ピュータ・システムあるいはプログラミング環境または
処理環境で実施することができる。本発明は、どのくら
いの量のメモリ空間が割り当てられており、どのくらい
の量が空いているかに関する情報を与えるだけでなく、
どのくらいの量のメモリ空間が割り当てられており、ど
のくらいの量が空いているかに関する、メモリ空間アリ
ーナ内の各メモリ・ページごとの情報も与える。それぞ
れの異なるメモリ・ページ上に記憶されている情報にア
クセスすることは通常、同じメモリ・ページ上に記憶さ
れている情報にアクセスするよりもずっと非効率的であ
るので、本発明は、特定のプロセスに割付けられている
メモリ空間が割付けられているメモリ・ページの数を最
小限に抑えるために使用できる情報を与える。情報が記
憶されるメモリ・ページの数を減少させることによっ
て、ページ切換を最小限に抑え効率を最大にすることが
できる。
みのためのものである。本発明は、任意のタイプのコン
ピュータ・システムあるいはプログラミング環境または
処理環境で実施することができる。本発明は、どのくら
いの量のメモリ空間が割り当てられており、どのくらい
の量が空いているかに関する情報を与えるだけでなく、
どのくらいの量のメモリ空間が割り当てられており、ど
のくらいの量が空いているかに関する、メモリ空間アリ
ーナ内の各メモリ・ページごとの情報も与える。それぞ
れの異なるメモリ・ページ上に記憶されている情報にア
クセスすることは通常、同じメモリ・ページ上に記憶さ
れている情報にアクセスするよりもずっと非効率的であ
るので、本発明は、特定のプロセスに割付けられている
メモリ空間が割付けられているメモリ・ページの数を最
小限に抑えるために使用できる情報を与える。情報が記
憶されるメモリ・ページの数を減少させることによっ
て、ページ切換を最小限に抑え効率を最大にすることが
できる。
【0059】さらに、大量のメモリ空間を割付けるが、
次いでその大部分を解放するプロセスでは多くの場合、
メモリの細分化が進行する。メモリの細分化が起こるの
は、プロセスへの割付けに使用できるメモリが連続ブロ
ックに存在しておらず、メモリ空間アリーナ全体にわた
り多数のページにわたって広がっているときである。本
発明では、プロセスのメモリ・アロケーション動作およ
び割付け解除動作を識別することによって、メモリ・ア
ロケータが、細分化を最小限に抑え、効率を最大にする
ように、そのプロセス用のメモリ空間を割付け解放する
方法を修正できるようにする。
次いでその大部分を解放するプロセスでは多くの場合、
メモリの細分化が進行する。メモリの細分化が起こるの
は、プロセスへの割付けに使用できるメモリが連続ブロ
ックに存在しておらず、メモリ空間アリーナ全体にわた
り多数のページにわたって広がっているときである。本
発明では、プロセスのメモリ・アロケーション動作およ
び割付け解除動作を識別することによって、メモリ・ア
ロケータが、細分化を最小限に抑え、効率を最大にする
ように、そのプロセス用のメモリ空間を割付け解放する
方法を修正できるようにする。
【0060】図4は、プロセスにメモリ空間を割付ける
際に細分化を最小限に抑える本発明の一実施態様を示す
流れ図である。ステップ401で、この方法が開始しス
テップ402へ進む。ステップ402で、この方法は、
所望のバケット・サイズの最適な数の空きバケットを有
するメモリ・ページを見つける。この判定は、各メモリ
・ページごとの記述子ブロックに記憶されているカウン
ト情報にアクセスすることによって下される。ステップ
403で、この方法はそのメモリ・ページからバケット
を割付ける。
際に細分化を最小限に抑える本発明の一実施態様を示す
流れ図である。ステップ401で、この方法が開始しス
テップ402へ進む。ステップ402で、この方法は、
所望のバケット・サイズの最適な数の空きバケットを有
するメモリ・ページを見つける。この判定は、各メモリ
・ページごとの記述子ブロックに記憶されているカウン
ト情報にアクセスすることによって下される。ステップ
403で、この方法はそのメモリ・ページからバケット
を割付ける。
【0061】ステップ404で、この方法は、プロセス
に十分なメモリ空間が割付けられたかどうかを検査す
る。十分なメモリ空間が割付けられた場合、この方法は
ステップ406で終了する。十分なメモリ空間が割付け
られていない場合、この方法はステップ405へ進む。
ステップ405で、この方法は、選択されたメモリ・ペ
ージ上のすべてのバケットが割付け済みであるかどうか
を検査する。そうでない場合、この方法は、ステップ4
03に戻り、同じメモリ・ページから別のバケットを割
付ける。
に十分なメモリ空間が割付けられたかどうかを検査す
る。十分なメモリ空間が割付けられた場合、この方法は
ステップ406で終了する。十分なメモリ空間が割付け
られていない場合、この方法はステップ405へ進む。
ステップ405で、この方法は、選択されたメモリ・ペ
ージ上のすべてのバケットが割付け済みであるかどうか
を検査する。そうでない場合、この方法は、ステップ4
03に戻り、同じメモリ・ページから別のバケットを割
付ける。
【0062】ステップ402で、メモリ要求を満たすた
めに使用できる単一のメモリ・ページが識別されること
が好ましい。ページ境界内のメモリを割付けると、ペー
ジング(すなわち、メモリとの間のメモリ・ページのス
ワップ)の可能性が低減する。しかし、ページ境界を横
切ってメモリを割付けることが必要になることがある。
選択されたメモリ・ページ上のすべてのバケットがすで
に割付け済みである場合、この方法はステップ402に
戻り、ステップ402で、残りのメモリ・ページのうち
で最適な(たとえば最大の)数の空きバケットを有する
メモリ・ページが識別され、メモリ・アロケーションに
使用するメモリ・ページとして選択される。
めに使用できる単一のメモリ・ページが識別されること
が好ましい。ページ境界内のメモリを割付けると、ペー
ジング(すなわち、メモリとの間のメモリ・ページのス
ワップ)の可能性が低減する。しかし、ページ境界を横
切ってメモリを割付けることが必要になることがある。
選択されたメモリ・ページ上のすべてのバケットがすで
に割付け済みである場合、この方法はステップ402に
戻り、ステップ402で、残りのメモリ・ページのうち
で最適な(たとえば最大の)数の空きバケットを有する
メモリ・ページが識別され、メモリ・アロケーションに
使用するメモリ・ページとして選択される。
【0063】この方法は、最も多くの空きバケットを有
するメモリ・ページからメモリ空間の割付けを開始する
ので、必要なメモリ空間が単一のメモリ空間内、あるい
は少なくともできるだけ少ない数のメモリ・ページ内に
割付けられる可能性を高くする。
するメモリ・ページからメモリ空間の割付けを開始する
ので、必要なメモリ空間が単一のメモリ空間内、あるい
は少なくともできるだけ少ない数のメモリ・ページ内に
割付けられる可能性を高くする。
【0064】メモリを割付け、メモリ・アロケーション
に関係する情報を与える方法および装置について、1つ
または複数の特定の実施形態に関連して説明した。本発
明は、特許請求の範囲およびその全範囲の等価物によっ
て定義される。
に関係する情報を与える方法および装置について、1つ
または複数の特定の実施形態に関連して説明した。本発
明は、特許請求の範囲およびその全範囲の等価物によっ
て定義される。
【0065】上記実施形態は、コンピュータのハードウ
エアによって実施される。そのハードウエアシステムで
用いられるプログラムは当然のことながら記録媒体に記
録された状態で提供される。このプログラムを記憶させ
た媒体としては、例えばフレキシブルディスク、CD−
ROM、メモリカードその他あらゆる媒体を使用でき
る。媒体に記録されたプログラムは、ハードウエアに組
み込まれている記憶装置、例えばハードディスクなどに
インストールされることにより、プログラムが実行でき
るようになる。
エアによって実施される。そのハードウエアシステムで
用いられるプログラムは当然のことながら記録媒体に記
録された状態で提供される。このプログラムを記憶させ
た媒体としては、例えばフレキシブルディスク、CD−
ROM、メモリカードその他あらゆる媒体を使用でき
る。媒体に記録されたプログラムは、ハードウエアに組
み込まれている記憶装置、例えばハードディスクなどに
インストールされることにより、プログラムが実行でき
るようになる。
【図1】 4キロバイト・ページ・サイズを有するマシ
ン上の本発明の一実施形態によるメモリ空間アリーナの
例を示す図である。
ン上の本発明の一実施形態によるメモリ空間アリーナの
例を示す図である。
【図2】 本発明の一実施形態によるメモリ・ページの
例を示す図である。
例を示す図である。
【図3】 汎用コンピュータ・システムを示すブロック
図である。
図である。
【図4】 プロセスにメモリ空間を割付ける際にフラグ
メント化を最小限に抑える本発明の一実施形態を示す流
れ図である。
メント化を最小限に抑える本発明の一実施形態を示す流
れ図である。
101 記述子ブロック 102、103、104、105 メモリ・ブロック 106 データ構造識別子 107、108、109、110、111 メモリ位置 114、115、116、117、118、119 メ
モリ・ページ 201、211、222、223、224 バケット 213、215、216、217、218、219、2
20、221 ポインタ
モリ・ページ 201、211、222、223、224 バケット 213、215、216、217、218、219、2
20、221 ポインタ
─────────────────────────────────────────────────────
【手続補正書】
【提出日】平成9年8月15日
【手続補正1】
【補正対象書類名】図面
【補正対象項目名】全図
【補正方法】変更
【補正内容】
【図1】
【図2】
【図3】
【図4】
───────────────────────────────────────────────────── フロントページの続き (71)出願人 591064003 901 SAN ANTONIO ROAD PALO ALTO,CA 94303,U. S.A. (72)発明者 デイヴィッド・ズィティン アメリカ合衆国・95014・カリフォルニア 州・カッパチーノ・レバノン ドライブ・ 10210
Claims (5)
- 【請求項1】 メモリ・アロケーション情報を維持する
方法であって、 記述子ブロックと複数のメモリ・ブロックとを備えるメ
モリ空間アリーナを予約するステップを含むことを特徴
とする方法。 - 【請求項2】 さらに、 前記複数のメモリ・ブロックに関連付けられ、 前記メモリ空間アリーナ内で具体化されている第1のバ
ケット・サイズのページの数を表す第1値と、 前記メモリ空間アリーナ内で具体化されている前記第1
のバケット・サイズの前記ページのうちの1つのページ
内の割付け済みのバケットの数を表す第2の値と、 前記メモリ空間アリーナ内で具体化されている前記第1
のバケット・サイズの前記のページのうちの1つのペー
ジ内の未割付けバケットを識別する連結リストを指し示
すポインタとを含む前記メモリ・アロケーション情報を
前記記述子ブロックに記憶するステップを含むことを特
徴とする方法。 - 【請求項3】 メモリ・アロケーション情報を維持させ
るためのプログラムを記録した、コンピュータで読取り
可能な記録媒体において、 前記コンピュータにメモリ空間アリーナを予約させるよ
うに構成されたコンピュータ読取り可能なプログラム
と、 前記コンピュータに、前記メモリ・アロケーション情報
を記憶すべきデータ構造を定めるように構成されたコン
ピュータ読取り可能なプログラムと、 前記コンピュータに、 前記メモリ空間アリーナ内で具体化されている第1のバ
ケット・サイズのページの数を表す第1値と、 前記メモリ空間アリーナで具体化されている前記第1の
バケット・サイズの前記のページのうちの1つのページ
内の割付け済みのバケットの数を表す第2の値と、 前記メモリ空間アリーナ内で具体化されている前記第1
のバケット・サイズの前記のページのうちの1つのペー
ジ内の未割付けバケットを識別する連結リストを指し示
すポインタとを含む前記メモリ・アロケーション情報を
記憶させるように構成されたプログラムとを記録したこ
とを特徴とするコンピュータで読み取り可能な記録媒
体。 - 【請求項4】 メモリ・アロケーション情報を維持する
下記のステップを実行するためにマシンによって実行で
きる命令のプログラムを実際に具体化した、前記マシン
によって読み取ることのできる記録媒体であって、上記
ステップにはメモリ空間アリーナを予約するステップ
と、 前記メモリ・アロケーション情報を記憶すべきデータ構
造を定めるステップと、 前記メモリ空間アリーナ内で具体化されている第1のバ
ケット・サイズのページの数を表す第1値と、 前記メモリ空間アリーナで具体化されている前記第1の
バケット・サイズの前記ページのうちの1つのページ内
の割付け済みのバケットの数を表す第2の値と、 前記メモリ空間アリーナ内で具体化されている前記第1
のバケット・サイズの前記ページのうちの1つのページ
内の未割付けバケットを識別する連結リストを指し示す
ポインタとを含む前記メモリ・アロケーション情報を記
憶するステップとを含むことを特徴とする記録媒体。 - 【請求項5】 メモリ・アロケーション情報を維持する
装置であって、 プロセッサと、一部がメモリ空間アリーナとして予約さ
れるメモリとを備えるコンピュータ・システムとを備
え、前記メモリ空間アリーナが記述子ブロックを含み、
その記述子ブロックが、 前記メモリ空間アリーナ内で具体化されている第1のバ
ケット・サイズのページの数を表す値を記憶する第1の
メモリ位置と、 前記メモリ空間アリーナで具体化されている前記第1の
バケット・サイズの前記ページのうちの1つのページ内
の割付け済みのバケットの数を表す第2の値を記憶する
第2のメモリ位置と、 前記メモリ空間アリーナ内で具体化されている前記第1
のバケット・サイズの前記ページのうちの1つのページ
内の未割付けバケットを識別する連結リストを指し示す
ポインタを記憶する第3のメモリ位置とを含むことを特
徴とする装置。
Applications Claiming Priority (2)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| US08/667839 | 1996-06-20 | ||
| US08/667,839 US6247105B1 (en) | 1996-06-20 | 1996-06-20 | Externally identifiable descriptor for standard memory allocation interface |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| JPH1083339A true JPH1083339A (ja) | 1998-03-31 |
Family
ID=24679866
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP9163989A Pending JPH1083339A (ja) | 1996-06-20 | 1997-06-20 | 標準メモリ・アロケーション・インタフェース用外部識別可能な記述子 |
Country Status (4)
| Country | Link |
|---|---|
| US (2) | US6247105B1 (ja) |
| EP (1) | EP0814405B1 (ja) |
| JP (1) | JPH1083339A (ja) |
| DE (1) | DE69737709T2 (ja) |
Families Citing this family (53)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| 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 |
| JP4486720B2 (ja) * | 1999-05-18 | 2010-06-23 | パナソニック株式会社 | プログラム変換装置およびプログラム変換方法 |
| US6600493B1 (en) * | 1999-12-29 | 2003-07-29 | Intel Corporation | Allocating memory based on memory device organization |
| US7058064B2 (en) * | 2000-02-08 | 2006-06-06 | Mips Technologies, Inc. | Queueing system for processors in packet routing operations |
| US7058065B2 (en) * | 2000-02-08 | 2006-06-06 | Mips Tech Inc | Method and apparatus for preventing undesirable packet download with pending read/write operations in data packet processing |
| US7165257B2 (en) * | 2000-02-08 | 2007-01-16 | Mips Technologies, Inc. | Context selection and activation mechanism for activating one of a group of inactive contexts in a processor core for servicing interrupts |
| US7042887B2 (en) | 2000-02-08 | 2006-05-09 | Mips Technologies, Inc. | Method and apparatus for non-speculative pre-fetch operation in data packet processing |
| US7065096B2 (en) * | 2000-06-23 | 2006-06-20 | Mips Technologies, Inc. | Method for allocating memory space for limited packet head and/or tail growth |
| US20010052053A1 (en) * | 2000-02-08 | 2001-12-13 | Mario Nemirovsky | Stream processing unit for a multi-streaming processor |
| US7032226B1 (en) | 2000-06-30 | 2006-04-18 | Mips Technologies, Inc. | Methods and apparatus for managing a buffer of events in the background |
| US7502876B1 (en) | 2000-06-23 | 2009-03-10 | Mips Technologies, Inc. | Background memory manager that determines if data structures fits in memory with memory state transactions map |
| US7139901B2 (en) * | 2000-02-08 | 2006-11-21 | Mips Technologies, Inc. | Extended instruction set for packet processing applications |
| US7082552B2 (en) * | 2000-02-08 | 2006-07-25 | Mips Tech Inc | Functional validation of a packet management unit |
| US7649901B2 (en) * | 2000-02-08 | 2010-01-19 | Mips Technologies, Inc. | Method and apparatus for optimizing selection of available contexts for packet processing in multi-stream packet processing |
| US7155516B2 (en) * | 2000-02-08 | 2006-12-26 | Mips Technologies, Inc. | Method and apparatus for overflowing data packets to a software-controlled memory when they do not fit into a hardware-controlled memory |
| US7076630B2 (en) * | 2000-02-08 | 2006-07-11 | Mips Tech Inc | Method and apparatus for allocating and de-allocating consecutive blocks of memory in background memo management |
| US6401181B1 (en) * | 2000-02-29 | 2002-06-04 | International Business Machines Corporation | Dynamic allocation of physical memory space |
| US7523290B2 (en) * | 2000-02-29 | 2009-04-21 | International Business Machines Corporation | Very high speed page operations in indirect accessed memory systems |
| US6757802B2 (en) * | 2001-04-03 | 2004-06-29 | P-Cube Ltd. | Method for memory heap and buddy system management for service aware networks |
| US7093097B2 (en) * | 2001-11-27 | 2006-08-15 | International Business Machines Corporation | Dynamic self-tuning memory management method and system |
| US7290110B2 (en) * | 2003-09-11 | 2007-10-30 | International Business Machines Corporation | System and method of squeezing memory slabs empty |
| US7225209B2 (en) * | 2003-11-06 | 2007-05-29 | International Business Machines Corporation | Computer-implemented method for allocating new additional area for the dataset in storage based on the size of the new additional area wherein if the new area number does not exceed clipping threshold, the size of a new additional area being greater than the size of each previously allocated additional area of the dataset |
| US7114016B2 (en) * | 2003-12-23 | 2006-09-26 | Intel Corporation | Page-aware descriptor management |
| US7519639B2 (en) * | 2004-01-05 | 2009-04-14 | International Business Machines Corporation | Method and apparatus for dynamic incremental defragmentation of memory |
| US7624137B2 (en) * | 2004-01-05 | 2009-11-24 | International Business Machines Corporation | Method and apparatus for scheduling and performing garbage collection in a real-time system with guaranteed space bounds |
| US7434210B1 (en) * | 2004-03-02 | 2008-10-07 | Sun Microsystems, Inc. | Interposing library for page size dependency checking |
| US7350046B2 (en) * | 2004-04-02 | 2008-03-25 | Seagate Technology Llc | Managed reliability storage system and method monitoring storage conditions |
| JP4460967B2 (ja) * | 2004-07-23 | 2010-05-12 | 株式会社東芝 | メモリカード、不揮発性半導体メモリ、及び半導体メモリの制御方法 |
| US7805578B2 (en) * | 2005-04-29 | 2010-09-28 | Mtekvision Co., Ltd. | Data processor apparatus and memory interface |
| US7469329B2 (en) * | 2006-03-30 | 2008-12-23 | International Business Machines Corporation | Methods for dynamically resizing memory pools |
| KR101376268B1 (ko) * | 2006-10-13 | 2014-03-21 | 에스케이텔레콤 주식회사 | 단말기의 메모리 할당 장치 및 방법 |
| US8478932B2 (en) * | 2008-09-15 | 2013-07-02 | Texas Instruments Incorporated | Power efficient memory management for embedded systems |
| US8515965B2 (en) * | 2010-05-18 | 2013-08-20 | Lsi Corporation | Concurrent linked-list traversal for real-time hash processing in multi-core, multi-thread network processors |
| US9461930B2 (en) | 2009-04-27 | 2016-10-04 | Intel Corporation | Modifying data streams without reordering in a multi-thread, multi-flow network processor |
| US8595743B2 (en) | 2012-05-01 | 2013-11-26 | Concurix Corporation | Network aware process scheduling |
| US8726255B2 (en) | 2012-05-01 | 2014-05-13 | Concurix Corporation | Recompiling with generic to specific replacement |
| US9417935B2 (en) | 2012-05-01 | 2016-08-16 | Microsoft Technology Licensing, Llc | Many-core process scheduling to maximize cache usage |
| US8650538B2 (en) | 2012-05-01 | 2014-02-11 | Concurix Corporation | Meta garbage collection for functional code |
| US8700838B2 (en) | 2012-06-19 | 2014-04-15 | Concurix Corporation | Allocating heaps in NUMA systems |
| US9047196B2 (en) | 2012-06-19 | 2015-06-02 | Concurix Corporation | Usage aware NUMA process scheduling |
| US9575813B2 (en) | 2012-07-17 | 2017-02-21 | Microsoft Technology Licensing, Llc | Pattern matching process scheduler with upstream optimization |
| US8707326B2 (en) | 2012-07-17 | 2014-04-22 | Concurix Corporation | Pattern matching process scheduler in message passing environment |
| US9043788B2 (en) | 2012-08-10 | 2015-05-26 | Concurix Corporation | Experiment manager for manycore systems |
| US9195578B2 (en) | 2012-08-24 | 2015-11-24 | International Business Machines Corporation | Systems, methods and computer program products memory space management for storage class memory |
| US8656135B2 (en) | 2012-11-08 | 2014-02-18 | Concurix Corporation | Optimized memory configuration deployed prior to execution |
| US8607018B2 (en) | 2012-11-08 | 2013-12-10 | Concurix Corporation | Memory usage configuration based on observations |
| US8656134B2 (en) | 2012-11-08 | 2014-02-18 | Concurix Corporation | Optimized memory configuration deployed on executing code |
| US20130219372A1 (en) | 2013-03-15 | 2013-08-22 | Concurix Corporation | Runtime Settings Derived from Relationships Identified in Tracer Data |
| US9880761B2 (en) | 2015-12-28 | 2018-01-30 | International Business Machines Corporation | Restorable memory allocator |
| US10310736B1 (en) * | 2016-12-22 | 2019-06-04 | Veritas Technologies Llc | Systems and methods for storing data |
| US11036694B2 (en) * | 2017-03-15 | 2021-06-15 | Vmware, Inc. | Propagating affinity data to large file block clusters in a file system |
| CN107140661B (zh) * | 2017-06-08 | 2019-03-29 | 云南欧罗汉姆肥业科技有限公司 | 一种闪蒸降温生产硝酸钾的方法 |
| US11216315B2 (en) * | 2018-02-21 | 2022-01-04 | Rubrik, Inc. | Distributed semaphore with a different keys to reduce contention for dynamic reservation of disk space |
Family Cites Families (6)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CA1014671A (en) * | 1973-04-23 | 1977-07-26 | Robert E. Hutton | Initializer for allocating free areas of a computer's memory |
| US4695949A (en) * | 1984-07-19 | 1987-09-22 | Texas Instruments Incorporated | Method for efficient support for reference counting |
| US5101485B1 (en) * | 1989-06-29 | 1996-12-10 | Frank L Perazzoli Jr | Virtual memory page table paging apparatus and method |
| JPH0774984B2 (ja) * | 1991-06-10 | 1995-08-09 | インターナショナル・ビジネス・マシーンズ・コーポレイション | システム資源利用率測定方法とデータ処理システム |
| US5680582A (en) * | 1991-12-20 | 1997-10-21 | Microsoft Corporation | Method for heap coalescing where blocks do not cross page of segment boundaries |
| US5613105A (en) * | 1993-06-30 | 1997-03-18 | Microsoft Corporation | Efficient storage of objects in a file system |
-
1996
- 1996-06-20 US US08/667,839 patent/US6247105B1/en not_active Expired - Lifetime
-
1997
- 1997-06-09 EP EP97303957A patent/EP0814405B1/en not_active Expired - Lifetime
- 1997-06-09 DE DE69737709T patent/DE69737709T2/de not_active Expired - Lifetime
- 1997-06-20 JP JP9163989A patent/JPH1083339A/ja active Pending
-
2000
- 2000-12-15 US US09/740,740 patent/US6542978B2/en not_active Expired - Lifetime
Also Published As
| Publication number | Publication date |
|---|---|
| DE69737709D1 (de) | 2007-06-21 |
| EP0814405A2 (en) | 1997-12-29 |
| EP0814405B1 (en) | 2007-05-09 |
| US20010039607A1 (en) | 2001-11-08 |
| EP0814405A3 (en) | 1999-01-13 |
| DE69737709T2 (de) | 2008-01-10 |
| US6247105B1 (en) | 2001-06-12 |
| US6542978B2 (en) | 2003-04-01 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| JPH1083339A (ja) | 標準メモリ・アロケーション・インタフェース用外部識別可能な記述子 | |
| US6460126B1 (en) | Computer resource management system | |
| JP4511653B2 (ja) | マルチスレッド仮想マシン内におけるメモリ・アロケーションの方法及び装置 | |
| US5689707A (en) | Method and apparatus for detecting memory leaks using expiration events and dependent pointers to indicate when a memory allocation should be de-allocated | |
| US4761737A (en) | Method to automatically increase the segment size of unix files in a page segmented virtual memory data processing system | |
| US5539899A (en) | System and method for handling a segmented program in a memory for a multitasking data processing system utilizing paged virtual storage | |
| US5701476A (en) | Method and apparatus for dynamically loading a driver routine in a computer memory | |
| US4742447A (en) | Method to control I/O accesses in a multi-tasking virtual memory virtual machine type data processing system | |
| JP4176857B2 (ja) | リファレンスされたオブジェクトを管理するための3状態リファレンスの使用 | |
| US6526472B2 (en) | Access control method, access control apparatus and computer readable memory storing access control program | |
| EP0590645B1 (en) | Method and system for reducing memory allocation requests | |
| JP4718683B2 (ja) | コンピュータ内のアプリケーションプログラム間でフォーカスが変更されたときに物理メモリの状態を復元する方法およびシステム | |
| US6366994B1 (en) | Cache aware memory allocation | |
| US6725241B1 (en) | Method and apparatus for freeing memory in a data processing system | |
| US7882198B2 (en) | Shared JAVA JAR files | |
| EP0887736A1 (en) | Flexible translation storage buffers for virtual address translation caching | |
| US7840773B1 (en) | Providing memory management within a system management mode | |
| WO1999001817A1 (en) | Defragmentation of stored data without pointer indirection | |
| EP0403124A2 (en) | Overlay swapping | |
| JPH05274152A (ja) | オブジェクト管理方式 | |
| US6016529A (en) | Memory allocation technique for maintaining an even distribution of cache page addresses within a data structure | |
| US7565645B2 (en) | Method and apparatus for marking code for data versioning | |
| US20060248103A1 (en) | Method of detecting memory leaks in software applications | |
| US20050246402A1 (en) | Apparatus and methods for placing a managed heap | |
| EP0919927A2 (en) | Dynamic memory allocation technique for maintaining an even distribution of cache page addresses within an address space |