応用情報技術者 2011年 秋期 午後 問07
地上ディジタル放送対応テレビの放送ダウンロード機能に関する次の記述を読んで、設問1~4に答えよ。
X社では、放送ダウンロード機能を搭載した地上ディジタル放送対応テレビ(以下、テレビという)を開発している。
放送ダウンロード機能とは、テレビの機能を実現しているソフトウェアを更新する機能である。ソフトウェア更新データ(以下、更新データという)は、特別に割り当てられた地上ディジタル放送の電波で配信される。更新データの配信時刻情報は、地上ディジタル放送とともに配信される。テレビ本体は、配信時刻になると更新データを受信して、テレビ本体のソフトウェアを更新する。
〔テレビ本体の電源状態〕
テレビ本体の電源状態には、パワーオン状態、パワーオフ状態、スタンバイ状態の三つがある。テレビ本体の電源状態一覧を表1に、電源状態遷移を図1に示す。


〔放送ダウンロード機能の動作〕
放送ダウンロード機能は、スタンバイ状態のときだけ実行するように、次の順序で動作する。
(1) パワーオン状態でリモコンの電源ボタンを押すと、次回の放送ダウンロード機能を開始できるように、テレビ本体の時刻管理機能(以下、RTC という)に次回の放送ダウンロード開始時刻を設定する。RTC へのクロック供給は、MPU へのクロック供給と独立していて、スタンバイ状態でも継続される。
(2) スタンバイ状態で放送ダウンロード開始時刻になると、放送ダウンロード機能の動作を開始し、更新データを受信する。
(3) 受信した更新データでテレビ本体のソフトウェアを更新して、再度テレビ本体の電源スイッチをオンにしたときの処理を行う(以下、再起動という)。
〔放送ダウンロード機能に関連するソフトウェア〕
放送ダウンロード機能に関連するタスク一覧を表2に、割込みハンドラー一覧を表3に示す。タスクには優先度があり、値が小さいほど優先度が高い。


〔更新データの受信時間〕
地上デジタル放送の情報レートを16.85Mビット/秒とすると、300Mバイトの更新データの受信時間はa秒となる。
〔MPUへのクロック供給〕
MPUへのクロック供給は、クロック制御回路で行う。クロック供給の停止は、ソフトウェアで指示する。クロック制御回路は、クロック供給が停止しているときに割込みを検出すると、MPUへのクロック供給を再開する。
〔ソフトウェアの動作〕
電源管理タスクが実行状態のとき、アイドルタスクはbである。リモコンでテレビ本体をスタンバイ状態にすると、電源管理タスクはRTCに次回の放送ダウンロード開始時刻を設定し、cとなる。その結果、アイドルタスクはdとなり、MPUへのクロック供給を停止する。
放送ダウンロード機能の動作を開始するとき、MPUへのクロック供給が再開した直後に、eが実行される。
設問1:
本文中のaに入れる適切な数値を答えよ。答えは小数第2位以下を切り上げて、小数第1位まで求めよ。
模範解答
a:142.5
解説
解答の論理構成
-
受信に必要な総ビット数を求める
【問題文】に「300Mバイト」とあるので
(1 バイト = 8 ビットをそのまま適用します)。 -
伝送速度で割り、所要時間(秒)を計算する
受信速度は【問題文】の「16.85Mビット/秒」ですから -
指定された丸め処理を行う
【小問説明】に「小数第2位以下を切り上げて、小数第1位まで求めよ」とあるため
142.46… 秒 → 142.5 秒 に切り上げます。 -
よって a は 「142.5」。
誤りやすいポイント
- 「300Mバイト」をバイトのまま速度と割ってしまい、 倍せず時間を 1/8 にしてしまう。
- 「16.85Mビット/秒」を ではなく と誤って計算し、時間が 1,000 倍近くずれる。
- 切り上げ指示を読み落とし、142.4 秒などと切り捨ててしまう。
- 実務で 1M=1,048,576(2進)を使う癖で大きく計算してしまうが、本問は 10進表記(問題の与え方に合わせる)のまま扱うのが前提。
FAQ
Q: 2 進表記 (1MiB=1,048,576byte) で計算すべきでは?
A: 本問は「16.85Mビット/秒」「300Mバイト」と 10 進表記で与えられており、桁合わせもそのまま 10 進で処理すると想定されています。設問例示の解も 10 進換算前提です。
A: 本問は「16.85Mビット/秒」「300Mバイト」と 10 進表記で与えられており、桁合わせもそのまま 10 進で処理すると想定されています。設問例示の解も 10 進換算前提です。
Q: 「小数第2位以下を切り上げ」とは四捨五入と同じですか?
A: 異なります。四捨五入は第2位が 5 未満の場合切り捨てますが、切り上げは 1 でも存在すれば次位を 1 増やします。本問では 142.46… 秒を 142.5 秒にします。
A: 異なります。四捨五入は第2位が 5 未満の場合切り捨てますが、切り上げは 1 でも存在すれば次位を 1 増やします。本問では 142.46… 秒を 142.5 秒にします。
Q: バイト→ビット変換は常に 8 倍ですか?
A: はい。1 バイトは 8 ビットで固定です。通信・伝送計算では必ず 8 を掛けてビット換算します。
A: はい。1 バイトは 8 ビットで固定です。通信・伝送計算では必ず 8 を掛けてビット換算します。
関連キーワード: 伝送速度、データサイズ換算、ビット・バイト変換、切り上げ計算
設問2:〔ソフトウェアの動作〕について(1)〜(3)に答えよ。
(1)本文中のb~dに入れる適切な字句を解答群の中から選び、記号で答えよ。
解答群
ア:実行可能状態
イ:実行状態
ウ:待ち状態
模範解答
b:ア
c:ウ
d:イ
解説
解答の論理構成
-
【問題文】には「電源管理タスクが実行状態のとき、アイドルタスクはbである。」とあります。
• 表2でアイドルタスクは「待ち状態にならない」と示されています。待ち状態に入らず、CPUを占有できる状態を待機しているタスクは ready 状態、すなわち「実行可能状態」です。
➡︎ よって b=「ア:実行可能状態」。 -
次に「電源管理タスクはRTCに次回の放送ダウンロード開始時刻を設定し、cとなる。」とあります。
• 表2の電源管理タスク説明に「電源オン/放送ダウンロード開始メッセージ待ちとなる。」と明記されています。
➡︎ メッセージを待っているタスクは待機中、すなわち「待ち状態」です。
➡︎ よって c=「ウ:待ち状態」。 -
さらに「その結果、アイドルタスクはdとなり、MPUへのクロック供給を停止する。」とあります。
• 電源管理タスクが待ち状態へ移行すると、最優先の ready タスクが無くなり、CPU はアイドルタスクを動かします。
• 表2でアイドルタスクは「MPUへのクロック供給を停止する。」と記載されており、これは実行時に行う処理です。
➡︎ アイデルタスクが CPU 上で動いている=「実行状態」。
➡︎ よって d=「イ:実行状態」。 -
以上より
b:ア(実行可能状態)
c:ウ(待ち状態)
d:イ(実行状態)
誤りやすいポイント
- 「実行可能状態」と「実行状態」の区別を混同しやすい
• 実行状態:実際に CPU を使っているタスク
• 実行可能状態:CPU が空きしだい実行できる待機列にいるタスク - アイドルタスクは「待ち状態にならない」ため、ready キューから外れない点を見落としがち
- 電源管理タスクがメッセージ待ちへ遷移した瞬間、CPU がどのタスクへ渡るかというスケジューリングの基本を忘れやすい
FAQ
Q: アイドルタスクは常に実行状態になるのですか?
A: いいえ。高優先度で実行可能なタスクが存在するあいだはアイドルタスクは ready(実行可能状態)のまま待機し、CPU が空いたときだけ実行状態になります。
A: いいえ。高優先度で実行可能なタスクが存在するあいだはアイドルタスクは ready(実行可能状態)のまま待機し、CPU が空いたときだけ実行状態になります。
Q: 「待ち状態」とはイベント待ちのことですか?
A: そのとおりです。メッセージ、割込み、タイマ満了など外部イベントを待っており、スケジューラの ready キューには入らない状態です。
A: そのとおりです。メッセージ、割込み、タイマ満了など外部イベントを待っており、スケジューラの ready キューには入らない状態です。
Q: 電源管理タスクの優先度が高いのに待ち状態へ入ると CPU はなぜアイドルタスクへ移るのですか?
A: スケジューラは「優先度の高い ready タスク」を選びます。待ち状態のタスクは ready ではないため、ready キュー最上位がアイドルタスク(優先度「4」でも唯一の ready)となり、CPU 資源が移ります。
A: スケジューラは「優先度の高い ready タスク」を選びます。待ち状態のタスクは ready ではないため、ready キュー最上位がアイドルタスク(優先度「4」でも唯一の ready)となり、CPU 資源が移ります。
関連キーワード: タスクスケジューリング、低消費電力制御、割込み処理、状態遷移モデル、リアルタイムOS
設問2:〔ソフトウェアの動作〕について(1)〜(3)に答えよ。
(2)本文中のeに入れる適切な字句を答えよ。
模範解答
e:タイマ割込みハンドラ
解説
解答の論理構成
-
きっかけとなる事象
- 本文には、クロック供給停止中でも「クロック制御回路は、クロック供給が停止しているときに割込みを検出すると、MPUへのクロック供給を再開する。」と記載されています。
- さらに「スタンバイ状態で放送ダウンロード開始時刻になると、放送ダウンロード機能の動作を開始し…」とあり、時刻到来は割込みで検出されることがわかります。
-
割込み源の特定
- 放送ダウンロード開始時刻を知らせる割込み源は表3に示される「タイマ」だけです。表3には「放送ダウンロード開始時刻になったときに実行される。」と明記されています。
-
割込みハンドラ実行のタイミング
- 本文の空欄直前には「MPUへのクロック供給が再開した直後に」とあり、これはクロック制御回路が割込み発生を検出してクロックを再開した瞬間を指します。
- クロックが再開されると、まず当該割込みのハンドラが動作するのがリアルタイム OS の一般的な動作です。
-
以上より、クロック再開直後に実行されるのはタイマによる割込みハンドラであると結論づけられます。
- 従って e に入る語句は「タイマ割込みハンドラ」です。
誤りやすいポイント
- リモコン割込みと混同する
スタンバイへの移行はリモコンですが、スタンバイ解除は時刻到来によるタイマ割込みで行われる点を見落としがちです。 - 「タスク」か「割込みハンドラ」かを取り違える
電源管理タスクが最初に動くわけではなく、あくまでも割込みハンドラが最初に実行されることを押さえる必要があります。 - クロック停止中の挙動を勘違いする
クロックが止まっている間はタスクは一切動かず、割込み検出を契機にクロックが再開されるというハードウェア依存の流れを忘れやすいです。
FAQ
Q: 放送ダウンロード開始時刻はどのように設定されていますか?
A: 本文(1)に「テレビ本体の時刻管理機能(以下、RTC という)に次回の放送ダウンロード開始時刻を設定する」とあります。
A: 本文(1)に「テレビ本体の時刻管理機能(以下、RTC という)に次回の放送ダウンロード開始時刻を設定する」とあります。
Q: 割込み発生後、最初に動くタスクは何ですか?
A: 割込みハンドラ実行後、表2「電源管理」タスクがメッセージを受けて動き出します。
A: 割込みハンドラ実行後、表2「電源管理」タスクがメッセージを受けて動き出します。
Q: スタンバイ時にMPUクロックが停止していてもRTCは動作しますか?
A: はい。「RTC へのクロック供給は、MPU へのクロック供給と独立していて、スタンバイ状態でも継続される」と明記されています。
A: はい。「RTC へのクロック供給は、MPU へのクロック供給と独立していて、スタンバイ状態でも継続される」と明記されています。
関連キーワード: 割込みハンドラ、タイマ割込み、スタンバイ、クロック制御、リアルタイムOS
設問2:〔ソフトウェアの動作〕について(1)〜(3)に答えよ。
(3)eの処理後、実行状態となるタスク名を答えよ。
模範解答
電源管理
解説
解答の論理構成
-
放送ダウンロード開始はタイマ割込みで通知される
- 表3より
- 「タイマ ・放送ダウンロード開始時刻になったときに実行される。」
- 「タイマ ・電源管理タスクに放送ダウンロード開始メッセージを送る。」
したがって、MPU のクロックが再開した直後に実行される e は「タイマ割込みハンドラー」です。
- 表3より
-
割込みハンドラー終了後にスケジューラが再評価する
- 表2にはタスク優先度が示されており「電源管理」の優先度が最小値「1」です(最上位)。
- 他の関連タスク(「受信」「更新」「アイドル」)はいずれも優先度が大きいか、待ち状態にあります。
-
タイマ割込みハンドラーが送信したメッセージにより「電源管理」が READY へ移行
- 表2「電源管理」の説明
- 「放送ダウンロード開始メッセージを受けたとき、受信タスクに更新データ受信開始メッセージを送って、待ち状態となる。」
- READY キュー内で最高優先度となるため、タイマ割込みハンドラー終了直後に「電源管理」タスクが実行状態へスイッチします。
- 表2「電源管理」の説明
-
よって、e の処理後に実行状態となるタスクは「電源管理」である。
誤りやすいポイント
- 「受信」タスクと混同する
タイマ割込み直後ではまだ「受信」タスクにメッセージが送られておらず READY にならない。 - 優先度順位の読み違い
値が小さいほど高いと明記されている。逆に読んでしまうと「アイドル」を選択してしまう。 - スタンバイ中は MPU クロック停止=タスク実行なし
クロック再開後に最初に動くのは割込みハンドラーであり、その後の最初のタスクが「電源管理」である点を取り違えやすい。
FAQ
Q: タイマ割込みハンドラーが終了せず長時間実行されるとどうなりますか?
A: 割込みハンドラーは通常短時間処理を前提としています。長時間居座ると高優先度タスク「電源管理」へ制御が渡らず、ダウンロード開始が遅延します。
A: 割込みハンドラーは通常短時間処理を前提としています。長時間居座ると高優先度タスク「電源管理」へ制御が渡らず、ダウンロード開始が遅延します。
Q: 「アイドル」タスクは必ず実行されますか?
A: READY キューに他タスクが存在しないときのみ実行されます。今回のシーケンスではタイマ割込み後に「電源管理」が READY になるためアイドルは実行されません。
A: READY キューに他タスクが存在しないときのみ実行されます。今回のシーケンスではタイマ割込み後に「電源管理」が READY になるためアイドルは実行されません。
Q: 「受信」タスクはいつ READY になりますか?
A: 「電源管理」タスクが放送ダウンロード開始メッセージを処理し、更新データ受信開始メッセージを送信した直後です。
A: 「電源管理」タスクが放送ダウンロード開始メッセージを処理し、更新データ受信開始メッセージを送信した直後です。
関連キーワード: 割込みハンドラー、優先度スケジューリング、READYキュー、クロック制御、スタンバイ復帰
設問3:
テレビ本体のソフトウェア更新中に、他のソフトウェアにディスパッチしないよう、排他制御を行う必要がある。排他制御の代表的な実装方式としては、セマフォ及び割込み禁止があるが、更新タスクでセマフォを使用しなかった理由を30字以内で述べよ。
模範解答
割込みハンドラの動作を排他制御できないから
解説
解答の論理構成
- 【問題文】表2「更新」タスクに
「ソフトウェア更新メッセージを受けたとき、割込み禁止にし、タスク間の共有メモリに格納されている更新データでテレビ本体のソフトウェアを更新する。」
とある。すなわち更新タスクは割込み禁止を用いた排他制御を採用している。 - 同じ設問では「排他制御の代表的な実装方式としては、セマフォ及び割込み禁止がある」と提示されている。
- セマフォは OS のタスク切替えを抑制できても、割込みハンドラの実行は抑制できない。
- 更新タスク中に割込みハンドラが実行されると、フラッシュ書換え等のクリティカル処理が途中で中断され、ソフトウェアが破損する恐れがある。
- したがって「割込みハンドラまで含めて排他制御したい」という要件から、セマフォではなく割込み禁止を選択した。
- 以上より模範解答「割込みハンドラの動作を排他制御できないから」となる。
誤りやすいポイント
- 「セマフォ=排他制御だから万能」と思い込み、割込みハンドラの存在を見落とす。
- 「優先度を上げれば更新タスクが最優先」と誤解し、割込みが CPU を奪う事実を忘れる。
- 「割込み禁止=全システム停止で危険」と考え、短時間のクリティカル区間なら許容できることを評価しない。
FAQ
Q: 割込み禁止はリアルタイム性を損ねませんか?
A: 更新タスクはスタンバイ状態でのみ実行され【問題文】に他機能が動いていないため、一時的な割込み禁止でもユーザ体感に影響しません。
A: 更新タスクはスタンバイ状態でのみ実行され【問題文】に他機能が動いていないため、一時的な割込み禁止でもユーザ体感に影響しません。
Q: タスク優先度をもっと高く設定するだけでは不十分ですか?
A: タスク優先度は OS のディスパッチ対象であるタスク間にしか効きません。割込みハンドラは OS 制御外で発生するため、高優先度タスクでも割込みに割り込まれます。
A: タスク優先度は OS のディスパッチ対象であるタスク間にしか効きません。割込みハンドラは OS 制御外で発生するため、高優先度タスクでも割込みに割り込まれます。
Q: ミューテックスとセマフォの違いは今回影響しますか?
A: どちらも OS 同期オブジェクトなので割込みハンドラには効きません。本設問の本質は「割込みハンドラを止められるかどうか」です。
A: どちらも OS 同期オブジェクトなので割込みハンドラには効きません。本設問の本質は「割込みハンドラを止められるかどうか」です。
関連キーワード: 排他制御、セマフォ、割込み禁止、割込みハンドラ、タスクスケジューリング
設問4:
各タスクの優先度を変えて、放送ダウンロード機能が動作するかを確認した。放送ダウンロード機能が動作した組合せを解答群の中から一つ選び、記号で答えよ。


模範解答
イ
解説
解答の論理構成
-
基本ルールの確認
- 表2に「タスクには優先度があり、値が小さいほど優先度が高い。」とあり、高い優先度タスクが常に先に実行されます。
- アイドルタスクには「待ち状態にならない。」(表2)と記載されており、生成された直後から常に“実行可能”キューに残ります。したがってアイドルタスクが他タスクより高い優先度(値が小さい)だと、システムは常にアイドルタスクを選択し、放送ダウンロード処理は動きません。アイドルタスクは必ず最も低い優先度(最大の数値)でなければなりません。
-
受信タスクと更新タスクの優先度関係
- 受信タスクは「更新データ受信完了後、更新タスクにソフトウェア更新メッセージを送って、待ち状態となる。」(表2)ので、更新タスクより高いか同等でも問題ありません。
- 更新タスクは「割込み禁止にし…テレビ本体のソフトウェアを更新する。」(表2)とあるため、実行開始後はプリエンプトされません。したがって受信タスク→更新タスクの順が維持できれば十分であり、更新タスクが最下位である必要まではありません。
-
電源管理タスクの優先度
- 電源管理タスクは割込みハンドラからのメッセージで起動し、「…受信タスクに更新データ受信開始メッセージを送って、待ち状態となる。」(表2)と流れを制御します。
- 受信タスクより低くても、メッセージ送信後に待ち状態へ入るため支障はなく、**必須条件は“アイドルより高ければ良い”**です。
-
各組合せの評価
-
よって、放送ダウンロード機能が正しく動作する組合せは【模範解答】「イ」となります。
誤りやすいポイント
- 「値が小さいほど優先度が高い」という逆転ルールを読み違えて、アイドルの優先度を小さい値にしてしまう。
- 更新タスクを“最優先”に置きたくなるが、割込み禁止にするため実行開始後は奪われない点を見落とす。
- 電源管理タスクを最高優先度に固定すべきと決めつけ、支障ない別配置(例:受信タスクが最優先)を排除してしまう。
FAQ
Q: アイドルタスクが最も低い優先度でなければならないのはなぜですか?
A: 「待ち状態にならない。」ため常時実行可能です。もし他タスクより高優先度だと、常にアイドルがスケジュールされ、本来の処理が実行されません。
A: 「待ち状態にならない。」ため常時実行可能です。もし他タスクより高優先度だと、常にアイドルがスケジュールされ、本来の処理が実行されません。
Q: 更新タスクが低い優先度でも問題ない理由は?
A: 受信タスクからのメッセージを受けて ready になる時点で、受信タスクは待ち状態に入ります。更新タスクより高い実行可能タスクが他に存在しないため、低優先度でも即座に実行されます。また更新タスクは割込み禁止にするので、開始後はプリエンプションされません。
A: 受信タスクからのメッセージを受けて ready になる時点で、受信タスクは待ち状態に入ります。更新タスクより高い実行可能タスクが他に存在しないため、低優先度でも即座に実行されます。また更新タスクは割込み禁止にするので、開始後はプリエンプションされません。
Q: 電源管理タスクと受信タスクの優先度はどちらを高くすべきですか?
A: 受信タスクが高くても問題ありません。電源管理タスクはメッセージ送信後に待ち状態へ入るため、受信タスクが先に走る方が処理の流れが自然です。
A: 受信タスクが高くても問題ありません。電源管理タスクはメッセージ送信後に待ち状態へ入るため、受信タスクが先に走る方が処理の流れが自然です。
関連キーワード: プリエンプティブスケジューリング、タスク優先度、アイドルタスク、割込みハンドラ、メッセージパッシング


