(57)【特許請求の範囲】
【請求項１】
オペレーティングシステムが協調型マルチタスキングサブシステムと、割り込み型マルチタスキングシステムとを有し、前記オペレーティングシステムの割り込み型マルチタスキングサブシステムのアプリケーションプログラミングインターフェイスルーチンに対するコールを処理するためのコンピュータシステムにおける方法であって、
前記オペレーティングシステムの前記割り込み型マルチタスキングサブシステムにおいて実行されるアプリケーションによる前記アプリケーションプログラミングインターフェイスルーチンに対するコールを受け取ることと、
前記ルーチンが前記協調型マルチタスキングサブシステムにおいて実装されていることを判定することと、
前記受け取るステップおよび前記判定するステップに応答して、前記コールをサンクすることであって、
前記割り込み型マルチタスキングサブシステムにおける前記アプリケーションプログラミングインターフェイスルーチンに対する前記コールを、前記協調型マルチタスキングサブシステムにおける前記アプリケーションプログラミングインターフェイスルーチンの前記実装に対するコールに変換することと、
前記協調型マルチタスキングサブシステムにおけるすべてのアプリケーションプログラミングインターフェイスルーチン実装の呼び出しを規制する同期メカニズムの所有権を獲得することと、
前記同期メカニズムの所有権が獲得された後にのみ、前記変換されたコールを用いて前記協調型マルチタスキングサブシステムにおける前記アプリケーションプログラミングインターフェイスルーチンの前記実装をコールすることと
によって前記コールをサンクすることと
を備えることを特徴とする方法。
【請求項２】
前記割り込み型マルチタスキングサブシステムにおいて実行される前記アプリケーションは、前記同期メカニズムの所有権を直接的に要求するための機能を有しないことを特徴とする請求項１に記載の方法。
【請求項３】
前記サンクするステップは、前記オペレーティングシステムのサンクレヤーによって行われ、前記方法は、
前記オペレーティングシステムの前記割り込み型マルチタスキングサブシステムにおいて実行される第２のアプリケーションによる前記アプリケーションプログラミングインターフェイスルーチンに対する第２のコールを受け取ることと、
前記第２のコールを受け取るステップに応答して、前記サンクレヤーの制御下で前記第２のコールをサンクすることと
をさらに備えることを特徴とする請求項１に記載の方法。
【請求項４】
前記協調型マルチタスキングサブシステムにおける前記アプリケーションプログラミングインターフェイスルーチンの前記実装は、非リエントラントであることを特徴とする請求項１に記載の方法。
【請求項５】
前記コールするステップは、前記協調型マルチタスキングサブシステムにおける前記アプリケーションプログラミングインターフェイスルーチンの前記実装がリエントラント的であるか非リエントラント的であるかに拘らず前記獲得するステップの完了を条件とすることを特徴とする請求項１に記載の方法。
【請求項６】
オペレーティングシステムが協調型マルチタスキングサブシステムと、割り込み型マルチタスキングシステムとを有し、前記オペレーティングシステムの割り込み型マルチタスキングサブシステムのアプリケーションプログラミングインターフェイスルーチンに対するコールをコンピュータシステムに処理させるコンテンツを含むコンピュータ可読媒体を有するコンピュータシステムであって、
前記オペレーティングシステムの前記割り込み型マルチタスキングサブシステムにおいて実行されるアプリケーションによる前記アプリケーションプログラミングインターフェイスルーチンに対するコールを受け取る手段と、
前記ルーチンが前記協調型マルチタスキングサブシステムにおいて実装されていることを判定する手段と、
前記受け取るステップおよび前記判定するステップに応答して、前記コールをサンクする手段であって、
前記割り込み型マルチタスキングサブシステムにおける前記アプリケーションプログラミングインターフェイスルーチンに対する前記コールを、前記協調型マルチタスキングサブシステムにおける前記アプリケーションプログラミングインターフェイスルーチンの前記実装に対するコールに変換することと、
前記協調型マルチタスキングサブシステムにおけるすべてのアプリケーションプログラミングインターフェイスルーチン実装の呼び出しを規制する同期メカニズムの所有権を獲得することと、
前記同期メカニズムの所有権が獲得された後にのみ、前記変換されたコールを用いて前記協調型マルチタスキングサブシステムにおける前記アプリケーションプログラミングインターフェイスルーチンの前記実装をコールすることと
によって前記コールをサンクする手段と
を備えたことを特徴とするコンピュータシステム。
【請求項７】
前記割り込み型マルチタスキングサブシステムにおいて実行される前記アプリケーションは、前記同期メカニズムの所有権を直接的に要求するための機能を有しないことを特徴とする請求項６に記載のコンピュータシステム。
【請求項８】
前記サンクする手段は、前記オペレーティングシステムのサンクレヤーを備え、前記コンピュータ可読媒体の前記コンテンツは、
前記オペレーティングシステムの前記割り込み型マルチタスキングサブシステムにおいて実行される第２のアプリケーションによる前記アプリケーションプログラミングインターフェイスルーチンに対する第２のコールを受け取るステップと、
前記第２のコールを受け取るステップに応答して、前記サンクレヤーの制御下で前記第２のコールをサンクするステップと
をコンピュータシステムにさらに行わせることを特徴とする請求項６に記載のコンピュータシステム。
【請求項９】
前記協調型マルチタスキングサブシステムにおける前記アプリケーションプログラミングインターフェイスルーチンの前記実装は、非リエントラントであることを特徴とする請求項６に記載のコンピュータシステム。
【請求項１０】
前記協調型マルチタスキングサブシステムにおける前記アプリケーションプログラミングインターフェイスルーチンの前記実装がリエントラント的であるか非リエントラント的であるかに拘らず前記獲得するステップの完了を条件とすることを特徴とする請求項６に記載のコンピュータシステム。
【請求項１１】
オペレーティングシステムが協調型マルチタスキングサブシステムと、割り込み型マルチタスキングシステムとを有し、前記オペレーティングシステムの割り込み型マルチタスキングサブシステムのアプリケーションプログラミングインターフェイスルーチンに対するコールを処理するためのサンクレヤーをコンピュータシステムに実装させるコンピュータ可読媒体のコンテンツを有するコンピュータシステムであって、
前記オペレーティングシステムの前記割り込み型マルチタスキングサブシステムにおいて実行されるアプリケーションによる前記アプリケーションプログラミングインターフェイスルーチンに対するコールを受け取るコールレシーバーと、
前記割り込み型マルチタスキングサブシステムにおける前記アプリケーションプログラミングインターフェイスルーチンに対する前記コールを前記協調型マルチタスキングサブシステムにおける前記アプリケーションプログラミングインターフェイスルーチンの実装に対するコールに変換するコールコンバーターと、
前記協調型マルチタスキングサブシステムにおけるすべてのアプリケーションプログラミングインターフェイスルーチン実装の呼び出しを規制する同期メカニズムと、
前記同期メカニズムの所有権が獲得された後にのみ、前記変換されたコールを用いて前記協調型マルチタスキングサブシステムにおける前記アプリケーションプログラミングインターフェイスルーチンの前記実装をコールするコールイニシエーターと
を備えたことを特徴とするコンピュータシステム。
【請求項１２】
オペレーティングシステムが協調型マルチタスキングサブシステムと、割り込み型マルチタスキングシステムとを有し、前記オペレーティングシステムの割り込み型マルチタスキングサブシステムのアプリケーションプログラミングインターフェイスルーチンに対するコールをコンピュータシステムに処理させるコンテンツを含むコンピュータ可読媒体を有するコンピュータシステムであって、
前記オペレーティングシステムの前記割り込み型マルチタスキングサブシステムにおいて実行されるアプリケーションによる前記アプリケーションプログラミングインターフェイスルーチンに対するコールを受け取り、前記ルーチンが前記協調型マルチタスキングサブシステムにおいて実装されていることを判定するように適合されたコールレシーバーと、
前記コールレシーバーによって受け取られたコールが前記協調型マルチタスキングサブシステムに実装されていると判定される場合、
前記割り込み型マルチタスキングサブシステムにおける前記アプリケーションプログラミングインターフェイスルーチンに対する前記コールを前記協調型マルチタスキングサブシステムにおける前記アプリケーションプログラミングインターフェイスルーチンの前記実装に対するコールに変換することと、
前記協調型マルチタスキングサブシステムにおけるすべてのアプリケーションプログラミングインターフェイスルーチン実装の呼び出しを規制する同期メカニズムの所有権を獲得することと、
前記同期メカニズムの所有権が獲得された後にのみ、前記変換されたコールを用いて前記協調型マルチタスキングサブシステムにおける前記アプリケーションプログラミングインターフェイスルーチンの前記実装をコールすることと
によって前記コールをサンクするように適合されたサンクレヤーと
を備えたことを特徴とするコンピュータシステム。
【請求項１３】
前記コンピュータ可読媒体の前記コンテンツは、前記協調型マルチタスキングサブシステムにおける前記アプリケーションプログラミングインターフェイスルーチンの前記実装がリエントラント的であるか非リエントラント的であるかに拘らず前記協調型マルチタスキングサブシステムにおけるすべてのアプリケーションプログラミングインターフェイスルーチン実装の呼び出しを規制する同期メカニズムの所有権を完全に獲得することに応答して、前記変換されたコールを用いて前記協調型マルチタスキングサブシステムにおける前記アプリケーションプログラミングインターフェイスルーチンの前記実装を前記サンクレヤーにコールさせることを特徴とする請求項１２に記載のコンピュータシステム。
【発明の詳細な説明】
背景技術
１．発明の分野
本発明は、一般に、マルチタスクオペレーティングシステムに関し、特に、マルチタスクオペレーティングシステムの共用コード及びデータを保護するための方法及びシステムに関する。
２．関連技術の説明
多くのオペーレーティングシステムがマルチタスクを支持している。あるタスクは、独立したエンティティとして実行されるスタンド−アローン・アプリケーションプログラムすなわちサブプログラムである。
マルチタスクは、コンピュータのシステムのコンポーネントの効率を改良するために、一度にメモリ内に１以上のタスクを持つ、現在実行しているいずれかのタスクに切換えるコンピュータの能力である。
マルチタスクオペレーティングシステムは、共用コード及びデータを保護するためのメカニズムを提供する。共用コードは、１つ以上のタスクによって実行することができるコードであり、共用データは、１つ以上のタスクによってアクセスすることができるデータである。マルチタスクオペレーティングシステムによって提供されるメカニズムは、コード共用及びデータ共用に関係する問題を防止する。コード共用及びデータ共用の問題は、１つのタスクが共用コードが処理する共用コード及びあるいはデータを変更し、その共用コードあるいは共用データが変更されたのち他のタスクが開始しあるいは継続してその共用コードを使用する場合に、発生する。コードあるいはそのデータの変更の後、開始し、あるいは継続して実行されるタスクはそのコード及びデータに対する変更によって意外な結果を生じせしめる可能性がある。
マルチタスクオペレーティングシステムの１つのタイプは、非割り込み型、すなわち、協調型、マルチタスクオペレーティングシステムである。協調型マルチタスクオペレーティングシステムでは、コンピュータシステムが適正に機能するために、タスク間の協調が必要となる。そのようなオペレーティングシステムについて、第１のタスクがＣＰＵの制御に割りつけられると、他のスベテのタスクは、その第１のタスクがＣＰＵの制御を放棄するまで、ブロック（たとえば、ＣＰＵの制御が得られなくなる）される。したがって、共用コード及びデータは、そのようなオペレーティングシステムで本来的に保護される。特に、ＣＰＵの制御は、いったんタスクが割りつけられると、タスクから離れることはできないので、あるタスクが共用コードあるいはそのデータを変更し、他のタスクが、その共用コードあるいはそのデータが変更された後に他のタスクが開始し、あるいは、その共用コードの実行を継続することは不可能である。ＣＰＵの制御に割りつけられたタスクはそのタスクが共用コードの実行を完了するまでＣＰＵの制御を放棄しない。
他の形式のマルチタスクオペレーティングシステムは、割り込み型マルチタスクオペレーティングシステムである。協調型システムと異なり、割り込み型マルチタスクオペレーティングシステムは、コンピュータシステムが適正に機能するために、タスク間の協調は必要とならない。このようなオペレーティングシステムに関し、システムは、１つのタスクに対してＣＰＵの制御を割りつけ、その後特定の時間が経過するか、特定の事象が発生したときそのタスクから制御を引き上げる。したがって、共用コードと共用データは、そのようなオペレーティングシステムに、本来的に保護されているものではない。例えば、あるタスクは、オペレーティングシステムが当該タスクからＣＰＵの制御を引き上げるときに共用コードあるいはそのデータを変更することができる。この結果、共用コードあるいはそのデータが変更された後において、他のタスクがＣＰＵの制御に割りつけられ、その共用コードの実行を開始あるいは継続することができる。この結果、この状況によって、上記したコード共用及びデータ共用問題が生じる可能性がある。
発明の概要
本発明の１つの特徴は、共用コード及びデータを保護するための方法及びシステムを提供することであり、特に、マルチタスクオペレーティングシステムにおける共用システムコード及びデータを保護するための方法を及びシステムを提供することである。このオペレーティングシステムは、協調型サブシステムと割り込み型サブシステムとを備えている。協調型サブシステムは、共用システムコード及びデータを含んでいる。この方法及びシステムは、スレッドによって共用システムコード及びデータにアクセスするように制御するための同期メカニズムを備えている。同期メカニズムの所有権は、協調的に予定されたスレッドがが協調型サブシステムで実行することができるようになる前に要求され、かつ獲得されなければならない。さらに、同期メカニズムの所有権は、割り込み的に予定されたスレッドが協調型サブシステムにおける共用システムコードを実行することができるようになる前に、要求され、獲得されなければならない。同期メカニズムが既に所有されている場合には、所有権が解放されるまで要求スレッドはブロックされる。そうでなければ、要求スレッドは所有権を許可されることになる。他のいずれのスレッドも、あるスレッドが同期メカニズムを所有している間は、同期メカニズムの所有権を得ることができないので、協調型サブシステムにおける共用システムコード及びデータは保護される。
【図面の簡単な説明】
図１は、本発明の好ましい実施例が動作するコンピュータシステムのコンポーネントを図示するブロックダイヤグラムであり、
図２は、図１のオペレーティングシステムのコンポーネントをさらに詳細に図示したブロックダイヤグラムであり、
図３は、本発明の好ましい実施例にしたがって１６−ビット−スレッドがミューテックスの所有権を要求し、獲得し、そして解放するかを図示したハイ−レベルフローチャートであり、
図４及び図５は、本発明の好ましい実施例にしたがって３２−ビット−スレッドがミューテックスの所有権を要求し、獲得し、そして解放するかを図示したハイ−レベルフローチャートである。
好ましい実施例の詳細な説明
本発明の好ましい実施例は、共用コード及びデータ、特に、マルチタスクオペレーティングシステムにおける共用システムコード及びデータを保護する方法とシステムを提供するものである。
本発明の方法及びシステムは、マルチタスクオペレーティングシステムにおける共用システムコード及びデータを保護する同期メカニズムを備えている。オペレーティングシステムは、協調型サブシステム及び割り込み型サブシステムを備えている。協調型サブシステムは、共用システムコード及びデータを含んでいる。後述するように同期メカニズムの所有権は、協調的に予定されたスレッドが協調型サブシステムにおいて実行可能になる前に要求され、獲得されなければならない。さらに、同期メカニズムの所有権は、割り込み的に予定されたスレッドが協調型サブシステムにおいて共用システムコードを実行できるようになる前に要求され、獲得されなければならない。本発明の同期メカニズムは、協調的サブシステムにおける共用コード及びデータを、割り込み型サブシステムの割り込み可能性から保護することによって協調型サブシステム及び割り込み型サブシステムの両方を含むオペレーティングシステムにおける両立性を提供する。
内部において本発明の好ましい実施例が動作するコンピュータシステム１０が図１に図示されている。コンピュータシステム１０は、中央演算ユニット（ＣＰＵ）１２、主記憶装置１４、第２記憶装置１６及び入出力（Ｉ／Ｏ）装置１８を備えている。オペレーティングシステム２０及びアプリケーションプログラム２２は、第２記憶装置１６にストアされており、ＣＰＵ１２の実行のために主記憶装置１４にロードされる。アプリケーションプログラム２２のように、主記憶装置１４にロードされ、ＣＰＵ１２によって実行のために用意された、プログラムは、プロセスとよばれる。プロセスは、コード、データ及びプログラムに属する他のリソースを有する。プロセスにおける実行パスは、スレッドとよばれる。スレッドは、一連の実行命令、関係するＣＰＵレジスタ値、及びスタックを有する。プロセスは、少なくとも１つのスレッドを有する。マルチスレッデッドオペレーティングシステムでは、プロセスは、１つ以上のスレッドを持つことができる。スレッドは、ＣＰＵ１２の制御を受け入れるエンティティである。
オペレーティングシステム２０のコンポーネントは、図２に示されている。本発明の好ましい実施例では、オペレーティングシステム２０は、協調型マルチタスクオペレーティングサブシステム２４及び割り込み型マルチタスクサブシステム２６を備えている。さらに、協調型マルチタスクサブシステム２４は、１６−ビットシステム（以下１６−ビットサブシステムという）であり、割り込み型マルチタスサブシステム２６は３２−ビットシステム（以下３２−ビットサブシステムという）である。したがって、アプリケーションプログラム２２は、協調的に予定された１６−ビットアプリケーション２８と割り込み的に予定された３２−ビットアプリケーション３０の両方を備えている。オペレーティングシステム２０は、“マイクロソフトウインドウズ”バージョン３．１の改良バージョンであり、ワシントン州レッドモンドのマイクロソフトコーポレーションによって販売されているオペレーティングシステムである。ウインドウズ３．１は、協調型マルチタスクオペレーティングシステムである。本発明の好ましい実施例におけるオペレーティングシステム２０は、ウインドウズ３．１によって提供される協調型マルチタスクサブシステムに対する改良として、割り込み型マルチタスクサブシステムを提供するものである。このような改良バージョンは、早い時期の協調型システムに対して書かれたアプリケーションと、最近の割り込み型システムように書かれたアプリケーションとの両立を与えるものである。
本発明は、ウインドウズ３．１の改良バージョンに関して記載されたものであるが、当業者は、他のオペレーティングシステムが本発明を実施するのに使用できることを理解するであろう。ウインドウズ３．１の改良バージョンの選択は、単に例示的なものである。
１６−ビットサブシステム２４は、１６−ビット−アプリケーション２８が、オペレーティングシステム２０によって与えられたロー−レベルサービスを要求し、実行することができる１６−ビットアプリケーションプログラムインターフェース（ＡＰＩ）備えている。同時に、３２−ビットサブシステム２６は、３２−ビットアプリケーション３０が、オペレーティングシステム２０によって与えられたロー−レベルサービスを要求し、実行することができる３２−ビットＡＰＩを備えている。さらに、１６−ビットサブシステムは、１６−ビットアプリケーション２８の協調的スケジュールを処理することを担当する１６−ビットスケジューラー３２を備えるとともに、３２−ビットサブシステム２６は、３２−ビットアプリケーション３０の割り込み型スケジューリングを処理するのを担当するロー−レベルスケジューラー３４を備えている。そのような１６−ビットスケジューラーは、ワシントン州、レッドモンドのマイクロソフト・コーポレーションによって販売されているマイクロソフト・ウインドウズバージョン３．１、オペレーティングシステムによって与えられるものであり、そのようなローレベルスケジューラーはマイクロソフト・ウインドウズ  ＮＴオペレーティングシステムによって与えられるものである。
１６−ビットアプリケーション２８が１６−ビットＡＰＩファンクションをコールすると、そのコールは、１６−ビットサブシステム２４によって直接取り扱われる。しかし、３２−ビットアプリケーション３０が３２−ビットＡＰＩファンクションをコールした場合には、そのコールは、通常は、３２−ビットサブシステム２６によっては直接取り扱われない。むしろ、３２−ビットＡＰＩファンクションと同じ目的をもつ１６−ビットＡＰＩファンクションが存在する場合には、その３２−ビットＡＰＩファンクションに対するコールは、通常は、同等な１６−ビットＡＰＩファンクションに対するコールに変換され、１６−ビットサブシステム２４によって取り扱われる。しかし、３２−ビットＡＰＩファンクションと同じ目的をもつ１６−ビットＡＰＩファンクションが存在しない場合には、あるいは、３２−ビットＡＰＩファンクションが３２−ビットサブシステム２６によって効率的に処理することができるならば、その３２−ビットＡＰＩファンクションに対するコールは３２−ビットサブシステム２６によって直接処理される。３２−ビットＡＰＩファンクションに対するコールを同等な１６−ビットＡＰＩファンクションに対するコールに変換し、つぎに、１６−ビットＡＰＩファンクションの結果を３２−ビットフォーマットに再変換するプロセスは、“サンキング（ｔｈｕｎｋｉｎｇ）”として知られている。このプロセスは、３２−ビットサンク（ｔｈｕｎｋ）レヤー３６で発生するものであって、１６−ビットフォーマットに、及びこれからの変換を行なうコードである。このサンクレヤーはマイクロソフト・ウインドウズ  ＮＴオペレーティングシステムによって提供される。
１６−ビットＡＰＩと３２−ビットＡＰＩの両方が１連のダイナミック・リンク・ライブラリ（ＤＬＬ）として実行される。ＤＬＬは、さまざまなファンクションを実行する実行可能コードを含むライブラリモジュールである。各ファンクションについてのコードは、ＤＬＬ内にストアされている。アプリケーション・プログラムがＤＬＬ内のファンクションへのコールを含む場合には、ＤＬＬは、実行時においてそのアプリケーション・プログラムにダイナミックリンクされる。アプリケーション・プログラムは、そのファンクションがアプリケーション・プログラムのコードの一部であるかのようにＤＬＬ内におけるファンクションを使用するものである。
本発明のＡＰＩを形成するＤＬＬは、リエントラントではない。リエントラントであるコードは実行時中に修正不可能であり、幾つかのスレッドによって共用することができるように書かれている。あるスレッドがリエントラントコードを実行しており、かつ他のスレッドがその第１のスレッドの実行をインタラプトしているとき、第２のスレッドがなんらのコード共用あるいはデータ共用の問題なしに同じコードの実行を開始し、あるいは継続することができる。したがって、ＤＬＬがリエントラントであるならば、１つ以上のスレッドが単一のＤＬＬを使用するプロセス中に存在することとなる。ＤＬＬがリエントラントでない場合に生じる問題は、コードが変更可能であり、ＤＬＬにある同じコード及びデータがＤＬＬを使用するすべてのスレッドの中で共用されるということである。この結果、１つのスレッドが非リエントラントＤＬＬ中のコードを実行しており、他のスレッドが第１のスレッドの実行をインタラプトし、ＤＬＬ中の同じコードの実行を開始し、あるいは継続しようとしている場合には、コード共用あるいはデータ共用の問題が生じる可能性がある。本発明の１６−ビットＡＰＩを形成するＤＬＬは、非リエントラントであり、オペレーティングシステム２０が協調型１６−ビットサブシステム２４及び割り込み型３２−ビットサブシステム２６を備えているので、第１のスレッドが他の１６−ビットＡＰＩファンクションの実行を完了する前に、メカニズムは、第２のスレッドが１６−ビットＡＰＩファンクションを実行しないようにする必要がある。
１６−ビットＡＰＩ中の共用コード及びデータを保護するための、本発明によって提供される方法及びシステムは、ミューテックス（ｍｕｔｅｘ）の形態の同期メカニズムを備えている。当業者は、本発明が、他の同期メカニズム、例えば、クリティカル・セクションあるいはセマフォなどを同様に使用することができること理解するであろう。ミューテックスは、共用リソースの同時使用を防止するのに使用できるデータストラクチャである。この場合、共用リソースは、１６−ビットＡＰＩのコード及びデータである。スレッドが共用リソースの使用を望む場合には、スレッドは、そのミューテックスの所有権を要求する。もしミューテックスがすでに他のスレッドで所有されている場合には、要求スレッドは、所有権が解放されるまでブロックされる。そうでなければ、要求スレッドは、所有権が許容されるからである。本発明の好ましい実施例では、スレッドがミューテックスの所有権を要求し、獲得し、そして解放する時間と方法は、１６−ビットスレッドと３２−ビットスレッドとで異なる。
１６−ビットスレッドに対しては、ミューテックスの所有権は、１６−ビットスレッドがそのアプリケーションコードをコールイン（呼び込む）する前に要求され、獲得されなければならない。図３は、１６−ビットスレッドがミューテックスの所有権を要求し、獲得し、そして解放するように実行されるステップを示している。まず、１６−ビットアプリケーション２８がスタートすると、１６−ビットスレッドが作られ、１６−ビットスケジューラー３２にリンクされる（ステップＳ３８）。１６−ビットスレッドがそのアプリケーションコードにコールインする前に、１６−ビットスレッドが１６−ビットスケジューラー３２の中でミューテックスの所有権を要求する（ステップＳ４０）。ミューテックスがすでに所有されていた場合には（ステップＳ４２）、１６−ビットスレッドは、所有権が解放され、そのスレッドが実行の優先権を有するまでブロックされる（ステップＳ４４）。そうでなければ、１６−ビットスレッドは所有権を許されるからであり（ステップＳ４６）、そのアプリケーションコードをコールインして実行するからである（ステップＳ４８）。１６−ビットスレッドがＣＰＵ１２の１６−ビットスケジューラー３２に対する制御を放棄したとき、１６−ビットスレッドは、１６−ビットスケジューラー３２の内のミューテックスの所有権を解放する（ステップＳ５０）。１６−ビットスレッドがミューテックスを所有している間、１６−ビットスレッドは、１６−ビットＡＰＩ内のファンクションに対して多重コールを行なうことができる。１６−ビットスレッドがロックを所有している間、他のスレッドは、ミューテックスの所有権を獲得することができないので、１６−ビットＡＰＩ内のコードとデータは保護される。
３２−ビットスレッドについては、ミューテックスの所有権は（同等の３２−ビットＡＰＩファンクションへのコールからサンク（ｔｈｕｎｋ）された）１６−ビットＡＰＩファンクションへのコールが実行を始める前に要求され、獲得されなければならない。図４及び図５は、ミューテックスの所有権を要求し、獲得しそして解放するために３２−ビットスレッドがおこなうべきステップを集合的に図示したものである。まず、３２−ビットアプリケーション３０がスタートし、３２−ビットスレッドが作られロー−レベルスケジューラー３４（ステップＳ５２）にリンクされる。３２−ビットスレッドがＣＰＵ１２の制御に割りつけられると、３２−ビットスレッドがそのアプリケーションコードにコールインされ、実行される（ステップ５４）。実行中、３２−ビットスレッドがサンクしなければならない（すなわち、同等の１６−ビットＡＰＩファンクションへのコールに変換しなければならない）３２−ビットＡＰＩファンクションをコールしたときには（ステップ５６）、３２−ビットＡＰＩファンクションは、その３２−ビットサンクレヤー３６に制御を移行する（ステップ５８）。３２−ビットサンクレヤー３６は３２−ビットＡＰＩファンクションへのコールを同等な１６−ビットＡＰＩファンクションへのコールに変換し（ステップ６０）、３２−ビットスレッドは、３２−ビットサンクレヤー３６内のミューテックスの所有権を要求する（ステップ６２）。もし、ミューテックスがすでに所有されている場合には（ステップ６４）、３２−ビットスレッドは、所有権が解放され、スレッドが実行の優先権をもつまでブロツクされる（ステップ６６）。そうしなければ、３２−ビットスレッドは、所有権を許容され（ステップ６８）、同等の１６−ビットＡＰＩファンクションをコールすることになる（ステップ７０）。１６−ビットＡＰＩファンクションはそのコールを処理し、その結果を３２−ビットサンクレヤー３６に戻し、３２−ビットスレッドは、３２−ビットサンクレヤー３６内のミューテックスの所有権を解放する（ステップ７４）。最後に、３２−ビットサンクレヤー３６は、１６−ビットＡＰＩファンクションからの結果を３２−ビットフォーマットに再変換し、制御を３２−ビットスレッドに戻す（ステップ７６）。上記したように、３２−ビットスレッドがロックを所有しているあいだ他のスレッドは、ミューテックスの所有権を獲得することはできないので、１６−ビットＡＰＩのコードとデータは保護される。
上記の３２−ビットスレッドに関連する議論において、ミューテックスの所有権は、３２−ビットＡＰＩファンクションへのコールが同等の１６−ビットＡＰＩファンクションへのコールに変換された後要求され、１６−ビットＡＰＩファンクションからの結果が３２−ビットフォーマットに再変換される前に、解放される。当業者は、ミューテックスの所有権が、３２−ビットＡＰＩファンクションへのコールが同等の１６−ビットＡＰＩファンクションへのコールに変換される前に要求でき、１６−ビットＡＰＩファンクションからの結果が３２−ビットフォーマットに再変換される前に解放することもできることを理解するであろう。
当業者は、本発明が共用コード及びデータ、特に、マルチタスクオペレーティングシステムにおける共用システムコード及びデータにおけるを保護するための方法及びシステムを提供するものであることを理解するであろう。この方法及びシステムは、マルチタスクオペレーティングシステムの共用システムコード及びデータを保護する同期メカニズムを備えている。オペレーティングシステムは、協調型サブシステム及び割り込み型サブシステムを備えている。協調型サブシステムは、共用システムコード及びデータを備えている。同期メカニズムの所有権は、協調的に予定されたスレッドが協調型サブシステムにおいて実行することかできるようになる前に要求され、獲得されなければならない。さらに、同期メカニズムの所有権が、割り込み的に予定されたスレッドが、協調型サブシステムにおいて共用システムコードを実行できるようになる前に、要求され、獲得されなければならない。本発明の同期メカニズムは、割り込み型サブシステムの割り込み的な能力から協調型サブシステムにおける共用コード及びデータを保護することによって協調型サブシステム及び割り込み型サブシステムの両方を備えたオペレーティングシステムの両立性を与えるものでる。本発明は、実施例に関連して図示され、記載されているが、本明細書を読み、理解することによって当業者は、同等な修正、変更を行なうであろう。本発明は、そのようなすべての同等な修正、変更を包含するものであり、以下の特許請求の範囲によってのみ限定されるものである。
【図１】
0003837453.tif 000002
【図２】
0003837453.tif 000003
【図３】
0003837453.tif 000004
【図４】
0003837453.tif 000005
【図５】
0003837453.tif 000006