(57)【要約】【課題】  マルチプロセッサと、それに接続された周辺ハードウェアとを効率的に協調動作させること。【解決手段】  携帯電話１においては、ＣＰＵ１０の単位プロセッサＰ０〜Ｐ３それぞれから、周辺装置４０ａ〜４０ｄおよびコプロセッサ１３０ａ，１３０ｂといった周辺ハードウェアに処理を依頼することができる。したがって、周辺ハードウェアに処理を依頼するタスクをいずれの単位プロセッサＰ０〜Ｐ３においても実行することが可能となり、マルチプロセッサであるＣＰＵ１０と周辺ハードウェアとを効率的に協調動作させることが可能となる。【選択図】  図２
2006260377.tif 000002
【特許請求の範囲】
【請求項１】
タスクあるいはスレッドを実行するプロセッサ部を複数備え、周辺ハードウェアと接続されたプロセッサを含む並列処理装置であって、
タスクあるいはスレッドを実行している前記プロセッサ部それぞれが、実行中のタスクあるいはスレッドの実行内容に応じて周辺ハードウェアに処理依頼を行うことを特徴とする並列処理装置。
【請求項２】
前記周辺ハードウェアは、処理対象となるデータを格納するデータレジスタと、処理内容を示すコマンドを格納するコマンドレジスタとを備え、
前記周辺ハードウェアに処理を行わせる前記プロセッサ部が、前記データレジスタに処理対象となるデータを書き込むと共に、前記コマンドレジスタにコマンドを書き込むことによって、前記処理依頼を行うことを特徴とする請求項１記載の並列処理装置。
【請求項３】
命令セットにおいて、前記処理依頼を行う命令を発行させる所定命令が予め用意され、
前記プロセッサ部は、該所定命令を実行することにより、前記周辺ハードウェアに対して前記処理依頼を行う命令を発行することを特徴とする請求項１または２記載の並列処理装置。
【請求項４】
前記周辺ハードウェアには、メモリ領域の所定アドレスが割り当てられ、
前記プロセッサ部は、前記周辺ハードウェアに割り当てられたメモリ領域へのストア命令を実行することにより、前記処理依頼を行うことを特徴とする請求項１または２記載の並列処理装置。
【請求項５】
前記処理依頼を受けた前記周辺ハードウェアは、依頼された処理が終了した場合に、処理依頼を行った前記プロセッサ部に対する割り込み信号を出力し、
前記処理依頼を行った前記プロセッサ部は、該割り込み信号によって、依頼した処理の結果を取得することを特徴とする請求項１から４のいずれか１項に記載の並列処理装置。
【請求項６】
前記処理依頼を行った前記プロセッサ部は、依頼先である前記周辺ハードウェアに対し、ポーリングを行うことにより、依頼した処理の結果を取得することを特徴とする請求項１から４のいずれか１項に記載の並列処理装置。
【請求項７】
前記複数のプロセッサ部におけるいずれかのプロセッサ部に対し、タスクあるいはスレッドの優先度の決定を排他的に行うための排他制御権を与える排他制御処理部と、
発生しているタスクあるいはスレッドの実行状態を管理するタスク状態管理部とを備え、
前記処理依頼を行ったタスクあるいはスレッドが、前記排他制御権を取得することにより自タスクの優先度を変更し、
前記タスク状態管理部によって管理されている実行状態に応じて、タスクあるいはスレッドの切り替えを行うことを特徴とする請求項１から６のいずれか１項に記載の並列処理装置。
【請求項８】
前記処理依頼を行ったタスクあるいはスレッドは、前記排他制御権を取得した後、自タスクあるいはスレッドの優先度を下げることを特徴とする請求項７記載の並列処理装置。
【請求項９】
前記周辺ハードウェアは、所定処理を実行する周辺装置であることを特徴とする請求項１から８のいずれか１項に記載の並列処理装置。
【請求項１０】
前記周辺ハードウェアは、特定の処理を担うことによりプロセッサを補助するコプロセッサであることを特徴とする請求項１から８のいずれか１項に記載の並列処理装置。
【請求項１１】
タスクあるいはスレッドを実行するプロセッサ部を複数備え、周辺ハードウェアと接続されたプロセッサを含む並列処理装置における情報処理方法であって、
タスクあるいはスレッドを実行している前記プロセッサ部それぞれから、実行中のタスクあるいはスレッドの実行内容に応じて周辺ハードウェアに処理依頼を行うことを特徴とする情報処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のタスクあるいはスレッドを並列的に処理するプロセッサを含む並列処理装置およびその情報処理方法に関する。
【背景技術】
【０００２】
近年、組み込み機器等において、複数のタスクあるいはスレッドを並列的に処理可能なマルチタスクプロセッサあるいはマルチスレッドプロセッサと呼ばれるプロセッサ（以下、これらを総称して「マルチプロセッサ」と言う。）が利用されつつある。
従来の携帯機器では、シングルプロセッサによる処理が行われていたところ、携帯機器の高機能化に伴い処理が複雑化し、シングルプロセッサによる処理が困難となっている。
【０００３】
即ち、シングルプロセッサによって高機能を実現しようとした場合、高いクロック周波数で動作させる必要があり、それに伴い消費電力も増大する。また、例えば携帯電話において動画の再生中に電話の着信があった場合の処理等、リアルタイムに応答する必要がある場合の対応が困難となる。
一方、マルチプロセッサを利用することにより、装置を低クロック化することが可能となり、それにより低消費電力化を実現することができる。さらに、複数のタスク等を並列に処理できることから、リアルタイムな応答性の観点からも有効なものとなる。
【０００４】
ところで、装置における処理をより高速化する等の目的で、コプロセッサあるいは各種周辺装置といった周辺ハードウェアがプロセッサに備えられることがある。
このような場合、プロセッサにおいて実行されているアプリケーションのタスク等が、所定の周辺ハードウェアに処理を行わせる命令を発行することにより、必要な周辺ハードウェアが利用される。
【０００５】
プロセッサが周辺ハードウェアを利用して処理を行う技術は、例えば、特開平８−２４１２１５号公報あるいは特開２００２−５５８１３号公報に記載されている。
【特許文献１】特開平８−２４１２１５号公報
【特許文献２】特開２００２−５５８１３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかしながら、マルチプロセッサが周辺ハードウェアを利用する場合、タスク等のソフトウェアを実行する複数のプロセッサ部と、プロセッサ部を補助する周辺ハードウェアとを効率的に協調動作させるためには、シングルプロセッサの場合と同様の方法を採用することができない。
ここで、特許文献１に記載された技術は、マルチプロセッサにおいて周辺ハードウェアに対する同期制御を行う技術であり、マルチプロセッサと周辺ハードウェアの協調を図るものである。
【０００７】
しかし、本文献に記載された技術は、特定のプロセッサ部に対し、制御する周辺ハードウェアが固定的に割り当てられた構成を有するため、その周辺ハードウェアに処理が集中する場合には、処理を分散させることができず、効率的に協調動作させることが困難となる。
また、特許文献２に記載された技術は、コプロセッサを備えるプロセッサにおいて、コプロセッサを操作する所定命令を用意することにより、コプロセッサと協調して高速に処理を行う技術である。
【０００８】
しかし、ここで用いられているプロセッサはマルチプロセッサではないため、一部の処理をコプロセッサによって行ったとしても、プログラム全体を並列動作させることができず、マルチプロセッサと周辺ハードウェアとを協調動作させる場合に適用することはできなかった。
このように、特許文献１および特許文献２に記載された技術を含め、従来の技術においては、マルチプロセッサと周辺ハードウェアとを効率的に協調動作させることが困難であった。
【０００９】
本発明の課題は、マルチプロセッサと、それに接続された周辺ハードウェアとを効率的に協調動作させることである。
【課題を解決するための手段】
【００１０】
以上の課題を解決するため、本発明は、
タスクあるいはスレッドを実行するプロセッサ部（例えば、図２の単位プロセッサＰ０〜Ｐ３）を複数備え、周辺ハードウェア（例えば、図１の周辺装置４０ａ〜４０ｄおよびコプロセッサ１３０ａ，１３０ｂ）と接続されたプロセッサ（例えば、図１のＣＰＵ１０）を含む並列処理装置であって、タスクあるいはスレッドを実行している前記プロセッサ部それぞれが、実行中のタスクあるいはスレッドの実行内容に応じて周辺ハードウェアに処理依頼を行うことを特徴としている。
【００１１】
このような構成により、周辺ハードウェアに対し、任意のプロセッサ部から処理を依頼できることとなるため、周辺ハードウェアに処理依頼を行う際の処理効率を向上させることができる。
したがって、プロセッサ部を複数備えるプロセッサと、それに接続された周辺ハードウェアとを効率的に協調動作させることが可能となる。
また、前記周辺ハードウェアは、処理対象となるデータを格納するデータレジスタと、処理内容を示すコマンドを格納するコマンドレジスタとを備え、前記周辺ハードウェアに処理を行わせる前記プロセッサ部が、前記データレジスタに処理対象となるデータを書き込むと共に、前記コマンドレジスタにコマンドを書き込むことによって、前記処理依頼を行うことを特徴としている。
【００１２】
このような構成により、プロセッサ部がデータレジスタおよびコマンドレジスタに所定のデータを書き込むことで、処理の依頼を行うことが可能となる。
なお、データレジスタおよびコマンドレジスタは、レジスタによって実現する場合に加え、種々の記憶素子によって実現することが可能である。
また、命令セットにおいて、前記処理依頼を行う命令を発行させる所定命令が予め用意され、前記プロセッサ部は、該所定命令を実行することにより、前記周辺ハードウェアに対して前記処理依頼を行う命令を発行することを特徴としている。
【００１３】
このような構成により、プロセッサ内のＡＬＵ等に処理を行わせる場合と同様の命令によって周辺ハードウェアに対する命令を行えるため、冗長性の低い命令とすることができる。
また、前記周辺ハードウェアには、メモリ領域の所定アドレス（例えば、ＯＳのシステム領域の一部等）が割り当てられ、前記プロセッサ部は、前記周辺ハードウェアに割り当てられたメモリ領域へのストア命令を実行することにより、前記処理依頼を行うことを特徴としている。
【００１４】
このような構成により、プロセッサの命令セットに特別の命令を用意することなく、メモリに対する汎用のストア命令で処理の依頼を行うことが可能となる。
また、前記処理依頼を受けた前記周辺ハードウェアは、依頼された処理が終了した場合に、処理依頼を行った前記プロセッサ部に対する割り込み信号を出力し、前記処理依頼を行った前記プロセッサ部は、該割り込み信号によって、依頼した処理の結果を取得することを特徴としている。
【００１５】
このような構成により、処理の依頼を行ったプロセッサ部は、処理の依頼後、周辺ハードウェアから割り込み信号の入力を待つのみで、処理結果を取得することができる。
また、前記処理依頼を行った前記プロセッサ部は、依頼先である前記周辺ハードウェアに対し、ポーリングを行うことにより、依頼した処理の結果を取得することを特徴としている。
【００１６】
このような構成により、処理の依頼を行ったプロセッサ部は、周辺ハードウェアによる処理の終了後、直ちに処理結果を取得することが可能となる。
また、前記複数のプロセッサ部におけるいずれかのプロセッサ部に対し、タスクあるいはスレッドの優先度の決定を排他的に行うための排他制御権を与える排他制御処理部（例えば、図２の排他制御処理部１３）と、発生しているタスクあるいはスレッドの実行状態を管理するタスク状態管理部（例えば、図２のタスク状態制御部１５）とを備え、前記処理依頼を行ったタスクあるいはスレッドが、前記排他制御権を取得することにより自タスクの優先度を変更し、前記タスク状態管理部によって管理されている実行状態に応じて、タスクあるいはスレッドの切り替えを行うことを特徴としている。
【００１７】
このような構成により、周辺ハードウェアに処理の依頼を行った後、次のディスパッチタイミングで、依頼後のタスクの状態（優先度）に応じたタスクの再割り当てが行われ、複数のプロセッサ部において効率的な処理を行うことが可能となる。
また、前記処理依頼を行ったタスクあるいはスレッドは、前記排他制御権を取得した後、自タスクあるいはスレッドの優先度を下げることを特徴としている。
【００１８】
このような構成により、周辺ハードウェアに処理の依頼を行い、処理結果を待つ状態のタスクについて優先度が低下されるため、周辺ハードウェアによる処理中に、より優先度の高いタスクを先行して実行することが可能となる。
また、前記周辺ハードウェアは、所定処理を実行する周辺装置であることを特徴としている。
【００１９】
このような構成により、複数のプロセッサ部それぞれから周辺装置に対して処理の依頼を行うことが可能となる。
また、前記周辺ハードウェアは、特定の処理を担うことによりプロセッサを補助するコプロセッサであることを特徴としている。
このような構成により、複数のプロセッサ部それぞれからコプロセッサに対して処理の依頼を行うことが可能となる。
【００２０】
また、本発明は、
タスクあるいはスレッドを実行するプロセッサ部を複数備え、周辺ハードウェアと接続されたプロセッサを含む並列処理装置における情報処理方法であって、タスクあるいはスレッドを実行している前記プロセッサ部それぞれから、実行中のタスクあるいはスレッドの実行内容に応じて周辺ハードウェアに処理依頼を行うことを特徴としている。
【００２１】
このように、本発明によれば、マルチプロセッサと、それに接続された周辺ハードウェアとを効率的に協調動作させることが可能となる。
【発明を実施するための最良の形態】
【００２２】
以下、図を参照して本発明に係る並列処理装置の実施の形態を説明する。
本発明に係る並列処理装置は、タスクあるいはスレッド等、プログラムをその実行単位で並列的に処理するプロセッサを含むものであり、そのプロセッサ内に、タスク等を実行するプロセッサ（以下、「単位プロセッサ」と言う。）が実質的に複数備えられたハードウェア構成を有している。
【００２３】
また、本発明にかかる並列処理装置において、プロセッサは、コプロセッサあるいは各種処理を行う周辺装置等、周辺ハードウェアと接続されており、タスク等を実行するいずれの単位プロセッサからも、任意の周辺ハードウェアに処理を行わせることを可能としている。
したがって、本発明に係る並列処理装置によれば、マルチプロセッサと周辺ハードウェアとを効率的に協調動作させることができる。
【００２４】
さらに、周辺ハードウェアに処理を行わせたタスク等は、処理結果を得るまでの待機中に自タスク等の優先度を低下させると共に、処理対象となるタスク等の状態を制御するタスク状態制御部により、各単位プロセッサに適切にタスク等を割り当てる。
したがって、周辺ハードウェアにおいて処理を実行している間も、プロセッサを効率的に動作させることが可能である。
【００２５】
まず、構成を説明する。
ここでは、本発明に係る並列処理装置を携帯電話として実現した場合を例に挙げて説明する。なお、以下の説明において、スレッド等、プログラムの実行単位を総称して「タスク」と言う。
図１は、本発明に係る携帯電話１の機能構成を示すブロック図である。
【００２６】
図１において、携帯電話１は、ＣＰＵ（Central Processing Unit）１０と、フラッシュＲＯＭ２０と、メモリ３０と、周辺装置４０ａ〜４０ｄと、無線部５０と、ＩｒＤＡ（Infrared Data Association）部６０と、オーディオ（Audio）部７０と、タイマ（Timer）８０と、ＵＳＢ（Universal Serial Bus）インターフェース部９０と、キー（KEY）操作部１００と、ＬＣＤ（Liquid Crystal Display）１１０と、カメラ（Camera）部１２０と、コプロセッサ１３０ａ，１３０ｂとを含んで構成され、ＣＰＵ１０、フラッシュＲＯＭ２０、メモリ３０および周辺装置４０ａ〜４０ｄは、バスによって接続されている。また、無線部５０、ＩｒＤＡ部６０、オーディオ部７０、タイマ８０、ＵＳＢインターフェース部９０、キー操作部１００、ＬＣＤ１１０、カメラ部１２０およびコプロセッサ１３０ａ，１３０ｂは、ＣＰＵ１０と直接接続されている。
【００２７】
ＣＰＵ１０は、複数のタスクを並列的に処理しつつ携帯電話１全体を制御するもので、キー操作部１００から入力される各種の指示信号に応じて、フラッシュＲＯＭ２０に記憶されたオペレーティングシステムプログラム（ＯＳ）や各種アプリケーションプログラムを読み出して実行したり、無線部５０、オーディオ部７０あるいはカメラ部１２０等の周辺チップから入力される割り込み信号に応じて、割り込みハンドラを実行したりする。
【００２８】
また、ＣＰＵ１０は、効率的な処理を行うため、所定処理を周辺装置４０ａ〜４０ｄあるいはコプロセッサ１３０ａ，１３０ｂ（以下、これらを総称して「周辺ハードウェア」と言う。）に実行させる。そして、ＣＰＵ１０は、周辺装置４０ａ〜４０ｄに実行させた処理結果を周辺装置４０ａ〜４０ｄからの割り込み信号によって取得し、コプロセッサ１３０ａ，１３０ｂに実行させた処理結果をポーリングによって取得する。
【００２９】
割り込み信号によって処理結果を取得することで、ＣＰＵ１０（処理の依頼を行ったタスク）は、周辺装置４０ａ〜４０ｄからの割り込み信号の入力を待つのみで、処理結果を取得することが可能となる。
一方、ポーリングによって処理結果を取得することで、ＣＰＵ１０（処理の依頼を行ったタスク）は、コプロセッサ１３０ａ，１３０ｂにおいて処理が終了した後、直ちに処理結果を取得することが可能となる。
【００３０】
なお、周辺ハードウェアから処理結果を取得する方法としては、周辺装置４０ａ〜４０ｄおよびコプロセッサ１３０ａ，１３０ｂそれぞれについて、割り込みによる方法およびポーリングによる方法のいずれを用いることとしても良い。
さらに、ＣＰＵ１０は、各単位プロセッサにおいて実行されている各タスクがＯＳのサービスコールを呼び出し、タスクの状態制御といったＯＳの処理に移行する場合に、セマフォを取得させることにより、これらの単位プロセッサ間における排他制御を行う。
【００３１】
また、ＣＰＵ１０は、各種処理結果をフラッシュＲＯＭ２０あるいはメモリ３０に格納する。
ここで、ＣＰＵ１０の内部構成について説明する。
図２は、ＣＰＵ１０の内部構成を示すブロック図である。
図２において、ＣＰＵ１０は、複数の単位プロセッサＰ０〜Ｐ３と、外部割り込み制御部１１と、メモリ制御部１２と、排他制御処理部１３と、全体プログラム制御部１４と、タスク状態制御部１５とを含んで構成される。
【００３２】
単位プロセッサＰ０〜Ｐ３は、それぞれが並列してタスクを処理可能なプロセッサである。
なお、単位プロセッサＰ０〜Ｐ３の内部構成としては同様のものとなるため、代表として、単位プロセッサＰ０の内部構成について説明する。
単位プロセッサＰ０は、ハードウェアセマフォの取得結果を含む単位プロセッサＰ０の各種ステータス（割り込みの可否状態、動作の有無、単位プロセッサＰ０におけるオーバーフローの発生状態等）を記憶するステータスレジスタ（ＰＳＲ）１０１と、単位プロセッサＰ０が次に実行するべき命令が格納されたメモリアドレスを記憶するプログラムカウンタ（ＰＣ）１０２と、割り込み処理の実行時に、プログラムカウンタ１０２の値を退避しておく割り込み処理用プログラムカウンタ（ＥＰＣ）１０３と、割り込み処理の実行時に、ステータスレジスタ１０１の値を退避しておく割り込み処理用ステータスレジスタ（ＥＰＳＲ）１０４とを含んで構成される。そして、ステータスレジスタ１０１は、単位プロセッサＰ０が割り込み処理を実行している間、記憶している値を割り込み処理の禁止を示す値に変更されたり、プログラムカウンタ１０２は、分岐命令が実行された場合に、記憶している値を分岐先のアドレスに変更されたりする。
【００３３】
なお、ここでは図示しないが、単位プロセッサＰ０は、一般にプロセッサコアに備えられるフェッチ部、デコード部、ＡＬＵ（Arithmetic and Logical Unit）、レジスタファイルおよびプログラム制御部等を備えている。
外部割り込み制御部１１は、無線部５０や周辺装置４０ａ〜４０ｄ等から割り込み信号が入力された場合に、いずれから割り込み信号が入力されたかを全体プログラム制御部１４に出力する。
【００３４】
また、外部割り込み制御部１１には、割り込みの許可設定、その解除、割り込み信号間の優先順位等を示す信号や、外部割込み制御部１１を操作するための信号が全体プログラム制御部１４から入力される。そして、外部割込み制御部１１は、全体プログラム制御部１４によって割り込みが許可されている場合、割り込み信号間に設定されている優先順位に従って、周辺装置４０ａ〜４０ｄによって入力された所定の割り込み信号を全体プログラム制御部１４に出力する。
【００３５】
メモリ制御部１２は、ＣＰＵ１０とメモリ３０との間に備えられ、ＣＰＵ１０からメモリ３０に対するデータの読み出しおよび書き込みが行われる場合に、メモリ３０を制御してデータの入出力を行う。
また、メモリ制御部１２は、ＣＰＵ１２からコプロセッサ１３０ａ，１３０ｂに対するデータの読み出しおよび書き込みを行うためのインターフェースであるコプロセッサ制御部１２ａを備えている。ＣＰＵ１２がコプロセッサ１３０ａ，１３０ｂに処理を行わせる場合、単位プロセッサＰ０〜Ｐ３が実行するタスクから、コプロセッサ１３０ａ，１３０ｂに処理を依頼するための命令が発行される。すると、この命令を受けて、コプロセッサ制御部１２ａが、コプロセッサ１３０ａ，１３０ｂのデータレジスタに処理対象となるデータを書き込み、コマンドレジスタに命令内容を書き込むことによって、コプロセッサ１３０ａ，１３０ｂにおける処理が可能な状態となる。
【００３６】
排他制御処理部１３は、ＯＳのタスク状態制御権限を唯一の単位プロセッサ（タスク）に与えるためのセマフォカウンタを内部に備えており、単位プロセッサＰ０〜Ｐ３において実行されているタスクからセマフォの取得要求（排他制御要求）が入力された場合、セマフォカウンタの値を参照し、セマフォカウンタの値が“０”（排他制御要求を受け入れる状態）であれば、セマフォカウンタの値をインクリメントして、排他制御を許可する応答信号を返す。また、排他制御処理部１３は、セマフォカウンタの値が“１”（排他制御要求を受け入れない状態）であれば、排他制御を拒絶する応答信号を返す。なお、排他制御処理部１３は、排他制御が許可され、タスク状態制御権限を有していた単位プロセッサ（タスク）が排他制御を終了することにより、セマフォの解放を示す信号を出力した場合、セマフォカウンタの値をデクリメントし、排他制御を受け入れる状態となる。
【００３７】
全体プログラム制御部１４は、ＣＰＵ１０全体を制御するもので、割り込みベクタ１４ａと、全体制御部１４ｂと、全体ステータスレジスタ（ＧＰＳＲ）１４ｃとを含んで構成される。
割り込みベクタ１４ａは、割り込みハンドラの一覧が格納されたテーブルのメモリアドレスを記憶している。割り込み処理が実行される場合、まず、処理を行う単位プロセッサは、割り込みベクタ１４ａに記憶されたメモリ３０上のアドレスを参照し、テーブルに示されている、割り込みの種類に応じた割り込みハンドラの格納先へジャンプする。そして、単位プロセッサが割り込みハンドラを起動することにより、割り込み処理が行われる。
【００３８】
全体制御部１４ｂは、後述するタスク状態制御部１５によってディスパッチを指示する信号が入力された場合に、単位プロセッサＰ０〜Ｐ３に動作の開始および停止を指示するための制御信号を出力する。
全体ステータスレジスタ１４ｃは、ＣＰＵ１０全体における各種ステータス（割り込みの可否等）を記憶するものであり、各単位プロセッサＰ０〜Ｐ３のステータスを示す信号が入力され、それらのステータスに応じたＣＰＵ１０全体のステータスを設定して記憶する。また、全体ステータスレジスタ１４ｃは、ＣＰＵ１０全体における状態（単位プロセッサＰ０〜Ｐ３に空きがあるか否か等）を示す信号をタスク状態制御部１５に出力する。
【００３９】
タスク状態制御部１５は、ＣＰＵ１０において発生している全タスクの状態を管理するものであり、単位プロセッサＰ０〜Ｐ３で処理されている状態（ＲＵＮ状態）のタスクをカウントするＲＵＮタスクカウンタを内部に備えている。ＣＰＵ１０において、単位プロセッサは４つ備えられていることから、同時にＲＵＮ状態とし得るタスクは４つまでであり、ＲＵＮ状態のタスクが３つ以下であれば、新たに実行が指示されたタスクを直ちにＲＵＮ状態とすることができ、ＲＵＮ状態のタスクが４つであるときには、新たに実行が指示されたタスクは実行待ちのＲＥＡＤＹ状態となる。ＲＥＡＤＹ状態とされたタスクはタスク状態制御部１５が管理するＲＥＡＤＹキューに格納されている。
【００４０】
なお、このタスク状態制御部１５は、メモリ３０に展開されたソフトウェアによって実現することや、ＣＰＵ１０内に形成された回路によって実現することが可能である。
図１に戻り、フラッシュＲＯＭ２０は、携帯電話１において実行されるオペレーティングシステムプログラム、および、各種アプリケーションプログラムを記憶している。
メモリ３０は、ＤＲＡＭ（Dynamic Random Access Memory）、ＳＲＡＭ（Static Ran dom Access Memory）あるいはＳＤＲＡＭ（Synchronous DRAM）といった半導体メモリによって構成され、オペレーティングシステムによって使用されるシステム領域およびＣＰＵ１０が各種処理を実行する際のワークエリアを形成すると共に、その処理結果を記憶する。
【００４１】
周辺装置４０ａ〜４０ｄは、ＣＰＵ１０からの依頼を受けて、それぞれ所定処理を行うために備えられた各種処理装置である。周辺装置４０ａ〜４０ｄは、ＣＰＵ１０によって依頼される処理の処理対象データが書き込まれるデータレジスタと、依頼される命令内容が書き込まれるコマンドレジスタと、周辺装置４０ａ〜４０ｄそれぞれのステータス（例えば動作中あるいは動作完了等を示すステータス）を記憶するステータスレジスタとを備えている。
【００４２】
そして、ＣＰＵ１０によってデータレジスタに処理対象データが書き込まれ、コマンドレジスタに命令内容が書き込まれると、周辺装置４０ａ〜４０ｄは、ＣＰＵ１０によって依頼された処理を実行する。また、周辺装置４０ａ〜４０ｄは、ＣＰＵ１０から依頼された処理の開始時あるいは終了時等に、ステータスレジスタの値を処理の実行状態に応じて書き換える。
【００４３】
周辺装置４０ａ〜４０ｄの形態としては、例えば、動画像の符号化処理において実行されるＤＣＴ（Discrete Cosine Transform）変換の専用回路、動きベクトル検出の専用回路等とすることができる。
なお、周辺装置４０ａ〜４０ｄの具体的形態は、ＣＰＵ１０が備えられる装置の仕様に合わせて種々変更することができ、例えば、動画像の符号化における各処理ステップを実行する専用回路のように、処理手順において区分された各ステップの処理を実行する回路としたり、動画像の符号化における１ブロックをシーケンシャルに処理する専用回路のように、区分された各処理対象データを処理する回路とすることが可能である。
【００４４】
無線部５０は、携帯電話１と携帯電話システムの基地局との間における無線通信を行うものである。例えば、無線部５０は、基地局から携帯電話１に対する着信を示す信号を受信した場合、ＣＰＵ１０に対して割り込み信号を出力し、着信信号の受信を通知する。また、無線部５０は、ＣＰＵ１０から発信を指示する信号が入力された場合、基地局に対して発信要求を示す信号を送信する。
【００４５】
ＩｒＤＡ部６０は、ＩｒＤＡに基づく通信を行うインターフェースであり、外部からＩｒＤＡに基づく無線信号を受信した場合、ＣＰＵ１０に対して割り込み信号を出力し、ＩｒＤＡ信号の受信を通知する。
オーディオ部７０は、携帯電話１において入出力される音声信号を処理するものであり、通話におけるマイクおよびスピーカを用いた音声の入出力、あるいは、音楽等の再生といった処理を行う。
【００４６】
タイマ８０は、携帯電話１のクロック信号を基に時間を計測し、例えば１ｍｓ毎等、所定時間毎にＣＰＵ１０に対して割り込み信号を出力する。
ＵＳＢインターフェース部９０は、ＵＳＢによる通信を行うためのインターフェースであり、ＵＳＢケーブルが接続された場合やＵＳＢケーブルから信号を受信した場合等に、ＣＰＵ１０に対して割り込み信号を出力する。
【００４７】
キー操作部１００は、携帯電話１に対する指示入力を行うための各種キーを備えており、これらのキーが押下された場合に、ＣＰＵ１０に対する割り込み信号を出力する。
ＬＣＤ１１０は、ＣＰＵ１０によって入力された文字あるいは画像等の描画命令に従って、所定画面を表示する表示装置である。
カメラ部１２０は、ＣＣＤ（Charge Coupled Devices）あるいはＣＭＯＳ（Complementary Metal Oxide Semiconductor）センサ等の撮像素子を備え、画像を撮影した場合に、ＣＰＵ１０に対して割り込み信号を出力する。
【００４８】
コプロセッサ１３０ａ，１３０ｂは、特定の処理を担うことによりＣＰＵ１０を補助するためのプロセッサであり、ＣＰＵ１０によって依頼される処理の処理対象データが書き込まれるデータレジスタと、依頼される命令内容が書き込まれるコマンドレジスタと、コプロセッサ１３０ａ，１３０ｂそれぞれのステータスを記憶するステータスレジスタとを備えている。ＣＰＵ１０によってデータレジスタに処理対象データが書き込まれ、コマンドレジスタに命令内容が書き込まれると、コプロセッサ１３０ａ，１３０ｂは、ＣＰＵ１０によって依頼された処理を実行する。また、コプロセッサ１３０ａ，１３０ｂは、ＣＰＵ１０から依頼された処理の開始時あるいは終了時等に、ステータスレジスタの値を処理の実行状態に応じて書き換える。
【００４９】
コプロセッサ１３０ａ，１３０ｂの形態としては、周辺装置４０ａ〜４０ｄと同様に、例えば、動画像の符号化処理において実行されるＤＣＴ（Discrete Cosine Transform）変換の専用回路、動きベクトル検出の専用回路等とすることができる。
なお、コプロセッサ１３０ａ，１３０ｂとして周辺ハードウェアを備える場合、コプロセッサ１３０ａ，１３０ｂに命令を発行するために、命令セットにおいて特別に命令を用意しておく必要があるが、ＣＰＵ１０から直接命令を入力することができるため、冗長性が軽減する。一方、周辺装置４０ａ〜４０ｄとして周辺ハードウェアを備える場合、メモリ空間として割り当てられた周辺装置４０ａ〜４０ｄに命令コードをロードすることで処理の依頼を行うことができるため、命令セットにおいて特別な命令を用意する必要がない。ただし、バスを用いて命令の発行を行うため、バストラフィックが増大する可能性がある。
【００５０】
次に、動作を説明する。
以下、携帯電話１におけるＣＰＵ１０の動作として、ＯＳの管理の下、単位プロセッサＰ０がアプリケーションのタスクを実行している際に、周辺ハードウェアに処理を依頼し、周辺ハードウェアにおいて処理が終了した場合に、その結果を受け取ってアプリケーションの処理を継続する状態を想定して説明する。
【００５１】
図３は、単位プロセッサＰ０において実行されているアプリケーションの処理を示すフローチャートである。なお、図３は、ＣＰＵ１０が周辺装置４０ａに処理を依頼し、割り込みによって処理結果が返される場合のフローチャートである。
図３において、アプリケーションが起動されると、最初のタスクが開始され、アプリケーションのプログラムにおける第１番目の実行対象部分が単位プロセッサＰ０において実行される（ステップＳ１）。
【００５２】
この第１番目の実行対象部分は、周辺装置４０ａに処理を依頼する内容を含むものとする。
すると、単位プロセッサＰ０は、周辺装置４０ａのデータレジスタにデータを書き込み、依頼する処理内容のパラメータを設定する（ステップＳ２）。
そして、単位プロセッサＰ０は、周辺装置４０ａに対し、コマンドレジスタにデータを書き込むことにより、依頼した処理を開始させる（ステップＳ３）。
【００５３】
その後、単位プロセッサＰ０は、ＯＳに対し、タスクの切り替え要求を行い、現在実行されているタスク（ステップＳ１において実行が開始されたタスク）の優先度を下げるよう設定する（ステップＳ４）。
なお、この時点で、現在のタスクより優先度の高いタスクが発生すると、タスクの切り替えが起こる可能性があるが、ここでは、現在のタスクが継続して実行されるものとする。また、処理の依頼後、処理結果の取得を優先して行いたい場合等は、現在のタスクの優先度を維持したり、より高く設定したりすることも可能である。
【００５４】
続いて、単位プロセッサＰ０は、アプリケーションのプログラムにおける第２番目の実行対象部分を実行する（ステップＳ５）。
第２番目の実行対象部分の処理が終了すると、単位プロセッサＰ０は、ＯＳに対し、タスクの切り替え要求を行い、現在実行されているタスク（ステップＳ１において実行が開始されたタスク）をｗａｉｔ状態（待機状態）とするよう設定する（ステップＳ６）。
【００５５】
ここで、現在のタスクがｗａｉｔ状態となるのは、周辺装置４０ａに依頼した処理の結果を待つためである。また、ｗａｉｔ状態とされたタスクは、タスクの切り替えにより、単位プロセッサＰ０から退避される。
ステップＳ６の後、周辺装置４０ａから割り込みによって処理結果が返されると、ステップＳ６においてｗａｉｔ状態とされたタスクが、ＯＳによってＲＥＡＤＹ状態（実行待ち状態）に変更される（ステップＳ７）。
【００５６】
そして、他のタスクによってタスクの切り替え要求が行われると、ステップＳ７においてＯＳによってＲＥＡＤＹ状態とされたタスクがＲＵＮ状態に変更される（ステップＳ８）。
すると、このタスクを実行している単位プロセッサにおいて、周辺装置４０ａの処理結果を用いて、アプリケーションのプログラムにおける第３番目の実行対象部分が実行される（ステップＳ９）。
【００５７】
その後、ステップＳ１において実行が開始されたタスクの処理が終了する。
以上は、ＣＰＵ１０が周辺装置４０ａ〜４０ｄに処理を依頼した後、割り込みによって処理結果が返される場合の処理であるが、以下に示すように、ＣＰＵ１０がコプロセッサ１３０ａ，１３０ｂに処理を依頼した場合、タスクを実行している単位プロセッサＰ０がコプロセッサ１３０ａ，１３０ｂをポーリングすることにより、処理結果を取得する。
【００５８】
図４は、単位プロセッサＰ０において実行されているアプリケーションの処理を示すフローチャートであり、ポーリングによって処理結果を取得する場合を示している。なお、図４においては、図３に示す場合と同様に、ＯＳの管理の下、単位プロセッサＰ０がアプリケーションのタスクを実行している際に、周辺ハードウェア（ここではコプロセッサ１３０ａとする。）に処理を依頼し、周辺ハードウェアにおいて処理が終了した場合に、その結果を受け取ってアプリケーションの処理を継続する状態を想定して説明する。
【００５９】
図４において、アプリケーションが起動されると、最初のタスクが開始され、アプリケーションのプログラムにおける第１番目の実行対象部分が単位プロセッサＰ０において実行される（ステップＳ１０１）。
この第１番目の実行対象部分は、コプロセッサ１３０ａに処理を依頼する内容を含むものとする。
【００６０】
すると、単位プロセッサＰ０は、コプロセッサ１３０ａのデータレジスタにデータを書き込み、依頼する処理内容のパラメータを設定する（ステップＳ１０２）。
そして、単位プロセッサＰ０は、コプロセッサ１３０ａに対し、コマンドレジスタにデータを書き込むことにより、依頼した処理を開始させる（ステップＳ１０３）。
その後、単位プロセッサＰ０は、ＯＳに対し、タスクの切り替え要求を行い、現在実行されているタスク（ステップＳ１０１において実行が開始されたタスク）の優先度を下げるよう設定する（ステップＳ１０４）。
【００６１】
なお、この時点で、現在のタスクより優先度の高いタスクが発生すると、タスクの切り替えが起こる可能性があるが、ここでは、現在のタスクが継続して実行されるものとする。また、処理の依頼後、処理結果の取得を優先して行いたい場合等は、現在のタスクの優先度を維持したり、より高く設定したりすることも可能である。
続いて、単位プロセッサＰ０は、アプリケーションのプログラムにおける第２番目の実行対象部分を実行する（ステップＳ１０５）。
【００６２】
第２番目の実行対象部分の処理が終了すると、単位プロセッサＰ０は、コプロセッサ１３０ａのステータスレジスタを読み出し（ステップＳ１０６）、コプロセッサ１３０ａの動作が完了し、依頼した処理が終了しているか否かの判定を行う（ステップＳ１０７）。
ステップＳ１０７において、コプロセッサ１３０ａの動作が完了していないと判定した場合、単位プロセッサＰ０は、ステップＳ１０６の処理に戻り、コプロセッサ１３０ａの動作が完了したと判定した場合、ＯＳに対し、タスクの切り替え要求を行い、現在実行されているタスクの優先度を上げるよう設定する（ステップＳ１０８）。
【００６３】
そして、単位プロセッサＰ０は、コプロセッサ１３０ａの処理結果を用いて、アプリケーションのプログラムにおける第３番目の実行対象部分を実行し（ステップＳ１０９）、その後、ステップＳ１０１において実行が開始されたタスクの処理が終了する。
次に、ＣＰＵ１０においてタスクの切り替え要求が発生した場合のＯＳの処理について説明する。
【００６４】
図５は、タスクの切り替え要求が発生した場合のＯＳの処理を示すフローチャートである。なお、図５に示す処理は、図３および図４に示すフローチャートにおいて共通のものであり、ここでは単位プロセッサＰ１がＯＳを実行しているものとして説明する。また、図５に示すフローチャートは、ＯＳを実行している単位プロセッサＰ１がタスク状態制御部１５と連携することによって実行される。
【００６５】
図５において、タスクの切り替え要求が発生すると、ＯＳを実行している単位プロセッサＰ１は、割り込み要求が発生しているか否かの判定を行い（ステップＳ２０１）、割り込み要求が発生していると判定した場合、割り込み処理の開始手続き（コンテキストの退避、割り込みハンドラの実行等）を実行し（ステップＳ２０２）、続いて割り込み処理を実行する（ステップＳ２０３）。
【００６６】
割り込み処理が終了すると、単位プロセッサＰ１は、割り込み処理の終了手続き（コンテキストの復帰等）を実行し（ステップＳ２０４）、ステップＳ２０１の処理に移行する。
また、ステップＳ２０１において、割り込み要求が発生していないと判定した場合、単位プロセッサＰ１は、排他制御処理部１３に対し、排他制御要求を出力する（ステップＳ２０５）。
【００６７】
そして、単位プロセッサＰ１は、排他制御要求が受け入れられたか否かの判定を行い（ステップＳ２０６）、排他制御要求が受け入れられていないと判定した場合、ステップＳ２０５の処理に移行する。
一方、ステップＳ２０６において、排他制御要求が受け入れられたと判定した場合、単位プロセッサＰ１は、タスク状態制御部１５のＲＥＡＤＹキューの中から実行可能状態（ＲＥＡＤＹ状態）のタスクを検索する（ステップＳ２０７）。
【００６８】
ステップＳ２０７において、単位プロセッサＰ１は、ＲＥＡＤＹ状態のタスクが存在するか否かの判定を行い（ステップＳ２０８）、ＲＥＡＤＹ状態のタスクが存在しないと判定した場合、タスクの切り替えを行う必要がないことから、排他制御処理部１３に通知して排他制御を終了する（ステップＳ２０９）。
一方、ステップＳ２０８において、ＲＥＡＤＹ状態のタスクが存在すると判定した場合、単位プロセッサＰ１は、ＣＰＵ１０の単位プロセッサＰ０〜Ｐ３において、最低の優先度のタスクを実行している単位プロセッサを検索し（ステップＳ２１０）、単位プロセッサＰ０〜Ｐ３においてＲＵＮ状態にあるタスクの最低優先度と、ＲＥＡＤＹキュー内のＲＥＡＤＹ状態にあるタスクの優先度とを比較する（ステップＳ２１１）。
【００６９】
ステップＳ２１１において、単位プロセッサＰ０〜Ｐ３においてＲＵＮ状態にあるタスクの最低優先度が、ＲＥＡＤＹ状態にある全てのタスクの優先度より高いと判定した場合、単位プロセッサＰ１は、ステップＳ２０９の処理に移行する。
一方、ステップＳ２１１において、単位プロセッサＰ０〜Ｐ３においてＲＵＮ状態にあるタスクの最低優先度が、ＲＥＡＤＹ状態にあるいずれかのタスクの優先度より低いと判定した場合、単位プロセッサＰ１は、ＲＵＮ状態にある最低優先度のタスクを実行している単位プロセッサのコンテキストを退避し（ステップＳ２１２）、ＲＵＮ状態にある最低優先度のタスクより優先度の高いＲＥＡＤＹ状態のタスクのコンテキストを単位プロセッサに復帰させて（ステップＳ２１３）、ステップＳ２０９の処理に移行する。
【００７０】
ステップＳ２０９の後、単位プロセッサＰ１は、単位プロセッサＰ０〜Ｐ３においてタスクの実行を開始させ（ステップＳ２１４）、タスクの切り替え処理を終了する。
以上のように、本実施の形態に係る携帯電話１においては、ＣＰＵ１０の単位プロセッサＰ０〜Ｐ３それぞれから、周辺装置４０ａ〜４０ｄおよびコプロセッサ１３０ａ，１３０ｂといった周辺ハードウェアに処理を依頼することができる。
【００７１】
したがって、周辺ハードウェアに処理を依頼するタスクをいずれの単位プロセッサＰ０〜Ｐ３においても実行することが可能となり、マルチプロセッサであるＣＰＵ１０と周辺ハードウェアとを効率的に協調動作させることが可能となる。
また、周辺ハードウェアに処理の依頼を行ったタスクは、排他制御処理部１３に排他制御要求を出力し、排他制御権を取得した上で、自タスクの優先度を変更する。そして、次のディスパッチが発生した場合に、タスク状態制御部１５が管理する全てのタスクにおいて、より優先度の高いタスクが単位プロセッサＰ０〜Ｐ３に割り当てられる。
【００７２】
したがって、周辺ハードウェアに処理を依頼したタスクが処理結果を取得するまでの待機中に、自タスクをより適切な優先度に設定でき、ＣＰＵ１０において発生しているタスク全体をより効率的に処理することが可能となる。
また、本実施の形態においては、本発明の適用対象として携帯電話を例に挙げて説明したが、各種周辺装置あるいはコプロセッサを備えた装置に適用することが可能である。
【００７３】
図６は、本発明の適用対象の一例を示す図であり、ＤＣＴ処理回路、ジグザグスキャンのためのＤＭＡ（Direct Memory Access）コントローラ、量子化・逆量子化（Ｑ／ＩＱ）回路、メモリを備える５つの周辺装置と、可変長符号化・復号化（ＶＬＤ／ＶＬＣ）回路、ビットシフト回路、メモリを備える１つのコプロセッサとがマルチプロセッサに接続された、画像処理装置を示している。
【００７４】
この画像処理装置では、画像のフレームメモリに記憶されたフレームデータが８画素×８画素のブロックで処理され、アプリケーションの１つの形態として、５つの周辺装置それぞれにブロック（フレームの１列分）を並列して処理させ、１つのコプロセッサが、５つの周辺装置の処理結果をまとめて処理することが可能である。この場合、５つの周辺装置に処理を依頼している５つのタスク、コプロセッサに処理を依頼しているタスク、および、フレームデータ全体の処理を管理するタスクの合計７つのタスクが並列処理されていることとなる。
【００７５】
また、アプリケーションの他の形態として、ブロック毎に一貫した処理を行うタスクを全ブロック分発生させ、ＯＳが全タスクを管理しつつ、各タスクが、いずれかの周辺装置による処理とコプロセッサによる処理とをブロックに施すことが可能である。この場合、全ブロック数分のタスクが並列処理されていることとなる。
なお、本発明は、マルチスレッドプロセッサあるいはマルチタスクプロセッサと呼ばれる各種実装形態のプロセッサに適用可能であるが、例えば、１チップ上に複数のプロセッサコアが実装され、プロセッサの構成要素の少なくとも一部をこれら複数のプロセッサコアが共用する形態のマルチプロセッサ（いわゆる密結合型のマルチタスクプロセッサ）において、特に有効となる。
【００７６】
図７は、本発明の適用対象となるマルチプロセッサの構成例を示す図である。
図７に示すマルチプロセッサは、メモリ制御部およびＡＬＵを複数のプロセッサコアが共用する形態であり、それぞれのプロセッサコアにプログラムカウンタおよびステータスレジスタ等の制御用レジスタが備えられていると共に、マルチプロセッサ全体を制御するためのプログラム制御部および制御用レジスタも別途備えられている。なお、図４に示すように、各プロセッサコアで共用するコンテキストキャッシュ等を備えても良い。
【００７７】
このような構成のマルチプロセッサの場合、各プロセッサコアが本実施の形態における単位プロセッサの機能を実現するものとなり、マルチプロセッサ全体を制御するプログラム制御部において、排他制御処理部１３の機能を実現するものとなる。
【図面の簡単な説明】
【００７８】
【図１】本発明に係る携帯電話１の機能構成を示すブロック図である。
【図２】ＣＰＵ１０の内部構成を示すブロック図である。
【図３】単位プロセッサＰ０において実行されているアプリケーションの処理を示すフローチャート（割り込みによって処理結果が返される場合）である。
【図４】単位プロセッサＰ０において実行されているアプリケーションの処理を示すフローチャート（ポーリングによって処理結果を取得する場合）である。
【図５】タスクの切り替え要求が発生した場合のＯＳの処理を示すフローチャートである。
【図６】本発明の適用対象の一例である画像処理装置を示す図である。
【図７】本発明の適用対象となるマルチプロセッサの構成例を示す図である。
【符号の説明】
【００７９】
１  携帯電話、１０  ＣＰＵ、１１  外部割り込み制御部、１２  メモリ制御部、１２ａ、コプロセッサ制御部、１３  排他制御処理部、１４  全体プログラム制御部、１４ａ  割り込みベクタ、１４ｂ  全体制御部、１４ｃ  全体ステータスレジスタ、１５  タスク状態制御部、２０  フラッシュＲＯＭ、３０  メモリ、４０ａ〜４０ｄ  周辺装置、５０  無線部、６０  ＩｒＤＡ部、７０  オーディオ、８０  タイマ、９０  ＵＳＢインターフェース部、１００  キー操作部、１１０  ＬＣＤ、１２０  カメラ部、１３０ａ，１３０ｂ  コプロセッサ、Ｐ０〜Ｐ３  単位プロセッサ、１０１〜４０１  ステータスレジスタ、１０２〜４０２  プログラムカウンタ、１０３〜４０３  割り込み処理用プログラムカウンタ、１０４〜４０４  割り込み処理用ステータスレジスタ
【図１】
2006260377.tif 000003
【図２】
2006260377.tif 000004
【図３】
2006260377.tif 000005
【図４】
2006260377.tif 000006
【図５】
2006260377.tif 000007
【図６】
2006260377.tif 000008
【図７】
2006260377.tif 000009