応用情報技術者 2022年 春期 午後 問07
ワイヤレス防犯カメラの設計に関する次の記述を読んで、設問1~4に答えよ。
I社は、有線の防犯カメラを製造している。有線の防犯カメラの設置には通信ケーブルの配線、電源の電気工事などが必要である。そこで、充電可能な電池を内蔵して、太陽電池と接続することで、外部からの電力の供給が不要なワイヤレス防犯カメラ(以下、ワイヤレスカメラという)を設計することになった。
ワイヤレスカメラは、人などの動体を検知したときだけ、一定時間動画を撮影する。撮影の開始時にスマートフォン(以下、スマホという)に通知する。また、スマホから要求することで、現在の状況をスマホで視聴することができる。
〔ワイヤレスカメラのシステム構成〕
ワイヤレスカメラのシステム構成を図1に示す。ワイヤレスカメラはWi-Fiルータを介してインターネットと接続し、サーバ及びスマホと通信を行う。

・カメラ部はカメラ及びマイクから構成される。動画用のエンコーダを内蔵しており、音声付きの動画データを生成する。
・動体センサは人体などが発する赤外線を計測して、赤外線の量の変化で人などの動体を検知する。
・通信部はWi-FiでWi-Fiルータを介してサーバ及びスマホと通信する。
・制御部は、カメラ部、動体センサ及び通信部を制御する。
〔ワイヤレスカメラの機能〕
ワイヤレスカメラには、自動撮影及び遠隔撮影の機能がある。
(1) 自動撮影
・動体を検知すると撮影を開始する。撮影を開始したとき、スマホに撮影を開始したことを通知する。
・撮影を開始してからTa秒間撮影する。ここで、Taはパラメタである。
・撮影した動画データは、一時的に制御部のバッファに書き込まれる。このとき、動画データはバッファの先頭から書き込まれる。Ta秒間の撮影が終わるとバッファの動画データはサーバに送信される。
・撮影中に新たに動体を検知すると、バッファにあるその時点までの動画データをサーバに送信し始めると同時に、更にTa秒間撮影を行う。このとき、動画データはバッファの先頭から書き込まれる。
(2) 遠隔撮影
・スマホから遠隔撮影開始が要求されると撮影を開始する。
・撮影した動画データはスマホに送信され、そのままスマホで視聴することができる。
・スマホから遠隔撮影終了が要求される、又は撮影を開始してから60秒経過すると撮影を終了する。
・撮影中に再度、遠隔撮影開始が要求されると、その時点から60秒間又は遠隔撮影終了が要求されるまで、撮影を続ける。
・ワイヤレスカメラとスマホが通信するときに通信障害が発生すると、データの再送は行わず、障害発生中の送受信データは消滅するが、撮影は続ける。
〔ワイヤレスカメラの状態遷移〕
(1) 状態
ワイヤレスカメラの状態を表1に示す。
(2) イベント
状態遷移のトリガとなるイベントを表2に示す。
(3) 処理
状態遷移したときに行う処理を表3に示す。それぞれのタイマは新たに設定されると、直前のタイマ要求は取り消される。
ワイヤレスカメラの状態遷移図を図2に示す。
〔サーバに送られた動画データの不具合〕
自動撮影のテストを行ったとき、サーバに異常な動画データが送られてくる不具合が発生した。通信及びハードウェアには問題がなかった。
この不具合は、自動撮影中に動体を検知したときに発生しており、バッファの使い方に問題があることが判明した。
そこで、撮影中に新たに動体を検知した時点で、書き込まれているバッファの続きから動画データを書き込み、バッファの d まで書き込んだ場合は、バッファの e に戻る方式の f に変更した。
設問1:
問題文を見る時刻に動体を検知して自動撮影を開始した。時刻から時刻まで途切れることなく自動撮影を続けており、時刻に最後の動体を検知した。このとき自動撮影は何秒間行われたか。時間を表す式を答えよ。ここで、処理の遅延及び通信の遅延は無視できるものとする。
模範解答
(−)+Ta
解説
解答の論理構成
-
自動撮影の基本動作
- 問題文には「撮影を開始してから Ta秒間撮影する。ここで、Taはパラメタである。」とあります。
- したがって動体を1回だけ検知した場合、撮影時間は開始時刻+Ta秒で終了します。
-
途中で新たに動体を検知した場合
- さらに「撮影中に新たに動体を検知すると…更にTa秒間撮影を行う。」と明記されています。
- 検知のたびに残り時間がリセットされるイメージではなく、「検知した時点」から改めてTa秒追加される仕組みです。
-
設問の条件整理
- 動体を最初に検知したのが時刻 。
- 以降、途切れずに撮影を継続しつつ、最後の検知が時刻 に発生。
- 「途切れることなく」とあるため、 と の間に複数回検知があったとしても撮影はずっと続いています。
-
撮影終了時刻の決定
- で最後に検知した瞬間、そこから Ta秒 が新たに加算されます。
- 従って、撮影終了時刻は
-
撮影継続時間の算出
- 開始は 、終了は 。
- よって撮影時間 は
誤りやすいポイント
- Taを「毎回上書きで残り時間をTaに戻す」と誤解し、 を答えてしまう。
- 最後の検知があった瞬間を含めてTa秒撮ることを忘れ「」など減算してしまう。
- 動体が検知されなかった区間があると仮定し、撮影が一旦止まるケースと混同する。設問は「途切れることなく」と強調しています。
FAQ
Q: Taとは固定値ですか。
A: 問題文に「Taはパラメタである」とある通り、試験では任意の定数として扱います。計算式だけ求めればよく、具体値は不要です。
A: 問題文に「Taはパラメタである」とある通り、試験では任意の定数として扱います。計算式だけ求めればよく、具体値は不要です。
Q: 最後の検知が複数同時に起きても計算は変わりますか。
A: 同時刻に複数回検知しても「時刻 に検知した」とみなせるため、追加される時間は1回分の Ta秒 だけです。
A: 同時刻に複数回検知しても「時刻 に検知した」とみなせるため、追加される時間は1回分の Ta秒 だけです。
Q: 通信障害があった場合の影響は考えますか。
A: 「処理の遅延及び通信の遅延は無視できる」と明記されているので、撮影時間の計算には影響しません。
A: 「処理の遅延及び通信の遅延は無視できる」と明記されているので、撮影時間の計算には影響しません。
関連キーワード: タイマ割込み, 状態遷移図, リングバッファ, 自動撮影, イベント駆動
設問2:
問題文を見るスマホから要求を行い動画の視聴を開始した。その10秒後に送受信の通信障害が20秒間発生した。通信障害が発生してから5秒後にスマホから遠隔撮影開始を要求した。スマホでの視聴が終了するのは視聴を開始してから何秒後か。整数で答えよ。
ここで、処理の遅延及び通信の遅延は無視できるものとする。
模範解答
60
解説
解答の論理構成
-
初期条件の整理
スマホは「視聴を開始」した時点で遠隔撮影が始まっています。このときワイヤレスカメラは遠隔撮影状態に遷移し、
「・スマホから遠隔撮影終了が要求される、又は撮影を開始してから60秒経過すると撮影を終了する。」
により のタイマがセットされます。 -
通信障害の影響
問題文には、
「・ワイヤレスカメラとスマホが通信するときに通信障害が発生すると、データの再送は行わず、障害発生中の送受信データは消滅するが、撮影は続ける。」
とあります。よって、 から までの は映像が届かないだけで、カメラ側では遠隔撮影を継続しています。タイマも停止・延長されません。 -
「再度の開始要求」が届かない理由
通信障害が始まって 後(=時刻 )にスマホが送った遠隔撮影開始要求は、障害中のためカメラに届きません。従って、
「・撮影中に再度、遠隔撮影開始が要求されると、その時点から60秒間…」
の条件は発動せず、タイマはリセットされません。 -
視聴終了時刻の決定
以上より、最初にセットされた タイマがそのまま有効です。
したがって視聴終了は視聴開始からちょうど 後、答えは
誤りやすいポイント
- 「再度の開始要求」があったから 延長されると勘違いする
→ 要求がカメラに届いて初めてタイマがリセットされます。通信障害中に送った要求は消滅します。 - 通信障害の時間を加算してしまう
→ 撮影は継続し、タイマも進み続けます。映像が届く・届かないはタイマに無関係です。 - 「視聴が中断したから終了も遅れる」と考える
→ 終了条件はカメラ側のタイマまたは終了要求だけで決まります。スマホ側の視聴可否は無関係です。
FAQ
Q: 通信障害中にスマホが視聴を続けられない場合、終了時刻は補償されますか?
A: いいえ。撮影は継続しタイマも進行しますので、映像が再び届く時刻に関わらず 後に終了します。
A: いいえ。撮影は継続しタイマも進行しますので、映像が再び届く時刻に関わらず 後に終了します。
Q: 遠隔撮影終了要求は障害回復後に自動的に再送されますか?
A: 問題文の「データの再送は行わず」により、自動再送は行われません。再度ユーザが明示的に送る必要があります。
A: 問題文の「データの再送は行わず」により、自動再送は行われません。再度ユーザが明示的に送る必要があります。
Q: 動画データが欠落した場合、サーバやスマホで補完処理はありますか?
A: 本問題の仕様では補完や再送は定義されていません。欠落部分はそのまま失われます。
A: 本問題の仕様では補完や再送は定義されていません。欠落部分はそのまま失われます。
関連キーワード: 状態遷移, タイマ制御, 通信障害, バッファ管理, 遠隔撮影
設問3:〔ワイヤレスカメラの状態遷移〕について、(1)〜(3)に答えよ。
問題文を見る模範解答
S1:遠隔撮影状態
S2:自動撮影状態
解説
解答の論理構成
-
図2で 待機状態 → S2 の遷移条件が「動体検知通知イベント(5、7)」です。表3で「⑤ サーバに動画データ送信」「⑦ 自動撮影タイマ設定」は自動撮影時に用意された処理であり、動体検知を契機に自動撮影が始まることを示します。
表1に該当する状態名は「自動撮影状態(自動撮影だけを行っている状態)」です。 -
以上より、
• S1=「遠隔撮影状態」
• S2=「自動撮影状態」
が妥当となります。
誤りやすいポイント
- 「動画データ通知イベント」を見て撮影中であることだけに注目し、S1とS2の区別をタイマ処理でなく“データ送信先”で判断しようとして混乱するケース。
- S2からS3の遷移に「遠隔撮影開始イベント(8)」が含まれているため、S2を“待ち受け”と誤認してしまうケース。
- 表3の処理番号を見落とし、「⑧ はS1にもS3にも付いている=どちらも遠隔撮影状態」と考えてしまうミス。
FAQ
Q: 状態名を決める際、イベントと処理のどちらを優先して読み取るべきですか?
A: まずイベントが「何の機能を開始/終了させるのか」を見て大枠を判定し、次に処理番号で裏付けると誤判定を防げます。
A: まずイベントが「何の機能を開始/終了させるのか」を見て大枠を判定し、次に処理番号で裏付けると誤判定を防げます。
Q: S3の名前は本問では問われていませんが、どの状態になりますか?
A: S3では自動撮影と遠隔撮影の両方を行う遷移が存在するため、表1の「マルチ撮影状態」に相当します。
A: S3では自動撮影と遠隔撮影の両方を行う遷移が存在するため、表1の「マルチ撮影状態」に相当します。
Q: 「遠隔撮影タイマ通知イベント」でS1からどこへ遷移しますか?
A: 図2では a → 待機状態 の矢印に「遠隔撮影終了イベント 又は 遠隔撮影タイマ通知イベント(2)」とあるので、タイマ満了時には撮影終了処理②を実行して待機状態へ戻ります。
A: 図2では a → 待機状態 の矢印に「遠隔撮影終了イベント 又は 遠隔撮影タイマ通知イベント(2)」とあるので、タイマ満了時には撮影終了処理②を実行して待機状態へ戻ります。
関連キーワード: 状態遷移図, イベント駆動, タイマ割込み, バッファリング
設問3:〔ワイヤレスカメラの状態遷移〕について、(1)〜(3)に答えよ。
問題文を見る模範解答
a:遠隔撮影開始イベント
b:自動撮影タイマ通知イベント
解説
解答の導き方
結論:a:遠隔撮影開始イベント、b:自動撮影タイマ通知イベント
-
状態名(S1, S2, S3)の対応を確認する
- 図2に「待機状態 → S1イベント:遠隔撮影開始イベント(8)」とあり、待機からS1へ入るのは「遠隔撮影開始イベント」であることが明示されています。表2の「遠隔撮影開始イベント」は「スマホから遠隔撮影開始が要求されたときに通知されるイベント」ですから、S1は遠隔撮影のみを行う「遠隔撮影状態」に対応します。
- 同様に図2の「待機状態 → S2イベント:動体検知通知イベント(5、7)」や「S2 → S3イベント:遠隔撮影開始イベント(8)」から、S2が自動撮影のみの「自動撮影状態」、S3が自動撮影と遠隔撮影の併行である「マルチ撮影状態」であると読み取れます。
- 以上より、図中の遷移と表2/表3の対応を使って各遷移がどのイベントで起きるか判断します。
-
[a] が「遠隔撮影開始イベント」である根拠(段階的説明)
- 図2に「待機状態 → S1イベント:遠隔撮影開始イベント(8)」とあり、この遷移のイベント名が明示されています。表2で「遠隔撮影開始イベント」は「スマホから遠隔撮影開始が要求されたときに通知されるイベント」ですから、図のその位置に入るべきイベントは「遠隔撮影開始イベント」です。
- 処理番号(8)は表3の「遠隔撮影タイマ設定」であり、遠隔撮影開始時に遠隔撮影用の60秒タイマを設定する動作と整合するため、この遷移が遠隔撮影の開始を表していることが確かめられます。
-
[b] が「自動撮影タイマ通知イベント」である根拠(必ず示すべき対応関係を明示)
- 図2の注記に「(処理)内の数字は、表3の項番の処理を行うことを示す」とあります。表3の⑤は「サーバに動画データ送信」であり、⑤ が付く遷移はサーバへ動画データを送る動作を表します。
- 本文の自動撮影の説明に「撮影を開始してからTa秒間撮影する。… Ta秒間の撮影が終わるとバッファの動画データはサーバに送信される。」とあるため、Taの満了(=自動撮影タイマの通知)が発生したときにサーバ送信(表3の⑤)が起きることが明らかです。表2の「自動撮影タイマ通知イベント」は「自動撮影で使用するタイマでTa秒後に通知されるイベント」ですから、Ta満了を表すイベントは「自動撮影タイマ通知イベント」です。
- 図2の別の遷移に「待機状態 → [c] イベント:自動撮影タイマ通知イベント(2、5)」と記されていることも、Ta通知が②(撮影終了)や⑤(サーバ送信)を引き起こすことを示しています。
- また、図2にある「S2 → S3イベント:動画データ通知イベント(4)」のように「動画データ通知イベント」は表3の④「バッファに書込み」と対応しているため、もし [b] が「動画データ通知イベント」なら遷移に付く処理番号は④であるはずです。ところが該当遷移は⑤(サーバ送信)を伴っているため、該当イベントは「動画データ通知イベント」ではなく「自動撮影タイマ通知イベント」であると結論できます。
- 以上より、図中で⑤が付された遷移(該当する [b]→S3の遷移)は「自動撮影タイマ通知イベント」に対応します。
誤りやすいポイント
- 図中の処理番号((4)や(5)など)と表3の対応を確認せずに、イベント名だけの印象で判断してしまう。必ず「(処理)内の数字は、表3の項番の処理を行うことを示す」を参照すること。
- 「動画データ通知イベント」と「自動撮影タイマ通知イベント」を混同すること。前者はカメラがエンコードデータを生成したときの通知であり、表3では④(バッファに書込み)と対応している点に注意する。
- 「撮影中に動体を検知したとき」と「Taが満了したとき」はいずれもサーバ送信につながる場合がある(本文に明記)が、図のどの遷移がどのイベントに対応しているかは処理番号で確かめる必要がある。
- タイマ設定の扱い(「それぞれのタイマは新たに設定されると、直前のタイマ要求は取り消される」)を見落とすと、遷移後のタイマ動作を誤解する。
FAQ
Q: なぜ [b] を「動画データ通知イベント」ではなく「自動撮影タイマ通知イベント」にするのですか?
A: 図2で「動画データ通知イベント」に対応する遷移は「(4)バッファに書込み」となっており(例:「S2 → S3イベント:動画データ通知イベント(4)」)、一方で該当の遷移は処理番号に⑤(サーバに動画データ送信)を含むため、動画データ生成の通知ではなくTaの満了を通知する「自動撮影タイマ通知イベント」に対応すると判断します。本文にも「Ta秒間の撮影が終わるとバッファの動画データはサーバに送信される」と明記されています。
A: 図2で「動画データ通知イベント」に対応する遷移は「(4)バッファに書込み」となっており(例:「S2 → S3イベント:動画データ通知イベント(4)」)、一方で該当の遷移は処理番号に⑤(サーバに動画データ送信)を含むため、動画データ生成の通知ではなくTaの満了を通知する「自動撮影タイマ通知イベント」に対応すると判断します。本文にも「Ta秒間の撮影が終わるとバッファの動画データはサーバに送信される」と明記されています。
Q: 動体検知通知イベントでもサーバ送信が起きますか?
A: はい。本文に「撮影中に新たに動体を検知すると、バッファにあるその時点までの動画データをサーバに送信し始めると同時に、更にTa秒間撮影を行う」とあり、図2でも動体検知に伴って(5,7)などの処理が行われる遷移があります。つまりサーバ送信はTa満了だけでなく、撮影中の動体検知でも生じうる点に注意してください。
A: はい。本文に「撮影中に新たに動体を検知すると、バッファにあるその時点までの動画データをサーバに送信し始めると同時に、更にTa秒間撮影を行う」とあり、図2でも動体検知に伴って(5,7)などの処理が行われる遷移があります。つまりサーバ送信はTa満了だけでなく、撮影中の動体検知でも生じうる点に注意してください。
Q: 図を読む順序で注意するポイントは?
A: まず「イベント名」と「(処理)内の数字」を照合し、次に表2(イベント定義)と表3(処理内容)と本文の振る舞い記述を突き合わせて意味を確定します。見た目や直感だけでイベントを当てはめないことが重要です。
A: まず「イベント名」と「(処理)内の数字」を照合し、次に表2(イベント定義)と表3(処理内容)と本文の振る舞い記述を突き合わせて意味を確定します。見た目や直感だけでイベントを当てはめないことが重要です。
関連キーワード: 状態遷移図、イベント駆動、タイマ、バッファリング、動体検知
設問3:〔ワイヤレスカメラの状態遷移〕について、(1)〜(3)に答えよ。
問題文を見る模範解答
c:①、③、⑦
解説
解答の論理構成
- 初期状態である「待機状態」は、【問題文】の表1で「カメラ部には電力が供給されておらず、撮影していない状態」と定義されています。
- 動体を検知したときは自動撮影を開始しなければなりません。自動撮影開始時の動作は【問題文】の自動撮影仕様で
‐「動体を検知すると撮影を開始する。」
‐「撮影を開始したとき、スマホに撮影を開始したことを通知する。」
‐「撮影を開始してからTa秒間撮影する。」
と明示されています。 - この一連の処理に対応する項番は表3より
①「カメラ初期化」
③「撮影開始」
⑦「自動撮影タイマ設定」
の3つです。 - したがって、図2で「待機状態」から自動撮影を始める遷移に付与すべき処理、すなわちcに入る処理は「①、③、⑦」となります。
誤りやすいポイント
- 動体検知時にすぐバッファ送信(⑤)を入れてしまう
待機中はまだ動画が存在しないため送信処理⑤は不要です。 - タイマ設定を忘れる
Ta秒後の自動停止が必要なので⑦「自動撮影タイマ設定」を必ず入れる必要があります。 - カメラ初期化①の抜け漏れ
待機状態では電力が遮断されています。撮影開始前に①が不可欠です。
FAQ
Q: スマホへの「撮影開始通知」は表3のどの項番に含まれますか?
A: 表3の③「撮影開始」に「スマホに撮影を開始したことを通知する。」と記載されています。
A: 表3の③「撮影開始」に「スマホに撮影を開始したことを通知する。」と記載されています。
Q: タイマ再設定のルールはどうなっていますか?
A: 【問題文】表3の注記で「それぞれのタイマは新たに設定されると、直前のタイマ要求は取り消される。」と規定されています。
A: 【問題文】表3の注記で「それぞれのタイマは新たに設定されると、直前のタイマ要求は取り消される。」と規定されています。
Q: 動体検知が連続した場合の処理はどう区別しますか?
A: 既に自動撮影中なら「撮影中に新たに動体を検知すると…バッファにある…動画データをサーバに送信し始める」とあるため、開始時とは異なり⑤+⑦の組合せになります。
A: 既に自動撮影中なら「撮影中に新たに動体を検知すると…バッファにある…動画データをサーバに送信し始める」とあるため、開始時とは異なり⑤+⑦の組合せになります。
関連キーワード: 状態遷移図, 自動撮影, タイマ設定, カメラ初期化, バッファ
設問4:〔サーバに送られた動画データの不具合〕について、(1)〜(3)に答えよ。
問題文を見る(1)不具合が発生した理由を40字以内で述べよ。
模範解答
書込みと読込みが同時に行われ、バッファの先頭のデータが上書きされた。
解説
解答の論理構成
-
自動撮影の通常手順
引用: 「撮影した動画データは、一時的に制御部のバッファに書き込まれる。」
引用: 「Ta秒間の撮影が終わるとバッファの動画データはサーバに送信される。」
── 本来は“書き込み→完了後に読み出し”という順序です。 -
動体を再検知した場合の特別手順
引用: 「撮影中に新たに動体を検知すると、バッファにあるその時点までの動画データをサーバに送信し始めると同時に、更にTa秒間撮影を行う。」
── “送信(読込み)”と“追加撮影(書込み)”が同時並行で発生します。 -
書き込み位置の仕様
引用: 「このとき、動画データはバッファの先頭から書き込まれる。」
── 送信がまだ終わっていない先頭領域へ、追加撮影データを書き始めることを意味します。 -
不具合報告の状況
引用: 「自動撮影中に動体を検知したときに発生しており、バッファの使い方に問題があることが判明した。」
── 上記の同時アクセスが原因で、未送信データが上書きされ“異常な動画データ”となったと推定できます。 -
したがって解答
「書込みと読込みが同時に行われ、バッファの先頭のデータが上書きされた。」
誤りやすいポイント
- 「バッファの先頭から書き込まれる」を“空き領域のみ利用”と誤読しやすい。実際は先頭強制リセットなので転送中データと衝突する。
- “遠隔撮影”と“自動撮影”の挙動を混同し、遠隔撮影では問題が起きない理由(読込み先がスマホで同時書込みがない)を見落とす。
- 不具合を通信障害と結び付ける誤解。引用: 「通信及びハードウェアには問題がなかった。」と明示されている。
FAQ
Q: なぜリングバッファ形式に変更すると解決できるのですか?
A: 「書き込まれているバッファの続きから動画データを書き込み、… バッファの d まで書き込んだ場合は、バッファの e に戻る方式」によって、読み出しポインタと書き込みポインタを分離できるため、重複領域を避けながら連続的に格納できます。
A: 「書き込まれているバッファの続きから動画データを書き込み、… バッファの d まで書き込んだ場合は、バッファの e に戻る方式」によって、読み出しポインタと書き込みポインタを分離できるため、重複領域を避けながら連続的に格納できます。
Q: 送信開始時にバッファをロックする方法では駄目なのでしょうか?
A: 電力節約と処理遅延を抑える観点から、ロック&コピーよりもリングバッファでポインタを回す方が実装が軽量で電池残量にも優しいためです。
A: 電力節約と処理遅延を抑える観点から、ロック&コピーよりもリングバッファでポインタを回す方が実装が軽量で電池残量にも優しいためです。
Q: 遠隔撮影で同様の不具合が起こらないのはなぜ?
A: 遠隔撮影では「動画データをスマホに送信する」と同時に同じバッファへ書き戻す動作がなく、“読み出しと書き込みの競合”が発生しないためです。
A: 遠隔撮影では「動画データをスマホに送信する」と同時に同じバッファへ書き戻す動作がなく、“読み出しと書き込みの競合”が発生しないためです。
関連キーワード: リングバッファ, オーバーライト, 同時アクセス, メモリ保護, データ破損
設問4:〔サーバに送られた動画データの不具合〕について、(1)〜(3)に答えよ。
問題文を見る(2)本文中のd、eに入れる適切な字句を答えよ。
模範解答
d:終端
e:始端
解説
解答の論理構成
- 問題文には、従来方式でバッファの「先頭から書き込む」仕様が示されています。
引用:
「撮影した動画データは、一時的に制御部のバッファに書き込まれる。このとき、動画データはバッファの先頭から書き込まれる。」 - 不具合の原因として「撮影中に新たに動体を検知」するとバッファ運用が乱れると記述されています。
引用:
「この不具合は、自動撮影中に動体を検知したときに発生しており、バッファの使い方に問題があることが判明した。」 - 対策として、バッファの残り領域を使い切ったら先頭に戻る“循環”方式へ変更すると明言されています。
引用:
「撮影中に新たに動体を検知した時点で、書き込まれているバッファの続きから動画データを書き込み、バッファの d まで書き込んだ場合は、バッファの e に戻る方式」 - 循環的に最後まで書き込む位置はバッファの「終端」、戻る位置は「始端」と表現するのが自然です。これにより先頭/末尾間でポインタを折り返すリングバッファが実現できます。
- 以上より、
d=「終端」、e=「始端」と決定できます。
誤りやすいポイント
- 先頭・末尾という語をそのまま当てはめたくなるが、問題文は“戻る”対象を「バッファの e に戻る」としているため、循環開始点を示す一般語「始端」を用いる方が適切です。
- 「終端」を「最後」や「末端」と誤記すると配点対象外になる可能性があります。設問は字句を問うため語形の統一が重要です。
- 不具合の原因を通信障害と結び付けてしまうミス。問題文は「通信及びハードウェアには問題がなかった。」と明示し、論点をバッファ管理に限定しています。
FAQ
Q: なぜ「先頭」ではなく「始端」とするのですか?
A: 問題文は従来方式で「先頭から書き込まれる」と記述済みです。循環方式では“戻る位置”を改めて定義するため、同義語でも区別しやすい「始端」が採用されています。
A: 問題文は従来方式で「先頭から書き込まれる」と記述済みです。循環方式では“戻る位置”を改めて定義するため、同義語でも区別しやすい「始端」が採用されています。
Q: 「リングバッファ」という言葉が本文にないのに、終端・始端と断定して良いのでしょうか?
A: 記述自体が「終端まで書き込んだら始端に戻る」動きを説明しており、これはリングバッファの典型的動作です。語を使わなくても動作仕様で明確に示されています。
A: 記述自体が「終端まで書き込んだら始端に戻る」動きを説明しており、これはリングバッファの典型的動作です。語を使わなくても動作仕様で明確に示されています。
Q: 循環方式にすると何が解消されるのですか?
A: 動体を連続検知した際もバッファポインタを折り返せるため、書込み位置の衝突や誤送信が防止でき、異常な動画データがサーバへ送られる問題が解決します。
A: 動体を連続検知した際もバッファポインタを折り返せるため、書込み位置の衝突や誤送信が防止でき、異常な動画データがサーバへ送られる問題が解決します。
関連キーワード: バッファ管理, リングバッファ, ポインタ操作, 循環キュー, メモリ効率
設問4:〔サーバに送られた動画データの不具合〕について、(1)〜(3)に答えよ。
問題文を見る(3)本文中のfに入れるバッファの名称を答えよ。
模範解答
f:リングバッファ
解説
解答の導き方
-
問題の目的を確認する
設問は本文中の f に入るバッファの名称を問うものです。本文の変更前後の記述を比べることで、どのような動作をするバッファかを特定します。 -
不具合の原因となっていた元の動作を確認する(根拠となる本文の抜粋を文中に組み込む)
本文には「撮影した動画データは、一時的に制御部のバッファに書き込まれる。このとき、動画データはバッファの先頭から書き込まれる。」とあり、さらに「撮影中に新たに動体を検知すると、バッファにあるその時点までの動画データをサーバに送信し始めると同時に、更にTa秒間撮影を行う。このとき、動画データはバッファの先頭から書き込まれる。」とあります。
この記述から、動体検知が重なったときに毎回「バッファの先頭から書き始める」動作があるため、既にサーバへ送信中のデータ領域を上書きしてしまい、サーバ側に異常な(壊れた)動画データが届く可能性があることが読み取れます。これが不具合の発生原因です。 -
変更後の動作記述を解析する(重要箇所を引用して解釈)
問題文の変更後は「書き込まれているバッファの続きから動画データを書き込み、バッファの d まで書き込んだ場合は、バッファの e に戻る方式」と説明されています。ここを分解すると次の点が分かります。
- 「書き込まれているバッファの続きから書き込み」:書き込み位置を保持してそこから追記する(書き込みポインタが進む)ことを意味する。
- 「d まで書き込んだ場合は、e に戻る」:バッファの末端に達したら先頭に戻って書き込みを続ける、すなわち書き込みが末端で折り返す(wrap-around)ことを意味する。
-
上の動作説明と一般的なバッファ構造を照合する
上記の「追記して、末端で先頭に戻る」振る舞いは、代表的なバッファ構造であるリングバッファ(別名:循環バッファ、circular buffer)の定義と一致します。リングバッファは書き込みポインタと読み出しポインタ(ヘッド/テール)を持ち、ポインタがバッファ末端に到達したら先頭に戻ることで連続的にデータを扱います。 -
結論
よって、本文の記述に合致する名称は リングバッファ です。
(明示的解答)
f:リングバッファ
f:リングバッファ
誤りやすいポイント
-
「リングバッファ=絶対に上書きしない」と誤解する点
リングバッファは末端到達で先頭に戻る構造を指しますが、読み出し(送信)が遅れている場合に書き込みが読み出し位置に追いつくと上書きが発生します。上書きの有無・扱いは実装方針(上書き許可、書き込み待ち、古いデータ破棄など)によって異なるため、問題文にある「戻る方式」からは単に構造がリングであることしか判断できません。 -
「先頭から書き始める/続きから書き始める」の表現を取り違える点
元の不具合の記述での「先頭から書き込まれる」は、再検知のたびに書き込み位置をリセットしていることを示し、これが原因である点を押さえないと誤答につながります。 -
別のバッファ名(例えば二重バッファ、FIFOキュー、スタック)を答えてしまう点
末端到達で先頭に戻る「wrap-around」動作が明示されているため、リングバッファ以外の用語は適合しません。
FAQ
Q: リングバッファと循環バッファは同じですか?
A: はい。同じ概念を指します。日本語では「リングバッファ」や「循環バッファ」と呼ばれますが、本問の解答語としては「リングバッファ」が期待されます。
A: はい。同じ概念を指します。日本語では「リングバッファ」や「循環バッファ」と呼ばれますが、本問の解答語としては「リングバッファ」が期待されます。
Q: この変更で必ずデータの上書きが防げますか?
A: いいえ。リングバッファは書き込みの折り返し(先頭に戻る)を行いますが、読み出し(サーバ送信)が追いつかない場合は書き込みが読み出し位置に到達して古いデータを上書きする可能性があります。上書きを防ぎたい場合は、空き容量チェックで書き込みを待たせる、古いフレームを破棄するなどの実装方針が必要です。
A: いいえ。リングバッファは書き込みの折り返し(先頭に戻る)を行いますが、読み出し(サーバ送信)が追いつかない場合は書き込みが読み出し位置に到達して古いデータを上書きする可能性があります。上書きを防ぎたい場合は、空き容量チェックで書き込みを待たせる、古いフレームを破棄するなどの実装方針が必要です。
Q: 二重バッファ(ダブルバッファ)では駄目なのですか?
A: 二重バッファは書き込み側と読み出し側を交互に切り替える単純な方法で、固定長の塊(フレーム)を扱う場面では有効です。ただし、発生頻度や長さが可変な連続ストリーム(今回のようなTa秒の連続撮影や再検知での追記)には、リングバッファの方が細かい粒度で追記・送信を同期しやすく適しています。
A: 二重バッファは書き込み側と読み出し側を交互に切り替える単純な方法で、固定長の塊(フレーム)を扱う場面では有効です。ただし、発生頻度や長さが可変な連続ストリーム(今回のようなTa秒の連続撮影や再検知での追記)には、リングバッファの方が細かい粒度で追記・送信を同期しやすく適しています。
関連キーワード: リングバッファ、循環バッファ、ヘッド/テールポインタ、バッファオーバーフロー、二重バッファ







