AP22春後問7

AP22春後問7

応用情報技術者試験平成22年度春午後問7

 タクシーの料金メータの設計に関する次の記述を読んで,設問 1 ~ 3 に答えよ。

 S 社は,タクシーの料金メータ(以下,タクシーメータという)を開発している。S 社では,ソフトウェアの品質向上を図るために,設計後のレビューを強化することにした。実施したレビューにおいて,タクシーメータのソフトウェアに不具合が見つかった。


ソフトウェア構成〕

 タクシーメータは,リアルタイム OS(以下,RTOS という)を使用している。RTOS 上では,表示タスク,料金計算タスク,操作パネルタスク,走行距離通知タスク及び RTOS のタイマタスクが動作する。これらのタスク実行中は,特に指定がない限り,すべての割込みが許可されている。

 タクシーメータは,タイマ割込み及び操作パネル割込みを使用している。これらの割込みは,タイマ割込みハンドラ及び操作パネルハンドラで処理される。各ハンドラは,それぞれタイマタスク及び操作パネルタスクを起動する。

 タクシーメータのタスクー覧を表に示す。

表 タクシーメータのタスクー覧

タスク 処理内容 優先度
表示タスク 料金などを LCD に表示する。
料金計算タスク 走行距離と走行時間に応じた料金を計算する。

操作パネルタスク 操作パネルハンドラで起動される。操作パネルからの指示を受け取り,各タスクに通知する。

走行距離通知タスク 所定距離を走行したことを通知する。

  • 料金計算タスクから“走行通知要求”を受け,指定された距離を走行したら,イペントフラグをセットする。
  • “走行通知要求”を受けた後,イベントフラグをセットするまでの間に取消し要求を受けた場合は,“走行通知要求”を取り消し,イベントフラグをセットしない。
  • 既にイペントフラグをセットした要求に対する取消し要求があった場合,この取消し要求を無視する。

タイマタスク

タイマ割込みハンドラで起動される。このタスクは,RTOS に対する要求のうち,時間に間する処理を行う。


〔RTOSの仕様(一部)〕

(1) タスクは,優先度によって実行が決定される。優先度は変することができる。
(2) タスク同期制御にイベントフラグを使用する。イベントフラグの操作にはセット及びクリアがある。
(3) タスクはイペントフラグのセット待ち要求を行うと,イベントフラグがセットされるまで待ち状態となる。既にイベントフラグがセットされている場合は,セット待ち要求を行っても,待ち状態にはならない。
  セット待ち要求では,タイムアウトの設定ができる。タイムアウトになると,指定時間内にイベントフラグがセットされなくても,待ち状態が解除される。
(4) タスクごとに,特定又はすべての割込みに対して,割込み禁止及び割込み許可を指定できる。


〔タクシーメータの仕様〕

 操作パネルで“賃走”を指定すると,最初に“T0メートル走行するまで”又は”T0 秒経過するまで”料金は P0 円である。これを初乗りという。

 初乗りの条件を過ぎると,“L1メートル走行する”又は”T1秒経過する”ごとに,料金がP1円ずつ加算される。L0,T0,P0,L1,T1,及び P1 は特別な装置によって設定可能である。

 料金の計算は,操作パネルで“支払い”ボタンが押されるまで続けられる。


〔料金計算タスク〕

 料金計算タスクの処理の流れを図に示す。料金計算タスクは,初乗りから“支払”ボタンが押されるまでの間,図の 2 ~ 7 *1の処理を続ける。


f:id:tamagopanda:20100617205932p:image


〔不具合の指摘〕

  レビューを実施したところ,次の二つの指摘があった。

(1)イベントフラグのセット待ち方法の不具合とその対策
 料金計算タスクにおいて,イベントフラグのセット待ちを要求しても,待ち状態にならないことがある。その結果,表示金額の計算が過大となってしまう。
 この不具合は, [ a ] *2の直後に, [ b ] が起きると発生する。[ a ] によって [ c ] が解除され,料金計算タスクは実行状態となり,イベントフラグを [ d ] する。この直後に [ b ] があると,イベントフラグがセットされてしまい,次のイベントフラグのセット待ちで待ち状態にならない。
 この不具合は,図中の [ e ] と 5 *3とを入れ替えることで回避できる。
(2)操作パネル割込み制御の不具合とその対策
 図中の処理 7*4では,表示タスク通知処理の開始から終了までの間,操作パネル割  込みは禁止されているので,操作パネル割込みは実行されないはずである。しかし次のような場合に,操作パネル割込みを実行してしまう。
 操作パネル割込みを禁止した直後に [ f ] が発生すると, [ f ] ハンドラによって [ g ] が起動され,料金計算タスクは処理が中断される。
 起動されたタスクは,操作パネル割込みを許可しているので, [ h ] が発生すると受け付けてしまう。
 現在の処理を大きく変せずにこの不具合を回避するには,表示タスク通知処理実行中は,タスクの優先度をタイマタスクの優先度と同じにするか,又は表示タスク通知処理を行う間は,すべての割込みを禁止すればよい。


設問1

 イベントフラグのセット待ち方法の不具合について,(1),(2)に答えよ。ただし,表示タスク通知処理では,ほかのタスクを起動することはないものとする。

(1) 本文中の [ a ][ d ] に入れる適切な字句を答えよ。
(2) 本文中の [ e ]に入れる,図中の処理の番号を答えよ。


設問2

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


設問3

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

*1:実際の問題文では,丸2~丸7(○の中に数字)

*2:問題文中では,[ a ][ b ][ c ] 等は,四角で囲まれていたが,テキスト表現をするため,[ ]で置き換えた。

*3:問題文中では,丸5(○の中に数字)

*4:問題文中では,丸7(○の中に数字)