コンピュータサイエンス

Operating System Concepts(オペレーティングシステムの概念)

Abraham Silberschatz; Peter Baer Galvin; Greg Gagne

英語原題: Operating System Concepts

Operating System Concepts(オペレーティングシステムの概念) cover

プロセス・同期・メモリ・記憶装置を扱うOSの総合教材。複数のプラットフォーム例とプログラミング演習で抽象と実装を結ぶ。

前提知識

CまたはJava、基本データ構造と計算機構成が必要。同期の前に共有状態とスレッド局所状態、排他と順序を分ける。

版
10
出版年
2018
難易度レベル
中級
学術レベル
学部
operating systemsprocessesconcurrencymemory managementfile systems教科書

01 / 読書ガイド

読書ガイド

OS:ロックを選ぶ前に交錯実行を説明する

無料の概念書、小型RISC-Vカーネル、総合参考書を比べ、独自のイベント追跡と同期変更で原子性と順序を区別します。

学習順路・例題の編集責任:University Reading List編集プロジェクト。

引用

Silberschatz, A., Galvin, P. B., & Gagne, G. (2018). Operating System Concepts (10th ed.). Wiley.

章の要約

第10版(2018年4月、Wileyによれば1,040ページ)は9部21章からなる。さらに四つの付録(影響力のあったオペレーティングシステム、Windows 7、BSD UNIX、Machシステム)がある。付録は別にページ付けされており、序文によれば本書のWebサイトで提供されている。

序文は本書を、学部3〜4年次または大学院1年次の入門的なオペレーティングシステムの講義のための教科書と位置づけている。形式的な証明ではなく、直観的な説明、図、例によって概念を示す。例はLinux、Windows、macOS、Solaris、Android、iOSから採られている。各章は練習問題(解答はWebサイトにある)、追加の演習問題、参考文献案内で終わる。

この版は、著者が挙げる四つの動向、すなわちモバイルOS、マルチコアシステム、仮想化、不揮発性メモリによるストレージに沿って形づくられている。

第1部 第1〜2章:はじめに、オペレーティングシステムの構造

オペレーティングシステムとは何で何をするのか、そしてハードウェアの背景を扱う。カーネルで使われるデータ構造の概観も含む。続いて、システムがどう設計・構築されるかを説明する。すなわちサービス、システムコール、リンカとローダ、オペレーティングシステムの構造、GRUBによるブートである。序文によれば、この2章は内部のアルゴリズムに立ち入らず、概観を求める読者に向いている。

第2部 第3〜5章:プロセス、スレッドと並行性、CPUスケジューリング

  • プロセス: 仕事の単位としてのプロセス、そのメモリ配置とプロセス間通信(MachのメッセージパッシングやAndroidのRPCを含む)。
  • スレッド: スレッドと暗黙的スレッド化(フォーク・ジョイン並列、JavaのFuture、Grand Central Dispatch、Intel Threading Building Blocksを含む)。
  • CPUスケジューリング: 基本的なアルゴリズムからマルチコアやNUMAを考慮したスケジューリング、LinuxのCFSスケジューラ、Windows 10まで。

第3部 第6〜8章:同期のための道具、同期の例、デッドロック

以前は一つだった同期の章が二つに分かれた。

  • 第6章は競合状態と一般的な道具を扱う。メモリモデルとメモリバリアからcompare-and-swapやロックフリーのアルゴリズムまでを、特定のAPIに結びつけずに説明する。
  • 第7章はそれらを古典的な同期問題に適用し、POSIXのセマフォ、条件変数、Javaを用いる。
  • 第8章はデッドロックとライブロックを扱い、Linuxのlockdepなどのツールも紹介する。

第4部 第9〜10章:主記憶、仮想記憶

第9章は現代のハードウェアにおけるメモリ管理を扱う。ページング、ページ単位のスワッピング、ARMv8の64ビットアーキテクチャが含まれ、セグメンテーションは削除された。第10章は仮想記憶を扱う。ページフォールト、フレームの割り当て、NUMAでの割り当て、メモリ圧縮、LinuxとWindows 10のメモリ管理が含まれる。

第5部 第11〜12章:大容量記憶装置の構造、入出力システム

第11章はハードディスクと不揮発性メモリ装置を同等に扱う。ドライブのスケジューリング、RAID、クラウドストレージとオブジェクトストレージを取り上げる。第12章は入出力ハードウェア、インターフェース、カーネルの入出力構造、ブロッキングとノンブロッキングの入出力、性能を扱う。

第6部 第13〜15章:ファイルシステムのインターフェース、ファイルシステムの実装、ファイルシステムの内部

  • 第13章: ユーザーから見たファイル、ディレクトリ、保護、メモリマップトファイル。
  • 第14章: ファイルシステムの実装。割り当て方式、性能、ジャーナリング、TRIM、Apple File Systemを含む。
  • 第15章: 前の版の内容をまとめ直した、ファイルシステムの内部に関する新しい章。

第7部 第16〜17章:セキュリティ、保護

セキュリティの章が保護の章の前に置かれるようになった。セキュリティの章は、ランサムウェアなどの現在の脅威、コード例つきのコードインジェクション攻撃、暗号、認証を扱う。アドレス空間配置のランダム化などの防御も取り上げる。保護の章は、リング、アクセス制御、強制アクセス制御、Linuxのケーパビリティ、サンドボックス、コード署名、Javaのスタック検査を扱う。

第8部 第18〜19章:仮想マシン、ネットワークと分散システム

第18章は、仮想化の技法とハードウェア支援、コンテナ、Docker、Kubernetes、そしてユニカーネルなどの最近の研究を扱う。第19章はTCP/IPに焦点を当てたネットワークを扱う。あわせて、Google File SystemやHadoopなどの分散ファイルシステムを含む分散システムも取り上げる。

第9部 第20〜21章:Linuxシステム、Windows 10

本書の概念を完全なシステムに当てはめる二つの事例研究である。Linuxの章は、歴史、設計原理、カーネルモジュール、プロセス管理、スケジューリング、メモリ管理、ファイルシステム、入出力、プロセス間通信、ネットワーク、セキュリティを扱う。

主要概念

第1〜2部:構造とプロセス

  • システムコールとカーネルの構造:プログラムがサービスを要求する方法と、オペレーティングシステムを構成し構築するさまざまな方法。
  • プロセスとスレッド:仕事の単位と、その中の実行の単位、そしてプロセス間の通信。
  • CPUスケジューリング:次に実行するスレッドを選ぶ方針で、マルチコアやNUMAの影響も含む。

第3部:同期

  • 競合状態とクリティカルセクション:共有データへの並行アクセスに調整が必要な理由。
  • 同期のための道具:ロック、セマフォ、モニタ、条件変数、そしてロックフリーのcompare-and-swap。
  • デッドロックとライブネス:プロセスが永遠に待ち続ける条件と、それを防止、回避、検出する方法。

第4〜6部:メモリ、ストレージ、ファイル

  • ページングと仮想記憶:仮想メモリから物理メモリへの対応づけ、デマンドページング、ページ置換。
  • 大容量記憶と入出力:ディスクと不揮発性メモリ装置、スケジューリング、RAID、カーネルの入出力サブシステム。
  • ファイルシステムの実装:割り当て、ディレクトリ、ジャーナリング、性能。

第7〜9部:セキュリティ、発展的な話題、事例研究

  • セキュリティと保護:攻撃からの防御と、資源へのアクセスの制御。
  • 仮想マシンとコンテナ:共有されたハードウェアの上で隔離された環境を動かすこと。
  • 事例研究:概念の完全な例としてのLinuxとWindows 10。

批判的分析

長所

  • 概念が先、システムは例。 序文は、特定のオペレーティングシステムに縛られない一般的な文脈で概念を示すことを目標に掲げている。それを現在のデスクトップ、サーバー、モバイルのシステムから採った多くの例で説明する。そのため、講義が実習にどのシステムを使っていても本書を利用できる。
  • 最新化された版。 序文はすべての章について主な改訂を挙げている。マルチコア、モバイル、ARMの扱いの拡大、ソリッドステートのストレージ、メモリモデルやロックフリーのアルゴリズムを含めて分割・拡充された同期の扱い、コンテナとKubernetesなどである。
  • 三つの環境によるプログラミング。 例はC言語によるPOSIXとPthreads、Java、Windows APIを用いており、ときには同じ処理(スレッドの生成など)を三つすべてで示す。ダウンロードできるUbuntuの仮想マシンがプログラミング課題を支え、課題の中にはLinuxのカーネルモジュールを書くものもある。
  • 充実した学習支援。 本書のWebサイトから、オンラインに解答がある練習問題、追加の演習問題、復習問題、学生向けの学習ガイド、スライド、講義計画の例が入手できる。
  • 2024年秋学期の講義で使用。 後述のオクラホマ大学とコロラド州立大学の講義は、いずれも第10版を指定している。

短所

  • 証明ではなく直観。 著者は形式的な証明の大部分を意図的に省き、代わりに図や例を用いて研究論文を案内している。たとえば同期の正しさについて厳密な扱いを求める学生には、別の資料が必要である。
  • 分量。 1,000ページを超える本書は、講義の教科書であると同時に参考書でもある。序文は章を順番に進めることを勧めているが、章を選ぶための講義計画の例も示している。
  • 前提知識。 序文は基本的なデータ構造、計算機構成、C言語への慣れを前提としている。Cに不慣れな読者には、プログラミングの例は難しく感じられるだろう。
  • 概説書であって実習書ではない。 本書は古典的な概説型の教科書である。そのため講義では、本書に含まれないシステムプログラミングの課題やプロジェクトと組み合わせることが多い。実践的な作業の多くは、講義独自の課題が担うと考えておくこと。
  • 版のずれ。 2024年のシラバスにも第9版と第10版の両方が現れ、章番号も内容も異なる。たとえば第10版では同期が二つの章に分かれ、セグメンテーションが削除されている。章番号に従う前に、講義がどの版を指定しているかを確認すること。
  • 形態。 著者のWebサイトによれば、第10版は電子版単体、あるいは要約版の印刷物とのセットとして販売されている(Wileyは後にルーズリーフ版も出している)。完全な印刷版を求める読者は、どの版を買うのかを確認する必要がある。

コースにおける位置づけ

本書は、オペレーティングシステムの講義で広く使われる主教科書の一つである。最近のシラバスでも、標準的な入門科目の教科書として使われている。2024年秋学期には、オクラホマ大学とコロラド州立大学の講義が第10版を、テキサス大学ダラス校の講義が第9版を指定している(詳細は下の「講義での一般的な課題指定」を参照)。

TanenbaumとBosの Modern Operating Systems は、同等の標準的教科書である。Linux、Android、Windowsの詳しい事例研究に原理を根づかせている。どちらを主教科書にしても、もう一方を別の説明として使える。

Arpaci-Dusseau夫妻の無料の Operating Systems: Three Easy Pieces は、仮想化、並行性、永続性を軸に分野を組み立てている。特に並行性について別の角度から学びたい学生によい副読本となる。

Wardの How Linux Works は実践的な副読本である。第2章、第3章、第9〜14章、第20章の概念が、実際に動いているLinuxマシンのどこに現れ、どう調べられるかを示す。

SaltzerとKaashoekの Principles of Computer System Design は、より広くコンピュータシステムの設計原理を扱う後の講義に向いている。

本書の使い方

本書は、3〜4年次のコンピュータサイエンスの学部生(序文が示す水準)、大学院1年生、そしてオペレーティングシステムの体系的な解説を求める実務家に向いている。データ構造、計算機構成、C言語を身につけてから取り組むこと。

1学期の講義のための実際的な読み方:

  • 中核: 第1〜7章(概観、プロセス、スレッド、スケジューリング、同期)、第8章(デッドロック)、第9〜10章(メモリ)、第13〜14章(ファイルシステム)。これらが主要な概念とプログラミング課題の大部分を担う。
  • ストレージと入出力: 第11〜12章。特にシステムの性能に関心のある学生に。
  • 任意または2つ目の講義: ファイルシステムの内部、セキュリティ、保護、仮想化、分散システムを扱う第15〜19章。
  • 事例研究: 講義でLinuxを使ってプログラミングするなら第20章を中核の章と並行して、Windowsを使うなら第21章を読む。歴史的なシステムに関するオンライン付録は興味に応じて。

各章末の練習問題を解き、Webサイトの解答と照らし合わせること。Linuxの仮想マシンは早めにインストールし、プログラミング課題に取り組むこと。プロセス、スレッド、同期、メモリ管理は、主に自分でプログラムを書くことで理解できるようになるからである。復習には学習ガイドを手元に置いておくとよい。

講義での一般的な課題指定

オクラホマ大学 CS 3113 Intro to Operating Systems(2024年秋学期、第10版、ISBN-13 978-1-119-32091-3)。 これは本ガイドが扱う版と同じISBNである。暫定的な週ごとの予定は、上の中核の読み方にほぼ沿っている。

  • 第1週:第1章、OSの概観
  • 第3週:第2章、OSの構造。プロセス
  • 第4週:第3章、プロセス間通信
  • 第5週:第4章、スレッド
  • 第6週:第5章、CPUスケジューリング
  • 第7週:第6章、同期、セマフォ、クリティカルセクション
  • 第8週:第7章、モニタとアトミックトランザクション
  • 第9〜10週:第8章、デッドロック
  • 第11〜12週:第9章、メモリ管理、ページング、セグメンテーション
  • 第13週:第10章、仮想記憶
  • 第14週:ファイル管理

この暫定予定はメモリ管理とファイル管理で終わっており、後半の部は挙げていない。また、第9章の下のセグメンテーションなど、一部の項目名は以前の版の見出しのように読める。上で述べたとおり、第10版ではこの章からセグメンテーションが削除されているので、この話題については講義ノートを使うこと。

コロラド州立大学 CS370 Operating Systems(2024年秋学期)。 CSUは第10版を、Wileyの電子版パッケージ(ISBN-13 978-1119127482)として指定している。シラバスのページは成績評価と前提科目を中心としており、週ごとの読む順序は示されていない。

テキサス大学ダラス校 CS/SE 4348 HON(2024年秋学期)。 UTDは第9版(ISBN 978-1-118-06333-0)を指定している。挙げられている話題は、プロセス管理、メモリ、仮想記憶、入出力、ファイルシステム、クリティカルセクション、デッドロックである。これは本ガイドとは版が一致しない。第9版の章番号は第10版の章番号と対応していない。このような講義を受けている場合は、指定された話題を番号ではなく内容によって第10版の章に対応させること。

焦点を絞った読み方と版の区別

以下の課題には、当サイト独自の関連例題の条件とデータを使います。先に問題文を確認してください。

読む範囲: 2018年第10版のプロセス/スレッド、同期、必要なメモリ管理を章題で選ぶ。

先に試す課題: 相互排他、順序、進行を問題で別々に検討。 確認基準: 排他は重複を防いでも、先行操作やスケジューリング方針を決めない。

版と利用範囲: ISBN 9781119320913はWileyの電子版で、上記のオクラホマ大学の講義が指定するISBNと一致します。第10版の他のバンドルや紙版補助は別の識別番号を持ちます。たとえば上記のコロラド州立大学の講義が指定する電子版パッケージは978-1119127482です。2024年の講義でも第9版(978-1-118-06333-0)を指定するものがあります。指定されたものと照合してください。

出版社の書籍ページ(Wiley)