応用情報技術者平成29年春期 午前7
プログラムの特性に関する記述のうち,適切なものはどれか。
プログラム構造によって生じる特性には次の4つがあります。
1、リエントラント(Reentrant,再入可能)
プログラム内で使用する変数部分を各プロセスごとに割り当てることで、複数のプロセスで同時に使用できる特性。
よりよい方法として、モジュール性とデータのカプセル化の性質の利用があります。複数のスレッドから同時に呼び出されても正しく動作する関数を「リエントラント (再入可能)」関数と呼びます。再入可能な関数を作成するには、その関数にとって何が正しい動作なのかを把握することが必要です。
複数のスレッドから呼び出される可能性のある関数は、再入可能にしなければなりません。そのためには、関数のインタフェースまたは実装方法を変更する必要があります。
リエントラントの問題は、メモリーやファイルなどの広域的な状態におかれているものをアクセスする関数で生じます。それらの関数では、広域的なものをアクセスする場合、スレッドの適当な同期機構で保護する必要があります。
2、リユーザブル(Reusable,再使用可能)
主記憶へのプログラムの展開を初回実行時のみ行い、それ以降はロードせずとも何度でも正しく使用できる特性。
プログラムがメインメモリに読み込まれて実行された後、そのまま再び先頭から同じように実行し直すことができる性質を表す。実行時に自らのコードを書き換えたり、内部の状態を表す変数などを変更し(たままにし)ないなどの条件が必要となる。
3、リカーシブ(Recursive,再帰可能)
プログラム中において自分自身を呼び出すことができる特性。
4、リロケータブル(Relocation,再配置可能)
プログラムを主記憶上のどの位置においても正しく実行できる特性。
命令が参照するメモリ上の位置の指定を、その命令が置かれている現在位置からの相対位置や、プログラム先頭からの相対位置などで指定するようにしておけば、プログラムをメモリのどこに置いても正常に動作する。このようなプログラムのことをリロケータブルであるという。
ーーーーーーーーーーーーーーーーーーーーーー
補足
リアルタイムシステムにおいて,複数のタスクから並行して呼び出された場合に,同時に実行する必要がある共用ライブラリのプログラムに要求される性質はどれか。
1、共用ライブラリは、
1つのプログラムを複数のプロセスが共用する前提で作られます。
共用とすると、PGMごと、変数は別々で割り当てないと、混乱になってしまいますね。
特にリアルタイムシステムにおいては、他のプロセスがライブラリを解放するのを待つようでは処理が遅延し、システムとして致命的となるため「リエントラント(再入可能)」なプログラム構造である必要があります。
リエントラント(Reentrant,再入可能)とリユーザブル(Reusable,再使用可能)の違いは、
・リエントラントは、プロセスごと、変数のメモリが用意される。
PGMがひとつ、DATAはプロセスごと持つ
・リユーザブルは、そもそも、変数が変更されたりなどはないので、再度利用できる(共通関数などのように考えられる)
参照:
リエントラント (再入可能)
https://docs.oracle.com/cd/E19455-01/806-2732/guide-3/index.html
リエントラント
https://ja.wikipedia.org/wiki/%E3%83%AA%E3%82%A8%E3%83%B3%E3%83%88%E3%83%A9%E3%83%B3%E3%83%88