2016-11-14

UNIX V6コードリーディング備忘録 その1

はじめてのOSコードリーディング UNIX V6で学ぶカーネルのしくみが面白すぎたので備忘録。

今回は2章 プロセス、3章 プロセスの制御、7章 ブロックデバイスサブシステム、9章ファイルシステムを対象に書いていきます。

読み方

上記の書籍+ソースコードを以下からダウンロードしてIntelliJとかで開いて関数や変数を検索しながら読むのが良いです。ダウンロードするのはv6root.tar.gzです。

$ mkdir v6
$ wget http://minnie.tuhs.org/Archive/PDP-11/Distributions/research/Dennis_v6/v6root.tar.gz
$ tar xzf v6root.tar.gz -C ./v6

また実際にOSをMAC上で動かす場合は以下を参考にすると良いです。

以下コードを読む際の注意点になります。

MMUのアドレス変換

プロセス

基本的にプロセスは親プロセスからのforkによって作成される。PID=0のスケジューラプロセスだけはカーネル起動時にforkを使わずに作成される。PID=1のinitプロセスはforkシステムコールではないが、newproc()でプロセスがコピーされ、execシステムコールで/etc/initのコードを実行するので実質fork+execと同じ作成フローである。

ブロックデバイス

ファイルシステム

参考URL

このエントリーをはてなブックマークに追加