(57)【要約】  オペレーティングシステム上で稼動するパーソナリティレイヤは、そのパーソナリティレイヤが関与するあらゆるスレッドを、カーネルの知らない新しいステートへおく。このことは、これらの新しいステートの一つに配置されたスレッドで、スレッド自身のステートに敏感なオペレーション（キル（kill）、サスペンド（suspend）、プライオリティ変更（priority change）など）をカーネルが実行することを防ぐ。代わりに、カーネルは、これらのスレッドオペレーションをパーソナリティレイヤのハンドラへリダイレクトする。そして、パーソナリティレイヤがそのオペレーションを扱う。カーネルは、こうして、本質的に、追加されたパーソナリティレイヤの利用を通じて拡張可能であり、従って、他のリアルタイムオペレーティングシステム用に書かれたレガシーリアルタイムアプリケーションを稼動するために使用可能となる。
2009506409.tif 000002
【特許請求の範囲】
【請求項１】
第１のオペレーティングシステムのためのパーソナリティレイヤを第２のオペレーティングシステムが稼動するコンピュータ装置において実施する方法であって、
ａ．前記パーソナリティレイヤによって前記コンピュータ装置上で稼動するスレッドの実行に特別なステートを付加し、
ｂ．前記第２のオペレーティングシステムのカーネルが、これら特別なステートにあるスレッドを、前記パーソナリティレイヤ内のハンドラへ渡す
ことにより、前記第１のオペレーティングシステムのために作成されたソフトウエアを前記コンピュータ装置で実施可能にする方法。
【請求項２】
請求項１に記載の方法に従って動作するように構成されたコンピュータ装置。
【請求項３】
請求項１に記載の方法に従ってコンピュータ装置を動作させるオペレーティングシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータ装置を動作させる方法に関し、特に、装置に新たなパーソナリティレイヤを付加するための、オペレーティングシステム（ＯＳ）カーネルにおけるスレッドステートの拡張された範囲の利用に関する。
【背景技術】
【０００２】
新しいプラットフォーム上での既存のコンピュータ技術を実施することを追求する製造者やその他の者にとって、彼らの既存のソフトウエア材料を再利用することの試みは有効なことである。これは、特に、携帯電話のような、それらの開発に注がれた期間に比べて製品寿命が短い傾向にある民生機器によく当てはまる。開発サイクルを短縮するための採用可能なあらゆる方策は、開発効率を向上させ、全体としての装置コストを減少させる。
【０００３】
通信スタックやプロトコル実装は、現代の民生用電子機器において製造者が再利用を模索するソフトウエア材料の良い例である。そのような装置では機能が集中する傾向が高まっており、従って、通信能力及びネットワーク能力が、ますます多くの多様な状態において要求されることになる。そのようなソフトウエア材料は、通常、以下のような特徴を持つ傾向にある。
【０００４】
・それらは、関係する電話器製造者が多大な経済的投資を行って得られた、大きく複雑なソフトウエアピースである。
・それらはかなりのリアルタイム性を要求する。
・それらは、あるタイプのリアルタイムオペレーティングシステム（ＲＴＯＳ）上で稼動するように開発されたものである。これらは、独自のシステムと、Nucleus Plus、VRTX、OSEのような標準的な商業的システムとの両方を含む。
【０００５】
そのようなソフトウエアは、レガシーリアルタイムアプリケーション（ＬＲＴＡ）と呼ばれている。
ＬＲＴＡを新しい装置プラットフォームに組み込むには、いくつかの方法がある。
【０００６】
比較的直接的な方法は、当該装置のＬＲＴＡコンポーネント以外の機能性を扱うＣＰＵとは分離された独自のＣＰＵ上でＬＲＴＡコンポーネントを動作させることである。この解決策にはいくつかの利点がある。すなわち、ＬＲＴＡを改造することが不要であり、新しい装置上の他のソフトウエアから完全に切り離されることにより統合のための負担が減少する。
【０００７】
しかしながら、この方法には不利な点もある。最も顕著なものは、別途用意されるプロセッサと、装置において必要となる物理メモリとコストが増加することである。
【０００８】
現代のコンピュータ装置に対するコスト圧力により、そもそもこれらのコスト圧力がＬＲＴＡを利用することの決定に関与しているのであるが、通常の場合、分離されたプロセッサを用いた解決策は高価すぎるため拒絶される。このことは、必然的に、当該装置上の他のソフトウエアと同じＣＰＵ上でＬＲＴＡが動作しなければならないことを意味する。当業者であれば、これを達成するために主として以下の３つの方法があることに気づくであろう。
【０００９】
１．ＣＰＵのネイティブＯＳの元で直接に動作するように、ＬＲＴＡのソースコード（おそらくは設計）を変更する。ＬＲＴＡは、典型的には比較的低レベルなコンポーネントで構成されているので、純粋なカーネルモードデバイスとして或いはカーネルとユーザモードコンポーネントの組み合わせとして、通常はＬＲＴＡのリエンジニアリングにより達成されるだろう。しかしながら、ＬＲＴＡの改造にかかる時間や、そのような改造にかかるリスク、及び第２の別のバージョンのＬＲＴＡを生成することによる装置製造者の維持に関する負担の増加、といった理由により、この選択肢もまた商業的には現実的ではない。
【００１０】
２．ネイティブＯＳとＬＲＴＡ  ＲＴＯＳの両方が同時に稼動するシステムを実現する。これは、ＲＴＯＳを動作可能にするように、ＣＰＵのネイティブＯＳカーネルの戦略的な位置（strategic place）にフックを配置することによって（割り込み及びおそらくは他の例外ベクトル）、或いは、２つのオペレーティングシステム間のコンテキストスイッチを実行するある種の“ハイパーバイザ”を実施することによって、達成され得る。これには、スレッドスイッチ、プライオリティ変更などを指示するためにハイパーバイザをコールさせるように、両オペレーティングシステムを改造することが必要となる。
【００１１】
しかしながら、この第２の選択肢もまた次のような課題を有する。ＬＲＴＡに関連していないフックであっても、割り込みや実行呼び出しの度に呼び出されてしまうために、パフォーマンスが低下する。ハイパーバイザシステムは、更に多くのフックや、割り込み時の処理の特別なレイヤの全体により、更にパフォーマンスが低下する。また、フックは、追加的な複雑さや、コードの特に敏感な領域へ悪影響を及ぼすという危険性を与える。その上、いつでもＲＴＯＳが動作できるようにネイティブＯＳカーネルにフックを挿入することにより、そのリアルタイム性能が損なわれる。ＬＲＴＡのプライオリティの低いスレッドが、ネイティブＯＳの高いプライオリティのスレッドよりも優先されるからである。ハイパーバイザシステムは、必ずしもこのような課題を患うものではないが、かなりの複雑であり、多大なパフォーマンス上の損失を被る。加えて、複数のＲＴＯＳがデバイスに統合される必要がある場合、フックは非常に複雑になり、管理するのが困難となる。例えば、ＧＳＭ通信スタックとブルートゥーススタックの両方が必要であり、それぞれが異なるＲＴＯＳを使用する場合に、このような複数のＲＴＯＳの統合が必要となる。
【００１２】
３．オリジナルのＲＴＯＳと同じアプリケーションプログラムインターフェース（ＡＰＩ）を提供する、或いは、ＬＲＴＡが必要とするだけのＡＰＩを提供する、ネイティブＯＳカーネル上のパーソナリレイヤを実施する。これにより、ＲＴＯＳ自身を省略することが可能となり、ＬＲＴＡは、ネイティブＯＳカーネルを潜在的なリアルタイムカーネルとして用いて動作することができる（もちろん、それ（ネイティブＯＳカーネル）がその能力（リアルタイムカーネルの能力）を有すると仮定している）。
【発明の開示】
【発明が解決しようとする課題】
【００１３】
パーソナリティレイヤの使用は、上記課題への好ましい解決策であり、この発明はそのような解決策の準備を目指したものである。
【００１４】
しかしながら、パーソナリティレイヤを実施する現在の方法は、複数のパーソナリティをリアルタイムで扱うことはできない。本発明は、このようなリアルタイムオペレーションを達成する方法を提案する。
【課題を解決するための手段】
【００１５】
本発明の第１の態様によれば、
第１のオペレーティングシステムのためのパーソナリティレイヤを第２のオペレーティングシステムが稼動するコンピュータ装置において実施する方法であって、
ａ．前記パーソナリティレイヤによって前記コンピュータ装置上で稼動するスレッドの実行に特別なステートを付加し、
ｂ．前記第２のオペレーティングシステムのカーネルが、これら特別なステートにあるスレッドを、前記パーソナリティレイヤ内のハンドラへ渡す
ことにより、前記第１のオペレーティングシステムのために作成されたソフトウエアを前記コンピュータ装置で実施可能にする方法が提供される。
【００１６】
本発明の第２の態様によれば、上記第１の態様の方法に従って動作するように構成されたコンピュータ装置が提供される。
【００１７】
本発明の第３の態様によれば、上記第１の態様の方法に従ってコンピュータ装置を動作させるオペレーティングシステムが低要される。
【発明を実施するための最良の形態】
【００１８】
以下、添付の図面を参照して、更なる一例により本発明の実施形態を説明する。
【００１９】
図１は、パーソナリティレイヤの利用を通じてスレッドステートを扱うことにより、カーネルのオペラビリティを拡張する本発明の実施形態を示す図である。
また、図２は、スレッドをパーソナリティレイヤに向かわせるためのオペレーションを示す図である。
【００２０】
本発明はカーネルを拡張可能にする。そして、カーネルが追加的なスレッドステートを加えることを可能にすることにより、パーソナリティレイヤ（ＰＬ）の展開を可能にする。パーソナリティレイヤは、カーネルのトップに位置すると見なされ、既存のアプリケーションによる利用のために別のオペレーティングシステムのＡＰＩをエミュレートする。
【００２１】
本発明の実施形態は以下のように動作する。
図１において、ＰＬが、追加的な待ちオブジェクト（セマフォ、メッセージキュー、イベントフラグを含む（但し、これらに限られるものではない））を生成するために配置される。スレッドはそれら待ちオブジェクトを待つことができる。スレッドがこれら新しい待ちオブジェクトの一つで待つとき、ＰＬはスレッドを、カーネルにとって未知の新しいＰＬ特定ステートに置く。こうして、スレッドがこれら新たなステートの一つにある場合に、カーネル自身は、ステートに敏感なスレッド上のオペレーション（例えば、キル（kill）、サスペンド（suspend）、プライオリティ変更（change priority））を実行することができない。そこで、ＰＬの待ちオブジェクト上でスレッドにブロックさせるために、ＰＬはカーネルを呼び出す。この処理は図１に示されている。
【００２２】
しかしながら、ＯＳカーネルがスレッド上のオペレーションを実行することを要求するとき、ＯＳカーネルはそのスレッドのステートを調べる。そのスレッドがカーネルに知られたステートにある場合、ＯＳカーネルはスレッドによって定義されたオペレーションを処理する。しかしながら、そのスレッドがカーネルにとって未知のステートにある場合は、カーネルはそのオペレーションをＰＬ内のハンドラにリダイレクトする。こうして、オペレーションは、その状態（situation）を処理するＰＬ内のハンドラにリダイレクトされる。こうして、追加されたパーソナリティレイヤの提供を通じて、それが他のＲＴＯＳのために作成されたＬＲＴＡを動作させるのに用いることができるようになるので、カーネルは拡張されたことになる。
【００２３】
以下、シンビアンＯＳ  ＥＫＡ２  ナノカーネル（Symbian OS EKA2 Nanokernel）に関連した詳細な例について説明する。これは、シンビアンＯＳオペレーティングシステムの当業者には直ちに理解される。
【００２４】
ナノカーネルは、標準のリアルタイムオペレーティングシステムによって提供される、大部分の同期及び通信プリミティブをサポートしない。従って、ＬＲＴＡ（レガシーリアルタイムアプリケーション）が必要とするそのようなプリミティブは、パーソナリティレイヤにおいて実施される必要がある。このことは、基本的には、パーソナリティレイヤ自身は、スレッドが待つ、新しいタイプのオブジェクトを定義するために要求されることを意味する。次に、スレッドが新しいタイプのオブジェクトで待ちとなっていることを表すために定義される新しいＮ個のステート（以下を参照）が要求される。一般に、新しいタイプの待ちオブジェクト（wait-object）の各々は、新たなＮ個のステートを伴うことを要求する。従って、新しいタイプの待ちオブジェクトで実際にスレッドにブロックさせるためには、以下のようなナノカーネルファンクションが使用される。
void NKern::NanoBlock(TUint32 aTimeout, TUint aState, TAny*aWaitObj);
【００２５】
ナノスレッドのライフサイクル及びナノスレッドのＮ個のステートは、以下の用に定義される。
ナノカーネルスレッドは、いくつかのステートの１つとすることができ、NThreadStateにより列挙され、NThreadのiNStateメンバーデータによって決定される。これらのステートのうちのいくつかについて以下に説明する。
iNState==Eready：このステートにおけるスレッドは、実行の資格がある。それらのスレッドは、準備リスト（ready list）にリンクされている。最も高い優先度のEReadyスレッドは、ファストミューテックス（fastmutex）でブロックされない限り、あらゆる時点において実際に実行される。
iNState==Esuspended：このステートにあるスレッドは、待ちオブジェクトによってブロックされているのではなく、他のスレッドにより明白に一時停止している。
iNState==EwaitFastSemaphore：このステートにあるスレッドは、通知されるべきファストセマフォ（fastsemaphore）を待つためにブロックされる。
iNState==EwaitDfc：スレッドはＤＦＣハンドリングスレッドであり、スレッドはＤＦＣがサービス中のＤＦＣキューに追加されるのを待つことためにブロックされる。（ＤＦＣは遅延関数呼び出し（delayedfunction call）であり、割り込みによってトリガされるユーザモード動作を実行可能にするために、ＯＳに用いられるメカニズムである）
iNState==Esleep：このステートにおけるスレッドは、特定の期間が経過するのを待つおうにブロックされる。
iNState==Eblocked：このステートにおけるスレッドは、ナノカーネルの上のレイヤにおいて実施される待ちオブジェクト上でブロックされる。これは、一般に、セマフォ或いはミューテックス（mutex）でブロックされていることを表す。
iNState==Edead：このステートにあるスレッドは、完了しており、再度実行されることはない。
【００２６】
パーソナリティレイヤが生成される場合、ナノスレッドが特別のステートを持つことが可能となる。すなわち、iNStateは、上記以外の値をとることができるであろう。これを達成するために、NThreadにおいてiStateHandlerが提供されてもよい。こうして、このナノスレッドに関してステートに遷移がある場合、すなわち、再開やブロックなどが発生した場合、カーネルはこのファンクションをコールするように構成される。
【００２７】
こうして、本発明は、リアルタイムで実行されるべき複数のパーソナリティレイヤを実行可能にする。そして、このことは、既存のリアルタイムソフトウエアを新しいデバイスへ移植すること、デバイス開発時間を短縮することを促進する。
【００２８】
本発明についてまとめると次のとおりである。オペレーティングシステム上で動作するパーソナリティレイヤは、そのパーソナリティレイヤが関与するあらゆるスレッドを、カーネルにとって未知の新しいステートへおく。このことは、これらの新しいステートの一つに配置されたスレッドで、スレッド自身のステートに敏感なオペレーション（キル（kill）、サスペンド（suspend）、プライオリティ変更（priority change）など）をカーネルが実行することを防ぐ。代わりに、カーネルは、これらのスレッドオペレーションをパーソナリティレイヤのハンドラへリダイレクトする。そして、パーソナリティレイヤがそのオペレーションを扱う。カーネルは、こうして、本質的に、追加されたパーソナリティレイヤの利用を通じて拡張可能となり、従って、他のリアルタイムオペレーティングシステム用に作成されたレガシーリアルタイムアプリケーションを稼動するために使用可能となる。
【００２９】
本発明について特定の実施形態を参照して説明したが、添付の請求の範囲に規定された本発明の範囲内で変更が可能であることは理解されるべきである。
【図面の簡単な説明】
【００３０】
【図１】図１は、パーソナリティレイヤの利用を通じてスレッドステートを扱うことにより、カーネルのオペラビリティを拡張する本発明の実施形態を示す図である。
【図２】図２は、スレッドをパーソナリティレイヤにダイレクトするためのオペレーションを示す図である。
【図１】
2009506409.tif 000003
【図２】
2009506409.tif 000004
【国際調査報告】
2009506409.tif 000005
2009506409.tif 000006
2009506409.tif 000007