Styx over HTTP

StyxをHTTPに乗せてしまう実装をみつけた→http://code.google.com/p/limbo-machine/

という仕組み。サーバへの接続はこんな感じでやってる。(一部抜粋)

--styx-fs.js
StyxFS.prototype.mount = function(user, aname) {
    this.styx.version();
    var qid = this.styx.attach(1, user, aname);
    this.root = new Resource(aname, 1, qid);

    return this.root;
}

--styx-protocol.js
Styx.prototype.attach = function(fid, user, aname) {
    var tAttach = new Message([], MessageType.Tattach, this.tag++);
    tAttach.add32(fid);
    tAttach.add32(NOFID);
    tAttach.addString(user);
    tAttach.addString(aname);
    tAttach.adjustSize();

    var rAttach = this.conn.tx(tAttach);
    var e = getError(MessageType.Rattach, rAttach);
    if (e == null)
        return new Qid(7, rAttach);

    this.onerror(e);
    return null;
}

--connection.js
Connection.prototype.tx = function(imsg) {
    this.req.open("POST", this.service, false);
    this.req.overrideMimeType("text/plain; charset=x-user-defined");
    this.req.send(marshall(imsg.getBytes()));

    if (this.req.status > 299 || this.req.status < 200)
        return new Message([]);

    var omsg = new Message(unmarshall(this.req.responseText));
    if (omsg.get32(0) != omsg.length())
        this.onerror("message lengths do not match");

    return omsg;
}

早速テストしてみたいけど、まだ引越しの片付けが終わってないのでPCが用意できず。
既存のStyxサーバとWebアプリの"糊"としては有用かな。このやり方がメインになってしまうと鬱だけど。

ScreenOS Cookbook

NetScreenの料理本が出た。

ScreenOS Cookbook: Time-Saving Techniques for ScreenOS Administrators

ScreenOS Cookbook: Time-Saving Techniques for ScreenOS Administrators

  • 作者: Stefan Brunner,Vik Davar,David Delcourt,Ken Draper,Joe Kelly,Sunil Wadhwa
  • 出版社/メーカー: O'Reilly Media
  • 発売日: 2008/03/07
  • メディア: ペーパーバック
  • クリック: 20回
  • この商品を含むブログ (3件) を見る
手元に置いておきたい本だけど、財政難なので経費で買ってもらう。購入稟議通ってくれ。

PoOSを読んでわかったことについて忘れないうちにメモ。

  • Infernoのプロセスは全部スレッド。
  • ユーザプロセス?カーネルスレッドのインタプリタがDisの命令解釈してる時点でスレッド。
  • そのスレッドは誰がコントロールしてるの?ホストOSだぜ。
  • ホストOSに複数スレッドをコントロールされたら、Inferno(カーネルを含めて)上のプロセスがメモリの競合とかするんじゃ?LimboとDisをなめんな。競合しないように設計されてる。角度とか。
  • 同時実行可能なインタプリタはひとつだけだぜ。
  • ユーザプロセスは実行にインタプリタを要求するぜ。利用可能なインタプリタがなければ新しいインタプリタが生成されたりしちゃうぜ。だからユーザプロセスは複数のインタプリタを渡り歩いたりするんだな。
  • ここで言ってるインタプリタってのは、レジスタセットとか持ってる仮想CPU的なイメージな。
  • でもJITコンパイルされたユーザプロセスは、上記のような挙動じゃないぜ。知りたかったらソース嫁。

という内容でした(プロセス管理の章の冒頭)。

なんというか、言語にとって理想的なCPUを物理的に作るのが難しいんならソフトウェアで作ってしまえよ、って発想でできたのがInfernoなんだな、と感じた。で、プロセス(スレッド)の動作ルールとか環境をInfernoが提供している、と。

Disの命令セットとLimboを改造すればもっとクレイジーなこともできそうだなぁ。

Principles of Operating Systems

Inferno関連の本が新しく出版されたようなので購入。

http://www.course.com/catalog/product.cfm?isbn=978-1-4188-3769-3

目次を見るとInfernoに特化した内容じゃないですが。どのへんまでInfernoに突っ込んでるのか楽しみ。

getauthinfo

あたらしく1台Infernoサーバを立ち上げようとしてハマってしまった。クライアントでmountができなかった。理由は簡単。mountされる側でgetauthinfoコマンドを打って証明書を引き出してなかった。"svc/net"と打って「keyファイルがない」といったエラーメッセージがでたので気づいた。
じつはここに至るまでにもたくさんつまづいた。Infernoの各種サービス用に、6600〜6677番ポートを開けるようにipfwの設定をしたのだが、リモートからmountできない様子。ipfwのログには6666番をacceptした、とログが残ってるのに…と思ってたらInferno自体を起動していなかった。
1ヶ月ぶりの更新"らしい"内容だ。