Java Operating Systems 2001/07/11 hamanaka
Java Operating Systemの定義(意味) Java byte code の実行環境 複数のアプリが実行可能 お互いを隔離可能
背景 Java の隆盛: applet, servlet, mobile agents 複数アプリケーションの同時実行 信用できないコードである可能性 ⇒ Java に “Process” model が欲しい
Process model 次の3つが必要 Protection: Resource Management: Communication:
Java OS が提供すべき機能 メモリ保護は type safety により保証 さらに次のものが必要 namespace の切り分け resource 管理 process 間通信 security これまでも多くの研究あり
既存研究の紹介 J-Kernel K0 (KaffeOS) Alta 1. @Cornell Univ. JKernel & JServer 2. 3. @Utah Univ. The Flux Research group
J-Kernel capability based model resource へアクセスは Object の参照による 複数の protection domains をサポート capability による domain 間通信 すべて Java で記述
capability Java class “Capability” のインスタンス shared object の wrapper (indirection) domain 間で share される実体 作成した domain による revoke 可 RMI の stub のような働き
protection domain Java class “Domain” のインスタンス 固有の namespace, set of threads terminate 時に生成した capability を revoke
Domain 間通信 capability のメソッド呼び出しによる like RMI: capability 作成時に stub も生成 object: deep copy (by serialization or fast copy) Thread migration 同じスレッドが domain を切り替えて実行 revoke も可 target object への参照を null にする
resource control 正確なaccountingは無理 Memory JVM の上で動作するため byte code 書き換えにより使用量をカウント fragmentation を考慮していない JIT code によるメモリ考慮は難
resource control CPU Management kernel device driver による CPU time の監視 使用制限を越えて初めてスレッドを制御 自前の schedule policy を適用するのが難
K0 (KaffeOS) traditional monolithic kernel model process の完全な分離 process 間の direct sharing もあり capability により kernel object へアクセス capability は kernel code call から得る user / kernel の 2mode precise resource accounting
process separation process ごとに heap, namespace を持つ process 間 share は shared heap を介する 制限 shared heap → user heap への参照なし user heap → user heap への参照なし それ以外はあり write barrier でこれらをチェック
capability kernel object への参照 resource へのアクセス kernel code call の返り値として取得
memory reclamation process ごとに自分のheap の GC を行う process 間には分散GC(参照カウント) cycle は? ⇒ 参照関係の制限により生じない user ⇔ kernel 間には生じ得るが lifespan がprocess termination のときに回収される
user / kernel mode 安全な process termination に必要 線引きは[6]参照 user mode 使われている resource はその process へカウント kernel mode kernel の内部が整うまで process termination 不可 使われている resource は system全体へカウント 線引きは[6]参照
precise resource accounting Memory process ごとにカウント可能 memlist (hard, soft)のによる使用量制限(?) CPU Usage thread group に CPU Inheritance Scheduling を結びつける GC cost も process ごとにカウント可能
CPU inheritance scheduling 各 thread は scheduling thread から CPU time をもらって実行 各CPU に一つの root thread もらうthreadはschedulerを指定 timeをもらったthread自身もschedulerになれる scheduler ごとに scheduling policy 設定可
namespace と class share 各 process 毎に namespace class loader により実現 class の share runtime のクラス : system shared the type of shared object : user shared これらのload は “shared loader” が行う standard class libraries の share 変更を最小限に抑え、かつ最大限 system shared へ 残りは namespace ごとに load (reloaded) (public) static field を持つクラスは share できない!
Alta hierarchical process model like Fluke sub-process を管理 sibling processes 間では direct share 可 IPC を通して取得 garbage collection は system 全体のサービス DOS attack を受け得る
control of sub-processes 親process は 子(孫,…)process のresourceを管理 memory usage のaccounting, limit CPU usage (by CPU inheritance scheduling) 親process が 子process の namespace を構築 子の要求に応えて name を resolve process ごとの namespace 可 違う名前を付けることも可能
direct sharing sibling process 間でshare可能 class が一致していることが条件 share されるすべての class に “final” 修飾子
memory reclamation system 全体での GC process termination 時 DOS attack を受け得る process termination 時 子process 以下すべて terminate terminate した process が生成した shared object の扱いは曖昧(とりあえず残すのか?)
性能比較 別紙参照(図7) 環境 300MHz Intel Pentium II with 128MB SDRAM, FreeBSD2.2.6 (Alta, J-Kernel, Kaffe) OSKit (K0)
Reference(1/3) “Techniques for the Design of Java Operating Systems”; Godmar Back, Patrick Tullmann, Leigh Stoller, Wilson C. Hsieh, Jay Lepreau; in Proc. of the 2000 USENIX Annual Technical Conference, San Diego, CA, June 2000. “Processes in KaffeOS: Isolation, Resource Management, and Sharing in Java”; Godmar Back, Wilson C. Hsieh, Jay Lepreau; in Proc. of the Fourth Symposium on Operating Systems Design and Implementation (OSDI 2000), October 2000. “The Alta Operating System”; Patrick Alexander Tullmann. Master's Thesis, July/December 1999.
Reference (2/3) “Nested Java Processes: OS Structure for Mobile Code”; Patrick Tullmann and Jay Lepreau; in Proc. of the Eighth ACM SIGOPS European Workshop, September 1998. “Implementing Multiple Protection Domains in Java”; Chris Hawblitzel, Chi-Chao Chang, Grzegorz Czajkowski, Deyu Hu, and Thorsten von Eicken ; Technical Report TR97-1660, December 1997. “Drawing the Red Line in Java”; Godmar Back and Wilson Hsieh; in Proc. of the Seventh IEEE Workshop on Hot Topics in Operating Systems, March 1999.
Reference (3/3) “Microkernels Meet Recursive Virtual Machines”; Bryan Ford, Mike Hibler, Jay Lepreau, Patrick Tullmann, Godmar Back, Stephen Clawson; in Proc. of the Second Symposium on Operating Systems Design and Implementation (OSDI'96), October 1996. “CPU Inheritance Scheduling”; Bryan Ford, Sai Susarla ; in Proc. of the Second Symposium on Operating Systems Design and Implementation (OSDI'96), October 1996.