(57)【特許請求の範囲】
【請求項１】
複数の並行処理スレッドにおいて、タスクの複数のソフトウェア・モジュールを動作させるシステムであって、
前記複数の並行処理スレッドにおいて、前記タスクの前記複数のソフトウェア・モジュールを動作させる複数のプロセッサと、
前記複数のソフトウェア・モジュールを記憶する、前記複数のプロセッサに動作可能に接続されたメモリと、
前記複数の並行処理スレッドのうちの第１の処理スレッドにおいて、前記複数のソフトウェア・モジュールのうちの第１のソフトウェア・モジュールの動作を、前記第１のソフトウェア・モジュールが動作中であるとみなされないと判定するまで延期することを含む、前記複数の並行処理スレッド間の前記複数のソフトウェア・モジュールの動作を順序付ける例外ハンドラであって、前記第１のソフトウェア・モジュールは、自身が動作中である間、又は前記第１のソフトウェア・モジュールにより呼び出された任意の他のソフトウェア・モジュールの動作の終了を待つ間、動作中であるとみなされる、例外ハンドラと、
を備えた、システム。
【請求項２】
前記例外ハンドラは、前記第１の処理スレッドにおいて動作中である、前記複数のソフトウェア・モジュールのうちの第２のソフトウェア・モジュールによる、前記第１のソフトウェア・モジュールのモジュール間関数呼び出しに応答して、前記判定を行う、請求項１記載のシステム。
【請求項３】
前記複数のソフトウェア・モジュールは、前記モジュール間関数呼び出しにページ・フォールトをトリガさせるよう構成された関連するステータスを有する、請求項２記載のシステム。
【請求項４】
前記複数の並行処理スレッドに関連付けられた複数のページ・テーブル内に前記複数のソフトウェア・モジュールに対応するエントリを保持するために、インスタンスが前記複数の並行処理スレッドに関連付けられるスケジューラ
をさらに備えた、請求項１記載のシステム。
【請求項５】
前記複数のソフトウェア・モジュールの動作が、前記第１の処理スレッドにおいて、無効にされる、あるいは禁止されることを示すために、前記複数のソフトウェア・モジュールに対応する、第１のページ・テーブルのエントリが初期化され、動作させる前記第１のソフトウェア・モジュールの選択時に、前記第１のソフトウェア・モジュールに対応する、前記第１のページ・テーブルの１以上のページ・テーブル・エントリが、前記第１のソフトウェア・モジュールの動作が有効にされる、あるいは許可されることを示すように変更される、請求項４記載のシステム。
【請求項６】
前記メモリは、前記複数のソフトウェア・モジュールに対応する複数のインジケータをさらに記憶し、各インジケータは、それぞれのソフトウェア・モジュールが動作中であるかどうかを示すよう構成され、あるソフトウェア・モジュールが、前記複数のプロセッサにより実行される間、又は前記あるソフトウェア・モジュールが、前記あるソフトウェア・モジュールにより呼び出されたダウンストリームのソフトウェア・モジュールの動作の終了を待つ間、前記あるソフトウェア・モジュールは動作中であると示される、請求項１乃至５いずれか一項記載のシステム。
【請求項７】
複数の並行処理スレッドにおいて、タスクの複数のソフトウェア・モジュールを動作させる、コンピュータにより実施される方法であって、
コンピューティング・デバイスにより、前記複数の並行処理スレッド間で実行される、前記タスクの前記複数のソフトウェア・モジュールのうちの第１のソフトウェア・モジュールが、前記複数の並行処理スレッドのうちの第１の処理スレッドにおいて動作している、前記複数のソフトウェア・モジュールのうちの第２のソフトウェア・モジュールにより呼び出されたことを判定するステップと、
前記コンピューティング・デバイスにより、前記第１のソフトウェア・モジュールが動作中であるとみなされないと判定するステップであって、前記第１のソフトウェア・モジュールは、自身が動作中である間、又は前記第１のソフトウェア・モジュールにより呼び出された任意の他のソフトウェア・モジュールの動作の終了を待つ間、動作中であるとみなされる、ステップと、
前記コンピューティング・デバイスにより、前記第１のソフトウェア・モジュールが動作中であるとみなされないという判定に応じて、前記第１の処理スレッドにおいて前記第１のソフトウェア・モジュールを動作させるステップと、
前記コンピューティング・デバイスにより、前記第１のソフトウェア・モジュールが動作中であるとみなされるという判定に応じて、前記第１のソフトウェア・モジュールの動作が終了するまで、前記第１の処理スレッドにおける前記第１のソフトウェア・モジュールの動作を延期するステップと、
を含む、コンピュータにより実施される方法。
【請求項８】
前記複数のソフトウェア・モジュールのうちの前記第１のソフトウェア・モジュールが、前記複数のソフトウェア・モジュールのうちの前記第２のソフトウェア・モジュールにより呼び出されたという前記判定に応じて、ページ・フォールトをトリガするステップ
をさらに含む、請求項７記載のコンピュータにより実施される方法。
【請求項９】
前記コンピューティング・デバイスにより、例外ハンドラを実施し、前記ページ・フォールトに応答して、前記第１の処理スレッドに関連付けられた、前記例外ハンドラのインスタンスに実行制御を渡すステップ
をさらに含む、請求項８記載のコンピュータにより実施される方法。
【請求項１０】
前記コンピューティング・デバイスにより、前記複数の並行処理スレッドのための複数のそれぞれのページ・テーブルを初期化するステップ
をさらに含む、請求項７記載のコンピュータにより実施される方法。
【請求項１１】
前記コンピューティング・デバイスにより、前記複数のソフトウェア・モジュールに対応するエントリを、前記複数のページ・テーブルに含めるステップ
をさらに含む、請求項１０記載のコンピュータにより実施される方法。
【請求項１２】
前記コンピューティング・デバイスにより、前記複数のソフトウェア・モジュールの動作が、前記第１の処理スレッドにおいて、無効にされる、あるいは禁止されることを示すために、前記複数のソフトウェア・モジュールに対応する、第１のページ・テーブルのエントリを初期化するステップと、
前記コンピューティング・デバイスにより、動作させる前記第１のソフトウェア・モジュールを選択したことに応じて、前記第１のソフトウェア・モジュールの動作が有効にされる、あるいは許可されることを示すように、前記第１のソフトウェア・モジュールに対応する、前記第１のページ・テーブルの１以上のページ・テーブル・エントリを変更するステップと、
をさらに含む、請求項１１記載のコンピュータにより実施される方法。
【請求項１３】
前記コンピューティング・デバイスにより、前記複数の並行処理スレッドのためのそれぞれのインスタンスにインスタンス化されるスケジューラを実施するステップ
をさらに含む、請求項７乃至１２いずれか一項記載のコンピュータにより実施される方法。
【請求項１４】
前記コンピューティング・デバイスにより、前記複数のソフトウェア・モジュールに対応する複数のインジケータを、前記コンピューティング・デバイスがアクセス可能なメモリに記憶するステップであって、各インジケータは、それぞれのソフトウェア・モジュールが動作中であるとみなされるかどうかを示すよう構成される、ステップ
をさらに含む、請求項７乃至１２いずれか一項記載のコンピュータにより実施される方法。
【請求項１５】
複数の並行処理スレッドにおいて、タスクの複数のソフトウェア・モジュールを動作させる装置であって、
前記複数の並行処理スレッド間で実行される、前記タスクの前記複数のソフトウェア・モジュールのうちの第１のソフトウェア・モジュールが、複数の処理スレッドのうちの第１の処理スレッドにおける、前記複数のソフトウェア・モジュールのうちの第２のソフトウェア・モジュールにより呼び出されたことを判定する手段と、
前記第１のソフトウェア・モジュールが動作中であるとみなされないと判定する手段であって、前記第１のソフトウェア・モジュールは、自身が動作中である間、又は前記第１のソフトウェア・モジュールにより呼び出された任意の他のソフトウェア・モジュールの動作の終了を待つ間、動作中であるとみなされる、手段と、
前記第１のソフトウェア・モジュールが動作中であるとみなされないという判定に応じて、前記第１の処理スレッドにおいて前記第１のソフトウェア・モジュールを動作させる手段と、
前記第１のソフトウェア・モジュールが動作中であるという判定に応じて、前記第１のソフトウェア・モジュールの動作の終了まで、前記第１の処理スレッドにおける前記第１のソフトウェア・モジュールの動作を延期する手段と、
を備えた、装置。
【請求項１６】
前記複数のソフトウェア・モジュールのうちの前記第１のソフトウェア・モジュールが、前記複数のソフトウェア・モジュールのうちの前記第２のソフトウェア・モジュールを呼び出したという前記判定に応じて、ページ・フォールトをトリガする手段
をさらに備えた、請求項１５記載の装置。
【請求項１７】
例外ハンドラを実施する手段であって、前記ページ・フォールトに応答して、実行制御は、前記第１の処理スレッドに関連付けられた、前記例外ハンドラのインスタンスに渡される、手段
をさらに備えた、請求項１６記載の装置。
【請求項１８】
前記複数の処理スレッドのための複数のそれぞれのページ・テーブルを初期化する手段
をさらに備えた、請求項１５記載の装置。
【請求項１９】
前記複数のソフトウェア・モジュールに対応するエントリを、前記複数のページ・テーブルに含める手段
をさらに備えた、請求項１８記載の装置。
【請求項２０】
前記複数のソフトウェア・モジュールの動作が、前記第１の処理スレッドにおいて、無効にされる、あるいは禁止されることを示すために、前記複数のソフトウェア・モジュールに対応する、第１のページ・テーブルのエントリを初期化する手段と、
動作させる前記第１のソフトウェア・モジュールを選択したことに応じて、前記第１のソフトウェア・モジュールの動作が有効にされる、あるいは許可されることを示すように、前記第１のソフトウェア・モジュールに対応する、前記第１のページ・テーブルの１以上のページ・テーブル・エントリを変更する手段と、
をさらに備えた、請求項１９記載の装置。
【請求項２１】
前記複数の処理スレッドのためのそれぞれのインスタンスにインスタンス化されるスケジューラを実施する手段
をさらに備えた、請求項１５乃至２０いずれか一項記載の装置。
【請求項２２】
前記複数のソフトウェア・モジュールに対応する複数のインジケータを記憶する手段であって、各インジケータは、それぞれのソフトウェア・モジュールが処理スレッドにおいて動作中であるかどうかを示すよう構成され、あるソフトウェア・モジュールが実行される間、又は前記あるソフトウェア・モジュールが、前記あるソフトウェア・モジュールにより呼び出されたダウンストリームのソフトウェア・モジュールの動作の終了を待つ間、前記あるソフトウェア・モジュールは動作中であるとみなされる、手段
をさらに備えた、請求項１５乃至２０いずれか一項記載の装置。
【請求項２３】
命令を含む少なくとも１つのコンピュータ読み取り可能媒体であって、コンピューティング・デバイスによる前記命令の実行に応答して、前記命令は、前記コンピューティング・デバイスに、請求項７乃至１２いずれか一項記載の方法を実行させる、少なくとも１つのコンピュータ読み取り可能媒体。
【請求項２４】
前記コンピューティング・デバイスによる前記命令の実行に応答して、前記命令は、前記コンピューティング・デバイスに、複数の処理スレッドのためのそれぞれのインスタンスにインスタンス化されるスケジューラを実施させる、請求項２３記載の少なくとも１つのコンピュータ読み取り可能媒体。
【請求項２５】
前記コンピューティング・デバイスによる前記命令の実行に応答して、前記命令は、前記コンピューティング・デバイスに、複数のソフトウェア・モジュールに対応する複数のインジケータを、前記コンピューティング・デバイスがアクセス可能なメモリに記憶させ、各インジケータは、それぞれのソフトウェア・モジュールが動作中であるとみなされるかどうかを示すよう構成される、請求項２３記載の少なくとも１つのコンピュータ読み取り可能媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、一般に、データ処理の技術分野に関し、より詳細には、ソフトウェア・モジュールの並行動作に関する。
【背景技術】
【０００２】
ここで提供される背景技術の説明は、本開示の内容をおおまかに提示することを目的とする。目下名前が挙げられている発明者らの研究は、この背景技術のセクションにおいて説明される程度において、出願時に先行技術として適し得ない説明の態様と同様に、本開示に対する先行技術として、明示的にも黙示的にも認められない。本明細書において別途示されない限り、このセクションで説明する手法は、本開示における請求項に対する先行技術ではなく、このセクション内に含まれることにより先行技術と認められるものではない。
【０００３】
並行演算（parallel  computing）の適切な使用は、演算の効率を大いに向上させることができ、より良いユーザ経験を提供する。例えば、スマートフォン及びコンピューティング・タブレット等のモバイル・コンピューティング・デバイスの使用が増すにつれ、起動時間は、ユーザ経験にとってより重要になってきている。システム・ブート中、複数のブート・モジュール（例えば、ソフトウェア実行可能イメージ）が、コンピューティング・デバイスの複数のデバイス及び／又はインタフェースを初期化するために、動作し得る。多くのモバイル・コンピューティング・デバイスは、複数のプロセッサを有しており、したがって、ソフトウェアを並行して実行することができる。しかしながら、ブート・モジュールは、通常、順次（シリアル）動作のために設計されている。
【図面の簡単な説明】
【０００４】
添付の図面とともに以下の詳細な説明により、実施形態が容易に理解されるであろう。この説明を容易にするために、同様の参照符号は、同様の構造的要素を示す。実施形態が、添付の図面の図において、限定ではなく例として示される。
【図１】様々な実施形態に従った、複数のソフトウェア・モジュール（この例では複数のブート・モジュール）の並行動作のためにコンピューティング・デバイスにおいて使用することができるコンポーネントを概略的に示す図。
【図２】様々な実施形態に従った、１つのブート・モジュールを呼び出す複数のブート・モジュールの一例を概略的に示す図。
【図３】様々な実施形態に従った、並行ブート・プロセス中にコンピューティング・デバイスの２つの処理スレッド上で生じ得る動作の一例を概略的に示す図。
【図４】様々な実施形態に従った、処理スレッドに関連付けられたスケジューラにより実施され得る例示的な方法を概略的に示す図。
【図５】様々な実施形態に従った、例外ハンドラにより実施され得る例示的な方法を概略的に示す図。
【図６】様々な実施形態に従った、開示する方法及びコンピュータ読み取り可能媒体を実装することができる例示的なコンピューティング・デバイスを概略的に示す図。
【発明を実施するための形態】
【０００５】
以下の詳細な説明において、本明細書の一部を形成する添付の図面を参照する。図面において、同様の符号は、図面を通して、同様の部分を示し、実施することができる実施形態が、例示のために示される。他の実施形態も利用することができ、本開示の範囲から逸脱することなく、構造的変更又は論理的変更を加えることができることを理解すべきである。以下の詳細な説明は、例として、コンピュータ・ブート・プロセスのためのブート・モジュールの並行動作を用いるが、開示する技術は、ブート・プロセス以外のタスクの並行実行を可能にするために使用されてもよい。したがって、以下の詳細な説明は、限定的に解釈されるべきではなく、実施形態の範囲は、添付の請求項及びその均等の構成により定められる。
【０００６】
様々な動作が、特許請求される主題を理解する上で最も役に立つ形で、複数の別々の動作又は順番の動作として説明され得る。しかしながら、説明の順序は、これらの動作が必ず順序に依存していることを意味するものと解釈されるべきではない。詳細には、これらの動作は、提示される順序で実行されなくてもよい。説明する動作は、説明する実施形態とは異なる順序で実行されてもよい。様々な追加の動作が実行されてもよいし、且つ／あるいは説明する動作が追加の実施形態において省略されてもよい。
【０００７】
本開示の目的のために、「Ａ及び／又はＢ」という語句は、（Ａ）、（Ｂ）、又は（Ａ及びＢ）を意味する。本開示の目的のために、「Ａ、Ｂ、及び／又はＣ」という語句は、（Ａ）、（Ｂ）、（Ｃ）、（Ａ及びＢ）、（Ａ及びＣ）、（Ｂ及びＣ）、又は（Ａ、Ｂ、及びＣ）を意味する。
【０００８】
この説明では、「一実施形態において」又は「複数の実施形態において」という語句が使用され得る。これらの語句はそれぞれ、同じ実施形態又は異なる実施形態のうちの１以上を参照することがある。さらに、本開示の実施形態に関して使用される、「備える」、「含む」、「有する」等の用語は同義である。
【０００９】
本明細書で使用されるとき、「モジュール」又は「ソフトウェア・モジュール」という用語は、１以上のプロセッサにより実行され得るソフトウェア実行可能イメージ及び／又はコンピュータ・プログラムを形成する複数の実行可能命令を指し得る。本明細書で使用されるとき、「ブート・モジュール」という用語は、コンピューティング・デバイスのブート・プロセス中に、例えば、基本入力／出力システム（「ＢＩＯＳ」）により実行されるソフトウェア・モジュールを指し得る。ブート・モジュールは、入力／出力デバイス、（例えば、入力／出力デバイスに対する）コンピューティング・デバイス・インタフェース等の初期化を含むがこれに限定されない様々な目的を果たすことができる。
【００１０】
様々な実施形態において、ブート・モジュール等のモジュールは、エントリ・ポイント関数（entry  point  function）を含み得る。エントリ・ポイント関数は、様々な初期化タスクを実行する、モジュールのロード時に実行される命令を含み得る。例えば、エントリ・ポイント関数は、１以上のモジュール間（inter-module）「サービス関数（service  function）」を初期化することができる。モジュール間「サービス関数」は、例えば、別のモジュール自身のエントリ・ポイント関数又はサービス関数といった別のモジュールにより呼び出され得るものであり、任意の処理を行う命令を含み得る。
【００１１】
モジュールは、モジュール間関数呼び出しを介して、互いにインタラクトすることができる。様々な実施形態において、書き込み可能な共有データは、モジュールにより直接アクセスできないが、代わりに、データ所有モジュール（data-owning  module）により提供されるサービス関数への呼び出しを介してアクセスできる。様々な実施形態において、モジュールにより提供されるサービス関数は、呼び出しシーケンス要件（call  sequence  requirement）を有することができない。これは、本明細書で説明する並行実行スキームにおけるデータ整合性を確実にすることができる。
【００１２】
図１を参照すると、本開示の適用可能な態様を用いて構成されるコンピューティング・デバイス１００は、メモリ１０４に動作可能に接続された複数のプロセッサ１０２ａ〜１０２ｎを含み得る。様々な実施形態において、各プロセッサ１０２ａ、１０２ｂ、．．．１０２ｍ（以後、単に１０２）は、処理スレッドを提供することができる。様々な実施形態において、メモリ１０４は、ダイナミック・ランダム・アクセス・メモリ（「ＤＲＡＭ」）であり得るが、他のタイプのメモリであってもよい。実施形態において、ＢＩＯＳブート・プログラム１０６は、複数のブート・モジュール１１２ａ〜１１２ｍを含み得る。通常、ブート・モジュール１１２ａ〜１１２ｍは、並行動作のために設計され得ない。しかしながら、以下でより詳細に説明するように、本開示の特徴を介して、ブート・モジュール１１２ａ〜１１２ｍは、ブート・プロセスを速めるために、複数の並行処理スレッドにおいて順序付けられ実行され得る。
【００１３】
様々な実施形態において、複数のブート・モジュール１１２ａ〜１１２ｍの間には、しばしば「依存表現（dependency  expression）」により説明される固有の依存関係が存在し得る。例えば、「インタフェースＡ及びインタフェースＢの両方が利用可能である」という依存表現は、インタフェースＡ及びインタフェースＢ（場合によっては、様々な他のブート・モジュールのサービス関数であり得る）の両方が適切なブート・モジュール１１２の動作により初期化された後にのみ満たされ得る。
【００１４】
様々な実施形態において、スケジューラ１０８ａ〜１０８ｎの複数のインスタンスは、例えば、ＢＩＯＳブート・プログラム１０６により初期化され得る。様々な実施形態において、各スケジューラ１０８ａ、１０８ｂ、．．．１０８ｎ（以後、単に１０８）は、複数のプロセッサ１０２ａ〜１０２ｎのうちの１以上により実行され得るコンピュータ・コード（図６参照）の単一コピーのインスタンスであり得る。様々な実施形態において、グローバル変数は、スケジューラ１０８ａ〜１０８ｎのインスタンス間で共有され得るのに対し、ローカル変数（例えば、スタック変数）は、インスタンス間で異なり得る。様々な実施形態において、各スケジューラ１０８は、プロセッサ１０２により提供されるそれぞれの処理スレッド上のブート・モジュール１１２ａ〜１１２ｍの動作を管理するよう構成され得る。
【００１５】
様々な実施形態において、複数の異なるページ・テーブル１１０ａ〜１１０ｎが、各プロセッサ１０２との関連付けのために、例えば、スケジューラ１０８ａ〜１０８ｎにより初期化され得る。以下でさらに詳細に説明するように、様々な実施形態において、ページ・テーブル１１０ａ〜１１０ｎは、例えば、ページ・フォールトを介して、モジュール間関数呼び出しのキャプチャを容易にし得る。以下で説明するように、ページ・フォールトは、次に、制御を複数の例外ハンドラ１２０ａ〜１２０ｎに渡すことができる。
【００１６】
前述したように、複数のブート・モジュール１１２ａ〜１１２ｍは、コンピューティング・デバイス１００のブート・プロセス中に動作し得る。例えば、複数のプロセッサ１０２ａ〜１０２ｎによるブート・モジュール１１２ａ〜１１２ｍの動作は、コンピューティング・デバイス１００の様々なデバイス、インタフェース（例えば、他のブート・モジュールにより呼び出し可能なサービス関数）、又は他のコンポーネントがコンピューティング・デバイス１００の通常の動作中に利用され得るように、それらを初期化することができる。
【００１７】
様々な実施形態において、各ブート・モジュール１１２ａ、１１２ｂ、．．．１１２ｍ（以後、単に１１２）は、それぞれのフラグ１１４ａ、１１４ｂ、．．．１１４ｍ（以後、単に１１４）に関連付けられ得る。フラグ１１４ａ〜１１４ｍは、複数のプロセッサ１０２ａ〜１０２ｎがアクセス可能なメモリの一部（例えば、ＲＡＭ又はレジスタ）に記憶され得る。各フラグ１１４は、関連するブート・モジュール１１２が、例えば、複数のプロセッサ１０２ａ〜１０２ｎのうちのいずれかにより動作中である、あるいは「ビジー」であるとみなされるかのインジケーションを記憶するよう構成され得る。
【００１８】
ブート・モジュール１１２は、それぞれのフラグ１１４を変更することによって、複数の異なる状況において、動作中である、あるいは「ビジー」であると、例えば、スケジューラ１０８のインスタンス及び／又は複数の例外ハンドラ１２０ａ〜１２０ｎのインスタンスにより指定され得る。例えば、特定のブート・モジュール１１２は、そのブート・モジュールのサービス関数が確立されたかどうかにかかわらず、そのエントリ・ポイント関数の実行がまだ終了していない場合、動作中であるとみなされ得る。別の例として、特定のブート・モジュール１１２は、例えば、別のブート・モジュールにより呼び出された結果として、そのサービス関数のうちの１つの実行がまだ終了していない場合、ビジーであるとみなされ得る。
【００１９】
様々な実施形態において、特定のブート・モジュール１１２のエントリ・ポイント関数及び／又はサービス関数は、そのブート・モジュール１１２が動作中である、あるいはビジーであるとみなされるために、アクティブに実行中である必要はない。例えば、ブート・モジュール１１２のエントリ・ポイント関数及び／又はサービス関数は、別のブート・モジュールのサービス関数を呼び出して、別のブート・モジュールのサービス関数からリターンを待っていることがある。そのような場合、ブート・モジュール１１２は、それでも、動作中である、あるいはビジーであるとみなされ得る。
【００２０】
様々な実施形態において、ブート・モジュール１１２は、そのエントリ・ポイント関数が終了しており、そのサービス関数のいずれもアクティブに実行中でない、あるいはそのサービス関数のいずれもダウンストリームのサービス関数からリターンを待っていない場合、例えば、それぞれのフラグ１１４を変更するスケジューラ１０８のインスタンス又は例外ハンドラ１２０により、「動作中でない」、あるいは「レディー（ready）」と指定され得る（例えば、ブート・モジュール１１２は、関数呼び出しを受け入れる準備ができている）。
【００２１】
このように、フラグ１１４ａ〜１１４ｍは、１つのプロセッサ１０２だけが一度に特定のブート・モジュールをアトミックに動作させることができることを確実にするためのシグナルとして、例えば、スケジューラ１０８ａ〜１０８ｎのインスタンス及び／又は例外ハンドラ１２０ａ〜１２０ｎのインスタンスにより利用され得る。様々な実施形態において、各フラグ１１４は、例えば、ブート・モジュール１１２の動作に関連する他の情報を保持するための、各ブート・モジュール１１２について生成されるより大きなデータ構造（図示せず）の一部であり得る。
【００２２】
様々な実施形態において、複数のプロセッサ１０２ａ〜１０２ｎは、複数の並行処理スレッドにおいて、複数のブート・モジュール１１２ａ〜１１２ｍを動作させることができ得る。これは、とりわけ、コンピューティング・デバイス１００の起動時間（ブート時間とも呼ばれる）を速めることができる。しかしながら、前にも示唆したように、全てのブート・モジュールが、並行して動作するように設計され得るわけではない。例えば、複数のブート・モジュール１１２ａ〜１１２ｍは、様々な異なるシリコン・コンポーネント（例えば、入力／出力コンポーネント）のために、様々な異なる相手先ブランド名製造業者（「ＯＥＭ」）により作成され得る。並行動作の成功のためにブート・モジュール１１２ａ〜１１２ｍを設計することは、コンピューティング・デバイス１００に含まれ複数のブート・モジュール１１２ａ〜１１２ｍの動作により初期化され得るシリコン・コンポーネントの実質的に無限の可能な組合せは言うまでもなく、様々なＯＥＭの全く異質で潜在的に競争的な性質に起因して、実現困難であり得る。
【００２３】
したがって、様々な実施形態において、スケジューラ１０８ａ〜１０８ｎの１以上のインスタンス及び／又は例外ハンドラ１２０ａ〜１２０ｎの１以上のインスタンス等の、コンピューティング・デバイス１００の様々なコンポーネントは、例えば、ページ・テーブル１１０ａ〜１１０ｎ及び／又はフラグ１１４ａ〜１１４ｍを用いて、ブート・プロセス中に複数の並行処理スレッド間の複数のブート・モジュール１１２ａ〜１１２ｍの動作を順序付けるよう構成され得る。詳細には、処理スレッドのうちの第１の処理スレッドにおける、複数のブート・モジュール１１２ａ〜１１２ｍのうちの第１のブート・モジュールの動作は、第１のブート・モジュール１１２が処理スレッドのうちの第２の処理スレッドにおいて処理中であるとみなされないと判定されるまで、例えば、スケジューラ１０８又は例外ハンドラ１２０ａ、１２０ｂ、．．．１２０ｎ（以後、単に１２０）により延期され得る。様々な実施形態において、第１のブート・モジュール１１２が、第１のブート・モジュール１１２により呼び出された任意のダウンストリームのブート・モジュールの動作の終了を待つ間、第１のブート・モジュール１１２は、動作中であるとみなされ得る。
【００２４】
図２は、第１のブート・モジュール１１２ａ及び第２のブート・モジュール１１２ｂの両方が、（例えば、関数呼び出しとして）第３のブート・モジュール１１２ｃを呼び出し得る例示的なシナリオ２００を示している。各呼び出しは、ページ・フォールト例外をトリガすることができ、これは、制御を例外ハンドラ１２０のインスタンス、すなわち、第１の例外ハンドラ１２０ａ及び第２の例外ハンドラ１２０ｂに渡すことができる。複数のスケジューラ１０８ａ〜１０８ｎの場合と同様に、各例外ハンドラ１２０は、複数のプロセッサ１０２ａ〜１０２ｎにより実行され得るコンピュータ・コード（図６参照）の単一コピーのインスタンスであり得る。
【００２５】
例えば、第１のブート・モジュール１１２ａが第３のブート・モジュール１１２ｃを呼び出すときに、制御が第１の例外ハンドラ１２０ａに渡され得る。第１の例外ハンドラ１２０ａは、制御を第３のブート・モジュール１１２ｃに渡す前に、第３のブート・モジュール１１２ｃが、例えば、別の処理スレッドにおいて、現在は動作中であるとみなされないことを確実にすることができる。第３のブート・モジュール１１２ｃの動作が終了した後、第３のブート・モジュール１１２ｃは、制御を第１のブート・モジュール１１２ａに戻すことができ、第１のブート・モジュール１１２ａは、もう一度、第１の例外ハンドラ１２０ａをトリガすることができる。第３のブート・モジュール１１２ｃが動作中であった間、第１のブート・モジュール１１２ａは、「動作中」状態であり続けることができるので、第１の例外ハンドラ１２０ａは、制御を直接第１のブート・モジュール１１２ａに戻すことができる。したがって、第１のブート・モジュール１１２ａは、第３のブート・モジュール１１２ｃの終了を待つ間、任意の他の処理スレッド上で実行され得ない。同じことが、第２のブート・モジュール１１２ｂ、第２の例外ハンドラ１２０ｂ、及び第３のブート・モジュール１１２ｃの間で生じ得る。
【００２６】
第１の例外ハンドラ１２０ａ及び第２の例外ハンドラ１２０ｂ等の例外ハンドラ１２０が、どのようにモジュール間呼び出しをキャプチャして、ブート・モジュール１１２がある時間に１つの処理スレッドにおいて動作することをどのように確実にし得るかを示す例示的なタイムラインが、図３に示されている。２つのスレッド、ＴＨＲＥＡＤ１及びＴＨＲＥＡＤ２が、（図３には示されていない）２つのプロセッサ１０２により動作され得る。スケジューラ１０８のインスタンス（これも図３に示されていない）も各スレッド上で動作し得る。左の矢印により示されるように、時間はページ下方に向かって進む。これらのフローチャートは、複数のスレッド間の全般的な流れを示すために作成されているに過ぎない。様々な実施形態において、厳格なロック及び／又はセマフォを使用して、正確なマルチスレッド動作を確実にすることができる。
【００２７】
ブロック３０２において、ＴＨＲＥＡＤ１上で動作しているスケジューラ１０８のインスタンスは、第１のブート・モジュール１１２ａを動作させることができる。ブロック３０４において、ＴＨＲＥＡＤ２上で動作しているスケジューラ１０８のインスタンスは、第２のブート・モジュール１１２ｂを同時に動作させることができる。
【００２８】
ブロック３０６において、第１のブート・モジュール１１２ａは、第３のブート・モジュール１１２ｃを呼び出すことができる。このモジュール間呼び出しは、例えば、ＴＨＲＥＡＤ１に関連付けられた、第３のブート・モジュール１１２ｃが「無効」としてマークされたページ・テーブル１１０ａに起因して、ページ・フォールト例外を生じさせ得る。したがって、ブロック３０８において、図２における第１の例外ハンドラ１２０ａ等の例外ハンドラ１２０（図３において「ＥＨ」として示される）は、引き継ぐことができる。第１の例外ハンドラ１２０ａは、例えば、第３のブート・モジュール１１２ｃに関連付けられたフラグ１１４ｃに基づいて、第３のブート・モジュール１１２ｃが、別の処理スレッドにおいて現在は動作中であるとみなされないと判定することができる。この判定を行う際、第１の例外ハンドラ１２０ａは、第３のブート・モジュール１１２ｃの動作が有効にされ、第１のブート・モジュール１１２ａが無効にされることを示すために、ＴＨＲＥＡＤ１に関連付けられたページ・テーブル１１０ａを変更することができる。第１の例外ハンドラ１２０ａはまた、第３のブート・モジュール１１２ｃがＴＨＲＥＡＤ１において動作中であるとみなされることを示すために、第３のブート・モジュール１１２ｃに関連付けられたフラグ１１４ｃを変更することができ、制御を第３のブート・モジュール１１２ｃに渡すことができる。ブロック３１０において、第３のブート・モジュール１１２ｃは動作することができる。第３のブート・モジュール１１２ｃの動作が終了すると、そのそれぞれのフラグ１１４ｃは、第３のブート・モジュール１１２ｃが動作中であるとみなされないことを示すように、例えば、スケジューラ１０８又は第１の例外ハンドラ１２０ａにより設定され、制御が、第１のブート・モジュール１１２ａに戻され得る。
【００２９】
その間にも、ＴＨＲＥＡＤ１上での第３のブート・モジュール１１２ｃの動作中、動作３１２において、ＴＨＲＥＡＤ２上で動作している第２のブート・モジュール１１２ｂは、第３のブート・モジュール１１２ｃを呼び出すことができる。このモジュール間呼び出しは、例えば、ＴＨＲＥＡＤ２に関連付けられた、第３のブート・モジュール１１２ｃが「無効」としてマークされたページ・テーブル１１０（図３には示されていない）に起因して、ページ・フォールト例外を生じさせ得る。したがって、ブロック３１４において、図２における第２の例外ハンドラ１２０ｂ等の例外ハンドラ１２０の別のインスタンスは、引き継ぐことができる。第２の例外ハンドラ１２０ｂは、例えば、第３のブート・モジュール１１２ｃに関連付けられたフラグ１１４ｃに基づいて、第３のブート・モジュール１１２ｃが、別の処理スレッド、すなわち、ＴＨＲＥＡＤ１において現在動作中であるとみなされると判定することができる。
【００３０】
ブロック３１６において、第２の例外ハンドラ１２０ｂは、第３のブート・モジュール１１２ｃが利用可能になるまで、第３のブート・モジュール１１２ｃの動作を延期することができる。いくつかの実施形態において、第２の例外ハンドラ１２０ｂは、第３のブート・モジュール１１２ｃが動作中であるともはやみなされないことを示すようにマークされるまで、第３のブート・モジュール１１２ｃのフラグ１１４ｃを単に定期的にチェックすることができる。いくつかの実施形態において、第２の例外ハンドラ１２０ｂは、第２のブート・モジュール１１２ｂの動作を中断し、第２のブート・モジュール１１２ｂの依存条件を、「第３のブート・モジュール１１２ｃはレディーである」と設定し、制御をスケジューラ１０８に戻すことができる。スケジューラ１０８は、動作させる別のモジュールを選択することができ、依存条件が満たされると、第２のブート・モジュール１１２ｂを後で選択することができる。
【００３１】
ＴＨＲＥＡＤ１に戻ると、第３のブート・モジュール１１２ｃの動作が終了した後、ブロック３１８において、そのそれぞれのフラグ１１４ｃは、第３のブート・モジュール１１２ｃが動作中であるとみなされない（例えば、「レディー」である）ことを示すために、第１の例外ハンドラ１２０ａにより変更され得る。ブロック３２０において、ＴＨＲＥＡＤ１上の第１のブート・モジュール１１２ａの動作は、再開することができる。
【００３２】
ＴＨＲＥＡＤ２に戻ると、ブロック３１６において、第２の例外ハンドラ１２０ｂは、例えば、そのそれぞれのフラグ１１４ｃに基づいて、第３のブート・モジュール１１２ｃが現在利用可能であると判定することができる。ブロック３２２において、第３のブート・モジュール１１２ｃは、ＴＨＲＥＡＤ２上で動作することができる。ＴＨＲＥＡＤ２上の第３のブート・モジュール１１２ｃの動作が終了して、制御が第２のブート・モジュール１１２ｂに戻されると、ブロック３２４において、第２の例外ハンドラ１２０ｂは、第３のブート・モジュール１１２ｃがもはや動作中でない（例えば、「レディー」である）ことを示すために、第３のブート・モジュール１１２ｃに関連付けられたフラグ１１４ｃを変更することができる。次いで、ブロック３２６において、第２のブート・モジュール１１２ｂの動作は、再開することができる。
【００３３】
図４は、様々な実施形態に従った、インスタンスが特定の処理スレッドに関連付けられているスケジューラ１０８により実施され得る例示的な方法４００を示している。動作４０２において、スケジューラ１０８のインスタンスは、処理スレッドのために複数のブート・モジュール１１２ａ〜１１２ｍの各々に関連付けられた１以上のページ・テーブル・エントリを含むページ・テーブル１１０を生成することができる。１以上のページ・テーブル・エントリは、ブート・モジュールのアドレス範囲に応じて、単一のブート・モジュールに対応し得る。さらに、動作４０２において、１以上のページ・テーブル・エントリは、関連するブート・モジュール１１２の実行が無効にされる、あるいは禁止されることを示すように、例えば、スケジューラ１０８により設定され得る。
【００３４】
動作４０４において、ブート・モジュール１１２が、例えば、スケジューラ１０８のインスタンスにより、複数のブート・モジュール１１２ａ〜１１２ｍから、動作させるために選択され得る。スケジューラ１０８のインスタンスは、依存表現を使用して、どのブート・モジュール１１２を動作させるかを選択することができる。いくつかの実施形態において、スケジューラ１０８のインスタンスは、「初期」状態（例えば、エントリ・ポイント関数がまだ動作していない）にある、あるいは「中断」状態（例えば、おそらくは、フラグ１１４が最後にチェックされてからダウンストリームの呼び出されたブート・モジュールが動作を終了させた）にある１以上のブート・モジュール１１２を識別して、依存表現が満たされたブート・モジュール１１２を、動作させるために選択することができる。
【００３５】
動作４０６において、上述した条件を満たすブート・モジュール１１２が見つからない場合、動作４０８において、スケジューラ１０８のインスタンスは、スレッド上で動作させるために利用可能なブート・モジュールが存在しないことを示すように、現在の処理スレッドに関連付けられた、「利用可能なブート・モジュールはない」というフラグを設定することができる。動作４１０において、全ての他の処理スレッドについても同様であると判定された場合（これは、コンピューティング・デバイスが完全にブートされていることを示し得る）、方法４００は終了し得る。動作４１０において、全てのスレッドについては同様ではないと判定された場合、方法４００は、動作４０４に戻り、動作させるブート・モジュール１１２を選択するために、別の試行がなされ得る。
【００３６】
一方、動作４０６において、適格なブート・モジュールが見つかった場合、動作４１２において、その適格なブート・モジュール（以後、「現在のブート・モジュール」と呼ぶ）に関連付けられたフラグ１１４が、現在のブート・モジュールが動作中である、あるいはビジーであるとみなされることを示すように変更され得る。動作４１４において、「利用可能なブート・モジュールはない」というスレッド・フラグが、スレッド上で動作させるために利用可能なブート・モジュールが存在することを示すようにクリアされ得る。動作４１６において、現在のブート・モジュール１１２に関連付けられた１以上のページ・テーブル・エントリが、特定のブート・モジュール１１２の実行が有効にされる、あるいは許可されることを示すように、例えば、スケジューラ１０８のインスタンスにより変更され得る。次いで、動作４１８において、現在の処理スレッドの制御が、例えば、スケジューラ１０８により、現在のブート・モジュール１１２に渡され得る。
【００３７】
動作中、現在のブート・モジュール１１２は、（例えば、関数呼び出しとして）別のブート・モジュール１１２を呼び出すことができる。動作４０２において、ターゲット・ブート・モジュール１１２に関連付けられた１以上のエントリが、実行が無効にされる、あるいは禁止されることを示すように設定されたことを思い出してください。したがって、モジュール間関数呼び出しは、ページ・フォールト例外を投げさせ、動作４２０において、制御が例外ハンドラ１２０に渡され得る。動作４２０において示されるように、例外ハンドラ１２０は、一例が図５に示される、動作させるべき自身のルーチンを有することができる。
【００３８】
最終的に、例外ハンドラ・ルーチン４２０及び／又は他のブート・モジュール１１２の介入動作にもかかわらず、現在のブート・モジュール１１２は、終了まで動作することができる。次いで、動作４２２において、制御がスケジューラ１０８に戻され得る。動作４２４において、まさに終了したブート・モジュール１１２に関連付けられた１以上のページ・テーブル・エントリが、実行が無効にされる、あるいは禁止されることを再度示すように、例えば、スケジューラ１０８のインスタンスにより変更され得る。動作４２６において、現在のブート・モジュール１１２に関連付けられたフラグ１１４が、現在のブート・モジュールを動作中でない、あるいは「レディー」であるとして指定するために、例えば、スケジューラ１０８のインスタンスにより設定され得る。次いで、方法４００は、別のブート・モジュール１１２の選択のために、動作４０４に戻ることができる。
【００３９】
図５は、様々な実施形態に従った、例外ハンドラ・ルーチン４２０のインスタンスの例示的な動作フローを示している。処理スレッドにおけるモジュール間関数呼び出し又はリターンの結果として、ページ・フォールト例外が発生すると、動作５０２において、モジュール間関数呼び出し又はリターンのソース・メモリ・アドレス及びターゲット・メモリ・アドレスが、例えば、その処理スレッドに関連付けられた例外ハンドラ１２０のインスタンスにより判定され得る。例えば、例外ハンドラ１２０のインスタンスは、制御レジスタ（例えば、ＣＲ２）、スタック、又は他のデータ構造をチェックすることができる。動作５０４において、判定されたメモリ・アドレスに基づいて、ソース・ブート・モジュール１１２及びターゲット・ブート・モジュール１１２が、例えば、例外ハンドラ１２０により特定され得る。例えば、例外ハンドラ１２０のインスタンスは、ソース・アドレス及びターゲット・アドレスを、複数のブート・モジュール１１２ａ〜１１２ｍのアドレスと比較することができる。動作５０６において、ソース・ブート・モジュール１１２に関連付けられた呼び出し側スレッドの１以上のページ・テーブル・エントリが、動作が無効にされる、あるいは禁止されることを示すように、例えば、例外ハンドラ１２０により変更され得る。
【００４０】
動作５０８において、ページ・フォールトが、関数呼び出しにより生じたか、あるいはリターンにより生じたかが判定され得る。例えば、図２において、第１のブート・モジュール１１２ａが第３のブート・モジュール１１２ｃを呼び出したときには、これは関数呼び出しであるのに対し、第３のブート・モジュール１１２ｃが制御を第１のブート・モジュール１１２ａに戻したときには、これはリターンである。
【００４１】
ページ・フォールトが関数呼び出しにより生じた場合、動作５１０において、例えば、ターゲット・ブート・モジュール１１２に関連付けられたフラグ１１４をチェックすることにより、ターゲット・ブート・モジュール１１２が動作中であるとみなされるかどうかが判定され得る。ターゲット・モジュールが動作中であるとみなされる（例えば、「レディー」ではない）場合、いくつかの実施形態において、例外ハンドラ１２０のインスタンスは、ターゲット・ブート・モジュール１１２が動作中であるともはやみなされなくなるまで、フラグ１１４を単に再チェックすることができる。図５に示すものを含め、他の実施形態において、動作５１２において、例外ハンドラ１２０のインスタンスは、ターゲット・ブート・モジュール１１２が利用可能になるまで、ソース・ブート・モジュール１１２の動作を中断することができる。いくつかの実施形態において、動作５１４において、例外ハンドラ１２０のインスタンスは、ターゲット・ブート・モジュール１１２が動作中であるとみなされる必要がない（例えば、「レディー」状態にある）ことを示すように、中断したソース・ブート・モジュールの依存関係を変更することができる。動作５１６において、例外ハンドラ１２０のインスタンスは、例外ハンドラのリターン時に、例えば、それに従ってそのプログラム・カウンタを設定することにより、制御をスケジューラ１０８に渡すことができ、次いで、例外ハンドラの方法４２０は、リターンすることができる。
【００４２】
動作５１０に戻ると、ターゲット・ブート・モジュールが動作中であるとみなされない（例えば、フラグ１１４が「レディー」に設定されている）場合、動作５１８において、ターゲット・ブート・モジュール１１２に関連付けられた１以上のページ・テーブル・エントリが、ターゲット・ブート・モジュール１１２の動作が有効にされる、あるいは許可されることを示すように変更され得る。動作５０８において、ページ・フォールトが、リターンにより生じたと判定された場合、動作５１０〜５１６はスキップされ、方法４２０は動作５１８に直接進むことができることに留意されたい。
【００４３】
動作５２０において、ページ・フォールトが関数呼び出しにより生じたか、あるいはリターンにより生じたかが、例えば、例外ハンドラ１２０のインスタンスにより、もう一度判定され得る。動作５２０における答えが関数呼び出しである場合、動作５２２において、ターゲット・ブート・モジュール１１２に関連付けられたフラグ１１４が、ターゲット・ブート・モジュール１１２が動作中である、あるいは「ビジー」であることを示すように、例えば、例外ハンドラ１２０により設定され得る。動作５２０における答えがリターンである場合、動作５２４において、ソース・ブート・モジュールに関連付けられたフラグ１１４が、「レディー」に設定され得る。いずれにせよ、動作５２６において、例外ハンドラ１２０は、例外ハンドラのリターン時に、例えば、それに従ってそのプログラム・カウンタを設定することにより、制御をターゲット・ブート・モジュール１１２に渡すことができる。次いで、方法４２０はリターンすることができる。
【００４４】
図６は、様々な実施形態に従った例示的なコンピューティング・デバイス６００を示している。コンピューティング・デバイス６００は、複数のコンポーネント、複数のプロセッサ１０２、及び、場合によっては１以上の通信チップ６０６を含み得る。様々な実施形態において、プロセッサ１０２は、プロセッサ・コアであり得る。様々な実施形態において、通信チップ６０６はまた、物理的且つ電気的にプロセッサ１０２に接続され得る。さらなる実施形態において、通信チップ６０６は、プロセッサ１０２の一部であってもよい。様々な実施形態において、コンピューティング・デバイス６００は、プリント回路基板（「ＰＣＢ」）６０２を含み得る。これらの実施形態では、プロセッサ１０２及び通信チップ６０６は、ＰＣＢ６０２上に実装され得る。代替実施形態において、様々なコンポーネントは、ＰＣＢ６０２を使用することなく接続され得る。
【００４５】
その用途に応じて、コンピューティング・デバイス６００は、物理的且つ電気的にＰＣＢ６０２に接続され得る、あるいは接続され得ない他のコンポーネントを含んでもよい。そのような他のコンポーネントは、揮発性メモリ（例えば、「ＤＲＡＭ」とも呼ばれるダイナミック・ランダム・アクセス・メモリ６０８）、不揮発性メモリ（例えば、「ＲＯＭ」とも呼ばれる読み取り専用メモリ６１０）、フラッシュ・メモリ６１２、グラフィックス・プロセッサ６１４、入力／出力コントローラ６１６、デジタル信号プロセッサ（図示せず）、暗号プロセッサ（図示せず）、１以上のアンテナ６１８、ディスプレイ（図示せず）、タッチ・スクリーン・ディスプレイ６２０、タッチ・スクリーン・コントローラ６２２、バッテリ６２４、オーディオ・コーデック（図示せず）、ビデオ・コーデック（図示せず）、全地球測位システム（「ＧＰＳ」）デバイス６２８、コンパス６３０、加速度計（図示せず）、ジャイロスコープ（図示せず）、スピーカ６３２、カメラ６３４、及び大容量記憶デバイス（ハード・ディスク・ドライブ、ソリッド・ステート・ドライブ、コンパクト・ディスク（「ＣＤ」）、デジタル多用途ディスク（「ＤＶＤ」）等）（図示せず）等を含むが、これらに限定されるものではない。様々な実施形態において、プロセッサ１０２は、システム・オン・チップ（「ＳｏＣ」）を形成するための、他のコンポーネントとの同じダイ上に一体化され得る。
【００４６】
様々な実施形態において、揮発性メモリ（例えば、ＤＲＡＭ６０８）、不揮発性メモリ（例えば、ＲＯＭ６１０）、フラッシュ・メモリ６１２、及び大容量記憶デバイスは、プロセッサ１０２による実行に応答して、コンピューティング・デバイス６００が、方法４００及び／又は方法４２０の全ての態様又は選択された態様を実施することを可能にするよう構成されたプログラミング命令を含み得る。例えば、揮発性メモリ（例えば、ＤＲＡＭ６０８）、不揮発性メモリ（例えば、ＲＯＭ６１０）、フラッシュ・メモリ６１２、及び大容量記憶デバイス等のメモリ・コンポーネントのうちの１以上は、スケジューラ・コード６５０及び／又は例外ハンドラ・コード６６０の一時的コピー及び／又は永続的コピーを含み得る。これらは、実行されたとき、コンピューティング・デバイス６００に、方法４００及び／又は方法４２０の全ての態様又は選択された態様をそれぞれ実施するスケジューラ１０８の１以上のインスタンス及び／又は例外ハンドラ１２０の１以上のインスタンスを動作させる。
【００４７】
通信チップ６０６は、コンピューティング・デバイス６００へ／からのデータの伝送のための有線通信及び／又は無線通信を可能にし得る。「無線」という用語及びその派生語は、非固形媒体を介した変調された電磁放射線の使用によりデータを通信することができる回路、デバイス、システム、方法、技術、通信チャネル等を説明するために使用され得る。この用語は、関連するデバイスがいかなる配線も含まないことを意味するものではないが、いくつかの実施形態においては、それらは含まなくてもよい。本明細書で説明した実施形態のほとんどは、例として、ＷｉＦｉ（登録商標）及びＬＴＥ  ＲＡＴを含む。しかしながら、通信チップ６０６は、これらに限定されないが、ＩＥＥＥ６０２．２０、汎用パケット無線サービス（「ＧＰＲＳ」）、「Ｅｖ−ＤＯ（evolution  data  optimized）」、進化型高速パケット・アクセス（「ＨＳＰＡ＋」）、進化型高速下りリンク・パケット・アクセス（「ＨＳＤＰＡ＋」）、進化型高速上りリンク・パケット・アクセス（「ＨＳＵＰＡ＋」）、「ＧＳＭ（登録商標）（global  system  for  mobile  communications）」、「ＥＤＧＥ（enhanced  data  rates  for  GSM  evolution）」、符号分割多元接続（「ＣＤＭＡ」）、時分割多元接続（「ＴＤＭＡ」）、「ＤＥＣＴ（digital  enhanced  cordless  telecommunications）」、Ｂｌｕｅｔｏｏｔｈ（登録商標）、及びそれらの派生だけでなく、３Ｇ、４Ｇ、５Ｇ、及びさらに先のものとして指定される任意の他の無線プロトコルを含む多数の無線規格又はプロトコルのいずれかを実装してよい。コンピューティング・デバイス６００は、複数の通信チップ６０６を含み得る。例えば、第１の通信チップ６０６は、Ｗｉ−Ｆｉ（登録商標）及びＢｌｕｅｔｏｏｔｈ（登録商標）等のより短い距離の無線通信に専用であってよく、第２の通信チップ６０６は、ＧＰＳ、ＥＤＧＥ、ＧＰＲＳ、ＣＤＭＡ、ＷｉＭＡＸ（登録商標）、ＬＴＥ、Ｅｖ−ＤＯ、及びその他等のより長い距離の無線通信に専用であってよい。
【００４８】
様々な実施形態において、コンピューティング・デバイス６００は、ラップトップ、ネットブック、ノートブック、ウルトラブック（登録商標）、スマートフォン、コンピューティング・タブレット、携帯情報端末（「ＰＤＡ」）、ウルトラ・モバイルＰＣ、携帯電話機、デスクトップ・コンピュータ、サーバ、プリンタ、スキャナ、モニタ、セットトップ・ボックス、エンターテイメント制御ユニット（例えば、ゲーム・コンソール）、デジタル・カメラ、ポータブル音楽プレーヤ、又はデジタル・ビデオ・レコーダであり得る。さらなる実施形態において、コンピューティング・デバイス６００は、データを処理する任意の他の電子デバイスであってよい。
【００４９】
上述した技術を実行するための、（機械読み取り可能記憶媒体等の非一時的な機械読み取り可能媒体を含む）機械読み取り可能媒体、方法、システム、及びデバイスは、本明細書で開示した実施形態の例示的な例である。さらに、上述したインタラクションにおける他のデバイスが、開示した様々な技術を実行するよう構成されてもよい。
【００５０】
例
例１は、命令を含む少なくとも１つのコンピュータ読み取り可能媒体を対象とする。コンピューティング・デバイスによる前記命令の実行に応答して、前記命令は、前記コンピューティング・デバイスに、複数の並行処理スレッド間の複数のソフトウェア・モジュールの動作を含むタスクを速めさせる。前記ソフトウェア・モジュールの動作は、前記処理スレッドのうちの第１の処理スレッドにおける、前記複数のソフトウェア・モジュールのうちの第１のソフトウェア・モジュールの動作を、前記第１のソフトウェア・モジュールが動作中であるとみなされないと判定されるまで延期することを含み、前記第１のソフトウェア・モジュールは、自身が動作中である間、又は前記第１のソフトウェア・モジュールにより呼び出された任意の他のソフトウェア・モジュールの動作の終了を待つ間、動作中であるとみなされる。
【００５１】
例２は、例１の少なくとも１つのコンピュータ読み取り可能媒体を含み、前記コンピューティング・デバイスによる前記命令の実行に応答して、前記命令は、前記コンピューティング・デバイスに、前記第１の処理スレッドにおいて実行中である、前記複数のソフトウェア・モジュールのうちの第２のソフトウェア・モジュールによる、前記第１のソフトウェア・モジュールのモジュール間関数呼び出しに応答して、前記判定を行わせる。
【００５２】
例３は、例２の少なくとも１つのコンピュータ読み取り可能媒体を含み、前記コンピューティング・デバイスによる前記命令の実行に応答して、前記命令は、前記コンピューティング・デバイスに、前記モジュール間関数呼び出しにページ・フォールトをトリガさせる。
【００５３】
例４は、例３の少なくとも１つのコンピュータ読み取り可能媒体を含み、前記コンピューティング・デバイスによる前記命令の実行に応答して、前記命令は、前記コンピューティング・デバイスに、例外ハンドラを実施させ、前記ページ・フォールトに応答して、実行制御は、前記第１の処理スレッドに関連付けられた、前記例外ハンドラのインスタンスに渡され、前記例外ハンドラの前記インスタンスは、前記判定を行う。
【００５４】
例５は、例１の少なくとも１つのコンピュータ読み取り可能媒体を含み、前記コンピューティング・デバイスによる前記命令の実行に応答して、前記命令は、前記コンピューティング・デバイスに、前記複数の処理スレッドのための複数のページ・テーブルをそれぞれ初期化させる。
【００５５】
例６は、例５の少なくとも１つのコンピュータ読み取り可能媒体を含み、前記コンピューティング・デバイスによる前記命令の実行に応答して、前記命令は、前記コンピューティング・デバイスに、前記複数のソフトウェア・モジュールに対応するエントリを前記複数のページ・テーブルに含めさせる。
【００５６】
例７は、例６の少なくとも１つのコンピュータ読み取り可能媒体を含み、前記コンピューティング・デバイスによる前記命令の実行に応答して、前記命令は、前記コンピューティング・デバイスに、前記複数のソフトウェア・モジュールの動作が、前記第１の処理スレッドにおいて、無効にされる、あるいは禁止されることを示すために、前記複数のソフトウェア・モジュールに対応する、第１のページ・テーブルのエントリを初期化させ、動作させる前記第１のソフトウェア・モジュールの選択時に、前記第１のソフトウェア・モジュールの動作が有効にされる、あるいは許可されることを示すように、前記第１のソフトウェア・モジュールに対応する、前記第１のページ・テーブルの１以上のページ・テーブル・エントリを変更させる。
【００５７】
例８は、例１乃至６いずれか１つの少なくとも１つのコンピュータ読み取り可能媒体を含み、前記コンピューティング・デバイスによる前記命令の実行に応答して、前記命令は、前記コンピューティング・デバイスに、前記複数の処理スレッドのためのそれぞれのインスタンスにインスタンス化され得るスケジューラを実施させる。
【００５８】
例９は、例１乃至６いずれか１つの少なくとも１つのコンピュータ読み取り可能媒体を含み、前記コンピューティング・デバイスによる前記命令の実行に応答して、前記命令は、さらに、前記コンピューティング・デバイスに、前記複数のソフトウェア・モジュールに対応する複数のインジケータをメモリに記憶させ、各インジケータは、それぞれのソフトウェア・モジュールが動作中であるとみなされるかどうかを示すよう構成される。
【００５９】
例１０は、システムを対象とする。当該システムは、複数の並行処理スレッドにおいて、タスクの複数のソフトウェア・モジュールを動作させる複数のプロセッサと、前記複数のソフトウェア・モジュールを記憶する、前記複数のプロセッサに動作可能に接続されたメモリと、前記処理スレッドのうちの第１の処理スレッドにおいて、前記複数のソフトウェア・モジュールのうちの第１のソフトウェア・モジュールの動作を、前記第１のソフトウェア・モジュールが動作中であるとみなされないと判定するまで延期することを含む、前記処理スレッド間の前記ソフトウェア・モジュールの動作を順序付ける例外ハンドラであって、前記第１のソフトウェア・モジュールは、自身が動作中である間、又は前記第１のソフトウェア・モジュールにより呼び出された任意の他のソフトウェア・モジュールの動作の終了を待つ間、動作中であるとみなされる、例外ハンドラと、を備える。
【００６０】
例１１は、例１０のシステムを含み、前記例外ハンドラは、前記第１の処理スレッドにおいて動作中である、前記複数のソフトウェア・モジュールのうちの第２のソフトウェア・モジュールによる、前記第１のソフトウェア・モジュールのモジュール間関数呼び出しに応答して、前記判定を行う。
【００６１】
例１２は、例１１のシステムを含み、前記複数のソフトウェア・モジュールは、前記モジュール間関数呼び出しにページ・フォールトをトリガさせるよう構成された関連するステータスを有する。
【００６２】
例１３は、例１０のシステムを含み、前記複数の処理スレッドに関連付けられた複数のページ・テーブル内に前記複数のソフトウェア・モジュールに対応するエントリを保持するために、インスタンスが前記複数の処理スレッドに関連付けられるスケジューラをさらに備える。
【００６３】
例１４は、例１３のシステムを含み、前記複数のソフトウェア・モジュールの動作が、前記第１の処理スレッドにおいて、無効にされる、あるいは禁止されることを示すために、前記複数のソフトウェア・モジュールに対応する、第１のページ・テーブルのエントリが初期化され、動作させる前記第１のソフトウェア・モジュールの選択時に、前記第１のソフトウェア・モジュールに対応する、前記第１のページ・テーブルの１以上のページ・テーブル・エントリが、前記第１のソフトウェア・モジュールの動作が有効にされる、あるいは許可されることを示すように変更される。
【００６４】
例１５は、例１０乃至１４いずれか１つのシステムを含み、前記メモリは、前記複数のソフトウェア・モジュールに対応する複数のインジケータをさらに記憶し、各インジケータは、それぞれのソフトウェア・モジュールが動作中であるかどうかを示すよう構成され、あるソフトウェア・モジュールが、前記複数のプロセッサにより実行される間、又は前記あるソフトウェア・モジュールが、前記あるソフトウェア・モジュールにより呼び出されたダウンストリームのソフトウェア・モジュールの動作の終了を待つ間、前記あるソフトウェア・モジュールは動作中であると示される。
【００６５】
例１６は、コンピュータにより実施される方法を含む。当該コンピュータにより実施される方法は、コンピューティング・デバイスにより、複数の並行処理スレッド間で実行される、タスクの複数のソフトウェア・モジュールのうちの第１のソフトウェア・モジュールが、前記複数の処理スレッドのうちの第１の処理スレッドにおいて動作している、前記複数のソフトウェア・モジュールのうちの第２のソフトウェア・モジュールにより呼び出されたことを判定するステップと、前記コンピューティング・デバイスにより、前記第１のソフトウェア・モジュールが動作中であるとみなされないと判定するステップであって、前記第１のソフトウェア・モジュールは、自身が動作中である間、又は前記第１のソフトウェア・モジュールにより呼び出された任意の他のソフトウェア・モジュールの動作の終了を待つ間、動作中であるとみなされる、ステップと、前記コンピューティング・デバイスにより、前記第１のソフトウェア・モジュールが動作中であるとみなされないという判定に応じて、前記第１の処理スレッドにおいて前記第１のソフトウェア・モジュールを動作させるステップと、前記コンピューティング・デバイスにより、前記第１のソフトウェア・モジュールが動作中であるとみなされるという判定に応じて、前記第１のソフトウェア・モジュールの動作が終了するまで、前記第１の処理スレッドにおける前記第１のソフトウェア・モジュールの動作を延期するステップと、を含む。
【００６６】
例１７は、例１６のコンピュータにより実施される方法を含み、前記複数のソフトウェア・モジュールのうちの前記第１のソフトウェア・モジュールが、前記複数のソフトウェア・モジュールのうちの前記第２のソフトウェア・モジュールにより呼び出されたという前記判定に応じて、ページ・フォールトをトリガするステップをさらに含む。
【００６７】
例１８は、例１７のコンピュータにより実施される方法を含み、前記コンピューティング・デバイスにより、例外ハンドラを実施し、前記ページ・フォールトに応答して、前記第１の処理スレッドに関連付けられた、前記例外ハンドラのインスタンスに実行制御を渡すステップをさらに含む。
【００６８】
例１９は、例１６のコンピュータにより実施される方法を含み、前記コンピューティング・デバイスにより、前記複数の処理スレッドのための複数のそれぞれのページ・テーブルを初期化するステップをさらに含む。
【００６９】
例２０は、例１９のコンピュータにより実施される方法を含み、前記コンピューティング・デバイスにより、前記複数のソフトウェア・モジュールに対応するエントリを前記複数のページ・テーブルに含めるステップをさらに含む。
【００７０】
例２１は、例２０のコンピュータにより実施される方法を含み、前記コンピューティング・デバイスにより、前記複数のソフトウェア・モジュールの動作が、前記第１の処理スレッドにおいて、無効にされる、あるいは禁止されることを示すために、前記複数のソフトウェア・モジュールに対応する、第１のページ・テーブルのエントリを初期化するステップと、前記コンピューティング・デバイスにより、動作させる前記第１のソフトウェア・モジュールを選択したことに応じて、前記第１のソフトウェア・モジュールの動作が有効にされる、あるいは許可されることを示すように、前記第１のソフトウェア・モジュールに対応する、前記第１のページ・テーブルの１以上のページ・テーブル・エントリを変更するステップと、をさらに含む。
【００７１】
例２２は、例１６乃至２１いずれか１つのコンピュータにより実施される方法を含み、前記コンピューティング・デバイスにより、前記複数の処理スレッドのためのそれぞれのインスタンスにインスタンス化されるスケジューラを実施するステップをさらに含む。
【００７２】
例２３は、例１６乃至２１いずれか１つのコンピュータにより実施される方法を含み、前記コンピューティング・デバイスにより、前記複数のソフトウェア・モジュールに対応する複数のインジケータを、前記コンピューティング・デバイスがアクセス可能なメモリに記憶するステップであって、各インジケータは、それぞれのソフトウェア・モジュールが処理スレッドにおいて動作中であるかどうかを示すよう構成される、ステップをさらに含む。
【００７３】
例２４は、装置を対象とする。当該装置は、複数の並行処理スレッド間で実行される、タスクの複数のソフトウェア・モジュールのうちの第１のソフトウェア・モジュールが、複数の処理スレッドのうちの第１の処理スレッドにおける、前記複数のソフトウェア・モジュールのうちの第２のソフトウェア・モジュールにより呼び出されたことを判定する手段と、前記第１のソフトウェア・モジュールが動作中であるとみなされないと判定する手段であって、前記第１のソフトウェア・モジュールは、自身が動作中である間、又は前記第１のソフトウェア・モジュールにより呼び出された任意の他のソフトウェア・モジュールの動作の終了を待つ間、動作中であるとみなされる、手段と、前記第１のソフトウェア・モジュールが動作中であるとみなされないという判定に応じて、前記第１の処理スレッドにおいて前記第１のソフトウェア・モジュールを動作させる手段と、前記第１のソフトウェア・モジュールが動作中であるという判定に応じて、前記第１のソフトウェア・モジュールの動作の終了まで、前記第１の処理スレッドにおける前記第１のソフトウェア・モジュールの動作を延期する手段と、を備える。
【００７４】
例２５は、例２４の装置を含み、前記複数のソフトウェア・モジュールのうちの前記第１のソフトウェア・モジュールが、前記複数のソフトウェア・モジュールのうちの前記第２のソフトウェア・モジュールを呼び出したという前記判定に応じて、ページ・フォールトをトリガする手段をさらに備える。
【００７５】
例２６は、例２５の装置を含み、例外ハンドラを実施する手段であって、前記ページ・フォールトに応答して、実行制御は、前記第１の処理スレッドに関連付けられた、前記例外ハンドラのインスタンスに渡される、手段をさらに備える。
【００７６】
例２７は、例２４の装置を含み、前記複数の処理スレッドのための複数のそれぞれのページ・テーブルを初期化する手段をさらに備える。
【００７７】
例２８は、例２７の装置を含み、前記複数のソフトウェア・モジュールに対応するエントリを前記複数のページ・テーブルに含める手段をさらに備える。
【００７８】
例２９は、例２８の装置を含み、前記複数のソフトウェア・モジュールの動作が、前記第１の処理スレッドにおいて、無効にされる、あるいは禁止されることを示すために、前記複数のソフトウェア・モジュールに対応する、第１のページ・テーブルのエントリを初期化する手段と、動作させる前記第１のソフトウェア・モジュールを選択したことに応じて、前記第１のソフトウェア・モジュールの動作が有効にされる、あるいは許可されることを示すように、前記第１のソフトウェア・モジュールに対応する、前記第１のページ・テーブルの１以上のページ・テーブル・エントリを変更する手段と、をさらに備える。
【００７９】
例３０は、例２４乃至２９いずれか１つの装置を含み、前記複数の処理スレッドのためのそれぞれのインスタンスにインスタンス化されるスケジューラを、コンピューティング・デバイスにより実施する手段をさらに備える。
【００８０】
例３１は、例２４乃至２９いずれか１つの装置を含み、前記複数のソフトウェア・モジュールに対応する複数のインジケータを記憶する手段であって、各インジケータは、それぞれのソフトウェア・モジュールが処理スレッドにおいて動作中であるとみなされるかどうかを示すよう構成され、あるソフトウェア・モジュールが実行される間、又は前記あるソフトウェア・モジュールが、前記あるソフトウェア・モジュールにより呼び出されたダウンストリームのソフトウェア・モジュールの動作の終了を待つ間、前記あるソフトウェア・モジュールは動作中である、手段をさらに備える。
【００８１】
説明の目的のために、所定の実施形態を図示し本明細書で説明したが、この出願は、本明細書で説明した実施形態の任意の適応例又は変形例をカバーするよう意図されている。したがって、本明細書で説明した実施形態は、請求項によってのみ限定されることが明白に意図されている。
【００８２】
本開示が、「１つの（a）」要素若しくは「第１の」要素又はその均等物を記載している場合、そのような開示は、１以上のそのような要素を含み、２以上のそのような要素を要求することも排除することもない。さらに、特定された要素のための順序のインジケータ（例えば、第１、第２、又は第３）は、その要素を区別するために使用され、特に明記されない限り、そのような要素の要求された数又は限定された数を示すものでも意味するものでもなく、そのような要素の特定の位置又は順序を示すものでもない。
【図１】
0006026677.tif 000002
【図２】
0006026677.tif 000003
【図３】
0006026677.tif 000004
【図４】
0006026677.tif 000005
【図５】
0006026677.tif 000006
【図６】
0006026677.tif 000007