[前][次][番号順一覧][スレッド一覧][生データ]

yarv-dev:263

From: MAEDA Atusi <maeda-yarv atusi.org>
Date: Thu, 21 Oct 2004 13:58:06 +0900
Subject: [yarv-dev:263] Re: VM state version problem

SASADA Koichi <ko1 atdot.net> writes:

>  キャッシュのために、VM に状態バージョン(カウンタ)を持た
> せる、って話を前したと思うんですが、やっぱり問題があって、
> そのカウンタがオーバーフローしたらどうなるって話があると思う
> のです。

問題はオーバーフローでなく、一周して戻ってきちゃうことですね。
大小関係じゃなくて等しいかどうかでヒットを判定するので。

>  だけだから、簡単っていえば簡単なんですが、そのカウンタの
> インクリメント時に、オーバーフローチェックが必要になるんで
> すよね。

インクリメントするのはメソッドとかクラスが再定義された時ですよね。
少々遅くても良いのでは。

>  いや、何か値をインクリメントするのなら、ロックしないとまず
> いような気はとてもするんですが・・・。てことは、キャッシュに
> 触るには、まずロックしないとだめってこと? うーん。r/w lock
> にしても、やっぱり reade もロックの確認はしないと駄目だしなあ。

アトミックにやらなければいけないのは、
・メソッド等の再定義
・カウンタのインクリメント
ですよね。

writerは互いに排他制御するとして、readerに対してはwriterが、
1. 旧バージョンのメソッドを仮に、その場で無限ループするようなコードと
   か、ブロックするようなコードに書き換える。
2. カウンタをインクリメントする。
3. メソッドを本物に書き換える。
4. 無限ループあるいはブロックしているreaderを本物のコードへ誘導。
という順序で処理すれば良さそうな気がします。

>  昔から、リファレンスカウンタの値がオーバーフローしたらどう
> するんだろう、と疑問に思ってるんですが、何か対策を立てるもの
> なんでしょうか。

素朴にはオーバーフローしないサイズをとります。アドレス空間が32ビットな
ら、28ビットとれば十分(すべてのワードから指されてもOK)。

				前田敦司

--
ML: yarv-dev quickml.atdot.net
使い方: http://www.atdot.net/~ko1/quickml

[前][次][番号順一覧][スレッド一覧][生データ]

       262 2004-10-21 00:30 [ko1 atdot.net       ] VM state version problem                
->     263 2004-10-21 13:58 ┗[maeda-yarv atusi.org]                                       
       264 2004-10-21 14:18  ┗[ko1 atdot.net       ]                                     
       265 2004-10-21 15:09   ┗[maeda-yarv atusi.org]