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

バックトレースの実装

Cのプログラムでバックトレースを表示したい場合,Linux(glibc)にはbacktrace(3),Solarisにはprintstack(3)なんてライブラリ関数が用意されているので,それらを使えばいい.なければsetjmp(3)やgetcontext(3)を使って,自力でスタックをたどることになる.…

-277

binary - よりポータブルな無限ループという記事があったので,Plan9で試してみた.コンパイル通ったと思ったら,ファイルは空で,実行できなかった. cpu% cat infinite.c int main=-277; cpu% 8c infinite.c cpu% 8l infinite.8 cpu% 8.out 8.out: '/bin/8…

ブレークポイントの実装

ブレークポイントは,デバッギ(デバッグ対象)からデバッガへ処理を遷移させるための仕掛けである.基本的な動作の流れを書くと,まず,止めたい命令をメモリ上に保存しておいて,ブレークポイント命令(x86ならばINT 3)に置き換える.デバッギを実行すると,…

デバッガ上で実行されているか調べる(Plan9の場合)

Plan9では,UNIXのシグナルに相当するノート(note)って仕組みがある.基本的な考えはシグナル同じだけど,シグナル番号はなくて,文字列で識別する.分散環境を考えたら,結局文字列が一番ポータブルだったということか*1.ノートに対するハンドラは,atnoti…

v9fs

Linuxでもカーネル2.6.14からv9fs(9P2000ファイルシステム)がメインラインにマージされている.使い方は簡単.ベル研のソースコードリポジトリをmountするときは,こんな感じ. # modprobe 9p2000 # # mkdir /n/sources # mount -t 9P -o proto=tcp 204.178.…

アセンブリでHello, world!

ELF Golfなるものが一部で流行っているらしいが,Plan9でやったら8.out Golfになるのかな? libcを使わずシステムコール呼出しを書いたら,id:yupo5656さんにトラックバックしてもらったので,続きということで,アセンブリで書いてみる.コードは次に示すが…

rc (sh) magic

ファイルが"#!"で始まっていると,カーネルはそのファイルを(シェル)スクリプトだと判断して,"#!"に続くプログラムを起動して,そのファイルを実行する.というのが,UNIXのスクリプト起動の仕掛けだが,Plan9でもそこは同じである. さて,シェルスクリプ…

IWP9

先日,マドリードで開催されたInternational Workshop on Plan9の論文が公開されている.リストアップするとこんな感じ. Experience Teaching an Inferno Course Shifs A simple way to transform and build dynamic file servers Invited talk: Dis on a C…

a.outフォーマット

先日の続きで,Plan9のa.outフォーマットを眺めてみる. マジックナンバ (0x1eb) 0000000 000001eb テキストセグメントのサイズ (0x42) 0000000 00000042 データセグメントのサイズ (0x10) 0000000 00000010 BSSセグメントのサイズ (0x0) 0000000 00000000 …

libcを使わずシステムコール呼出し

Plan9でHello, world!に書いたプログラムを普通にコンパイルすると,サイズは36204バイト.Plan9に動的リンクは存在しないので,静的リンクした大きさである.で,strip(1)したサイズは21639バイト.次にprintを使わず,直接write(2)を使って書いてみる.こ…

Firefoxでmanページ検索プラグイン

昨日,巷で話題のBinary Hacksを買ったので,早速,Hack#100から読みはじめた.で,SUSv3のmanページを検索するプラグラインがあることを知る. 便利そうなので,Plan9版を作ってみた.とりあえずこんな感じ.

IA32以外でPlan9

id:kinnekoさんが,Plan9に興味を示されている?違うものとはPlan9か? NAS箱で動くと面白かな,と以前から思っているんだけど,私もIA32以外で動いているところは見たことがない.(追記:20007-02-10) 第二版まではいろんなアーキテクチャで動いていたけど,…

acmeとOberonの類似性

acmeのユーザインタフェースは独特で癖があるんだけど,Oberonみたいだと指摘された.acmeにはアイコンベースのメニュの代わりに「タグ」と呼ばれるテキストベースのメニュ(のようなもの)がある.タグにはテキストで"New","Cut","Paste"のようにコマンドが…

rough consensus and running code

OSの進化に対して,ひらさんがデザイン時代の到来で,OSを評価するには,実用化,最適化,デザインという三つの視点があるんじゃないかと書かれている.OS研究空白の時代とも言える90年代から現在に至る時期は,前者二つが優先され,デザインは置き去りだっ…

CodeReadingWiki

ひらさんのCodeReadingWikiより.GLOBALの出力をWiki化するCodeReadingWikiだそうな.似たようなシステムを以前見たことがある気がするけど,Ajaxってのが今風だなぁ.私は自分でサーバを立てるのが面倒だったから,はてなグループ(g:plan9reading)を使って…

シンタックス・ハイライト

考える人, コードを書く人より.スーパーpre記法はファイルタイプを指定すると,シンタックスに応じて色付けしてくれるみたい.へぇ〜,早速使ってみよう. スーパーpre記法 シンタックス・ハイライト あ,行頭は行番号から始まっているんだけど,コメント(/…

OSの進化

Brinch Hansen教授のThe Evolution of Operating Systemを読んでみた.これは,OSが存在しない,まさに裸の計算機を使っていた時代から,バッチプロセッシング,マルチプログラミング,タイムシェアリング,並行プログラミング,パーソナルコンピューティン…

キーワードはケースセンシティブじゃないの!?

ちょっと忙しくてg:plan9readingが中断していたけど,再開. sched()あたりの続きをやっていていたMMU関係に突入.そこで困ったことが判明.g:plan9reading:keyword:kaddr()もg:plan9reading:keyword:KADDR()も同じエントリを指すんだな.どうしようかな.

9grid

XCPUはLANLのクラスタで使われているだけじゃなくて,9gridでも使われている.9gridは,誰でも使えるPlan9サーバ.地域的に離れた計算機を9Pで繋げて草の根的にグリッドを作ろうという目論見(たぶん).

シングルシステムイメージクラスタ

いわゆるBeowulf型クラスタは,ユーザからも個々の計算ノードが見えて,rsh/sshできる.一方,XCPUやopenMosix,SCoreなとは,ユーザに一つのシステムビューを提供し,基本的には個々の計算ノードへのrsh/sshは許さない.後者の方が,スケーラビリティがあり…

XCPU

PCクラスタ,グリッドコンピューティング関係の国際会議CLUSTER 2006で,Ron Minnich氏がXCPUについて発表した.タイトルは「XCPU: a new, 9p-based, process management system for clusters and grids」. XCPUは9Pプロトコルベースのリモートプロセス実行…

sched()

岡山カーネル勉強会のネタがLinux 2.6.18のスケジューラだったそうな.g:plan9readingでもちょうどg:plan9reading:keyword:sched()関数に到達したところだった.基本的にやっていることは変わらないはずだけど,Linuxのschedule()関数が170行で,Plan9のsche…

BlockとQueue

ようやくTCPっぽい処理に入り始めた.UNIXでは,ネットワークIO用のバッファ管理では,プロトコルスタックのレイヤごとにヘッダを抜き差しするのに便利なように,mbufやskbuffというデータ構造が使われている.Linuxのskbuffは性能を優先したためか,TCP/IP…

Alternative OS Contest Results

The OSNews Alternative OS Contestの結果が公開されている.9fansでも話題になったPlan9のレビュー記事が特別賞を受賞したようだ.まずはめでたい. エントリをよく見ると,「Introduction to MINIX 3」ってMINIX 3の紹介記事をTanenbaum教授御大が書いてい…

データ構造のサイトマップ

カーネルのように大きなプログラムになるほど,使われているデータ構造を理解することが重要になる.データ構造がわかるとコードを追うのが楽になるので,Cのコードを読むときは,まずヘッダファイルを眺めて感じを掴むことが多い.また,ひらさんの講演資料…

tcpconnect()

g:plan9reading:keyword:tcpinit()から読みはじめるってのは間違ったかな.ちょっと目を通せばわかるけど,TCPっぽい処理ってのは全然ない.で,次はg:plan9reading:keyword:tcpconnect()から.ACK処理用のカーネルスレッドを作るので,スケジューラ関係がい…

iprint(),microdelay()

ロック関係がまだ続いていて,g:plan9reading:keyword:iprint()のようなコンソール出力系や,g:plan9reading:keyword:microdelay()のような時間管理系の関数が出てきた.

malloc(2)

今週はid:kosakiさんのmalloc話があるらしい.時間が微妙だけど参加できるかな. それまでにPlan9のmalloc(2)をひらメソッドしておくのもいいかも,なんてね.おそらく極めてオーソドックスな実装になっていると思うけど.カーネルもlibcもmalloc()はPoolと…

inccnt(),deccnt(),tas()とか

ボトムアップにやろうとすると,この辺の同期排他プリミティブに行き着いちゃうのかな. g:plan9reading:keyword:inccnt(),g:plan9reading:keyword:deccnt(),g:plan9reading:keyword:tas()あたりを読む.まだ,ネットワークっぽいところにはほど遠い.しか…

Plan9をひらメソッドで読む?

以前,あろはさんに「ひらメソッドどうよ」とコメントを受けたが,昨日,ひらさんにお会いして,ちょっとやってみようかなという気になる.ただ,サーバ立てるのはおっくうだな.はてなダイアリー使って,うまく回せないものか? Wikiじゃなくて,blogを使う…