応用情報技術者 2009年 春期 午後 問07
携帯端末の省電力に関する次の記述を読んで、設問1~3に答えよ。
X社の、電池で駆動する携帯端末(以下、端末という)では、次のように消費電力を少なくする工夫をしている。
〔MPUに対するクロック制御〕
MPUへのクロック供給、タイマ割込み及びクロック発振の停止/再開は専用のクロック制御回路で行う。
(1) MPUへのクロック供給
クロックは、発振直後から発振が十分安定するまでにTミリ秒かかる。MPUへのクロック供給は、クロック発振再開からTミリ秒後となっている。
(2) タイマ割込み
タイマ割込み時刻は、ソフトウェアで設定する。設定された時刻になると、タイマ割込みが発生する。タイマ割込みを発生させるタイマは、MPUへ供給するクロックとは異なるクロックを使用し、独自に時間を計測している。
(3) クロック発振の停止/再開
クロック発振の停止/再開のタイミングを図1に示す。
クロック発振の停止は、ソフトウェアで指示する。クロック制御回路は、停止の指示を受け取ると、次のタイマ割込みの時刻までの時間を調べ、この時間がTミリ秒より長い場合、クロック発振を停止し、Tミリ秒以下の場合、停止指示を取り消し、クロック発振を継続する。
クロック制御回路は、クロック発振を停止しているとき、タイマ割込みが発生するとTミリ秒前になるかほかの割込みを検出すると、クロック発振を再開する。

〔リアルタイムOS〕
この端末は、次のリアルタイム OS を使用している。
・タスクの状態は、実行状態、実行可能状態及び待ち状態がある。タスクの状態遷移を図2に示す。
・タスクには優先度が付与され、あるタスク実行中に、より優先度の高いタスクが起動されると、実行中のタスクは実行可能状態となり、優先度の高いタスクが実行状態となる。
・タスク間通信のためにメールボックスが用意され、タスクはメールをほかのタスクのメールボックスに送ることができ、ほかのタスクからのメールをメールボックスで受信することができる。
・メールボックスの操作には、送信要求と受信要求があり、受信要求したタスクはメールボックスにメールが届くまで待ち状態になる。


〔省電力状態〕
省電力状態は、スタンバイモードとアイドルモードがある。スタンバイモードは、MPU へのクロック供給が停止している状態である。アイドルモードは、クロック供給を停止せず割込みを検出するまで MPU の命令の実行を停止している状態である。割込みを検出するとアイドルモードを終了し、命令を実行できる状態となる。
〔タスク〕
クロックを制御するクロック制御タスクは、①クロック発振の停止を指示し、②MPU をアイドルモードにする。このタスクは①と②を繰り返す。
クロック制御タスク以外のすべてのタスクは、メールボックスに受信要求しメールを受信すると、そのメールの内容を解析し、それに応じた処理を行い、再び受信要求する。これらのタスクは、タスク固有のメールボックスを使用している。
〔クロック制御回路〕
クロック制御回路は、クロック制御タスクの①と②の間に割込みがあれば、その割込みを保留し、②の後にその割込みをMPUに通知する。
〔クロック再開時の処理〕
クロックの発振が再開し、MPUにクロックが供給されたとき、最初に実行される処理は、必ずaとなる。それがbであれば遅延なく実行されるが、b以外の場合は、ほかに割込みがなければ、割込み要求発生から、cミリ秒遅延してから実行される。
〔省電力の効果〕
MPUの単位時間当たりの消費電力は、命令を実行している場合P、アイドルモードの場合0.5XP、スタンバイモードの場合0である。
端末が通信中のとき、クロック供給は停止せず、80%は命令を実行している状態であり、20%はアイドルモードになっている。端末が通信中の単位時間当たりの消費電力はd×Pである。
端末が通信を行っていないとき、1秒ごとに10ミリ秒間MPUにクロックが供給され、それ以外の時間はスタンバイモードである。その10ミリ秒のうち90%は命令を実行している状態であり、10%はアイドルモードになっている。端末が通信を行っていないときの単位時間当たりの消費電力はd×Pである。
設問1:
クロック再開時の処理について、a~cに入れる適切な字句を答えよ。
模範解答
a:割込み処理
b:タイマ割込み処理
c:T
解説
解答の論理構成
-
端末がスタンバイモードから復帰する契機
【問題文】には
「クロック制御回路は、クロック発振を停止しているとき、タイマ割込みが発生するとTミリ秒前になるかほかの割込みを検出すると、クロック発振を再開する。」
とあり、クロック発振を再開させる原因は“割込み”しかありません。したがって、MPU へのクロック供給が戻った瞬間に最初に動くのは割込みハンドラであり、a には「割込み処理」が入ります。 -
“遅延なく実行”される割込みの種類
図1の説明文では、タイマ割込みのときだけ「タイマ割込み発生のTミリ秒前」にクロックを再開させています。さらに
「クロックは、発振直後から発振が十分安定するまでにTミリ秒かかる。MPUへのクロック供給は、クロック発振再開からTミリ秒後となっている。」
とあるので、タイマ割込みの場合は発振再開からちょうどTミリ秒後に“割込み発生時刻”が訪れ、MPU にクロックが入る瞬間=割込み要求発生タイミングとなります。よって「遅延なく実行」されるのはタイマ割込みであり、b は「タイマ割込み処理」です。 -
その他の割込み時の遅延時間
「ほかの割込みを検出すると、クロック発振を再開する」とあるため、外部割込みなどは“割込み要求が来たその瞬間”に発振再開が指示されます。ところが、MPU が動き出せるのは「発振再開からTミリ秒後」です。したがって割込み要求~サービス開始までの空白は常にTミリ秒発生し、c は「T」となります。 -
結論
a:割込み処理
b:タイマ割込み処理
c:T
誤りやすいポイント
- 「最初に実行される処理」を“タスク切替”や“OS 初期化”と勘違いしやすい。あくまでクロック再開を呼び込んだ主体は割込みであることを忘れないこと。
- タイマ割込みだけが“発生予定時刻のTミリ秒前”にクロック再開を行う点を読み落とし、「すべての割込みでTミリ秒遅延」と誤答しやすい。
- T の起点を「クロック供給再開後」ではなく「割込み検出後」と混同すると、c に や を入れてしまうミスが発生する。
FAQ
Q: クロック再開後に複数の割込み要求が同時にあった場合、どの割込み処理が先に実行されますか?
A: 通常の割込み優先度制御に従い、優先度が最も高い割込みハンドラが先に実行されます。本設問は「最初に実行される処理」を問うだけなので、単に“割込み処理”と答えれば十分です。
A: 通常の割込み優先度制御に従い、優先度が最も高い割込みハンドラが先に実行されます。本設問は「最初に実行される処理」を問うだけなので、単に“割込み処理”と答えれば十分です。
Q: Tミリ秒はハードウェア固有値ですが、問題解答で具体的な数値を入れる必要はありますか?
A: いいえ。設問は記号「T」をそのまま解答欄に入れることを求めています。
A: いいえ。設問は記号「T」をそのまま解答欄に入れることを求めています。
Q: MPU がクロックを受け取った直後にアイドルモードへ落ちる可能性はありますか?
A: ありません。再開契機が必ず割込みなので、最低でも該当割込みのサービスルーチンが実行されるまではアイドルモードへ移行しません。
A: ありません。再開契機が必ず割込みなので、最低でも該当割込みのサービスルーチンが実行されるまではアイドルモードへ移行しません。
関連キーワード: 省電力, スタンバイモード, アイドルモード, タイマ割込み, クロック制御
設問2:
省電力の効果に関する、MPUの消費電力Pについて、d、eに入れる適切な数値を答えよ。
模範解答
d:0.9
e:0.0095
解説
解答の論理構成
-
通信中の平均消費電力
- 【問題文】
「端末が通信中のとき、クロック供給は停止せず、80%は命令を実行している状態であり、20%はアイドルモードになっている。」 - 消費電力は
・命令実行時:P
・アイドルモード時:0.5×P - 平均を計算
- よって d=0.9
- 【問題文】
-
非通信時の平均消費電力
- 【問題文】
「端末が通信を行っていないとき、1秒ごとに10ミリ秒間MPUにクロックが供給され、それ以外の時間はスタンバイモードである。その10ミリ秒のうち90%は命令を実行している状態であり、10%はアイドルモードになっている。」 - 1秒=1,000ms のうち
・スタンバイモード:990ms(消費電力0)
・命令実行:10ms×0.9=9ms(消費電力P)
・アイドル:10ms×0.1=1ms(消費電力0.5×P) - 1秒間の総エネルギー
- 平均消費電力(1,000ms で割る)
- よって e=0.0095
- 【問題文】
誤りやすいポイント
- 「スタンバイモードは消費電力0」を読み落とし、990ms 分を含めてしまう。
- 10ミリ秒の「90%」「10%」を 1秒全体の割合と誤解し、0.9ms/0.1ms で計算してしまう。
- 0.5×P を 0.05×P と桁違いに書き、平均値を 0.095 などにしてしまう。
FAQ
Q: 0.5×P はどこから来るのですか?
A: 【問題文】に「MPUの単位時間当たりの消費電力は、命令を実行している場合P、アイドルモードの場合0.5XP」と明記されています。
A: 【問題文】に「MPUの単位時間当たりの消費電力は、命令を実行している場合P、アイドルモードの場合0.5XP」と明記されています。
Q: 「1秒ごとに10ミリ秒」という記述は 0.01 秒ごとに 10ms ではないのですか?
A: いいえ。「1秒の中に10msだけクロックが供給される」という意味です。残りの 990ms はスタンバイモードです。
A: いいえ。「1秒の中に10msだけクロックが供給される」という意味です。残りの 990ms はスタンバイモードです。
Q: d と e の単位は必要ですか?
A: 【問題文】では「単位時間当たりの消費電力はd×P」と係数で表現しているため、無次元の数値を答えます。
A: 【問題文】では「単位時間当たりの消費電力はd×P」と係数で表現しているため、無次元の数値を答えます。
関連キーワード: 平均電力算出, アイドルモード, スタンバイモード, 動作時間比, 低消費電力設計
設問3:クロック制御タスクについて、(1)、(2)に答えよ。
(1)クロック制御タスクの優先度はどのように設定すべきか、ほかのタスクの優先度を考慮して、25字以内で答えよ。
模範解答
「ほかのタスクより低い優先度とする。」
または
「すべてのタスクの中で最も低い優先度とする。」
解説
解答の論理構成
- 省電力を実現するクロック制御タスクは、問題文で
「クロック制御タスクは、①クロック発振の停止を指示し、②MPU をアイドルモードにする。このタスクは①と②を繰り返す。」
と述べられています。つまり主目的は端末全体の電力削減であり、業務ロジックを直接処理するわけではありません。 - 一方、他のタスクはメール受信後すぐに業務処理を行う必要があります。リアルタイム OS の特性として
「タスクには優先度が付与され、あるタスク実行中に、より優先度の高いタスクが起動されると、実行中のタスクは実行可能状態となり、優先度の高いタスクが実行状態となる。」
という表現があり、優先度が高いタスクほど即時に CPU を占有できます。 - さらに、クロック制御タスクが動作している最中に割込みが入るケースについて、問題文は
「クロック制御回路は、クロック制御タスクの①と②の間に割込みがあれば、その割込みを保留し、②の後にその割込みをMPUに通知する。」
と明示しています。クロック制御タスクが長時間実行状態にあると、割込み処理や他タスクの起動が遅延し、リアルタイム性を損なうおそれがあります。 - よって、クロック制御タスクはできるだけ速やかに CPU を明け渡す必要があるため、
「ほかのタスクより低い優先度とする。」
もしくは
「すべてのタスクの中で最も低い優先度とする。」
という設定が妥当となります。
誤りやすいポイント
- 省電力機能を「重要だから高優先度」と誤解しがちですが、リアルタイム応答を阻害しない方が優先されます。
- 割込み遅延の原因を OS 側のプリエンプション設定と混同し、「同一優先度で良い」と判断してしまう。
- クロック発振停止はハードウェアが自律的に実行するため、タスクの優先度が高くなくても電力削減効果は維持できる点を見落とす。
FAQ
Q: クロック制御タスクを最下位にしても、省電力のタイミングが遅れませんか?
A: ハードウェア側が「次のタイマ割込みの時刻までの時間」を判定して停止するため、タスクが少し遅れても停止タイミング自体は大きく変わりません。
A: ハードウェア側が「次のタイマ割込みの時刻までの時間」を判定して停止するため、タスクが少し遅れても停止タイミング自体は大きく変わりません。
Q: 同一優先度でラウンドロビンにする案はダメですか?
A: 割込み保留の間は他タスクも起動できず遅延します。確実に即時切替が起こるよう、明示的に最下位へ設定する方が安全です。
A: 割込み保留の間は他タスクも起動できず遅延します。確実に即時切替が起こるよう、明示的に最下位へ設定する方が安全です。
Q: クロック制御タスクをイベント駆動(割込みハンドラ内)に配置する方法は?
A: 割込み処理時間を長くするとレスポンスが悪化するため、タスクとして実装し優先度を下げる設計が推奨されています。
A: 割込み処理時間を長くするとレスポンスが悪化するため、タスクとして実装し優先度を下げる設計が推奨されています。
関連キーワード: 優先度制御, リアルタイムOS, プリエンプション, 省電力, 割込み管理
設問3:クロック制御タスクについて、(1)、(2)に答えよ。
(2)クロック制御タスクが実行状態にあるとき、ほかのタスクが取り得る、タスクの状態をすべて選び、図2の状態で答えよ。
模範解答
待ち状態
解説
解答の論理構成
- 【問題文】は、他タスクの基本動作を
「“クロック制御タスク以外のすべてのタスクは、メールボックスに受信要求し…再び受信要求する。”」
と規定しています。 - メールボックスの受信要求を行ったタスクは、
「“受信要求したタスクはメールボックスにメールが届くまで待ち状態になる。”」
と明示されています。 - したがって、クロック制御タスク以外のタスクは
①受信要求を出した直後に必ず待ち状態へ遷移し、
②メールが届くまでは実行状態にも実行可能状態にも戻りません。 - 今、設問が想定している瞬間は「クロック制御タスクが実行状態にあるとき」です。
この瞬間は、他タスクに新しいメールが届いておらず、条件②により全てが待ち状態で停止している場面だけが成立します。 - 以上から、クロック制御タスクが実行状態にあるときに他タスクが取り得る状態は「待ち状態」のみとなります。
- 図2の表記をそのまま用いて答えると、解答は「待ち状態」です。
誤りやすいポイント
- 「実行可能状態」を含めてしまう
─ メール未着ならタスクは待ち状態固定であり、スケジューラの対象にも上がりません。 - 「優先度が高いタスクがあればプリエンプトするはず」と考える
─ 優先度より先に“待ち状態から実行可能状態へ出る条件=メール着信”が必要です。 - 図2の遷移を暗記だけで判断し、実際のタスク動作シーケンスを読み落とす
FAQ
Q: 他タスクに割込みハンドラが送信するメールで即座に実行可能状態になりませんか?
A: 割込みハンドラがメールを送ると確かに“メール受信”イベントが発生しますが、その時点ではクロック制御タスクは既に実行状態を失っています。設問は「クロック制御タスクが実行状態にあるとき」を聞いているため該当しません。
A: 割込みハンドラがメールを送ると確かに“メール受信”イベントが発生しますが、その時点ではクロック制御タスクは既に実行状態を失っています。設問は「クロック制御タスクが実行状態にあるとき」を聞いているため該当しません。
Q: “実行状態”や“実行可能状態”を同時に取るケースは皆無なのですか?
A: メール受信後の処理区間では他タスクは実行状態/実行可能状態を取り得ます。しかし、その間クロック制御タスクは実行状態にありません。設問は両者が同時に起きる瞬間を問うているわけではありません。
A: メール受信後の処理区間では他タスクは実行状態/実行可能状態を取り得ます。しかし、その間クロック制御タスクは実行状態にありません。設問は両者が同時に起きる瞬間を問うているわけではありません。
Q: メールボックスに既にメールが溜まっている場合は?
A: 受信要求を出した直後にメールが存在すれば即座に受信→解析→再び受信要求となり、最終的にやはり受信要求で待ち状態へ入ります。したがって「クロック制御タスクが実行状態になる瞬間」には、他タスクは待ち状態です。
A: 受信要求を出した直後にメールが存在すれば即座に受信→解析→再び受信要求となり、最終的にやはり受信要求で待ち状態へ入ります。したがって「クロック制御タスクが実行状態になる瞬間」には、他タスクは待ち状態です。
関連キーワード: タスク状態遷移, リアルタイムOS, メールボックス通信, 待ち状態, 優先度制御


