UNIX V6

はじめてのOSコードリーディング

Lions' Commentary on UNIX 読書会で親交のあった@superhogeさんが「はじめてのOSコードリーディング」を上梓される(「はじめてのOSコードリーディング」という本を出版します)。読書会の活動が書籍として結晶したことに感動するし、自分が生まれた頃のソ…

seek(2)のwhence引数の謎

久々にUNIXネタで、seek(2)の変遷について調べてみた。seekの変遷というと、最大ファイルサイズの拡大にしたがってlseek()、llseek()といった具合にアドホックにシステムコールが追加されている、って話と思われるかもしれないが、違う。今日は第3引数のwhen…

FUSEでUNIX V6ファイルシステムをマウント

Lions本合宿のネタに、ユーザ空間でファイルシステムを作ることが出来るMacFUSEを使って、UNIX V6ファイルシステムをマウントできないかと考えていた。@7shiさんや@superhogeさんとは別アプローチとして。さっそくMacFUSEのソースコードをダウンロードし、ま…

シグナルの誕生

今日はシグナルの歴史を調べてみたいと思う。シグナルというのはUNIXにおけるプロセス間通信の一手段であるが、CPUにおける例外のように、プロセスにとって非同期に発生するものなので、その実装はいろいろ面倒くさい。したがっていろいろ問題もあり、長年の…

spl: set priority level

昨日はsleep/wakeupの話を書いたが、これだけあればカーネル内の同期・排他制御が完璧かというとそうではない。sleepするにはコンテキストが必要なので、割込みハンドラ内でsleepできない。そこで、割込み処理が動くとまずい箇所は割込みを禁止する必要があ…

sleepとwakeup関数

古典的なUNIXでは、カーネル内で走行中のプロセスがバッファやIOなどの共有資源にアクセスするときの同期機構としてsleepとwakeup関数を提供している。ちょっと注意が必要なのは、これらの関数はsleep(1)と直接動作に関係ないこと。実はV6にはsleep(1)を実装…

PDP-11のブートストラップ

年の瀬も押し迫った頃、なぜかPDP-11のブートストラップが気になってしまったので、simhとPDP-11のプロセッサハンドブックを見ながら、調べてみた。今回は実機のイメージがあった方が理解しやすいと思い、Wikipediaから写真引用。これは2基のDECtapユニット…

UNIX v6 on simh

Lions' Commentary on UNIX読書会に参加した。いまだにLions本が大学の教科書として現役だという事実に驚いたが、読書会に集まる我々も五十歩百歩か。何はともあれ、一緒に読んだり教えたりしてくれるメンタがいれば、現代でも楽しめる一冊であることは確か…