Memory

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


これまでも多くの研究あり
既存研究の紹介
1. J-Kernel
2. K0 (KaffeOS)
3. 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 も生成
RMI の引数、返り値
capability: そのまま渡す
 object:
deep copy (by serialization or fast copy)


Thread migration


同じスレッドが domain を切り替えて実行
revoke も可

target object への参照を null にする
resource control

正確なaccountingは無理


JVM の上で動作するため
Memory

byte code 書き換えにより使用量をカウント
fragmentation を考慮していない
 JIT code によるメモリ考慮は難

resource control
 CPU Management

kernel device driver による CPU time の監視
使用制限を越えて初めてスレッドを制御
 自前の schedule policy を適用するのが難

K0 (KaffeOS)
 traditional monolithic kernel model

process の完全な分離


capability により kernel object へアクセス



process 間の direct sharing もあり
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 に必要

user mode



process はいつでもtermination可
使われている 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

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)
1.
2.
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)
4.
5.
6.
“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)
7.
8.
“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.