(57)【特許請求の範囲】
【請求項１】
複数のスレッドを実行する方法であって、
第1のスレッドに関するスレッド量子化優先度値を、前記第1のスレッドに関連付けられたランタイム情報に基づいて決定するステップと、
前記第1のスレッドを複数のスレッドバケットのうちの１つに割り当てるステップであって、前記複数のスレッドバケットのそれぞれはバケット優先度値を有する、ステップと、
前記第1のスレッドのスレッド規定優先度値を前記スレッド量子化優先度値に対応付けるステップと、
前記スレッド規定優先度値を前記第1のスレッドに関連付けられた量子値に対応付けるステップであって、前記量子値は前記第1のスレッドが第2のスレッドにより阻止される前に実行されることになる時間の最大量を特定する、ステップと、
前記第1のスレッドを、レディキューに追加するステップと、
前記レディキューから実行するために、前記複数のスレッドから、前記バケット優先度値、前記対応付けられたスレッド量子化優先度値、及び前記対応付けられた量子値に基づいて、スレッドを選択するステップと、
コンピューティングデバイスのプロセッサにおいて前記選択されたスレッドを実行するステップと
を含む、方法。
【請求項２】
前記第1のスレッドに関する前記スレッド量子化優先度値を、前記第1のスレッドに関連付けられたランタイム情報に基づいて決定するステップが、前記第1のスレッドの実際のランタイムに基づいて前記第1のスレッドの優先度値を決定するステップを含む、請求項1に記載の方法。
【請求項３】
前記コンピューティングデバイスの前記プロセッサにおける前記選択されたスレッドの前記実行が完了したかどうかを判定するステップと、
前記コンピューティングデバイスの前記プロセッサにおける前記選択されたスレッドを実行することが完了したと判定された場合に、前記スレッド量子化優先度値及び前記量子値を更新するステップと
をさらに含む、請求項1に記載の方法。
【請求項４】
前記コンピューティングデバイスの前記プロセッサにおける前記選択されたスレッドの前記実行が完了したかどうかを判定するステップが、前記選択されたスレッドと関連付けられた作業が完了したかどうかを判定するステップを含む、請求項3に記載の方法。
【請求項５】
複数のスレッドを実行するためのデバイスであって、
プロセッサと、
第1のスレッドに関するスレッド量子化優先度値を、前記第1のスレッドに関連付けられたランタイム情報に基づいて決定するための手段と、
前記第1のスレッドを複数のスレッドバケットのうちの１つに割り当てるための手段であって、前記複数のスレッドバケットのそれぞれはバケット優先度値を有する、手段と、
前記第1のスレッドのスレッド規定優先度値を前記スレッド量子化優先度値に対応付けるための手段と、
前記スレッド規定優先度値を前記第1のスレッドに関連付けられた量子値に対応付けるための手段であって、前記量子値は前記第1のスレッドが第2のスレッドにより阻止される前に実行されることになる時間の最大量を特定する、手段と、
前記第1のスレッドを、レディキューに追加するための手段と、
前記レディキューから実行するために、前記複数のスレッドから、前記バケット優先度値、前記対応付けられたスレッド量子化優先度値、及び前記対応付けられた量子値に基づいて、スレッドを選択するための手段と、
前記プロセッサにおいて前記選択されたスレッドを実行するための手段と
を含む、デバイス。
【請求項６】
前記第1のスレッドに関する前記スレッド量子化優先度値を、前記第1のスレッドに関連付けられたランタイム情報に基づいて決定するための手段が、前記第1のスレッドの実際のランタイムに基づいて前記第1のスレッドの優先度値を決定するための手段を含む、請求項5に記載のデバイス。
【請求項７】
前記プロセッサにおける前記選択されたスレッドの前記実行が完了したかどうかを判定するための手段と、
前記プロセッサにおける前記選択されたスレッドを実行することが完了したと判定された場合に、前記スレッド量子化優先度値及び前記量子値を更新するための手段と
をさらに含む、請求項5に記載のデバイス。
【請求項８】
前記プロセッサにおける前記選択されたスレッドの前記実行が完了したかどうかを判定するための手段が、前記選択されたスレッドと関連付けられた作業が完了したかどうかを判定するための手段を含む、請求項7に記載のデバイス。
【請求項９】
コンピューティングデバイスであって、  第1のスレッドに関するスレッド量子化優先度値を、前記第1のスレッドに関連付けられたランタイム情報に基づいて決定するステップと、
前記第1のスレッドを複数のスレッドバケットのうちの１つに割り当てるステップであって、前記複数のスレッドバケットのそれぞれはバケット優先度値を有する、ステップと、
前記第1のスレッドのスレッド規定優先度値を前記スレッド量子化優先度値に対応付けるステップと、  前記スレッド規定優先度値を前記第1のスレッドに関連付けられた量子値に対応付けるステップであって、前記量子値は前記第1のスレッドが第2のスレッドにより阻止される前に実行されることになる時間の最大量を特定する、ステップと、
前記第1のスレッドを、レディキューに追加するステップと、
前記レディキューから実行するために、前記複数のスレッドから、前記バケット優先度値、前記対応付けられたスレッド量子化優先度値、及び前記対応付けられた量子値に基づいて、スレッドを選択するステップと、
前記選択されたスレッドを実行するステップと
を含む動作を実行するためのプロセッサ実行可能命令が組み込まれているプロセッサを含む、コンピューティングデバイス。
【請求項１０】
前記プロセッサは、
前記第1のスレッドに関する前記スレッド量子化優先度値を、前記第1のスレッドに関連付けられたランタイム情報に基づいて決定するステップが、前記第1のスレッドの実際のランタイムに基づいて前記第1のスレッドの優先度値を決定するステップを含む、動作を実行するためのプロセッサ実行可能命令が組み込まれている、請求項9に記載のデバイス。
【請求項１１】
前記プロセッサは、
前記選択されたスレッドの前記実行が完了したかどうかを判定するステップと、
前記選択されたスレッドを実行することが完了したと判定された場合に、前記スレッド量子化優先度値及び前記量子値を更新するステップと
をさらに含む動作を実行するためのプロセッサ実行可能命令が組み込まれている、請求項9に記載のデバイス。
【請求項１２】
前記プロセッサは、
前記選択されたスレッドの前記実行が完了したかどうかを判定するステップが、前記選択されたスレッドと関連付けられた作業が完了したかどうかを判定するステップを含む、動作を実行するためのプロセッサ実行可能命令が組み込まれている、請求項11に記載のデバイス。
【請求項１３】
複数のスレッドを実行するための動作をプロセッサに実行させるように構成されたプロセッサ実行可能ソフトウェア命令を記録した非一時的なコンピュータ読み取り可能な記録媒体であって、前記動作が、
第1のスレッドに関するスレッド量子化優先度値を、前記第1のスレッドに関連付けられたランタイム情報に基づいて決定するステップと、
前記第1のスレッドを複数のスレッドバケットのうちの１つに割り当てるステップであって、前記複数のスレッドバケットのそれぞれはバケット優先度値を有する、ステップと、
前記第1のスレッドのスレッド規定優先度値を前記スレッド量子化優先度値に対応付けるステップと、
前記スレッド規定優先度値を前記第1のスレッドに関連付けられた量子値に対応付けるステップであって、前記量子値は前記第1のスレッドが第2のスレッドにより阻止される前に実行されることになる時間の最大量を特定する、ステップと、
前記第1のスレッドを、レディキューに追加するステップと、
前記レディキューから実行するために、前記複数のスレッドから、前記バケット優先度値、前記対応付けられたスレッド量子化優先度値、及び前記対応付けられた量子値に基づいて、スレッドを選択するステップと、
前記選択されたスレッドを実行するステップと
を含む、非一時的なコンピュータ読み取り可能な記録媒体。
【請求項１４】
前記第1のスレッドに関する前記スレッド量子化優先度値を、前記第1のスレッドに関連付けられたランタイム情報に基づいて決定するステップが、前記第1のスレッドの実際のランタイムに基づいて前記第1のスレッドの優先度値を決定するステップを含む、請求項13に記載の非一時的なコンピュータ読み取り可能な記録媒体。
【請求項１５】
前記記録されたプロセッサ実行可能ソフトウェア命令は、
前記選択されたスレッドの前記実行が完了したかどうかを判定するステップと、
前記選択されたスレッドを実行することが完了したと判定された場合に、前記スレッド量子化優先度値及び前記量子値を更新するステップと
をさらに含む動作をプロセッサに実行させるように構成される、請求項13に記載の非一時的なコンピュータ読み取り可能な記録媒体。
【請求項１６】
前記記録されたプロセッサ実行可能ソフトウェア命令は、
前記選択されたスレッドの前記実行が完了したかどうかを判定するステップが、前記選択されたスレッドと関連付けられた作業が完了したかどうかを判定するステップを含む、動作をプロセッサに実行させるように構成される、請求項15に記載の非一時的なコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
関連特許出願の相互参照および優先権の主張
本出願は、2010年3月15日に出願された米国特許仮出願第61/314085号への、米国特許法第119条(e)による優先権を主張する。この特許仮出願の内容全体が、参照により本明細書に組み込まれる。
【背景技術】
【０００２】
ポータブルコンピューティングデバイス(PD)は至る所にある。これらのデバイスは、セルラー電話、携帯情報端末(PDA)、ポータブルゲームコンソール、パームトップコンピュータ、および他のポータブル電子デバイスを含み得る。これらのデバイスの多くは主要機能に加えて、周辺機能を含む。たとえば、セルラー電話はセルラー電話で電話をかけるという主要機能、およびスチールカメラ、ビデオカメラ、全地球測位システム(GPS)のナビゲーション、ウェブブラウジング、電子メールの送受信、テキストメッセージの送受信、プッシュツートーク能力などの周辺機能を含み得る。そのようなデバイスの機能の増大に伴い、動作スレッドの数が増えている。さらに、動作スレッドの数の増大に伴い、スレッドの実行を効果的に管理できるようにすることが、さらに難しくなっている。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
したがって、必要とされるのは、1つまたは複数のプロセッサ上で、複数のスレッドを実行する改善されたシステムおよび方法である。
【課題を解決するための手段】
【０００４】
複数のスレッドを実行するための方法およびシステムは、ある休止中のスレッドの実行の準備ができた場合に、その休止中のスレッドと関連付けられたスレッド規定優先度値を、その休止中のスレッドと関連付けられたスレッド量子化優先度値にマッピングすることを含む。このマッピングは、休止中のスレッドに、バケット優先度値を割り当てることを含む。そして、休止中のスレッドが、実行する準備ができているキューに追加される。次いで、休止中のスレッドと関連付けられた、スレッド量子化優先度値、スレッド量子値、またはこれらの組合せが更新され得る。この更新は、マップを用いて静的に更新することと、スレッドに割り当てられたバケット優先度値に基づいて動的に更新することのうちの、1つを含み得る。
【０００５】
図中、別段に規定されていない限り、類似の参照番号は、様々な図の全体を通じて、類似の部分を指す。
【図面の簡単な説明】
【０００６】
【図１】閉位置におけるポータブルコンピューティングデバイス(PCD)の第1の態様の正面図である。
【図２】開位置のPCDの第1の態様の正面図である。
【図３】PCDの第2の態様のブロック図である。
【図４】処理システムのブロック図である。
【図５】優先順位付けシステムのブロック図である。
【図６】複数のスレッドを優先順位付ける方法を示すフローチャートである。
【図７】複数のスレッドを実行する方法の第1の態様を示すフローチャートである。
【図８】スレッド優先度量子化、スレッド量子値、またはこれらの組合せを、静的に更新する方法を示すフローチャートである。
【図９】スレッド優先度量子化、スレッド量子値、またはこれらの組合せを、動的に更新する方法の第1の部分を示すフローチャートである。
【図１０】スレッド優先度量子化、スレッド量子値、またはこれらの組合せを、動的に更新する方法の第2の部分を示すフローチャートである。
【発明を実施するための形態】
【０００７】
「例示的な」という言葉は、「一例、実例または例示となること」を意味するように本明細書で使用される。「例示的な」ものとして本明細書で説明する態様は、必ずしも他の態様よりも好ましい、または有利であると解釈されるわけではない。
【０００８】
本明細書では、「アプリケーション」という用語は、オブジェクトコード、スクリプト、バイトコード、マークアップ言語ファイルおよびパッチなど、実行可能コンテンツを有するファイルを含むこともある。加えて、本明細書で言及する「アプリケーション」は、開かれる必要があり得るドキュメント、またはアクセスされる必要がある他のデータファイルなど、本質的に実行可能ではないファイルを含むこともある。
【０００９】
「コンテンツ」という用語は、オブジェクトコード、スクリプト、バイトコード、マークアップ言語ファイル、パッチなど、実行可能コンテンツを有するファイルを含むこともある。加えて、本明細書で言及する「コンテンツ」は、オープンされる必要があり得るドキュメント、またはアクセスされる必要がある他のデータファイルなど、本質的に実行可能ではないファイルを含むこともある。
【００１０】
本明細書で使用される場合、「構成要素」、「データベース」、「モジュール」、「システム」などの用語は、ハードウェア、ファームウェア、ハードウェアとソフトウェアの組合せ、ソフトウェア、実行中のソフトウェアを問わず、コンピュータ関連のエンティティを指すことが意図されている。たとえば構成要素は、プロセッサ上で作動しているプロセス、プロセッサ、オブジェクト、実行可能ファイル、実行スレッド、プログラムおよび/またはコンピュータであってよいが、これらであることに限定されない。例を挙げると、コンピューティングデバイス上で作動しているアプリケーションとコンピューティングデバイスの両方が構成要素であり得る。1つまたは複数の構成要素は、プロセスおよび/または実行スレッドの中に存在してよく、1つの構成要素を1つのコンピュータに局在化すること、および/または2つ以上のコンピュータに分散することが可能である。加えて、これらの構成要素は、様々なデータ構造を記憶している様々なコンピュータ可読媒体から実行することができる。構成要素は、1つまたは複数のデータパケット(たとえば、信号によりローカルシステム、分散システムにおいて、かつ/または他のシステムとインターネットなどのネットワークにわたって、別の構成要素と対話する1つの構成要素からのデータ)を有する信号に従うなどしてローカルプロセスおよび/またはリモートプロセスの方法により通信することができる。
【００１１】
最初に図1および図2を参照すると、例示的なポータブルコンピューティングデバイス(PCD)が示されており、全体的に100と表される。図示のように、PCD100は、ハウジング102を含み得る。ハウジング102は、上側ハウジング部104および下側ハウジング部106を含み得る。図1は、上側ハウジング部104がディスプレイ108を含み得ることを示す。特定の態様において、ディスプレイ108は、タッチスクリーンディスプレイでもよい。上側ハウジング部104は、トラックボール入力デバイス110を含むこともできる。さらに、図1に示されるように、上側ハウジング部104は、電源投入ボタン112および電源切断ボタン114を含み得る。図1に示されるように、PCD100の上側ハウジング部104は、複数のインジケータライト116およびスピーカー118を含み得る。各インジケータライト116は、発光ダイオード(LED)でもよい。
【００１２】
特定の態様では、図2に示すように、上位ハウジング部分104は下位ハウジング部分106に対して摺動可能である。具体的には、上位ハウジング部分104は下位ハウジング部分106に対してスライド可能であってよい。図2に示すように、下位ハウジング部分106はマルチボタン型キーボード120を含むことができる。特定の態様では、マルチボタン型キーボード120は標準型QWERTYキーボードであり得る。マルチボタン型キーボード120は、上位ハウジング部分104が下位ハウジング部分106に対して移動したときに現れ得る。図2は、PCD100が下位ハウジング部分106上にリセットボタン122を含み得ることをさらに示している。
【００１３】
図3を参照すると、ポータブルコンピューティングデバイス(PCD)の例示的な非限定的態様が示されており、全体的に320と表される。図示のように、PCD100はマルチコアCPU324を含むオンチップシステム322を含む。マルチコアCPU324は、第0のコア325、第1のコア326および第Nのコア327を含み得る。
【００１４】
図3に示すように、ディスプレイコントローラ328およびタッチスクリーンコントローラ330がマルチコアCPU324に結合される。次に、オンチップシステム322の外部にあるタッチスクリーンディスプレイ332が、ディスプレイコントローラ328およびタッチスクリーンコントローラ330に結合される。
【００１５】
図3は、ビデオエンコーダ334、たとえば位相反転線(PAL)エンコーダ、順次式カラーメモリ(SECAM:sequential couleur a memoire)エンコーダまたは全米テレビジョン方式委員会(NTSC)エンコーダがマルチコアCPU324に結合されることをさらに示している。さらに、ビデオ増幅器336がビデオエンコーダ334およびタッチスクリーンディスプレイ332に結合される。また、ビデオポート338がビデオ増幅器336に結合される。図3に示すように、ユニバーサルシリアルバス(USB)コントローラ340がマルチコアCPU324に結合される。また、USBポート342がUSBコントローラ340に結合される。メモリ344および加入者識別モジュール(SIM)カード346も、マルチコアCPU324に結合され得る。さらに、図3に示すように、デジタルカメラ348がマルチコアCPU324に結合され得る。例示的な態様では、デジタルカメラ348は、電荷結合デバイス(CCD)カメラまたは相補型金属酸化物半導体(CMOS)カメラである。
【００１６】
図3にさらに示すように、ステレオオーディオコーデック350がマルチコアCPU324に結合され得る。さらに、オーディオ増幅器352がステレオオーディオコーデック350に結合され得る。例示的な態様では、第1のステレオスピーカー354および第2のステレオスピーカー356がオーディオ増幅器352に結合される。図3は、マイクロフォン増幅器358もステレオオーディオコーデック350に結合され得ることを示している。加えて、マイクロフォン360がマイクロフォン増幅器358に結合され得る。特定の態様では、周波数変調(FM)ラジオチューナー362がステレオオーディオコーデック350に結合され得る。また、FMアンテナ364がFMラジオチューナー362に結合される。さらに、ステレオヘッドフォン366がステレオオーディオコーデック350に結合され得る。
【００１７】
図3は、高周波(RF)トランシーバ368がマルチコアCPU324に結合され得ることをさらに示している。RFスイッチ370がRFトランシーバ368およびRFアンテナ372に結合され得る。図3に示すように、キーパッド374がマルチコアCPU324に結合され得る。また、マイクロフォンを備えたモノヘッドセット376がマルチコアCPU324に結合され得る。さらに、バイブレータデバイス378がマルチコアCPU324に結合され得る。図3は、電源380がオンチップシステム322に結合され得ることも示している。特定の態様では、電源380は電力を必要とするPCD100の様々な構成要素に電力を供給する直流(DC)電源である。さらに、特定の態様において、電源は、AC電源に接続された交流(AC)-DC変成器から導かれた充電式DCバッテリまたはDC電源である。
【００１８】
図3は、PCD100がデータネットワーク、たとえばローカルエリアネットワーク、パーソナルエリアネットワーク、その他のネットワークにアクセスするために使用できるネットワークカード388も含み得ることをさらに示している。ネットワークカード388は、Bluetooth(登録商標)ネットワークカード、WiFiネットワークカード、パーソナルエリアネットワーク(PAN)カード、パーソナルエリアネットワーク超低電力技術(PeANUT)ネットワークカード、または当技術分野で知られている任意の他のネットワークカードとすることができる。さらに、ネットワークカード388は、チップに組み込むことができ、すなわち、ネットワークカード388は、チップでのフルソリューションとすることができ、個別のネットワークカード388でなくてもよい。
【００１９】
図3に示すように、タッチスクリーンディスプレイ332、ビデオポート338、USBポート342、カメラ348、第1のステレオスピーカー354、第2のステレオスピーカー356、マイクロフォン360、FMアンテナ364、ステレオヘッドフォン366、RFスイッチ370、RFアンテナ372、キーパッド374、モノヘッドセット376、バイブレータ378および電源380は、オンチップシステム322の外部にある。
【００２０】
特定の態様において、本明細書で説明する方法のステップのうちの1つまたは複数は、コンピュータプログラム命令としてメモリ344に記憶され得る。これらの命令は、本明細書で説明する方法を実行するために、マルチコアCPU324によって実行され得る。さらに、マルチコアCPU324、メモリ344、またはこれらの任意の組合せは、複数のタスクまたはスレッドを実行するための、本明細書で説明される方法のステップの1つまたは複数を実行するための手段として、機能し得る。マルチコアCPU324、メモリ344、またはこれらの任意の組合せは、スレッド優先度量子化、スレッド量子値、またはこれらの組合せを静的に更新するための、本明細書で説明される方法のステップの1つまたは複数を実行するための手段として、機能し得る。加えて、マルチコアCPU324、メモリ344、またはこれらの任意の組合せは、スレッド優先度量子化、スレッド量子値、またはこれらの組合せを動的に更新するための、本明細書で説明される方法のステップの1つまたは複数を実行するための手段として、機能し得る。また、マルチコアCPU324、メモリ344、またはこれらの任意の組合せは、複数のスレッドの各々に優先度を割り当てるための手段として、機能し得る。
【００２１】
図4を参照すると、処理システムが示され、全体的に400と表される。特定の態様では、処理システム400は、図3に関して上述したPCD100に組み込まれ得る。図示のように、処理システム400はマルチコア中央処理装置(CPU)324、およびマルチコアCPU324に接続されたメモリ344を含み得る。マルチコアCPU324は、第0のコア325、第1のコア326および第Nのコア327を含み得る。第0のコア325は、その上で実行される第0の動的クロックおよび電圧スケーリング(dynamic clock and voltage scaling:DCVS)アルゴリズム416を含み得る。第1のコア326は、その上で実行される第1のDCVSアルゴリズム417を含み得る。さらに、第Nのコア327は、その上で実行される第NのDCVSアルゴリズム418を含み得る。特定の態様では、各DCVSアルゴリズム416、417、418は、それぞれのコア326、327、416上で独立して実行されることができる。
【００２２】
さらに、図示のように、メモリ344は、オペレーティングシステム420を記憶し得る。オペレーティングシステム420はスケジューラ422を含むことができ、スケジューラ422は第1の実行キュー424、第2の実行キュー426、第Nの実行キュー428を含み得る。メモリ344は、第1のアプリケーション430、第2のアプリケーション432および第Nのアプリケーション434も記憶し得る。
【００２３】
特定の態様において、アプリケーション430、432、434は、マルチコアCPU324内のコア325、326、327で処理される1つまたは複数のタスク436をオペレーティングシステム420に送ることができる。タスク436は、単一のタスク、スレッド、またはこれらの組合せとして処理または実行され得る。さらに、スケジューラ422は、マルチコアCPU324内で実行するタスク、スレッド、またはそれらの組合せをスケジューリングすることができる。加えて、スケジューラ422は、実行キュー424、426、428にタスク、スレッド、またはこれらの組合せを配置することができる。コア325、326、327は、タスク、スレッド、またはそれらの組合せを、たとえばオペレーティングシステム420によってコア325、326、327でそれらのタスクおよびスレッドを処理または実行するよう命令された場合、実行キュー424、426、428から取り出すことができる。
【００２４】
特定の態様では、スケジューラ422、メモリ344、コア325、326、327、またはこれらの任意の組合せは、複数のタスク/スレッド436を実行するための、本明細書で説明された方法のステップの1つまたは複数を実行するための手段として、機能し得る。スケジューラ422、メモリ344、コア325、326、327、またはこれらの任意の組合せは、スレッド優先度量子化、スレッド量子値、またはこれらの組合せを静的に更新するための、本明細書で説明される方法のステップの1つまたは複数を実行するための手段としても、機能し得る。さらに、スケジューラ422、メモリ344、コア325、326、327、またはこれらの任意の組合せは、スレッド優先度量子化、スレッド量子値、またはこれらの組合せを動的に更新するための、本明細書で説明される方法のステップの1つまたは複数を実行するための手段として、機能し得る。さらに、スケジューラ422、メモリ344、コア325、326、327、またはこれらの任意の組合せは、複数のスレッドの各々に優先度を割り当てるための手段として、機能し得る。
【００２５】
特定の態様では、スレッド優先度は、様々なスレッド436およびそれらの依存関係を分析し、各スレッド436の処理と関連する重要度に基づいて優先度値を割り当てることによって、調整され、または場合によっては操作され得る。並列のスレッドの数が増え、優先度の数が増えるにつれて、それぞれの優先度に基づいてスレッド436を調整することはより複雑になる。本明細書で説明されるように、各スレッドは、規定優先度値、量子化優先度値、および量子値を有し得る。
【００２６】
規定優先度値は、たとえば、図5で示され以下で詳細に説明されるバケット504、506、および508に対応する、高い値、中程度の値、または低い値のような、相対的な値として表され得る。量子値は、時間の値、たとえばミリ秒として表され得る。たとえば、ある特定のスレッドは、1ミリ秒(ms)、5ミリ秒(ms)、10ミリ秒(ms)などの量子値を有し得る。
【００２７】
各スレッドの規定優先度値、量子化優先度値、および量子値に基づいて、スレッド436は、相対的により重要ではないスレッド436を妨げることなくより重要なスレッド436を処理できるように、処理され得る。さらに、複数のスレッドが実質的に同時に実行されており、実質的に同じ重要度、すなわち優先度を有する場合には、各々のスレッドが、いずれかのスレッドを妨げることなく処理に進めるように、スレッドは、たとえば量子値を用いることで、互いにハンドシェークすることができる。
【００２８】
図5は、優先順位付けシステムを示し、全体的に500と表される。示されるように、量子化優先順位付けシステム500は、スケジューラ422を含み得る。スケジューラ422は、第1のスレッドバケット504へのアクセスを有し得る。さらに、スケジューラ422は、第2のスレッドバケット506へのアクセスを有し得る。示されるように、スケジューラ422は、第Nのスレッドバケット508へのアクセスも有し得る。特定の態様では、示されるように、スケジューラ422は、高い優先度、中程度の優先度、および低い優先度という3つの優先度値に対応する、3つのスレッドバケット504、506、508へのアクセスを有し得る。しかし、スケジューラ422は、他の中間の優先度値(図示せず)に対応する、4つのスレッドバケット、5つのスレッドバケット、6つのスレッドバケットなどへのアクセスを有してもよいことが、理解され得る。
【００２９】
特定の態様では、各スレッドバケット504は、バケット優先度値510、512、514を割り当てられ得る。具体的には、第1のスレッドバケット504は、第1のバケット優先度値510を割り当てられ得る。第2のスレッドバケット506は、第2のバケット優先度値512を割り当てられ得る。また、第Nのスレッドバケット508は、第Nのバケット優先度値514を割り当てられ得る。
【００３０】
一態様では、バケット優先度値510、512、514は互いに関連があり得る。たとえば、第1のバケット優先度値510は、高いバケット優先度値であってよい。第2のバケット優先度値512は、中間のバケット優先度値であってよい。さらに、第3のバケット優先度値514は、低いバケット優先度値であってよい。以下で説明されるスレッドは、各スレッドと関連付けられた規定優先度値に基づいて、各バケット504、506、508に配置され得る。同様の規定優先度値を有するスレッドは、同じバケット504、506、508に配置され得る。
【００３１】
さらに図5を参照すると、第1のバケット504は、第1のスレッド520および第2のスレッド522を含み得る。第1のスレッド520は、規定優先度値524、量子化優先度値526、および量子値528を含み得る。規定優先度値524は、スレッドにより規定される優先度値である。規定優先度値は、スレッドの実行に対して優先度を与えるのに用いられる。たとえば、優先度値が高いと、特定のスレッドを、より低い優先度値を有するスレッドよりも前に実行させることができる。量子化優先度値526は、スレッドの実行情報に少なくとも一部基づいて求められる、優先度値であり得る。量子値528は、あるスレッドが、同じバケットの別のスレッドにより阻止される前に実行されることが許可され得る、タイムスライスであってよい。示されるように、第2のスレッド522は、規定優先度値530、量子化優先度値532、および量子値534を含み得る。
【００３２】
図5に示されるように、第2のバケット506は、第3のスレッド540および第4のスレッド542を含み得る。第3のスレッド540は、規定優先度値544、量子化優先度値546、および量子値548を含み得る。示されるように、第4のスレッド542は、規定優先度値550、量子化優先度値552、および量子値554を含み得る。
【００３３】
第Nのバケット508は、第N-1のスレッド506および第Nのスレッド562を含み得る。第N-1のスレッド560は、規定優先度値564、量子化優先度値566、および量子値568を含み得る。示されるように、第Nのスレッド562は、規定優先度値570、量子化優先度値572、および量子値574を含み得る。
【００３４】
特定の態様では、スレッド520、522、540、542、560、562は、各スレッドと関連付けられたランタイム情報に基づいて、バケット504、506、508の間で、スケジューラ422により移動され得る。たとえば、第1のスレッド520と関連付けられた量子化優先度値526は、第1のバケット504と関連付けられたバケット優先度値510よりも低くなり得る。第1のスレッド520の量子化優先度値526が、第1のバケット504のバケット優先度値510よりも低くなると、第1のスレッド520は、第1のスレッド520の量子化優先度値526に応じて、第1のバケット504から、第2のバケット506と第Nのバケット508のいずれかに、スケジューラ422により移動され得る。
【００３５】
別の例として、第3のスレッド540と関連付けられた量子化優先度値546は、第2のバケット506と関連付けられたバケット優先度値512よりも大きくなり得る。第3のスレッド540の量子化優先度値546が、第2のバケット506と関連付けられたバケット優先度値512よりも大きくなると、第3のスレッド540は、第2のバケット506から第1のバケット504に、スケジューラ422により移動され得る。
【００３６】
図5はさらに、スケジューラ422にアクセス可能な、量子化優先度値マップ580および量子値マップ582を示す。スケジューラ422は、各スレッド520、522、540、542、560、562と関連付けられた量子化優先度値526、532、546、552、566、572を、各スレッド520、522、540、542、560、562の規定優先度値524、530、544、550、564、570にマッピングし、各量子化優先度値を、適切なスレッド520、522、540、542、560、562と関連付けて、量子化優先度値マップ580に保存することができる。加えて、スケジューラ422は、各スレッド520、522、540、542、560、562と関連付けられた量子値528、534、548、554、568、574を、各スレッド520、522、540、542、560、562の規定優先度値524、530、544、550、564、570にマッピングし、各量子値を、適切なスレッド520、522、540、542、560、562と関連付けて、量子値マップ582に保存することができる。量子化優先度値マップ580は、バケットの優先度の割り当てに関係なく、量子化優先度値に基づいて、全てのスレッド436を一覧にする。同様に、量子値マップ582は、バケットの優先度の割り当てに関係なく、量子値に基づいて、全てのスレッド436を一覧にする。
【００３７】
優先順位付けシステム500は、スケジューラ422が、割り当てられたバケット504、506、および508の中でスレッド436を管理し、実行時間/ランタイム中に優先度が転換または変化し得るときに、スレッド436を他のバケット504、506、および508に再び割り当てることを、可能にする。ランタイム中の、それぞれの割り当てられたバケット504、506、および508の中でのスレッド436のこの管理は、スレッド優先度の動的な更新と呼ばれ得る。
【００３８】
一方、量子化優先度値マップ580および量子値マップ582により、スケジューラ422は、個々のバケットの割り当てとは無関係に、かつさほど頻繁ではないがバケットの割り当ての追跡と関連して、複数のスレッド436の優先度を追跡して更新することもできる。個々のバケットの割り当てとは無関係に、かつさほど頻繁ではないがバケットの割り当ての追跡と関連して、マップ580および582に基づいて複数のスレッド436の優先度をこのように追跡して更新することは、一般に、スレッド優先度の静的な更新と呼ばれる。
【００３９】
図6は、複数のスレッドの各々に優先度を割り当てるための方法を示し、全体的に600と表される。ブロック602において開始し、スケジューラ422は、スレッド602の規定優先度値を受け取ることができる。方法600は、ブロック606に進むことができ、スケジューラ422は、スレッドの量子化優先度値を求めることができる。
【００４０】
ブロック608に移り、スケジューラ422は、量子化優先度値を、規定優先度値およびスレッドと関連付けることができる。さらに、ブロック610において、スケジューラ422は、量子値を、規定優先度値およびスレッドと関連付けることができる。その後、方法600は終了することができる。
【００４１】
動作中、スケジューラ422は、各スレッドの規定優先度値、量子化優先度値、および量子値を利用して、各スレッドの処理を制御することができる。たとえば、高い規定優先度値または量子化優先度値を有するスレッドは、低い規定優先度値または量子化優先度値を有するスレッドよりも前に、実行され得る。
【００４２】
2つのスレッドが、実質的に同じ規定優先度値または量子化優先度値を有し、同じバケットに位置する場合、2つのスレッドは、関連する量子値に基づいて処理され得る。そのような場合、一方の特定のスレッドが5ミリ秒(5ms)の量子値を有する場合、もう一方のスレッドは1ミリ秒(1ms)の量子値を有する。5ミリ秒の量子値を有するスレッドは、5ミリ秒の間、または完了するまで(いずれか短い期間)実行することを許され、そして、1ミリ秒の量子値を有するスレッドが、ランまたは実行を許される。特定の態様では、ラウンドロビンスケジューリングにより、2つのスレッドの一方または両方がそれぞれの作業を完了するまで、スレッドの実行をその2つのスレッドの間で交互に行うことを、続けることができる。
【００４３】
図7を参照すると、複数のスレッドを実行する方法が示されており、全体的に700と表される。特定の態様では、オペレーティングシステム(OS)スレッド/プロセススケジューラ422が、少数の別個のバケット504、506、508へ規定スレッド優先度を量子化するために、修正され得る。各バケットは特定の優先度を有してもよく、特定の優先度のスレッドの全てが、バケットの優先度を割り当てられ得る。さらに、特定のバケットの中のスレッドの各々は、優先度が同じであるかのように、スケジューラ422によりランされ、または場合によっては実行され得る。しかし、特定のバケットの中の各スレッドはまた、スケジューラ量子値、すなわち、同じバケットの別のスレッドにより阻止される前にスレッドを実行できる最大のタイムスライスを、割り当てられ得る。スケジューラ422はさらに、各スレッドに割り当てられたスケジューラ量子値に基づいて、各バケットの中のスレッドの優先度を量子化することができる。
【００４４】
たとえば、スケジューラ422は、3つのバケット、たとえば、優先度の高いバケット、優先度が中程度のバケット、および優先度の低いバケットのうちの1つに、各スレッドを配置することができる。そして、各バケットの中の各スレッドの優先度は、スケジューラ量子値に量子化され得る。実行中、特定のバケットの中のスレッドは、別のバケットの中のスレッドよりも前に実行されてよい。たとえば、優先度が中程度および低いバケットよりも前に優先度が高いバケットが実行される、優先度が低いバケットよりも前に優先度が中程度のバケットが実行される、などである。特定のバケットの中のスレッドは、各スレッドの具体的なスケジューラ量子値に基づいて、実行され得る。
【００４５】
各スレッドは、ビデオアプリケーション、音声アプリケーション、電子メールアプリケーション、ワイヤレスネットワークアプリケーション、セルラーネットワークアプリケーション、ショートメッセージサービス(SMS)アプリケーション、通信アプリケーション、セキュリティアプリケーション、カレンダアプリケーション、インスタントメッセージングアプリケーション、スチールカメラアプリケーション、全地球測位システム(GPS)アプリケーション、ブラウザアプリケーション、メモ帳アプリケーション、クロックアプリケーション、ゲームアプリケーション、計算機アプリケーション、銀行業務アプリケーション、パスワードキーパーアプリケーション、ヘルプアプリケーション、電子商取引アプリケーション、ソフトウェア配信アプリケーション、検索アプリケーション、オプションアプリケーション、確立アプリケーション、電話アプリケーション、接続管理アプリケーション、セキュリティアプリケーション、任意の他のアプリケーション、またはそれらの組合せと関連付けられる、ワークロードの一部であってよい。
【００４６】
ブロック704で開始して、休止中のスレッド706を実行する準備ができた場合、スケジューラ422は、3つの異なる優先度を有する3つのバケットを作成することによって、スレッド規定優先度値を量子化優先度値にマッピングすることができる。特定の態様では、量子化優先度値は、特定のスレッドに対して求められた実際のランタイムに基づいて、求められ得る。特定の態様では、スケジューラ422は、図5の量子化マップ580のように、スレッド規定優先度値を量子化優先度値に静的にマッピングすることができる。別の態様では、スケジューラ422は、図5の量子マップ582のように、スレッド規定優先度値を量子値に静的にマッピングすることができる。
【００４７】
特定の態様では、休止中のスレッド706は、まだ実行キューにはないスレッド、実行をちょうど開始したスレッド、またはこれらの組合せであってよい。ブロック708において、スケジューラ422は、実行の準備ができているキューにスレッドを追加することができる。さらに、ブロック710において、スケジューラ422は、スレッド量子化優先度値、スレッド量子値、またはこれらの組合せを、更新することができる。特定の態様では、スケジューラ422は、スレッド量子化優先度値、スレッド量子値、またはこれらの組合せを、図8の静的な更新方法710Aまたは図9の動的な更新方法710Bを用いることで、以下で説明されるように静的に更新することができる。
【００４８】
ブロック712に移り、スケジューラ422は、実行されるべき、すなわちプロセッサにおいて実行される、実行キュー上で最高の量子化優先度値を有する次のスレッドを選択することができる。特定の態様では、スケジューラ422は、ラウンドロビン方式で、最高の量子化優先度値を有する次のスレッドを選択することができる。または、スケジューラ422は、当技術分野でよく知られる任意の他の方式でこの選択を行ってもよい。ブロック714において、スケジューラ422は、スレッド規定優先度値を、スレッド量子値、すなわちタイムスライスにマッピングすることができる。その後、スレッドは、プロセッサにおいてランされ、または場合によっては実行され得る。プロセッサは、シングルコアCPU、マルチコアCPU、複数のシングルコアCPU、複数のマルチコアCPU、またはそれらの組合せであってよい。
【００４９】
判定718に移り、スケジューラ422は、実行中のスレッド716と関連付けられた作業が完了したかどうかを判定することができる。作業が完了していない場合、方法700は、ブロック710に戻ることができ、本明細書で説明するように継続することができる。判定718において、作業が完了している場合、方法700は、ブロック720に進むことができ、スレッドは休止状態に入ることができる。その後、方法700は終了することができる。
【００５０】
図8を参照すると、スレッド優先度の量子化、スレッド量子値、またはこれらの組合せを静的に更新する方法710Aが示され、全体的に710Aと表される。図8に示される方法710Aは、スレッド優先度の量子化、スレッド量子値、またはこれらの組合せを更新するために、スケジューラ422により実行され得る。
【００５１】
ブロック802において開始して、スケジューラ422は、特定のスレッドと関連付けられる平均のランタイムを更新することができる。ブロック804において、スケジューラ422は、スレッド規定優先度値を、スレッド量子化優先度値に静的にマッピングすることができる。言い換えると、図5の量子化スレッド優先度マップ(MapQuantizedPriority)580の中での位置が、スレッドと関連付けられた量子化優先度値と等しくなるように設定され得る。
【００５２】
特定の態様では、量子化優先度値マップは、スレッドの優先度を量子化された優先度の1つにマッピングする、静的な表であってよい。ブロック806に移り、スケジューラ422は、スレッド規定優先度値を、スレッド量子値に静的にマッピングすることができる。言い換えると、図5のスレッド量子値マップ(MapThreadQuantum value)582の中での位置が、スレッドと関連付けられたスレッド量子値と等しくなるように設定され得る。スレッド量子値マップは、スレッドの優先度を、スレッド量子値、すなわちタイムスライスにマッピングする、静的な表であってよい。その後、方法710Aは終了することができる。
【００５３】
図9は、スレッド優先度の量子化、スレッド量子値、またはこれらの組合せを動的に更新する方法710Bを示す。方法は、全体的に710Bと表される。さらに、図9に示される方法710Bは、スレッド優先度の量子化、スレッド量子値、またはこれらの組合せを更新するために、スケジューラ422により実行され得る。
【００５４】
ブロック902において開始して、スケジューラ422は、特定のスレッドと関連付けられる平均のランタイムを更新することができる。ブロック904において、スケジューラ422は、量子値(スレッド)の値を、平均ランタイム(スレッド)の値と等しくなるように設定することができる。量子値(スレッド)の値は、スレッドと関連付けられた現在の量子値であってよい。さらに、平均ランタイム(スレッド)の値は、休止期間と休止期間の間の、スレッドが実行される平均の期間であってよい。
【００５５】
判定906に移り、スケジューラ422は、量子化優先度(スレッド)の値が、最大優先度(スレッド)の値よりも小さいかどうかを判定することができ、ここで、量子化優先度(スレッド)の値は、スレッドと関連付けられた現在の量子化優先度値であり、最大優先度(スレッド)の値は、スレッドを実行すべき最大の優先度である。量子化優先度(スレッド)の値が、最大優先度(スレッド)の値よりも小さい場合、方法710Bは判定908に進むことができ、スケジューラ422は、平均ランタイム(スレッド)の値が最小平均ランタイム(バケット)の値よりも小さいかどうかを判定することができ、ここで、最小平均ランタイム(バケット)の値は、特定のバケットの中の全てのスレッドが維持すべき、最小の平均ランタイムである。
【００５６】
平均ランタイム(スレッド)の値が、最小平均ランタイム(バケット)の値よりも小さい場合、方法710Bはブロック910に進むことができ、スケジューラ422は、次により大きな量子化優先度値に等しくなるように、量子化優先度(スレッド)の値を設定することができる。すなわち、スレッドは、現在のバケットの優先度よりも高い優先度を有する、バケットの列の中の次のバケットに、昇格する。その後、方法710Bは判定906に戻ることができ、方法710Bは本明細書で説明するように継続することができる。判定908に戻り、平均ランタイム(スレッド)の値が、最小平均ランタイム(バケット)の値よりも小さくない場合、すなわちそれ以上である場合、方法710Bは判定912に進むことができる。さらに、判定906に戻り、量子化優先度(スレッド)の値が、最大優先度(スレッド)の値よりも小さくない場合、すなわちそれ以上である場合も、方法710Bは判定912に進むことができる。
【００５７】
判定912において、スケジューラ422は、量子化優先度(スレッド)の値が、最小優先度(スレッド)の値よりも大きいかどうか判定することができ、ここで、最小優先度(スレッド)の値は、スレッドを実行すべき最小の優先度である。量子化優先度(スレッド)の値が、最小優先度(スレッド)の値よりも大きい場合、方法710Bは判定914に進むことができ、スケジューラ422は、平均ランタイム(スレッド)の値が最大平均ランタイム(バケット)の値よりも大きいかどうかを判定することができ、ここで、最大平均ランタイム(バケット)の値は、特定の、すなわち現在のバケットの中の全てのスレッドが維持すべき、最大の平均ランタイムである。
【００５８】
平均ランタイム(スレッド)の値が、最大平均ランタイム(バケット)の値よりも大きい場合、方法710Bはブロック916に進むことができ、スケジューラ422は、次に小さな量子化優先度値に等しくなるように、量子化優先度(スレッド)の値を設定することができる。すなわち、スレッドは、現在のバケットの優先度よりも低い優先度を有する、バケットの列の中の次のバケットに、降格される。その後、方法は判定912に戻ることができ、方法710Bは本明細書で説明するように継続することができる。判定914に戻り、平均ランタイム(スレッド)の値が、最大平均ランタイム(バケット)の値よりも大きくない場合、すなわちそれ以下である場合、方法710Bは図10の判定1002に進むことができる。判定912に戻り、量子化優先度(スレッド)の値が、最小優先度(スレッド)の値よりも大きくない場合、すなわちそれ以下である場合も、方法710Bは図10の判定1002に進むことができる。
【００５９】
図10の判定1002において、スケジューラ422は、平均スケジューリング時間(バケット)の値が、最大平均スケジューリング時間(バケット)の値よりも大きいかどうか判定することができ、ここで、平均スケジューリング時間(バケット)の値は、スレッドが特定のバケットの中にある場合に、スレッドが実行キュー上に配置された後に開始するまでにかかる平均の時間であり、最大平均スケジューリング時間(バケット)の値は、特定のバケットに対して望まれる最大の平均スケジューリング時間であってよい。特定の態様では、スレッドの配置は、最初の配置であってもよく、または、スレッドが実行され量子値を使い果たした後の、再配置であってもよい。
【００６０】
平均スケジューリング時間(バケット)の値が、最大平均スケジューリング時間(バケット)の値よりも大きくない場合、すなわちそれ以下である場合、方法710Bは終了することができる。また、平均スケジューリング時間(バケット)の値が最大平均スケジューリング時間(バケット)の値よりも大きい場合、方法710Bは判定1004に進むことができ、スケジュールは、最大スレッド量子値(バケット)の値が最小スレッド量子値(バケット)の値よりも大きいかどうかを判定することができ、ここで、最大スレッド量子値(バケット)の値は、特定のバケットの中の任意のスレッドに対する最大の量子値であり、最小スレッド量子値(バケット)の値は、特定のバケットの中の任意のスレッドに対して望まれる最小のスレッド量子値である。最大スレッド量子値(バケット)の値が最小スレッド量子値(バケット)の値よりも実際に大きい場合は、方法710Bはブロック1006に進むことができる。
【００６１】
ブロック1006において、スケジューラ422は、量子値(最大スレッド)の値を整数1だけ下げることができ、ここで量子値(最大スレッド)の値は、特定のバケットの中の最大のスレッド量子値である。さらに、ブロック1006において、スケジューラ422は、平均スケジューリング時間(バケット)の値を整数1だけ下げることができる。その後、方法710Bは判定1002に戻ることができ、方法710Bは本明細書で説明するように継続することができる。
【００６２】
判定1004に戻り、最大スレッド量子値(バケット)の値が、最小スレッド量子値(バケット)の値よりも大きくない場合、すなわちそれ以下である場合、方法710Bは判定1008に進むことができる。判定1008において、方法710Bは、最も低い最小スレッド優先度(バケット)の値が優先度(バケット)の値よりも小さいかどうか判定することができ、ここで、最も低い最小スレッド優先度(バケット)の値は、特定のバケットの中の任意のスレッドに対する最も低い最小の優先度であり、優先度(バケット)の値は、特定のバケットの優先度である。最も低い最小スレッド優先度(バケット)の値が、優先度(バケット)の値よりも小さくない場合、すなわちそれ以上である場合、方法710Bは終了することができる。
【００６３】
逆に、最も低い最小スレッド優先度(バケット)の値が、優先度(バケット)の値よりも小さい場合は、方法710Bはブロック1010に進むことができる。ブロック1010において、スケジューラ422は、量子化優先度(最低スレッド)の値を、次のより小さな量子化優先度値と等しくなるように設定することができ、ここで、最低スレッドは、最も低い最小の優先度を有するスレッドである。すなわち、最も低い最小の優先度を有するスレッドは、現在のバケットの優先度よりも低い優先度を有する、バケットの列の中の次のバケットに、降格される。さらに、ブロック1010において、スケジューラ422は、平均スケジューリング時間(バケット)の値を、平均スケジューリング時間(バケット)の値から量子値(最低スレッド)の値を引いたものと、0との、大きい方に等しくなるように設定することができ、ここで、量子値(最低スレッド)の値は、現在のバケットの中で最も低い最小の優先度を有するスレッドの、量子値である。その後、方法710Bは判定1002に戻ることができ、方法710Bは本明細書で説明するように継続することができる。
【００６４】
本明細書で説明する方法ステップは、必ずしも説明どおりの順序で実施する必要はないことを理解されたい。さらに、「その後」、「次いで」、「次に」などの語は、ステップの順序を限定することを意図していない。これらの語は、方法ステップの説明を通じて読者を案内するために使用されているにすぎない。さらに、本明細書で説明する方法はポータブルコンピューティングデバイス(PCD)上で実行可能なものとして説明している。PCDはモバイル電話デバイス、携帯情報端末デバイス、スマートブックコンピューティングデバイス、ネットブックコンピューティングデバイス、ラップトップコンピューティングデバイス、デスクトップコンピューティングデバイス、またはそれらの組合せであってよい。さらに、本明細書で説明される方法ステップは、シングルコアプロセッサ、マルチコアプロセッサ、複数のシングルコアプロセッサ、複数のマルチコアプロセッサ、またはそれらの任意の組合せ上で実行され得る。
【００６５】
本明細書で説明される構成により、システムおよび方法は、スレッドの優先度を、少数のスケジューリング可能な優先度と、スレッドに対するスケジューラの量子値(タイムスライス)とに、量子化することができる。さらに、システムおよび方法は、複数のスレッドが同じ実質的な優先度に量子化された場合に、優先度の高いスレッドが連続的に実行されることによって引き起こされる、優先度の低いスレッドの完全な妨害を実質的に防ぐことができる。システムおよび方法はまた、複数のスレッドが同じ実質的な優先度に量子化された場合に、優先度の高いスレッドが連続的に実行されることによって、優先度の低いスレッドが妨害される最大の期間の限度を、実質的に短くすることもできる。
【００６６】
特定の態様では、本明細書のシステムおよび方法は、スレッドの優先度により引き起こされる競合状態および妨害を追跡する際の複雑さを、たとえば、スレッドの優先度の数を減らすことによって、実質的に低減することができる。さらに、本明細書で説明されるシステムおよび方法は、スレッドがスケジューラの実行キュー上にあるときに、規定優先度の高いスレッドが、他のスレッドを妨害することなく、より大きな割合の処理時間を得られるようにし得る。本明細書のシステムおよび方法は、さらに、実質的な優先度を変えることなく、スレッドのCPU利用率を向上させるように規定スレッド優先度を変更することを可能にし得るので、望ましくない、または場合によっては予期しない、他のスレッドの妨害および/または競合状態をもたらさないようにし得る。
【００６７】
特定の態様では、本明細書のシステムおよび方法は、スケジューリング可能な優先度のレベルの数を減らすことで、スレッドの妨害を実質的に減らすことができる。規定優先度値をより少数の優先度に量子化して、各スレッドをタイムスライスに分けることによって、規定優先度が異なるスレッドが同じ量子化優先度値にマッピングされた場合はいつでも、たとえば、優先度の高いスレッドが常に実行されることにより引き起こされる完全な妨害を、実質的に防ぐことができる。さらに、規定優先度値をより少数の優先度に量子化して、各スレッドをタイムスライスに分けることによって、たとえば、優先度の高いスレッドが常に実行されることにより引き起こされる妨害の長さを、同じ量子化優先度値にマッピングされ同時に実行されるようにスケジューリングされた全ての他のスレッドの、累積のタイムスライスの最大値にまで、実質的に短くすることができる。別の態様では、規定優先度値をより少数の優先度に量子化することによって、妨害および/または競合状態が起きる可能性が実質的に下がる。なぜなら、そのような状態が存在しないことを確認するのに必要な分析は、関与する優先度の組合せの数によるからである。
【００６８】
本明細書で説明されるシステムおよび方法は、優先度の高いスレッドにより高い量子値をマッピングすることによって、規定優先度の高いスレッドが、より長いCPU時間を得られるようにし得る。特定の態様では、スレッド量子値が高いほど、スレッドは、阻止される前により長くランまたは実行され得る。したがって、優先度の低いスレッドが実行を許可され得る場合でも、スレッドは、潜在的に高い割合のCPU利用率を有し得る。さらに、スレッド量子化優先度値が同じままになるようにスレッド規定優先度値を変えても、スレッドの実質的な優先度は変わらず、デッドロックおよび/または競合状態の基本的な増加にはつながらない。
【００６９】
1つまたは複数の例示的な態様では、説明した機能は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの組合せで実装することができる。ソフトウェアで実装した場合、これらの機能を機械可読媒体すなわちコンピュータ可読媒体などのコンピュータプログラム製品に記憶すること、またはそのようなコンピュータプログラム製品上の1つもしくは複数の命令あるいはコードとして送信することができる。コンピュータ可読媒体は、コンピュータ記憶媒体と通信媒体の両方を含み、1つの場所から別の場所へのコンピュータプログラムの転送を容易にするあらゆる媒体を含む。記憶媒体は、コンピュータによってアクセスされ得る任意の利用可能な媒体であってよい。限定ではなく、例として、そのようなコンピュータ可読媒体は、RAM、ROM、EEPROM、CD-ROM、または他の光ディスク記憶装置、磁気ディスク記憶装置もしくは他の磁気記憶デバイス、または命令もしくはデータ構造の形式で所望のプログラムコードを伝送もしくは記憶するために使用でき、コンピュータによってアクセスされ得るその他の媒体を含むことができる。また、あらゆる接続がコンピュータ可読媒体と適切に呼ばれる。たとえば、ソフトウェアがウェブサイト、サーバ、または他のリモートソースから同軸ケーブル、光ファイバーケーブル、より対線、デジタル加入者回線(DSL)、または赤外線、無線およびマイクロ波などのワイヤレス技術を使用して送信される場合、同軸ケーブル、光ファイバーケーブル、より対線、DSL、または赤外線、無線およびマイクロ波などのワイヤレス技術は、媒体の定義に含まれ得る。本明細書で使用するディスク(diskおよびdisc)は、コンパクトディスク(disc)(CD)、レーザディスク(disc)、光ディスク(disc)、デジタル多目的ディスク(disc)(DVD)、フレキシブルディスク(disk)およびブルーレイディスク(disc)を含み、diskは通常、磁気的にデータを再生し、discはレーザで光学的にデータを再生する。上記の組合せもコンピュータ可読媒体の範囲内に含まれるものとする。
【００７０】
選択された態様について詳細に説明し、詳述してきたが、以下の請求項によって定められた本発明の趣旨および範囲から離れることなく、そのような態様において様々な代替および改変を実施できることが理解されよう。
【符号の説明】
【００７１】
100  ポータブルコンピューティングデバイス
108  ディスプレイ
322  オンチップシステム
324  マルチコアCPU
325  第0のコア
344  メモリ
400  処理システム
416  第1のDCVSアルゴリズム
420  オペレーティングシステム
422  タイムスケジューラ
424  第1の実行キュー
430  第1のアプリケーション
500  優先順位付けシステム
504  第1のバケット
520  第1のスレッド
524  規定優先度値
526  量子化優先度値
528  量子値
580  量子化優先度値マップ
582  量子値マップ
【図３】
0005593404.tif 000002
【図４】
0005593404.tif 000003
【図５】
0005593404.tif 000004
【図６】
0005593404.tif 000005
【図７】
0005593404.tif 000006
【図８】
0005593404.tif 000007
【図１】
0005593404.tif 000008
【図２】
0005593404.tif 000009