PDP-11インタプリタでUNIX V6のカーネルをビルドするまで
lib1の中でmain.o trap.o sig.o sysent.oを先に並べないとリンクできないことが分かった。リンカの構造をちゃんと理解していないのでよく分からないけど、そろそろ時間切れ。準備をして会場に向かわないと。
2011-04-10 10:20:09echoがシェルによって方言がある。echo "abc\ndef"を受け付ける環境もあれば、echo -e "abc\ndef"としないといけない環境もある。前者で-eを受け付けないこともあるのが問題。結局(echo "abc";echo "def")みたいに書くしかなさそう。
2011-04-10 21:07:55NetBSDで自作インタプリタを動かしたら、VMware上(ハードウェア支援なし)なのにホスト側のInterixで動かすより5倍くらい速かった(76秒→16秒)。コンパイラなんてオーバーヘッドが気になるほどシステムコールを呼ぶとは思えないんだけど、遅すぎ。
2011-04-10 21:18:31#readLions 今日デモ中に@oracchaさんからご指摘のあった1文字ずつsys writeしていることとか、dupでキャッシュする裏技とか、該当箇所をアセンブリソースからぱっと見つけられず、説明がぐだぐだになった。こういうのはコメンタリーとしてまとめるべきと感じた。
2011-04-10 21:42:25インタプリタを作るときにひたすらユーザー側の動きを追ったけど、ユーザー側の処理はLions本にほとんど書かれていないから、気付いたことはメモでも何でも残しておくべきと思った。自分の中でも整理していないからうまく説明できないし、すぐ忘れてしまう。
2011-04-10 21:56:55そういえば今日、forkとexecをインタプリタで実装する際に、asとccのパターンに特化して小細工で再現した話をした。やばい、もう忘れていた・・・ ( #debhw live at http://ustre.am/mjex)
2011-04-10 22:04:24syncの話を聞いて、9801のDOSで[STOP]キーを何度か押してキャッシュを吐かせてから電源を切っていたのを思い出した。 ( #debhw live at http://ustre.am/mjex)
2011-04-10 22:47:48V6でもユーザーランドのアセンブリではsys signalと書いてありました。 ( #debhw live at http://ustre.am/mjex)
2011-04-10 22:49:51C++版を正式公開して区切りを付けようと思っていたけど、なぜかカーネルがうまくコンパイルできなくなっている。あれー、何か見落としているのかな・・・
2011-04-10 23:21:42V6インタプリタを作った動機のうち、バックスペースできないのと、simhの外に出したいというのは、単に私が解決策を知らないだけだった。最後に残ったのは見やすい逆アセンブラが欲しいというものだけ。.sと逆アセンブルとを見比べないと、どうにもイメージが湧かない。
2011-04-10 23:27:38あ、そうだ。シンプルなコンパイラとpre K&Rの文法に興味があったので、カーネルのビルドとは関係なく純粋に処理系として触ってみたいという動機もあった。結果的にこれは既存シミュレータで解決可能だったけど。
2011-04-10 23:35:52あーーー、入れ忘れのnmを追加しようとして、間違えてldを上書きしていた!どうりで朝はできていたビルドができなくなっているわけだ。しょぼい理由でがっくり・・・
2011-04-11 00:02:15NetBSD上でも自作インタプリタでV6カーネルがビルドできた。17秒。Interixが遅過ぎたので速く感じたけど、実際はsimhと同じくらいの速度だった。最適化の工夫を何もしないでこれくらいのスピードが出れば充分かな。
2011-04-11 00:18:47