データ構造 - バディシステムのメモリ管理

パートナー・システム自体は、動的メモリ管理方法との間の差、および境界を同定する方法であり:n乗にブロックサイズが2のストレージシステム管理パートナーの使用は、それが占有されているか否かをフリーブロック(nは正の整数) 。

例えば、システム2つの全体のメモリ空間M単語。その後、いくつかの割り当てと回復を行う、利用可能なスペースのテーブルには、空間のみを含むことがある:2 0、2 1。、2 2、...、2 メートルのフリーブロック。
ワードは、測定の単位であるいくつかのバイトで構成され、異なるマシンのためのバイト数の中央値は、単語が含まれます。例えば、1バイトの8ビットマシンワードは、16ビットマシンワードは2バイトで構成されています。

ノード構成テーブルで利用可能なスペース

パートナーシステムは、図1に示すノード構成テーブルスペースに利用することができます。


16823531-456a289e4d7f99d3.png
図.PNGのノード構成

ヘッダフィールドは、4つの部分から構成される、ヘッドノードとして表されます。

  • ノードタイプフィールドのllinkとRLINKポインタ、それぞれ、直接的および即時先行点の後続ノードのため。
  • タグ値:状態フラグメモリブロックは、(1によって表される)ブロックまたは(0で示される)フリーブロックを占有されています
  • kval:ストレージ・ブロックの容量を記録します。メモリシステムのブロックの各々が2mの力であるため、m個のkvalの値を記録しました。

コードは次のように表現されています。

typedef struct WORD_b{
    struct WORD_b *llink;//指向直接前驱
    int tag;//记录该块是占用块还是空闲块
    int kval;//记录该存储块容量大小为2的多少次幂
    struct WORD_b *rlink;//指向直接后继
    OtherType other;//记录结点的其它信息
}WORD_b,head;

システムは、ユーザアプリケーションのメモリの要求を受け入れていきますので、パートナーのシステムでは、それは、異なるサイズの多くが、2の全ての能力がありますメートルメモリ・ブロックを、時間を見つけて配布を容易にするために、システムは、同じサイズを使用していますそれぞれがリストを作成します。2の初期容量のためにMストレージの一枚に、リストは、ヘッダに格納され、M + 1番目、良好これらのリストを管理するために、これらのシステムは、M + 1のリストがリンクされた可能性が形成されています。示すように、隣接するテーブルの構造と同様アレイ。

16823531-f474ce6ac6a88698.png
図2パートナーのシステムの初期状態.PNG

利用可能なスペースコード表は、のように表します:

#define m 16//设定m的初始值
typedef struct HeadNode {
    int nodesize;//记录该链表中存储的空闲块的大小
    WORD_b * first;//相当于链表中的next指针的作用
}FreeList[m+1];//一维数组

割り当てアルゴリズム

バディシステム割り当てアルゴリズムは単純です。いま、サイズnのシステムメモリ空間へのユーザ要求、もし2 K-1 <N <= 2 Kを、その後、サイズ2の表に利用可能なスペースを表示するために必要Kリンクされたリストのノードなしスペース:

  • リストがNULLでない場合、方法は、ユーザが利用可能なヘッドノードからプラグヘッドから直接取り出すことができます。
  • 2のサイズ場合KリンクリストのがNULLである、2つ以上の参照のために必要な順番でK大きなリストを、適切なリストに大きさに応じて、ユーザに空間対応するサイズを取ら、残りのスペースを発見した後に、リストから除去されます。

例えば、誘導されたバディシステム割り当てアルゴリズムに従ってこの時点で、ユーザは7つのワードの空間的なサイズにシステムを適用するために、全システムメモリが24ワードである:2 2 <7 <2 。3、この場合には表示されるはず表2中の利用可能な空間の大きさ。3ノードの空きリストがあるかどうか。

  • 存在する場合、リスト内のユーザーに直接割り当てられたノードから除去されます。
  • そうでない場合、連続2の必要性を表示する。3リストの各場合より大きなアイドルノードがあります。2サイズで、想定4ユーザ2に割り当てられている空きブロックのその後の除去、フリーブロックのリンクリストを有する。3空間ワード、残りの二つの3つの文字、残りの空きブロックは、2の大きさに3リンクされたリスト。
16823531-c0e02f23c448d333.png
(A)は、図の分配プロセス分配システムの後に(B)を割り当てる前に、3つのパートナー.PNG

コレクションアルゴリズム

どのような共通の問題に直面するだろうメモリの回復の問題に使用されるメモリ管理メカニズム:効果的な統合のためのメモリを再利用する方法を、バディシステムも例外ではありません。

メモリ・ブロックがもはやユーザ・アプリケーションで使用されている場合、システムは、メモリブロックのこの部分は、または復元中に他の空きブロックと組み合わせることができるかどうかを判断する必要が回復する必要がありません。

異なるシステムパートナー境界識別方法マージのオブジェクトを見て、そして場合、各メモリブロックのためのバディシステムがあれば、ユーザは、メモリブロックが専用メモリブロックのパートナーが空きブロックであるか否かを決定する必要が解放それぞれの「バディ」を有しますそれは合併し、その後もそのパートナーとの統合を決定する必要がある新たなフリーブロックをマージします。使用することができ、逆にダイレクトメモリブロックは、テーブルのサイズに応じて空間内に挿入することができます。

パートナーメモリブロックの位置を決定するときに、方法が使用される:Pとしてメモリブロックの開始アドレスと、2の大きさKは、そのパートナーの開始アドレスが配置されています。

16823531-38f552529450c813.png
image.png

例えば、2の大きさ。8ブロックの開始アドレスが計算される開始アドレスは512人のパートナーです。

MOD 2 512以来。9 = 0、その結果、512 + 2 8 = 768、およびメモリブロックが回収される場合、ブロックはその逆に直接両者を組み合わせることが自由であり、そして場合、唯一の開始アドレスは、メモリブロック768のステータスを表示しますブロックサイズを解放するために回復リンクは2である。8リンクリスト。

異なるため、リンクされたリスト内の空きブロックの異なるサイズのストレージ管理プロセスのためのバディシステムの利用、ときに、ユーザー・スペース・アプリケーション、配布が速く完了するので、アルゴリズムは比較的簡単です。

空きブロックをマージする回復用ストレージスペース、ブロックの自由な位置に隣接するブロックの状態に応じていない。それは、そのパートナーのブロックに完全に依存。だから、空きブロックはなく、両社の関係ので、そのメモリブロックに隣接した場所ならばそれもマージされません。これは、このシステムの欠点の一つである:合併を考慮しただけなので、パートナー、破片のストレージにそうなりやすいです。

おすすめ

転載: blog.csdn.net/weixin_34087307/article/details/90966899