Tuesday, 20 July 2010

Overlay

そもそも、そんなことさせるなよって感じですが、メモリが足りないときに、コードを実行時に入れ換える技術です。

大体場所が決まっていて、そこを入れ換えることが多い。64kbtye のz80とか、640kbye の8086時代には必須でした。

Cell SPUのgccには、overlay のコードが入っていて、ちゃんと動く。そこをcallしたり、そこにreturnしたりすると、自動的に入れ換えてくれる。

なんだが、複数のコードを入れ換えた方が良いので、一ヶ所だとダメなんだよな。で、結局、手動でCache/LRUとか、いろいろ書いていたんですが... overlay ダメなんじゃないかな。

外部への参照を排除して、スタンダローンのa.outにして自分でloadするのが良いような気がしてきた。そうすれば、collect2 とかと格闘しないですむ。ライブラリ呼び出しとかはテーブルで間接参照すりゃ良いし。

gdb で、symbolic debug 出来なくなるが、今でも、出来ない部分は出来ないし。

でも、そこまでしなくてもギリギリ動くような気もするんだけどね。

Intel系だと、別空間ではなくてキャッシュなので、こういう心配は要らないんですが、その代わり、キャッシュを意識したプログラミングが必要。こういうキャッシュを「変な命令」じゃなくて、もっと、きれいに扱う方法ってないのかな。

No comments: