Skip to content.

Sections
Personal tools
You are here: Home » 技術文書 » パターン » パターンMulti-Phase Startup

Document Actions
Multi-Phase Startup(多段階起動)
Ver 1.0 - 1999/5/6

(株)永和システムマネジメント   平鍋健児
作成日:初版 1999,3/16

JPLoP(Japan Pattern Language of Programming)へ投稿したパターンです。

   目的

相互に依存し合ったサブシステムを,順序良く起動する.

   別名

ブートストラップ(bootstrap),ランレベル(run level)


   動機

リアルタイムシステムや OS などのシステムの起動を考える. システムは複数のサブシステムから構成されており,それらが相互に 依存し合っているため,システム全体の起動時に各サブシステム を1つずつ一度に運用状態に起動することができない. 例えば,ネットワークはファイルシステムに依存し,ファイルシステムも ネットワークに依存するなど.

この様な場合,各サブシステムが提供するサービスを分割し, 各サブシステムに渡るサービスの起動手順を確立して徐々に全体を立ち上げ る必要がある.しかし,一般にその手順は複雑になり,また,手順の取り決めは 全サブシステムの詳細な知識が必要となる.

サブシステムの状態を,「停止」と「運用中」の2つに分けるのではなく, その中間レベルの状態(複数の場合もある)を定義する. 起動時は,一旦すべてのサブシステムを中間レベルで起動し,次に運用状態で 起動するといった他段階のブートストラップを行なうことで,相互依存性の問題を 回避することができる.また,中間レベルを複数持つ場合,それぞれの中間レベル 状態をシステム全体に渡って系統的に定義することができれば,起動手順の見通しが 立てやすくなる.

この中間レベルの状態を表現するため,「ランレベル」という整数を定義し, システム全体で各ランレベルに関する申し合わせを規定することで, 起動手順に関する系統的な取り決めとする.


   適用可能性

  • 相互依存するサブシステムを起動したい場合.
  • 相互依存するサブシステムの優雅に停止したい場合.
  • 分散システムにおいて依存関係が循環する場合の起動.

   構造

構造
structure

   構成要素

  • System
    • システム全体の起動を司るクラス(Singleton であることが多い)
    • サブシステムへの参照を保持する.
  • SubSystem
    • サブシステムの抽象クラス
    • System へ各ランレベルへのエントリポイント(enterRunlevel)を提供する.
    • ConcreteSubSystem へ拡張ポイントとして(doRunlevel)を提供する.
  • ConcreteSubSystem
    • 実際の具体的なサブシステム
    • 具体的なサブシステムの,指定ランレベルでの動作を記述する.

   協調関係

  • System クラスは,自分が管理する各 SubSystem クラスに,各ランレベル 状態に入るように要請する.
  • 各 ConcreteSubSystem クラスは,自分自身を指定ランレベルの状態 に立ち上げる.

協調関係
collaboration


   実装

実装に置いては,以下の点を考慮する必要がある.

  • 実装に入る前に,各ランレベルの意味をシステム全体に渡って定義する必要 がある.各ランレベルでサブシステムごとにどの機能があてにされるのかを前もって システム全体で合意しなければならない.

   バリエーション

以下のようなバリエーションが考えられる.

  • ランレベルを3つに縮退させ,生成,init, start と名付けた例が多く使用される.

    3段階の実装
    3phase

  • System と SubSystem の関係を再帰的に階層化することで, 他階層システムに適用することができる.

    階層を持つ実装
    hierarchy

  • 起動のみならず,全体を優雅に停止させるためにも使用することができる.

   結果

  • 相互依存したサブシステムが起動できるようになる.
  • 起動の手順に関するサブシステムに渡る申し合わせが明らかになる.

   サンプルコード

省略

   使用例

  • UNIX システムの起動とランレベル.
  • 某リアルタイムシステムの起動と終了.

   関連するパターン

  • GoF の Singleton パターンが System/SubSystem に用いられることが多い
  • GoF の Composite パターンが 多階層の SubSystem に用いられる

Kenji Hiranabe <hiranabe@esm.co.jp>
Last modified: Sat May 1 15:06:55 1999




この記事への評価にご協力をお願いします。

良かった 普通 イマイチ