rioウィンドウシステム

rioPlan9のウィンドウシステムである.rioはマウスを多重化して,プロセスごとに/dev/mouseが存在しているように見せかけると書いた.これはマウスに限らず,コンソールやスクリーンに対しても同じことが言える.
nsコマンドでrioが起動しているときの名前空間を見てみると,

term% ns | grep rio
mount  '#s/rio.oraccha.23' /mnt/wsys N142,20,140,610,450
mount -b '#s/rio.oraccha.23' /dev

#sはsrvバイスで,サービス用の通信チャネルを提供する.ちなみに,rio.oraccha.23はrio.$user.$pidである.このsrvバイス経由で/mnt/wsysと/devに「何か」をmountしていることがわかる.「何か」というのはrioが提供するマウスなり,スクリーンといったリソースである./devの方は-bオプションを使っているので,ユニオンディレクトリになる.さらに-b(MBEFORE)なので,rioが提供するファイルが元のファイルより優先される(元のファイルが見えなくなる).このように,ウィンドウシステムもPlan9の世界ではファイルサーバとして実装される.
イメージとしてはこんな感じかなぁ.ポイントはアプリケーションとrioが見えている名前空間が違うので,同じ/dev/mouseにアクセスしても実際には,アプリケーションにはrioが提供する#s/rio.oraccha.23/mouseが見え,rioには#m(本物のマウスデバイスドライバ)が見えるという点だ.