冬学期
「オペレーティングシステム」講義案内

田浦健次朗

What's New

常時追加・更新中. 新しいものが上.お知らせなど随時掲載しますので, ちょくちょく「再読み込み」してください.

目次

配布資料とスライド

授業で使う予定のスライド. ただし変更があるかもしれません.

オペレーティングシステム(OS)とは

すでに自宅などでパソコンを使っている人は多いと思います.マイクロソ フトのWindowsという製品名はほとんどの人が聞いたことがあるでしょう. Linuxというのももはや新聞に載る単語になりました.これらはみなオペレー ティングシステムの実例です.通な人は"Solaris"というOSもある ことを知っているでしょう.

OSはコンピュータを動かすにあたって,最も基本的なソフトウェアです. OSの厳密な「定義」は難しく,左のような言い方でごまかすのが普通です.OS が何か?という問いに対する短い答えを追い求める代わりに,OSのないコン ピュータとそうでないコンピュータの(その上の応用ソフトウェアを作る人の 立場から見た)違いについて簡単に触れるのが有益かと思います.

なぜオペレーティングシステムを学ぶのか?

卒業論文,またはその後の研究において,オペレーティングシステムその ものや,ネットワーキング(インターネット),プログラミング言語,セキュ リティ,並列・分散計算など,その他あらゆる,コンピュータの基盤に関わる 研究をしたいと思っている人は,迷わずオペレーティングシステムを学ぶべき です.オペレーティングシステムを学ぶことは,大雑把に言って,コンピュー タソフトウェアが根本的なところで「どう動くか」を学ぶことと同じです.

私はコンピュータのシステムそのものの勉強がしたいのではなく,コンピュー タを使った情報処理(自然言語,画像,音声,etc.)ができればそれで満足だ, 細かいOSの機能などはどうでもよい,という人もいることでしょう.そのよう な人にも,単位を取る以上の動機付けをあたえるとすると以下のようになるで しょう.

OSを学ぶ気になったでしょうか?

講義の進め方

普通の講義と同様,教室での講義をすることになると思います.ただし, OSは黒板の上で説明するだけで面白いものではありません.OSを学ぶのは,コ ンピュータの最もweirdな(「変な」)部分を学ぶことですから,コンピュータ にたくさんさわらずに,あるいはさわったとしても,メールやWEBを使うだけ ではOSを「体感」することはできません(これはOSの役割が「縁の下の力持ち」 でることを考えれば当たり前です).したがって,ときおりプログラミング演 習的な要素を取り入れる予定です.

単位も普通に試験で行うことになるでしょ うが,これもOSは筆記試験だけで出来を決めるのは,体育の試験を筆記試験で やるのに近いものを感じます.そこで,プログラミング演習で力作を課して, その出来によっては試験を免除するということも考えています.詳細は授業中 にお知らせします(どんなことが行われたかは以下 を見ると少しはわかるでしょう).要するにプログラミングのためにコン ピュータを長時間触る(コンピュータ好きがコンピュータに「ハマル」)機会を 作りたいと考えています.

また,もうひとつの選択肢として,授業の最後の方の時間を利用して,少 し高度な内容を本や論文から調べて,発表してもらうという時間を作りました. ちょっと高度すぎたかも知れませんが,同様の主旨の企画は今年も作ろうかと 思っています.

単位のとり方

試験勉強の方が楽かもしれないが,興味・意欲のある人の取り組みを歓迎しま す.

教科書・参考書

特定の教科書は使いません.以下は私が参考にする本で,興味があれば入 手してください.図書に推薦してありますので,おそらく図書に入荷すると思 います(入荷していなかったら知らせてください).どれか一冊読んでみたいが, 迷っている人は1. を見るとよいと思います.このリストは今後も更新してい きます.以下のいくつかの本には邦訳が出ています.英語で読むことをお勧め しますが,もし興味があれば探ってみてください.

  1. Silberschatz et al.
    Operating System Concepts Ninth Edition (ISBN 0471694665)
    大部な名著です.名著ですがちと高すぎます...
  2. Silberschatz et al.
    Applied Operating System Concepts (Windows Xp Update) (ISBN 0471263141)
    内容的にはほぼ,Operating System Conceptsと同一ですが,Windows XPなどに関するCase Studyが充実しています.
  3. D.M. Dhamdhere
    Operating Systems (ISBN-10: 0070611947, ISBN-13: 978-0070611948)
    基礎的な内容から,マルチプロセッサ,分散システムまで充実した内容.
  4. Andrew S. Tanenbaum
    Modern Operating Systems (ISBN 0136386776)
    古典的な話と,分散システムの話を広くカバーしている
  5. Andrew S. Tanenbaum and Albert S. Woodhull
    Operating Systems: Design and Implementation, second edition (ISBN 0135881870)
    Minixという小さなOSを,ソースコードを掲載しながら細部まで説明している.
  6. 前川守
    オペレーティングシステム (ISBN 4000103466)
    日本語の大部な教科書.
  7. 野口健一郎
    オペレーティングシステム (ISBN 4274132501)
    薄めの要点解説的な教科書.
    以下は,いわゆる一般的なOSの教科書ではありませんが,興味を持つ人も いるでしょう.
  8. Gary Nutt.
    Kernel Projects for Linux (ISBN 0201612437)
    邦訳: 実習Linuxカーネル 理論と実習 カーネルを効率的に理解するための実習書 (ISBN 4894714566)
    ここにある数々のプログラミング課題がすべてできれば,授業に出る必要はない.
  9. Beck et al.
    Linux Kernel Programming (ISBN 0201719754)
    Linuxカーネルについての詳細な解説
  10. Uresh Vahalia
    UNIX Internals The New Frontiers (ISBN 0-13-101908-2)
    UNIXについての詳細な解説
  11. Jim Mauro and Richard Mc Dougall
    Solaris Internals Core Kernel Architecture (ISBN 0-13-022496-0)
    Solaris (UNIXの一種)についての詳細な解説.
  12. Remy Card, Eric Dumas, and Franck Mevel
    The Linux Kernel Book (ISBN 0471981419)
    Linuxについての詳細な解説.
  13. W. Richard Stevens
    Advanced Programming in the UNIX Environment (ISBN 0-201-56317-7)
    UNIXの,内部ではなくシステムコール(API)を解説.システムプログラマとしての 腕を上げたい人向き.

講義項目(予定)

  1. 概論
    1. 「裸の」コンピュータ
      1. CPU
      2. メモリ
      3. 入出力機器
    2. プログラマから見たOS: 基本概念
      1. CPUの抽象化: スレッドとプロセス
      2. メモリの抽象化: アドレス空間
      3. 外部記憶装置の抽象化: ファイルシステム
      4. ネットワークの抽象化: ソケット
  2. プロセスとスレッド
    1. 提供される抽象化
      1. スレッド,プロセス
      2. シグナル
    2. C言語と機械語
    3. 事例: i386, SPARC, Alpha, IA64
    4. CPUの多重化: コルーチンの実現法
    5. 割り込み
    6. スレッドの状態
    7. CPUの割り当てアルゴリズム
  3. 仮想記憶
    1. 提供される抽象化: アドレス空間
    2. 物理アドレスと論理アドレス
    3. ページ表とTLB
    4. ページング
    5. ページ置換アルゴリズム
  4. 仮想記憶プリミティブとその応用
    1. ページ保護のためのAPI
    2. チェックポインティング
    3. 効率的な自動メモリ管理
  5. ファイルシステム
    1. 提供される抽象化
      1. ドライブ,ディレクトリ,ファイル
      2. open/read/write
      3. ファイルのメモリへのマッピング
      4. アクセス制御
      5. 権限委譲
    2. 空き領域管理
    3. ディスクのスケジューリング

過去の発表 (の不完全なリスト)

最近(2012年度末)になってようやくまとめました. もし過去にこの授業で発表をした人がこのページをたまたまおとずれ, 自分の名前が無いことを発見したら, 気を悪くせず, 発表資料を 田浦まで送って下さい. 資料がない場合でも(過去の記録を真面目に持っていないので) 発表したという事実と年度をお送り下さい. むしろ最近のものが欠けている.