索引 / 001 JA
コンピュータシステム設計の原理 cover

コンピュータサイエンス

コンピュータサイエンス

コンピュータシステム設計の原理

Jerome H. Saltzer and M. Frans Kaashoek

英語原題: Principles of Computer System Design: An Introduction

複雑な計算機システムの設計原理を扱うシステム書で、モジュール性、抽象化、階層化、名前付けを軸に据える。印刷版は強制されたモジュール性、仮想化、性能を扱い、耐障害性、原子性、一貫性、ネットワーク、セキュリティはオンラインで配布される第II部にある。

難易度レベル
上級
学術レベル
学部
コンピュータシステムオペレーティングシステムネットワーク抽象化システム設計信頼性

01 / 読書ガイド

読書ガイド

引用

Saltzer, J. H., & Kaashoek, M. F. (2009). Principles of Computer System Design: An Introduction. Morgan Kaufmann.

章の要約

本書は、MIT の科目 6.033「計算機システム工学」(Computer System Engineering)のために四十年余りにわたって書き継がれた講義ノートから生まれた。2部に分けて刊行されている。第I部(第1〜6章)はモーガン・カウフマンから出版された印刷版で、第II部(第7〜11章)は著者と MIT オープンコースウェアが公開教育資源として提供している。全体を貫く主題は、モジュール性の強制である。第I部は一つのモジュールの偶発的な誤りが他へ広がるのを防ぐ方法を、第II部は構成要素の故障や悪意ある攻撃に対するより強いモジュール性を紹介する。エンド・ツー・エンド論のような設計原則には名前が付けられ、使われる箇所で強調され、巻頭に一覧としてまとめられている。

第1章:システム

最初の章は複雑さをシステムの中心問題として扱う。1.1 節は多くの分野のシステムに共通する問題、システム・構成要素・インタフェース・環境、そして複雑さそのものを、1.2 節は複雑さの源(連鎖し相互作用する要求、高い稼働率の維持)を、1.3 節は対処法(モジュール性、抽象化、階層化、階層構造、名前による結合)を扱う。1.4 節は計算機システムが「同じだが異なる」理由(合成に身近な限界がなく、技術変化が前例のないこと)を説明し、1.5 節で反復と単純さによる対処に戻る。

第2章:計算機システムの構成要素

第2章は三つの基本的な抽象、すなわちメモリ、インタプリタ、通信リンクを挙げ(2.1)、計算機システムにおける命名のモデルを展開する。既定の文脈参照と明示的な文脈参照、パス名と再帰的な名前解決、階層化された文脈をまたぐ探索、名前の比較、名前の発見である(2.2)。2.3 節は名前と階層で、ハードウェア層としてのバス、ソフトウェア層としてのファイル抽象を使ってシステムを構成する。事例研究(2.5)は UNIX ファイルシステムを、ブロック層からシンボリックリンク層まで層ごとに分解する。

第3章:命名方式の設計

この章は命名モデルを設計上の考慮事項に変える。モジュール的な共有、メタデータと名前の多重利用、オブジェクトの位置を示す名前としてのアドレス、一意な名前の生成、ユーザに優しい名前、名前・値・束縛の相対的な寿命である。事例研究は URL を扱い、「戦争の体験談」は名前の衝突から電話番号の枯渇まで、名前の使用における実際の病理を集めている。

第4章:クライアントとサービスによるモジュール性の強制

第4章はソフトなモジュール性から強制されたモジュール性へ進み、クライアント/サービス構成、複数のクライアントとサービス、信頼できる仲介者、リモートプロシージャコール(RPC と通常の手続き呼び出しとの違いを含む)を述べる。二つの事例研究は、インターネットのドメインネームシステム(名前解決、階層的な名前管理、応答の信頼性)とネットワークファイルシステム(定義されるリモートプロシージャコール、UNIX ファイルシステムの拡張、コヒーレンス)である。

第5章:仮想化によるモジュール性の強制

第5章は、同じクライアント/サービスの考え方が一台の計算機の内部で仮想化によってどう強制されるかを示す。SEND と RECEIVE と有界バッファによる仮想リンク(競合状態、ロック、前後(before-or-after)動作、デッドロックを含む)、ドメイン・カーネルモードとユーザモード・ゲートによるメモリ内でのモジュール性の強制、ページマップと TLB によるメモリの仮想化(セグメントは発展的話題)、スレッドによるプロセッサの仮想化とその系列調整プリミティブ、そして Intel x86 における強制モジュール性の進化を扱う。最後は仮想マシンである。

第6章:性能

第I部の最終章は性能のための設計を扱う。指標(容量、使用率、遅延、スループット)、ボトルネックに対するシステム的な取り組み方、並行性、待ち行列と過負荷、バッチ処理・遅延・投機である。続いて、参照の局所性、ワーキングセット、ページ除去方針を含む多段メモリと、資源のスケジューリングと方針を、ディスクアームを事例として扱う。

第7〜8章:ネットワーク、耐障害性(第II部)

第7章「システムとして、またシステムの構成要素としてのネットワーク」は、ネットワークの性質、層(リンク層、ネットワーク層、エンド・ツー・エンド層)、輻輳制御、そしてインターネットを Ethernet に対応づける事例研究を扱う。第8章「耐障害性:信頼できない部品から信頼できるシステムを作る」は、故障と障害、信頼性の尺度、能動的な故障の許容、ソフトウェアとデータへの冗長性の適用、CMOS RAM の耐障害モデルを扱う。

第9〜11章:原子性、一貫性、情報セキュリティ(第II部)

第9章は all-or-nothing と before-or-after の二種類の原子性を区別し、それぞれを概念と実践の両面から扱い、続いて層や複数サイトにまたがる原子性を扱う。第10章「一貫性」は制約、キャッシュコヒーレンス、地理的に離れた複製による耐久的な記憶、調停を扱う。第11章「情報セキュリティ」は主体とメッセージの認証、機密性、セキュリティプロトコル、認可、TLS の事例研究、そして侵害の「戦争の体験談」を扱う。

主要概念

第1〜3章:システム、名前、階層化

  • モジュール性、抽象化、階層化、階層構造:複雑さに対処するために本書が示す四つの技法。
  • 命名モデル:名前、文脈、名前解決を一般的な仕組みとして捉える。
  • 三つの基本的な抽象:メモリ、インタプリタ、通信リンク。

第4〜6章:強制されたモジュール性と性能

  • クライアント/サービス構成:モジュールがメッセージだけでやり取りし、誤りが広がらないようにする。
  • 仮想化:スレッド、仮想メモリ、有界バッファは、一台の計算機の中でモジュール性を強制する手段である。
  • ボトルネックとスケジューリング:第6章の性能に関する主題。

第7〜11章:ネットワーク、信頼性、原子性、一貫性、セキュリティ

  • エンド・ツー・エンド論:設計原則の一覧では「アプリケーションが最もよく知っている」と要約されている。
  • all-or-nothing と before-or-after の原子性:トランザクションの二つの性質。
  • 最小権限と完全な仲介:巻頭に挙げられているセキュリティ原則。

批判的分析

長所

  • 原則を先に置いた設計。 出版社は、本書を計算機システム設計に原則に基づくアプローチをとった最初の教科書と位置づけ、オペレーティングシステム、ネットワーク、データベース、分散システムに共通する抽象を用いるとしている。設計原則には名前が付き、定義の箇所で太字になり、使われる箇所で示され、一覧にまとめられる。
  • 分野を横断する事例研究。 事例は、同じ考え方を異なる分野で再利用するように選ばれている。UNIX ファイルシステム、URL、DNS、NFS、x86、ディスクアームのスケジューリング、TLS などで、具体例として擬似コードの断片も添えられている。
  • 評者の見解。 出版社が引用するカリフォルニア大学サンディエゴ校の Joe Pasquale は、通常の「仕組みがどう動くか」ではなく計算機システム設計の原則を扱う、ユニークで野心的で重要な本だと評し、これほど多くの原則を明示している本は知らないと述べている。
  • 無料の補助資料。 第II部、問題集、用語集、索引が MIT オープンコースウェアから無料で入手でき、6.033 の講義資料も併せて提供されている。
  • 来歴のある演習。 演習と問題集は数十年分の試験から集められ、それぞれに年、試験番号、問題番号が付されている。

短所

  • 印刷版は全体の半分にすぎない。 印刷版は第1〜6章のみで、耐障害性、原子性、一貫性、ネットワーク、セキュリティはオンラインの第II部にある。印刷版を買う読者は、オンラインの章も使う前提で考えるべきである。
  • 仕組みの水準で見る OS の教科書ではない。 選ばれた事例を通じて原則を教えるもので、オペレーティングシステムの機構を網羅するものではなく、標準的な OS の教科書の代わりにはならない。
  • 事例は 2009 年当時のもの。 例(NFS、Intel x86、TLS、DNS)は刊行時点のこれらのシステムの状態を反映している。原則は一般的に述べられているが、詳細は現在の実務と照らして確認する必要がある。
  • 第II部は別の版。 無料の章は 5.0 版(2009 年 6 月)と表示され、正誤表は 2022 年 2 月まで更新されており、非営利目的で利用できるライセンスで公開されている。

コースにおける位置づけ

これはシステム設計の本であり、最初の OS の講義用ではない。『Operating System Concepts』と『Modern Operating Systems』は、プロセス、メモリ、ファイルシステム、I/O を順に扱い、実際のシステムの事例を添える伝統的な教科書である。『Operating Systems: Three Easy Pieces』は仮想化・並行性・永続性を扱う無料の語り口の本で、『How Linux Works』は実際のシステムの実用的な案内書である。Saltzer と Kaashoek の第2・4・5章はこれらと重なるが、狙いはそこから設計の考え方(命名、階層化、強制されたモジュール性)を取り出し、ネットワーク、耐障害性、セキュリティへ持ち込むことにある。

これらの教科書のどれかを読んだ後、または並行して読むのが最適で、仕組みの背後にある設計の語彙を求める読者に向く。

本書の使い方

オペレーティングシステム、分散システム、計算機システム設計の科目を履修する学部上級生と、職業的なシステム設計者を対象としている。出版社が挙げる読者像も同じである。

実用的な進め方:

  • 中核: 複雑さの語彙のための第1章、命名のための第2〜3章、強制されたモジュール性のための第4〜5章。
  • その次: 性能の第6章、続いて関心に応じて第II部の各章。ネットワークは第7章、信頼性とトランザクションは第8〜10章、セキュリティは第11章。
  • 発展的話題: 発展的と表示された節(たとえば 5.4.5 のセグメントや 11.7 の認証についての推論)は二度目の読書に回してよい。
  • 参考資料: 設計原則の一覧と用語集を手元に置き、演習と問題集で理解を確かめる。