(57)【特許請求の範囲】
【請求項１】
第１のプロセッサコア上で動作し、第１及び第２の音声データをミキシングして、当該ミキシングした合成音声データをＤＭＡ転送用バッファに格納する主系プログラムと、
第２のプロセッサコア上で動作し、前記主系プログラムの予備系として動作する予備系プログラムと、
前記ＤＭＡ転送用バッファから転送される合成音声データを順次格納し、当該格納した合成音声データを再生する音声出力手段と、を備え、
前記予備系プログラムは、前記ＤＭＡ転送用バッファに格納される合成音声データの格納量が、前記音声出力手段に格納される合成音声データの格納量に応じて定める所定のデータ量に達していない場合、前記主系プログラムが実行していた前記第１及び第２の音声データのミキシング及び格納を引き継いで実行することを特徴とするマルチコアシステム。
【請求項２】
前記予備系プログラムは、前記音声出力手段に格納されている合成音声データの格納量が所定の単位減少する毎に、前記ＤＭＡ転送用バッファに格納される合成音声データの格納量が、前記音声出力手段に格納されている合成音声データの減少量に応じて定める所定の閾値に達しているか否かを判定し、当該所定の閾値に達してない場合に、前記主系プログラムが実行していた合成音声データのミキシング及び格納を引き継いて実行することを特徴とする請求項１に記載のマルチコアシステム。
【請求項３】
前記音声出力手段は、前記ＤＭＡ転送用バッファから転送される合成音声データをエンキューして、前記再生をする合成音声データがデキューされるＦＩＦＯバッファを有することを特徴とする請求項１に記載のマルチコアシステム。
【請求項４】
前記音声出力手段は、前記ＦＩＦＯバッファに格納されている合成音声データが所定の単位デキューされる毎に、前記予備系プログラムにＦＩＦＯ境界割り込みを出力し、
前記予備系プログラムは、前記音声出力手段からのＦＩＦＯ割り込みに応じて、前記ＤＭＡ転送用バッファに格納される合成音声データの格納量が、前記ＦＩＦＯバッファに格納されている合成音声データの格納量に応じて定める所定の閾値に達しているか否かを判定し、当該所定の閾値に達していない場合に、前記主系プログラムが実行していた合成音声データのミキシング及び格納を引き継いて実行することを特徴とする請求項３に記載のマルチコアシステム。
【請求項５】
前記マルチコアシステムは、前記ＤＭＡ転送用バッファに格納された合成音声データを前記ＦＩＦＯバッファに転送して、当該転送が完了した場合に、ＤＭＡ転送完了割り込みを前記予備系プログラムに出力するＤＭＡコントローラを更に有し、
前記予備系プログラムは、前記ＤＭＡコントローラからの前記ＤＭＡ転送完了割り込みに応じて、前記ＦＩＦＯ境界割り込みの出力を有効にするＦＩＦＯ境界割り込み開始要求を前記音声出力手段に出力し、
前記主系プログラムは、前記合成音声データのミキシング及び格納を完了した場合に、前記ＦＩＦＯ境界割り込みの出力を無効にするＦＩＦＯ境界割り込み停止要求を前記音声出力手段に出力することを特徴とする請求項４に記載のマルチコアシステム。
【請求項６】
前記主系プログラムは、第１のオペレーティングシステムと、前記第１のオペレーティングシステムにおいて動作する第１のサウンドドライバを含み、
前記予備系プログラムは、第２のオペレーティングシステムと、前記第２のオペレーティングシステムにおいて動作する第２のサウンドドライバを含み、
前記第２のサウンドドライバは、前記第１のサウンドドライバが実行していた合成音声データのミキシング及び格納を引き継いで実行することを特徴とする請求項１乃至５のいずれか１項に記載のマルチコアシステム。
【請求項７】
前記マルチコアシステムは、前記１の音声データが格納される第１のリングバッファと、前記第２の音声データが格納される第２のリングバッファとをさらに備え、
前記主系プログラムのサウンドドライバは、前記第１及び第２のリングバッファから前記第１及び第２の音声データを順次取得し、
前記第２のサウンドドライバは、前記合成音声データのミキシング及び格納を引き継いで実行する場合に、前記第１及び第２のリングバッファの位置のうち、前記ＤＭＡ転送用バッファに格納されている合成音声データの格納量が示す位置よりも少なくとも１サンプル前の位置から、前記第１及び第２の音声データのミキシング及び格納を引き継いで実行することを特徴とする請求項６に記載のマルチコアシステム。
【請求項８】
前記主系プログラムは、前記第１の音声データを生成する第１のアプリケーションプログラムを更に含み、
前記予備系プログラムは、前記第２の音声データを生成する第２のアプリケーションプログラムを更に含み、
前記第１のサウンドドライバは、前記第１のアプリケーションプログラムが生成した第１の音声データのサンプリングレートを変換して前記第１のリングバッファに格納するインタフェース手段と、前記合成音声データのミキシング及び格納を実行するドライバコア手段とを含み、
前記第２のサウンドドライバは、前記第２のアプリケーションプログラムが生成した第２の音声データのサンプリングレートを変換して前記第２のリングバッファに格納するインタフェース手段と、前記合成音声データのミキシング及び格納を実行するドライバコア手段と含むことを特徴とする請求項７に記載のマルチコアシステム。
【請求項９】
前記音声出力手段は、Ｉ２Ｓデバイスと、ＤＡコンバータを含む音声出力装置とを含み、
前記Ｉ２Ｓデバイスは、前記ＤＭＡ転送用バッファから転送される合成音声データをエンキューして、前記再生をする合成音声データがデキューされるＦＩＦＯバッファを有し、
前記音声出力装置は、前記ＦＩＦＯバッファからデキューされた合成音声データをアナログ信号に変換して再生することを特徴とする請求項１に記載のマルチコアシステム。
【請求項１０】
第１のプロセッサコア上で動作する主系プログラムが、第１及び第２の音声データをミキシングして、当該ミキシングした合成音声データをＤＭＡ転送用バッファに格納し、
音声出力手段が、前記ＤＭＡ転送用バッファから転送される合成音声データを順次格納し、当該格納した合成音声データを再生し、
第２のプロセッサコア上で動作し、前記主系プログラムの予備系として動作する予備系プログラムが、前記ＤＭＡ転送用バッファに格納される合成音声データの格納量が、前記音声出力手段に格納される合成音声データの格納量に応じて定める所定のデータ量に達しているか否かを判定し、
前記所定のデータ量に達していると判定した場合に、前記予備系プログラムが、前記主系プログラムが実行していた前記第１及び第２の音声データのミキシング及び格納を引き継いで実行するマルチコアシステムの制御方法。
【請求項１１】
主系プログラムとは異なるプロセッサコア上で、当該主系プログラムの予備系として動作するプログラムであって、
転送されてくる合成音声データを順次格納し、当該格納した合成音声データを再生する音声出力手段に対して転送され、前記主系プログラムが第１及び第２の音声データをミキシングした合成音声データが格納されるＤＭＡ転送用バッファに格納される合成音声データの格納量が、前記音声出力手段に格納される合成音声データの格納量に応じて定める所定のデータ量に達しているか否かを判定する処理と、
前記所定のデータ量に達していると判定した場合に、前記主系プログラムが実行していた前記第１及び第２の音声データのミキシング及び格納を引き継いで実行する処理と、を前記プロセッサコアに実行させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチコアシステム、マルチコアシステムの制御方法及びプログラムに関する。
【背景技術】
【０００２】
複数のＣＰＵ(Central Processing Unit)コアを内蔵したマルチコアで構成された組み込み用途向けのプロセッサ(ＭＰＵ：Micro Processing Unit)が開発されている。これらのプロセッサは、周辺デバイスも含めてワンチップ化されている。マルチコアＣＰＵ上において、異なる複数のＯＳ(Operating System)を動作させる技術が知られている。また、ＭＰＵの機能として、単一の割り込み要求(ＩＲＱ：Interrupt ReQuest)を、複数のＣＰＵコアへと通知する手段が知られている。さらに、ＭＰＵは、レジスタ設定に基づいて、どの割り込み要求をどのＣＰＵコアに対して割り当てるかを設定することができる。【０００３】
また、例えば、図８に示すように、ＭＰＵ５０内部のＣＰＵからＡＤＡＣ(Audio DAC)５１に対して、Ｉ２Ｓ(Inter-IC Sound)バスを経由して、音声データを転送する技術が知られている。音声データは、例えば、ＰＣＭ(Pulse Code Modulation)音声である。なお、Ｉ２Ｓは、音声データのインターフェイスデバイスを構成する、ＰＨＩＬＩＰＳ(登録商標)社製のシリアル通信フォーマットである。Ｉ２Ｓ規格では、ＰＣＭ音声や圧縮音声(μ−ｌａｗやＡＤＰＣＭなど)を、Ｉ２Ｓバスを経由してＡＤＡＣ５１に出力することができる。また、図８において、Ｉ２Ｃ(Inter-Integrated Circuit)バスは、ＰＨＩＬＩＰＳ(登録商標)社で開発されたデバイス制御用のシリアルバスである。ＡＤＡＣ５１は、音声データをステレオ音声に変換する。ＤＡＣは、Ｄ／Ａコンバータである。ＡＤＡＣ５１から出力されるアナログ音声(ステレオ)が、スピーカーにおいて再生される。【０００４】
また、ＦＩＦＯ(First In First Out)バッファを備えるＩ２Ｓデバイスが知られている。このようなＩ２Ｃデバイスは、ＦＩＦＯバッファに格納される音声データをデキューしてＩ２Ｓバスを経由してＡＤＡＣに出力する。そして、ＦＩＦＯバッファからデキューされて減少したデータのサイズが４、８、１６、３２バイト等の境界に達した場合、割り込み(以下、「ＦＩＦＯ境界割り込み」とする)を発生させることが可能なＩ２Ｓデバイスがある。一般的に、この割り込みは、ＰＩＯ(Programmed Input/Output)転送に使用される。
【発明の概要】
【発明が解決しようとする課題】
【０００５】
本願の出願人は、先に出願した特願２００９−１９０１０３において、単一のマルチコアＣＰＵ上で複数のＯＳを動作させる技術を開示している。この技術は、それら複数のＯＳでＩ２Ｃデバイスを共有する場合に、Ｉ２Ｓデバイスを制御するＯＳがカーネルパニック又はフリーズ等によって動作不能となっても、他のＯＳでＩ２Ｃデバイスを制御することができる。これにより、簡易な構成で音切れの発生を防止することができる。【０００６】
ここで、図９を参照して、特願２００９−１９０１０３に開示の技術について説明する。図９Ａは、音声データ及び処理の流れを示している。主系側のＯＳは、ＤＭＡ転送完了割り込みをトリガーとして動作し、音声データの音声ミキシング処理及びＤＭＡ転送要求処理を行う。これにより、音声ミキシング処理後の音声データがＦＩＦＯに対してＤＭＡ転送される。【０００７】
しかし、主系側のＯＳが動作不能となった場合には、一定の時間内にＤＭＡ転送要求処理が行われなくなる。そのため、Ｉ２Ｓアンダーランエラーが発生する。すなわち、ＤＭＡ転送間隔(ＤＭＡ転送完了割り込みの発生からＩ２Ｓアンダーランエラーが発生するまでの時間を示す)が一定時間を超えた場合には、ＦＩＦＯが空となって音切れが発生する。【０００８】
そこで、この技術では、Ｉ２Ｓデバイスに含まれるＦＩＦＯに対して音声データのＤＭＡ転送が行われた後に、複数のＯＳでＤＭＡ(Direct Memory Access)転送割り込みを受信するようにしている。予備系側のＯＳは、ＤＭＡ転送完了割り込みをトリガーとして動作し、ＨＷ(Hard Ware)タイマーを設定する。また、主系側のＯＳは、音声データの音声ミキシング処理及びＤＭＡ転送要求処理を行って、ＨＷタイマーを解除するようにしている。これにより、主系側のＯＳが動作不能となったことを、ＨＷタイマーのタイムアウトによって検出可能としている。そして、ＨＷタイマーがタイムアウトした場合、主系側のＯＳが動作不能となっていることになる。そのため、主系側のＯＳから予備系側のＯＳへと切り替えて、音声ミキシング処理及びＤＭＡ転送要求処理を継続する。これにより、ＦＩＦＯバッファが空になって音切れが発生することを防止している。【０００９】
このように、この技術では、主系側のＯＳの動作不能を検出した予備系側のＯＳが、主系側のＯＳに代わって音声ミキシング処理等を継続して行うものである。また、この技術は、Ｉ２Ｓアンダーランエラーが発生しないようにするため、音声ミキシング処理等を行うＤＭＡ転送割り込みスレッドの処理方法を、ＤＭＡ転送完了割り込みの受信に応じて選択することができるようにしている。【００１０】
具体的には、音声ミキシング処理時間とＤＭＡ転送間隔(≒Ｉ２Ｓアンダーランエラー発生時間)の大小関係に応じて、パターンＡ、Ｂのいずれかの処理方法を選択するようにしている。なお、音声ミキシング処理時間及びＤＭＡ転送間隔は、実装環境のスペックから算出することができる。実装環境のスペックとは、例えば、Ｉ２ＳデバイスのＦＩＦＯバッファの段数、音声サンプリング周波数、ＤＭＡ転送サイズ及びＣＰＵクロック等である。【００１１】
図９Ｂを参照して、パターンＡ、Ｂの選択条件について説明する。図９Ｂは、パターンＡ、Ｂの選択条件における音声ミキシング処理時間とＩ２Ｓアンダーランエラー発生時間の関係を示す。【００１２】
選択条件「ＤＭＡ転送間隔＞(音声ミキシング処理時間×２)」を満たす場合には、パターンＡを選択する。パターンＡは、音声ミキシング処理に続いて、ＤＭＡ転送開始要求処理を行う。つまり、この条件に該当するときは、主系のＯＳによる音声ミキシング処理後のＨＷタイマーの解除が行われずに予備系のＯＳに切り替えられ、予備系のＯＳにより音声ミキシング処理を行った後にＤＭＡ転送を開始するものとしても、Ｉ２Ｓアンダーランエラー発生時間経過前にＤＭＡ転送を行うことができるからである。【００１３】
選択条件「ＤＭＡ転送間隔≦(音声ミキシング処理時間×２)」を満たす場合には、パターンＢを選択する。パターンＢは、ＤＭＡ転送開始要求処理に続いて、音声ミキシング処理を行う。つまり、この条件に該当するときは、主系のＯＳによる音声ミキシング処理後のＨＷタイマーの解除が行われずに予備系のＯＳに切り替えられ、予備系のＯＳにより音声ミキシング処理を行った後にＤＭＡ転送を開始すると、Ｉ２Ｓアンダーランエラー発生時間経過後にＤＭＡ転送が行われることになってしまうからである。【００１４】
また、パターンＢに該当するときは、ＤＭＡ転送開始要求処理を音声ミキシング処理よりも先に行う。そのため、図１０に示すように、音声データを１パケット(ＤＭＡ転送サイズ)分先読みして用意しておく。つまり、音声データがダブルバッファリングされる。しかし、パターンＢでは、音声データを１パケット分先読みする。そのため、画音同期を行う動画プレーヤーで動画を再生する場合、実際に再生中の音声データと、動画プレーヤーが再生中と認識する音声データが１パケット分ずれてしまい、画音同期の精度が低下してしまうという問題があった。【００１５】
ここで、図１１を参照して、この問題について具体的に説明する。図１１は、主系側のＯＳがＯＳ７２であり、予備系側のＯＳがＯＳ７１の場合について例示している。ＯＳ７１は、ミキシング済みカウンタ７１２を有する。ＯＳ７２は、ミキシング済みカウンタ７２２を有する。まず、主系側のＯＳ７２上で動作するアプリケーションプログラム(図においては、略して「ＡＰＰ」として示す)７２１は、サウンドキュー８２に音声データをエンキューする。アプリケーションプログラム７２１は、例えば、サンプリング周波数が４８０００Ｈｚで、１６ｂｉｔステレオの音声を含む動画を再生する。また、アプリケーションプログラム７２１は、例えば、４０９６ｂｙｔｅ単位、かつ、(１０２４／４８０００)秒間隔で音声データを送出する。【００１６】
予備系側のＯＳ７１上で動作するアプリケーションプログラム(図においては、略して「ＡＰＰ」として示す)７１１は、サウンドキュー８１に音声データをエンキューする。そして、主系側のＯＳ７２上で動作するソフトウェアミキサ７２３は、サウンドキュー８１、８２からデキューした音声データをミキシングする。ソフトウェアミキサ７２３は、ミキシング後の音声データをＤＭＡ転送用の音声データとしてＤＭＡ転送用バッファ７３に格納する。ＤＭＡ転送用バッファ７３に格納された音声データは、Ｉ２ＳデバイスのＦＩＦＯ７４に転送される。そして、ＦＩＦＯ７４からデキューされた音声データはＡＤＡＣ７５によって再生される。【００１７】
このように、ソフトウェアミキサ７２３は、複数のアプリケーションプログラムから出力された異なるサンプリング周波数及び量子化ビット数の音声データを単一の音声データに変換する。また、ソフトウェアミキサ７２３は、音声データをミキシングする毎に、ミキシング済みサンプル数カウンタ７２２のカウンタ値を、ミキシングして生成した音声データのサンプル数分、カウントアップする。【００１８】
主系側のＯＳ７２上で動作するアプリケーションプログラム７２１は、ミキシング済みサンプル数カウンタ７２２のカウンタ値を参照することで、音声データの送出間隔の計算及び画音同期を行う。つまり、アプリケーションプログラム７２１は、画音同期を行って動画を再生する場合、ミキシング済みの音声データのサンプル数に対応する画像を再生する。したがって、パターンＢのように、音声データを１パケット分先読みしてミキシングを行う処理方法では、再生される画像が実際に出力されている音声と大きくずれてしまい、画音同期の精度が低下してしまう。【００１９】
本発明の目的は、上述した課題を解決するために、画音同期の精度の低下を抑制しつつ、音切れの発生を防止することができるマルチコアシステム、マルチコアシステムの制御方法及びプログラムを提供することである。
【課題を解決するための手段】
【００２０】
本発明の第１の態様にかかるマルチコアシステムは、第１のプロセッサコア上で動作し、第１及び第２の音声データをミキシングして、当該ミキシングした合成音声データをＤＭＡ転送用バッファに格納する主系プログラムと、第２のプロセッサコア上で動作し、前記主系プログラムの予備系として動作する予備系プログラムと、前記ＤＭＡ転送用バッファから転送される合成音声データを順次格納し、当該格納した合成音声データを再生する音声出力部と、を備え、前記予備系プログラムは、前記ＤＭＡ転送用バッファに格納される合成音声データの格納量が、前記音声出力部に格納される合成音声データの格納量に応じて定める所定のデータ量に達していない場合、前記主系プログラムが実行していた合成音声データのミキシング及び格納を引き継いて実行することを特徴とする。【００２１】
本発明の第２の態様にかかるマルチコアシステムの制御方法は、第１のプロセッサコア上で動作し、第１及び第２の音声データをミキシングして、当該ミキシングした合成音声データをＤＭＡ転送用バッファに格納する主系プログラムと、第２のプロセッサコア上で動作し、前記主系プログラムの予備系として動作する予備系プログラムと、前記ＤＭＡ転送用バッファから転送される合成音声データを順次格納し、当該格納した合成音声データを再生する音声出力部と、を備えたマルチコアシステムの制御方法であって、前記ＤＭＡ転送用バッファに格納される合成音声データの格納量が、前記音声出力部に格納される合成音声データの格納量に応じて定める所定のデータ量に達しているか否かを判定するステップと、前記所定のデータ量に達していると判定した場合に、前記予備系プログラムが、前記主系プログラムが実行していた合成音声データのミキシング及び格納を引き継いて実行するステップと、を備えることを特徴とする。【００２２】
本発明の第３の態様にかかるプログラムは、転送されてくる合成音声データを順次格納し、当該格納した合成音声データを再生する音声出力部に対して転送される合成音声データを格納するＤＭＡ転送用バッファに、第１及び第２の音声データをミキシングした合成音声データを格納する主系プログラムとは異なるプロセッサコア上で、当該主系のプログラムの予備系として動作する予備系のプログラムであって、前記ＤＭＡ転送用バッファに格納される合成音声データの格納量が、前記音声出力部に格納される合成音声データの格納量に応じて定める所定のデータ量に達しているか否かを判定するステップと、前記所定のデータ量に達していると判定した場合に、前記予備系プログラムが、前記主系プログラムが実行していた合成音声データのミキシング及び格納を引き継いて実行するステップと、を前記プロセッサコアに実行させることを特徴とする。
【発明の効果】
【００２３】
上述した本発明の各態様により、画音同期の精度の低下を抑制しつつ、音切れの発生を防止することができるマルチコアシステム、マルチコアシステムの制御方法及びプログラムを提供することができる。
【図面の簡単な説明】
【００２４】
【図１】本発明の実施の形態にかかるマルチコアシステムのハードウェア構成の概要を示すブロック図である。
【図２】本発明の実施の形態にかかるマルチコアシステムのハードウェア構成を示すブロック図である。
【図３】本発明の実施の形態にかかるマルチコアシステムの機能構成を示すブロック図である。
【図４】本発明の実施の形態にかかるＦＩＦＯ境界割り込み回数と閾値との関係を示す図である。
【図５】本発明の実施の形態にかかる主系側のＯＳが正常に動作している状態での、音声ミキシング処理及びＤＭＡ転送処理を説明するシーケンス図である。
【図６】本発明の実施の形態にかかる主系側のＯＳが動作不能となった状態での、音声ミキシング処理及びＤＭＡ転送処理を説明するシーケンス図である。
【図７】本発明の実施の形態にかかるサウンドキューに関するパラメータを説明するための図である。
【図８】本発明に関連する技術を説明するための図である。
【図９Ａ】本発明に関連する技術の音声データ及び処理の流れを示す図である。
【図９Ｂ】本発明に関連する技術の音声データ及び処理の流れを示す図である。
【図１０】本発明に関連する技術の音声ミキシング処理及びＤＭＡ転送開始要求処理の処理方法を説明するための図である。
【図１１】本発明に関連する技術の画音同期の精度が低下してしまうという問題を説明するための図である。
【発明を実施するための形態】
【００２５】
まず、図１を参照して、本発明の実施の形態にかかるマルチコアシステムの概要について説明する。図１は、本実施の形態にかかるマルチコアシステムのハードウェア構成の概要を示すブロック図である。
【００２６】
マルチコアシステム２は、プロセッサコア６１、６２と、ＤＭＡ転送用バッファ６３と、音声出力部６４と、を備える。
【００２７】
プロセッサコア６１は、主系として動作するプログラム６１０を動作させる。
プロセッサコア６２は、予備系として動作するプログラム６２０を動作させる。
ＤＭＡ転送用バッファ６３は、プログラム６１、６２がミキシングした合成音声データを格納する。
音声出力部６４は、ＤＭＡ転送用バッファ６３から転送される合成音声データを順次格納し、格納した合成音声データを再生する。
プログラム６１０は、第１及び第２の音声データをミキシングして、ミキシングした合成音声データをＤＭＡ転送用バッファ６３に格納する。プログラム６１は、主系として動作するプログラムである。
プログラム６２０は、主系プログラムの予備系として動作する。
【００２８】
続いて、本発明の実施の形態にかかるマルチコアシステムの処理の概要について説明する。
主系のプログラム６１０は、第１及び第２の音声データをミキシングして、ミキシングした合成音声データをＤＭＡ転送用バッファ６３に格納する。そして、ＤＭＡ転送用バッファ６３に格納された合成音声データが一定のデータ量に達したときに、ＤＭＡ転送用バッファ６３に格納された合成音声データが音声出力部６４に転送される。音声出力部６４は、ＤＭＡ転送用バッファ６３から転送された合成音声データを順次格納し、当該格納した合成音声データを再生する。
【００２９】
予備系のプログラム６２０は、ＤＭＡ転送用バッファ６３に格納される合成音声データの格納量が、音声出力部６４に格納される合成音声データの格納量に応じて定める所定のデータ量に達しているか否かを判定する。そして、所定のデータ量に達していない場合、主系プログラムが６１０実行していた合成音声データのミキシング及び格納を引き継いて実行する。
【００３０】
続いて、図２及び図３を参照して、本発明の実施の形態にかかるマルチコアシステムの構成について説明する。図２は、本実施の形態にかかるマルチコアシステムのハードウェア構成を示すブロック図である。
【００３１】
図２に示すように、マルチコアシステム１は、組み込み用のＭＰＵ１０と、音声出力装置２０と、ＳＤＲＡＭ(Synchronous Dynamic Random Access Memory)３０と、を備えている。ＳＤＲＡＭは、外部共有メモリとして機能する。
【００３２】
ＭＰＵ１０は、マルチコアＣＰＵと、周辺デバイス(Ｉ２Ｓデバイス１３、Ｉ２Ｃデバイス１４、ＤＭＡＣ１５)とがワンチップ化されたＩＣ(Integrated Circuit)である。ＣＰＵ１１、１２は、それぞれ１つ又は複数のＣＰＵコアを含む。例えば、４つのＣＰＵコアを有するマルチコアＣＰＵのうち、ＣＰＵ１１はＣＰＵコア１つを含み、ＣＰＵ１２はＣＰＵコア３つを含む。また、ＣＰＵ１１、１２は、複数のマルチコアＣＰＵから構成されるようにしてもよい。ＣＰＵコアは、プロセッサコア６１、６２に相当する。
【００３３】
ＭＰＵ１０は、マルチコアＣＰＵ上において、複数のＯＳを動作させる。ＯＳ１１０がＣＰＵ１１上において動作する。ＯＳ１２０がＣＰＵ１２上において動作する。なお、ＯＳ１１０とＯＳ１２０は異なる種類のＯＳである。例えば、ＯＳ１１０をμＩＴＲＯＮ等のリアルタイムＯＳとし、ＯＳ１２０は高機能組み込みＯＳとする組み合わせが考えられる。高機能組み込みＯＳとは、例えば、組み込みＬｉｎｕｘ(登録商標)やＷｉｎｄｏｗｓ ＣＥ(登録商標)等である。
【００３４】
ＯＳ１１０上において、アプリケーションプログラム１１１(図においては、略して「ＡＰＰ」として示す)、及びデバイスドライバであるサウンドドライバ１１２が動作する。アプリケーションプログラム１１１から出力された音声データが、サウンドドライバ１１２へと入力される。また、ＯＳ１２０上において、アプリケーションプログラム１２１、１２２、１２３(図においては、略して「ＡＰＰ」としてそれぞれ示す)、サウンドサーバ１２４、及びデバイスドライバであるサウンドドライバ１２５が動作する。アプリケーションプログラム１２１及びアプリケーションプログラム１２２から出力された音声データは、サウンドサーバ１２４へと入力される。サウンドサーバ１２４から出力される音声データと、アプリケーションプログラム１２３から出力された音声データとが、サウンドドライバ１２５へと入力される。
【００３５】
Ｉ２Ｓデバイス１３は、Ｉ２Ｓバス(Ｉ２Ｓ ｂｕｓ)を経由して音声データをＡＤＡＣ＆ＡＭＰ２１へと送信する。Ｉ２Ｓデバイス１３は、１系統のデバイスである。Ｉ２Ｓデバイス１３はＦＩＦＯ１３１を備える。Ｉ２Ｓデバイス１３は、ＦＩＦＯ１３１に音声データを格納する。ここでは、Ｉ２Ｓデバイス１３は、音声データとして、ステレオＰＣＭを扱う。
【００３６】
Ｉ２Ｃデバイス１４は、デバイス制御用のシリアルバスである。Ｉ２Ｃデバイス１４は、ＡＤＡＣが備えるレジスタへの読み書きを行うために使用される。
【００３７】
ＤＭＡＣ(ＤＭＡ Ｃｏｎｔｏｒｏｌｌｅｒ)１５は、ＭＰＵ１０の外部に接続されたＳＤＡＲＭ３０と、他のデバイス間のＤＭＡ転送を制御する。ここでは、ＳＤＲＡＭ３０上のＯＳ間共有メモリ４０から、Ｉ２Ｓデバイス１３のＦＩＦＯ１３１への音声データの転送を、ＤＭＡＣ１５の１チャンネルを用いて行う。
【００３８】
なお、本実施の形態では、通常、ＯＳ１２０側のサウンドドライバ１２５が、音声ミキシング処理及び周辺デバイス(Ｉ２Ｓデバイス１３、Ｉ２Ｃデバイス１４、ＤＭＡＣ１５)の制御を行うものとして説明する。
【００３９】
音声出力装置２０は、ＡＤＡＣ＆ＡＭＰ２１と、スピーカー２２とを備えている。ＡＤＡＣ＆ＡＭＰ２１は、音声出力装置２０の外部インタフェースを構成する。ＡＤＡＣ＆ＡＭＰ２１は、Ｉ２Ｓバスを経由して送信される音声データをアナログ信号に変換・増幅する。ＡＤＡＣ＆ＡＭＰ２１は、アナログ信号をスピーカー２２を用いて再生する。Ｉ２Ｓデバイス１３及び音声出力装置２０は、音声出力部６４に相当する。
【００４０】
ＳＤＲＡＭ３０は、ＭＰＵ１０の外部にバスを介して接続される、揮発性のメモリ(ＲＡＭ)である。ＳＤＲＡＭ３０には、ＯＳ間共有メモリ４０として、ＭＰＵ１０のＯＳが共有するメモリ空間が確保される。
【００４１】
ＯＳ間共有メモリ４０内には、サウンドキュー(サウンドキュー４１、サウンドキュー４２、サウンドキュー４３)及びＤＭＡ転送用バッファ４４が設定される。サウンドキューは、アプリケーションプログラムが出力した音声データを格納するリングバッファである。サウンドキューとして、音声データを出力するアプリケーションプログラムの数に相当する数のキューが作成される。ここでは、ＯＳ１１０のアプリケーションプログラム１１１と、ＯＳ１２０のサウンドサーバ１２４と、ＯＳ１２０のアプリケーションプログラム１２３とに相当する、３個のサウンドキュー(サウンドキュー４１、サウンドキュー４２、サウンドキュー４３)が作成される。サウンドキュー(サウンドキュー４１、サウンドキュー４２、サウンドキュー４３)の音声データが音声ミキシング処理された後に、ＤＭＡ転送用バッファ４４に格納される。なお、サウンドキューは、リングバッファ以外のキューイング手段を用いて構成するものとしてもよい。
【００４２】
図３は、本実施の形態にかかるマルチコアシステムの機能構成を示すブロック図である。図３では、図２において示したサウンドドライバ１１２を、上位アプリＩ／Ｆ部１１３とドライバコア部１１４に分割して示している。また、サウンドドライバ１２５を、上位アプリＩ／Ｆ部１２６とドライバコア部１２７に分割して示している。上位アプリＩ／Ｆ部１１３は、サンプリングレート変換機能１１６を有する。上位アプリＩ／Ｆ部１２６は、サンプリングレート変換機能１３０を有する。
【００４３】
上位アプリＩ／Ｆ部１１３は、アプリケーションプログラム１１１から出力された音声データをＯＳ間共有メモリ４０内のサウンドキュー４１に格納する。このときに、上位アプリＩ／Ｆ部１１３のサンプリングレート変換機能１１６は、アプリケーションプログラム１１１から受け取った音声データに対して、サンプリングレートの変換や量子化ビット数の変換を必要に応じて行う。上位アプリＩ／Ｆ部１１３は、変換後の音声データを、ＯＳ間共有メモリ４０内のサウンドキュー４１へと格納する。
【００４４】
上位アプリＩ／Ｆ部１２６は、サウンドサーバ１２４とアプリケーションプログラム１２３とから出力された音声データをＯＳ間共有メモリ４０内のサウンドキュー４２、４３に格納する。このときに、上位アプリＩ／Ｆ部１２６のサンプリングレート変換機能１３０は、サウンドサーバ１２４とアプリケーションプログラム１２３とから受け取った音声データに対して、サンプリングレートの変換や量子化ビット数の変換を必要に応じて行う。上位アプリＩ／Ｆ部１２６は、変換後の音声データを、ＯＳ間共有メモリ４０内のサウンドキュー４２、４３へと格納する。サンプリングレート変換機能１１６、１３０は、例えば、４８ｋＨｚ ２３ｂｉｔの音声を、４４．１ｋＨｚ １６ｂｉｔの音声へと変換する。
【００４５】
ドライバコア部１１４、１２７は、ＯＳ間共有メモリ４０の各サウンドキューに格納された音声データをミキシングする。ドライバコア部１１４、１２７は、音声ミキシング処理後の音声データを、ＤＭＡ転送を用いてＩ２Ｓデバイス１３のＦＩＦＯ１３１へと転送する。なお、本実施の形態では、サウンドドライバ１１２、１２５の一部であって、音声ミキシング処理及びＩ２Ｓデバイス１３、Ｉ２Ｃデバイス１４の制御を行う機能部分を、ドライバコア部１１４、１２５として定義する。また、音声ミキシング処理とは、各ＯＳ上で動作する複数のアプリケーションプログラムから出力された音声データをミキシングして、単一の音声データとしてＤＭＡ転送用の領域(ＤＭＡ転送用バッファ４４)にコピーする処理を指す。
【００４６】
本実施の形態では、システム動作時に、複数のＯＳのうち、１つのＯＳ(主系)のドライバコア部のみが動作する。その他のＯＳ(予備系)のドライバコア部は、通常は待機状態となっている。予備系は、主系側のＯＳがカーネルパニックやフリーズ等した場合にのみ動作する。なお、主系とは、正常時に動作するドライバコア部を有するシステムを指す。予備系とは、主系側の動作不能となった時に動作するドライバコア部を有するシステムを指す。ここで、主系及び予備系とは、あくまでもサウンド再生機能(サウンドドライバの一部機能)についての主系及び予備系であり、主系ＯＳ及び予備系ＯＳのことではない。すなわち、予備系側のＯＳとは、サウンド再生機能に関する予備系としての機能を備えているＯＳのことを指す。
【００４７】
ソフトウェアミキサ１２８は、ドライバコア部１２７が呼び出す関数である。ソフトウェアミキサ１２８は、各サウンドキューに格納された音声データをミキシングする。ソフトウェアミキサ１２８は、ミキシング後の音声データをＤＭＡ転送用バッファ４４に格納する。
【００４８】
共通割り込み制御部１６は、各ＣＰＵコアに対して、割り込み要求(ＩＲＱ)の割り振りを行う。共通割り込み制御部１６は、基本的には、ＭＰＵ１０内にハードウェアの機能として備えらえる。なお、共通割り込み制御部１６がＭＰＵ１０内にハードウェアの機能として搭載されていない場合には、ソフトウエアの機能として実装することも可能である。
【００４９】
共通割込み制御部１６に入力される割り込み要求は、音声データのＤＭＡ転送が完了した場合に、ＤＭＡＣ１５が発行するＤＭＡ転送完了割り込みと、Ｉ２Ｓデバイス１３が発行するＦＩＦＯ境界割り込みである。ＤＭＡ転送完了割り込みの発生から一定の時間内にＤＭＡ転送要求が無い場合には、Ｉ２Ｓデバイス１３のＦＩＦＯ１３１のバッファが空となり、Ｉ２Ｓアンダーランエラーが発生する。
【００５０】
ドライバ管理部１１５は、予備系側のＯＳの割り込みハンドラが呼び出す関数群である。ドライバ管理部１１５は、ＨＷタイマー１７の設定、ＦＩＦＯ境界割り込みのＯＮ／ＯＦＦの設定や、主系のドライバコア部を用いた動作を予備系のドライバコア部を用いた動作へと切り替える切り替処理を行う。なお、ここでは、ＨＷタイマー１７は、ＭＰＵ１０が備えるハードウェアタイマーを指す。
【００５１】
続いて、本発明の実施の形態にかかるマルチコアシステムの動作を概略的に説明する。
【００５２】
ＳＤＲＡＭ３０からＦＩＦＯ１３１に対してＤＭＡ転送が行われた後に、複数のＯＳ１１０、１２０がＤＭＡ転送完了割り込みを受信する。主系側のＯＳ１２０が正常に動作している場合には、受信したＤＭＡ転送完了割り込みが、ＤＭＡ転送完了割り込みスレッド１２９に到達する。そして、ＤＭＡ転送完了割り込みスレッド１２９は、音声データのＤＭＡ転送完了割り込みをトリガーとして動作し、音声データの音声ミキシング処理及びＤＭＡ転送要求処理を行う。そして、ＤＭＡ転送用バッファ４４に格納された音声ミキシング処理後の音声データが、ＳＤＲＡＭ３０からＦＩＦＯ１３１に対してＤＭＡ転送される。
【００５３】
なお、音声ミキシング処理及びＤＭＡ転送開始要求処理の処理順序に関して、主系側のＯＳ１２０における音声ミキシング処理時間とＩ２Ｓアンダーランエラーの関係に基づいて、パターンＡ又はパターンＢのいずれかのパターンを選択する。
【００５４】
選択条件「ＤＭＡ転送間隔＞(音声ミキシング処理時間×２)」を満たす場合には、パターンＡを選択する。そして、パターンＡでは、音声ミキシング処理に続いて、ＤＭＡ転送開始要求処理を行うという順序で処理が行われる。すなわち、この場合には、ＤＭＡ転送開始要求処理に先立ち、音声ミキシング処理を行う。
【００５５】
選択条件「ＤＭＡ転送間隔≦(音声ミキシング処理時間×２)」を満たす場合には、パターンＢを選択する。そして、パターンＢでは、ＤＭＡ転送開始要求処理に続いて、音声ミキシング処理を行うという順序で処理が行われる。すなわち、この場合には、音声ミキシング処理に先立ち、ＤＭＡ転送開始要求処理を行う。また、ＤＭＡ転送を行う音声データの１パケット(＝ＤＭＡ転送サイズ)分の先読みを行うために、音声データのダブルバッファリング処理が必要となる。
【００５６】
また、本実施の形態では、選択条件「音声ミキシング処理時間＜ＤＭＡ転送間隔≦(音声ミキシング処理時間×２)」を満たす場合には、選択条件「ＤＭＡ転送間隔≦(音声ミキシング処理時間×２)」を満たすときであっても、パターンＡを選択する。つまり、パターンＢの選択条件は、正確には、「音声ミキシング処理時間≧ＤＭＡ転送間隔」かつ「ＤＭＡ転送間隔≦(音声ミキシング処理時間×２)」となる。
【００５７】
続いて、本発明の実施の形態にかかるマルチコアシステムの主系側のＯＳ１２０の監視機能について説明する。まず、選択条件「ＤＭＡ転送間隔＞(音声ミキシング処理時間×２)」を満たすときにパターンＡを選択した場合と、パターンＢを選択した場合について説明する。
【００５８】
この場合に予備系側のＯＳ１１０がＤＭＡ転送完了割込みを受信したときは、予備系側のＯＳ１１０が備える割り込みハンドラによって動作するドライバ管理部１１５が、ＨＷタイマー１７を設定する。そして、ＤＭＡ転送完了割り込みが、主系側のＯＳ１２０のＤＭＡ転送完了割り込みスレッド１２９に到達した場合には、ＤＭＡ転送完了割り込みスレッド１２９が、設定したＨＷタイマー１７を解除する。これにより、ＤＭＡ転送完了割り込みが、主系側のＯＳ１２０のＤＭＡ転送完了割り込みスレッド１２９にまで到達しなかった場合には、設定したＨＷタイマー１７は解除されずにタイムアウトする。したがって、ＨＷタイマー１７のタイムアウトの有無に基づいて、主系側のＯＳ１２０の動作不能を監視することが可能となる。
【００５９】
次に、選択条件「音声ミキシング処理時間＜ＤＭＡ転送間隔≦(音声ミキシング処理時間×２)」を満たすときにパターンＡを選択した場合について説明する。
【００６０】
この場合に予備系側のＯＳ１１０がＤＭＡ転送完了割込みを受信したときは、予備系側のＯＳ１１０が備える割り込みハンドラによって動作するドライバ管理部１１５が、Ｉ２Ｓデバイス１３のＦＩＦＯ境界割り込みの受信を許可する。また、予備系側のＯＳ１１０がＦＩＦＯ境界割り込みを受信した場合、ドライバ管理部１１５は、ＤＭＡ転送用バッファ４４に格納されている音声データのサンプル数が所定の閾値に達しているか否かを判定する。判定の結果、音声データのサンプル数が、ＦＩＦＯ１３１に格納されている音声データのサンプル数から算出される所定の閾値に達していない場合、ドライバ管理部１１５は、主系のドライバコア部１２７を用いた動作を予備系のドライバコア部１１４を用いた動作へと切り替える切り替処理を行う。
【００６１】
ここで、所定の閾値とは、ＦＩＦＯ１３１に格納されている残りの音声データが全てデキューされるまでに、残りの音声ミキシング処理及びＤＭＡ転送要求処理の実行を完了させることが可能なサンプル数の音声データがＤＭＡ転送用バッファ４４に格納されているかどうかを判定するための基準値である。つまり、ＤＭＡ転送用バッファ４４に格納されている音声データのサンプル数が、所定の閾値に達している場合は、その時点から残りの音声ミキシング処理及びＤＭＡ転送要求処理を実行しても、Ｉ２Ｃアンダーランエラーが発生しないことになる。
【００６２】
ＦＩＦＯ１３１に格納される音声データのサンプル数は、例えば、ＦＩＦＯ１３１のレジスタを参照することによって特定することができる。また、ＦＩＦＯ境界割り込みが発生した回数によって、ＦＩＦＯ１３１からデキューされた音声データのサイズが分かる。さらに、そのサイズによってＦＩＦＯ１３１からデキューされた音声データのサンプル数が分かる。そのため、ＦＩＦＯ境界割り込みが発生した回数から、ＦＩＦＯ１３１に格納されている音声データのサンプル数を算出するようにしてもよい。
【００６３】
ここで、予備系のドライバコア部１１４に動作を切り替えた場合、予備系のドライバコア部１１４は、主系側のドライバコア部１２７が途中まで行った音声ミキシング処理を引き継いで実行する。予備系のドライバコア部１１４は、ＤＭＡ転送用バッファ４４に格納される音声データのサンプル数を参照することで、主系側のドライバコア部１２７がミキシングした音声データのサンプル数を特定することができる。これにより、サウンドキュー４１、４２、４３に格納される音声データのうちから、引き継いでミキシングを開始する音声データを特定することができる。なお、ＤＭＡ転送用バッファ４４に格納される音声データのサンプル数は、ソフトウェアミキサ１２８がＯＳ間共有メモリ４０にその値を格納しておくことによって特定することができるようにしてもよく、ＤＭＡ転送用バッファ４４に格納されている音声データのサンプル数を数えることによって特定することができるようにしてもよい。
【００６４】
続いて、図４を参照して、閾値の一例について説明する。図４は、ＦＩＦＯ境界割り込み回数と閾値との関係を示す図である。
【００６５】
図４は、マルチコアシステム１の動作スペックとして、音声サンプリング周波数が約４８０００Ｈｚであり、Ｉ２Ｓアンダーランエラー発生時間が１２００μｓであり、音声ミキシング処理時間が７００μｓであり、ＤＭＡ転送単位が１０２４サンプルである場合に決定される閾値の一例を示す図である。約４８０００Ｈｚという値は、ＭＰＥＧ(Moving Picture Experts Group)動画における音声出力等で使用される周波数である。ＦＩＦＯ１３１は、段数が６４段であり、８段分のデータを送出するのに１５０μｓ(１段分の送出に１／約４８０００Ｈｚ≒１８．７５μｓ)が必要な場合について例示している。ここで、１段に１サンプルの音声データが格納されている。また、ミキシングされた音声データのサイズが４ｂｙｔｅであるものとする。つまり、ＦＩＦＯ１３１に格納される音声データが３２(４ｂｙｔｅ×８段)バイト減少する毎に、ＦＩＦＯ境界割り込みが発生する場合について例示している。
【００６６】
図４の「ＦＩＦＯ境界割り込み回数」は、ＤＭＡ転送完了割り込みの受信時を起点とした割り込みの回数を示す。また、「ＦＩＦＯ境界割り込みが発生する時間」は、ＤＭＡ転送完了割り込みの受信時を起点とした時間を示す。なお、閾値は、ＦＩＦＯ１３１に格納される音声データのサンプル数と、音声サンプリング周波数から算出可能である。
【００６７】
例えば、７回目のＦＩＦＯ境界割り込みが発生した場合、ＦＩＦＯ１３１の残りサンプル数は８サンプルである。したがって、８サンプルが送出される１５０μｓが経過するとＩ２Ｓアンダーランエラーになると算出することができる。ここで、１５０μｓの余裕をもってＤＭＡ転送単位のサンプル数の音声データのミキシングが完了していることを期待値とした場合、７回目のＦＩＦＯ境界割り込みが発生した時点で、ＤＭＡ転送用バッファ４４に１０２４サンプルの音声データが格納されている必要がある。この場合、図４に示すように、閾値を「１０２４」とする。
【００６８】
ドライバ管理部１１５は、例えば、ＦＩＦＯ１３１の残りサンプル数や音声サンプリング周波数から閾値を算出する計算式や、図４に示すようにＦＩＦＯ１３１の残りサンプル数から閾値を特定するテーブルを参照することができるようにすることで閾値を特定可能とする。この計算式又はテーブルは、例えば、ドライバ管理部１１５や、ＯＳ間共有メモリ４０が有することで、ドライバ管理部１１５が参照可能とする。
【００６９】
続いて、図５及び図６を参照して、主系側のＯＳ１２０の動作不能を検出した場合における、ドライバコア部の切り替え動作について説明する。まず、図５を参照して、主系側のＯＳ１２０が正常に動作している場合において、ＤＭＡ転送完了割り込みを受信した後の処理について説明する。図５は、主系側のＯＳ１２０が正常に動作している状態での、音声ミキシング処理及びＤＭＡ転送処理を説明するシーケンス図である。なお、ＦＩＦＯ境界割り込みは、図３に示すように共通割り込み制御部１６を経由してドライバ管理部１１５に出力されるが、図５及び図６ではその点について省略して記載している。
【００７０】
まず、ＤＭＡ転送完了割り込みをＭＰＵ１０が受信した場合には、共通割り込み制御部１６は、複数のＣＰＵコアに対して、割り込み要求(ＩＲＱ)を送信する(Ｓ１０１)。
次に、予備系側のＯＳ１１０上において動作するドライバ管理部１１５は、共通割込み制御部１６から割り込み要求(ＩＲＱ)を受信すると、ＦＩＦＯ境界割り込み開始要求をＩ２Ｓデバイス１３に出力する(Ｓ１０２）。Ｉ２Ｓデバイス１３は、ＦＩＦＯ境界割り込み開始要求の出力を受けると、ＦＩＦＯ境界割り込みの出力を開始する。
【００７１】
次に、ドライバ管理部１１５は、ＦＩＦＯ境界割り込みの出力を受けると、ＤＭＡ転送用バッファ４４に格納される音声データのサンプル数を取得する。ドライバ管理部１１５は、取得したサンプル数が閾値に達しているか否かを判定する(Ｓ１０３)。ドライバ管理部１１５は、サンプル数が閾値に達している場合、主系側のドライバコア１２７が正常に動作して音声ミキシング処理を行っているため、予備系のドライバコア部１１４への動作の切り替えは行わない。
【００７２】
次に、主系側のドライバコア部１２７は、音声ミキシング処理が正常に終了した場合、ＦＩＦＯ境界割り込み停止要求をＩ２Ｓデバイスに出力する(Ｓ１０４)。Ｉ２Ｓデバイス１３は、ＦＩＦＯ境界割り込み停止要求の出力を受けると、ＦＩＦＯ境界割り込みの出力を停止する。
【００７３】
次に、図６を参照して、主系側のＯＳ１２０が動作不能となった場合に、予備系側のＯＳを用いて、音声ミキシング処理及びＤＭＡ転送処理を継続して行う処理について説明する。図６は、主系側のＯＳ１２０が動作不能となった状態での、音声ミキシング処理及びＤＭＡ転送処理を説明するシーケンス図である。なお、図６において示すＳ２０１及びＳ２０２での処理は図５で示したＳ１０１及びＳ１０１での処理と同一であるため、ここではその説明を省略する。
【００７４】
ドライバ管理部１１５は、ＦＩＦＯ境界割り込みの出力を受けると、ＤＭＡ転送バッファに格納される音声データのサンプル数を取得する。ドライバ管理部１１５は、取得したサンプル数が閾値に達しているか否かを判定する(Ｓ２０３)。ここで、図６において、主系側のＯＳ１２０が動作不能となった場合には、音声ミキシング処理が行われなくなり、サンプル数が閾値に達しなくなる。ドライバ管理部１１５は、サンプル数が閾値に達していない場合、主系側のドライバコア部１２７が正常に動作していないため、予備系のドライバコア部１１４への動作の切り替えを行う。具体的には、ドライバ管理部１１５は、予備系側のドライバコア部１１４に対して音声ミキシング処理の開始を要求する。これにより、予備系側のドライバコア部１１４が、音声ミキシング処理を開始する。
【００７５】
予備系のドライバコア部１１４は、動作の切り替え後、Ｉ２Ｓデバイスに対してＦＩＦＯ境界割り込み停止要求を出力する(Ｓ２０４)。Ｉ２Ｓデバイス１３は、ＦＩＦＯ境界割り込み停止要求の出力を受けると、ＦＩＦＯ境界割り込みの出力を停止する。そして、予備系のドライバコア部１１４は、主系側のＯＳ１２０が動作不能となったところから、音声データの音声ミキシング処理を引き継いで行う。
【００７６】
ここで、図７を参照して、主系側のＯＳ１２０が動作不能となったところから、音声データの音声ミキシング処理を引き継いで行う処理について具体的に説明する。
【００７７】
図７に示すように、本実施の形態では、各サウンドキュー(リングバッファ)に対して、一般的なリングバッファのパラメータ(ｆｒｏｎｔ、ｒｅａｒ)に加えて、パラメータｆｒｏｎｔ２を追加する。ここで、ｆｒｏｎｔは、主系側のドライバコア部１２７が使用する、デキュー用のパラメータである。また、ｒｅａｒは、各ＯＳの上位アプリＩ／Ｆ部１２６、１１３が使用する、エンキュー用のパラメータである。また、ｆｒｏｎｔ２は、予備系側のドライバコア部１１４が使用する、デキュー用のパラメータである。
【００７８】
パラメータｆｒｏｎｔ２は、音声ミキシング処理中に主系側のＯＳ１２０が動作不能となってしまった場合に、音声データの整合性を保つために使用する。例えば、予備系側のＯＳ１１０が待機している時に、主系側のドライバコア部１２７が、ＤＭＡ転送開始要求後に、Ｉ２Ｓデバイス１３のＦＩＦＯ１３１における最初のフル割り込みの発生をトリガーとして、ＤＭＡ転送の転送回数分、ｆｒｏｎｔ２をカウントする。なお、ｆｒｏｎｔ２のカウント方法としてはこれに限定されず、より簡易的な方法を用いてもよい。例えば、主系側のＤＭＡ転送完了割り込みスレッドが、スレッドの出口においてｆｒｏｎｔ２をカウントする構成としてもよい。つまり、Ｉ２Ｓデバイス１３のＦＩＦＯ１３１におけるフル割り込みを禁止して実施してもよい。
【００７９】
主系側のＯＳ１２０が正常に動作している場合には、ＤＭＡ転送完了割り込みスレッド１２９は、ｆｒｏｎｔを用いて示す位置からの音声データ(図７において斜線を用いて示す部分)をデキューする。このデキュー処理は、ｆｒｏｎｔを用いてカウントされる。つまり、音声データをデキューする毎に、デキューした音声データのサンプル数分、ｆｒｏｎｔをカウントしていく。次いで、主系側のドライバコア部１２７が、呼び出したソフトウェアミキサ関数を用いて、サウンドキューから出力された複数の音声データの音声ミキシング処理を行う。次いで、ＤＭＡ転送用バッファ４４に格納された音声ミキシング処理後の音声データが、ＳＤＲＡＭ３０からＩ２Ｓデバイス１３のＦＩＦＯ１３１へとＤＭＡ転送される。ここでは、このＤＭＡ転送回数が、ｆｒｏｎｔ２を用いてカウントされる。つまり、ＤＭＡ転送する毎に、ＤＭＡ転送された音声データのサンプル数分、ｆｒｏｎｔ２をカウントしていく。
【００８０】
したがって、主系側のＯＳ１２０が正常に動作している場合には、ｆｒｏｎｔとｆｒｏｎｔ２を同じ位置から開始させた後に、ｆｒｏｎｔ２はｆｒｏｎｔに追従して変化する。これに対して、主系側のＯＳ１２０が動作不能となってしまった場合には、音声データのデキューが途中で停止し、ｆｒｏｎｔのカウントが停止する。また、主系側のＯＳ１２０)が動作不能になることでＤＭＡ転送が行われなくなるために、ｆｒｏｎｔ２についてもカウントが停止し、ｆｒｏｎｔ２の位置は更新されない。
【００８１】
ここで、図７に示すように、主系側のＯＳ１２０が動作不能となって、ｆｒｏｎｔ及びｆｒｏｎｔ２が停止した場合に、切り替えた予備系側のドライバコア部１１４が、呼び出したソフトウェアミキサ関数を用いて、ｆｒｏｎｔが示す位置から音声データのデキューを開始した状況を想定する。この状況において、ｆｒｏｎｔを用いて示す位置から音声データのデキューを開始すると、欠損している可能性のある音声データをデキューすることになり、音声データの整合性を保証することができない。このため、主系側のＯＳ１２０が動作不能となって、ｆｒｏｎｔ及びｆｒｏｎｔ２が停止した場合に、切り替えた予備系側のドライバコア部１１４が、呼び出したソフトウェアミキサ関数を用いて、ｆｒｏｎｔ２が示す位置から音声データのデキューを開始する。このようにすることで、主系側のＯＳ１２０が動作不能となるよりも前の音声データからデキューを開始することができるため、切り替えの前後での音声データの整合性を保証することができる。
【００８２】
ここで、選択条件「音声ミキシング処理時間＜ＤＭＡ転送間隔≦(音声ミキシング処理時間×２)」を満たしてパターンＡを選択している場合には、ＤＭＡ転送用バッファ４４を参照して、ＤＭＡ転送用バッファ４４に格納されている音声データのサンプル数を−１したサンプル数分、ｆｒｏｎｔ２をカウントする。そして、ｆｒｏｎｔ２が示す位置から音声データのデキューを開始する。
【００８３】
ここで、ＤＭＡ転送用バッファ４４に格納されている音声データのうち、欠損している可能性のある音声データは、主系側のドライバコア部１２７が最後に音声ミキシングして格納していた音声データとなる。したがって、このように、予備系側のドライバコア部１１４において、主系側のドライバコア部１２７が最後に音声ミキシングして格納していた音声データから音声ミキシング処理を引き継いで実行するようにすることで、切り替えの前後での音声データの整合性を保証することができる。つまり、予備系側のドライバコア部１１４は、サウンドキュー４１、４２、４３の位置のうち、ＤＭＡ転送用バッファ４４に格納されている音声データの格納量が示す位置よりも少なくとも１サンプル前の位置から、音声ミキシング処理を引き継いで実行する。
【００８４】
また、このように、予備系側のドライバコア部１１４において、音声ミキシング処理を引き継いで実行するようにすることで、主系側から予備系側への切り替えの前後を通じての音声ミキシング処理時間を、ほぼ１回分の音声ミキシング処理時間とすることができる。そのため、「音声ミキシング処理時間＜ＤＭＡ転送間隔≦(音声ミキシング処理時間×２)」の条件となる場合にパターンＡを選択しても、Ｉ２Ｓアンダーランエラーを発生させることなく、主系側から予備系への切り替えを行うことができる。
【００８５】
また、予備系側のＯＳ１１０へと切り替えた場合に、新しく主系側となった予備系側のドライバコア部１１４が音声ミキシング処理を行っている最中には、主系側であったドライバコア部１２７からのＤＭＡレジスタアクセスを禁止することで、音声データの整合性を保証する。例えば、主系側のＯＳ１２０が認識している共有メモリ(ＳＤＲＡＭ３０)上の周辺デバイス(Ｉ２Ｓデバイス１３、ＤＭＡＣ１５)のベースアドレスを、予備系側のドライバ管理部１１０が一時的に、ＳＤＲＡＭ３０上において未使用領域等の無効アドレスに変更する。これによって、切り替え前に主系であったＯＳ１２０がレジスタへとアクセスすることを禁止することができる。
【００８６】
以上に説明した本実施の形態によれば、複数のＯＳ間で音声出力のＩ２Ｓバスを共有する構成において、片方のＯＳの動作が停止した場合においても、もう片方のＯＳ側からの音声出力が途切れることを防止することができる。そのときに、「音声ミキシング処理時間＜ＤＭＡ転送間隔≦(音声ミキシング処理時間×２)」となる場合であっても、画音同期の精度が低下しないパターンＡによって主系から予備系への切り替えを可能としている。そのため、画音同期の精度の低下を抑制しつつ、音切れの発生を防止することができる。
【００８７】
また、本実施の形態によれば、予備系でＦＩＦＯ境界割り込みを受信したときの主系から予備系への切り替えの要否の判定は、ＯＳ間共有メモリに格納される音声データのサンプル数を参照するだけで可能である。そのため、処理速度を低下させることがない。
また、本実施の形態では、ＦＩＦＯ境界割り込みを許可している期間も、数十ｍｓ毎のＤＭＡ転送サイクルのうちの数百μｓオーダーの期間である。そのため、予備系側でのパフォーマンスへの影響は非常に少ない。
【００８８】
また、本実施の形態では、サウンドドライバを上位アプリＩ／Ｆ部とドライバコア部に分離しており、サンプリングレート変換機能を上位アプリＩ／Ｆ部に有するようにしている。したがって、主系側のドライバコア部のみが動作不能となった場合であっても、主系の上位アプリＩ／Ｆ部におけるサンプリングレート変換処理を継続することができる。そのため、予備系のドライバコア部に音声ミキシング処理の実行を切り替えることで、主系側のＯＳで生成される音声データも継続して再生することが可能である。
【００８９】
なお、本発明は上記実施の形態に限られたものではなく、趣旨を逸脱しない範囲で適宜変更することが可能である。例えば、ＭＰＵ１０が２つのＯＳ１１０、１２０を備えている場合を例に説明したが、本発明はこれに限定されない。すなわち、ＭＰＵ１０が３つ以上のＯＳを備えるものとしてもよい。かかる場合には、予備系側のＯＳが複数存在することになる。
【００９０】
上述した主系又は待機系における動作を実行するプログラムは、様々なタイプの非一時的なコンピュータ可読媒体（non-transitory computer readable medium）を用いて格納され、コンピュータに供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体（tangible storage medium）を含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体（例えばフレキシブルディスク、磁気テープ、ハードディスクドライブ）、光磁気記録媒体（例えば光磁気ディスク）、ＣＤ−ＲＯＭ（Read Only Memory）、ＣＤ−Ｒ、ＣＤ−Ｒ／Ｗ、半導体メモリ（例えば、マスクＲＯＭ、ＰＲＯＭ（Programmable ROM）、ＥＰＲＯＭ（Erasable PROM）、フラッシュＲＯＭ、ＲＡＭ（random access memory））を含む。また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体（transitory computer readable medium）によってコンピュータに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の有線通信路、又は無線通信路を介して、プログラムをコンピュータに供給できる。
【００９１】
この出願は、２００９年１１月１８日に出願された日本出願特願２００９−２６２５４５を基礎とする優先権を主張し、その開示の全てをここに取り込む。
【符号の説明】
【００９２】
１    マルチコアシステム
１０、５０    ＭＰＵ
１１、１２    ＣＰＵ
１３    Ｉ２Ｓデバイス
１４    Ｉ２Ｃデバイス
１５    ＤＭＡコントローラ
１６    共通割り込み制御部
１７    ＨＷタイマー
２０    音声出力装置
２１、５１    ＡＤＡＣ＆ＡＭＰ
２２    スピーカー
３０    ＳＲＡＭ
４０    ＯＳ間共有メモリ
４１、４２、４３、８１、８２        サウンドキュー
４４、６３、７３    ＤＭＡ転送用バッファ
６１、６２    プロセッサコア
６４    音声出力部
７１、７２、１１０、１２０        ＯＳ
７４、１３１        ＦＩＦＯ
７５    ＡＤＡＣ
１１１、１２１、１２２、１２３、７１１、７２１    アプリ
１１２、１２５        サウンドドライバ
１１３、１２６        上位アプリＩ／Ｆ部
１１４、１２７        ドライバコア部
１１５        ドライバ管理部
１１６、１３０        サンプリングレート変換機能
１２４        サウンドサーバ
１２８        ソフトウェアミキサ
１２９        ＤＭＡ転送割り込みスレッド
６１０、６２０        プログラム
７１２、７２２        ミキシング済みサンプル数カウンタ
【図１】
0005382133.tif 000002
【図２】
0005382133.tif 000003
【図３】
0005382133.tif 000004
【図４】
0005382133.tif 000005
【図５】
0005382133.tif 000006
【図６】
0005382133.tif 000007
【図７】
0005382133.tif 000008
【図８】
0005382133.tif 000009
【図９Ａ】
0005382133.tif 000010
【図９Ｂ】
0005382133.tif 000011
【図１０】
0005382133.tif 000012
【図１１】
0005382133.tif 000013