2006-03-01から1ヶ月間の記事一覧

ファイルに抽象化されなかった資源

「すべての資源はファイル」がお題目であったが,ファイルに抽象化できない資源も当然存在する.次の論文には,一見ファイルに抽象化できそうだけど,利便性などを考えて,断念したものが三つ述べられている.それはネットワークアドレス,共有メモリ,プロ…

名前空間

ちょっと間が開いてしまった.Plan9の特徴,強力な機能の一つが名前空間である.名前空間とは簡単に言うと名前とファイルを対応付ける仕組みである*1.何度も書いているが,Plan9はすべての資源をファイルに抽象化し,(ローカルであるかリモートであるかに関…

カーネル内エラー処理

setlabel/gotolabelのもう1つの使い道がエラー処理である.カーネルのように複雑な処理をやっていると,普通,エラー処理はネストしてしまう.しかし,同じラベルに対してsetlabelを実行すると,前の値を書き潰してしまう.そこで,エラー処理用にerror,nex…

はてなブックマーク

Plan9関連のページを集めることを目的に,はてなブックマークを始めてみた.

新システムコール semacquire, semrelease

9fansに投稿された記事によると,semacquire, semreleaseと呼ばれるセマフォ操作のシステムコールが追加されたらしい.

sleep/wakeup

setlabel/gotolabelによるコルーチンでプロセススイッチしている箇所を見たが,今日はsleep/wakeup関数を見てみようと思う.sleepで自発的に実行権を放棄したプロセスは,タイムアウトなどの条件が成立すると,wakeupされ,Ready状態に復帰する.sleepでは,…

Brokenプロセスはいつ解放されるのか?

数日前にacidについて書いたとき,「Brokenプロセスはいつまで残っているのだろうか?」という疑問が残った.そこで,Brokenプロセス周りについて調べてみた.Brokenプロセスに関係しそうなコードを探していたら,port/proc.cに,次のようなコードが見つかっ…

スケジューラ

Plan9のスケジューリング方式は基本的にはUNIXと同じ優先度つきラウンドロビンである.リアルタイムプロセス用にEDFスケジューリングも可能だが,まずはEDFは無視して,読み進めようと思う. 優先度は22レベルあり,最上位の二つはEDFスケジューリング用に予…

setlabel/gotolabelによるコルーチン

Plan9はTSS(タイムシェアリングシステム)であり,プロセススケジューリングに対する基本的な考えはUNIXと同じである.あるプロセスが動作しているときに,タイマ割込みなどによってカーネルに動作が遷移し,スケジューラが起動され,プロセスを入れ替え,ユ…

gonzuiでPlan9のコードを読む

acmeの使い方に慣れるためにも,acme上でコードを読むようにしているんだけど,ちょっとgonzuiを味見してみた.インストールしたのは初めてだけど,簡単. 早速使い始めるが,"fundef:setlabel"のようなアセンブリで定義した関数はヒットしないなぁ.Linuxカ…

userinit

最後に最初のプロセスを立ち上げる処理を見てみよう.カーネル初期化の最後に,最初のプロセスをスケジューリングするために,schedinitが呼ばれるのだが,プロセスが存在しない場合は,156行目のsetlabelが呼ばれないので,176行目のgotolabelで飛び先がな…

UNIXが嫌いな理由

アンチWindowsな人もいれば,当然アンチUNIXな人もいる.オンラインで読める2つの文章を紹介しよう.アンチというよりは,自虐的な雰囲気だが. 10 Things I Hate About (U)NIX Everything Is a File (Unless It Isn't) Everything Is Text No Introspection…

アセンブラ

カーネルのコードを読み進めるには,アセンブリコードは避けて通れない.読むのに最低限必要そうな点を押さえておこう. Plan9のアセンブラでは,PC(プログラムカウンタ),FP(フレームポインタ),SP(スタックポインタ),TOS(トップオブスタックレジスタ),SB…

カーネルのソースコード

プロセスの状態の話が出てきたので,カーネルのソースコードを眺め始めてみようかな.スケジューラから読み始めるのは割と定石だし(Plan9の場合はやっぱりファイルシステムじゃないか!?という気はするが).最初にソースツリーの概略を示すと,/sys/src/9以…

プロセスの状態

man psによると,プロセスには,次の状態がある.UNIXよりずいぶん多いねぇ. Moribund Process has exited and is about to have its resources reclaimed. Ready on the queue of processes ready to be run. Scheding about to be run. Running running. …

acidでバックトレース

では,落ちた時点のバックトレースを見てみよう.アタッチしたいプロセスのPIDを引数にacidを起動する.stk()でバックトレースが表示される.libcの_mainからmainが呼ばれ,fooで止まっているのがわかる. term% acid 266 /proc/266/text:386 plan 9 executa…

コアがない

UNIXでプログラムにバグがあり,SEGVを起こした場合,通常はメモリイメージがコアファイルに書き出されるので,それをデバッガに食わせて,デバッグする.まぁ,最近のLinux distroだとコア出力はデフォルトで無効になっているので,ulimitを変更する必要が…

Plan9から何を学べるのか?

はてな日記を始めた初日のエントリに,なぜPlan9に注目するのか,と書こうとして筆が止まっていた.関係ありそうなところで,Ron Minnich氏のWhy Plan 9 is not dead yet And What we can learn from itが面白い.どのようにUNIXのコンセプトが壊れ始め,Pla…

trussライブラリ

trussライブラリは/sys/lib/acid/trussであり,一見C風の記述だ. defn truss() { local pc, lst, offset, prevpc, pcspret, ret; offset = trapoffset(); stop(pid); _stoprunning = 0; setuptruss(); pcspret = UPCSPRET(); while !_stoprunning do { cont…

acid(1)

UNIXにはシステムコールをトレースするコマンドとして,straceやktrace,trussが提供されていて,プログラムの挙動を調査するのに便利なのだが,Plan9にはそれらしきコマンドがない.trace(1)というコマンドがあるけど,別物だ.そこで使うのがacid(1)である…

rfork(2)

forkじゃなくてrforkがシステムコールなんだ.rforkはLinuxのclone(2)のように,プロセス生成するとき,親子プロセス間で共有するリソースを指定できる.FreeBSDのrforkもman rforkによると,Plan9由来とのこと.

syscall(1)

ってコマンドがあるんだなぁ. cpu% syscall write 1 hello 5 hellosyscall: return 5, no error

Plan9のシステムコール数

cpu% cd /sys/src/libc/9syscall cpu% cat sys.h #define SYSR1 0 #define _ERRSTR 1 #define BIND 2 #define CHDIR 3 #define CLOSE 4 #define DUP 5 #define ALARM 6 #define EXEC 7 #define EXITS 8 #define _FSESSION 9 #define FAUTH 10 #define _FSTAT…

Code Reading on Plan9

Plan9のmanにはソースコードのパスが書いてある. 例えば,echo(1)のmanを見ると,SOURCEという項目があって,/sys/src/cmd/echo.cと書かれている. cpu% man echo ECHO(1) ECHO(1) NAME echo - print arguments SYNOPSIS echo [ -n ] [ arg ... ] DESCRIPTI…

システムソフトウェア研究は見当違いの方向を向いている

2000年にユタ大学で,Rob Pike氏が行った講演「System Software Research is Irrelevant」は,いろいろ示唆に富んでいて面白い(ハッピーな内容ではないが). ハードウェアはここ10年で劇的に変わったのに,システムソフトウェアは何が変わった? 誰が新しいO…

コンピュータシステム研究の過去と未来

Microsoft Researchの大御所Butler Lampson氏も1999年のSOSPでの講演「Computer Systems Research: Past and Future」で,なぜシステムソフトウェア研究者はWebを生み出すことができなかったのかという話をしている.結局は研究とビジネスの解離が問題の根本…

bind

Plan9のファイルシステムには,ハードリンクもシンボリックリンクもない.名前空間のトポロジはbindを使って動的に変更できる.つまり,トポロジの情報はファイルシステムではなく*1,カーネルが把握している.現在の名前空間の構成はnsで調べることができる…

で,pingはどこに

find がないので,duで調べてみる. cpu% du -a /bin | grep ping 179 /bin/ip/gping 75 /bin/ip/pingということで,ip/pingと実行する必要があるみたい.

環境変数もファイル

ひょっとしてパスが通ってない?と脳裏をよぎる.そこで(やや強引だけど),Plan9における環境変数の扱いを調べてみる.Plan9はりソースは何でもファイルとして抽象化すると書いたが,環境変数もenvデバイスによって名前空間にマッピングされる./env以下を見…

pingが見つからない?

ping(8)はネットワーク診断には欠かせないコマンドでUNIXやWindowsはもちろん,Plan9にも存在するコマンドだ.でも,端末から実行してみると,そんなコマンドはないと怒られる. cpu% ping 12.34.56.78 ping: '/bin/ping' file does not exist