平成22年秋期試験午後問題 問7

問7 組込みシステム開発

⇱問題PDF
携帯電話への録音機能追加に関する次の記述を読んで,設問1~3に答えよ。
 A社は携帯電話メーカーである。携帯電話をボイスレコーダとして使用できるよう,録音機能を追加することになった。

〔録音機能,及び関連するタスク,デバイス,メモリの関係〕
 録音機能はほかの機能と排他的に動作する。録音された音声データは,携帯電話の不揮発性メモリに保存して,再生及び外部メディアへの取出しができる。また,録音中に録音時間及び音声データのメモリ残量(以下,録音詳細情報という)をLCDに表示する。
 録音機能に関連するタスク,デバイス及びメモリの関係を図1に示す。
pm07_1.png
  • オーディオデバイスは,マイクから入力された音声のアナログ信号をサンプリングし,PCM符号に変換して,録音データとしてサンプリング専用RAMに一時的に格納する。
  • 録音データの音質は,音楽CD並み(サンプリング周波数44.1kHz,量子化ビット数16ビット,チャネル数2ch)とする。
  • 1秒間の録音データを1ブロックとして格納する,1ブロック当たりのサイズはakバイトである。
  • オーディオデバイスは,1秒間の録音データを格納した後,割込みを発生し,録音タスクにメッセージを送信する。
〔ソフトウェア構成〕
 録音機能は,UIタスク及び録音タスクで構成され,タスク間の通信にはメッセージを使用する。各タスクの説明を表に示す。
pm07_2.png
〔不揮発性メモリの構成〕
 携帯電話の不揮発性メモリの構成を図2に示す。不揮発性メモリは,利用者設定領域と音声データ領域に分けられる。利用者設定領域には,携帯電話の着信音などの設定情報が格納されている。録音機能を追加するために,音声データのメモリ残量を追加する。一方,音声データ領域には音声データ及び録音時間を格納する。
 これらの領域はUIタスク及び録音タスクからアクセスされるので,利用者設定領域セマフォ及び音声データ領域セマフォの二つのバイナリセマフォによって,排他制御を行う必要がある。
pm07_3.png
〔録音機能の検証〕
 録音機能を実現するために,UIタスクでの録音詳細情報表示処理を図3のように,録音タスクでのエンコード処理を図4のようにそれぞれ設計した。録音タスクからUIタスクにメッセージを送信するタイミングについて,次の二つの場合を設定して実機で検証した。
  • 図4中の(ア)で,録音タスクからUIタスクにメッセージを送信した場合
     UIタスク及び録音タスクがともに動作しなくなった。
  • 図4中の(イ)で,録音タスクからUIタスクにメッセージを送信した場合
     録音タスクはb状態となり,UIタスクはc状態となった。
     次に,UIタスクはdセマフォを取得できず,e状態となった。
pm07_4.png

設問1

サンプリング専用RAMについて,(1),(2)に答えよ。
  • 本文中のaに入れる適切な数値を答えよ。答えは,小数第2位を四捨五入して小数第1位まで求めよ。ただし,1kバイト=1,000バイトとする。
  • 録音タスクが連続してエンコードするには,最低何ブロック以上のサンプリング専用RAMが必要か。必要なブロック数を答えよ。

解答例・解答の要点

  • a:176.4
  • 2

解説

  • aについて〕
    1秒間の録音データのサイズが入ります。
    本問では、音声データのサンプリング周波数が44.1kHzです。"Hz"は"1秒間あたりの回数"を意味する単位、"k"は10の3乗ですから、1秒間あたり44,100回のサンプリングを行う、という意味になります。
    また、サンプリング1回あたりのデータ量は量子化ビット数によって決まります。本問では16ビットで、これを解答に合わせてバイトに直すと、8ビット=1バイトなので「16÷8=2」よりサンプリング1回あたりのデータ量は2バイトです。
    最後にチャネル数が2chとあるので、データ量はステレオの左右2種類分、つまり2倍になります。

    以上より、1秒間の録音データのサイズは、

     44,100[回]×2[バイト]×2[ch]
    =176,400[バイト]=176.4[kバイト]

    a=176.4

  • オーディオデバイスは1秒間の録音データ(=1ブロック分)を格納した後、割込みを発生し、録音タスクにメッセージを送信してエンコードを行わせます。ここで、オーディオデバイスによってサンプリング専用RAMに格納された録音データは、録音タスクによるエンコードが終わるまで保持されている必要があります。また、エンコード中も録音データを格納するブロックが必要です。

    以上を踏まえて、時系列を追いながら必要なブロック数を確認していきます。

    録音開始直後は、オーディオデバイスがデータ格納のために使用する1ブロックが必要です。
    pm07_5.png
    録音開始から1秒後には、オーディオデバイスが割込みを発生し、録音タスクがエンコードを開始します。このとき、エンコードする0~1秒目を保持した1ブロックと、オーディオデバイスの録音データを格納する1ブロックの計2ブロックが必要です。
    pm07_6.png
    録音開始から2秒後にもオーディオデバイスが割込みを発生します。ここで、表の録音タスクの説明に「エンコードは次のオーディオデバイスの割込み発生までに完了する」とあることから、2秒後の割込みまでに0~1秒目のエンコードはすでに終了しています。オーディオデバイスはエンコードが終わった方のブロックに録音データを書き込めばよいので、このとき、エンコードする1~2秒目を保持した1ブロックと、オーディオデバイスの録音データを格納する1ブロックの計2ブロックが必要です。
    pm07_7.png
    以後同様の繰返しとなるので、必要なブロック数は「2ブロック」です。

    ∴2

設問2

図4中の(ア)で,録音タスクからUIタスクにメッセージを送信した場合,UIタスク及び録音タスクがともに動作しなくなった原因を30字以内で述べよ。

解答例・解答の要点

・二つのタスクで2種類のセマフォ取得順序が逆だから (24文字)
・デッドロックが発生したから (13文字)

解説

図3及び図4にある"利用者設定領域セマフォ"と"音声データ領域セマフォ"は、バイナリセマフォです。バイナリセマフォとは、排他制御を行うための仕組みで、同時にアクセスできるプロセスが1個のみであるようなときに利用します。1つのプロセスがバイナリセマフォを取得するとそのプロセスはその資源を使用でき、他のプロセスはそのバイナリセマフォを取得できなくなります。

図4を確認すると、(ア)の直前で"音声データ領域セマフォ"を取得しています。この時点で録音タスク以外のタスクは"音声データ領域セマフォ"を取得できない状態になります。
ここで、図4中の(ア)で録音タスクからUIタスクにメッセージを送信すると、UIタスクによって図3の処理が行われます(UIタスクの優先度が"高"なので)。図3の処理では"利用者設定領域セマフォ"を取得した後、"音声データ領域セマフォ"を取得しようとしますが、前述のとおり録音タスクがすでに取得しているため、図3の処理は待ち状態になります。
UIタスクが待ち状態になったので、録音タスクの処理に戻ります。図4の処理では(ア)の直後で"利用者設定領域セマフォ"を取得しようとしますが、これは先程図3で取得されているため、図4の処理も待ち状態になります。この結果、図3の処理と図4の処理のいずれも先に進めなくなってしまいます。これがUIタスク及び録音タスクがともに動作しなくなった原因です。

このように、複数のプロセスが互いに相手の使用している資源の解放を待っている状態を「デッドロック」と呼びます。デッドロックが発生するとプロセスは永遠に待ち状態になってしまうため、処理が停止してしまったかのような状態になります。デッドロックは、複数の資源が別々のプロセスによって排他的に使用され、かつ、その専有順序が異なる場合に発生するため、図3と図4でセマフォを取得順が一致していないことが、デッドロックの発生原因となっています。

よって解答としては、「デッドロックが発生したから」「二つのタスクで2種類のセマフォ取得順序が逆だから」というような内容を記述すればよいです。

∴・二つのタスクで2種類のセマフォ取得順序が逆だから
 ・デッドロックが発生したから

設問3

本文中のbeに入れる適切な字句を解答群の中から選び,記号で答えよ。
b,c,d,e に関する解答群
  • オーディオデバイス
  • 音声データ領域
  • 実行
  • 実行可能
  • 着信音設定情報
  • 待ち
  • メッセージ
  • メモリ残量
  • 優先
  • 利用者設定領域
  • 録音時間
  • 録音詳細情報

解答例・解答の要点

b:
c:
d:
e:

解説

bcについて〕
〇〇状態なので、解答群のうち「実行」「実行可能」「待ち」から選ぶことになります。

表よりUIタスクの優先度が"高"、録音タスクの優先度が"低"なので、CPUは録音タスクよりUIタスクを優先して実行します。したがって、図4中の(イ)で録音タスクからUIタスクにメッセージを送信したとき、CPUはUIタスクを優先して実行します。よって、UIタスクは「実行状態」になります。このとき録音タスクは「処理を実行できる状態だがCPUの割り当てを待っている状態」、すなわち「実行可能状態」に移されます。

b=エ:実行可能
 c=ウ:実行

deについて〕
UIタスクは実行状態になったあと、図3の処理手順に沿って"利用者設定領域セマフォ"を取得しようとします。しかし、"利用者設定領域セマフォ"は(イ)の前に録音タスクがすでに取得しています。このため、UIタスクはこれを取得できずに「待ち状態」になります。

d=コ:利用者設定領域
 e=カ:待ち
模範解答

Pagetop