セグメント方式のアドレッシングとリロケータブルオブジェクト
この手の話は昔のパソコンを調べるといい気がする。
まずリロケータブルだけど
きょうびの仮想アドレスを使ってメモリアクセスするコンピュータではリロケータブル処理する必要がないようだ。
リロケータブルなプログラムとは?
アセンブラでプログラムを書いてたとえば無限ループするプログラムを書いたとして
プログラム中で指定するジャンプ先は自分のプログラムが置かれた場所になるわけだけど、これを決め打ちで0x1000番地としちゃうと、このプログラムは0x1000番地に置かれたときにしか成り立たなくなる。
これが、どこの番地においても成り立つプログラムはリロケータブルであるといえる。
リロケータブルなプログラムを作れるコンピュータは?
要は相対的なアクセスが必要になるわけだけど、設問ではセグメント方式のメモリアクセスと絡めて出題されている。
セグメント方式とは?
むかーしのインテルの8086というプロセッサ、この子の汎用レジスタは16bitだった。
でもICのアドレスバス用の足は20本生えていて1MB(メガビット)のメモリが接続できた。
でも汎用レジスタで表現できるのは64kb(キロビット)の空間だけ。
どうしよう。。
ならアドレスの指定を2段階でやりましょう!と
ベースになるアドレスとオフセットになるアドレスを組み合わせてアドレス指定を行う。
これによってめでたく大容量のメモリを扱うことができるようになった。
でリロケータブルとの関係は?
セグメント式は実メモリを細切れにして使うイメージになる。
プログラムからのメモリの参照はオフセット(相対)なのでリロケータブルなオブジェクト
になるという。