Software Design plusシリーズはじめてのOSコードリーディング
――UNIX V6で学ぶカーネルのしくみ

書籍の概要

この本の概要

本書は,Sixth Edition UNIX(UNIX V6)を題材に,OSの全体像をひととおり解説します。
UNIX V6は1975年にベル研究所からリリースされたOSですが,近年のOSにも通じる,OSの基本的なアイディアが詰まっており,デバイスドライバも含めて約10,000行という,カーネルの全体を理解するのが難しくないボリュームに収まっています。 UNIX V6で基本的な動作が理解できていれば,新しいOSにたどっていくことも可能となります。
本書を通してカーネルのソースコードを読み解くことで,コンピュータシステムの全体像が理解できるようになるでしょう。

こんな方におすすめ

  • 情報系学生
  • 初級~中級ソフトウェアエンジニア
  • コンピュータシステムの全体像を理解してみたい方
  • OS,とくにカーネルのしくみを学びたい方

著者の一言

本書はUNIX V6カーネルの解説書です。UNIX V6は古いOSではありますが,カーネルのコード量が少なく,ロジックがシンプルなため,OS初学者の人が初めて読むカーネルのソースコードとしてはうってつけだと思います。カーネルはコンピュータシステムの中核を成すものだと言え,カーネルを理解すれば,コンピュータに対する造詣が深まり,技術力の意欲向上にもつながるでしょう。私もUNIX V6のカーネルを読んでから,コンピュータに対する理解が深まり,世界が広がった感覚を味わっています。そのような感覚をぜひ読者の皆様にも味わっていただきたく,本書を執筆しました。

目次

  • はじめに

第I部 UNIX V6とは
第1章 UNIX V6の全体像

  • 1.1 UNIX V6とは
  • 1.2 UNIXの歴史
  • 1.3 UNIX V6のカーネル
  • 1.4 UNIX V6を構成するハードウェア
  • 1.5 ソースコード
  • 1.6 マニュアル
  • 1.7 まとめ

第II部 プロセス
第2章 プロセス

  • 2.1 プロセスの概要
  • 2.2 proc構造体とuser構造体
  • 2.3 プロセスに割り当てられるメモリ
  • 2.4 まとめ

第3章 プロセスの制御

  • 3.1 プロセスのライフサイクル
  • 3.2 プロセスの生成
  • 3.3 実行プロセスの切り替え
  • 3.4 プログラムの実行
  • 3.5 プロセスの終了
  • 3.6 データ領域の拡張
  • 3.7 メモリとスワップ領域の管理
  • 3.8 まとめ

第4章 スワッピング

  • 4.1 スワッピングとは
  • 4.2 テキストセグメントの共有処理
  • 4.3 まとめ

第III部 割り込み
第5章 割り込み・トラップ

  • 5.1 割り込み・トラップとは
  • 5.2 優先度とベクタ
  • 5.3 割り込み・トラップの処理の流れ
  • 5.4 クロック割り込みハンドラ
  • 5.5 トラップハンドラ
  • 5.6 システムコールの処理の流れ
  • 5.7 まとめ

第6章 シグナル

  • 6.1 シグナルとは
  • 6.2 トレース
  • 6.3 まとめ

第IV部 ブロックI/Oシステム
第7章 ブロックデバイスサブシステム

  • 7.1 デバイスの基礎
  • 7.2 ブロックデバイスサブシステム
  • 7.3 バッファの初期化
  • 7.4 バッファの取得と解放
  • 7.5 読み込み
  • 7.6 書き込み
  • 7.7 RAW入出力
  • 7.8 まとめ

第8章 ブロックデバイスドライバ

  • 8.1 ブロックデバイスドライバとは
  • 8.2 RK-11ディスクドライバ
  • 8.3 まとめ

第V部 ファイルシステム
第9章 ファイルシステム

  • 9.1 ファイルシステムとは
  • 9.2 ブロックデバイスの領域
  • 9.3 マウント
  • 9.4 inodeの取得・解放
  • 9.5 inodeからストレージ領域へのマッピング
  • 9.6 ブロックデバイスのブロック割り当て
  • 9.7 パス名からinodeへの変換
  • 9.8 初期化と同期
  • 9.9 まとめ

第10章 ファイル操作

  • 10.1 ユーザプログラムのファイル操作
  • 10.2 3つの構造体
  • 10.3 ファイルの新規作成とオープン
  • 10.4 ファイルの読み込み・書き込み
  • 10.5 ファイルのシーク
  • 10.6 ファイルのクローズ
  • 10.7 ディレクトリの作成
  • 10.8 ファイルのリンク
  • 10.9 ファイルの削除
  • 10.10 まとめ

第11章 パイプ

  • 11.1 パイプとは
  • 11.2 パイプ通信の開始
  • 11.3 データのやりとり
  • 11.4 パイプ通信の終了
  • 11.5 パイプ通信を確立するまでの流れ
  • 11.6 まとめ

第VI部 キャラクタI/Oシステム
第12章 キャラクタデバイス

  • 12.1 キャラクタデバイスドライバ
  • 12.2 LP11デバイスドライバ
  • 12.3 まとめ

第13章 テレタイプ端末

  • 13.1 テレタイプ端末とは
  • 13.2 端末のオープン・クローズ
  • 13.3 端末の設定
  • 13.4 端末からの文字入力
  • 13.5 入力されたデータの読み込み
  • 13.6 端末への出力
  • 13.7 まとめ

第VII部 システムの起動
第14章 システムの起動

  • 14.1 起動の流れ
  • 14.2 まとめ

付録 参考資料など

  • A.1 参考文献・サイト
  • A.2 pre K&R C
  • あとがき

著者プロフィール

青柳隆宏(あおやぎたかひろ)

新潟大学工学部機能材料工学科卒業。東京工業大学大学院情報理工学研究科計算工学専攻修了。現在はプロセッサの設計に従事。
メールアドレスはv6@gachapin.jp。

なお,本書の内容は著者が属する組織とは一切関係ありません。著者の個人活動の中で執筆されたものです。