(57)【特許請求の範囲】
【請求項１】
プロセッサが実行する、サブプロセスを共有する方法であって、
第１のコーリングプロセスからサブプロセスを呼び出すことと、
サブプロセス固有のアドレスオフセットを格納することと、
前記第１のコーリングプロセスのコンテキスト内に第１のアドレス空間を定義するために、前記サブプロセス固有のアドレスオフセットを第１のベースアドレスと結合させることと、
前記第１のアドレス空間内に前記第１のコーリングプロセスのオペランドを格納することと、
第２のコーリングプロセスから前記サブプロセスを呼び出すことと、
前記第２のコーリングプロセスのコンテキスト内に第２のアドレス空間を定義するために、前記サブプロセス固有のアドレスオフセットを第２のベースアドレスと結合させることと、
前記第２のアドレス空間内に前記第２のコーリングプロセスのオペランドを格納することと、
を具備する、方法。
【請求項２】
前記サブプロセスが前記第１のコーリングプロセスから呼び出されたことを示すために、前記第１のコーリングプロセスの第１のプロセス制御ブロックをアップデートすることと、
前記サブプロセスが前記第２のコーリングプロセスによって呼び出されたことを示すために、前記第２のコーリングプロセスの第２のプロセス制御ブロックをアップデートすることと、
をさらに具備する、請求項１に記載の方法。
【請求項３】
前記第１のコーリングプロセスおよび前記第２のコーリングプロセスのうちのどちらが前記サブプロセスの親であるかを示すためにグローバルデータ構造をアップデートすること、
をさらに具備する、請求項２に記載の方法。
【請求項４】
音楽プレイヤー、ビデオプレイヤー、エンターテインメントユニット、ナビゲーションデバイス、通信デバイス、携帯情報端末（ＰＤＡ）、固定ロケーションデータユニット、およびコンピュータのうちの少なくとも１つにおいて前記方法を実行することをさらに具備する、請求項１に記載の方法。
【請求項５】
移動通信用の装置であって、
メモリと、
前記メモリに結合された少なくとも１つのプロセッサであって、
第１のコーリングプロセスからサブプロセスを呼び出し、
サブプロセス固有のアドレスオフセットを格納し、
前記第１のコーリングプロセスのコンテキスト内に第１のアドレス空間を定義するために、前記サブプロセス固有のアドレスオフセットを第１のベースアドレスと結合させ、
前記第１のアドレス空間内に前記第１のコーリングプロセスのオペランドを格納し、
第２のコーリングプロセスから前記サブプロセスを呼び出し、
前記第２のコーリングプロセスのコンテキスト内に第２のアドレス空間を定義するために、前記サブプロセス固有のアドレスオフセットを第２のベースアドレスと結合させ、
前記第２のアドレス空間内に前記第２のコーリングプロセスのオペランドを格納する、ように構成された少なくとも１つのプロセッサと、
を具備する装置。
【請求項６】
前記少なくとも１つのプロセッサは、さらに、
前記サブプロセスが前記第１のコーリングプロセスから呼び出されたことを示すために、前記第１のコーリングプロセスの第１のプロセス制御ブロックをアップデートし、
前記サブプロセスが前記第２のコーリングプロセスによって呼び出されたことを示すために、前記第２のコーリングプロセスの第２のプロセス制御ブロックをアップデートする、ように構成される、請求項５に記載の装置。
【請求項７】
前記少なくとも１つのプロセッサは、さらに、前記第１のコーリングプロセスおよび前記第２のコーリングプロセスのうちのどちらが前記サブプロセスの親であるかを示すためにグローバルデータ構造をアップデートするように構成される、請求項５に記載の装置。
【請求項８】
音楽プレイヤー、ビデオプレイヤー、エンターテインメントユニット、ナビゲーションデバイス、通信デバイス、携帯情報端末（ＰＤＡ）、固定ロケーションデータユニット、およびコンピュータのうちの少なくとも１つに組み込まれた、請求項５に記載の装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本願の開示は、複数のオペレーティングシステムに関する。より詳細には、該本願の開示は、複数のオペレーティングシステムによるメモリ管理に関する。
【背景技術】
【０００２】
しばしば、複数のアプリケーションは、共通の複数のファンクションを共有する。例えば、音声録音器アプリケーションおよび音声通信アプリケーションは、ともに、音声コーデックファンクションを要求する。両方のアプリケーションが該同じファンクションにアクセスできるようにするための一方法は、複数の共有ライブラリを使用することである。
【０００３】
複数の共有ライブラリは、マルチプルなプログラムの間で共有される複数のサブプログラムの複数の集合体である。該マルチプルなプログラムは、該複数の共有ライブラリを同時に実行することができ、したがって、複数の共有ライブラリは、プログラマらにいくつかの利点を提供する。しかしながら、いくつかのオペレーティングシステムは、複数の共有ライブラリが内部メモリに常駐することを要求する。多くのコンピューティングシステムでは、内部メモリは、限られたリソースである。複数の共有ライブラリが使用されるときには、該限られたリソース（例えば、内部メモリ）は、さらに限られたものとなる。
【０００４】
複数の共有ライブラリは、リエントラント(reentrant)である必要がある。該複数の共有ライブラリの設計は、複数の共有ライブラリが該コーリングプログラム(calling program)の該アドレッシング・コンテキストを使用するので、該リエントラント性(reentrancy)の要件を課す。これゆえ、複数の共有ライブラリは、それらが該コーリングプログラムから継承する様々な仮想アドレス空間で実行される。
【０００５】
複数の共有ライブラリの代替は、各アプリケーションにおいて正確な同じファンクションのフルコピーを宣言すること（例えば、該メモリマップや入力ソースファイルなどを宣言すること）である。いったん各アプリケーションにおいて宣言されると、該ファンクションは、オーバーラップされることができる、すなわち、メモリ内の該同じソースコードは、各コーリングアプリケーションによって使用されることができる。
【０００６】
各アプリケーションにおいて該同じファンクションを宣言し、それらをオーバーラップさせることには、メンテナンスや無駄なメモリなど、複数の欠点がある。例えば、任意の複数の変更（該ファンクションに新しいデータ変数を追加することなど）が複数のファンクションすべてにわたって確実に反映されるように注意しなければならないので、該メモリマップを維持することは、困難である。また、該ファンクションをもはや必要としない複数のアプリケーションから該ファンクションのメモリマップを除去することは、エラーを起こしやすい。さらに、各ファンクションは、それ自体の複数のデータ構造が該オーバーラップすることを可能にすることを要求しており、最終的には、余分なメモリは、各ファンクションに割り当てられる。
【０００７】
マルチプルなアプリケーションが、コールされたファンクションをリエントラントにする必要なしに該ファンクションに関するソースコードの同じコピーをより効率的に共有できれば、有益である。
【発明の概要】
【０００８】
システムおよび方法は、それ自体のコンテキストを有するサブプロセスを、マルチプルなプロセスの間で共有できるようにする。オペレーティングシステムは、いずれの複数のプロセスが該サブプロセスを呼び出したかを追跡して、プリエンプトされた(pre-empted)プロセスおよび呼び出された(invoked)任意のサブプロセスへの復帰を可能にすることができる。該サブプロセスは、単一のプロセス内で宣言されることのみが必要である。
【０００９】
該開示の一態様によれば、コンピュータ読み取り可能な記録媒体は、マルチプルなプロセスおよびサブプロセスを実行するオペレーティングシステムを格納する。該サブプロセスは、該プロセスによって呼び出されることが可能である。該サブプロセスは、それ自体のコンテキストを有する。
【００１０】
別の態様によれば、モバイルデバイスは、プログラムカウンタ(program counter)（ＰＣ）相対アドレッシングのためのハードウェアサポートを欠いたプロセッサを含む。該プロセッサは、複数のプロセスにわたって複数のサブプロセスを共有できるようにするオペレーティングシステムを実行する。各サブプロセスは、それ自体のコンテキストを有する。
【００１１】
さらに別の態様では、マルチプルなプロセスにわたってサブプロセスを共有する方法が提供される。該方法は、マルチプルなコーリングプロセスからサブプロセスを呼び出すことを含んでおり、該サブプロセスは、それ自体のコンテキストを有する。該方法は、また、該サブプロセスの該コンテキストに複数のハードウェアベースおよび長さレジスタをセットすることを含む。該方法は、各コーリングプロセスのコンテキストに複数のハードウェアベースおよび長さレジスタをセットすることをさらに含む。
【００１２】
以上では、以下の本願の発明の詳細な説明をよりよく理解できるように、該発明の複数の特徴および複数の技術的利点についてかなり大まかに概説した。該発明の諸請求項の主題を成す、該発明のさらなる複数の特徴および複数の利点について、以下で説明する。開示される構想および特定の実施形態を、本願の発明の同じ複数の目的を果たす他の複数の構造を修正または設計する基礎として容易に利用できることが、当業者には理解されるはずである。また、そのような等価の複数の構造は、添付の諸請求項に示される該発明から離れないことが、当業者には理解されるはずである。該発明の特徴と考えられている新規の複数の特徴は、その構成および操作の方法の両方に関して、さらなる複数の目的および複数の利点とともに、複数の添付図に関して考慮されたときに以下の説明からよりよく理解されることになる。ただし、該複数の図のそれぞれは、単なる図示および説明の目的で提供され、該本願の発明の諸限界の定義としては意図されていないことを、明確に理解すべきである。
【図面の簡単な説明】
【００１３】
【図１】図１は、該発明の一実施形態を有利に使用できる、例示的な無線通信システムを示すブロック図である。
【図２】図２は、共通の複数のサブプロセスを共有する複数のプロセスを示すベン図(Venn diagram)である。
【図３】図３は、マルチプルなプロセスにわたって複数のサブプロセスを共有する例示的な一方法を示すフロー図である。
【詳細な説明】
【００１４】
該本願の発明のより完全な理解のために、ここで、該添付の図面と併せて、以下の諸説明に言及する。
【００１５】
図１は、該発明の一実施形態を有利に使用できる、例示的な無線通信システム１００を示す。説明の目的で、図１は、３つの遠隔ユニット１２０、１３０および１５０と、２つの基地局１４０とを示す。典型的な無線通信システムは、さらに多くの遠隔ユニットおよび基地局を有しうることが認識されよう。遠隔ユニット１２０、１３０および１５０は、それぞれ、以下でさらに論じるように該発明の諸実施形態にしたがってリアルタイム・オペレーティングシステム(real time operating system)（ＲＴＯＳ）を実行する、改良されたマイクロプロセッサ１２５Ａ、１２５Ｂおよび１２５Ｃを含む。図１は、該複数の基地局１４０から該複数の遠隔ユニット１２０、１３０および１５０への複数のフォワードリンク信号１８０と、該複数の遠隔ユニット１２０、１３０および１５０から複数の基地局１４０への複数のリバースリンク信号１９０とを示す。
【００１６】
図１では、該遠隔ユニット１２０は、移動電話として示され、該遠隔ユニット１３０は、ポータブルコンピュータとして示され、該遠隔ユニット１５０は、無線ローカルループシステム内の固定されたロケーションの遠隔ユニットとして示される。例えば、該複数の遠隔ユニットは、複数の携帯電話、複数のハンドヘルドパーソナル通信システム(personal communication systems)（ＰＣＳ）ユニット、複数のパーソナルデータアシスタントなどの複数の携帯型データユニット、またはメータ読取機器などの複数の固定されたロケーションのデータユニットであってよい。図１は、該発明の諸教示による複数の遠隔ユニットを示すが、該発明は、これらの図示された例示的なユニットだけに限定されない。該発明は、マイクロプロセッサを含む任意のデバイスにおいて適切に使用されることができる。
【００１７】
該マイクロプロセッサ１２５Ａ、１２５Ｂおよび１２５Ｃは、該マイクロプロセッサ１２５Ａ、１２５Ｂおよび１２５Ｃに、ここにおいて開示される複数の方法またはコンピュータベースの複数のファンクションのうちのいずれか１つまたは複数を実施させるように実行できる、複数の命令のセットを含むことができる。
【００１８】
図１に示したように、該複数の遠隔ユニット１２０、１３０、１５０は、マイクロプロセッサ１２５Ａ、１２５Ｂおよび１２５Ｃ、例えば、中央処理ユニット（ＣＰＵ）、グラフィックス処理ユニット(graphics processing unit)（ＧＰＵ）、デジタル信号プロセッサ(digital signal processor)（ＤＳＰ）、またはそれぞれを含むことができる。さらに、該複数の遠隔ユニット１２０、１３０、１５０は、バスを通じて互いに通信できる、内部メモリおよび外部メモリを含むことができる。該複数の遠隔ユニット１２０、１３０、１５０は、液晶ディスプレイ(liquid crystal display)（ＬＣＤ）、有機発光ダイオード(organic light emitting diode)（ＯＬＥＤ）、平面パネルディスプレイ、ソリッドステートディスプレイ、陰極線管(cathode ray tube)（ＣＲＴ）など、ビデオディスプレイユニットをさらに含むことができる。さらに、該複数の遠隔ユニット１２０、１３０、１５０は、キーボードなどの入力デバイス、およびトラックボールなどのカーソル制御デバイスを含むことができる。該複数の遠隔ユニット１２０、１３０、１５０は、また、ディスクドライブユニット、スピーカや遠隔コントロールなどの信号発生デバイス、およびネットワークインターフェースデバイス、例えば無線トランシーバを含むことができる。
【００１９】
特定の一実施形態では、図１に描かれたように、該ディスクドライブユニットは、複数の命令の１つ以上のセット（例えばソフトウェア）をそれにおいて埋め込むことのできる、コンピュータ読み取り可能な記録媒体を含むことができる。さらに、該複数の命令は、ここに記載されるロジックまたは該複数の方法のうちの１つまたは複数を具体化することができる。特定の一実施形態では、該複数の命令は、該マイクロプロセッサ１２５Ａ、１２５Ｂ、１２５Ｃによる実行中、外部メモリおよび／または内部メモリ内に、完全に、または少なくとも部分的に、存在することができる。該メモリは、コンピュータ読み取り可能な記録媒体を含むことができる。
【００２０】
該複数のプロセッサ１２５Ａ、１２５Ｂ、１２５Ｃのうちのいずれかなど、マイクロプロセッサの利用可能な該メモリが、完全なプログラムを格納するには小さすぎるときには、該本願の開示のメモリ管理が使用される。一実施形態では、該マイクロプロセッサ１２５Ａ、１２５Ｂ、１２５Ｃは、デジタル信号プロセッサ(digital signal processor)（ＤＳＰ）である。
【００２１】
該本願の開示の一態様によれば、該メモリ管理は、複数のサブプロセスを複数のタスク（すなわち、複数のプロセス）にわたって共有できるようにする。単一のサブプロセスが単一のプロセス内で定義されるのみであっても、該単一のサブプロセスは、該システム内の他の複数のプロセスによって使用されることができる。
【００２２】
複数のプロセスは、マルチタスキング環境における、独立して実行する複数のプログラムである。複数のプロセスは、別個の複数のアプリケーション、または単一のアプリケーションのマルチプルなインスタンスを表すことができる。各プロセスは、それ自体の個々の仮想アドレス空間を有し、１つまたは複数のサブプロセスを含むことができる。
【００２３】
サブプロセスは、ユーザアプリケーションによって動的にロードされ実行されるプロセスユニットである。サブプロセスは、ファンクションコールのように実行するが、それ自体のコンテキストを有していて、それ自体のアドレス空間内で動作する。コンテキストは、それ自体のプライベートアドレス空間から成る。一般的に言えば、該プロセスレベルの機能性は、１つよりも多くのサブプロセスに分けられる。
【００２４】
いったんロードされると、サブプロセスは、そのコーリングプロセスが実行しているときに、内部メモリ内にある必要だけがある。サブプロセスが別のプロセスによってスワップアウト(swapped out)される場合、該カーネルは、それを、該コーリングプロセスが起動されるときにリロードする。
【００２５】
ある複数の場合には、サブプロセスは、該コーリングプロセスが決して見ない(never sees)複数のオペランドにアクセスする。該複数のオペランドが該サブプロセスによってアクセスのみされるときには、該複数のオペランドは、該サブプロセスのアドレス空間に格納される。
【００２６】
他の複数の場合には、サブプロセスは、該コーリングプロセスの複数のオペランドにアクセスする。該本願の開示の一態様によれば、これらのコーリングプロセスオペランドは、グローバルロケーションではなく、該コーリングプロセスに属するメモリロケーションのところに格納される。その結果、別のプロセスは、メモリ保護の理由から、該コーリングプロセスの複数のオペランドにアクセスすることができない。
【００２７】
各プロセスは、したがって、該共有されるサブプロセスによって使用される複数のオペランドのための、それ自体のアドレス空間を有する。このコーリングプロセスオペランドアドレス空間は、ベースレジスタアドレスとオフセットとによって定義される。言い換えれば、該サブプロセスは、複数の絶対アドレスを使用して複数のコーリングプロセスオペランドにアクセスしない。該本願の開示の一態様によれば、該オフセットは該複数のプロセスすべてにわたって同じである。該ベースアドレスがプロセスごとに異なる場合でも、該オフセットが各コーリングプロセスアドレス空間内で正確に同じである限り、呼び出された各サブプロセスは、それ自体の複数の値をその複数のコーリングプロセスオペランドに格納することができる。
【００２８】
該本願の開示の一態様によれば、該オフセットは該サブプロセス内で定義される。該ベースアドレスは、一実施形態では、マルチプルなベース長アドレス対から選択される複数のベース長アドレスを使用して、ビルド時にオペレーティングシステム・ローダによって決定される。例えば、異なる３つのベース長アドレス対は、該ハードウェアデザイン内に存在することができる。該ローダは、複数のプロセスに１つのベース長対を割り当てる。該ローダは、別のベース長対を複数のサブプロセスに割り当てて、該複数のサブプロセスがそれら自体のコンテキストをもつことを可能にする。
【００２９】
該ベースレジスタは、物理アドレス空間内の該プロセス（またはサブプロセス）の該開始を示す(indicates)。該プロセス（またはサブプロセス）内の該複数のアドレスは、その場合、該ベース値からの複数のオフセットである複数の仮想アドレスである。該長さは、該プロセス（またはサブプロセス）に関する最大のアクセス可能オフセットを決定するために、該マイクロプロセッサによって使用される。この空間が超えられた場合、該ハードウェアは、災害割込み(disaster interrupt)を生成する。
【００３０】
１つのプロセスに属する複数のサブプロセスすべてにわたって共有されるいずれのオペランドも、該プロセスレベルのメモリに格納される。該複数のオペランドがこのサブプロセスによってのみ要求される場合、それらは、該サブプロセス自体のベース長対によって制御される該アドレス空間に格納される。ビルド時に、該ローダは、該複数のサブプロセスデータオペランドに関連した該アドレス空間をあらかじめ割り当てて、異なる複数のプロセスのための異なるセットアップを回避する。
【００３１】
一実施形態では、サブプロセスは、リエントラントであることを要求されない。この実施形態においてさえ、該マイクロプロセッサは、プログラムカウンタ（ＰＣ）相対アドレッシングのためのハードウェアサポートをもつ必要がない。ただし、共有されるサブプロセスによって呼び出されるいずれの共通のファンクションも、リエントラントであるべきである。一実施形態では、様々なプロセスは、リエントラントであるように書かれたサブプロセスを同時にコールする。
【００３２】
該開示の一態様によれば、共有することは、共有される該サブプロセスを呼び出す該プロセスのプロセス制御ブロック内のデータに一部(in part)よって、可能になる。プロセス制御ブロックは、該プロセスのコンテキストを格納し、該プロセスによって使用される該ベース長レジスタ値を含む。該開示のこの態様によれば、該オペレーティングシステムは、このコーリングプロセスによって実行されるものとして、該コーリングプロセスのプロセス制御ブロック内で、呼び出されたサブプロセスをマークする。該オペレーティングシステムは、さらに、該サブプロセスのデータ構造内で該現在の親プロセスとして該コーリングプロセスをマークする。その結果として、該オペレーティングシステムが該プロセスコンテキストからスイッチアウトし(switches out)、別のプロセスを実行し、該第１のプロセスに復帰するときにはいつでも、該オペレーティングシステムは、いずれの特定のサブプロセスが実行していたか知っている。該プリエンプトされたサブプロセスへの復帰は、起こることができる。他の実施形態では、該オペレーティングシステムは、特定のサブプロセスがいつアクティブになったかを示すグローバルデータ構造を含む。マルチプルなアクティブサブプロセスは、このグローバルデータ構造内で示されることができる。
【００３３】
上述のように、マルチプルなベース長レジスタ対は存在しており、該対のうちの１つは該サブプロセス・コンテキストに使用され、該対のうちの１つは該コーリングプロセス・コンテキストに使用される。該オペレーティングシステム・コンテキストが、該サブプロセスからスイッチアウトし、後で該サブプロセス・コンテキストに復帰することを望む場合、該オペレーティングシステムは、該親プロセス・コンテキストにいずれの複数のベース長値を使用すべきかを知っているべきである。サブプロセス関連データ構造においては、該オペレーティングシステムは、該現在の親プロセスの表示(indication)を動的に格納し、該コーリングプロセスのプロセス制御ブロックは、該呼び出されたサブプロセスの表示を格納する。したがって、コンテキストがプリエンプトされたプロセスにスイッチバック(switching back)している場合、該オペレーティングシステムは、該親プロセス・コンテキストに関していずれの複数の値をセットすべきか知っている。
【００３４】
複数のタスクにわたって複数のサブプロセスを共有することが起こることになっていない場合、ビルド時に、オペレーティングシステムは、あらゆるプロセスについて、その複数の子サブプロセスが何であるかを知っている。例えば、該オペレーティングシステム内でサポートされた合計１５５個のサブプロセスと、コンパイル時に５つのサブプロセスを有するように宣言されただけの１つのプロセスとが、存在すると仮定する。この場合、該オペレーティングシステムは、該残りの１５０個のサブプロセスを追跡する必要はなく、該５個だけは、追跡されなければならない。該本願の開示に記載される、複数のタスクにわたって複数のサブプロセスを該共有することによれば、あらゆるプロセスは、１５５個のサブプロセスすべてに潜在的にアクセスすることができる。したがって、ストレージ（例えばビットマスク）は、このプロセスによっていずれのサブプロセスが現在実行されているかを示すために、該プロセス制御ブロック内に設けられる。
【００３５】
図２を参照して、ここで、複数のタスクにわたってサブプロセスを共有する一例について説明する。複数のプロセスＰ０およびＰ１は、描かれる。複数のサブプロセスＳＰ１は、また、描かれており、プロセスＰ０またはＰ１のいずれともインターセクト(intersect)しない、それ自体のコンテキスト（ボックスＳＰ１）内のそのプライベートコードおよびデータを有する。この例では、サブプロセスＳＰ１は、プロセスＰ０内で宣言された。プロセスＰ１は、サブプロセスＳＰ１を呼び出す。該楕円２１０は、該サブプロセスＳＰ１へのダイナミックコールを示す。したがって、サブプロセスＳＰ１は、それ自体のコンテキスト（ボックスＳＰ１）内にそのプライベートコードおよびデータを有し、そしてまた、プロセスＰ１の該ドメイン内にある、該コーリングプロセスＰ１の該コードおよびデータ２００へのアクセスを有する。
【００３６】
該本願の開示によれば、複数のプロセスＰ１の該プロセス制御ブロックでは、該呼び出されたサブプロセスＳＰ１は、実行中として示される。さらに、サブプロセスＳＰ１のデータ構造内では、プロセスＰ１は、該親プロセスとして示される。グローバルデータ構造は、また、該サブプロセスＳＰ１が呼び出されたことを示すためにアップデートされる。
【００３７】
この例では、該サブプロセスＳＰ１は、プロセスＰ１の該コンテキスト内のオフセットに加えて、ベースアドレスにおける複数のコーリングプロセスオペランドを参照する。該ベースアドレスは、該オペレーティングシステムによって割り当てられる。該オフセットは、各サブプロセス内で定義され、複数のプロセスすべてにわたって固定される。より具体的には、該サブプロセスがメモリ内にロードされるときには、固定された複数のベースアドレスは、また、ロードされ、そして、該複数のオフセットが各コンテキストについて同じままであることを可能にしながら、各プロセス内の該複数のコーリングプロセスオペランドについて異なる複数のメモリロケーションを保証するために該オペレーティングシステムによって定義される。
【００３８】
ここで図３を参照して、例示的なロジックフローについてここで説明する。
【００３９】
該諸図には示されていないが、最初に、サブプロセスは、単一のプロセス内で宣言される。プロセスブロック３０において、プロセスは、共有されるサブプロセスを呼び出す。該呼び出すプロセスは、該サブプロセスがそこで宣言された該プロセスである必要はない。マルチプルな異なるプロセスは、各サブプロセスをコールすることができる。
【００４０】
プロセスブロック３１において、該コーリングプロセスの該プロセス制御ブロックは、いずれのサブプロセスがコールされたかを示すためにアップデートされる。プロセスブロック３２において、該コーリングプロセスは、該サブプロセスのデータ構造内の該呼び出されたサブプロセスの該親プロセスとして指定される。一実施形態では、グローバルオペランドは、また、いずれの親プロセスが該サブプロセスを呼び出したかの表示を格納する。
【００４１】
プロセスブロック３３において、複数のハードウェアベースおよび長さレジスタは、サブプロセス・コンテキストにセットされる。このアドレス空間は、該呼び出されたサブプロセスによって排他的に使用される複数のオペランドに利用可能である。該マーキングすることは、該サブプロセス・コンテキストにいずれの複数のベース／長さレジスタ値を使用すべきかを、該オペレーティングシステムが決定できるようにする。
【００４２】
プロセスブロック３４において、複数のハードウェアベースおよび長さレジスタは、コーリングプロセスのコンテキストにセットされる。このアドレス空間は、該コーリングプロセスと該呼び出されたサブプロセスとの両方によって使用される複数のオペランドに利用可能である。該マーキングすることは、該プロセス・コンテキストにいずれの複数のベース／長さレジスタ値を使用すべきかを、該オペレーティングシステムが決定できるようにする。一実施形態では、該アドレス空間は、ベースアドレスと固定されたオフセットとによって定義される。該ベースアドレスは、コーリングプロセスごとに異なることができるが、該固定されたオフセットは、各コーリングプロセスについて同じままである。最後に、プロセスブロック３５において、該オペレーティングシステムは、該共有されるサブプロセスにジャンプする。
【００４３】
該本願の開示の結果として、マルチプルなプロセスにわたって複数のサブプロセスを共有することを達成することができる。該共有することは、プロセスレベルの変数データの適切なアドレス制御、および、いずれの複数のプロセスがいずれの複数のサブプロセスを呼び出したかを追跡することによって、可能になる。
【００４４】
該本願の発明およびその複数の利点を詳細に記載したが、該添付の諸請求項によって定義される該発明の該精神および範囲から離れることなく様々な諸変更(changes)、諸置換(substitutions)および諸改変(alterations)をここにおいて行うことができることを理解すべきである。例えば、該議論においては読出し操作を使用したが、該発明が複数の書込み操作にも等しく当てはまることが想定される。さらに、該本願の該範囲は、該明細書に記載されるプロセス、機械、製品(manufacture)、組成物(composition of matter)、諸手段、諸方法および諸ステップの該特定の諸実施形態に限定されることを意図されていない。ここにおいて記載される対応する諸実施形態と実質的に同じ機能を果たす、または実質的に同じ結果を達成する、現在存在する、または後で開発されることになる、諸プロセス、諸機械、諸製品、諸組成物、諸手段、諸方法、または諸ステップを、該本願の発明にしたがって利用できることを、当業者は、該本願の発明の該開示から容易に理解するであろう。したがって、該添付の諸請求項は、それらの範囲内に、そのような諸プロセス、諸機械、諸製品、諸組成物、諸手段、諸方法または諸ステップを含むことが意図されている。
【００４５】
以下に、本願の出願当初請求項に記載された発明を付記する。
【００４６】
［１］
複数のプロセスにわたって複数のサブプロセスを共有することを可能にするコンピュータプログラムを格納するコンピュータ読み取り可能な媒体、該媒体は、下記を具備する：
複数のプロセスとサブプロセスとを実行するオペレーティングシステム・コードセグメント、該サブプロセスは該複数のプロセスによって共有されることが可能であり、該サブプロセスはそれ自体のコンテキストを有する。
【００４７】
［２］
各プロセスについてプロセス制御ブロックをさらに具備しており、該プロセス制御ブロックは該それぞれのプロセスによっていったん呼び出された該サブプロセスの表示を格納する、上記［１］に記載の媒体。
【００４８】
［３］
いずれの複数のプロセスが該サブプロセスを呼び出したかの表示を格納するグローバルデータ構造をさらに具備する、上記［２］に記載の媒体。
【００４９】
［４］
該サブプロセスは複数のコーリングプロセスオペランドのためのアドレスオフセットを格納しており、該アドレスオフセットは、該複数のコーリングプロセスオペランドに関してコーリングプロセス・コンテキスト内にアドレス空間を定義するために、ベースアドレスに追加される、上記［１］に記載の媒体。
【００５０】
［５］
該サブプロセスは非リエントラントである、上記［１］に記載の媒体。
【００５１】
［６］
該サブプロセスは単一のプロセス内で宣言されるのみである、上記［１］に記載の媒体。
【００５２】
［７］
該呼び出されたサブプロセスの親プロセスとして該コーリングプロセスをセットする表示を格納するサブプロセス関連データ構造をさらに具備する、上記［１］に記載の媒体。
【００５３】
［８］
下記を具備するモバイルデバイス：
プログラムカウンタ（ＰＣ）相対アドレッシングのためのハードウェアサポートを欠いたプロセッサ、該プロセッサは複数のプロセスにわたって複数のサブプロセスを共有することを可能にするオペレーティングシステムを実行し、各サブプロセスはそれ自体のコンテキストを有する。
【００５４】
［９］
該プロセッサはデジタル信号プロセッサ（ＤＳＰ）を具備する、上記［８］に記載のモバイルデバイス。
【００５５】
［１０］
該オペレーティングシステムはリアルタイム・オペレーティングシステムを具備する、上記［８］に記載のモバイルデバイス。
【００５６】
［１１］
該複数のサブプロセスは非リエントラントである、上記［８］に記載のモバイルデバイス。
【００５７】
［１２］
該オペレーティングシステムは該共有することを可能にする複数のデータ構造を具備しており、該複数のデータ構造のうちの少なくとも１つは呼び出されたサブプロセスをいずれのプロセスがコールしたかの表示を格納する、上記［８］に記載のモバイルデバイス。
【００５８】
［１３］
複数のプロセスにわたってサブプロセスを共有する方法、該方法は、下記を具備する：
複数のコーリングプロセスからサブプロセスを呼び出すこと、該サブプロセスはそれ自体のコンテキストを有する、
該サブプロセスの該コンテキストに複数のハードウェアベースおよび長さレジスタをセットすること、
及び、各コーリングプロセスのコンテキストに複数のハードウェアベースおよび長さレジスタをセットすること。
【００５９】
［１４］
第１のプロセス内でのみ該サブプロセスを宣言することをさらに具備する、上記［１３］に記載の方法。
【００６０】
［１５］
ベースアドレスと固定されたオフセットとを使用して、各コーリングプロセスの該コンテキスト内の該複数のオペランドにアクセスすることをさらに具備する、上記［１３］に記載の方法。
【００６１】
［１６］
該サブプロセスが呼び出されたことを示すために各コーリングプロセスのプロセス制御ブロックをアップデートすることをさらに具備する、上記［１３］に記載の方法。
【００６２】
［１７］
該コーリングプロセスが該サブプロセスの親であることを示すためにグローバルデータ構造をアップデートすることをさらに具備する、上記［１６］に記載の方法。
【００６３】
［１８］
該コーリングプロセスを該呼び出されたサブプロセスの親として示すためにサブプロセス関連データ構造をアップデートすることをさらに具備する、上記［１６］に記載の方法。
【００６４】
［１９］
該サブプロセスをプリエンプトすることと、
該サブプロセスの該親を決定することに一部よって、該サブプロセスに復帰することと、をさらに具備する、上記［１８］に記載の方法。
【００６５】
［２０］
該サブプロセスをプリエンプトすることは、内部メモリ中の該サブプロセスの少なくとも一部分をスワップアウトさせることをさらに具備する、上記［１９］に記載の方法。
【図１】
0005678133.tif 000002
【図２】
0005678133.tif 000003
【図３】
0005678133.tif 000004