(58)【調査した分野】(Int.Cl.,DB名)
前記例外ハンドラは、前記第1の処理スレッドにおいて動作中である、前記複数のソフトウェア・モジュールのうちの第2のソフトウェア・モジュールによる、前記第1のソフトウェア・モジュールのモジュール間関数呼び出しに応答して、前記判定を行う、請求項1記載のシステム。
前記複数のソフトウェア・モジュールは、前記モジュール間関数呼び出しにページ・フォールトをトリガさせるよう構成された関連するステータスを有する、請求項2記載のシステム。
前記複数の並行処理スレッドに関連付けられた複数のページ・テーブル内に前記複数のソフトウェア・モジュールに対応するエントリを保持するために、インスタンスが前記複数の並行処理スレッドに関連付けられるスケジューラ
をさらに備えた、請求項1記載のシステム。
前記複数のソフトウェア・モジュールの動作が、前記第1の処理スレッドにおいて、無効にされる、あるいは禁止されることを示すために、前記複数のソフトウェア・モジュールに対応する、第1のページ・テーブルのエントリが初期化され、動作させる前記第1のソフトウェア・モジュールの選択時に、前記第1のソフトウェア・モジュールに対応する、前記第1のページ・テーブルの1以上のページ・テーブル・エントリが、前記第1のソフトウェア・モジュールの動作が有効にされる、あるいは許可されることを示すように変更される、請求項4記載のシステム。
前記メモリは、前記複数のソフトウェア・モジュールに対応する複数のインジケータをさらに記憶し、各インジケータは、それぞれのソフトウェア・モジュールが動作中であるかどうかを示すよう構成され、あるソフトウェア・モジュールが、前記複数のプロセッサにより実行される間、又は前記あるソフトウェア・モジュールが、前記あるソフトウェア・モジュールにより呼び出されたダウンストリームのソフトウェア・モジュールの動作の終了を待つ間、前記あるソフトウェア・モジュールは動作中であると示される、請求項1乃至5いずれか一項記載のシステム。
前記複数のソフトウェア・モジュールのうちの前記第1のソフトウェア・モジュールが、前記複数のソフトウェア・モジュールのうちの前記第2のソフトウェア・モジュールにより呼び出されたという前記判定に応じて、ページ・フォールトをトリガするステップ
をさらに含む、請求項7記載のコンピュータにより実施される方法。
前記コンピューティング・デバイスにより、例外ハンドラを実施し、前記ページ・フォールトに応答して、前記第1の処理スレッドに関連付けられた、前記例外ハンドラのインスタンスに実行制御を渡すステップ
をさらに含む、請求項8記載のコンピュータにより実施される方法。
前記コンピューティング・デバイスにより、前記複数のソフトウェア・モジュールの動作が、前記第1の処理スレッドにおいて、無効にされる、あるいは禁止されることを示すために、前記複数のソフトウェア・モジュールに対応する、第1のページ・テーブルのエントリを初期化するステップと、
前記コンピューティング・デバイスにより、動作させる前記第1のソフトウェア・モジュールを選択したことに応じて、前記第1のソフトウェア・モジュールの動作が有効にされる、あるいは許可されることを示すように、前記第1のソフトウェア・モジュールに対応する、前記第1のページ・テーブルの1以上のページ・テーブル・エントリを変更するステップと、
をさらに含む、請求項11記載のコンピュータにより実施される方法。
前記コンピューティング・デバイスにより、前記複数のソフトウェア・モジュールに対応する複数のインジケータを、前記コンピューティング・デバイスがアクセス可能なメモリに記憶するステップであって、各インジケータは、それぞれのソフトウェア・モジュールが動作中であるとみなされるかどうかを示すよう構成される、ステップ
をさらに含む、請求項7乃至12いずれか一項記載のコンピュータにより実施される方法。
前記複数のソフトウェア・モジュールのうちの前記第1のソフトウェア・モジュールが、前記複数のソフトウェア・モジュールのうちの前記第2のソフトウェア・モジュールを呼び出したという前記判定に応じて、ページ・フォールトをトリガする手段
をさらに備えた、請求項15記載の装置。
例外ハンドラを実施する手段であって、前記ページ・フォールトに応答して、実行制御は、前記第1の処理スレッドに関連付けられた、前記例外ハンドラのインスタンスに渡される、手段
をさらに備えた、請求項16記載の装置。
前記複数のソフトウェア・モジュールの動作が、前記第1の処理スレッドにおいて、無効にされる、あるいは禁止されることを示すために、前記複数のソフトウェア・モジュールに対応する、第1のページ・テーブルのエントリを初期化する手段と、
動作させる前記第1のソフトウェア・モジュールを選択したことに応じて、前記第1のソフトウェア・モジュールの動作が有効にされる、あるいは許可されることを示すように、前記第1のソフトウェア・モジュールに対応する、前記第1のページ・テーブルの1以上のページ・テーブル・エントリを変更する手段と、
をさらに備えた、請求項19記載の装置。
前記複数のソフトウェア・モジュールに対応する複数のインジケータを記憶する手段であって、各インジケータは、それぞれのソフトウェア・モジュールが処理スレッドにおいて動作中であるかどうかを示すよう構成され、あるソフトウェア・モジュールが実行される間、又は前記あるソフトウェア・モジュールが、前記あるソフトウェア・モジュールにより呼び出されたダウンストリームのソフトウェア・モジュールの動作の終了を待つ間、前記あるソフトウェア・モジュールは動作中であるとみなされる、手段
をさらに備えた、請求項15乃至20いずれか一項記載の装置。
命令を含む少なくとも1つのコンピュータ読み取り可能媒体であって、コンピューティング・デバイスによる前記命令の実行に応答して、前記命令は、前記コンピューティング・デバイスに、請求項7乃至12いずれか一項記載の方法を実行させる、少なくとも1つのコンピュータ読み取り可能媒体。
前記コンピューティング・デバイスによる前記命令の実行に応答して、前記命令は、前記コンピューティング・デバイスに、複数の処理スレッドのためのそれぞれのインスタンスにインスタンス化されるスケジューラを実施させる、請求項23記載の少なくとも1つのコンピュータ読み取り可能媒体。
前記コンピューティング・デバイスによる前記命令の実行に応答して、前記命令は、前記コンピューティング・デバイスに、複数のソフトウェア・モジュールに対応する複数のインジケータを、前記コンピューティング・デバイスがアクセス可能なメモリに記憶させ、各インジケータは、それぞれのソフトウェア・モジュールが動作中であるとみなされるかどうかを示すよう構成される、請求項23記載の少なくとも1つのコンピュータ読み取り可能媒体。
【発明を実施するための形態】
【0005】
以下の詳細な説明において、本明細書の一部を形成する添付の図面を参照する。図面において、同様の符号は、図面を通して、同様の部分を示し、実施することができる実施形態が、例示のために示される。他の実施形態も利用することができ、本開示の範囲から逸脱することなく、構造的変更又は論理的変更を加えることができることを理解すべきである。以下の詳細な説明は、例として、コンピュータ・ブート・プロセスのためのブート・モジュールの並行動作を用いるが、開示する技術は、ブート・プロセス以外のタスクの並行実行を可能にするために使用されてもよい。したがって、以下の詳細な説明は、限定的に解釈されるべきではなく、実施形態の範囲は、添付の請求項及びその均等の構成により定められる。
【0006】
様々な動作が、特許請求される主題を理解する上で最も役に立つ形で、複数の別々の動作又は順番の動作として説明され得る。しかしながら、説明の順序は、これらの動作が必ず順序に依存していることを意味するものと解釈されるべきではない。詳細には、これらの動作は、提示される順序で実行されなくてもよい。説明する動作は、説明する実施形態とは異なる順序で実行されてもよい。様々な追加の動作が実行されてもよいし、且つ/あるいは説明する動作が追加の実施形態において省略されてもよい。
【0007】
本開示の目的のために、「A及び/又はB」という語句は、(A)、(B)、又は(A及びB)を意味する。本開示の目的のために、「A、B、及び/又はC」という語句は、(A)、(B)、(C)、(A及びB)、(A及びC)、(B及びC)、又は(A、B、及びC)を意味する。
【0008】
この説明では、「一実施形態において」又は「複数の実施形態において」という語句が使用され得る。これらの語句はそれぞれ、同じ実施形態又は異なる実施形態のうちの1以上を参照することがある。さらに、本開示の実施形態に関して使用される、「備える」、「含む」、「有する」等の用語は同義である。
【0009】
本明細書で使用されるとき、「モジュール」又は「ソフトウェア・モジュール」という用語は、1以上のプロセッサにより実行され得るソフトウェア実行可能イメージ及び/又はコンピュータ・プログラムを形成する複数の実行可能命令を指し得る。本明細書で使用されるとき、「ブート・モジュール」という用語は、コンピューティング・デバイスのブート・プロセス中に、例えば、基本入力/出力システム(「BIOS」)により実行されるソフトウェア・モジュールを指し得る。ブート・モジュールは、入力/出力デバイス、(例えば、入力/出力デバイスに対する)コンピューティング・デバイス・インタフェース等の初期化を含むがこれに限定されない様々な目的を果たすことができる。
【0010】
様々な実施形態において、ブート・モジュール等のモジュールは、エントリ・ポイント関数(entry point function)を含み得る。エントリ・ポイント関数は、様々な初期化タスクを実行する、モジュールのロード時に実行される命令を含み得る。例えば、エントリ・ポイント関数は、1以上のモジュール間(inter-module)「サービス関数(service function)」を初期化することができる。モジュール間「サービス関数」は、例えば、別のモジュール自身のエントリ・ポイント関数又はサービス関数といった別のモジュールにより呼び出され得るものであり、任意の処理を行う命令を含み得る。
【0011】
モジュールは、モジュール間関数呼び出しを介して、互いにインタラクトすることができる。様々な実施形態において、書き込み可能な共有データは、モジュールにより直接アクセスできないが、代わりに、データ所有モジュール(data-owning module)により提供されるサービス関数への呼び出しを介してアクセスできる。様々な実施形態において、モジュールにより提供されるサービス関数は、呼び出しシーケンス要件(call sequence requirement)を有することができない。これは、本明細書で説明する並行実行スキームにおけるデータ整合性を確実にすることができる。
【0012】
図1を参照すると、本開示の適用可能な態様を用いて構成されるコンピューティング・デバイス100は、メモリ104に動作可能に接続された複数のプロセッサ102a〜102nを含み得る。様々な実施形態において、各プロセッサ102a、102b、...102m(以後、単に102)は、処理スレッドを提供することができる。様々な実施形態において、メモリ104は、ダイナミック・ランダム・アクセス・メモリ(「DRAM」)であり得るが、他のタイプのメモリであってもよい。実施形態において、BIOSブート・プログラム106は、複数のブート・モジュール112a〜112mを含み得る。通常、ブート・モジュール112a〜112mは、並行動作のために設計され得ない。しかしながら、以下でより詳細に説明するように、本開示の特徴を介して、ブート・モジュール112a〜112mは、ブート・プロセスを速めるために、複数の並行処理スレッドにおいて順序付けられ実行され得る。
【0013】
様々な実施形態において、複数のブート・モジュール112a〜112mの間には、しばしば「依存表現(dependency expression)」により説明される固有の依存関係が存在し得る。例えば、「インタフェースA及びインタフェースBの両方が利用可能である」という依存表現は、インタフェースA及びインタフェースB(場合によっては、様々な他のブート・モジュールのサービス関数であり得る)の両方が適切なブート・モジュール112の動作により初期化された後にのみ満たされ得る。
【0014】
様々な実施形態において、スケジューラ108a〜108nの複数のインスタンスは、例えば、BIOSブート・プログラム106により初期化され得る。様々な実施形態において、各スケジューラ108a、108b、...108n(以後、単に108)は、複数のプロセッサ102a〜102nのうちの1以上により実行され得るコンピュータ・コード(
図6参照)の単一コピーのインスタンスであり得る。様々な実施形態において、グローバル変数は、スケジューラ108a〜108nのインスタンス間で共有され得るのに対し、ローカル変数(例えば、スタック変数)は、インスタンス間で異なり得る。様々な実施形態において、各スケジューラ108は、プロセッサ102により提供されるそれぞれの処理スレッド上のブート・モジュール112a〜112mの動作を管理するよう構成され得る。
【0015】
様々な実施形態において、複数の異なるページ・テーブル110a〜110nが、各プロセッサ102との関連付けのために、例えば、スケジューラ108a〜108nにより初期化され得る。以下でさらに詳細に説明するように、様々な実施形態において、ページ・テーブル110a〜110nは、例えば、ページ・フォールトを介して、モジュール間関数呼び出しのキャプチャを容易にし得る。以下で説明するように、ページ・フォールトは、次に、制御を複数の例外ハンドラ120a〜120nに渡すことができる。
【0016】
前述したように、複数のブート・モジュール112a〜112mは、コンピューティング・デバイス100のブート・プロセス中に動作し得る。例えば、複数のプロセッサ102a〜102nによるブート・モジュール112a〜112mの動作は、コンピューティング・デバイス100の様々なデバイス、インタフェース(例えば、他のブート・モジュールにより呼び出し可能なサービス関数)、又は他のコンポーネントがコンピューティング・デバイス100の通常の動作中に利用され得るように、それらを初期化することができる。
【0017】
様々な実施形態において、各ブート・モジュール112a、112b、...112m(以後、単に112)は、それぞれのフラグ114a、114b、...114m(以後、単に114)に関連付けられ得る。フラグ114a〜114mは、複数のプロセッサ102a〜102nがアクセス可能なメモリの一部(例えば、RAM又はレジスタ)に記憶され得る。各フラグ114は、関連するブート・モジュール112が、例えば、複数のプロセッサ102a〜102nのうちのいずれかにより動作中である、あるいは「ビジー」であるとみなされるかのインジケーションを記憶するよう構成され得る。
【0018】
ブート・モジュール112は、それぞれのフラグ114を変更することによって、複数の異なる状況において、動作中である、あるいは「ビジー」であると、例えば、スケジューラ108のインスタンス及び/又は複数の例外ハンドラ120a〜120nのインスタンスにより指定され得る。例えば、特定のブート・モジュール112は、そのブート・モジュールのサービス関数が確立されたかどうかにかかわらず、そのエントリ・ポイント関数の実行がまだ終了していない場合、動作中であるとみなされ得る。別の例として、特定のブート・モジュール112は、例えば、別のブート・モジュールにより呼び出された結果として、そのサービス関数のうちの1つの実行がまだ終了していない場合、ビジーであるとみなされ得る。
【0019】
様々な実施形態において、特定のブート・モジュール112のエントリ・ポイント関数及び/又はサービス関数は、そのブート・モジュール112が動作中である、あるいはビジーであるとみなされるために、アクティブに実行中である必要はない。例えば、ブート・モジュール112のエントリ・ポイント関数及び/又はサービス関数は、別のブート・モジュールのサービス関数を呼び出して、別のブート・モジュールのサービス関数からリターンを待っていることがある。そのような場合、ブート・モジュール112は、それでも、動作中である、あるいはビジーであるとみなされ得る。
【0020】
様々な実施形態において、ブート・モジュール112は、そのエントリ・ポイント関数が終了しており、そのサービス関数のいずれもアクティブに実行中でない、あるいはそのサービス関数のいずれもダウンストリームのサービス関数からリターンを待っていない場合、例えば、それぞれのフラグ114を変更するスケジューラ108のインスタンス又は例外ハンドラ120により、「動作中でない」、あるいは「レディー(ready)」と指定され得る(例えば、ブート・モジュール112は、関数呼び出しを受け入れる準備ができている)。
【0021】
このように、フラグ114a〜114mは、1つのプロセッサ102だけが一度に特定のブート・モジュールをアトミックに動作させることができることを確実にするためのシグナルとして、例えば、スケジューラ108a〜108nのインスタンス及び/又は例外ハンドラ120a〜120nのインスタンスにより利用され得る。様々な実施形態において、各フラグ114は、例えば、ブート・モジュール112の動作に関連する他の情報を保持するための、各ブート・モジュール112について生成されるより大きなデータ構造(図示せず)の一部であり得る。
【0022】
様々な実施形態において、複数のプロセッサ102a〜102nは、複数の並行処理スレッドにおいて、複数のブート・モジュール112a〜112mを動作させることができ得る。これは、とりわけ、コンピューティング・デバイス100の起動時間(ブート時間とも呼ばれる)を速めることができる。しかしながら、前にも示唆したように、全てのブート・モジュールが、並行して動作するように設計され得るわけではない。例えば、複数のブート・モジュール112a〜112mは、様々な異なるシリコン・コンポーネント(例えば、入力/出力コンポーネント)のために、様々な異なる相手先ブランド名製造業者(「OEM」)により作成され得る。並行動作の成功のためにブート・モジュール112a〜112mを設計することは、コンピューティング・デバイス100に含まれ複数のブート・モジュール112a〜112mの動作により初期化され得るシリコン・コンポーネントの実質的に無限の可能な組合せは言うまでもなく、様々なOEMの全く異質で潜在的に競争的な性質に起因して、実現困難であり得る。
【0023】
したがって、様々な実施形態において、スケジューラ108a〜108nの1以上のインスタンス及び/又は例外ハンドラ120a〜120nの1以上のインスタンス等の、コンピューティング・デバイス100の様々なコンポーネントは、例えば、ページ・テーブル110a〜110n及び/又はフラグ114a〜114mを用いて、ブート・プロセス中に複数の並行処理スレッド間の複数のブート・モジュール112a〜112mの動作を順序付けるよう構成され得る。詳細には、処理スレッドのうちの第1の処理スレッドにおける、複数のブート・モジュール112a〜112mのうちの第1のブート・モジュールの動作は、第1のブート・モジュール112が処理スレッドのうちの第2の処理スレッドにおいて処理中であるとみなされないと判定されるまで、例えば、スケジューラ108又は例外ハンドラ120a、120b、...120n(以後、単に120)により延期され得る。様々な実施形態において、第1のブート・モジュール112が、第1のブート・モジュール112により呼び出された任意のダウンストリームのブート・モジュールの動作の終了を待つ間、第1のブート・モジュール112は、動作中であるとみなされ得る。
【0024】
図2は、第1のブート・モジュール112a及び第2のブート・モジュール112bの両方が、(例えば、関数呼び出しとして)第3のブート・モジュール112cを呼び出し得る例示的なシナリオ200を示している。各呼び出しは、ページ・フォールト例外をトリガすることができ、これは、制御を例外ハンドラ120のインスタンス、すなわち、第1の例外ハンドラ120a及び第2の例外ハンドラ120bに渡すことができる。複数のスケジューラ108a〜108nの場合と同様に、各例外ハンドラ120は、複数のプロセッサ102a〜102nにより実行され得るコンピュータ・コード(
図6参照)の単一コピーのインスタンスであり得る。
【0025】
例えば、第1のブート・モジュール112aが第3のブート・モジュール112cを呼び出すときに、制御が第1の例外ハンドラ120aに渡され得る。第1の例外ハンドラ120aは、制御を第3のブート・モジュール112cに渡す前に、第3のブート・モジュール112cが、例えば、別の処理スレッドにおいて、現在は動作中であるとみなされないことを確実にすることができる。第3のブート・モジュール112cの動作が終了した後、第3のブート・モジュール112cは、制御を第1のブート・モジュール112aに戻すことができ、第1のブート・モジュール112aは、もう一度、第1の例外ハンドラ120aをトリガすることができる。第3のブート・モジュール112cが動作中であった間、第1のブート・モジュール112aは、「動作中」状態であり続けることができるので、第1の例外ハンドラ120aは、制御を直接第1のブート・モジュール112aに戻すことができる。したがって、第1のブート・モジュール112aは、第3のブート・モジュール112cの終了を待つ間、任意の他の処理スレッド上で実行され得ない。同じことが、第2のブート・モジュール112b、第2の例外ハンドラ120b、及び第3のブート・モジュール112cの間で生じ得る。
【0026】
第1の例外ハンドラ120a及び第2の例外ハンドラ120b等の例外ハンドラ120が、どのようにモジュール間呼び出しをキャプチャして、ブート・モジュール112がある時間に1つの処理スレッドにおいて動作することをどのように確実にし得るかを示す例示的なタイムラインが、
図3に示されている。2つのスレッド、THREAD1及びTHREAD2が、(
図3には示されていない)2つのプロセッサ102により動作され得る。スケジューラ108のインスタンス(これも
図3に示されていない)も各スレッド上で動作し得る。左の矢印により示されるように、時間はページ下方に向かって進む。これらのフローチャートは、複数のスレッド間の全般的な流れを示すために作成されているに過ぎない。様々な実施形態において、厳格なロック及び/又はセマフォを使用して、正確なマルチスレッド動作を確実にすることができる。
【0027】
ブロック302において、THREAD1上で動作しているスケジューラ108のインスタンスは、第1のブート・モジュール112aを動作させることができる。ブロック304において、THREAD2上で動作しているスケジューラ108のインスタンスは、第2のブート・モジュール112bを同時に動作させることができる。
【0028】
ブロック306において、第1のブート・モジュール112aは、第3のブート・モジュール112cを呼び出すことができる。このモジュール間呼び出しは、例えば、THREAD1に関連付けられた、第3のブート・モジュール112cが「無効」としてマークされたページ・テーブル110aに起因して、ページ・フォールト例外を生じさせ得る。したがって、ブロック308において、
図2における第1の例外ハンドラ120a等の例外ハンドラ120(
図3において「EH」として示される)は、引き継ぐことができる。第1の例外ハンドラ120aは、例えば、第3のブート・モジュール112cに関連付けられたフラグ114cに基づいて、第3のブート・モジュール112cが、別の処理スレッドにおいて現在は動作中であるとみなされないと判定することができる。この判定を行う際、第1の例外ハンドラ120aは、第3のブート・モジュール112cの動作が有効にされ、第1のブート・モジュール112aが無効にされることを示すために、THREAD1に関連付けられたページ・テーブル110aを変更することができる。第1の例外ハンドラ120aはまた、第3のブート・モジュール112cがTHREAD1において動作中であるとみなされることを示すために、第3のブート・モジュール112cに関連付けられたフラグ114cを変更することができ、制御を第3のブート・モジュール112cに渡すことができる。ブロック310において、第3のブート・モジュール112cは動作することができる。第3のブート・モジュール112cの動作が終了すると、そのそれぞれのフラグ114cは、第3のブート・モジュール112cが動作中であるとみなされないことを示すように、例えば、スケジューラ108又は第1の例外ハンドラ120aにより設定され、制御が、第1のブート・モジュール112aに戻され得る。
【0029】
その間にも、THREAD1上での第3のブート・モジュール112cの動作中、動作312において、THREAD2上で動作している第2のブート・モジュール112bは、第3のブート・モジュール112cを呼び出すことができる。このモジュール間呼び出しは、例えば、THREAD2に関連付けられた、第3のブート・モジュール112cが「無効」としてマークされたページ・テーブル110(
図3には示されていない)に起因して、ページ・フォールト例外を生じさせ得る。したがって、ブロック314において、
図2における第2の例外ハンドラ120b等の例外ハンドラ120の別のインスタンスは、引き継ぐことができる。第2の例外ハンドラ120bは、例えば、第3のブート・モジュール112cに関連付けられたフラグ114cに基づいて、第3のブート・モジュール112cが、別の処理スレッド、すなわち、THREAD1において現在動作中であるとみなされると判定することができる。
【0030】
ブロック316において、第2の例外ハンドラ120bは、第3のブート・モジュール112cが利用可能になるまで、第3のブート・モジュール112cの動作を延期することができる。いくつかの実施形態において、第2の例外ハンドラ120bは、第3のブート・モジュール112cが動作中であるともはやみなされないことを示すようにマークされるまで、第3のブート・モジュール112cのフラグ114cを単に定期的にチェックすることができる。いくつかの実施形態において、第2の例外ハンドラ120bは、第2のブート・モジュール112bの動作を中断し、第2のブート・モジュール112bの依存条件を、「第3のブート・モジュール112cはレディーである」と設定し、制御をスケジューラ108に戻すことができる。スケジューラ108は、動作させる別のモジュールを選択することができ、依存条件が満たされると、第2のブート・モジュール112bを後で選択することができる。
【0031】
THREAD1に戻ると、第3のブート・モジュール112cの動作が終了した後、ブロック318において、そのそれぞれのフラグ114cは、第3のブート・モジュール112cが動作中であるとみなされない(例えば、「レディー」である)ことを示すために、第1の例外ハンドラ120aにより変更され得る。ブロック320において、THREAD1上の第1のブート・モジュール112aの動作は、再開することができる。
【0032】
THREAD2に戻ると、ブロック316において、第2の例外ハンドラ120bは、例えば、そのそれぞれのフラグ114cに基づいて、第3のブート・モジュール112cが現在利用可能であると判定することができる。ブロック322において、第3のブート・モジュール112cは、THREAD2上で動作することができる。THREAD2上の第3のブート・モジュール112cの動作が終了して、制御が第2のブート・モジュール112bに戻されると、ブロック324において、第2の例外ハンドラ120bは、第3のブート・モジュール112cがもはや動作中でない(例えば、「レディー」である)ことを示すために、第3のブート・モジュール112cに関連付けられたフラグ114cを変更することができる。次いで、ブロック326において、第2のブート・モジュール112bの動作は、再開することができる。
【0033】
図4は、様々な実施形態に従った、インスタンスが特定の処理スレッドに関連付けられているスケジューラ108により実施され得る例示的な方法400を示している。動作402において、スケジューラ108のインスタンスは、処理スレッドのために複数のブート・モジュール112a〜112mの各々に関連付けられた1以上のページ・テーブル・エントリを含むページ・テーブル110を生成することができる。1以上のページ・テーブル・エントリは、ブート・モジュールのアドレス範囲に応じて、単一のブート・モジュールに対応し得る。さらに、動作402において、1以上のページ・テーブル・エントリは、関連するブート・モジュール112の実行が無効にされる、あるいは禁止されることを示すように、例えば、スケジューラ108により設定され得る。
【0034】
動作404において、ブート・モジュール112が、例えば、スケジューラ108のインスタンスにより、複数のブート・モジュール112a〜112mから、動作させるために選択され得る。スケジューラ108のインスタンスは、依存表現を使用して、どのブート・モジュール112を動作させるかを選択することができる。いくつかの実施形態において、スケジューラ108のインスタンスは、「初期」状態(例えば、エントリ・ポイント関数がまだ動作していない)にある、あるいは「中断」状態(例えば、おそらくは、フラグ114が最後にチェックされてからダウンストリームの呼び出されたブート・モジュールが動作を終了させた)にある1以上のブート・モジュール112を識別して、依存表現が満たされたブート・モジュール112を、動作させるために選択することができる。
【0035】
動作406において、上述した条件を満たすブート・モジュール112が見つからない場合、動作408において、スケジューラ108のインスタンスは、スレッド上で動作させるために利用可能なブート・モジュールが存在しないことを示すように、現在の処理スレッドに関連付けられた、「利用可能なブート・モジュールはない」というフラグを設定することができる。動作410において、全ての他の処理スレッドについても同様であると判定された場合(これは、コンピューティング・デバイスが完全にブートされていることを示し得る)、方法400は終了し得る。動作410において、全てのスレッドについては同様ではないと判定された場合、方法400は、動作404に戻り、動作させるブート・モジュール112を選択するために、別の試行がなされ得る。
【0036】
一方、動作406において、適格なブート・モジュールが見つかった場合、動作412において、その適格なブート・モジュール(以後、「現在のブート・モジュール」と呼ぶ)に関連付けられたフラグ114が、現在のブート・モジュールが動作中である、あるいはビジーであるとみなされることを示すように変更され得る。動作414において、「利用可能なブート・モジュールはない」というスレッド・フラグが、スレッド上で動作させるために利用可能なブート・モジュールが存在することを示すようにクリアされ得る。動作416において、現在のブート・モジュール112に関連付けられた1以上のページ・テーブル・エントリが、特定のブート・モジュール112の実行が有効にされる、あるいは許可されることを示すように、例えば、スケジューラ108のインスタンスにより変更され得る。次いで、動作418において、現在の処理スレッドの制御が、例えば、スケジューラ108により、現在のブート・モジュール112に渡され得る。
【0037】
動作中、現在のブート・モジュール112は、(例えば、関数呼び出しとして)別のブート・モジュール112を呼び出すことができる。動作402において、ターゲット・ブート・モジュール112に関連付けられた1以上のエントリが、実行が無効にされる、あるいは禁止されることを示すように設定されたことを思い出してください。したがって、モジュール間関数呼び出しは、ページ・フォールト例外を投げさせ、動作420において、制御が例外ハンドラ120に渡され得る。動作420において示されるように、例外ハンドラ120は、一例が
図5に示される、動作させるべき自身のルーチンを有することができる。
【0038】
最終的に、例外ハンドラ・ルーチン420及び/又は他のブート・モジュール112の介入動作にもかかわらず、現在のブート・モジュール112は、終了まで動作することができる。次いで、動作422において、制御がスケジューラ108に戻され得る。動作424において、まさに終了したブート・モジュール112に関連付けられた1以上のページ・テーブル・エントリが、実行が無効にされる、あるいは禁止されることを再度示すように、例えば、スケジューラ108のインスタンスにより変更され得る。動作426において、現在のブート・モジュール112に関連付けられたフラグ114が、現在のブート・モジュールを動作中でない、あるいは「レディー」であるとして指定するために、例えば、スケジューラ108のインスタンスにより設定され得る。次いで、方法400は、別のブート・モジュール112の選択のために、動作404に戻ることができる。
【0039】
図5は、様々な実施形態に従った、例外ハンドラ・ルーチン420のインスタンスの例示的な動作フローを示している。処理スレッドにおけるモジュール間関数呼び出し又はリターンの結果として、ページ・フォールト例外が発生すると、動作502において、モジュール間関数呼び出し又はリターンのソース・メモリ・アドレス及びターゲット・メモリ・アドレスが、例えば、その処理スレッドに関連付けられた例外ハンドラ120のインスタンスにより判定され得る。例えば、例外ハンドラ120のインスタンスは、制御レジスタ(例えば、CR2)、スタック、又は他のデータ構造をチェックすることができる。動作504において、判定されたメモリ・アドレスに基づいて、ソース・ブート・モジュール112及びターゲット・ブート・モジュール112が、例えば、例外ハンドラ120により特定され得る。例えば、例外ハンドラ120のインスタンスは、ソース・アドレス及びターゲット・アドレスを、複数のブート・モジュール112a〜112mのアドレスと比較することができる。動作506において、ソース・ブート・モジュール112に関連付けられた呼び出し側スレッドの1以上のページ・テーブル・エントリが、動作が無効にされる、あるいは禁止されることを示すように、例えば、例外ハンドラ120により変更され得る。
【0040】
動作508において、ページ・フォールトが、関数呼び出しにより生じたか、あるいはリターンにより生じたかが判定され得る。例えば、
図2において、第1のブート・モジュール112aが第3のブート・モジュール112cを呼び出したときには、これは関数呼び出しであるのに対し、第3のブート・モジュール112cが制御を第1のブート・モジュール112aに戻したときには、これはリターンである。
【0041】
ページ・フォールトが関数呼び出しにより生じた場合、動作510において、例えば、ターゲット・ブート・モジュール112に関連付けられたフラグ114をチェックすることにより、ターゲット・ブート・モジュール112が動作中であるとみなされるかどうかが判定され得る。ターゲット・モジュールが動作中であるとみなされる(例えば、「レディー」ではない)場合、いくつかの実施形態において、例外ハンドラ120のインスタンスは、ターゲット・ブート・モジュール112が動作中であるともはやみなされなくなるまで、フラグ114を単に再チェックすることができる。
図5に示すものを含め、他の実施形態において、動作512において、例外ハンドラ120のインスタンスは、ターゲット・ブート・モジュール112が利用可能になるまで、ソース・ブート・モジュール112の動作を中断することができる。いくつかの実施形態において、動作514において、例外ハンドラ120のインスタンスは、ターゲット・ブート・モジュール112が動作中であるとみなされる必要がない(例えば、「レディー」状態にある)ことを示すように、中断したソース・ブート・モジュールの依存関係を変更することができる。動作516において、例外ハンドラ120のインスタンスは、例外ハンドラのリターン時に、例えば、それに従ってそのプログラム・カウンタを設定することにより、制御をスケジューラ108に渡すことができ、次いで、例外ハンドラの方法420は、リターンすることができる。
【0042】
動作510に戻ると、ターゲット・ブート・モジュールが動作中であるとみなされない(例えば、フラグ114が「レディー」に設定されている)場合、動作518において、ターゲット・ブート・モジュール112に関連付けられた1以上のページ・テーブル・エントリが、ターゲット・ブート・モジュール112の動作が有効にされる、あるいは許可されることを示すように変更され得る。動作508において、ページ・フォールトが、リターンにより生じたと判定された場合、動作510〜516はスキップされ、方法420は動作518に直接進むことができることに留意されたい。
【0043】
動作520において、ページ・フォールトが関数呼び出しにより生じたか、あるいはリターンにより生じたかが、例えば、例外ハンドラ120のインスタンスにより、もう一度判定され得る。動作520における答えが関数呼び出しである場合、動作522において、ターゲット・ブート・モジュール112に関連付けられたフラグ114が、ターゲット・ブート・モジュール112が動作中である、あるいは「ビジー」であることを示すように、例えば、例外ハンドラ120により設定され得る。動作520における答えがリターンである場合、動作524において、ソース・ブート・モジュールに関連付けられたフラグ114が、「レディー」に設定され得る。いずれにせよ、動作526において、例外ハンドラ120は、例外ハンドラのリターン時に、例えば、それに従ってそのプログラム・カウンタを設定することにより、制御をターゲット・ブート・モジュール112に渡すことができる。次いで、方法420はリターンすることができる。
【0044】
図6は、様々な実施形態に従った例示的なコンピューティング・デバイス600を示している。コンピューティング・デバイス600は、複数のコンポーネント、複数のプロセッサ102、及び、場合によっては1以上の通信チップ606を含み得る。様々な実施形態において、プロセッサ102は、プロセッサ・コアであり得る。様々な実施形態において、通信チップ606はまた、物理的且つ電気的にプロセッサ102に接続され得る。さらなる実施形態において、通信チップ606は、プロセッサ102の一部であってもよい。様々な実施形態において、コンピューティング・デバイス600は、プリント回路基板(「PCB」)602を含み得る。これらの実施形態では、プロセッサ102及び通信チップ606は、PCB602上に実装され得る。代替実施形態において、様々なコンポーネントは、PCB602を使用することなく接続され得る。
【0045】
その用途に応じて、コンピューティング・デバイス600は、物理的且つ電気的にPCB602に接続され得る、あるいは接続され得ない他のコンポーネントを含んでもよい。そのような他のコンポーネントは、揮発性メモリ(例えば、「DRAM」とも呼ばれるダイナミック・ランダム・アクセス・メモリ608)、不揮発性メモリ(例えば、「ROM」とも呼ばれる読み取り専用メモリ610)、フラッシュ・メモリ612、グラフィックス・プロセッサ614、入力/出力コントローラ616、デジタル信号プロセッサ(図示せず)、暗号プロセッサ(図示せず)、1以上のアンテナ618、ディスプレイ(図示せず)、タッチ・スクリーン・ディスプレイ620、タッチ・スクリーン・コントローラ622、バッテリ624、オーディオ・コーデック(図示せず)、ビデオ・コーデック(図示せず)、全地球測位システム(「GPS」)デバイス628、コンパス630、加速度計(図示せず)、ジャイロスコープ(図示せず)、スピーカ632、カメラ634、及び大容量記憶デバイス(ハード・ディスク・ドライブ、ソリッド・ステート・ドライブ、コンパクト・ディスク(「CD」)、デジタル多用途ディスク(「DVD」)等)(図示せず)等を含むが、これらに限定されるものではない。様々な実施形態において、プロセッサ102は、システム・オン・チップ(「SoC」)を形成するための、他のコンポーネントとの同じダイ上に一体化され得る。
【0046】
様々な実施形態において、揮発性メモリ(例えば、DRAM608)、不揮発性メモリ(例えば、ROM610)、フラッシュ・メモリ612、及び大容量記憶デバイスは、プロセッサ102による実行に応答して、コンピューティング・デバイス600が、方法400及び/又は方法420の全ての態様又は選択された態様を実施することを可能にするよう構成されたプログラミング命令を含み得る。例えば、揮発性メモリ(例えば、DRAM608)、不揮発性メモリ(例えば、ROM610)、フラッシュ・メモリ612、及び大容量記憶デバイス等のメモリ・コンポーネントのうちの1以上は、スケジューラ・コード650及び/又は例外ハンドラ・コード660の一時的コピー及び/又は永続的コピーを含み得る。これらは、実行されたとき、コンピューティング・デバイス600に、方法400及び/又は方法420の全ての態様又は選択された態様をそれぞれ実施するスケジューラ108の1以上のインスタンス及び/又は例外ハンドラ120の1以上のインスタンスを動作させる。
【0047】
通信チップ606は、コンピューティング・デバイス600へ/からのデータの伝送のための有線通信及び/又は無線通信を可能にし得る。「無線」という用語及びその派生語は、非固形媒体を介した変調された電磁放射線の使用によりデータを通信することができる回路、デバイス、システム、方法、技術、通信チャネル等を説明するために使用され得る。この用語は、関連するデバイスがいかなる配線も含まないことを意味するものではないが、いくつかの実施形態においては、それらは含まなくてもよい。本明細書で説明した実施形態のほとんどは、例として、WiFi(登録商標)及びLTE RATを含む。しかしながら、通信チップ606は、これらに限定されないが、IEEE602.20、汎用パケット無線サービス(「GPRS」)、「Ev−DO(evolution data optimized)」、進化型高速パケット・アクセス(「HSPA+」)、進化型高速下りリンク・パケット・アクセス(「HSDPA+」)、進化型高速上りリンク・パケット・アクセス(「HSUPA+」)、「GSM(登録商標)(global system for mobile communications)」、「EDGE(enhanced data rates for GSM evolution)」、符号分割多元接続(「CDMA」)、時分割多元接続(「TDMA」)、「DECT(digital enhanced cordless telecommunications)」、Bluetooth(登録商標)、及びそれらの派生だけでなく、3G、4G、5G、及びさらに先のものとして指定される任意の他の無線プロトコルを含む多数の無線規格又はプロトコルのいずれかを実装してよい。コンピューティング・デバイス600は、複数の通信チップ606を含み得る。例えば、第1の通信チップ606は、Wi−Fi(登録商標)及びBluetooth(登録商標)等のより短い距離の無線通信に専用であってよく、第2の通信チップ606は、GPS、EDGE、GPRS、CDMA、WiMAX(登録商標)、LTE、Ev−DO、及びその他等のより長い距離の無線通信に専用であってよい。
【0048】
様々な実施形態において、コンピューティング・デバイス600は、ラップトップ、ネットブック、ノートブック、ウルトラブック(登録商標)、スマートフォン、コンピューティング・タブレット、携帯情報端末(「PDA」)、ウルトラ・モバイルPC、携帯電話機、デスクトップ・コンピュータ、サーバ、プリンタ、スキャナ、モニタ、セットトップ・ボックス、エンターテイメント制御ユニット(例えば、ゲーム・コンソール)、デジタル・カメラ、ポータブル音楽プレーヤ、又はデジタル・ビデオ・レコーダであり得る。さらなる実施形態において、コンピューティング・デバイス600は、データを処理する任意の他の電子デバイスであってよい。
【0049】
上述した技術を実行するための、(機械読み取り可能記憶媒体等の非一時的な機械読み取り可能媒体を含む)機械読み取り可能媒体、方法、システム、及びデバイスは、本明細書で開示した実施形態の例示的な例である。さらに、上述したインタラクションにおける他のデバイスが、開示した様々な技術を実行するよう構成されてもよい。
【0050】
例
例1は、命令を含む少なくとも1つのコンピュータ読み取り可能媒体を対象とする。コンピューティング・デバイスによる前記命令の実行に応答して、前記命令は、前記コンピューティング・デバイスに、複数の並行処理スレッド間の複数のソフトウェア・モジュールの動作を含むタスクを速めさせる。前記ソフトウェア・モジュールの動作は、前記処理スレッドのうちの第1の処理スレッドにおける、前記複数のソフトウェア・モジュールのうちの第1のソフトウェア・モジュールの動作を、前記第1のソフトウェア・モジュールが動作中であるとみなされないと判定されるまで延期することを含み、前記第1のソフトウェア・モジュールは、自身が動作中である間、又は前記第1のソフトウェア・モジュールにより呼び出された任意の他のソフトウェア・モジュールの動作の終了を待つ間、動作中であるとみなされる。
【0051】
例2は、例1の少なくとも1つのコンピュータ読み取り可能媒体を含み、前記コンピューティング・デバイスによる前記命令の実行に応答して、前記命令は、前記コンピューティング・デバイスに、前記第1の処理スレッドにおいて実行中である、前記複数のソフトウェア・モジュールのうちの第2のソフトウェア・モジュールによる、前記第1のソフトウェア・モジュールのモジュール間関数呼び出しに応答して、前記判定を行わせる。
【0052】
例3は、例2の少なくとも1つのコンピュータ読み取り可能媒体を含み、前記コンピューティング・デバイスによる前記命令の実行に応答して、前記命令は、前記コンピューティング・デバイスに、前記モジュール間関数呼び出しにページ・フォールトをトリガさせる。
【0053】
例4は、例3の少なくとも1つのコンピュータ読み取り可能媒体を含み、前記コンピューティング・デバイスによる前記命令の実行に応答して、前記命令は、前記コンピューティング・デバイスに、例外ハンドラを実施させ、前記ページ・フォールトに応答して、実行制御は、前記第1の処理スレッドに関連付けられた、前記例外ハンドラのインスタンスに渡され、前記例外ハンドラの前記インスタンスは、前記判定を行う。
【0054】
例5は、例1の少なくとも1つのコンピュータ読み取り可能媒体を含み、前記コンピューティング・デバイスによる前記命令の実行に応答して、前記命令は、前記コンピューティング・デバイスに、前記複数の処理スレッドのための複数のページ・テーブルをそれぞれ初期化させる。
【0055】
例6は、例5の少なくとも1つのコンピュータ読み取り可能媒体を含み、前記コンピューティング・デバイスによる前記命令の実行に応答して、前記命令は、前記コンピューティング・デバイスに、前記複数のソフトウェア・モジュールに対応するエントリを前記複数のページ・テーブルに含めさせる。
【0056】
例7は、例6の少なくとも1つのコンピュータ読み取り可能媒体を含み、前記コンピューティング・デバイスによる前記命令の実行に応答して、前記命令は、前記コンピューティング・デバイスに、前記複数のソフトウェア・モジュールの動作が、前記第1の処理スレッドにおいて、無効にされる、あるいは禁止されることを示すために、前記複数のソフトウェア・モジュールに対応する、第1のページ・テーブルのエントリを初期化させ、動作させる前記第1のソフトウェア・モジュールの選択時に、前記第1のソフトウェア・モジュールの動作が有効にされる、あるいは許可されることを示すように、前記第1のソフトウェア・モジュールに対応する、前記第1のページ・テーブルの1以上のページ・テーブル・エントリを変更させる。
【0057】
例8は、例1乃至6いずれか1つの少なくとも1つのコンピュータ読み取り可能媒体を含み、前記コンピューティング・デバイスによる前記命令の実行に応答して、前記命令は、前記コンピューティング・デバイスに、前記複数の処理スレッドのためのそれぞれのインスタンスにインスタンス化され得るスケジューラを実施させる。
【0058】
例9は、例1乃至6いずれか1つの少なくとも1つのコンピュータ読み取り可能媒体を含み、前記コンピューティング・デバイスによる前記命令の実行に応答して、前記命令は、さらに、前記コンピューティング・デバイスに、前記複数のソフトウェア・モジュールに対応する複数のインジケータをメモリに記憶させ、各インジケータは、それぞれのソフトウェア・モジュールが動作中であるとみなされるかどうかを示すよう構成される。
【0059】
例10は、システムを対象とする。当該システムは、複数の並行処理スレッドにおいて、タスクの複数のソフトウェア・モジュールを動作させる複数のプロセッサと、前記複数のソフトウェア・モジュールを記憶する、前記複数のプロセッサに動作可能に接続されたメモリと、前記処理スレッドのうちの第1の処理スレッドにおいて、前記複数のソフトウェア・モジュールのうちの第1のソフトウェア・モジュールの動作を、前記第1のソフトウェア・モジュールが動作中であるとみなされないと判定するまで延期することを含む、前記処理スレッド間の前記ソフトウェア・モジュールの動作を順序付ける例外ハンドラであって、前記第1のソフトウェア・モジュールは、自身が動作中である間、又は前記第1のソフトウェア・モジュールにより呼び出された任意の他のソフトウェア・モジュールの動作の終了を待つ間、動作中であるとみなされる、例外ハンドラと、を備える。
【0060】
例11は、例10のシステムを含み、前記例外ハンドラは、前記第1の処理スレッドにおいて動作中である、前記複数のソフトウェア・モジュールのうちの第2のソフトウェア・モジュールによる、前記第1のソフトウェア・モジュールのモジュール間関数呼び出しに応答して、前記判定を行う。
【0061】
例12は、例11のシステムを含み、前記複数のソフトウェア・モジュールは、前記モジュール間関数呼び出しにページ・フォールトをトリガさせるよう構成された関連するステータスを有する。
【0062】
例13は、例10のシステムを含み、前記複数の処理スレッドに関連付けられた複数のページ・テーブル内に前記複数のソフトウェア・モジュールに対応するエントリを保持するために、インスタンスが前記複数の処理スレッドに関連付けられるスケジューラをさらに備える。
【0063】
例14は、例13のシステムを含み、前記複数のソフトウェア・モジュールの動作が、前記第1の処理スレッドにおいて、無効にされる、あるいは禁止されることを示すために、前記複数のソフトウェア・モジュールに対応する、第1のページ・テーブルのエントリが初期化され、動作させる前記第1のソフトウェア・モジュールの選択時に、前記第1のソフトウェア・モジュールに対応する、前記第1のページ・テーブルの1以上のページ・テーブル・エントリが、前記第1のソフトウェア・モジュールの動作が有効にされる、あるいは許可されることを示すように変更される。
【0064】
例15は、例10乃至14いずれか1つのシステムを含み、前記メモリは、前記複数のソフトウェア・モジュールに対応する複数のインジケータをさらに記憶し、各インジケータは、それぞれのソフトウェア・モジュールが動作中であるかどうかを示すよう構成され、あるソフトウェア・モジュールが、前記複数のプロセッサにより実行される間、又は前記あるソフトウェア・モジュールが、前記あるソフトウェア・モジュールにより呼び出されたダウンストリームのソフトウェア・モジュールの動作の終了を待つ間、前記あるソフトウェア・モジュールは動作中であると示される。
【0065】
例16は、コンピュータにより実施される方法を含む。当該コンピュータにより実施される方法は、コンピューティング・デバイスにより、複数の並行処理スレッド間で実行される、タスクの複数のソフトウェア・モジュールのうちの第1のソフトウェア・モジュールが、前記複数の処理スレッドのうちの第1の処理スレッドにおいて動作している、前記複数のソフトウェア・モジュールのうちの第2のソフトウェア・モジュールにより呼び出されたことを判定するステップと、前記コンピューティング・デバイスにより、前記第1のソフトウェア・モジュールが動作中であるとみなされないと判定するステップであって、前記第1のソフトウェア・モジュールは、自身が動作中である間、又は前記第1のソフトウェア・モジュールにより呼び出された任意の他のソフトウェア・モジュールの動作の終了を待つ間、動作中であるとみなされる、ステップと、前記コンピューティング・デバイスにより、前記第1のソフトウェア・モジュールが動作中であるとみなされないという判定に応じて、前記第1の処理スレッドにおいて前記第1のソフトウェア・モジュールを動作させるステップと、前記コンピューティング・デバイスにより、前記第1のソフトウェア・モジュールが動作中であるとみなされるという判定に応じて、前記第1のソフトウェア・モジュールの動作が終了するまで、前記第1の処理スレッドにおける前記第1のソフトウェア・モジュールの動作を延期するステップと、を含む。
【0066】
例17は、例16のコンピュータにより実施される方法を含み、前記複数のソフトウェア・モジュールのうちの前記第1のソフトウェア・モジュールが、前記複数のソフトウェア・モジュールのうちの前記第2のソフトウェア・モジュールにより呼び出されたという前記判定に応じて、ページ・フォールトをトリガするステップをさらに含む。
【0067】
例18は、例17のコンピュータにより実施される方法を含み、前記コンピューティング・デバイスにより、例外ハンドラを実施し、前記ページ・フォールトに応答して、前記第1の処理スレッドに関連付けられた、前記例外ハンドラのインスタンスに実行制御を渡すステップをさらに含む。
【0068】
例19は、例16のコンピュータにより実施される方法を含み、前記コンピューティング・デバイスにより、前記複数の処理スレッドのための複数のそれぞれのページ・テーブルを初期化するステップをさらに含む。
【0069】
例20は、例19のコンピュータにより実施される方法を含み、前記コンピューティング・デバイスにより、前記複数のソフトウェア・モジュールに対応するエントリを前記複数のページ・テーブルに含めるステップをさらに含む。
【0070】
例21は、例20のコンピュータにより実施される方法を含み、前記コンピューティング・デバイスにより、前記複数のソフトウェア・モジュールの動作が、前記第1の処理スレッドにおいて、無効にされる、あるいは禁止されることを示すために、前記複数のソフトウェア・モジュールに対応する、第1のページ・テーブルのエントリを初期化するステップと、前記コンピューティング・デバイスにより、動作させる前記第1のソフトウェア・モジュールを選択したことに応じて、前記第1のソフトウェア・モジュールの動作が有効にされる、あるいは許可されることを示すように、前記第1のソフトウェア・モジュールに対応する、前記第1のページ・テーブルの1以上のページ・テーブル・エントリを変更するステップと、をさらに含む。
【0071】
例22は、例16乃至21いずれか1つのコンピュータにより実施される方法を含み、前記コンピューティング・デバイスにより、前記複数の処理スレッドのためのそれぞれのインスタンスにインスタンス化されるスケジューラを実施するステップをさらに含む。
【0072】
例23は、例16乃至21いずれか1つのコンピュータにより実施される方法を含み、前記コンピューティング・デバイスにより、前記複数のソフトウェア・モジュールに対応する複数のインジケータを、前記コンピューティング・デバイスがアクセス可能なメモリに記憶するステップであって、各インジケータは、それぞれのソフトウェア・モジュールが処理スレッドにおいて動作中であるかどうかを示すよう構成される、ステップをさらに含む。
【0073】
例24は、装置を対象とする。当該装置は、複数の並行処理スレッド間で実行される、タスクの複数のソフトウェア・モジュールのうちの第1のソフトウェア・モジュールが、複数の処理スレッドのうちの第1の処理スレッドにおける、前記複数のソフトウェア・モジュールのうちの第2のソフトウェア・モジュールにより呼び出されたことを判定する手段と、前記第1のソフトウェア・モジュールが動作中であるとみなされないと判定する手段であって、前記第1のソフトウェア・モジュールは、自身が動作中である間、又は前記第1のソフトウェア・モジュールにより呼び出された任意の他のソフトウェア・モジュールの動作の終了を待つ間、動作中であるとみなされる、手段と、前記第1のソフトウェア・モジュールが動作中であるとみなされないという判定に応じて、前記第1の処理スレッドにおいて前記第1のソフトウェア・モジュールを動作させる手段と、前記第1のソフトウェア・モジュールが動作中であるという判定に応じて、前記第1のソフトウェア・モジュールの動作の終了まで、前記第1の処理スレッドにおける前記第1のソフトウェア・モジュールの動作を延期する手段と、を備える。
【0074】
例25は、例24の装置を含み、前記複数のソフトウェア・モジュールのうちの前記第1のソフトウェア・モジュールが、前記複数のソフトウェア・モジュールのうちの前記第2のソフトウェア・モジュールを呼び出したという前記判定に応じて、ページ・フォールトをトリガする手段をさらに備える。
【0075】
例26は、例25の装置を含み、例外ハンドラを実施する手段であって、前記ページ・フォールトに応答して、実行制御は、前記第1の処理スレッドに関連付けられた、前記例外ハンドラのインスタンスに渡される、手段をさらに備える。
【0076】
例27は、例24の装置を含み、前記複数の処理スレッドのための複数のそれぞれのページ・テーブルを初期化する手段をさらに備える。
【0077】
例28は、例27の装置を含み、前記複数のソフトウェア・モジュールに対応するエントリを前記複数のページ・テーブルに含める手段をさらに備える。
【0078】
例29は、例28の装置を含み、前記複数のソフトウェア・モジュールの動作が、前記第1の処理スレッドにおいて、無効にされる、あるいは禁止されることを示すために、前記複数のソフトウェア・モジュールに対応する、第1のページ・テーブルのエントリを初期化する手段と、動作させる前記第1のソフトウェア・モジュールを選択したことに応じて、前記第1のソフトウェア・モジュールの動作が有効にされる、あるいは許可されることを示すように、前記第1のソフトウェア・モジュールに対応する、前記第1のページ・テーブルの1以上のページ・テーブル・エントリを変更する手段と、をさらに備える。
【0079】
例30は、例24乃至29いずれか1つの装置を含み、前記複数の処理スレッドのためのそれぞれのインスタンスにインスタンス化されるスケジューラを、コンピューティング・デバイスにより実施する手段をさらに備える。
【0080】
例31は、例24乃至29いずれか1つの装置を含み、前記複数のソフトウェア・モジュールに対応する複数のインジケータを記憶する手段であって、各インジケータは、それぞれのソフトウェア・モジュールが処理スレッドにおいて動作中であるとみなされるかどうかを示すよう構成され、あるソフトウェア・モジュールが実行される間、又は前記あるソフトウェア・モジュールが、前記あるソフトウェア・モジュールにより呼び出されたダウンストリームのソフトウェア・モジュールの動作の終了を待つ間、前記あるソフトウェア・モジュールは動作中である、手段をさらに備える。
【0081】
説明の目的のために、所定の実施形態を図示し本明細書で説明したが、この出願は、本明細書で説明した実施形態の任意の適応例又は変形例をカバーするよう意図されている。したがって、本明細書で説明した実施形態は、請求項によってのみ限定されることが明白に意図されている。
【0082】
本開示が、「1つの(a)」要素若しくは「第1の」要素又はその均等物を記載している場合、そのような開示は、1以上のそのような要素を含み、2以上のそのような要素を要求することも排除することもない。さらに、特定された要素のための順序のインジケータ(例えば、第1、第2、又は第3)は、その要素を区別するために使用され、特に明記されない限り、そのような要素の要求された数又は限定された数を示すものでも意味するものでもなく、そのような要素の特定の位置又は順序を示すものでもない。