4.4BSDの設計と実装
アスキー
監訳者まえがき
はじめに
著者について
第1部 概要
第1章 歴史と目標
1.1 UNIXシステムの歴史
1.1.1 起源
1.1.2 研究版UNIX
1.1.3 AT&T UNIX System IIIとSystem V
1.1.4 他の組織
1.1.5 バ ークレイソフ トウェアディス トリビューシヨン
1.1.6 世界におけるUNIX
1.2 BSDと他のシステム
1.2.1 ユーザコミュニティによる影響
1.3 4BSDの設計目標
1.3.1 4.2BSDの設計目標
1.3.2 4.3BSDの設計目標
1.3.3 4.4BSDの設計目標
1.4 リリースエンジエアリング
1.4.1 参考文献
第2章 4.4BSDの設計の概要
2.1 4.4BSDの機能とそのカーネル
2.1.1 カーネル
2.2 カーネルの構成
2.3 カーネルサービス
2.4 プロセス管理
2.4.1 シグナル
2.4.2 プロセスグループとセッション
2.5 メモリ管理
2.5.1 BSDメモリ管理のデザイン決定
2.5.2 カーネル内部のメモリ管理
2.6 I/Oシステム
2.6.1 記述子とI/O
2.6.2 ファイル記述子の管理
2.6.3 デバイス
2.6.4 ソケットIPCc
2.6.5 I/Oのスキャッタリングとギャザリング
2.6.6 複数のファイルシステムのサポート
2.7 ファイルシステム
2.8 ファイルストア
2.9 ネットワークファイルシステム
2.10 端末
2.11 プロセス間通信
2.12 ネットワーク通信
2.13 ネットワーク実装
2.14 システム操作
2.14.1 練習問題
2.14.2 参考文献
第3章 カーネルサービス
3.1 カーネルの構成
3.1.1 システムプロセス
3.1.2 システムエントリ
3.1.3 ランタイムの構造
3.1.4 カーネルヘのエントリ
3.1.5 カーネルからのリターン
3.2 システムコール
3.2.1 結果の取り扱い
3.2.2 システムコールからの帰還
3.3 トラップと割り込み
3.3.1 トラップ
3.3.2 I/Oデバイス割り込み
3.3.3 ソフトウェア割り込み
3.4 クロック割り込み
3.4.1 統計情報の収集とプロセススケジューリング
3.4.2 タイムアウト
3.5 メモリ管理サービス
3.6 タイミングサービス
3.6.1 リアルタイム
3.6.2 時刻の調整
3.6.3 外部表現
3.6.4 イ ンターバルタイマ
3.7 ユ ーザー、グループ、その他の識別子
3.7.1 ホスト識別子
3.7.2 プロセスグループとセッション
3.8 リソースサービス
3.8.1 プロセス優先度
3.8.2 リソースの利用
3.8.3 リソースの制限
3.8.4 ファイルシステムクォータ
3.9 システムオペレーションサービス
3.9.1 アカウンティング
3.9.2 練習問題
3.9.3 参考文献
第2部 プロセス
第4章 プロセス管理
4.1 プロセス管理の概要
4.1.1 マルチプログラミング
4.1.2 スケジューリング
4.2 プロセスの状態
4.2.1 プロセス構造体
4.2.2 ユーザー構造体
4.3 コンテキストスイッチング
4.3.1 プロセス状態
4.3.2 低レベルコンテキストスイッチング
4.3.3 自発的コンテキストスイッチング
4.3.4 同期
4.4 プロセススケジューリング
4.4.1 プロセスプライオリティの算定
4.4.2 プロセスプライオリティルーチン
4.4.3 実行キューの処理とコンテキストスィッチング
4.5 プロセス生成
4.6 プロセスの終了
4.7 シグナル
4.7.1 POSIXシグナルとの比較
4.7.2 シグナルのポスト
4.7.3 シグナルの配送
4.8 プロセスグループとセッション
4.8.1 セッション
4.8.2 ジョブコントロール
4.9 プロセスのデバッグ
4.9.1 練習問題
4.9.2 参考文献
第5章 メモリ管理
5.1 用語
5.1.1 プ ロセスとメモリ
5.1.2 ページング
5.1.3 置き換えアルゴリズム
5.1.4 ワーキングセットモデル
5.1.5 スワッピング
5.1.6 仮想メモリの利点
5.1.7 仮想メモリに必要なハードウェア
5.2 4.4BSD仮想メモリシステムの概観
5.3 カーネルメモリ管理
5.3.1 カーネルマップとサブマップ
5.3.2 カーネルアドレス空間の割り当て
5.3.3 カーネル内malloc
5.4 プロセス資源
5.4.1 4.4BSDのプロセスの仮想アドレス空間
5.4.2 ページフォルトの処置
5.4.3 オブジェクトヘのマッピング
5.4.4 オブジェクト
5.4.5 オブジェクトからページヘ
5.5 共有メモリ
5.5.1 mmapモデル
5.5.2 共有マッピング
5.5.3 プライベートマッピング
5.5.4 シャドウオブジェクトの折りたたみ
5.5.5 プライベートスナップショット
5.6 プロセスの新規生成
5.6.1 カーネル資源の予約
5.6.2 ユーザーアドレス空間の複製
5.6.3 コピーしない新しいプロセスの生成
5.7 ファイルの実行
5.8 プロセスのアドレス空間の操作
5.8.1 プロセスの大きさの変更
5.8.2 ファイルマッピング
5.8.3 保護の変更
5.9 プロセスの終結
5.10 ページャインターフェイス
5.10.1 vノードペ ージャ
5.10.2 デバイスページャ
5.10.3 スワツプページャ
5.11 ページング
5.12 ページの置き換え
5.12.1 ページングパラメータ
5.12.2 ページアウトデーモン
5.12.3 スワッピング
5.12.4 スワップイン処理
5.13 移植性
5.13.1 pmapモジュールの役割
5.13.2 初期化と起動
5.13.3 マッピングの割り当てと解放
5.13.4 マッピングの保護および固定属性の変更
5.13.5 ページ利用情報の管理
5.13.6 物理ページの初期化
5.13.7 内部データ構造の管理
5.13.8 練習問題
5.13.9 参考文献
第3部 入出カシステム
第6章 入出カシステムの概観
6.1 ユーザーからデバイスヘの入出力のマッピング
6.1.1 デバイスドライバ
6.1.2 入出力のキューイング
6.1.3 割り込み処理
6.2 ブロックデバイス
6.2.1 ブロックデバイスドライバのエントリポイント
6.2.2 ディスク入出カリクエストのソート
6.2.3 ディスクラベル
6.3 キャラクタデバイス
6.3.1 rawデバイスと物理I/O
6.3.2 キャラクタ指向デバイス
6.3.3 キャラクタデバイスドライパのエントリポイント
6.4 記述子の管理およびサービス
6.4.1 オープンファイルエントリ
6.4.2 記述子の管理
6.4.3 ファイル記述子のロック
6.4.4 記述子に対する入出力の多重化
6.4.5 Selectの実装
6.4.6 カーネル内のデータ移動
6.5 仮想ファイルシステムインターフェイス
6.5.1 vノードの構成
6.5.2 vノード操作
6.5.3 パス名の変換
6.5.4 エクスポートしたファイルシステムのサービス
6.6 ファイルシステム独立サービス
6.6.1 名前キャッシュ
6.6.2 バッファ管理
6.6.3 バッファ管理機構の実装
6.7 スタッカブルファイルシステム
6.7.1 シンプルファイルシステムレイヤ
6.7.2 unionマウントファイルシステム
6.7.3 他のファイルシステム
6.7.4 練習問題
6.7.5 参考文献
第7章 ローカルファイルシステム
7.1 階層的ファイルシステム管理
7.2 iノードの構造
7.2.1 iノード管理
7.3 名前
7.3.1 ディレクトリ
7.3.2 ディレクトリ内での名前の検索
7.3.3 パス名変換
7.3.4 リンク
7.4 クォータ
7.5 ファイルロック
7.6 ファイルシステムにおける他のセマンティクス
7.6.1 大きなファイルサイズ
7.6.2 ファイルのフラグ
7.6.3 練習問題
7.6.4 参考文献
第8章 ローカルファイル格納形式
8.1 ファイル格納形式の概観
8.2 バークレイ高速ファイルシステム
8.2.1 バークレイ高速ファイルシステムの構成
8.2.2 格納領域の使用効率の最適化
8.2.3 ファイルに対する読み書き
8.2.4 ファイルシステムのパラメータ
8.2.5 配置ポリシー
8.2.6 割り当て機構
8.2.7 ブロックのクラスタ化
8.2.8 同期操作
8.3 ログ構造型ファイルシステム
8.3.1 ログ構造型ファイルシステムの構成
8.3.2 インデックスファイル
8.3.3 履歴の読み出し
8.3.4 履歴の書き出し
8.3.5 ブロックのアカウンティング
8.3.6 バッファキャッシュ
8.3.7 ディレクトリ操作
8.3.8 ファイルの生成
8.3.9 ファイルに対する読み書き
8.3.10 ファイルシステムのクリーニング
8.3.11 ファイルシステムのパラメータ
8.3.12 ファイルシステムの障害からの回復
8.4 メモリベースファイルシステム
8.4.1 メモリベース型ファイルシステムの構成
8.4.2 ファイルシステムのパフォーマンス
8.4.3 将来への展望
8.4.4 練習問題
8.4.5 参考文献
第9章 ネットワークフアイルシステム
9.1 歴史そして全体像
9.2 NFSの構造と運用
9.2.1 NFSプロトコル
9.2.2 4.4BSDのNFS実装
9.2.3 クライアントーサーバ間の対話
9.2.4 RPCトランスポート
9.2.5 セキュリティ
9.3 性能向上手法
9.3.1 リース
9.3.2 障害からの復帰
9.3.3 練習問題
9.3.4 参考文献
第10章 端末デバイス処理
10.1 端末処理モード
10.2 回線制御規則
10.3 ユーザーインターフェイス
10.4 tty構造体
10.5 プロセスグループ、セッション、端末制御
10.6 Cリスト
10.7 RS-232およびモデム制御
10.8 端末操作
10.8.1 オープン
10.8.2 出力回線制御規則
10.8.3 出力上位部
10.8.4 出力下位部
10.8.5 入力下位部
10.8.6 入力上位部
10.8.7 停止ルーチン
10.8.8 ioctlルーチン
10.8.9 モデム状態遷移
10.8.10 端末デバイスのクローズ
10.9 さまざまな回線制御規則
10.9.1 シリアル回線IP(SLIP)規約
10.9.2 グラフィックタブレット回線制御規則
10.9.3 練習問題
10.9.4 参考文献
第4部 プロセス間通信
第11章 プロセス間通信
11.1 プロセス間通信モデル
11.1.1 ソケットの使用
11.2 実装の構造とその概要
11.3 メモリ管理
11.3.1 mbuf
11.3.2 格納管理アルゴリズム
11.3.3 mbufユーティリティルーチン
11.4 データ構造
11.4.1 通信ドメイン
11.4.2 ソケット
11.4.3 ソケットアドレス
11.5 コネクションの確立
11.6 データ転送
11.6.1 データ送信
11.6.2 データの受信
11.6.3 アクセス権限の受け渡し
11.6.4 ローカルドメイン内でのアクセス権の送付
11.7 ソケットシャットダウン
11.7.1 練習問題
11.7.2 参考文献
第12章 ネットワーク通信
12.1 内部データ構造
12.1.1 データフロー
12.1.2 通信プロトコル
12.1.3 ネットワークインターフェイス
12.2 ソケット-プロトコル間インターフェイス
12.2.1 プロトコルユーザー要求ルーチン
12.2.2 内部リクエスト
12.2.3 プロトコル制御出カルーチン
12.3 プロトコル-プロトコルインターフェイス
12.3.1 pr_output
12.3.2 pr_input
12.3.3 pr_ctlinput
12.4 プロトコルとネットワークインターフェイスの間のインターフェイス
12.4.1 パケット送信
12.4.2 パケット受信
12.5 経路制御
12.5.1 カーネルルーティングテーブル
12.5.2 ルーティングルックアップ
12.5.3 ルーティングリダイレクト
12.5.4 ルーティングテーブルインターフエイス
12.5.5 ユーザーレベルルーティングポリシー
12.5.6 ユーザーレベルルーティングインターフェイス:ルーティングソケット
12.6 バッファリングと輻輳制御
12.6.1 プロトコルバッファリングポリシー
12.6.2 キューの制限
12.7 rawソケット
12.7.1 制御ブロック
12.7.2 入力処理
12.7.3 出力処理
12.8 こ れ以外のネットワークサブシステムにおける話題
12.8.1 バンド外データ
12.8.2 アドレス解決プロトコル
12.8.3 練習問題
12.8.4 参考文献
第13章 ネットワークプロトコル
13.1 インターネットネットワークプロトコル
13.1.1 インターネットアドレス
13.1.2 サブネット
13.1.3 ブロードキャストアドレス
13.1.4 インターネットマルチキャスト
13.1.5 インターネットポー ト番号とその関連付け
13.1.6 プロトコル制御ブロック
13.2 ユーザーデータグラムプロトコル(UDP)
13.2.1 初期化
13.2.2 出力処理
13.2.3 入力処理
13.2.4 コントロール操作
13.3 インターネットプロ トコル(IP)
13.3.1 出力処理
13.3.2 入力処理
13.3.3 フォワーディング処理
13.4 伝送制御プロトコル(TCP)
13.4.1 TCPコネクション状態
13.4.2 シーケンス変数
13.5 TCPアルゴリズム
13.5.1 タイマ
13.5.2 ラウンドトリップ時間の予測
13.5.3 コネクション確立
13.5.4 コネクションのシャットダウン
13.6 TCP入力処理
13.7 TCP出力処理
13.7.1 デ ータの送信
13.7.2 Silly-Window Syndromeの回避
13.7.3 小さなパケットの回避
13.7.4 遅延された受信確認とウィンドウ更新
13.7.5 再送ステート
13.7.6 スロースタート
13.7.7 ソースクエンチ処理
13.7.8 バッフアリングとウィンドウサイズの設定
13.7.9 輻輳回避とスロースタート
13.7.10 高速再送
13.8 インターネット制御メッセージプロ トコル(ICMP)
13.9 OSI実装における問題
13.10 ネットワーキングとプロセス間通信のまとめ
13.10.1 コミュニケーションチャネルの生成
13.10.2 データの送受信
13.10.3 データ送信、受信の終了
13.10.4 練習問題
13.10.5 参考文献
第5部 システム操作
第14章 システムの起動
14.1 概要
14.2 ブートストラップ
14.2.1 ブートプログラム
14.3 カーネルの初期化
14.3.1 アセンブリ言語による起動
14.3.2 機種依存の初期化処理
14.3.3 メッセージバッファ
14.3.4 システムデータ構造体
14.4 カーネルの自動コンフィグレーション
14.4.1 デバイスの探索
14.4.2 デバイスのアタッチ
14.4.3 新しい自動コンフィグレーションにおけるデータ構造
14.4.4 新しい自動ヨンフィグレーション関数
14.4.5 デバイスの名前
14.5 機種非依存な初期化処理
14.6 ユーザーレベルの初期化
14.6.1 /sbin/init
14.6.2 /etc/rc
14.6.3 /usr/ibexec/getty
14.6.4 /usr/bin/login
14.7 システム立ち上げに関する事項
14.7.1 カーネルコンフィグレーション
14.7.2 システムシャットダウンと自動再起動
14.7.3 システムのデバッグ
14.7.4 カーネルとの情報交換
14.7.5 練習問題
14.7.6 参考文献
用語集
索引