2008-01-01から1年間の記事一覧

Glendix

3rd IW9Pでちょっと触れたGlendixに関する記事がOSNewsに掲載されていた。Linuxカーネルを使うけど、ユーザランドはPlan 9というOSを作ろうとしている。 Glendix: Bringing the Beauty of Plan 9 to Linux (OSNews 2008-10-26)

manページについて

Plan9 (UNIX)プログラミングに欠かせないmanページについて、ちょっとまとめてみる。 セクション まず、UNIXとPlan9でセクションが微妙に違う。Plan9だとライブラリ関数とシステムコールが同じセクションになり、ファイルサービスや9Pのセクションが独立して…

tail(1)

Plan9にはtail(1)はあるけど、head(1)がない。頭隠して尻隠さず?戯言はおいておいて、最近古本屋で見つけた「デーモン君のソースコード探検」にtailの実装にmmapを使っているという話が書かれていた。確かにお尻からfseek(fseeko)でちまちまさかのぼるより…

Plan 9、いまだ死なず。そして、それから何を学ぶことができるか

はてなグループにプレゼンモードがあるのを知り、勢いでRon Minnichさんの「Why Plan 9 is not dead yet and what we learn from it」を勝手訳してみた。 これはFast OSのミーティングでPlan9の紹介をしたもので、HPC寄りな記述が少しあるけど、Plan9の紹介…

Happy birthday, Ed Wood!

今日、10月10日がEd Woodの誕生日なんだってね。例によってWikipediaから引用。 エド・ウッド(Ed Wood、全綴りはEdward Davis Wood, Junior、エドワード・D・ウッド・Jr.、男性 1924年10月10日 - 1978年12月10日)は、アメリカの史上最低といわれた映画監督…

UTF-8小話

UTF-8はWikipediaに書かれている通り、 当初は、Plan 9で用いるエンコードとしてベル研究所で考案された。 ものだけど、最近古本屋で見つけた「インターネットヒストリー」の村井純先生のあとがきに気になる記述があった。 ちょっと長くなるけど引用する。 …

acidまめ知識

acidはacmeから使う 「gdb豆知識」で、「gdbをemacsから使うのが正しい姿」説が語られている。Plan9の場合、特別な連携がなされているわけじゃないけど、ここでは「acidをacmeから使うと便利」という話を書こうと思う。具体的には、スタックトレースすると、…

奥地さんとPlan9

「オープンソース開発者 奥地秀則氏のパーソナルヒストリー(前編)」 (@IT 2008-09-24)を読んでいたら、Plan9のスクリーンショットが掲載されていて驚いた。GRUBの開発で有名な奥地さんがGNU Hurdの開発に参加されていたことは知っていたが、その前にPlan9…

3rd IW9P

今年のIW9P (International Workshop on Plan 9)は、ギリシアで。採録論文が発表されている。 9P For Embedded Devices, Bruce Ellis and Tiger Ellis Glendix: A Plan9/Linux Distribution, Anant Narayanan, Shantanu Choudhary, Vinay Pamarthi and Manoj…

コードリーディング

歴史は、われわれの行為の導き手(マエストロ)である。 だが、とくに指導者にとっては師匠(マエストロ)である。 -- マキアヴェッリ「指導者」を「プログラマ」に読み替えてみたい。コードリーディングは純粋に技術的娯楽のため、技術を盗むため、そして、…

GREEオープンソーステクノロジー勉強会「データセンターのあれこれ」

クラウドコンピューティング時代の情報発電所は、電気を作り出すのではなく、電気をバカ食いする。情報を生み出すために使われる電力はすべて熱に変わるので、その熱をどう処理するかが問題になる。というわけで、さくらインターネットの加藤さんによるお話…

UNIX V6のmanページ

Ancient UNIXのアーカイブを眺めてて気付いたんだけど、V6のころまではnroffの命令は小文字で書かれている。命令はcase sensitiveなので、今時のnroff/manではうまく処理してくれない。ということで、awkをかましてみる。 #/bin/sh awk '{for(i=1;i<=NF;i++)…

test -older

9fansに有澤先生がtest -olderがあるのに、-newer or -youngerがないのはなぜか?というような投稿をされていた。-olderは、-otや-ntのように2つのファイルのmtimeを比較するのではなく、任意の時間とファイルのmtimeを比較する。 もちろん、否定(!)を使えば…

MacOS XでThompson Shellを動かす

Thompson Shellといっても耳馴染みない人も多いかと思うが、Bourne Shellになる前の由緒正しいUNIXシェルである。Thompsonとは、もちろんKen Thompsonのこと。Wikipediaの「Bourne Shellのページによると、 Bourne Shell(ボーンシェル)は、Unix Version 7の…

Pythonでシェルを書く

突然、Pythonネタである。シェルがらみの話題が続いたので、リダイレクトとパイプを中心にrcのコードリーディングでもしようかと思ったが、似たようなものを作ってみる方が面白そうだ。しかし、いまさらCか?というのもあって、お勉強がてらPythonで書いてみ…

シェル(rc)スクリプトを書くときのTips

今日の元ネタは、「シェル(bash)スクリプトを書くときのTips 」。 `{command} コマンド置換。コマンドを実行し、その標準出力を引数として読み込むには、`{...}を使う。もちろん入れ子もOK。ん、Plan9にはbasename(1)はあるけど、dirname(1)はないのね。 {co…

死蔵コマンド

スラッシュドットに「死蔵しているコマンド、どのくらいありますか?」なんて記事が載ってた。Plan9なら、 cpu% ls /bin | wc 339 339 3673でほぼ正確なコマンド数がわかる*1。339個。最近は組込み用のBusyBoxでも、200個近くのコマンドをサポートするように…

コンウェイの法則(Conway's Law)

libtaskが提供するコルーチン。その歴史は古く、マルチプロセス/スレッドが登場する以前の並行システムの実装によく用いられていた。例えば、Simulaとかが有名だが、スラッシュドットに次のような書き込みを見つけた。 Simula開発者Kristen Nygaard氏死去An…

エラトステネスのふるい

libtaskはチャネルにも対応している。ということで、Limboで書いたエラトステネスのふるいをC + libtaskで書き直してみた。Plan9日記では何度もチャネルを取り上げているが、チャネルはタスク間でメッセージをやり取りするための通信手段を提供する。chancre…

one true awk

なんと最近のawkはXMLまでパージングできるらしい。しかし、それはこのエントリの話題とは関係なくて、日本 GNU AWK ユーザー会の「awk から xgawk へ」というプレゼン資料の歴史の記述に注目したい。また、歴史検証ネタだ。 ご存知のように awk は 1977 年…

MacOS Xのfork/execが遅い件について

オフトピ*1だが、「libtaskとPthreadの比較」で軽く触れた、MacOS Xのforkが遅い件についてもう少し調べてみた。前回使ったプログラムはこんな感じのもの。 #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/time.h> enum { ITER = 100 }; void do_fork(void) { pid_t pid; </sys/time.h></unistd.h></stdlib.h></stdio.h>…

ACM SIGOPS Operating Systems Review

ACM SIGOPS Operating Systems Reviewの最新号の特集が「Research and developments in the Linux kernel 」ということで、Linuxカーネル関連の論文が集められている*1。その中に、「Plan 9 authentication in Linux」*2という論文が収録されている。セキュ…

即席httpdを書いてみる

libtaskの例として、httpdを書いてみた。200行ぐらいだけど、コアの部分はこんな感じ。fdread/fdwriteはノンブロッキングI/Oなんだけど、普通のシングルスレッドプログラムのようにselectループを書く必要がない。どうなっているかというと、libtask内部でス…

libtaskとPthreadの比較

Russ Coxさんが作ったコルーチンライブラリlibtaskを試してみた。雰囲気はPlan9のlibthreadによく似ている。対応している環境は、Linux (ARM and x86)、FreeBSD (x86)、OS X (PowerPC and x86)、SunOS Solaris (Sparc)とのことだ。コルーチンはプログラマが…

patch違い

diffの次はpatch。patchを作ったのはPerlのLarry Wallさんであることは有名だ。Wikipediaから引用してみる。 1985年にはラリー・ウォールが、このdiff出力を入力として受け取ってファイルを変更するというアイデアを一般化、拡張して、別コマンドとしてpatch…

diffのアルゴリズム

ふと見つけた「あなたが一番好きなアルゴリズムを教えてください。また、その理由やどんな点が好きなのかも教えてください」を読んで、diffのアルゴリズムを調べてみた。2つのファイルの違いを見つけるには、共通する部分が最長になるペアを見つければよい。…

タイマー割込みとプリエンプション

最初に読むならスケジューラ周りかなと、まずはタイマー割込みの扱いから追っかけることにする。普通のマルチタスクOSはプロセスプリエンプションを提供している。つまり、10ミリ秒周期とかでタイマ割込みを発生させて、プロセスを切り替える(ためにスケジ…

9vxのソースコード

暇を見つけて9vxのコードを読んでいこうと思う。最初にトップディレクトリのHACKINGファイルに目を通しておくとよい。 vx32-0.12/src/9vx以下が9vxのソースコードで、トップディレクトリに存在するファイルは9vxのために手で修正 or 新規作成されたコード。…

vx32-gccとlibvxcとvxrun

と、ここでしばらく考えてみる。vx32-gccがどんなバイナリを出力するとかというと、 $ vx32-gcc hello.c $ file a.out a.out: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, not strippedELF形式だ。当然、実行はできない…

vx32 for Windows

私は興味ないけど、ポーティングしている人がいる。 vx32 for Win32