カーネル読書会番外編「セキュアかつ使いやすい趣味OS「talos」の紹介」
仕事が年末進行の時期だけど、時間を作って(サボって?)カーネル読書会に参加してきた。お題は、Linuxとは直接関係なく、独自OS「talos」の開発話。最近は目の前の仕事ばかりしていたので、とても楽しい時を過した。以下、メモ。
コンセプトは、「アプリケーション」の否定。各アプリケーションがそれぞれOSにシステムコールを発行してファイル操作をしたりソケットを開いたりするのではなく、「この種類のファイルを扱うエージェント」とか「このソケットを扱うエージェント」といったエージェント単位で動作。ケイパビリティの考えはなくて、ひとつのリソースはひとつのエージェントだけがアクセスでき、エージェント間で相互に呼びあう。
このへんの設計は、1B/V2(B-TRON)の影響を受けているんだとか。あと、UIなどの一貫性としてはsystem 6のころのMacの影響もあるとか。
これらのエージェントは、ブラウザのプラグインのようにカーネルのプラグインとしてイメージ。カーネルからユーザープロセスのメモリ空間は丸見え。サンドボックス上で動くようになっていて、任意のコードを実行するようなマルウェアに対してセキュアだとか。超モノリシックなカーネルなんだけど、見方によっては、マイクロカーネル+モジュール的なエージェントという構成かも、と。
開発プロセスはLinuxに影響を受けていて、GPLなので好き勝手に改造してという「フォーク上等」モデル。ライセンスはGPL+プロプライエタリ用のデュアルライセンスで、GPL違反のときなどの事後契約はボッタクリ価格にするとかw
実装の特徴として、リソース管理はなんでも双方向リストになっている。たとえば(仮想)メモリ確保は、2^n Byte単位のサイズごとに分けられた空き領域リストから必要なサイズの領域をもらってくる。O(1)。リストになっているのはいちど返却された領域で、最初はヒープから取ってくる。空間効率はよくないが、気にしない。実記憶の管理もリストでO(1)。サイズが固定なのでリストも1つで、連続ページは直接メモリ空間から確保する。
- Q:Texの影響は?
- A:あとで知った
- Q:アドレスのアラインは?
- A:ページをまたがないようにしている
- Q:最近のglibcでも同じようなことをやっているのでは
小技として、ページディレクトリの最後のエントリがページディレクトリ自身を指すようになっていて、単なる配列になって便利。
ほかの実装の特徴として、tick値が存在しない時間管理がある。起動してからの実時間(μ秒単位)を持ち、tickハンドラはその周期分だけ時刻を加算する。
苦労としては、「競合状態神経症」になって、何でもロックしたくなったり、ロックしてるのにロックしたくなるようになった。
また、GUIを始めたら、やることが増えて大変。GUI関係では、オブジェクトの初期化をコンストラクタで済ませたいのにC++ではそれができない場合がある。このネタでは、Factoryパターンを許すか許さないかのような議論にもなっていた。
計画としては、入力のIMをモードレスIMにしたい。POBoxみたいな学習と予測のIMで、表示しただけでも学習する。英字だったら補完に近いかも。
- Q:コードと文章がまじった文章などは
- A:それは難しい
また、マルチクラスタにしたい。1つのノードが複数のクラスタに所属するという、クラスタというよりアクセス制御の単位。ネットワーク上にデータだけがころがっている感じ。イメージとしては、パソコンを買ってきたら、ネットにつないでpxeブートでインストールして、ノードに登録して使う。
- Q:データの分散は?
- A:まだ
P2Pディレクトリサービスも考えている。条件に合致するノードを探すだけのもの。そうなるとIPv6のアドレス空間がほしくなるので、ローカルはIPv6で、グローバルはIPv4で、という6to4アドレスルーティングも考えている。
- Q:カーネルがGUIをやる?
- A:そうです
- Q:データ型と操作の結びつきは?
- A:データが型をもっていて、エージェントを呼び出す。TRONに近いモデル。
- Q:エージェントがエージェントを呼び出す?
- A:画面描画エージェントとファイル操作エージェントのように、それぞれ専門のエージェントがいる
コメント
コメントの投稿
トラックバック
http://emasaka.blog65.fc2.com/tb.php/517-5f006232
