plan9の最近のブログ記事

17 message typesからなる。
  - 3はinit/auth connectionに使われる
  - 14はmanipulate objectに使われる

  - session/attach messageは接続をユーザの認証して、設立する
    そのサーバーのrootを指すauthenticated channelを取得
  - clone messageは新しく指定されたchannelのクローンを作る。
  - walk messageは、下のレベルへ移動する
  - stat/wstat messageは、channelでポイントされたファイルの属性を読み書き
  - open messageは、channelに対して、続いて起きる読み書きの準備をする。
  - read/write messageは、ファイルへの読み書き
  - create/remove messageはファイルを作成・削除
  - clunk messageは、ポイントしてるファイルへの影響無しにチャネルを破棄する。

  - 9P messagesでキャッシングについて考えているものはない。
      - 必要ならば、サーバ内でまとめてやるか透過的なファイルシステムとして実装される

ここはかなりがんばってるなぁ。
勉強になる。

"Plan 9 at the Advanced Computing Lab" site
ACL plan 9 network

plan9の提供するシステムコールを調べてみた。
% cd /sys/src/libc/9syscall
% cat sys.h
#define SYSR1 0
#define _ERRSTR 1
#define BIND 2
#define CHDIR 3
#define CLOSE 4
#define DUP 5
#define ALARM 6
#define EXEC 7
#define EXITS 8
#define _FSESSION 9
#define FAUTH 10
#define _FSTAT 11
#define SEGBRK 12
#define _MOUNT 13
#define OPEN 14
#define _READ 15
#define OSEEK 16
#define SLEEP 17
#define _STAT 18
#define RFORK 19
#define _WRITE 20
#define PIPE 21
#define CREATE 22
#define FD2PATH 23
#define BRK_ 24
#define REMOVE 25
#define _WSTAT 26
#define _FWSTAT 27
#define NOTIFY 28
#define NOTED 29
#define SEGATTACH 30
#define SEGDETACH 31
#define SEGFREE 32
#define SEGFLUSH 33
#define RENDEZVOUS 34
#define UNMOUNT 35
#define _WAIT 36
#define SEEK 39
#define FVERSION 40
#define ERRSTR 41
#define STAT 42
#define FSTAT 43
#define WSTAT 44
#define FWSTAT 45
#define MOUNT 46
#define AWAIT 47
#define PREAD 50
#define PWRITE 51
% grep -v '_' sys.h | wc -l
37

'_'で始まるのは、番号がre-assignされている。
BRK_はbrk(), sbrk()から呼ばれているからカウントするべきだが、代わりにSYSR1をカウントしている。
よって、大体本質的なシステムコールは40個未満であることが分かる。

これだけをパーっとみても、どれだけ抽象化が美しく行われているかわかる。
ちなみにFreeBSD 4.8は393個, NetBSD 1.6が345個、solaris8が255個、linux2.2.20で237個という
ことで、まぁどれだけ少ないか分かるわな。そういや、amoebaも少ないって書いてあったな。
OSの基礎と応用、AmoebaとMachの比較によると、以下のようになる。

Amoeba 30個、 v7 UNIX 45個、 4.2BSD 84個、 Mach 153個、SunOS 4.1.1 165個
さて、現在のAmoebaは何個なんだろう。でも比較的Amoebaの哲学は、
「完璧とは、追加するものが何も残らなかったときになされるのではない。奪うものが
何も残らなかったときになされるのである。」という有名な格言を基にしているので、
そんなに増えてないのかな。とりあえず、知りたいところだ。

プリントアウトしたマニュアルが欲しかったので、
Vitanuova.comでplan9 v4を発注した。送料込みで$188。
まー、仕方ない。

infernoを買った日本の代理店は、糞高い。ぼりまくり。
さようなら, NTL

こいつはおもろい。
aquarelaというsambaみたいソフトだが、XPとかから
\\plan9.xxx.org\ABC
と参照されたら、ABC != "local"でない限り、あるアクションを起こす。

つまり、たとえば\snapだったら、その場でsnapshotが入ってる領域をマウントして、
返してくれる。
笑ってしまうのは、sourcesを指定すると、bell-labまでマウントしにいって、それを
返してくれる。今はauthにしくってて、コンソールにエラーがでているが。。。

これらのアクションは/rc/bin/9fsで定義される。

できた!!

とりあえず、kfsを使ってるのがなんとも気持ち悪いが、まー、いいや。

んーと、snapshotは30分おきに設定。archiveは毎日0時。

fossilは外から入った場合だけ、/usr/にbindされる設定。
なので、/usr/imaq以下のいじったファイルは、ちゃんとバックアップされる
というわけだ。はっはー。

http://www.cotswold.demon.co.uk/dist/aquarela/
を入れた。sambaみたいなもん。

快調。XPから触れてます。
インストールはちょー簡単。
解凍して、mk install。後は使うだけー。

やっぱりOSが限定されてるときれいやねー。
configureとか醜いね。はっきりいって。

SSHキー作成
% aux/ssh_genkey
% chgrp -u bootes /sys/lib/ssh/hostkey.*
% /sys/lib/ssh/hostkey.secret.factotum > /mnt/factotum/ctl

認証サーバの設定
cd /rc/bin/service.auth
mv authsrv.il566 il566  #サービス停止
mv authsrv.tcp567 tcp567 #サービス停止
echo boo > /dev/sdC0/nvram #適当なものを書き込み、次回起動時に問い合わせるようにする。

CPUサーバの設定
cd /rc/bin/service
echo '#!/bin/cpu -R' >il17010
echo '#!/bin/cpu -R' >tcp17010
chmod +x *17010

cronの設定
disk/kfscmd 'create /sys/log/cron sys sys 666 a'

再起動
authid=bootes, authdom=imaq.net, secstore key=passphrase1, password=passphrase2
を入力

ユーザ設定
auth/changeuser bootes
auth/changeuser imaq

Plan9では、シグナルはノートと呼ばれ、文字列で扱う。
DELで発生するキーボード割り込みは、"interrupt"として扱われる。

int fn(void *a, char *msg){
    ... /* キーボード割り込みが発生した場合の処理 */
    if(strcmp(msg,"interrupt") == 0)
        return 1;
    return 0;
}

他のプロセスにノートを送るには、
% echo -n "interrupt" > /proc/23/note
とする。システム定義以外に勝手にユーザ定義ノートを作れる。

おもろいね。シグナルってスケールしないしね。SIGUSR1, 2とかってあほくさい。
これの利点はシグナルが分散システムのすべてのマシンにマウントしたファイルシステムを
通して送れることだって。確かにシグナルって他のマシン上のプロセスに透過的に送れないやね。勉強になる。

このアーカイブについて

このページには、過去に書かれたブログ記事のうちplan9カテゴリに属しているものが含まれています。

前のカテゴリはPapersです。

次のカテゴリはResearchです。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

plan9: 月別アーカイブ

Powered by Movable Type 4.01