このブログは、旧・はてなダイアリー「檜山正幸のキマイラ飼育記 メモ編」(http://d.hatena.ne.jp/m-hiyama-memo/)のデータを移行・保存したものであり、今後(2019年1月以降)更新の予定はありません。

今後の更新は、新しいブログ http://m-hiyama-memo.hatenablog.com/ で行います。

アロケータへの問い合わせとその応答形式

いくつか(かなり大量)のコンテナを管理し、アロケーションに責任を持つモジュールなりサーバーなり(実体は問わない)をとりあえずアロケータと呼ぶ。アロケータはリソース管理系の中核機能を抽象的に指す言葉になる。

アロケータは、実際のアロケーションを行うだけでなく、リソース状況の問い合わせに答える責務がある。特に、(d, x)(durationとweightの組)が与えられたとき、(d, x)のアロケーションが可能かどうか、可能なら「すべてのアロケーション候補」(理論的には無限集合)を返す必要がある。

(d, x)に対してbegin値aが決まれば、実現[a, a+d;x]が決まるので、「begin値←→アロケーションインスタンス」の対応がある。よって、「begin値の集合←→アロケーションインスタンスの集合」となる。begin値は単なるスカラーなので、実数直線内の集合だが、これは互いに交わらない有限個の区間の合併で表現できる。

有限個の区間は、区間([a, b]の形)のリストで表現可能だが、次の意味で正規化しておく。

  1. 区間や1点区間は含まない。プロパーな区間だけ。
  2. 区間達は整列されている。
  3. リスト内で隣り合う2つの区間は離れている。

「離れている」とは、隣接もオーバラップもしてないこと。つまり、[a, b]と[c, d]が離れているとは、b<c のこと。オーバラップ(c<b)または隣接(b = c)していれば縮約して1個の区間にできる。空集合は空リストで、単一のプロパー区間は要素を1つ持つリストで表現できる。

正規化された(重みはない)リストも非常に重要なデータ構造で、このデータ(意味は実数の部分集合)に関する集合演算(∩、∪)が後で役に立つ。重みが1に固定された区間群を扱うときも、重みを省略して区間区間のリスト(意味的には実数直線内の集合)の演算が使える。