II-27-10. システム最適化の方式

組み込みシステムの性能向上を狙いとした設計を行う際に留意すべきポイントを示す。リアルタイム性、クリティカル性、ハードウェア容積による制約といった各種の制約のもとでシステムを最適化するための、C言語プログラムや組み込みJavaによる設計方針を解説する。

【学習の要点】

* C言語プログラムでは、言語仕様の活用、プロセッサ特性の活用、コンパイラの拡張機能・最適化機構の活用によりシステムの最適化を行う。

* 特に、コンパイラの最適化機構では、使用メモリ量の最適化を扱うことが多い。

* Javaのリアルタイム仕様であるRTSJ (Real-Time Specification for Java)ではガベージコレクションにポリシーを適用し、リアルタイム制約に対応する。

図II-27-10. RTSJの特徴

【解説】

1) 組み込み開発における最適化 – C言語のコンパイラによる最適化

* 実行効率を最適化する手法として、言語仕様の活用、プロセッサ特性の活用、コンパイラの拡張機能・最適化機構の利用、などが挙げられる。他にもリンケージエディタによる最適化などが考えられる。(Ⅰ-27-9参照)

* コンパイラの最適化においては使用するメモリ量と速度のトレードオフが発生する。以下にコンパイラによる最適化オプションの例を示す。

- インライン展開を行うと、速度は向上するが、メモリの使用量が急激に増えるため注意が必要である。

- 汎用レジスタの退避・復旧のオプションを利用する際にはメモリの使用量を抑える場合に、RAMの使用量が増大する場合があり、注意が必要である。

- 四則演算、比較、代入式の高速化を利用する場合、複数の命令による処理を避けるために、ランタイムライブラリを利用するオプションが用意されている。ランタイムライブラリを使うことで、実行速度は多少落ちるものの、メモリ使用量を抑えることができる。

2) 組み込み開発における最適化 – Java言語のリアルタイム仕様

* RTSJ (Real-Time Specification for Java)はJava言語でリアルタイムの振る舞いをどのように扱うかを規定した仕様である。

* RTSJにはリファレンス実装が提供されている。

- RTSJ Reference Implementation (RI) and Technology Compatibility Kit (TCK)

- http://www.timesys.com/java/

* スレッドのスケジューリング、メモリ管理、同期とリソース共有、非同期イベント処理などに特徴がある。

* スケジューリングフレームワークは”Schedulable”と明示されたエンティティのみをスケジューリングの対象とし、実行可能性の分析を行う。また、エラーの時のために、適切なハンドラーのスケジューリングを行う。従来のJVMに無かった優先度順位をつけることができる。

* メモリ管理に関して、以下の3種類のメモリモデルを定義している。GCによる時間の遅延がクリティカルな場合にのみ、従来のヒープメモリ以外のモデルを適用する。

- Heap : GC(ガーベッジコレクション)の対象となる。従来のモデル。

- Immortal : GCの対象とならず、回収もされない。

- Scoped : GCの対象外だが、使われなくなると回収される。

* ソフトリアルタイムのスレッドは以下のようにして生成する。

- (従来)Thread thread = new java.lang.Thread();

- (ソフトリアルタイム)RealtimeThread rtThread = new javax.realtime.RealtimeThread();

OSS Course Naviのコンテンツは IPA OSS モデルカリキュラムを基としています。