はじめに
OMG認定組込み技術者資格試験プログラム「OCRES」( オークレス;OMG-Certified Real-time and Embedded Specialist Program)は、グローバルな標準に対する資格認定試験です。
その出題範囲は、設計コンセプトやリアルタイムOSといった組込みエンジニアとしての基盤知識とUML(Unified Modeling Language)やMDA(Model Driven Architecture)というグローバルスタンダードの知識までカバーしています(表1 ) 。組込みソフトウェアエンジニアとしての基本技術を習得したうえで、海外でも活躍できる人材像を目指しています。
今回は、OCRESの予想問題を2題取り上げます。最初に、(1)設計の基本であるモジュール分割に関する出題、そして(2)リアルタイム制御に不可欠なスケジューリングに関する出題です。
表1 OCRES出題範囲
分野 項目
ソフトウェア工学 設計コンセプト
リアルタイムOSの実際上の問題
コーディングの問題
性能工学
MDA モデルドリブンアーキテクチャ
UML UMLプロファイル:スケジュール、性能、時間
UMLプロファイル:サービス品質、フォールトトレランス
CORBA リアルタイムCORBA
組込みCORBA(CORBA/e)
軽量CORBA
データ配給サービス
そのほか 配備と構成
トランスポートフレームワーク
問題1
Q:良いモジュラリティの特徴として、正しい記述をひとつ選択せよ
[A]ひとつのモジュールで、複数の処理を実現している
[B]ひとつのモジュールは簡潔で、ひとつの目的のみを実現している
[C]たくさんのデータをアクセスし、複雑な処理を実現している
[D]たくさんのモジュールと連携し、それらの協調動作を実現している
モジュールとは、関数/クラス/ファイル/ディレクトリなどのプログラムの単位のことです。これは、関数分割などの際に、どのようなモジュールを設計すればよいのか、という実践でも必須の知識であるといえます。
要点は、モジュール強度とモジュール結合度という設計尺度です。モジュール強度とは、凝集度(コヒージョン)とも呼ばれており、モジュールの内部的な結びつきの強さの尺度です。モジュールは単一目的であるほど、よいモジュールであり、凝集度が高い、といえます。次に、結合度ですが、これはモジュール同士の結びつきの強さの尺度であり、カップリングとも呼ばれています。結合度が弱いということは、モジュールの独立性が高いということになり、よいモジュラリティであるといえます。結合度が弱いことを「疎結合である」とも表現します。
モジュラリティに関しては、凝集度が高く、結合度が弱いモジュールがよいと覚えておけばよいでしょう。
※答えは[B]です。
問題2
Q:リアルタイムスケジューリングに関して、正しい記述をひとつ選択せよ
[A]最短ジョブ優先方式では、処理時間の長いタスクを最優先する
[B]最短ジョブ優先方式では、待ち時間を最小化できる
[C]プリエンプティブなスケジューリングを行えば、デッドロックを回避できる
[D]プリエンプティブなスケジューリングでは、実行の優先順位が逆転することはない
この出題は、リアルタイム制御のスケジューリング方式と、それに付随するパフォーマンスやデッドロックの出題です。
代表的なスケジューリング方式である、最短ジョブ優先方式やレートモノトニック(Rate-Monotonic)を理解することで、スケジューリングのしくみがわかります。
最短ジョブ優先方式では、処理時間の短いジョブを最優先して実行することで、ジョブの待ち時間を最小にできます。ただし、この方式はジョブの処理時間を知っておく必要があるため、実用に際しての課題はあります。スケジューリングの考え方としては、最も基本的なものですので、混ぜ処理した時間が短いジョブを優先すると待ち時間が最小化できるのかを理解しておくことが大切です。それを理解しておくと、レートモノトニックの特徴も理解が容易になるでしょう。
デッドロックとは、複数のジョブが資源を循環して持ち合うことで発生します。
セマフォによる資源の排他制御の結果、タスクの優先順位が逆転する現象が起きることがあります。これをプライオリティインバージョンと呼びます。
このような、タスクのスケジューリングに関しては、スケジューリング方式と資源の競合、そして、横取り(プリエンプティブ)やデッドロックという概念を理解しておくことが大切です。それらの組み合わせで、どのような現象が生じえるのかということをいくつか考えてみたり、開発の現場でどのジョブが動いているのか、どのタイミングで切り替わっているのか、ということを意識しておくことで、徐々にリアルタイムスケジューリングの感覚がつかめるはずです。
※答えは[B]です。
推奨図書
ソフトウェア工学分野の参考書として、『 SOFTWARE ENGINEERING for REAL-TIME SYSTEMS』( 注 :11月和訳予定)が推奨図書となっています。試験対策本としても使えますが、組込みソフトウェア開発の実務においても必要な項目が満載です。筆者は、「 diagramming」という設計技術に多くのページを割いて、きちんと説明しているところに好感を持っています。もちろん、そのほかの記述も、技術内容をコンパクトに整理してあるので、とても重宝しています(といっても原書で800ページのボリュームです) 。