(57)【特許請求の範囲】
【請求項１】
複数のタスクを並列に実行する複数の単位プロセッサを含み、当該複数の単位プロセッサのうちの少なくとも１つが外部から外部割り込み処理を要求された場合、一のタスクと他のタスク及び外部割り込み処理との間の排他制御を実現する並列処理装置であって、
タスクを実行している単位プロセッサにおいて、当該タスクの実行が中断されることを禁止する割り込み禁止手段と、
前記割り込み禁止手段により単位プロセッサ割り込み禁止状態になった後、単位プロセッサ間ロックを獲得することで、当該単位プロセッサと他の単位プロセッサとの間の排他制御を行うための排他制御手段と、
前記排他制御手段により他の単位プロセッサとの間で排他制御した後、外部から要求された割り込み処理の実行を禁止する外部割込禁止手段と、
を備えることを特徴とする並列処理装置。
【請求項２】
前記並列処理装置における割り込み処理の実行の有無を検出する割込検出手段をさらに備え、
前記排他制御手段は、前記割込検出手段によって前記並列処理装置において割り込み処理が実行されていないことが検出された後に排他制御を開始することを特徴とする請求項１に記載の並列処理装置。
【請求項３】
前記排他制御手段は、ＯＳを占有してタスクの処理を実行する権利を得ることによって他の単位プロセッサを排他制御することを特徴とする請求項１または２に記載の並列処理装置。
【請求項４】
複数のタスクを並列に実行する複数の単位プロセッサを含み、当該複数の単位プロセッサのうちの少なくとも１つが外部から外部割り込み処理を要求された場合、一のタスクと他のタスク及び外部割り込み処理との間の排他制御を実現する排他制御手段と、前記割り込み処理を禁止する外部割込禁止手段と、を備えた並列処理装置において実行される排他制御方法であって、
タスクを実行している前記単位プロセッサが、当該タスクの実行が中断されることを禁止する割り込み禁止ステップと、
前記割り込み禁止ステップにより前記単位プロセッサ割り込み禁止状態になった後、割り込み禁止になった前記単位プロセッサが単位プロセッサ間ロックを獲得したことにより、前記排他制御手段が当該単位プロセッサと他の単位プロセッサとの間の排他制御を実行する排他制御ステップと、
前記排他制御ステップによる前記単位プロセッサと他の単位プロセッサとの間の排他制御実行後、外部から要求された割り込み処理の実行を前記外部割込禁止手段が禁止する外部割込禁止ステップと、
を含むことを特徴とする排他制御方法。
【請求項５】
さらに、前記単位プロセッサは、外部から要求された割り込み処理の実行完了を待って前記割り込み禁止ステップを実行することを特徴とする請求項４に記載の排他制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサにかかり、特に単位プロセッサを複数含んでタスク等を並列に実行可能であり、さらに割り込み要求を受け付けて処理するプロセッサ及びこのプロセッサの割り込み制御方法に関する。
【背景技術】
【０００２】
近年、組込み機器等において、複数のタスクを並列的に処理可能なマルチタスクプロセッサと呼ばれるプロセッサ（以下、これらを総称して「マルチプロセッサ」と言う。）が利用されつつある。
従来の携帯機器では、シングルプロセッサによる処理が行われていたところ、携帯機器の高機能化に伴い処理が複雑化し、シングルプロセッサによる処理が困難となっている。
【０００３】
即ち、シングルプロセッサによって高機能を実現しようとした場合、高いクロック周波数で動作させる必要があり、それに伴い消費電力も増大する。また、例えば携帯電話において動画の再生中に電話の着信があった場合の処理等、リアルタイムに応答する必要がある場合の対応が困難となる。
一方、マルチプロセッサを利用することにより、装置を低クロック化することが可能となり、それにより低消費電力化を実現することができる。さらに、複数のタスク等を並列に処理できることから、リアルタイムな応答性の観点からも有効なものとなる。
【０００４】
ところで、このような組込み機器のプロセッサでは、組込み機器に接続される周辺装置から比較的頻繁に割り込み処理の要求がなされるものがある。割り込み要求がなされた場合、プロセッサによって実行されていたタスク処理を中断し、要求された処理を実行する割り込み処理がなされる。割り込み処理においては、割り込み処理とタスク処理との切替えを円滑に行うため、タスク処理と割り込み処理との間で排他制御を行っている。
【０００５】
従来のタスク処理と割り込み処理との間で行われる排他制御の従来技術としては、例えば、特許文献１が挙げられる。特許文献１に記載された発明は、シングルプロセッサにおける排他制御に関するものであり、シングルプロセッサにおいてＯＳを呼び出すシステムコールが発行される処理の間にもシステムコールを発行しない割り込み処理を受け付ける。特許文献１の発明は、このような動作により、緊急性の高い割り込み処理が待たされることを少なくしている。
【特許文献１】特開平８−２９７５８１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかしながら、上記した従来技術は、シングルプロセッサに関するものであって、マルチプロセッサに関してなされたものではない。このような特許文献１の発明をマルチプロセッサに適用すると、マルチプロセッサに含まれる単位プロセッサが、他の単位プロセッサにおける割り込み処理と外部メモリの同じ領域にアクセスする可能性を排除することはできない。
【０００７】
また、特許文献１に記載された発明は、シングルプロセッサを想定しているため、割り込み処理中はタスク処理をすることはできない。このため、割り込み処理中のタスク処理を制御して処理効率を上げることは一切考えられていない。
さらに、特許文献１に記載された発明は、割り込み処理がサービスコールを発行するものか否かを示す情報を被管理割り込み格納手段に保存しておく必要がある。このような特許文献１では、プロセッサに周辺装置を新たに接続する場合、この周辺装置が要求する割り込み処理がサービスコールを伴うものか否かを示す情報を格納する必要が生じる。このため、周辺装置の増設が困難になるという不具合が発生する。
【０００８】
本発明は、上記した点に鑑みてなされたものであり、マルチプロセッサにあってもタスク処理と割り込み処理とを適切に排他制御して高い処理効率を得ることが可能な並列処理装置及び割り込み処理の排他制御方法を提供することを目的とする。
【課題を解決するための手段】
【０００９】
以上の課題を解決するため、本発明の並列処理装置は、複数のタスクを並列に実行する複数の単位プロセッサを含み、当該複数の単位プロセッサのうちの少なくとも１つが外部から割り込み処理を要求された場合、一のタスクと他のタスク及び外部割り込み処理との間の排他制御を実現する並列処理装置であって、タスクを実行している単位プロセッサにおいて、当該タスクの実行が中断されることを禁止する割り込み禁止手段と、前記割り込み禁止手段により単位プロセッサ割り込み禁止状態になった後、単位プロセッサ間ロックを獲得することで、当該単位プロセッサと他の単位プロセッサとの間の排他制御を行うための排他制御手段と、前記排他制御手段により他の単位プロセッサとの間で排他制御した後、外部から要求された割り込み処理の実行を禁止する外部割込禁止手段と、を含むことを特徴とする。
【００１０】
このような発明によれば、第１の単位プロセッサからタスクが追出されることを禁止してタスクを単位プロセッサに固定化した上で、第１単位プロセッサと他の単位プロセッサとがメモリの共通する領域にアクセスすることを禁止することができる。このため、第１単位プロセッサでは、他のタスク等の影響を受けることなく確実にこのタスクを処理することができる。さらに、排他制御の実行中、割込プロセッサによる割り込み処理の実行を禁止するので、ＯＳとは無関係に発生する割り込み処理が第１単位プロセッサとメモリの共通する領域にアクセスする可能性をなくし、タスクを適切に排他制御して高い処理効率を得ることができる。
【００１１】
また、本発明の並列処理装置は、前記並列処理装置における割り込み処理の実行の有無を検出する割込検出手段をさらに備え、前記排他制御手段は、前記割込検出手段によって前記並列処理装置において割り込み処理が実行されていないことが検出された後に排他制御を開始することを特徴とする。
このような発明によれば、ロック状態から排他制御の開始までの間に割り込み処理が入って一の単位プロセッサにおける排他制御に支障がでることをなくすことができる。
【００１２】
また、本発明の並列処理装置は、前記排他制御手段が、ＯＳを占有してタスクの処理を実行する権利を得ることによって他の単位プロセッサを排他制御することを特徴とする。
このような発明によれば、他の単位プロセッサ上のタスクがＯＳになることができず、ＯＳによってアクセスされるメモリの領域でアクセスの競合が起こることをなくすことができる。このため、ＯＳを排他制御して円滑に動作させることができる。
【００１３】
また、本発明の排他制御方法は、複数のタスクを並列に実行する複数の単位プロセッサを含み、当該複数の単位プロセッサのうちの少なくとも１つが外部から割り込み処理を要求された場合、一のタスクと他のタスク及び外部割り込み処理との間の排他制御を実現する並列処理方法であって、タスクを実行している単位プロセッサにおいて、当該タスクの実行が中断されることを禁止する割り込み禁止ステップと、前記割り込み禁止ステップにより単位プロセッサ割り込み禁止状態になった後、単位プロセッサ間ロックを獲得することで、当該単位プロセッサと他の単位プロセッサとの間の排他制御を行う排他制御ステップと、前記排他制御ステップにより他の単位プロセッサとの間で排他制御した後、外部から要求された割り込み処理の実行を禁止する外部割込禁止ステップと、を含むことを特徴とする。
【００１４】
このような発明によれば、第１の単位プロセッサからタスクが追出されることを禁止してタスクを単位プロセッサに固定化した上で、第１単位プロセッサと他の単位プロセッサとがメモリの共通する領域にアクセスすることを禁止することができる。このため、第１単位プロセッサでは、他のタスク等の影響を受けることなく確実にこのタスクを処理することができる。さらに、排他制御の実行中、割込プロセッサによる割り込み処理の実行を禁止するので、ＯＳとは無関係に発生する割り込み処理が第１単位プロセッサとメモリの共通する領域にアクセスする可能性をなくし、タスクを適切に排他制御して高い処理効率を得ることができる。
【００１５】
また、本発明の排他制御方法は、さらに、外部から要求された割り込み処理の実行完了を待つステップを含むことを特徴とする。
このような発明によれば、ロック状態から排他制御の開始までの間に外部割り込み処理が入って一の単位プロセッサにおける排他制御に支障がでることをなくすことができる。
また、本発明の排他制御方法は、並列に動作する複数の単位プロセッサを含み、当該複数の単位プロセッサのうちの少なくとも１つが外部から要求された割り込み処理の実行が可能なプロセッサにおいてタスク処理と外部割り込み処理との間で排他制御を実現する排他制御方法であって、タスク側でのみ排他のためのシステムコール（ｌｏｃ＿ｃｐｕ）を発行することにより、システムコールの中で割り込み完了を待ち、外部割込み処理を優先させる外部割り込み優先ステップを含むことを特徴とする。
【００１６】
このような発明によれば、タスク処理と外部割込み処理とが互いに干渉することを回避し、既に開発済みのタスク処理用のソフトウェア、外部割込み処理用のソフトウェアを使用しながら両者を併用する並列処理装置においてＯＳが安定して動作することができる。
【発明を実施するための最良の形態】
【００１７】
以下、図を参照して本発明に係る並列処理装置及び排他制御方法の実施の形態を説明する。なお、本明細書では、並列処理装置をプロセッサとして構成していて、本発明にかかる並列処理装置を以降プロセッサと記すものとする。
本発明に係るプロセッサは、タスク等、プログラムをその実行単位で並列的に処理するものであり、本発明に係るプロセッサ内に、タスクを実行するプロセッサ（以下、「単位プロセッサ」と言う。）が実質的に複数備えられたハードウェア構成を有している。
【００１８】
本実施形態では、本発明に係るプロセッサを携帯電話に組み込んだ場合を例に挙げて本発明のプロセッサを説明する。なお、以下の説明において、スレッド等、プログラムの実行単位を総称して「タスク」と言う。
図１は、本発明に係る携帯電話１の機能構成を示すブロック図である。
図１において、携帯電話１は、ＣＰＵ（Central Processing Unit）１０と、フラッシュＲＯＭ２０と、メモリ３０と、バッファ４０と、無線部５０と、ＩｒＤＡ（Infrared Data Association）部６０と、オーディオ（Audio）部７０と、タイマ（Timer）８０と、ＵＳＢ（Universal Serial Bus）インターフェース部９０と、キー（KEY）操作部１００と、ＬＣＤ（Liquid Crystal Display）１１０と、カメラ（Camera）部１２０とを含んで構成され、ＣＰＵ１０、フラッシュＲＯＭ２０、メモリ３０及びバッファ４０は、バスによって接続されている。また、無線部５０、ＩｒＤＡ部６０、オーディオ部７０、タイマ８０、ＵＳＢインターフェース部９０、キー操作部１００、ＬＣＤ１１０及びカメラ部１２０は、ＣＰＵ１０と直接接続されている。
【００１９】
ＣＰＵ１０は、複数のタスクを並列的に処理しながら携帯電話１全体を制御するもので、キー操作部１００から入力される各種の指示信号に応じて、フラッシュＲＯＭ３０に記憶されたオペレーティングシステムプログラム（ＯＳ）や各種アプリケーションプログラムを読み出して実行したり、無線部５０、オーディオ部７０あるいはカメラ部１２０等の周辺チップから入力される割り込み信号に応じて、割り込みハンドラを実行したりする。
【００２０】
例えば、ＣＰＵ１０は、アプリケーションにより生成されたタスクを並行して処理する。
さらに、周辺チップから割り込み信号が入力された場合、割り込みハンドラを実行することにより、割り込みに対応するプログラムを実行する。なお、アプリケーションによる処理は、ＯＳのタスクスケジューラによって管理されるタスクとして実行されるため、ＯＳのサービスコールを呼び出すことができ、一方、割り込み処理は、タスクスケジューラによって管理されない処理（非タスク処理）である。
【００２１】
また、ＣＰＵ１０は、各種処理結果をフラッシュＲＯＭ２０あるいはメモリ３０に格納する。
図２は、ＣＰＵ１０の内部構成を示すブロック図である。図２において、ＣＰＵ１０は、複数の単位プロセッサＰ０〜Ｐ３と、割り込み制御部１１と、メモリ制御部１２と、ハードウェアセマフォ部１３とを含んで構成される。なお、ハードウェアセマフォ部１３は、いずれかの単位プロセッサにＯＳになる権利であるセマフォ（本実施形態ではハードウェアセマフォと記す）を付与する構成である。
【００２２】
単位プロセッサＰ０〜Ｐ３は、それぞれが並列してタスクを処理可能なプロセッサである。単位プロセッサＰ０〜Ｐ３の内部構成としては同様のものとなるため、代表として、単位プロセッサＰ０の内部構成について説明する。本実施形態では、単位プロセッサＰ０〜Ｐ３のいずれもが割り込み処理が可能な割り込みプロセッサである。
単位プロセッサＰ０は、フェッチ部１０１と、デコード部１０２と、ＡＬＵ（Arithmetic and Logical Unit）１０３と、レジスタファイル１０４と、プログラム制御部１０５とをさらに含んで構成される。
【００２３】
フェッチ部１０１は、後述するプログラム制御部１０５のプログラムカウンタが示すメモリアドレスから命令コードを読み出し、デコード部１０２に出力する。
デコード部１０２は、フェッチ部１０１によって入力された命令コードをデコードし、デコード結果（命令内容及びソースレジスタ、デスティネーションレジスタのアドレス等）をＡＬＵ１０３に出力する。
【００２４】
ＡＬＵ１０３は、デコード部１０２によって入力されたデコード結果に応じて、所定の演算を行い、演算結果をレジスタファイル１０４に書き込んだり、分岐命令等の演算結果であるブランチ先のアドレスをプログラム制御部１０５に出力したりする。
レジスタファイル１０４は、ロード命令によってメモリ３０から読み出されたデータや、ＡＬＵ１０３の演算結果であるデータを記憶するレジスタ群である。
【００２５】
プログラム制御部１０５は、単位プロセッサＰ０全体を制御するものであり、単位プロセッサＰ０のステータス（例えば、割り込みの可否状態、単位プロセッサＰ０におけるオーバーフローの発生状態等）を記憶するステータスレジスタ（ＰＳＲ）と、単位プロセッサＰ０が次に実行するべき命令が格納されたメモリアドレスを記憶するプログラムカウンタ（ＰＣ）とを含んで構成される。そして、プログラム制御部１０５は、単位プロセッサＰ０が割り込み処理に移行する時点で、ステータスレジスタの値を割り込み処理の禁止状態に変更したり、分岐命令が実行された場合に、プログラムカウンタの値を分岐先のアドレスに変更したりする。
【００２６】
また、プロセッサ制御部１０５は、実行中のタスクによってハードウェアセマフォの取得要求が出力された場合、先ず、ハードウェアセマフォの取得結果を受け取り、ステータスレジスタにおけるハードウェアセマフォの取得結果を示す領域（以下、「セマフォ取得結果レジスタ」と言う。）に取得に成功したことを示すフラグを更新する。一方、セマフォ取得に失敗した場合、取得に失敗したことを示す状態にフラグを更新する。
【００２７】
さらに、プロセッサ制御部１０５は、追出し禁止フラグ１０６を備えている。追出し禁止フラグ１０６は、指定された単位プロセッサにおいてタスクの切替えや外部割り込みが起こり、タスクが単位プロセッサから追出されることを禁止するための機構である。追出し禁止フラグ１０６を１にすることによって現在単位プロセッサにあるタスクが他のタスクに切替えられることが禁止される。単位プロセッサにおけるタスクの追出しが禁止された状態を以降ロック状態とも記す。
【００２８】
割り込み制御部１１は、無線部５０等の周辺チップから割り込み信号が入力された場合に、割り込み信号を調停した上で、所定の割り込み信号を単位プロセッサＰ０に出力する。
メモリ制御部１２は、ＣＰＵ１０とメモリ３０との間に備えられ、ＣＰＵ１０からメモリ３０に対するデータの読み出し及び書き込みが行われる場合に、メモリ３０を制御してデータの入出力を行う。
【００２９】
ハードウェアセマフォ部１３は、排他制御を実現する機構を有し、単位プロセッサＰ０〜Ｐ３からセマフォ取得要求があったとき、既にセマフォが獲得されている状態であれば新たな要求に対して、セマフォの獲得失敗を通知する。一方、それ以前にセマフォが獲得された状態でなければ、セマフォ取得成功の通知を単位プロセッサに返答する機能を有している。
【００３０】
すなわち、本実施形態では、ハードウェアセマフォを取得した単位プロセッサだけがＯＳを占有してタスクの処理を実行する権利を得る。このため、単位プロセッサＰ０〜Ｐ３のうちのいずれか１つだけがＯＳに移行できるので、ＯＳ同士の競合を防止する排他制御を実現できる。そして、ＯＳによって使用されるメモリ３０の所定の領域が同時にアクセスされたために処理が中断する等の不具合を防ぐことができる。
【００３１】
また、本実施形態では、追出し禁止フラグ１０６によってタスクが実行中の単位プロセッサから追出されることをＯＳのサービスコール終了まで禁止することができる。
さらに、本実施形態では、排他制御の実行中、割り込み処理の実行を禁止する。本実施形態では、割り込み処理の実行禁止を割り込み制御部１１によって行っている。すなわち、割り込み制御部１１は、単位プロセッサＰ０〜Ｐ３のステータスが書き込まれるステータスレジスタ（図示せず）を備えている。ステータスレジスタのステータスを「割り込み否」に設定することにより、割り込み制御部１１は、所望の単位プロセッサに対する割り込み処理を禁止することができる。
【００３２】
次に、以上述べた動作を説明する。
図３は、本実施形態の排他制御方法を実行した場合のプロセッサの動作を説明するための図であって、単位プロセッサＰ０、単位プロセッサＰ１間で行われる割り込み処理（割り込みハンドラ）とタスク処理との排他制御を示している。図示した例では、先ず、単位プロセッサＰ１で実行されているタスクがサービスコールｌｏｃ＿ｃｐｕを呼び出す。サービスコールｌｏｃ＿ｃｐｕを呼び出すことによって、ｌｏｃ＿ｃｐｕが起動する。なお、サービスコールｕｎｌ＿ｃｐｕは、タスクが単位プロセッサＰ１をロック状態にするためのサービスコールである。また、後述するサービスコールｕｎｌ＿ｃｐｕは、ロック状態を解放するものである。このようなサービスコールは、ＩＴＲＯＮ４・０（商標）のサービスコールの仕様にしたがって定められている。
【００３３】
また、ｌｏｃ＿ｃｐｕは、ｕｎｌ＿ｃｐｕが実行されるまで、サービスコールｌｏｃ＿ｃｐｕを呼び出したタスクを処理する単位プロセッサを、外部割り込み禁止、ハードウェアセマフォの獲得状態保持、追出しの禁止状態保持で動作させることができる。ただし、ｌｏｃ＿ｃｐｕの発行後であっても、ｌｏｃ＿ｃｐｕを解除するためにｕｎｌ＿ｃｐｕのサービスコールだけは単位プロセッサＰ１で受け付けられるものとする。
【００３４】
なお、単位プロセッサにおける割り込み処理の実行の有無は、装置内部にある単位プロセッサが共通して利用できるＲＡＭ等に書き込まれていて、単位プロセッサが書き込まれた情報を参照することによって検知可能になる。本実施形態では割り込みプロセッサを非固定としているため、単位プロセッサＰ１のタスクは、単位プロセッサのいずれかにおいて割り込み処理が実行されていないことが検出された後に割り込みを禁止して排他制御を開始するものとする。
【００３５】
このような本実施形態によれば、ｌｏｃ＿ｃｐｕが起動してからハードウェアセマフォが獲得されるまでの時間（数ナノ秒）にハードウェアセマフォを獲得しようとする割り込み処理が発生したために単位プロセッサＰ１においてデッドロックが発生することを防ぐことができる。
以下、本実施形態のプロセッサによってなされる排他制御の方法を、より具体的に説明する。
【００３６】
図４は、図３に示した動作をより具体的に示した図である。また、図５は、図４に示した動作のフローチャートである。以下、図４を参照しつつ図５のフローチャートについて説明する。
図５に示すように、単位プロセッサＰ１にあるタスクは、追出し禁止フラグ１０６を１に設定する。追出し禁止フラグの設定により、このタスクが単位プロセッサＰ１から追い出されることがなくなる。また、一時的に単位プロセッサＰ１に対する割り込み禁止が設定される（Ｓ４０１）。
【００３７】
次に、単位プロセッサＰ１にあるタスクは、ハードウェアセマフォの取得を要求する（Ｓ４０２）。そして、ハードウェアセマフォ部１３からの通知によってハードウェアセマフォの取得に成功したか否かを判断する（Ｓ４０３）。判断の結果、ハードウェアセマフォの取得に失敗した場合（Ｓ４０３：Ｎｏ）、追出し禁止フラグ１０６を０にして自身の単位プロセッサの割り込み禁止を解除する（Ｓ４０６）。そして、再度追出し禁止フラグ１０６を１にする処理からハードウェアセマフォの取得を試みる。
【００３８】
また、タスクがハードウェアセマフォの取得に成功した場合（Ｓ４０３：Ｙｅｓ）、ＯＳが、外部割り込みを禁止し（ステップＳ４０４）、単位プロセッサＰ１以外の単位プロセッサで割り込み処理が行われているか否かを、ＲＡＭの共通領域を参照することによって検出する（Ｓ４０５）。この結果、いずれかの単位プロセッサで割り込みハンドラが実行中なら（Ｓ４０５：Ｙｅｓ）、外部割り込み禁止を解除する（Ｓ４０７）。さらに、取得したハードウェアセマフォ部１３の解放を要求し（Ｓ４０８）、追出し禁止フラグ１０６を０にして自身の単位プロセッサの割り込みの禁止を解除する（Ｓ４０９）。
【００３９】
そして、ＯＳが引き続き他の単位プロセッサでの割り込み処理を監視し、割り込み処理が全て終了するまで待つ（Ｓ４１０）。割り込み処理が終了すると、再び追出し禁止フラグ１０６を１にし、ハードウェアセマフォを取得する。
また、以上の動作において、タスクのサービスコールｌｏｃ＿ｃｐｕは、外部割込みを優先させる処理にも使用される。すなわち、本実施形態では、例えば単位プロセッサＰ１で実行されているタスクがシステムコール（ｌｏｃ＿ｃｐｕ）を発行することによってシステムコールの中で割込み完了を待ち、外部割込み処理を優先させている。
【００４０】
より具体的には、図４に示したように、タスクがｌｏｃ＿ｃｐｕを発行し、割込みハンドラの終了をポーリング監視しながら単位プロセッサＰ０上で実行されている割込みハンドラが終了するまで待機する。このため、先に実行されていた割込みハンドラが終了した後に単位プロセッサＰ０の割込み処理をマスク状態にし、割込み処理が単位プロセッサＰ１におけるタスクに優先して実行できることになる。
【００４１】
なお、本実施形態では、他の単位プロセッサで実行されている割り込み処理が終了するまで待機する処理を、割り込み禁止をする直前に実行し、割り込みハンドラの実行中にはｌｏｃ＿ｃｐｕをかける処理を起動しないようにしてもよい。このような処理を、図６のフローチャートに示す。
図６のフローチャートに示した処理では、単位プロセッサＰ０のタスクが、処理の最初に他の単位プロセッサにおける割り込みハンドラの実行終了を待つ（Ｓ６０１）。そして、いずれかの単位プロセッサで割り込みハンドラが実行中なら（Ｓ６０６：Ｙｅｓ）、外部割り込み許可し（Ｓ６０８）、ハードウェアセマフォを解放する（Ｓ６０９）。そして、追出し禁止フラグ１６を０にし、再度割り込みハンドラの実行終了を判断する（Ｓ６０１）。
【００４２】
割り込みハンドラの終了後、追出し禁止フラグ１０６を１にする。追出し禁止フラグ１０６を１にしたことによって、自らが単位プロセッサＰ０から追い出されることがなくなる。
次に、タスクは、ハードウェアセマフォを取得する。ハードウェアセマフォが直ちに取得できない場合（Ｓ６０４：Ｎｏ）、追出し禁止フラグ１０６を０にし（Ｓ６０７）、再び１にする処理から再度処理を実行する（Ｓ６０２）。一方、ハードウェアセマフォが取得できた場合（Ｓ６０４：Ｙｅｓ）、他の単位プロセッサに対する外部割り込みを禁止する（Ｓ６０５）。
【００４３】
以上述べた処理によれば、割り込みハンドラの終了を待っている間に割り込みが要求された場合、この割り込みをｌｏｃ＿ｃｐｕより先に実行するので、図５のステップＳ４０５において割り込み処理の実行中でないと判断される確率が高くなる。したがって、図６に示した処理は、図５に示した処理よりも割り込みハンドラに対する高い応答性を得ることができる。
【００４４】
また、本実施形態のプロセッサでは、複数の単位プロセッサ間でサービスコール同士についても排他制御する。以下、各サービスコール間における排他制御について記す。
図７は、各サービスコールとｌｏｃ＿ｃｐｕとの間でなされる排他制御の動作を説明するための図である。また、図８は、図７に示した動作を説明するためのフローチャートである。図７、図８に示したように、例えば、単位プロセッサＰ１のタスクが追出し禁止フラグ１０６を１にし（Ｓ８０１）、自身を単位プロセッサＰ０に割り付けた場合、この続いてハードウェアセマフォの取得を要求する（Ｓ８０２）。そして、ハードウェアセマフォの取得に成功したか否かを判断する（Ｓ８０３）。
【００４５】
ステップＳ８０３において、ハードウェアセマフォが取得できないと判断された場合（Ｓ８０３：Ｎｏ）、タスクは、単位プロセッサＰ１の追出し禁止フラグ１０６を０にして割り込み禁止を解除する（Ｓ８０７）。なお、ある単位プロセッサのサービスコールｌｏｃ＿ｃｐｕをより安全に実行させるためには、この単位プロセッサがロック状態にある間、他の単位プロセッサで処理されているタスクが要求するサービスコールを排他の対象とする。他の単位プロセッサにおけるタスクに関しては、サービスコールを行わない限り排他の対象としない。
【００４６】
また、単位プロセッサＰ１がハードウェアセマフォの取得を繰返している間に、単位プロセッサＰ２は、ｕｎｌ＿ｃｐｕを発行する。このことにより、単位プロセッサＰ１は、ハードウェアセマフォが取得し（Ｓ８０３：Ｙｅｓ）、必要なサービスコールを実行する（Ｓ８０４）。
また、単位プロセッサ２によるｕｎｌ＿ｃｐｕの発行によって、図９に示すように、外部割り込み禁止の解除（Ｓ９０１）、ハードウェアセマフォの解放（Ｓ９０２）、及び自身の単位プロセッサの割り込み禁止解除（Ｓ９０３）が行われる。
【００４７】
以上述べた本実施形態は、タスクを単位プロセッサに固定化した上で、この単位プロセッサと他の単位プロセッサとがメモリの共通する領域にアクセスすることを禁止する。このため、タスクが固定された単位プロセッサは、他のタスク等の影響を受けることなく確実にこのタスクを処理することができる。さらに、排他制御の実行中、割込プロセッサによる割り込み処理の実行を禁止するので、ＯＳとは無関係に発生する割り込み処理が単位プロセッサとメモリの共通する領域にアクセスする可能性をなくすことができる。
【００４８】
また、追出しフラグが１になってから排他制御の開始までの間に割り込み処理が入って排他制御がデッドロック等することをなくすことができる。
さらに、本実施形態は、割り込みプロセッサを非固定とした構成について説明している。しかしながら、本発明は、このような構成に限定されるものでなく、割り込みプロセッサを固定化した構成に適用することも可能である。
【００４９】
なお、本発明は、マルチスレッドプロセッサあるいはマルチタスクプロセッサと呼ばれる各種実装形態のプロセッサに適用可能であるが、例えば、１チップ上に複数のプロセッサコアが実装され、プロセッサの構成要素の少なくとも一部をこれら複数のプロセッサコアが共用する形態のマルチプロセッサ（いわゆる密結合型のマルチタスクプロセッサ）において、特に有効となる。
【００５０】
図１０は、本発明の適用対象となるマルチプロセッサの構成例を示す図である。
図１０に示すマルチプロセッサは、メモリ制御部及びＡＬＵを複数のプロセッサコアが共用する形態であり、それぞれのプロセッサコアにプログラムカウンタ及びステータスレジスタ等の制御用レジスタが備えられていると共に、マルチプロセッサ全体を制御するためのプログラム制御部及び制御用レジスタも別途備えられている。なお、図１０に示すように、各プロセッサコアで共用するコンテキストキャッシュ等を備えても良い。
【００５１】
このような構成のマルチプロセッサの場合、各プロセッサコアが本実施の形態における単位プロセッサの機能を実現するものとなり、マルチプロセッサ全体を制御するプログラム制御部において、ハードウェアセマフォ１３の機能を実現するものとなる。
また、本実施の形態においては、メモリ３０のシステム領域に対するアクセスが競合する可能性があることに鑑み、複数の単位プロセッサがＯＳへ移行することを排他制御する例について説明したが、同一のハードウェアにアクセスする可能性がある場合、例えば、ＣＰＵとＤＭＡ（Direct Memory Access）コントローラとの間における排他制御や、アプリケーション間における排他制御（共有メモリへのアクセスあるいは共通処理の実行）等に適用することも可能である。
【図面の簡単な説明】
【００５２】
【図１】本発明に係る携帯電話１の機能構成を示すブロック図である。
【図２】ＣＰＵ１０の内部構成を示すブロック図である。
【図３】携帯電話１のＣＰＵ１０における動作を説明するための図である。
【図４】本発明の一実施形態の排他制御方法を説明するための図であって、図３に示した動作をより具体的に示した図である。
【図５】図４に示した携帯電話１のＣＰＵ１０における動作のフローチャートである。
【図６】図５に示したフローチャートで表される処理の変形例を示したフローチャートである。
【図７】本発明の一実施形態のサービスコールとｌｏｃ＿ｃｐｕとの間でなされる排他制御の動作を説明するための図である。
【図８】図７に示した動作のフローチャートである。
【図９】本発明の一実施形態のｕｎｌ＿ｃｐｕの処理を説明するためのフローチャートである。
【図１０】本発明の適用対象となるマルチプロセッサの構成例を示す図である。
【符号の説明】
【００５３】
１  携帯電話、１０  ＣＰＵ、１１  割り込み制御部、１２  メモリ制御部、１３  ハードウェアセマフォ部、２０  フラッシュＲＯＭ、３０  メモリ、４０  バッファ、５０  無線部、６０  ＩｒＤＡ部、７０  オーディオ、８０  タイマ、９０  ＵＳＢインターフェース部、１００  キー操作部、１１０  ＬＣＤ、１２０  カメラ部、Ｐ０〜Ｐ３  単位プロセッサ、１０１  フェッチ部、１０２  デコード部、１０３  ＡＬＵ、１０４  レジスタファイル、１０５  プログラム制御部、１０６  追出し禁止フラグ
【図１】
0004441592.tif 000002
【図２】
0004441592.tif 000003
【図３】
0004441592.tif 000004
【図４】
0004441592.tif 000005
【図５】
0004441592.tif 000006
【図６】
0004441592.tif 000007
【図７】
0004441592.tif 000008
【図８】
0004441592.tif 000009
【図９】
0004441592.tif 000010
【図１０】
0004441592.tif 000011