(57)【要約】  パーソナル電子機器向けのサービスは、マルチタスキングやバックグラウンド処理の形態がサポートされることを通じて提供される。開示されるサービスは、フォアグラウンドプロセスのユーザエクスペリエンスまたはパーソナル電子機器の電源リソースに対する大きくネガティブな影響なしに、ユーザアプリケーションがバックグラウンド処理を利用することを許容する。開示されるマルチタスキングを達成するために、一つ以上の動作制限数が強制されるかもしれない。そのような制限の結果は、プロセスがバックグラウンド状態にある場合はそれを行うことができず、フォアグラウンド状態では行うことができるということだろう。開示されるサービスの実施は、実行中のユーザアプリケーションに対して実質的に透過であり、幾つかのケースにおいて、ユーザアプリケーションの明示的な協調がなくても実施することができる。【選択図】  図6
2013524362.tif 000002
【特許請求の範囲】
【請求項１】
マルチタスキング方法であって、
フォアグラウンド状態で実行される第一のユーザアプリケーションを識別し、
前記フォアグラウンド状態に置かれるべき第二のユーザアプリケーションを指示するユーザ入力を受信し、
前記第一のユーザアプリケーションが自身をバックグラウンド状態で実行可能なユーザアプリケーションとして識別している場合、前記受信したユーザ入力に応答して、前記第一のユーザアプリケーションを前記バックグラウンド状態に置き、
前記第二のユーザアプリケーションを前記フォアグラウンド状態に置く方法。
【請求項２】
さらに、前記第一のユーザアプリケーションが自身を前記バックグラウンド状態で実行可能なユーザアプリケーションとして識別していない場合、前記第一のユーザアプリケーションを非実行状態に置く請求項1に記載された方法。
【請求項３】
さらに、前記第一のユーザアプリケーションが前記バックグラウンド状態に置かれた後、前記第一のユーザアプリケーションが所定のハードウェアリソースのアクセスを試みる場合、前記第一のユーザアプリケーションを非実行状態に置く請求項1に記載された方法。
【請求項４】
前記所定のハードウェアリソースにはグラフィクス処理ユニットが含まれる請求項3に記載された方法。
【請求項５】
前記所定のハードウェアリソースにはカメラデバイスが含まれる請求項3に記載された方法。
【請求項６】
さらに、第一のユーザプロセスがタスクを完了した後、前記第一のユーザアプリケーションをサスペンド状態に移し、
前記タスクは、前記バックグラウンド状態に置かれた前記第一のユーザアプリケーションが実行したタスクである請求項1に記載された方法。
【請求項７】
さらに、前記バックグラウンド状態において第一のユーザプロセスが所定時間実行された後、前記第一のユーザアプリケーションをサスペンド状態に移す請求項1に記載された方法。
【請求項８】
さらに、第一のユーザプロセスが前記バックグラウンド状態に移されるタイミングにおいて、前記第一のユーザプロセスは、ネットワークアップロード動作、ネットワークダウンロード動作、ディスク格納動作およびディスクリトリーブ動作から構成されるグループから選択された動作を実行している請求項1に記載された方法。
【請求項９】
さらに、前記第一のユーザアプリケーションが共有システムリソースにロックオンした場合、前記第一のユーザアプリケーションを前記バックグラウンド状態から終了状態に移す請求項1に記載された方法。
【請求項１０】
前記共有システムリソースには共有ファイルディスクリプタが含まれる請求項9に記載された方法。
【請求項１１】
プログラマブル制御デバイスに請求項1に従う方法を実行させるための命令が格納された前記プログラマブル制御デバイスが読み取り可能なプログラム格納デバイス。
【請求項１２】
メモリと、
前記メモリに格納されたコンピュータプログラム命令と、
前記メモリに接続されたプログラマブル制御デバイスとを有するパーソナル電子機器であって、前記コンピュータプログラム命令を実行する前記プログラマブル制御デバイスは、
フォアグラウンド状態で実行される第一のユーザアプリケーションを識別し、
前記フォアグラウンド状態に置かれるべき第二のユーザアプリケーションを指示するユーザ入力を受信し、
前記第一のユーザアプリケーションが自身をバックグラウンド状態で実行可能なユーザアプリケーションとして識別している場合、前記受信したユーザ入力に応答して、前記第一のユーザアプリケーションを前記バックグラウンド状態に置き、
前記第二のユーザアプリケーションを前記フォアグラウンド状態に置くパーソナル電子機器。
【請求項１３】
前記パーソナル電子機器は、携帯電話、パーソナルディジタルアシスタント、ハンドヘルドエンターテイメント機器、パッドコンピュータシステムおよびセットトップボックスから構成されるグループから選択されたパーソナル電子機器である請求項12に記載されたパーソナル電子機器。
【請求項１４】
パーソナル電子機器のマルチタスキング方法であって、
パーソナル電子機器において、フォアグラウンド状態でオーディオ動作を実行する第一のユーザアプリケーションを識別し、
前記パーソナル電子機器から、前記フォアグラウンド状態に置かれるべき第二のユーザアプリケーションを識別する第一のユーザ入力を受信し、
前記受信した第一のユーザ入力に応答して前記第一のユーザアプリケーションを前記バックグラウンド状態に置き、前記第一のユーザアプリケーションは前記オーディオ動作の実行を継続し、
前記第二のユーザアプリケーションを前記フォアグラウンド状態に置き、
前記第一のユーザアプリケーションの一時停止を指示する第二のユーザ入力を受信し、
前記受信した第二のユーザ入力に応答して前記第一のユーザアプリケーションを非実行状態に置く方法。
【請求項１５】
前記第一のユーザアプリケーションを非実行状態に置く処理は、前記第一のユーザアプリケーションをサスペンド状態に置くことを含む請求項14に記載された方法。
【請求項１６】
さらに、前記第一のユーザアプリケーションの継続を指示する第三のユーザ入力を受信し、
前記オーディオ動作の実行を継続するために、前記第一のユーザアプリケーションを前記非実行状態から前記バックグラウンド状態に移す請求項14に記載された方法。
【請求項１７】
前記オーディオ動作を実行する処理はオーディオ信号の生成を含む請求項14に記載された方法。
【請求項１８】
前記オーディオ動作を実行する処理はオーディオ信号の記録を含む請求項14に記載された方法。
【請求項１９】
プログラマブル制御デバイスに請求項14に従う方法を実行させるための命令が格納された前記プログラマブル制御デバイスが読み取り可能なプログラム格納デバイス。
【請求項２０】
メモリと、
前記メモリに格納されたコンピュータプログラム命令と、
前記メモリに接続されプログラマブル制御デバイスとを有するパーソナル電子機器であって、前記コンピュータプログラム命令を実行する前記プログラマブル制御デバイスは、
前記パーソナル電子機器から、フォアグラウンド状態に置かれるべき第二のユーザアプリケーションを識別する第一のユーザ入力を受信し、
前記受信した第一のユーザ入力に応答して第一のユーザアプリケーションをバックグラウンド状態に置き、前記第一のユーザアプリケーションはオーディオ動作の実行を継続し、
前記第二のユーザアプリケーションを前記フォアグラウンド状態に置き、
前記第一のユーザアプリケーションの一時停止を指示する第二のユーザ入力を受信し、
前記受信した第二のユーザ入力に応答して前記第一のユーザアプリケーションを非実行状態に置くパーソナル電子機器。
【請求項２１】
前記パーソナル電子機器は、携帯電話、パーソナルディジタルアシスタント、ハンドヘルドエンターテイメント機器、パッドコンピュータシステムおよびセットトップボックスから構成されるグループから選択されたパーソナル電子機器である請求項20に記載されたパーソナル電子機器。
【請求項２２】
マルチタスキング方法であって、
パーソナル電子機器において、サスペンドされたネットワーク通信アプリケーションあてのメッセージを受信し、
前記パーソナル電子機器において、特定のネットワーク通信アプリケーションを識別し、
前記識別したネットワーク通信アプリケーションをバックグラウンド状態に移し、
前記バックグラウンド状態の前記識別したネットワーク通信アプリケーションに前記メッセージを供給する方法。
【請求項２３】
前記ネットワーク通信アプリケーションにはボイスオーバインターネットプロトコル(VOIP)アプリケーションが含まれる請求項22に記載された方法。
【請求項２４】
前記ネットワーク通信アプリケーションにはワイファイ(WiFi)アプリケーションが含まれる請求項22に記載された方法。
【請求項２５】
さらに、前記特定のネットワーク通信アプリケーションが前記メッセージに応答した後、前記特定のネットワーク通信アプリケーションを前記バックグラウンド状態からサスペンド状態に移す請求項22に記載された方法。
【請求項２６】
プログラマブル制御デバイスに請求項22に従う方法を実行させるための命令が格納された前記プログラマブル制御デバイスが読み取り可能なプログラム格納デバイス。
【請求項２７】
メモリと、
前記メモリに格納されたコンピュータプログラム命令と、
前記メモリに接続されたプログラマブル制御デバイスとを有するパーソナル電子機器であって、、前記メモリ内の命令を実行する前記プログラマブル制御デバイスは、
前記パーソナル電子機器において、サスペンドされたネットワーク通信アプリケーションあてのメッセージを受信し、
前記パーソナル電子機器において、特定のネットワーク通信アプリケーションを識別し、
前記識別したネットワーク通信アプリケーションをバックグラウンド状態に移し、
前記バックグラウンド状態の前記識別したネットワーク通信アプリケーションに前記メッセージを供給するパーソナル電子機器。
【請求項２８】
前記パーソナル電子機器は、携帯電話、パーソナルディジタルアシスタント、ハンドヘルドエンターテイメント機器、パッドコンピュータシステムおよびセットトップボックスから構成されるグループから選択されたパーソナル電子機器である請求項27に記載されたパーソナル電子機器。
【請求項２９】
マルチタスキング方法であって、
フォアグラウンド状態で実行される第一のユーザアプリケーションを識別し、
前記フォアグラウンド状態に置かれるべき第二のアプリケーションを指示するユーザ入力を受信し、
前記第一のユーザアプリケーションが共有システムリソースに少なくともロックオンしている場合は前記第一のユーザアプリケーションを終了し、あるいは、前記第一のユーザアプリケーションが自身をバックグラウンド状態で実行可能なユーザアプリケーションとして識別している場合は、前記受信したユーザ入力に応答して、前記第一のユーザアプリケーションを前記バックグラウンド状態に置き、
前記第二のアプリケーションを前記フォアグラウンド状態に置く方法。
【請求項３０】
さらに、前記第一のユーザアプリケーションが前記バックグラウンド状態に置かれた後、優先度レベルに従いプロセッサを使用するために前記第一のユーザアプリケーションをスケジューリングし、
前記優先度レベルは、フォアグラウンドプロセスに割り当てられた優先度レベルのすべてではなく幾つかが重なる優先度レベルのバンドから選択される請求項29に記載された方法。
【請求項３１】
さらに、前記第一のユーザアプリケーションが前記バックグラウンド状態に置かれた後、前記第一のユーザアプリケーションが所定のハードウェアリソースをターゲットとする命令の実行を試みる場合、前記第一のユーザアプリケーションを終了する請求項29に記載された方法。
【請求項３２】
前記所定のハードウェアリソースにはグラフィクス処理ユニットが含まれる請求項31に記載された方法。
【請求項３３】
さらに、前記第一のユーザアプリケーションが前記バックグラウンド状態になると、前記第一のユーザアプリケーションの命令がディスプレイメモリの変更を指示する場合、当該命令は実行されない請求項29に記載された方法。
【請求項３４】
前記共有システムリソースには共有ファイルディスクリプタが含まれる請求項29に記載された方法。
【請求項３５】
前記第二のアプリケーションを前記フォアグラウンド状態に置く処理は、オペレーティングシステムアプリケーションを前記フォアグラウンド状態に置くことを含む請求項29に記載された方法。
【請求項３６】
プログラマブル制御デバイスに請求項29に従う方法を実行させるための命令が格納された前記プログラマブル制御デバイスが読み取り可能なプログラム格納デバイス。
【請求項３７】
メモリと、
前記メモリに格納されたコンピュータプログラム命令と、
前記メモリに接続されたプログラマブル制御デバイスとを有するパーソナル電子機器であって、前記メモリに格納された命令を実行する前記プログラマブル制御デバイスは、
フォアグラウンド状態で実行される第一のユーザアプリケーションを識別し、
前記フォアグラウンド状態に置かれるべき第二のアプリケーションを指示するユーザ入力を受信し、
前記第一のユーザアプリケーションが共有システムリソースに少なくともロックオンしている場合は前記第一のユーザアプリケーションを終了し、あるいは、前記第一のユーザアプリケーションが自身をバックグラウンド状態で実行可能なユーザアプリケーションとして識別している場合は、前記受信したユーザ入力に応答して、前記第一のユーザアプリケーションを前記バックグラウンド状態に置き、
前記第二のアプリケーションを前記フォアグラウンド状態に置くパーソナル電子機器。
【請求項３８】
前記パーソナル電子機器は、携帯電話、パーソナルディジタルアシスタント、ハンドヘルドエンターテイメント機器、パッドコンピュータシステムおよびセットトップボックスから構成されるグループから選択されたパーソナル電子機器である請求項37に記載されたパーソナル電子機器。
【請求項３９】
前記第二のアプリケーションには第二のユーザアプリケーションが含まれる請求項37に記載されたパーソナル電子機器。
【請求項４０】
マルチタスキング方法であって、
第一の時間に、第一のユーザボイスオーバインターネットプロトコル(VOIP)アプリケーションを開始し、
前記第一のユーザVOIPアプリケーションのための一つ以上の通信ソケットを示し、
第二の時間に、前記第一のユーザVOIPアプリケーションを非実行状態に置き、
第三の時間に、前記一つ以上の通信ソケットに関連する通知を受信し、
前記通知の受信に応答して、前記第一のユーザVOIPアプリケーションをバックグラウンド状態に置き、
前記第一のユーザVOIPアプリケーションが前記通知に応答した後、前記第一のユーザVOIPアプリケーションを前記非実行状態に戻し、
前記第一の時間は前記第二の時間に先行し、前記第二の時間は前記第三の時間に先行する方法。
【請求項４１】
前記非実行状態は、サスペンド状態および休止状態から構成されるグループから選択される請求項40に記載された方法。
【請求項４２】
前記第一のユーザVOIPアプリケーションを非実行状態に置く処理は、前記第一のユーザVOIPアプリケーションをサスペンド状態に置くことを含む請求項40に記載された方法。
【請求項４３】
プログラマブル制御デバイスに請求項40に従う方法を実行させるための命令が格納された前記プログラマブル制御デバイスが読み取り可能なプログラム格納デバイス。
【請求項４４】
メモリと、
前記メモリに接続された受信手段と、
前記メモリに接続された送信手段と、
前記メモリに接続されたプログラマブル制御デバイスとを有するパーソナルハンドヘルド電子機器であって、前記メモリに格納された命令を実行する前記プログラマブル制御デバイスは、
第一の時間に、第一のユーザボイスオーバインターネットプロトコル(VOIP)アプリケーションを開始し、
前記第一のユーザVOIPアプリケーションのための一つ以上の通信ソケットを示し、
第二の時間に、前記第一のユーザVOIPアプリケーションを非実行状態に置き、
第三の時間に、前記一つ以上の通信ソケットに関連する通知を受信し、
前記通知の受信に応答して、前記第一のユーザVOIPアプリケーションをバックグラウンド状態に置き、
前記第一のユーザVOIPアプリケーションが前記通知に応答した後、前記第一のユーザVOIPアプリケーションを前記非実行状態に戻し、
前記第一の時間は前記第二の時間に先行し、前記第二の時間は前記第三の時間に先行するパーソナルハンドヘルド電子機器。
【請求項４５】
ハンドヘルドディジタル機器のマルチタスキング方法であって、
第一の時間に、第一のユーザアプリケーションための少なくとも一つのボイスオーバインターネットプロトコル(VOIP)ソケットを示し、
第二の時間に、前記第一のユーザアプリケーションをサスペンド状態に置き、
第三の時間に、前記第一のユーザアプリケーションあてのメッセージを受信し、
第四の時間に、前記第一のユーザアプリケーションをバックグラウンド状態に置き、
第五の時間に、前記メッセージを前記第一のユーザアプリケーションに配信し、
第六の時間に、前記メッセージに応答した前記第一のユーザアプリケーションから通知を受信し、
第七の時間に、前記第一のユーザアプリケーションをサスペンド状態に置く方法。
【請求項４６】
前記メッセージにはハートビート要求メッセージが含まれる請求項45に記載された方法。
【請求項４７】
前記第六の時間において、前記メッセージに応答した前記第一のユーザアプリケーションから通知を受信する処理は、ユーザ用のユーザインタフェイス要素を表示することを含み、
前記ユーザインタフェイス要素は、前記第一のユーザアプリケーションを(i)使用するまたは(ii)無視するオプションをユーザに与える請求項45に記載された方法。
【請求項４８】
前記ユーザが前記第一のユーザアプリケーションを無視する前記ユーザインタフェイスオプションを選択した場合は、前記第七の時間に、前記第一のユーザアプリケーションを前記サスペンド状態に置く処理が発生し、そうでない場合は、前記第一のユーザアプリケーションはフォアグラウンド状態に置かれる請求項47に記載された方法。
【請求項４９】
制限されたマルチタスキングオペレーティングシステムにおける処理のスケジューリング方法であって、
優先度レベルの第一のバンドからのスケジューリング優先度を有する第一のフォアグラウンドプロセスをスケジューリングし、
優先度レベルの第二のバンドからのスケジューリング優先度を有する第一のバックグラウンドプロセスをスケジューリングし、
前記第一のバンドの優先度レベルと前記第二のバンドの優先度レベルは、すべてではなく幾つかが重なっている方法。
【請求項５０】
さらに、リアルタイム優先度バンドからの優先度を有する第三のプロセスをスケジューリングし、
前記リアルタイム優先度バンドの全優先度レベルは、前記第一のバンドの全優先度レベルよりも高い請求項49に記載された方法。
【請求項５１】
前記第三のプロセスをスケジューリングする処理は、バックグラウンドプロセスをスケジューリングすることを含む請求項50に記載された方法。
【請求項５２】
マルチタスキング方法であって、
フォアグラウンド状態で実行され、ユーザ入力を受信する第一のユーザアプリケーションを識別し、
前記フォアグラウンド状態で実行され、ユーザ入力を受信しない第二のユーザアプリケーションを識別し、
ユーザ入力を受信しない前記第二のフォアグラウンドアプリケーションによる、一つ以上の所定のシステムリソースに対するアクセスを制限する方法。
【請求項５３】
前記一つ以上の所定のシステムリソースは、カメラ、グラフィックス処理ユニット、加速度計、近接センサおよびマイクから構成されるグループから選択される請求項52に記載された方法。
【請求項５４】
前記一つ以上の所定のシステムリソースに対する前記第二のフォアグラウンドアプリケーションのアクセスを制限する処理は、実際の着信ネットワークバッファのサイズよりも小さいサイズを末端のソースに報告することを含む請求項52に記載された方法。
【請求項５５】
プログラマブル制御デバイスに請求項52に従う方法を実行させるための命令が格納された前記プログラマブル制御デバイスが読み取り可能なプログラム格納デバイス。
【請求項５６】
マルチタスキング方法であって、
フォアグラウンド状態で実行される第一のユーザアプリケーションを識別し、
前記フォアグラウンド状態に置かれるべき第二のユーザアプリケーションを指示するユーザ入力を受信し、
前記受信したユーザ入力に応答して、前記第一のユーザアプリケーションをサスペンドし、
前記第二のユーザアプリケーションを前記フォアグラウンド状態に置く方法。
【請求項５７】
前記サスペンドする処理は、前記第一のユーザアプリケーションが自身をバックグラウンド状態で実行可能なアプリケーションとして識別していない場合に実行される請求項56に記載された方法。
【請求項５８】
さらに、前記サスペンドされた第一のユーザアプリケーションあてのメッセージを受信し、
前記サスペンドされた第一のユーザアプリケーションをバックグラウンド状態に移し、
バックグラウンドにおいて、前記第一のユーザアプリケーションに前記メッセージを供給する請求項56に記載された方法。
【請求項５９】
プログラマブル制御デバイスに請求項56に従う方法を実行させるための命令が格納された前記プログラマブル制御デバイスが読み取り可能なプログラム格納デバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
この出願に開示され、特許請求の範囲に記載される発明は、Apple（登録商標）のiPhone（登録商標）4のプロトタイプが2010年3月25日にApple（登録商標）の技術者から明らかに盗まれた時点でApple（登録商標）の承認を得ず、かつ、時期尚早に一般に公開された。この出願の基礎となる米国の優先権出願は、その明らかな窃盗前に未出願であった。
【０００２】
［関連出願の相互参照］
この出願は、2010年4月7日に出願された「Opportunistic Multitasking」と題する米国仮出願番号61/321,616に基づく国際出願であり、仮出願の全体が参照として、ここに組み込まれる。
【０００３】
本発明は、一般に、コンピュータサイエンスの分野に関し、より詳しくは、ユーザエクスペリエンスやパーソナル電子機器の電源管理を向上する技術に関する。
【背景技術】
【０００４】
電源に制約があるハンドヘルド機器（例えば、携帯電話、パーソナルエンターテインメント機器、電子パッドコンピュータ）は、デスクトップ、ワークステーション、ノートブックなどのコンピュータのように大きく固定されたシステムに比べ、リソース制限がある。このようなシステムにおいて利用可能な演算能力は、ユーザエクスペリエンスの著しい低下とデバイスの限られた電力リソースの消費なしに、多数の並列プロセス/スレッドの実行を単純にサポートすることができない。この認識を考慮して、これら種類のデバイスのシステム設計者は、ユーザアプリケーションレベルにおけるマルチタスキングを伝統的にサポートしてこなかった。このアプローチは、デバイスの限られた電力リソースの浪費を最小限にする利点があるが、インタラクティブな環境を（ユーザアプリケーションを介して）ユーザに提供する能力を制限することになる。
【発明の概要】
【０００５】
パーソナル電子機器向けのサービスは、マルチタスキングやバックグラウンド処理の形態がサポートされることを通じて提供される。開示されるサービスは、フォアグラウンドプロセスのユーザエクスペリエンスまたはパーソナル電子機器の電源リソースに対する大きくネガティブな影響なしに、ユーザアプリケーションがバックグラウンド処理を利用することを許容する。開示されるサービスの実施は、実行中のユーザアプリケーションに対して実質的に透過であり、幾つかのケースにおいて、ユーザアプリケーションの明示的な協調がなくても実施することができる。開示されるマルチタスキングを達成するために、動作制限数が強制されるかもしれない。そのような制限の結果は、プロセスがバックグラウンドにある場合はそれを行うことができず、フォアグラウンドでは行うことができるということだろう。
【０００６】
あるサービスにおいて、フォアグラウンドユーザアプリケーションは、フォアグラウンド状態から移動されると非実行状態に遷移する。他のサービスにおいて、バックグラウンドプロセスは、非実行状態に遷移される前に、タスクを完了するための最大の時間が与えられる。また別のサービスにおいて、オーディオアプリケーション（例えば、オーディオ信号を生成または記録するユーザアプリケーション）は、ユーザによって一時停止されるまで、および、一時停止されない限りバックグラウンドにおける実行が認められる。さらに別のサービスにおいて、ユーザアプリケーションによって示される(instantiated)通信ソケットは、それを示す(instantiating)ユーザアプリケーションが非実行状態にあっても維持される。このサービスを利用可能なアプリケーションの典型は、ボイスオーバインターネットプロトコル(VOIP)を用いるユーザアプリケーションである。さらに他の実施例において、ユーザアプリケーションは、非実行状態にある場合、通知（例えば位置イベント）の受信が許可される。開示される各サービスは、一つ以上の制限に依存するか、一つ以上の制限を使用して、動作における、フルタイムのマルチタスキング動作を妨げるか防ぐことができる。つまり、開示されるサービスは、マルチタスキングがフォアグラウンドプロセスに著しく干渉したり、パーソナル電子機器の電源を過度に利用したりしない場合のみ、マルチタスキングを許可する。
【図面の簡単な説明】
【０００７】
【図１】実施例のスレッドスケジュール構成例を示す図、
【図２】実施例のタスク完了サービス動作を示すフローチャート、
【図３】実施例のオーディオサービス動作を示すフローチャート、
【図４】実施例のネットワークサービス動作を示すフローチャート、
【図５】実施例のパーソナル電子機器を示すブロック図、
【図６】他の実施例のパーソナル電子機器を示すブロック図、
【図７】実施例の無線部および位置情報処理部を示すブロック図、
【図８】実施例のパーソナル電子機器を示すブロック図。
【発明を実施するための形態】
【０００８】
パーソナル電子機器向けのサービスは、マルチタスク処理やバックグラウンド処理の制限された形態がサポートされることを通じて提供される。開示される動作制限との組み合わせにおいて、開示される一つ以上のサービスの使用は、機器の電源リソースに僅かな影響を伴う堅牢なインタラクティブ環境をユーザに与えるため、ユーザアプリケーションにバックグラウンドにおける実行を許可する。幾つかの実施例において、バックグラウンド処理は、特定のタスクの完了、特定の時間（例えば5-30分間）、または、特定タイプのタスク（例えばオーディオ動作）に制限される。他の実施例において、ユーザアプリケーションは、一つ以上の特定のイベントの発生による復帰をオペレーティングシステムに通知後、動作を終了する。復帰時、アプリケーションは、バックグラウンドにおいて補足的な動作を実行する。開示されるサービスの実施は、実行中のユーザアプリケーションに対して実質的に透過であり、幾つかのケースにおいて、ユーザアプリケーションの明示的な協調がなくても実施することができる。
【０００９】
ここで使用する用語「パーソナル電子機器」は、携帯電話、パーソナルディジタルアシスタント、ハンドヘルドエンターテイメント機器、パッドまたはタブレットコンピュータシステム、あるいは、セットトップボックス（例えばApple TV（Appleの登録商標）またはケーブルコンバータボックス）などの携帯ディジタルデバイスである。ここで使用する用語「サービス」は、ユーザインタフェイスがなく、アプリケーションプログラミングインタフェイス(API)のようなコールインタフェイスを介してプログラマティキャリ(programmatically)にアクセスされ、コールプロセスのために幾つかのタスクを実行するユーティリティ、ファンクションまたはプログラムコードモジュールを指す。
【００１０】
以下では、説明の目的のために、本発明の完全な理解を提供するために多数の特定の詳細が説明される。しかし、これら特定の詳細がなくても本発明が実施できることは、当業者にとって明らかだろう。他の例において、本発明が不明瞭になることを避けるために、構造および装置はブロック図の形態で示される。添字なしの番号の参照は、参照番号に対応する添字のすべての例示の参照であると理解される。さらに、この開示において使用される言語は、主に可読性や教示目的のために選択されていて、本発明の主題を正確に記述したり囲むようには選択されていないかも知れないが、本発明の主題の決定は請求項に頼ることにする。本明細書における「一実施例」または「実施例」の参照は、実施例に関連して説明される特定の特徴、構成または特性が本発明の少なくとも一つの実施例に含まれることを意味し、「一実施例」または「実施例」のマルチ参照が必ずすべて同じ実施例を参照していると理解されるべきではない。
【００１１】
実際に実装される任意の多数のプログラミングとコンポーネントの決定は、開発者の特定の目標（例えばシステムおよびビジネス関連の制約とコンプライアンス）を達成しなければならなず、それら目標は実装ごとに異なることが理解されるだろう。また、そのような開発の努力は、複雑かつ時間がかかることが理解されるだろうが、それでもなお、この開示に利益をもつパーソナルコンピュータ機器開発分野の当業者にとっては日常的作業だろう。
【００１２】
フォアグラウンドプロセスのユーザエクスペリエンスまたはパーソナル電子機器の電源リソースに対する大きくネガティブな影響なしに、バックグラウンド処理またはマルチタスキングの効果を得るために、動作制限数が強制されるかもしれない。そのような制限の結果は、プロセスがバックグラウンドにある場合はそれを行うことができず、フォアグラウンドでは行うことができるということだろう。
【００１３】
ここで使用する用語「フォアグラウンドプロセス」は、現在、システムリソース（例えばプラットフォームの中央処理装置およびグラフィカル処理装置）にアクセスし、ユーザインタフェイス(UI)またはグラフィカルユーザインタフェイス(GUI)をユーザに提示するプロセスを意味する。（従って「フォアグラウンド」はフォアグラウンドプロセスが実行されている状態である。）対照的に「バックグラウンドプロセス」は、システムリソースにアクセスすることが予定され、現在、ユーザにUI/GUIを提供しないプロセスである。（従って「バックグラウンド」はバックグラウンドプロセスが実行されている状態である。）ここで使用する用語「プロセス」はユーザアプリケーションを意味する。逆に、ユーザアプリケーションは、UI/GUIを提示することが可能な実行可能なコードモジュールである。
【００１４】
［動作制限］
以下の動作制限のリスト例は、バックグラウンドプロセスがフォアグラウンドプロセスに及ぼす有害な影響を制限するために強制される場合がある。
【００１５】
1. プロセッサスケジューリング
バックグラウンドプロセスがフォアグラウンドプロセスの妨げにならないような方法で、フォアグラウンドプロセスとバックグラウンドプロセスに異なるプロセッサスケジューリング「優先度」を割り当てる。当業者であれば、ＵＮＩＸ（登録商標）（AT&Tの登録商標）およびMachのようなオペレーティング環境において、プロセスはスケジューリングされず、スレッドがスケジューリングされることを認識するだろう。さらに、スレッドは、プログラム、アプリケーションまたはプロセスの他の部分と独立または並列に実行可能なプログラム、アプリケーションまたはプロセスの一部であることが認識されるだろう。
【００１６】
図1を参照すると、一実施例において、バックグラウンドスレッドには、フォアグラウンドスレッドに割り当てられた優先度レベルにある程度重なる優先度バンドから優先度が割り当てられる。重畳する優先度バンドは、実行中のフォアグラウンドプロセス/スレッドがあるとしても、バックグラウンドプロセス/スレッドを進行させる（つまり実行の）可能性を高める。この実施例においてスレッドの応答性を高めるには、入出力(I/O)動作をブロックすることなく、それらの全クァンタム(entire quantum)を使用するスレッドを降格する（つまり、それらのスケジューリング優先度を下げる）ことが有益であることがわかった。一実施例において、スレッドの優先度は、ブロックされずに、割り当てられたクァンタムをフルに使う都度、1カウントずつ減少する。（フルクァンタムのプロセス使用は、中央処理装置を使用するプロセスの指標(indicator)であることが認識されるだろう。）他の実施例においてこれが発生した場合、スレッドの優先度を複数カウント低減することができる。バックグラウンドバンドとフォアグラウンドバンドの間の優先度レベルにおける「重畳」量は1以上あればよい。
【００１７】
2. ディスクスケジューリング
一実施例において、システムのストレージ装置（例えば、磁気ハードドライブおよびソリッドステートハードディスク装置）にアクセスする場合、フォアグラウンドスレッドには、バックグラウンドスレッドよりも高い優先度が与えられる。さらに、バックグラウンドプロセス（つまり、バックグラウンド状態にあるプロセスに関連するスレッド）によるシステムのストレージ装置のアクセスはレート制限される。
【００１８】
3. 着信ネットワークアクティビティ
一実施例において、バックグラウンドまたは非実行状態の（例えばサスペンドされた）アプリケーションあての全パケットをドロップすることで、着信(incoming)ネットワークトラフィックが加減(moderate)される。さらに、意図的に(artificially)小さいバッファサイズを末端(distal)のネットワークサイトに報告して、着信TCP（伝送制御プロトコル）トラフィックを抑制する(throttle)。当業者であれば、TCPがバッファサイズに関連するトラフィックフロー制御機構の既存セットを備え、受信側がトラフィックを扱うことができるよりも高速なネットワークを経由するトラフィックが送信されないことを認識するだろう。前述したように、一実施例において意図的に小さいバッファサイズが報告され、送信側は受信トラフィックの流れを遅くするか停止する。
【００１９】
4. 発信ネットワークアクティビティ
一実施例において、ネットワークアクセスは二つのキューの使用によって調停(mediate)され、一つのキューはフォアグラウンドプロセスに関連するジョブ用であり、もう一つのキューはバックグラウンドプロセスに関連するジョブ用である。バックグラウンドキューを超える優先度をフォアグラウンドキューに与えることが有益であることが分かった。例えば、バックグラウンドキューに対してフォアグラウンドキューを100%優先してもよい。この設定において、バックグラウンドキュー内のジョブは、フォアグラウンドキューが空の場合にサービスを受けることができる。別の実施例において、フォアグラウンドキュー内のジョブは、バックグラウンドキューに対して所望する割合（例えば90対10、80対20、75対27または50対50）でサービスを受けることができる。さらに別の実施例において、一度、ジョブがキュー（例えばフォアグラウンドキュー）に配置されると、その後、当該ジョブに関連するプロセスが別の動作状態（例えばバックグラウンド）に配置されても、当該ジョブは移動されない。さらに別の実施例において、ジョブのキューの位置は、当該ジョブに関連するプロセスの動作状態を反映して更新される。
【００２０】
5. グラフィクス動作
一実施例において、例えばiPhone（Appleの登録商標）オペレーティングシステムのように、アプリケーションが表示画面に書いたり描いたりするために経由する少なくとも二つの機構がある。第一の機構は、グラフィクス処理ユニット(GPU)など、専用のハードウェアの使用を経由する。第二の機構は、プラットフォームの一つ以上の中央処理装置(CPU)の使用を経由する。一実施例によれば、iPhone（登録商標）オペレーティング環境において、バックグラウンドプロセスは専用のグラフィクスハードウェアのアクセスが許可されず、例えば、GPUのアクセスを試みる如何なるバックグラウンドプロセスも終了される。別の例では、CPUを介して可視グラフィクスの生成を試みるバックグラウンドプロセスは無視される、つまり、描画バッファ/メモリに書き込むためにCPUの使用を指示するコマンドを実行する試みは無視される。幾つかの実施例において、バックグラウンド状態に置かれたプロセス/アプリケーションに関連する描画メモリは「パージ可能(purgeable)」とマークされる。つまり、フォアグラウンドプロセスは、より多くのメモリを必要とする場合、現在バックグラウンド状態にあるプロセスに元々付与されているディスプレイメモリを（標準メモリアロケーション手法を介して）使用することができる。
【００２１】
6. 通知
プロセスがバックグラウンド状態からフォアグラウンド状態に遷移する場合、プロセスは各種類の通知ごとに一つの通知の受信が許可される。より詳しくは、一実施例において、多数の通知イベントが統合される(consolidate)。例えば、ユーザが彼のパーソナル電子機器（例えばiPhone（登録商標））を縦表示から横表示に、さらに縦表示に回転し、そして横表示に戻した場合の三つの向きの通知イベントの結果は単一の通知、最後の状態、横向きに合体される(coalesce)。これにより、多数のイベントに応答する必要がなくなり、アプリケーションの応答性が向上する。例えば、通知の種類には（例えば、加速度計やジャイロスコープセンサの入力からの）向きの変更通知、（アドレス帳のエントリが変更されると発生する）アドレス帳データベース通知、および（共有リソース画像ライブラリの画像が変更されると発生する）カメラロール通知が含まれる。
【００２２】
7. ロック
共有リソースにロックオンし、サスペンド状態にある任意のプロセスは（サスペンドよりもむしろ）終了させる。共有リソースには、例えば、専用のグラフィクスハードウェアとファイルディスクリプタが含まれる。他の実施例において、ユーザアプリケーションがバックグラウンド状態になると、共有リソースは、ユーザアプリケーションから「引き離される(take away)」。例えば、アプリケーション（プロセス）がカメラのハードウェアにロックオンしている場合、ユーザアプリケーションがバックグラウンド状態に置かれると、当該ロックは取り除かれる。ここで使用する「サスペンド状態」は、プロセスが実行のためにスレッドをスケジューリングすることは許されないが、プロセスの状態がメインメモリに保持された状態である。
【００２３】
8. ハードウェア制限
一実施例において、バックグラウンドプロセスが所定のシステムハードウェアリソースへのアクセスを獲得することを妨げる。バックグラウンドプロセスが利用不能なハードウェアは、例えばカメラ、GPU、加速度センサ、ジャイロスコープ、近接センサおよびマイクであるが、これらに限定されない。
【００２４】
9. メモリ管理
実行プロセスを収容するために充分なメモリを保持するため、パーソナル電子機器のコアメモリが指定された「クリチカル」ポイントに近付くと、プロセスがメモリから取り除かれる。一実施例において、取り除かれたプロセスは休止(hibernate)される。別の実施例において、取り除かれたプロセスは終了される。ここで使用する用語「コアメモリ」または「メインメモリ」は、ユーザアプリケーションが実行されるパーソナル電子機器のメインランダムアクセスメモリを意味する。「休止プロセス」は、その動作状態が不揮発性メモリに書き込まれたプロセスであり、(1)休止プロセスは実行のためにスレッドをスケジューリングすることができず、(2)休止プロセスのメインメモリにおける「フットプリント」は実質的にゼロである。「終了プロセス」は、その動作状態が削除され、従って、再起動されるまで実行することができないプロセスである。ハイバネーションメモリの処理(act)の間、オンデマンドに再作成（パージ可能）または再ロード（クリーン）可能な処理は、修正されたメモリに配置されるだけか、再構成可能ではない(un-reconstitutable)別のやり方で不揮発性メモリに書き込まれる。別の実施例において、不揮発性メモリの指定領域は「ハイバネーション」メモリとして使用するため、ブート時に別けて設定される。休止プロセスが復帰される場合、不揮発性メモリの休止プロセスのデータはメインメモリに戻され、それによって、不揮発性ストレージのスペースを解放する。一実施例において、指定時間を超えてアクセスされないアプリケーションが「休止」される。
【００２５】
メインメモリから削除されるアプリケーションを選択するための所望のアプローチを作成することができる。例えば、最近使用したアプリケーションを最初に削除する。あるいは、現在非実行中の最大のアプリケーションを削除する。一実施例において、取り除くために選択されたアプリケーションは、指定サイズ（例えば8MB、16MBまたは32MB）を超える場合は終了され、指定サイズよりも小さいアプリケーションは休止される。さらに別の実施例において、バックグラウンドオーディオユーザアプリケーションは、サスペンドされたユーザアプリケーションが終了された後のみ、フォアグラウンドユーザアプリケーションの前に終了させることができる。
【００２６】
同様に「クリチカル」ポイントは、設計者が望む任意の値である。例えば、クリチカルポイントは50%、75%および90%を含む。代表的なクリチカルポイントとして75%を使用し、メインメモリが容量の75%に達する、例えば256メガバイト(MB)のメインメモリが192MBフルに達すると、メインメモリから取り除くためにアプリケーションが選択される。
【００２７】
［動作状態］
上記の制限が後述する様々なサービスに如何に適用されるかを理解する上の助けとして、表1は、パーソナル電子機器上で実行されるユーザプロセスの五つの動作状態を識別し説明する。
【００２８】
表1  動作状態
─────┬────────────────┬─────────────
モード  │              説明              │          制限
または状態│                                │
─────┼────────────────┼─────────────
フォア  │この状態のプロセスは、システムリ│なし
グラウンド│ソースにアクセスし、現在、ユーザ│
│インタフェイスを提示する        │
─────┼────────────────┼─────────────
バック  │この状態のプロセスは、システムリ│リアルタイムプロセスはリア
グラウンド│ソースにアクセスするが、現在、  │ルタイム制限の対象（オー
│ユーザインタフェイスを提示しない│ディオ、VOIP/ネットワーク
│                                │通信アプリケーションを除き
│                                │バックグラウンドに置かれる
│                                │と非リアルタイム優先度に降
│                                │格）、他の全プロセスは他の
│                                │全制限の対象
─────┼────────────────┼─────────────
サスペンド│この状態のプロセスは、メインメモ│実行には不適切
│リ内で動作状態にあり、サスペンド│
│されている事実を除き、実行のため│
│のスケジューリングが可能        │
─────┼────────────────┼─────────────
休止    │この状態のプロセスは、動作状態が│実行には不適切
│不揮発性メモリに書かれている。  │
│プロセスを識別し配置し復帰させる│
│情報だけをメインメモリに保持    │
─────┼────────────────┼─────────────
終了    │メインメモリ内で、もはや動作状態│実行には不適切
│がアクセスできないプロセス      │
─────┴────────────────┴─────────────
【００２９】
ここで使用する用語「非実行状態」は、サスペンド状態、休止状態、終了状態の一つを意味する。
【００３０】
［サービスの例］
以下、記述されるサービス動作の「環境」はiPhone（登録商標）オペレーティングシステムである。これは例示のみであり、開示されるサービスは、どのようなパーソナル電子機器にも同様に適用することができる。
【００３１】
1. 高速タスク切替サービス
過去、アプリケーションは、iPhone（登録商標）オペレーティングシステムのフォアグラウンド状態から去る場合、単純に終了されていた。高速タスク切替サービスは、アプリケーションがフォアグラウンド状態から去る時点で、幾らかの処理（例えば数秒）を行う機会が与えられたという通知の受信をアプリケーションに許可する。この時間の経過後、アプリケーションはサスペンドされる（つまりサスペンド状態に置かれる）。一実施例において、この開示に従うオペレーティング環境は、実行中の全プロセスに高速タスク切替を適用することができる（後述するように、別のサービスを利用しない限り）。別の実施例において、各アプリケーションは、サスペンドされることをプログラマティキャリ(programmatically)に指定する必要がある。
【００３２】
サスペンドされている間、プロセス/アプリケーションは命令を実行することができない。これは、Unix（登録商標）やMachのようなスレッドオペレーティング環境において、プロセスはスレッドの実行をスケジューリングできないことを意味する。しかし、幾つかの実施例においては、プロセス自身がサスペンド（あるいは、休止または終了）された後であっても、プロセスに代わって開始されたカーネルの活動(effort)が継続されることがある。「カーネルの活動」例には、進行中のI/O動作、仮想メモリ、ネットワークバッファ動作が含まれる。そのような動作の完了は、サスペンドされたプロセスの復帰をトリガしても、しなくてもよい。
【００３３】
なお、ここで議論した種類のプロセスの休止は、従来技術の「スリープ」または「ハイバネーション」アクションのようなシステムレベルの動作と異なる。「スリープ」や「ハイバネーション」アクションはどちらも「システム全体(system-wide)」の動作である。従来技術によれば、スリープまたは休止モードの間、プロセスは実行されない。これに対して、ここで説明する休止モードは個々のプロセスに適用され、第一のプロセスの休止は第二プロセスの実行を妨げることはない。
【００３４】
2. タスク完了サービス
タスク完了サービスは、フォアグラウンド状態で開始され、バックグラウンド状態にあるタスクを完了するために、限られた能力をもつプロセスを提供する。一実施例において、フォアグラウンドプロセスとの干渉を避けるために、バックグラウンドプロセス（つまり、バックグラウンド状態で実行中のプロセス）は抑制(throttle)される。このサービスの使用に適したタスクの例は、ネットワークアップロードとダウンロード動作、ディスク格納とリトリーブ動作、画像処理動作（例えば、GPUなど専用のグラフィクスハードウェアを必要としない動作）である。一実施例において、バックグラウンドプロセスは、指定されたイベントが発生するまで（上述した自身のスケジュール優先度に従いCPU時間を受け取って）処理を継続することが許される。イベントの例には、（処理を完了するために指定された時間、例えば、5から30分の「クロック」時間または5ミリ秒のCPU時間をプロセスに与える）システムタイマ、機器の外部電源の喪失、あるいは、一次または二次ディスプレイのアクティベーションが含まれる。
【００３５】
図2を参照すると、非フォアグラウンドアプリケーション（第二のAPP）がフォアグラウンドになる（ブロック0）ことが通知されると、タスク完了動作の例200が開始される。これは、例えば、二番目のユーザアプリケーションを開始するユーザ要求、システムアプリケーションへの移行、または、VOIPユーザアプリケーションへの着信の結果である。現在のフォアグラウンドユーザアプリケーション（第一のAPP）がバックグラウンドで実行可能なアプリケーションとして自身を指定していない場合（ブロック210のNO）、第一のAPPは非実行状態に置かれ（ブロック215）、第二のAPPがフォアグラウンドになる（ブロック220）。例えば、第一のAPPは休止される（つまり、休止状態に置かれる）。第一のAPPがバックグラウンドで実行可能なアプリケーションとして自身を指定していると、プロパティリスト(p-list)エントリかのうように（ブロック210のYES）、第一のAPPはバックグラウンド状態に置かれ、その現在の動作を完了させるために指定の時間が与えられる（ブロック225）。そして、第二のAPPがフォアグラウンドになり、実行が許可される（ブロック230）。バックグラウンドにおいて、第一のAPPは、やがて実行するためにスケジューリングされる（プロセッサスケジューリングに関する上記の議論を参照）（ブロック235）。第一のAPPは、指定されたイベントが発生するか、そのタスクを完了しないうちは、バックグラウンドにおける実行が許可される。何れかのイベントが発生するか、プロセスがそのタスクを完了すると（ブロック240と245のYES）、第一のAPPは例えば休止または終了状態である非実行状態に置かれる。何れのイベントも発生しないと（ブロック240と245のNO）、第一のAPPは実行を継続する（ブロック235）。
【００３６】
一実施例において、非アクティブなフォアグラウンドプロセスは、同様に、フルシステムリソースにアクセスする能力が制限される場合がある。例えば、一つ以上の非アクティブなフォアグラウンドプロセス（つまり、現在、ユーザ入力を受信していないフォアグラウンドプロセス）は、バックグラウンドプロセスに関する説明と同じように、ストレージディスク（制限2）と着信および発信ネットワークバッファ（制限3と4）のアクセス、および/または、指定されたハードウェアと対話する能力（制限8）が制限される。同様に、電力損失に関して、アクティブなフォアグラウンドプロセスを除く全フォアグラウンドプロセスが休止されるか、バックグラウンドに「プッシュ」され、その後、それらの動作(behavior)が、ここで説明したバックグラウンド処理の管理体制(regime)に従い制御される。
【００３７】
一実施例において、プロセスは、（例えば、ブロック210に従う動作の間に）それがタスク完了サービスの利用を望むことをプログラマティキャリに宣言する必要がある。これは例えば静的に宣言され、ユーザアプリケーションは、APIコール、プロパティリスト(p-list)エントリ、インストール時または最初の実行時にユーザが指定した変更可能な設定(changeable setting)を介して、タスク完了サービスを利用することができる。別の実施例において、タスク完了は、実行時およびコード内で、それが動作を開始したことを宣言（その後、その動作を終了したことを宣言）するアプリケーションに基づき与えられる。アプリケーションがフォアグラウンド状態を離れ、そのようなタスクが未処理である場合、アプリケーションには、それらを完了するまでのある程度の時間が与えられる。指定されたイベントの発生時、または、すぐにタスクが完了する場合、アプリケーションはサスペンドされる。さらに別の実施例において、指定された数の適切なタスクの一つを実行する任意のプロセスまたはユーザアプリケーションは、タスク完了サービス（例えば、上記動作の何れか）を利用することができる。例えば、ファイルアップロードまたはダウンロード動作を実行する任意のプロセスは、タスク完了サービスの制限に従い、バックグラウンドに置くことができる。
【００３８】
3. オーディオサービス
オーディオサービスは、バックグラウンド状態において、プロセスまたはアプリケーションがオーディオを再生したり録音することを許可する。一実施例において、オーディオプロセスはリアルタイムスレッドを利用し、それに応じてスケジューリングされる（図1参照）。一般に、リアルタイムプロセスはバックグラウンドに置かれると非リアルタイム優先度に降格されるが、オーディオサービスを使用するアプリケーションには当て嵌らない。記載する実施例は、フォアグラウンドプロセスとの干渉を最小化するためにオーディオアプリケーション用のリアルタイムスレッドを利用し、一度に一つのリアルタイムオーディオ処理がバックグラウンド状態で許可される。（この数が単なる例示であることが認識されるだろう。パーソナル電子機器の処理能力が充分にあれば、多数のオーディオプロセスが同時にバックグラウンドでアクティブになる。）
【００３９】
図3を参照すると、オーディオ動作（例えば、音楽再生または音声録音動作）を実行するフォアグラウンドユーザアプリケーションが、現在フォアグラウンドではない他のアプリケーション（第二のAPP）がフォアグラウンドになるという通知を受信した場合（ブロック305）、オーディオサービス動作の例300が開始される。そして、ユーザオーディオアプリケーションはバックグラウンドに置かれ（ブロック310）、第二のAPPはフォアグラウンドになる（ブロック315）。一実施例において、ライブラリの指定セットから実行するために、リアルタイムバックグラウンドスレッドが制限される。例えば、サードパーティのライブラリ（例えば、アプリケーション開発者によって提供されるライブラリ）を使用して、リアルタイムバックグラウンドスレッドを妨げる。後のある時点で、ユーザはバックグラウンドオーディオアプリケーションに「一時停止」コマンドを発行する（ブロック320）。応答において、ユーザバックグラウンドオーディオアプリケーションはバックグラウンド状態からサスペンド状態に移動される（ブロック325）。ユーザが「再開」コマンドを発行する（ブロック330のYES）までオーディオアプリケーションはサスペンド状態に維持され、その後、オーディオアプリケーションはバックグラウンド状態に戻され、そのオーディオ動作の実行が継続される（ブロック335）。別の実施例において、オーディオアプリケーションは、サスペンドモードよりも休止モードに置かれる。
【００４０】
幾つかの実施例において、プロセスは、APIコール、プロパティリスト(p-list)エントリ、あるいは、インストール時または最初の実行時にユーザが指定する変更可能な設定を介して、オーディオサービスが利用可能であることを静的に宣言する。他の実施例において、オーディオを再生または記録する任意のプロセスは、オーディオサービスをそれに適用する。これらのアプリケーションのコードを実行すると、関連するプロセスは、高速タスク切替またはタスク完了サービスに従って、オーディオ動作中にサスペンドすることができない。
【００４１】
4. 通知サービス
通知サービスは、どのような状態（フォアグラウンド、バックグラウンド、サスペンドまたは休止）のプロセスにも、メッセージの受信と応答を許可する。これらのメッセージは、外部ソース（「プッシュ」通知）または受信プロセス/アプリケーション自体（「ローカル」通知）に由来する。
【００４２】
一般に、メッセージの受信時、オペレーティングシステムモジュール（例えば、iPhone（登録商標）オペレーティングシステムの「Springboard」アプリケーション）は、ターゲットアプリケーション（つまり、通知メッセージが向けられているアプリケーション）を識別し、そのアプリケーションをバックグラウンドで起動し、復帰したアプリケーションにメッセージを渡す。別の実施例においては、メッセージの受信時、オペレーティングシステム（例えば、Springboard）が、ユーザがターゲットアプリケーション（つまり、通知メッセージが指示するアプリケーション）への切り替えを選ぶことができるようなダイアログボックスを生成する。選択されると、ターゲットアプリケーションはフォアグラウンドになる。（ターゲットアプリケーションが既にバックグラウンドにあれば、復帰の必要がないことが認識されるだろう。）その後、アプリケーションは、例えばオペレーティングシステム要求を介してユーザにダイアログを提示することを含む、メッセージに応答する機会を与えられる。そして、受信プロセスの制御は、関連するサービス（例えば、高速タスク切替、タスク完了、オーディオ、VOIP、または、位置情報とジオフェンシング(Geo-Fencing)）に従って提供される。別の実施例においては、バックグラウンドプロセスあての通知は、通知受信の実質的な直後に配信されるよりも、キューされた後に（例えば、5分ごとに）配信される。
【００４３】
5. ネットワークサービス
ネットワークサービスは、サスペンドされたネットワークアプリケーションが通信ソケットを維持（つまり継続）することを許可する。ここで使用するネットワークアプリケーションは、ネットワーク通信ソケットを使用するユーザアプリケーションである。ネットワークアプリケーションの例はユーザVOIPアプリケーションである。従来技術において、ユーザネットワークアプリケーション/プロセスがサスペンドされると、それは通信ソケットを維持する能力を失い、その結果、通信データ（例えば、着信VOIP電話コール）を受信し続けることができない。
【００４４】
図4を参照すると、ユーザVOIPアプリケーションがサスペンド状態に移行する（ブロック405）ことによって開始されるVOIPサービス動作400によるネットワークサービスの動作例が示される。一実施例において、サスペンド状態への移行期にあるVOIPプロセスは、オペレーティングシステム（例えば、ネットワークデーモン経由）に「ハートビート」メッセージの送信に必要な時間間隔を指定する（ブロック410）。このデーモンは、プロセスが関連するソケットがデータを受信した場合、または、指定時間の満了においてプロセスの復帰に責任をもつ − ハートビート保守の終了。この側面のさらなる情報は、Message Notification Service Connections and Displaying Icon Badgesと題された米国特許出願公開第2009/0305732号明細書を参照。このようなアプリケーションは、その全体がここに組み込まれる。
【００４５】
暫くすると、ネットワークデーモンがメッセージを受信する（ブロック415）。そして、ターゲットアプリケーションが識別され（ブロック420）、バックグラウンド状態に復帰され（ブロック425）、メッセージが渡される（ブロック430）。そして、バックグラウンドVOIPアプリケーションは、メッセージ（例えば、着信VOIPコールまたは「ハートビート要求(heartbeat needed)」メッセージ）に応答する（ブロック435）。要求されたタスク(needed task)がハートビートを発行すると、VOIPアプリケーションはサスペンド状態に戻る。要求されたタスクが着信VOIPコールに応答した場合、VOIPアプリケーションは、ユーザにコールを受けるか無視するかを選択させるために、オペレーティングシステムにUIの発行を要求する。当該コールが無視される場合、VOIPアプリケーションはサスペンド状態に戻る。当該コールに応答する場合、（例えば、オペレーティングシステムが提示するUIの適切な要素をユーザが選択する手段によって）VOIPアプリケーションはフォアグラウンドになる。オペレーティングシステムデーモンは当該技術分野において周知と認識されるが、ここで説明する種類のパーソナル電子機器におけるサスペンドプロセスのためのネットワーク通信（例えば、VOIP、および、ワイファイ(wireless fidelity or WiFi)）ソケットの維持は斬新である。
【００４６】
6. 位置情報とジオフェンシングサービス
位置情報とジオフェンシングサービスは、指定された位置イベントが発生した場合に、バックグラウンドまたはサスペンドプロセスが通知（例えば、オペレーティングシステムデーモンからのメッセージ）を受信することを許可する。位置イベントの例には、指定位置に着く、指定位置から去る、指定領域に入る、指定領域から去る、または、「重要な」距離の移動（何が「重要」かはユーザまたはユーザアプリケーションによって指定される）が含まれるが、これらに限定されない。一実施例において、プロセス/アプリケーションは、位置情報とジオフェンシング動作サービスの利用を（例えば、プロパティリスト(p-list)パラメータを経由して）プログラマティキャリに宣言する必要がある。別の実施例において、ジオフェンシング動作はプロパティリスト(p-list)エントリの使用を必要せず、すべてのジオフェンシングアプリケーションはジオフェンシングサービスを利用する。
【００４７】
位置情報動作において、位置追跡動作が進行中である限り、アプリケーションはバックグラウンドに維持され、システムのスケジューリング機構に従い処理時間を受け取る（上記の議論を参照）。一実施例において、追跡動作が終了するか他の方法で停止した場合、プロセスは終了される（つまり、サスペンド状態に置かれる。プロセスを終了または休止することもできる）。プロセスがメッセージに応答すると、プロセスはクエース(quiesce)される（サスペンド状態に戻る）か、次のメッセージを待つバックグラウンド状態にブロックされる。一実施例において、バックグラウンド状態で位置情報サービス(Location service)を使用するユーザアプリケーションの数は、他のシステムリソースの使用に関連する。例えば、システムメモリが不足すると、現在、位置追跡を行っているユーザアプリケーションが終了される。別の実施例において、集中型(centralized)デーモンは位置情報要求を（とくに所望の要求精度を配慮して）集約し、最もアグレッシブなモードに適したハードウェアを起動する。例えば、一つのユーザアプリケーションが3km内のユーザ位置情報を要求し（携帯電話セルベースドポジショニングが使用可能な例）、第二のユーザアプリケーションが500m内のユーザ位置情報を要求し（WiFiスキャニングが利用可能な例）、第三のアプリケーションが100m内のユーザ位置情報を要求する（GPSが必要）場合、GPSポジショニングを使用し、バックグラウンドで位置を追跡する全アプリケーションは良質な(finer)ポジショニングの利益を得る。
【００４８】
ジオフェンシング動作において、指定領域の境界に交差する度に、プロセスは（例えばデーモンを介して）オペレーティングシステムからメッセージを受信する。プロセスが実行中（例えば、バックグラウンドにあり時間が割り当てらている間）であれば、プロセスはメッセージを処理する機会が与えられる。アプリケーションが非処理中（例えば、バックグラウンドにあり非処理中、または、サスペンドまたは休止されている）であれば、プロセス/アプリケーションは、（バックグラウンドで）イベントを処理することが許可され、その後、復帰される。さらに、プロセスが終了されている場合、前述した通知サービスと同様に、プロセスはバックグラウンド状態に復帰される。「Location-Based Application Program Management」と題する出願番号12/123,456の関連する開示を参照。一実施例において、位置情報処理は、ユーザアプリケーションを実行するためにオペレーティングシステムを実行するプロセッサ（以下「アプリケーションプロセッサ」と呼ぶ）から分離されたプロセッサを使用し、アプリケーションプロセッサが眠っている(asleep)場合も、ここに記載された種類の位置情報とジオフェンシング動作が発生する。位置情報サービスと同様に、バックグラウンド状態でジオフェンシングサービスを利用するユーザアプリケーションの数は、他のシステムリソースの使用に関連する。例えば、システムメモリが不足すると、現在、位置追跡を行っているユーザアプリケーションは終了される。
【００４９】
［パーソナル電子機器のアーキテクチャ］
図5を参照すると、一つ以上の上記サービスを実装可能なパーソナル電子機器500が、それ（例えば便宜的(opportunistic)マルチタスキング）を行うことが有益な場合、一つ以上の上記制限を使用してマルチタスキング動作を可能にする一実施例が示される。図示するように、ユーザアプリケーション505Aから505Nは、標準的なオペレーティングシステムコールのためにアプリケーションランチャ510（例えば、iPhone（登録商標）オペレーティングシステムの「Springboard」）と相互作用し、上記サービスにアクセスし利用するためにマルチタスキングサービスライブラリ(MT SRV)515と相互作用する。
【００５０】
図6を参照すると、無線手段605と位置情報処理手段610を含む別の実施例に従うシステム600が示される。図7を参照すると、無線手段605は、受信回路700、送信回路705およびメモリ710を含む。受信回路700と送信回路705は、例えば、携帯電話網、衛星通信網、または、ディジタルコンピュータネットワーク（例えば、ローカルエリアネットワークWiFi接続を介したインターネット）に接続するために使用される。メモリ710は、受信データ、送信するデータ、および、当該技術分野において周知のオペレーショナルパラメータ情報の格納に使用される。インタフェイス715は、無線手段605と位置情報手段610の間の通信を容易にするために提供される。位置情報手段610は、プロセッサ720、メモリ725およびオペレーティングシステムインタフェイス730を含む。一般に、位置情報手段610は、（例えば、インタフェイス730を介して一つ以上のユーザアプリケーション505A-505Nから）位置情報の更新要求とジオフェンシングの制限要求を受信し、（インタフェイス715を介して）無線手段605から受信した位置情報を処理し、インタフェイス730を介して位置情報の返信および要求アプリケーションの更新を行う。プロセッサ720は、一つ以上の既製(off-the-shelf)プロセッサ、一つ以上のカスタム設計プロセッサ、または、既製およびカスタム設計プロセッサの組み合わである。メモリ725は、揮発性および不揮発性固体メモリ、磁気または光メモリの任意の形態または組み合わせである。
【００５１】
一実施例において、電力のアベイラビリティに基づき、一つ以上の上記サービスが提供される。例えば、パーソナル電子機器が電源（例えば、AC電源）に接続されている場合、標準的近代的なオペレーティングシステム手順（つまり、完全または無制限のマルチタスキング）に従いマルチタスキング能力が提供される。他方、パーソナル電子機器が電源に接続されていない場合、この開示（例えば、部分的または便宜的(opportunistic)マルチタスキング）に従いマルチタスキング能力が提供される。
【００５２】
図8を参照すると、パーソナル電子機器800は、処理部805およびサポート機器810を含む物理的装置によって組み立てることができる。処理部805は、プロセッサ815、メモリ820および入出力回路825を含む。機器800は、図示するように、さらに、無線手段605および位置情報手段610を含む。入出力回路825は、プロセッサ815およびメモリ820に接続し、一つ以上のディスプレイユニット830（例えば、タッチスクリーンディスプレイ）、一つ以上の入出力デバイス835（例えば、タッチスクリーン、キーボード、マウス、ジョイスティック）、一つ以上のプログラム格納デバイス(STRG)840（例えば、磁気、光学または固体メモリ）、および、その他のハードウェア845（例えばネットワークインタフェイス）に接続する。
【００５３】
図6、7、8に示すアーキテクチャにおいて、位置情報またはジオフェンシング要求を行ったアプリケーション（例えば、アプリケーション505A）がサスペンド、休止または終了されている場合でも、位置情報とジオフェンシング処理は無線手段605および位置情報手段610を介して継続される。さらに、アプリケーションプロセッサ815が休止または眠っている(asleep)場合でも、位置情報とジオフェンシング動作は継続される。すなわち、アプリケーションプロセッサ815がどの状態にあるかに関係なく、位置情報とジオフェンシング動作はプロセッサ720を介して継続される。
【００５４】
材料、部品、回路素子と同様に、例示した動作方法の詳細における様々な変更が、以下の特許請求の範囲から逸脱することなく可能である。この開示に従うマルチタスク能力の提供は、一つ以上のプログラムモジュールに編成された命令を実行するプログラム可能な制御デバイスによって実行される。プログラム可能な制御デバイス（例えば、プロセッサ720と215）は、例えば、Intel（登録商標）のAtom（登録商標）、Core（登録商標）、Pentium（登録商標）およびCeleron（登録商標）プロセッサファミリ、ARM（登録商標）のCoretex（登録商標）およびARM（登録商標）プロセッサファミリ、カスタム設計ステートマシンの一つ以上のメンバである任意のプログラマブルコントローラ装置を含むことができる。カスタム設計ステートマシンは、特定用途向集積回路(ASIC)またはフィールドプログラマブルゲートアレイ(FPGA)を含む集積回路のようなハードウェア機器によって組み立てられるが、それに限定されない。
【００５５】
プログラム命令の確実な(tangibly)収録(embeding)に適したストレージデバイス（例えばメモリ710、725、220、820）には、磁気ディスク（固定、フロッピ（登録商標）、リムーバブル）およびテープ、CD-ROMおよびディジタルビデオディスク（DVD）のような光学式メディア、並びに、消去可能なプログラマブルリードオンリメモリ（EPROM）、電気的消去が可能なプログラマブルリードオンリメモリ（EEPROM）、プログラマブルゲートアレイ、および、フラッシュデバイスなどの半導体メモリデバイスが含まれる。
【００５６】
最後に、上記の説明は、例示を目的とし、限定的ではないことが理解されるべきである。例えば、上記の実施例は互いに組み合わせて使用することができる。多くの他の実施例は、上記の説明をレビューする当業者には明らかだろう。従って、本発明の範囲は、添付する請求項が享受する均等物の全範囲に沿い、添付する請求項を参照して決定されるべきである。添付する請求項において、用語「including」と「in which」はそれぞれ、平易な英語の同義語である「comprising」と「wherein」として使用される。
【図１】
2013524362.tif 000003
【図２】
2013524362.tif 000004
【図３】
2013524362.tif 000005
【図４】
2013524362.tif 000006
【図５】
2013524362.tif 000007
【図６】
2013524362.tif 000008
【図７】
2013524362.tif 000009
【図８】
2013524362.tif 000010
【国際調査報告】
2013524362.tif 000011
2013524362.tif 000012
2013524362.tif 000013
2013524362.tif 000014
2013524362.tif 000015