UNIX V1

デバイススイッチの実装

第11回Lions本勉強会にインスパイアされ、UNIX V6、V7そしてV1へさかのぼりつつ、カーネルとデバイスドライバの界面であるデバイススイッチの実装について考えてみた。UNIXではデバイスもファイルとして見せた方が汎用的で便利ではということで、スペシャル…

a.outのマジックナンバー

a.out*1のヘッダの先頭にはマジックナンバーが埋め込まれていて、これによっていわゆるOMAGICとかNMAGIC、ZMAGICとかに分類される(詳細はWikipediaのここ)。OMAGICはヘッダのすぐ後にテキストとデータセグメントが続き、それら両方は書込み可能なメモリに…

Hello, world!

先日、UNIX V1が動いたという話を書いたが、現実逃避でHello, world!書いてみた。もちろんPDP-11アセンブリでである。r0にstdoutのファイル記述子を入れてwriteシステムコールを呼び出す。文字列のアドレスと文字数は、sys命令の後に列挙する。$は即値で、14…

カーネルを読んでみる

UNIXカーネルがC言語に書き換えられたのは3rd editionであり1973年のことなので、このバージョンのソースコードはPDP-11のフルアセンブリである。しかし、4221行とコンパクトだし、コメントも満載なので、アセンブリに対するアレルギーがなければ、pre K&R C…

UNIX 1st ed.カーネルのソースコード

以前、「よみがえるUNIX 1st ed.」というエントリを書いたが、そのソースコードが公開されていた(unix-jun72)。SIMHシミュレータを使って、当時のUNIX環境を再現することもできる。すばらしい!まず、Subversionからコードをチェックアウトする。 $ svn co…

よみがえるUNIX 1st ed.

今年はUNIX生誕40年ということで、あちこちのニュースサイトで特集が組まれたりしているし、この日記でも取り上げようかなと思っていたところ、面白いニュースが飛び込んできた。 USENIX2009で、Warren ToomeyがUNIX 1st ed.をシミュレータ上で動かしたと発…