カーネルのソースコード
プロセスの状態の話が出てきたので,カーネルのソースコードを眺め始めてみようかな.スケジューラから読み始めるのは割と定石だし(Plan9の場合はやっぱりファイルシステムじゃないか!?という気はするが).
最初にソースツリーの概略を示すと,/sys/src/9以下がカーネルのソースコードになる.さらに/sys/src/9/portにはアーキテクチャ非依存コード,/sys/src/9/pcにはi386アーキテクチャ依存コードが含まれるようだ.ちなみにファイルシステムは/sys/src/fs,ネットワーキングは/sys/src/ip以下になる.
プロセス関係は/sys/src/9/port/proc.cあたりかな.
- proc.c: スケジューラ
- pgrp.c: プロセスグループ
- devproc.c: プロセスデバイス
- sysproc.c: システムコール(sysr1, sysrfork, sysexec, syssleep, sysalerm, sysexits, sys_wait, syswait, sysdeath, syserrstr, sys_errstr, sysnotify, sysnoted, syssegbrk, syssegattach, syssegdetach, syssegfree, sysrendezvous)
- portdat.h: データ構造
- portfns.h: 関数定義
dat.hにデータ構造,fns.hに関数の宣言をする規約になっているようなので,最初にこれらのヘッダファイルを読むと全体像が把握しやすいかも.
以下,まとまりのないメモ