第20回オープンソーステクノロジー勉強会「Plan 9について」にいってきました

Plan 9について

産業技術総合研究所研究員 高野了成(@oraccha)さん

UNIXに影響を与えたもの
分散OS Plan9の全体像
  • 一回書いたら絶対消えないfilesystem
  • 電話線等でCPUサーバにアクセス
  • リソースにアクセスするには9pという共通のプロトコルがあり
Plan9の核となるアイデア
すべてがファイル
  • すべての資源は名前を持つ
  • バイトストリームの open-read-write-close
UNIX哲学の消え去り

ファイルの考えとはずれた

ファイルメタファ
  • UNIXはたいていのものがファイル
  • Plan9はすべてがファイル
    • /dev/cons/proc,network,interface,rio window system,http,ftp,環境変数
    • プロセス生成、ネットワークアドレス、共有メモリは違う
Windowもファイル
rio window system
  • /dev/^(cons mouse window)をプロセス毎に多重化するファイルサーバ
    • cat /dev/mouseして マウスを動かすと連動して数字が羅列される
  • 誰でもカーネルにアクセスできるか?
    • rootユーザはない物理的に壊れるがネットワーク越しにとられない分散を前提
  • window system とosが密結合に見えるが?
    • rio以外のwindow sysemもOK
  • ユーザ管理は?
    • authentication serverが必要だが、stand aloneではそんなこともない
  • /net
    • ネットワークもファイルとして抽象化
      • /net/ether0,/net/tcp,/net/udp,/net/dns
      • /net/tcp/0や/net/tcp/1は各コネクションを表している
      • catとかechoをつかえば echo server/clientができる
cat /net/tcp/clone
10
cat > /net/tcp/clone connect 204.178.31.32
ネットワーキングAPI
  • ネットワーク操作もファイルへのopen-read-wrie-closeで可能(Plan9にはioctlはない)
  • BSDソケットのように、専用システムコールは不要
  • 使いやすいライブラリ関数を提供
  • Goのdial APIPlan9からきてい
UNIXで動くPlan9環境
  • drawterm
    • UNIXからPlan9 CPUサーバに接続するためのグラフィカルターミナル
プログラミング環境
$ acme hello.c
#include <u.h>
#include <libc.h>

int main(){
  print("hello");
}
$ 8c hello.c
$ 8l hello.8
$ ./8.out
  • Plan9にはselect,epollのようなAPIがないがどうやってネットワークプログラミングをするのか?

軽快なPlan9

  • @go_vmさん
  • 仮想計算機の研究
軽快なPlan9ってなに?
  • 仮想計算機上でPlan9を動かしてみる 冊子
    • KVMの解説とVMの床抜き
想定環境
KVMについて
VM上でのCPU動作
  • 速度等の問題から、通常ゲストOSのコードも実CPUでそのまま実行される
    • いちいちエミュレートすると遅い
こまること
  • ゲストOSの命令でCPUの状態を書き換えてしまうような命令はホストOSで動かしてはだめ
    • CPUの命令には、実行をトラップできないとまずい命令
      • 特権命令:実行をトラップできる命令
      • センシティブ命令:実行をトラップしない命令
  • X86では特権命令のセットの中に入っていない、センシティブ命令がいくつかあるので工夫が必要
    • センシティブ命令を実行前に自動的に書き換える
    • 実行前に書き換える
  • Xenでは そもそもセンシティブ命令を発行しないようにOSをいじくる
    • 書き換えのコストがかかる
IntelAMD
  • 上記を解決するCPUの仕組みを開発
VMXを有効にすると
  • CPUの中に2つの世界がつくられる
    • VMX-root mode
      • いままでの世界
    • VMX-non root mode
      • すべての センシティブ命令がトラップ可能
  • VMX-non root modeでguest osを動かせばうまくいく
KVMによる仮想化
  • KVMはCPUのvmx命令群を呼ぶだけ
  • 周辺機器のエミュレーション:qemu
  • cpu実行:カーネル空間
Plan9 on KVM
  • ゲストのPlan9がそとのネットワークに出る方法がわからない
    • Plan 9上のユーザプロセスから、直接ホストのLinuxに通信をお願いすればよい
      • そこ抜き
KVMを改造
  • 書き取れませんでした
  • vmcall.s
MOVL b+0(FP).BX
.
.

詳しくは
http://circle.paravirt.org/c77

http://labs.gree.jp/Top/Study/20100210/Report.html