(57)【要約】  異なるユーザサイドのプロセス間におけるコンテキストの切替は、潜在的な大量のメモリマッピングを動かす必要性や、仮想タグ付けされたデータキャッシュを利用するハードウェア構造のデータキャッシュを一括消去する必要性があり、時間のかかる手順である。本発明は、コンテキストスイッチ実行中のページディレクトリエントリの変更及びデータキャッシュの一括消去をプリエンプションが有効な状態で実行可能にする。コンテキストスイッチの実行中に第３のプロセスを実行する必要あり、且つこの第３のプロセスがページテーブルのいかなるユーザメモリの変更を所有せず、また、必要としない場合、これは可能である。本発明の手段によれば、カーネルスレッド及び固定ユーザプロセスにおけるスレッドへの切替は、より高速なされる。これらスレッドは、プロセスが所有するいかなるユーザメモリに依存せず、リアルタイム性能を確実にするために、より低い待ち時間が保証された状態で実行される必要があるものである。
2009506411.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータ装置における異なるユーザプロセスのスレッド間でコンテキストを切り替える方法であって、
ページディレクトリエントリの変更かデータキャッシュの一括消去かを含む前記コンテキストスイッチの一部がプリエンプションが有効な状態で実行され、
前記コンテキストスイッチの一部は、
カーネルスレッドによりプリエンプトされる
ことを特徴とするコンピュータ装置におけるコンテキストの切替方法。
【請求項２】
前記カーネルスレッドは、カーネルスレッドのみにより要求され得るデータオブジェクトを保持し、
前記コンピュータ装置は、
前記データオブジェクトの待ちスレッドがあるか否かを前記コンテキストスイッチの実行中に確認する
ことを特徴とする請求項１記載のコンピュータ装置におけるコンテキストの切替方法。
【請求項３】
前記データオブジェクトは、ミューテックスである
ことを特徴とする請求項２記載のコンピュータ装置におけるコンテキストの切替方法。
【請求項４】
前記コンテキストスイッチの一部は、ＭＭＵドメインによる使用のため及びカーネルのために通常確保されたメモリの一部に割り当てられたメモリを有するプロセスで実行中のユーザスレッドによりプリエンプトされる
ことを特徴とする請求項１乃至３いずれか１項に記載のコンピュータ装置におけるコンテキストの切替方法。
【請求項５】
請求項１乃至４のいずれか１項に記載の方法に従って動作するように構成されている
ことを特徴とするコンピュータ装置。
【請求項６】
請求項１乃至４のいずれか１項に記載の方法に従った動作をコンピュータ装置に実施させる
ことを特徴とするオペレーティングシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチタスクコンピュータ装置の反応性及び効率性の能力の向上に関し、特に、プリエンプト可能なコンテキストスイッチの使用によりそのような向上を提供する。
【背景技術】
【０００２】
’コンピュータ装置’という表現は、限定ではなく、デスクトップコンピュータ及びラップトップコンピュータ、パーソナルデジタルアシスタント（ＰＤＡ）、携帯電話、スマートフォン、デジタルカメラ及びデジタルミュージックプレーヤを含む。また、上述した装置の種類の内の１又は複数の機能を組み合わせた集中型装置、それに加えて、機能性に関するソフトウェアに従った多くの他の形式の工業及び民生用の電子機器を含む。
【０００３】
進化したコンピュータ装置の多くは、オペレーティングシステム（ＯＳ）により制御される。ＯＳは、装置の全体的な動作を制御する。ＯＳ内におけるカーネルは、中核の象徴であり、装置におけるハードウェア及びソフトウェアの初期化の全体に渡る極めて高度な制御を行なう。典型的には、カーネルは、特権のあるスーパーバイザーモードで動作し、一般の（ユーザモードで実行する）アプリケーションが実行を任されていない処理の実行が任される。
【０００４】
マルチタスクコンピュータ装置は、多数の個々の一連の命令のいずれか一つの実行を迅速に切り替える。緊密に結びついた一連の命令はスレッドと呼ばれる。スレッドは、それゆえ、そのような装置における一群の遂行として考えられる。スレッド間の切り替えは、コンテキストスイッチと呼ばれる。
【０００５】
コンピュータ装置におけるメモリは、それぞれが１又は複数のスレッドから構成される種々の異なるプロセス間で分割される。あるプロセスが１以上のスレッドから構成される場合、そのプロセスに含まれる全てのスレッドは、同一の共有メモリにアクセスする。しかし、そのプロセスにおけるスレッドは、それ自身のプロセス以外のいかなるプロセスのメモリにもアクセスできない。プロセスは、それゆえ、装置におけるメモリ保護の一群として考えられる。
【０００６】
このようなことから、コンピュータ装置が、第１のプロセスの第１のスレッドと第２のプロセスの第２のスレッドとを切り替える場合、第１のスレッドから第２のスレッドへの実行の移譲は、使用中のアクティブなメモリを、第１のプロセスが所有するメモリから第２のプロセスが所有するメモリに切り替えるいくつかの方法と同時に行なわれなければならない。
【０００７】
これを達成するための多くの一般的なスキーマの一つでは、最新のコンピュータ装置におけるメモリが、通常、極めて厳重な管理の下、典型的にはカーネルの制御下にあることを利用する。当業者は、装置におけるメモリの隣接するアドレスは、ページとしてまとめられ、装置におけるアドレス可能なメモリ位置の全体は、仮想メモリアドレスと称されることを知っている。実際に組み込まれるメモリのアドレス全体は、物理的なメモリアドレスと呼ばれ、コンピュータ装置は、仮想メモリページアドレスの物理メモリページアドレスへのマッピングを含む。このマッピングは、メモリ管理ユニット、すなわちＭＭＵにより維持される。このマッピングを保持するページディレクトリエントリのコンテンツを変更することにより、一連の仮想メモリアドレスがアドレス可能な物理メモリのいずれかの所望領域を指し示すようにすることができる。異なるプロセスにおけるスレッド間でのコンテキストスイッチは、上記スキームで示したようにメモリの再マッピングを伴う。これにより、スイッチにより非実行となったスレッドを持つプロセスのメモリを保護し、実行状態となったスレッドを持つプロセスのメモリへのアクセスを可能とする。
【０００８】
比較的遅い主メモリへのアクセススピードを向上させるために、コンピュータ装置は、局所性の現象を上手く利用している。局所性の研究は３０年以上さかのぼり行なわれている。局所性とは、
「メモリ参照は、プログラム実行中に小さいメモリ領域に集められる傾向にあるという現象（特許文献１参照）」である。
【０００９】
コンピュータ装置は、それゆえ、キャッシュを維持する。キャッシュは、メモリに読み取られているコンテンツの最新のページを保持する少量の極めて高速なメモリを含んで構成される。キャッシュにおいてタグ付けされているページを参照するメモリの読み取り要求があれば、キャッシュヒットが起きると言われており、メモリは、比較的遅い主メモリではなく、より高速なキャッシュからアクセスされうる。
【００１０】
しかし、キャッシュのためのメモリアドレスとして、物理的なメモリアドレスではなく、仮想メモリアドレスを使用することは、多くのコンピュータ装置で一般的である。これは、コンテキストスイッチが異なるプロセスのスレッド間で起きた場合、キャッシュ動作の裏側にあるロジックが無効となり、要求されたメモリアクセスが保持される仮想アドレスとの一致を起こすので、キャッシュからの読み取りデータはほぼ確実に誤ったものとなることを意味する。従って、そのようなコンテキストスイッチは、物理的なメモリからの読み取りを強要し、キャッシュに以前に保持された仮想メモリアドレスに対する任意のアクセスがキャッシュミスに終わるように、キャッシュの全てのコンテンツを無効にする必要がある。したがって、そのようなコンテキストスイッチは、物理的なメモリからの読み取りを強要し、以前にキャッシュに保持された仮想メモリアドレスに対する任意のアクセスがキャッシュミスに終わるように、キャッシュの全てのコンテンツを無効にする必要がある。
【００１１】
このようなキャッシュコンテンツの無効化は、キャッシュの一括消去と呼ばれる。上述した全ての操作は、当業者によりよく知られているであろう。
【特許文献１】"Ordering functions for improving memory reference locality in a shared memory multiprocessor system" by Youfeng Wu in Proceedings of the 25th annual international symposium on Microarchitecture table of content, 1992
【発明の開示】
【発明が解決しようとする課題】
【００１２】
上述した記載から、異なるユーザサイドのプロセスに属しているスレッド間におけるコンテキストスイッチは、潜在的な大量のメモリマッピングを動かす必要性や、仮想タグ付けされたデータキャッシュを利用するハードウェア構造のデータキャッシュを一括消去する必要性があり、時間のかかる手順になりうることが分かるであろう。この時間の間、これら操作は、典型的には、プリエンプションを無効にした状態で実行されるため、装置は典型的には反応しない。これは、２つのプロセス間におけるコンテキストスイッチにおいては、実行可能な第３のプロセスによるプリエンプションが許可されないことを意味する。
【００１３】
コンテキストスイッチを機能するのに要する時間の長さは、ＡＲＭアーキテクチャ４及び５のプロセッサで測定されている。これは、最悪のケースで、下記の動作を含みうる。
・以前のプロセスに付随する全てのメモリの仮想アドレスを動かすためにページディレクトリエントリを変更。
・以前のプロセスに付随する全てのメモリを保護する。
・新しいプロセスに付随する全てのメモリの仮想アドレスを動かすためにページディレクトリエントリを変更。
・プロセッサーデータキャッシュを一括消去する。
【００１４】
大量のデータキャッシュ及び遅いメモリインターフェースを持つプロセッサでは、上述したことを行なうのに５００μｓ以上かかる。これは、計算期間にとっては比較的大きい遅延である。以上は、ある一つのシステムからの測定値である。この動作の全てがプリエンプションを無効にした状態でコンピュータ装置のスケジューラにより直接実行されると、最悪のケースのスレッド待ち時間（あるスレッドが準備状態になってから同一スレッドが実行を開始する実際の時間までの取り得る最大時間）に、５００ミリ秒かそれ以上を加えることになるであろう。この遅延は、多くの最新のコンピュータ装置に受け入れられない。多くの最新のコンピュータ装置は、より向上及びより高速化し、即時応答の保証をする必要があるためである。即時応答の保証とは、スピード重視のタスクをより短い請負期間で完了するように動作することである。
【課題を解決するための手段】
【００１５】
本発明の第１の側面によれば、コンピュータ装置における異なるユーザプロセスのスレッド間でコンテキストを切り替える方法であって、ページディレクトリエントリの変更かデータキャッシュの一括消去かを含む前記コンテキストスイッチの一部がプリエンプションが有効な状態で実行され、コンテキストスイッチの一部は、カーネルスレッドによりプリエンプトされることを特徴とするコンピュータ装置におけるコンテキストの切替方法が提供される。
【００１６】
本発明の第２の側面によれば、第１の側面の方法に従って動作するように構成されるコンピュータ装置が提供される。
【００１７】
本発明の第３の側面によれば、コンピュータ装置を第１の側面の方法に従って動作させるオペレーティングシステムが提供される。
【発明を実施するための最良の形態】
【００１８】
ここでは、本発明の一実施形態を、更なる一例として、添付の図を参照しながら説明する。
【００１９】
図１は、本発明に係わるプリエンプト可能なコンテキストスイッチの一実施形態を示す図である。
【００２０】
この発明は、ユーザプロセスで実行中のスレッドからの全てのコンテキストスイッチが、上述した概略の動作の全てのリストを必要とするとは限らないことを認識することである。
【００２１】
特に、ユーザプロセスにおけるスレッドを、ある固定ユーザプロセス（下記参照）のスレッドとともに、カーネルスレッド（スーパーバイザーモードで動作する特権のあるスレッド）に切り替えることが、より高速になされ、より低い待ち時間の保証を持つであろう。この目的を達成するため、この発明は、プリエンプションが有効な状態でページディレクトリエントリの変更とデータキャッシュの一括消去との実行を可能にする。
【００２２】
下記に示す本発明の実施形態では、シンビアンＯＳ（operating system）に関する記載を行なう。このＯＳは、国際的に開かれた業界基準のオペレーティングシステムであり、データ使用可能な進化した携帯電話に搭載される。下記説明は、シンビアンＯＳの様式に詳しい人にとっては、容易に理解できることを想定している。
【００２３】
メモリモデルは、アドレス空間切替が要求される時はいつでも使用されるべきコールバックを有するスレッドスケジューラ（カーネルの一部）を提供する。下記説明では、スケジューラがそのコールバックを発行する場合に生じる一連のイベントについて述べる。
【００２４】
コールバックは、
・先に述べた通り、ユーザモードアドレス空間の切替は、手間のかかる操作であり、かなりの期間を必要とするので、アドレス空間切替はプリエンプションが有効な状態で実行される。
【００２５】
・基本的に、カーネルは、システムが新しいスレッドのスーパーバイザースタックを使用できるように、新しいスレッドに関するレジスタを元に戻す。そのとき、的確なＭＭＵアーキテクチャに戻す前に、再度プリエンプションを可能にする。そして、新しいスレッドは、それぞれのＭＭＵアーキテクチャを構築する。
【００２６】
・１以上のスレッドが、例えば、内部プロセス通信（ＩＰＣ）又はデバイスドライバーデータ通信の間、異なるプロセスのユーザモードメモリにアクセスを所望する場合があるので、ユーザモードアドレス空間は、カーネルの共有データオブジェクトとなる。明らかに、プリエンプションを再度可能にすることは、マルチスレッドがページディレクトリエントリを同時に変更することを防止するために、他の保護の手段を必要とする。これは、これら操作の実行中に、コードがシステムロックファストミューテックス（mutex：相互排除）を保持することを確実にすることにより提供される。システムロック及びファーストミューテックスの操作については、特許出願ＰＣＴ／ＧＢ２００５／００１３００号に開示されている。
【００２７】
・この解決は、カーネルサイドのソフトウェアに対して大きな影響を有し、特に、メモリモデルでは、ユーザモードメモリの一貫性を保証するために、他のプロセスのユーザモードメモリがアクセスされる時はいつでも、システムロックが持続される必要がある。
【００２８】
・コンテキストスイッチは長い操作となるので、その持続時間全体に渡ってシステムロックを持続することは、全体としてＯＳの即時応答の反応に影響を及ぼす。それは、カーネルスレッドもまた、ユーザモードメモリとのデータ転送のためにこのシステムロックを獲得する必要があるためである。
【００２９】
・本発明では、この問題は、システムロックで他のスレッドが待機しているかどうかをコンテキストスイッチ中に定期的に確認することで対応される。待ちスレッドが見つかれば、そのスレッドは、カーネルスレッドであると推測できる。それらは、システムロックの持続を可能にする唯一のスレッドであるためである。従ってこの場合、コンテキストスイッチは中止され、待ちスレッドの実行が許可される。
【００３０】
・これは、ユーザモードアドレス空間を略一致状態で維持する。カーネルソフトウェアは、任意のユーザモードの大きなチャンク（データの塊）のアドレス空間を要求に応じて探したり、制御したりできる。しかし、ユーザモードスレッドが再度スケジュールされた場合、アドレス空間切替を完全にするのにより多くのアクションが必要とされるであろう。
【００３１】
図１は、典型的な手順を示す図である。この手順は、ＯＳカーネルがスケジュールされたスレッドへのコンテキストの切替を開始すると始まる。スケジュールされたスレッドのためのレジスタを復帰させる。このときプリエンプションは有効である。プリエンプションが有効な場合、コンテキストスイッチは、任意のポイントでプリエンプト（実行権を奪うこと）されうる。
【００３２】
スケジューラは、スレッドに関するアドレス空間を切り替え、的確なＭＭＵアーキテクチャを復帰させるために、システムロックを獲得し、メモリモデルコールバックを起動する。上記記載したアドレス空間の切替やキャッシュフラッシュは、一連の短い操作に分割され、順次実行される。そのため、図１に示すように、シーケンスの次の操作が次々に実行される。その後、システムロックで待機しているスレッドが高い優先度であるかどうかが判断される。答えがｎｏであれば、一連の各操作が終わる毎に、システムロックで優先度の高いスレッドが待機しているか確認しながら、一連の操作が完了するまで当該操作が継続される。一連の操作が完了すると、システムロックは開放され、コンテキストスイッチは完了する。
【００３３】
一連の操作の実行中のどの時点においても、優先度の高いスレッドがシステムロックで待機していると判断されると、システムロックは開放され、そのときコンテキストスイッチは中止される。そして、システムは、高い優先度の待ちスレッドに明け渡す。この手順は、図１により理解される。
【００３４】
上述したように、あるユーザプロセスのスレッドは、コンテキストスイッチのプリエンプトを許可される。対象となるスレッドは、固定プロセスの一部である。カーネルスレッドと（固定プロセスとして知られた）ＭＭＵドメインを使用するユーザプロセスに属するユーザスレッドとの両方は、任意のポイントでコンテキストスイッチをプリエンプトし直ちに実行することができる。他のユーザプロセスに属しているスレッドもコンテキストスイッチをプリエンプトできるが、システムロックに関する競合が確認される任意のポイントでだけ、コンテキストスイッチをプリエンプトできる。ＭＭＵテーブルは、新しいスレッドを実行できる前に調整されなければならない。固定プロセスの利点は、データキャッシュを一括消去する必要のないところである。
【００３５】
重要且つ大量に使用されるサーバープロセスのみが、固定プロセスとしてマークされる。通常のユーザプロセスからそれらサーバープロセスを区別し、サーバープロセスにコンテキストスイッチのプリエンプトを可能にするものは、ユーザプロセスに関する通常のデータセクションにこれらプロセスのデータのチャンクを割り当てるのではなく、ＯＳメモリモデルが、カーネルセクションでそれらを割り当て、それらは決して動かされないということである。可能であれば、メモリモデルはまた、固定プロセスメモリの保護を供給するためのＭＭＵドメインを割り当てる。
【００３６】
その結果、固定プロセスへの又は固定プロセスからのコンテキストスイッチは、カーネルプロセスへの又はカーネルプロセスからのスイッチに類似し、ページディレクトリエントリの変更又はキャッシュフラッシュを必要としない。
【００３７】
この特徴を使用した一つの結果としては、固定プロセスの単一のインスタンスのみがいくつも実行可能となるが、これは、ＯＳにおける多くのサーバープロセスにとってまさに妥当な制限である。本実施形態においては、固定にマークされる典型的なプロセスは、ファイルサーバ、通信サーバ、ウィンドウサーバ、フォント／ビットマップサーバ及びデータベースサーバである。この属性が装置で有効に用いられる場合、全体的なパフォーマンスを著しく向上させられる。
【００３８】
固定プロセスの最適化は、いくつかのプロセスを追跡し続けるメモリモデルに依存する。下記プロセスの記録が維持される。
【００３９】
カレントプロセス（TheCurrentProcess）：これは、現在のスケジュールされたスレッドに関するプロセスを実際に所有しているカーネルの値である。
【００４０】
カレントＶＭプロセス（TheCurrentVMProcess）：これは、最後に実行されたユーザモードプロセスである。このプロセスは、ユーザモードのメモリマップを’所有’し、そのメモリはアクセス可能である。
【００４１】
カレントデータセクションプロセス（TheCurrentDataSectionProcess）：これは、通常アドレス範囲−データセクションを移動している少なくとも１つのチャンクを含むユーザモードプロセスである。
【００４２】
コンプリートデータセクションプロセス（TheCompleteDataSectionProcess）：これは、移動しているチャンクの全てをデータセクション内に有するユーザモードプロセスである。
【００４３】
なお、それらの値のいくつかは、コンテキストスイッチの中止又はプロセスの終了の結果、ｎｕｌｌである場合がある。コンテキストスイッチプロセスにより用いられるアルゴリズムを下記に示す。
１．新しいプロセスがカーネル又はＭＭＵドメインを有していれば、全てのステップを飛ばす。
２．新しいプロセスが固定であれば、ステップ７に進む。
３．新しいプロセスがコンプリートデータセクションプロセスでなければ、少なくとも１つのチャンクを移動させる必要が生じることになるので、データキャッシュを一括消去する。
４．新しいプロセス以外のプロセスがデータセクションを占有する場合は、ホームセクションにその全てのチャンクを移動し、それらを保護する。
５．新しいプロセス以外のプロセスが、最後のユーザプロセスであれば、そのチャンク全てを保護する。
６．新しいプロセスのチャンクを（まだ存在していないならば）データセクションに移動し、それらを非保護とする。ステップ９に進む。
７．「固定プロセス」カレントＶＭプロセスのチャンクを保護する。
８．新しいプロセスのチャンクを非保護にする。
９．いずれかのチャンクが移動されるか又はパーミッション（許可）が変化したならば、トランスレーションルックアサイドバッファ（ＴＬＢ）を一括消去する。
【００４４】
上述した記載から、異なるユーザサイドのプロセスに属しているスレッド間におけるコンテキストスイッチは、潜在的な大量のメモリマッピングを動かす必要性や、仮想タグ付けされたデータキャッシュを利用するハードウェア構造のデータキャッシュを一括消去する必要性があり、時間のかかる手順になりうることが十分に理解されうる。本発明は、コンテキストスイッチ実行中のページディレクトリエントリの変更及びデータキャッシュの一括消去をプリエンプションが有効な状態で実行可能にする。コンテキストスイッチの実行中に第３のプロセスを実行する必要があり、且つこの第３のプロセスがページテーブルのいかなるユーザメモリの変更を所有せず、また、必要としていない場合、これは可能である。本発明の手段によれば、カーネルスレッド及び固定ユーザプロセスにおけるスレッドへの切替は、より高速になされる。これらスレッドは、プロセスが所有するいかなるユーザメモリに依存せず、リアルタイム性能を確実にするために、より低い待ち時間が保証された状態で実行される必要があるものである。
【００４５】
本発明は、それゆえ、ユーザモードスレッド間のコンテキストスイッチの一定限度の量のプリエンプションの許可によりオペレーティングシステムのリアルタイム性能を向上することで既知の技術を越えた有効な利点を提供する。
【００４６】
本発明の詳しい実施形態に関して記載したが、添付のクレームにより記載される本発明の範囲内における改良が達成されることも十分に理解される。
【図面の簡単な説明】
【００４７】
【図１】本発明に係わるプリエンプト可能なコンテキストスイッチの一実施形態を示す図である。
【図１】
2009506411.tif 000003
【国際調査報告】
2009506411.tif 000004
2009506411.tif 000005