応用情報技術者 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
解説
解答の導き方
本文には「地上デジタル放送の情報レートを16.85Mビット/秒」とあり、更新データは「300Mバイト」と与えられています。受信時間はデータ量を情報レートで割ればよいので、順を追って計算します。
-
単位を揃える(バイト→ビット):
1バイト = 8ビット より
。 -
時間計算の式を立てる:
受信時間 はデータ量/情報レートで与えられます。よって
。Mの単位が共通なので消え、
となります。 -
割り算をわかりやすく表すと:
。
整数除算すると 余り なので、
。 -
指示に従って丸める:
問題の指示は「小数第2位以下を切り上げて、小数第1位まで求めよ」です。 の小数第1位は142.4ですが、小数第2位以下に0以外の数字があるため切り上げます。したがって最終的な値は142.5秒です。
結論:a = 142.5秒です。
誤りやすいポイント
- バイトとビットの変換忘れ(×8)。300Mバイトをそのまま16.85Mビット/秒で割ると約17.8秒になり、桁が大きく異なります。
- 単位の扱いの混乱(M = 10^6とMi = 2^20の混同)。試験文の表記に従って解釈してください。
- 丸め方の取り違え:「小数第2位以下を切り上げ」か「四捨五入」かを読み違えると答えが変わります(本問では切り上げ → 142.5、四捨五入なら142.4)。
- 計算の切り捨てや有効桁数不足。切り上げ判定のために小数第2位以降を十分に求めておくことが必要です。
FAQ
Q: 1Mバイトは何ビットですか?
A: 1バイト = 8ビットなので、同じ接頭辞が使われている前提では1Mバイト = 8Mビット になります。本問ではこの前提で計算しています。
A: 1バイト = 8ビットなので、同じ接頭辞が使われている前提では1Mバイト = 8Mビット になります。本問ではこの前提で計算しています。
Q: 「小数第2位以下を切り上げて、小数第1位まで求めよ」の具体的な操作は?
A: 小数第1位で表示するために、小数第2位以下に0以外の数字が存在すれば小数第1位を0.1上げます。逆に小数第2位以下が全て0であればそのままにします。
A: 小数第1位で表示するために、小数第2位以下に0以外の数字が存在すれば小数第1位を0.1上げます。逆に小数第2位以下が全て0であればそのままにします。
Q: 問題文に単位の定義がないとき、Mはどう解釈すべきですか?
A: 一般的にはSI接頭辞として1M = 10^6と解釈します。特別に2^20を意味する場合はMiB等で明示されることが多いので、問題文の表記を優先してください。
A: 一般的にはSI接頭辞として1M = 10^6と解釈します。特別に2^20を意味する場合はMiB等で明示されることが多いので、問題文の表記を優先してください。
関連キーワード: ビット・バイト変換、データ転送時間計算、情報レート、単位換算、切り上げ
設問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: 受信タスクが高くても問題ありません。電源管理タスクはメッセージ送信後に待ち状態へ入るため、受信タスクが先に走る方が処理の流れが自然です。
関連キーワード: プリエンプティブスケジューリング、タスク優先度、アイドルタスク、割込みハンドラ、メッセージパッシング



