覚え書き

面白い。面白い。ぶへへ、何か理解が進んできたぞ。「VFS を namespace にして translator を設置して…」という話と capability との間の関係が具体的にイメージできるようになってきた。確かにこれは Unix とは全然違う (もっと共通部分が大きいと思ってた)。Hurd ML がこんなに盛り上がってるのを見るのは初めてじゃ。やれやれ、もっとやれ〜(違
そんなわけでとりあえず覚え書き。間違ってたら教えてもらえるかなという下心をもちつつ。

Process creation and caps

Hurd では、新しく作られた child process は親の capability を一部受け継ぐ。「一部」というがどの程度細かく指定できるのかはよくわからない。
EROS/Coyotos では、Java classloader みたいなことをする。つまり、constructor という object を作り、そこに「この process の startup 時には、これこれこういう capability をどこそこに置いといて欲しい」という情報を書き込み、書き終わったら、package して filesystem に置く。するとその contructor に対応する process の address space が作られて executable image が load されたとき、constructor に入ってた初期化 code が解釈されて capability が install される。そして実行が始まる。

Resource allocation

Memory ぐらいしかわかってないけど、一応書いとく。基本は "requester allocates; no free rides"。
Capability の作成とか、I/O とかの service を server S に要求するとき、それにかかる費用 (memory, CPU time, I/O 帯域ほか。ここでは memory) は requester R が確保してから request と一緒に送信する。Hurd では、memory に限って言えば R が physmem に container なるものを要求し、その container への capability を request の RPC に載せて送る。
Container というのは小切手みたいなもので、container を physmem に「見せ」ると、限度内の物理 page をもらえる。そうして確保された page は、container を作った process に「課金」され、quota の残高からさっ引かれる。多分将来は Neal の言ってた "money" というのが使われる見込みなんだろう。
;; 現行の monolithic な system (Linux, *BSD) では quota ってどういう風に指定できるようになってるんだろう
一方、EROS/Coyotos では space bank という kernel object があって、R は space bank を確保してそれへの capability を RPC に乗せる。この space bank というのは capability そのものの book keeping にかかる消費 memory をあらわすものらしい。他の object にも使えるんだろうか。
Space bank には identify とか、getAllegedType() とか、その中身の cap の素性を確かめるためのいくつかの操作が定義されている。
Container / space bank の間では、この操作の有無以外には本質的な違いがわからない。何かあるみたいなんだけど…

Hierarchical trust

Hurd の trust relationship は VFS に沿って tree 状に構築される。
Process P が child process C を作ったとすると、C は P から root "directory" への capability と、uid token (∈capability) をもらう。他にももらうこともあるらしい。Physmem への capability とかかな。
C は P を無条件に信用し、そこから受け取った cap も信用する。VFS は service の名前空間も兼ねているので、root directory への cap はそのまま C が access できる service の名前空間への capability となる。基本的に C は P 以外誰も信用しない。C が mission critical な場合は、知らないおじさんにもらった capability にはなるべく or 全く頼らない。
こうすると、TCB components を根っこに置いた trust relationship tree ができる。これの implication についてはまだ半分霧がかかった感じ。
EROS / Coyotos の trust relationship 構築についてはよくわかってない。つーか投稿多すぎて関連 post を洗い出すのが大変。