再配置可能(リロケータブル)なプログラムなら、主記憶上のどこに配置しても問題がなく実行することができます。
再配置可能なプログラムはベースアドレス指定方式などの方式を利用しているので、メモリ上のどこに配置しても問題なく実行することができます。
ベースアドレス方式の復習です。
オペランド部の値にベースレジスタの値を加算することで実行アドレスを求める方式です。
命令部 | オペランド部 900
ベースレジスタ 100
ベースレジスタ + オペランド部 = 100 + 900 = 1000
今回だとアドレスは1000です。
メモリ上のどの位置にロードされても、命令を変えることなく実行できるというメリットがあります。
プログラムの4つの性質をあらためて見てみます。
再配置可能(リロケータブル)
主記憶上の、どこに配置しても実行することができる性質を、再配置可能(リロケータブル)と言います。
再使用可能(リユーザブル)
主記憶上にロードされて処理を終えたプログラムを、再ロードすることなく繰り返し実行できる性質を再使用可能(リユーザブル)と言います。
再入可能(リエントラント)
再ロードすることなく繰り返し実行できる再使用可能プログラムにおいて、複数のタスクから呼び出しても、互いに干渉することなく同時実行できるという性質を再入可能(リエントラント)と言います。
こちらはイメージしにくいので図で書きます。
リエントラント(再入可能)
プログラムA → プログラムB ← プログラムC
---------
プログラムB |
手続き部分 |
データ部分 |
---------
上記のようにデータ部分をタスクごとに持つことで、互いに干渉せず
並行して動作することができます。
再帰的(リカーシブ)
実行中に自分自身を呼び出すことができるという性質を再帰的(リカーシブ)と言います。
基本情報とは関係ないですが、再帰に関することを下記にまとめてみます。
再帰関数
自分自身を呼び出す関数ですね。
再帰の条件をしっかりしないと無限に繰り返してしまいます。
function hoge($args) {
if($args > 0) {
echo $args - hoge($args - 1)."\n";
return;
}
}
hoge(10);
1
2
3
4
5
6
7
8
9
10
関数の中にさらに関数を入れて実行しています。
詳しくまとめようかと思いましたが、他の方の参考記事の方がわかりやすいのでそちらを参考にした方が良さそうです。
https://qiita.com/drken/items/23a4f604fa3f505dd5ad
まとめ
アルゴリズムなども関係してくる場所なので、もっと深く理解する箇所かと思いますが、とりあえず一旦wait