応用情報技術者 2016年 春期 午前2 問07
問題文
リアルタイムシステムにおいて、複数のタスクから同時に呼び出された場合に、並行して実行する必要がある共用ライブラリのプログラムに要求される性質はどれか。
選択肢
ア:リエントラント(正解)
イ:リカーシブ
ウ:リユーザブル
エ:リロケータブル
リアルタイムシステムにおける共用ライブラリの性質【午前2 解説】
要点まとめ
- 結論:複数タスクから同時に呼び出される共用ライブラリは「リエントラント」である必要があります。
- 根拠:リエントラントとは、同一コードが複数の実行コンテキストで安全に並行実行できる性質を指します。
- 差がつくポイント:リアルタイムシステムではタスクの同時実行が頻繁なため、状態を共有せず再入可能なコード設計が重要です。
正解の理由
「リエントラント」は、割り込みや複数タスクから同時に呼び出されても安全に動作するプログラムの性質です。共用ライブラリがリエントラントであれば、状態を共有せずに複数のタスクが同時に利用でき、リアルタイム性を損なわずに処理が可能です。
よくある誤解
リエントラントとリカーシブ(再帰的)を混同しやすいですが、リカーシブは関数が自分自身を呼び出す性質であり、並行実行の安全性とは異なります。
解法ステップ
- 問題文から「複数のタスクから同時に呼び出される」ことを確認する。
- 「並行して実行する必要がある」ことから、同時実行に耐えうる性質を考える。
- 選択肢の意味を整理し、並行実行に適した性質を選ぶ。
- 「リエントラント」が並行実行に安全なコードを指すことを理解し、正解とする。
選択肢別の誤答解説
- ア: リエントラント
正解。複数の実行コンテキストで安全に再入可能なコード。 - イ: リカーシブ
関数が自分自身を呼び出す性質であり、並行実行の安全性とは無関係。 - ウ: リユーザブル
再利用可能なコードを指すが、同時実行の安全性は保証しない。 - エ: リロケータブル
プログラムが任意のメモリ位置に配置可能な性質で、並行実行とは関係ない。
補足コラム
リエントラントコードは、グローバル変数や静的変数を使用せず、必要なデータはスタックや引数で管理します。リアルタイムシステムやマルチスレッド環境での安全なプログラム設計に不可欠な概念です。
FAQ
Q: リエントラントとスレッドセーフの違いは何ですか?
A: リエントラントは割り込みや再入可能性に焦点を当て、スレッドセーフは複数スレッドからの同時アクセスに対する安全性を指します。両者は似ていますが、適用範囲が異なります。
A: リエントラントは割り込みや再入可能性に焦点を当て、スレッドセーフは複数スレッドからの同時アクセスに対する安全性を指します。両者は似ていますが、適用範囲が異なります。
Q: リエントラントコードはどのように実装すればよいですか?
A: グローバル変数を使わず、必要なデータは関数の引数やローカル変数で管理し、共有資源へのアクセスは排他制御を行います。
A: グローバル変数を使わず、必要なデータは関数の引数やローカル変数で管理し、共有資源へのアクセスは排他制御を行います。
関連キーワード: リエントラント、並行実行、共用ライブラリ、リアルタイムシステム、再入可能

\ せっかくなら /
応用情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

