386BSDカーネルソースコードの秘密

キーフレーズ

kern プロセス () kernel line usr src システムコール カーネル シグナル ファイル記述子 386BSD return i386 ファイル システム コンフィギュレーション config ユーザー インターフェイス POSIX descrip struct プログラム アドレス空間 関数 int 割り込み 実装 デバイス execve 場合 優先順位 kerne eax sig movl 実行 割り当て スレッド UNIX malloc 文字列 devif ポインタ メモリ スタック uap ロック caddr write プロセッサ オペレーティングシステム trap 処理 retval チェック 参照 error exit cred できる レベル 戻り値 ldiscif 引数 ハンドラ 機構 ディシプリン アクセス エントリ アドレス モジュール 返す デバイスドライバ BSD 証明 read 必要 9. cpu 仮想記憶 makefile select スリープ copyout sizeof グループ 構造体 フォールト 使用 存在 呼び出し flag lock void コード pushl 現在 終了

目次ページ

目次 C. 8 List 1 : 386BSD カーネルのサンプ丿レ・・ C. 9 List 2 : 386BSD カーネルコンフィギュレーションのサンプル・ C. 1 1 List 4 : カーネル makefile のサンプル・ C. IO List 3 : カーネル makefile のサンプル・ C. 12 List 5 : カーネルのマスター makefile のサンプル・ 26 索引・ 第 9 章・ 第 8 章・ 第 7 章・ 第 6 章・ 第 5 章・ 第 4 章・ 第 3 章・ 第 2 章・ 演習問題の解答 ・・ 559 ・・ 560 ・・ 560 ・・ 561 ・ 575 ・・ 574 ・・ 573 ・・ 572 ・・ 571 ・・ 570 ・・ 569 ・・ 569 ・ 568 567 ・・ 562

CHAPTER 第 1 章 基本カーネル入門

第 1 章基本カーネル入門 386BSD システムには ( デバッガや診断モジュールを除いて ) およそ 374 個のカーネルソースファイル があり、それらの 50 % 以上がヘッダファイルである ( これらは基本的には他のファイルへのクロスリファ レンスだ ) 。これだけ数多くのファイル ( そして約 10 万行ものコード ) があると、必要最小限のシステム を構成するのに最もふさわしい主要なファイルを選択するのは、非常に繊細な仕事となる。しかし、現 在のオペレーティングシステムの設計と開発を詳しく理解するには、こうしたファイルを正しく選択し て議論することが不可欠なのだ。 本書で解説するカーネルファイルは、ある現代的な研究システムのコアを形成するものだ。どのよう な基本カーネルも、次の機能を実行できなければならない。それは、マルチプログラミン久ファイル の実装、そしてプログラムの実行である。また昨今の状況においては、使用できるリソース、プロセッ サ時間、メモリに基づいて、プログラムのスケジューリングを行う能力も備えていなければならない。 さらに、このオペレーティングシステムにおいて最も基本的なオプジェクトであるプロセス ( すべては、 これを中心として構築される ) の生成、操作、破壊を行うのも、こうした基本カーネルファイルの仕事 である。 ューザープログラムは、 execve() と呼ばれる機構によって実行される (kern/execve . c 参照 ) 。 これについては本書にもドキュメントがあるが、これは、システムコール API(appIicationsprogram interface) を介してユーザーがアクセスできる、数多くのカーネル関数の一例である。 POSIX と BSD のシステムコールについても、ユーザープログラムの視点から見たカーネルのセマンティクス * 訳注 1 を理 解できるように、本書にドキュメントを収めている。これらのシステムコールでは、他のカーネルサプ システムを参照することが多い。プロセスの例外処理 ( シグナルとも呼ばれる ) は、イベントをユーザー プロセスに通知し、場合によっては終了イベントによってプロセスをアポートさせる手段を提供する。 そして最後にシステムの底辺を支えるマシン依存の機構、プロセッサ依存ないしシステム依存の関数に 関して、プリミテイプな機械語コードのレベルでのドキュメントを提供する ( i386 / locore . s を参照 ) 。 本書で基本カーネルの実装を文書化するのは、コードの背後にある「なぜ」を理解できるようにするた めである。これらのドキュメントでは、カーネルを実装する各部の違いを明らかにし、実装上の限界を 文書化し、現在の実装に代わる別の方法や、カーネルを拡張できる部分を示し、現在選択されている実 装を論証する。 1 」カーネルのマシン依存部 カーネルプログラムを、すべて高級プログラミング言語で書き、マシンに依存する性質を完全に排除 することができれば、すばらしいだろう。しかしながら、カーネルの目的は、そのようなプログラミン グ環境を作り上げることにあり、そういった性質を " 隠す " のもカーネルの役目のひとつなのである。そ * 訳注 1 プログラミングに使われる変数などのシンボル。 カーネルはマシン依存およびプロセッサ固有のコードを持たざるを得ない。こう 28 れを達成するために、