平成22年春期試験午後問題 問7

問7 組込みシステム開発

⇱問題PDF
タクシーの料金メーターの設計に関する次の記述を読んで,設問1~3に答えよ。
 S社は,タクシーの料金メーター(以下,タクシーメーターという)を開発している。S社では,ソフトウェアの品質向上を図るために,設計後のレビューを強化することにした。実施したレビューにおいて,タクシーメーターのソフトウェアに不具合が見つかった。

〔ソフトウェア構成〕
 タクシーメーターは,リアルタイムOS(以下,RTOSという)を使用している。RTOS上では,表示タスク,料金計算タスク,操作パネルタスク,走行距離通知タスク及びRTOSのタイマタスクが動作する。これらのタスク実行中は,特に指定がない限り,すべての割込みが許可されている。
 タクシーメーターは,タイマ割込み及び操作パネル割込みを使用している。これらの割込みは,タイマ割込みハンドラ及び操作パネルハンドラで処理される。各ハンドラは,それぞれタイマタスク及び操作パネルタスクを起動する。
 タクシーメーターのタスク一覧を表に示す。
pm07_1.png
〔RTOSの仕様(一部)〕
  • タスクは,優先度によって実行が決定される。優先度は変更することができる。
  • タスク同期制御にイベントフラグを使用する。イベントフラグの操作にはセット及びクリアがある。
  • タスクはイベントフラグのセット待ち要求を行うと,イベントフラグがセットされるまで待ち状態となる。既にイベントフラグがセットされている場合は,セット待ち要求を行っても,待ち状態にはならない。
    セット待ち要求では,タイムアウトの設定ができる。タイムアウトになると,指定時間内にイベントフラグがセットされなくても,待ち状態が解除される。
  • タスクごとに,特定又はすべての割込みに対して,割込み禁止及び割込み許可を指定できる。
〔タクシーメーターの仕様〕
 操作パネルで"賃走"を指定すると,最初に"L0メートル走行するまで"又は"T0秒経過するまで"料金はP0円である。これを初乗りという。
 初乗りの条件を過ぎると,"L1メートル走行する"又は"T1秒経過する"ごとに,料金がP1円ずつ加算される。L0,T0,P0,L1,T1,及びP1は特別な装置によって設定可能である。
 料金の計算は,操作パネルで"支払い"ボタンが押されるまで続けられる。

〔料金計算タスク〕
 料金計算タスクの処理の流れを図に示す。料金計算タスクは,初乗りから"支払い"ボタンが押されるまでの間,図の②~⑦の処理を続ける。
pm07_2.png
〔不具合の指摘〕
 レビューを実施したところ,次の二つの指摘があった。
  • イベントフラグのセット待ち方法の不具合とその対策
     料金計算タスクにおいて,イベントフラグのセット待ちを要求しても,待ち状態にならないことがある。その結果,表示金額の計算が過大となってしまう。
     この不具合は,aの直後に,bが起きると発生する。aによってcが解除され,料金計算タスクは実行状態となり,イベントフラグをdする。この直後にbがあると,イベントフラグがセットされてしまい,次のイベントフラグのセット待ちで待ち状態にならない。
     この不具合は,図中のeと⑤とを入れ替えることで回避できる。
  • 操作パネル割込み制御の不具合とその対策
     図中の処理⑦では,表示タスク通知処理の開始から終了までの間,操作パネル割込みは禁止されているので,操作パネル割込みは実行されないはずである。しかし,次のような場合に,操作パネル割込みを実行してしまう。
     操作パネル割込みを禁止した直後にfが発生すると,fハンドラによってgが起動され,料金計算タスクは処理が中断される。
     起動されたタスクは,操作パネル割込みを許可しているので,hが発生すると受け付けてしまう。
     現在の処理を大きく変更せずにこの不具合を回避するには,表示タスク通知処理実行中は,タスクの優先度をタイマタスクの優先度と同じにするか,又は表示タスク通知処理を行う間は,すべての割込みを禁止すればよい。

設問1

イベントフラグのセット待ち方法の不具合について,(1),(2)に答えよ。ただし,表示タスク通知処理では,ほかのタスクを起動することはないものとする。
  • 本文中のadに入れる適切な字句を答えよ。
  • 本文中のeに入れる,図中の処理の番号を答えよ。

解答例・解答の要点

  • a:タイムアウト
    b:走行通知
    c:イベントフラグのセット待ち 又は 待ち状態
    d:クリア
  • e:

解説

  • 本問で取り上げられている不具合は「料金計算タスクにおいて,イベントフラグのセット待ちを要求しても,待ち状態にならない」ことです。〔RTOSの仕様〕(3)に着目すると、「既にイベントフラグがセットされている場合は,セット待ち要求を行っても,待ち状態にはならない」とあります。これより不具合の原因は「セット待ち要求をする③の処理に入ったとき、既にイベントフラグがセットされている状況」であると推測できます。イベントフラグがセットされるのは走行距離通知タスクが"走行通知要求"を受け、取り消されることなく所定距離を走行したときです。

    abについて〕
    通常の処理の流れは以下のようになっていて、ほとんどの場合はこれで問題なく動作します。
    1. ②走行通知要求
    2. ③イベントフラグのセット待ちを要求
    3. タイムアウト若しくは走行通知でセット待ち要求の解除
    4. ④イベントフラグをクリア
    5. ⑤"走行通知要求"を取り消し
    しかし、走行距離通知タスクの距離計算は、"走行通知要求"の取消し要求を受けるまで続いていることから、タイミングによってはタイムアウトによるセット待ち解除後、④のイベントフラグのクリア後に所定距離に達し、⑤の直前に走行距離通知タスクがイベントフラグをセットする(走行通知)ことが稀に起こります。走行距離通知タスクの処理内容には「既にイベントフラグをセットした要求に対する取消し要求があった場合,この取消し要求を無視する」とあるので、このとき、⑤の"走行通知要求"の取り消しは無視され、イベントフラグはセットされたままの状態になります。

    この状態のまま③に戻りイベントフラグのセット待ちを行うと、直ちに解除されてしまい、本問で示されている不具合が発生します。具体的には、2回続けて料金の加算処理が実行されるために、料金が過大になってしまいます。

    したがって、[a]には「タイムアウト」が、[b]には「走行通知」が当てはまります。

    a=タイムアウト
     b=走行通知

    cについて〕
    空欄の前後を確認すると「[a:タイムアウト]によってcが解除され,…」となっています。本文中に「タイムアウトになると,指定時間内にイベントフラグがセットされなくても,待ち状態が解除される」、また図中にタイムアウトによりイベントフラグのセット待ちが解除される旨の記述があることから、このどちらかを解答することになります。

    c=イベントフラグのセット待ち 又は 待ち状態

    dについて〕
    空欄の前後を確認すると「イベントフラグをdする」となっています。〔RTOSの仕様〕(2)に「イベントフラグの操作にはセット及びクリアがある」と記載されているため、"セット"または"クリア"が入ると予想できます。
    タイムアウトによりイベントフラグのセット待ち(待ち状態)が解除されると、料金計算タスクは実行状態になり、④の処理、すなわちイベントフラグをクリアする処理を行います。また、表よりイベントフラグをセットするのは走行距離通知タスクのみとわかります。したがって、[d]には「クリア」が当てはまります。

    d=クリア

  • eについて〕
    (1)で確認したように、本問の不具合の原因は④のイベントフラグのクリア直後に発生した走行通知により、イベントフラグがセットされてしまうことでした。もし、イベントフラグがセットされてしまい、⑤の"走行通知要求"の取り消しが無視されたとしても、その後にイベントフラグをクリアすれば本問の不具合は起こりません。よって、④の処理を⑤の後に持ってくる必要があります。
    また、③の処理は"走行通知要求"が有効であることを前提としているので、⑤は③より後にする必要があります。
    したがって、④と⑤を入れ替えることになります。[e]に入る番号は④です。

    e=④

設問2

操作パネル割込み制御の不具合について,fhに入れる適切な字句を答えよ。

解答例・解答の要点

f:タイマ割込み
g:タイマタスク
h:操作パネル割込み

解説

fgについて〕
本文中には「タクシーメーターは,タイマ割込み及び操作パネル割込みを使用している。これらの割込みは,タイマ割込みハンドラ及び操作パネルハンドラで処理される」とあります。空欄前後の文章を確認すると「fハンドラによってgが起動され…」となっているので、[f]にはハンドラの名前、[g]にはハンドラによって起動されるタスク名が入るとわかります。

⑦で料金計算タスクに対する操作パネル割込みを禁止しているので、料金計算タスクが実行状態にあるときは操作パネルハンドラは処理を行うことができません。よって、[f]に入るのは「タイマ割込み」ハンドラです。
また、[g]にはタイマ割込みハンドラによって起動されるタスク、すなわち「タイマタスク」が入ります。タイマタスクの優先度は"高"、料金計算タスクの優先度は"中"なので、問題文中の「gが起動され,料金計算タスクは処理が中断される」とも整合性があります。

f=タイマ割込み
 g=タイマタスク

hについて〕
タイマタスクは、実行中の割込みについて特に指定がないので、〔ソフトウェア構成〕にある「タスク実行中は,特に指定がない限り,すべての割込みが許可されている」のとおり、操作パネル割込みも許可されます。タイマタスクが実行状態になると、料金計算タスクは実行状態でなくなり料金計算タスクに指定された操作パネル割込みの禁止は無視されるため、操作パネル割込みを受け付ける状態になります。このときタイマタスクに対して「操作パネル割込み」が発生すると、本問の不具合が起こります。

h=操作パネル割込み

設問3

操作パネル割込み制御の不具合とその対策で示したように対処する場合,表示タスク通知処理の実行時間をできるだけ短くしなければならない。その理由を30字以内で述べよ。

解答例・解答の要点

タイマタスクの実行が遅れないようにするため (21文字)

解説

操作パネル割込み制御の不具合に対して、本問で示されている対策は以下の2つです。
  1. 表示タスク通知処理中は、料金計算タスクの優先度をタイマタスクの優先度と同じ"高"にする
    ⇒タイマ割込みによりタイマタスクが起動されても、料金計算タスクは実行状態のままとなる
  2. 表示タスク通知処理中に、すべての割込みを禁止する
    ⇒タイマ割込みハンドラを実行させない
①ではタイマタスクは起動するものの表示タスク通知処理が終わるまで実行を待たされ、②では表示タスク通知処理が終わるまでタイマタスクの起動が抑制されます。どちらの対策でも、表示タスク通知処理中、タイマタスクは実行されなくなります。しかし、RTOSでは割込み処理に時間的制約があります。表示タスク通知処理の実行時間が長いと、タイマタスクの実行がその分だけ遅れ、RTOSのリアルタイム性(即時性)が低下してしまいます。このため、表示タスク通知処理の実行時間をできるだけ短くしなければなりません。

∴タイマタスクの実行が遅れないようにするため
模範解答

Pagetop