(57)【特許請求の範囲】
【請求項１】
複数のオブジェクト及び複数の手順を記憶するためのメモリを備え、各々の記憶されたオブジェクトは、ロック及び非ロックより成る組から選択されたロック状態を有し、各々の記憶されたオブジェクトは、データ構造に対するデータポインタを含み；更に、指定の非ロックオブジェクトのロック状態をロックへと切り換えるための命令を含み、前記指定の非ロックオブジェクトに対するローカルなオブジェクトロッキング手順を形成するためのグローバルなオブジェクトロッキング手順を備え、各々のローカルなオブジェクトロッキング手順は、ロックデータを記憶するためのロックデータサブアレーと、指定の非ロックオブジェクトの記憶されたロックデータを更新するための命令とを含み；更に、予め定められた解除基準を満足するときに、指定のオブジェクトのローカルオブジェクトロッキング手順を解除するためのロックデータクリーンアップ手順を備えたコンピュータシステムにおいて、前記システムは、前記グローバルなオブジェクトロッキング手順を使用して、ロックデータサブアレーをもたないオブジェクトに対するロック要求にサービスし、前記ローカルオブジェクトロッキング手順を使用して、ロックデータサブアレーをもつオブジェクトに対するロック要求にサービスし、かつ前記ロックデータクリーンアップ手順を使用して、指定のオブジェクトのローカルオブジェクトロッキング手順を解除することを特徴とするコンピュータシステム。
【請求項２】
最近ロックのロック状態をもたない各々の記憶されたオブジェクトは、前記グローバルなオブジェクトロッキング手順を含む前記手順のサブセットに対するメソドポインタを含み、最近ロックのロック状態をもつ各々の記憶されたオブジェクトは、前記ローカルなオブジェクトロッキング手順を含む前記手順のサブセットに対するメソドポインタを含み、前記グローバルなオブジェクトロッキング手順は、前記ローカルなオブジェクトロッキング手順を含む前記手順の前記サブセットを指すように前記指定のオブジェクトのメソドポインタを更新する命令を含む請求項１に記載のコンピュータシステム。
【請求項３】
ロックのロック状態を決してもっていない各々の記憶されたオブジェクトは、前記グローバルなオブジェクトロッキング手順を含む前記手順のサブセットに対するメソドポインタを含み、ロックのロック状態をもつ各々の記憶されたオブジェクトは、前記ローカルなオブジェクトロッキング手順を含む前記手順のサブセットに対するメソドポインタを含み、前記グローバルなオブジェクトロッキング手順は、前記ローカルなオブジェクトロッキング手順を含む前記手順の前記サブセットを指すように前記指定のオブジェクトのメソドポインタを更新する命令を含み、前記ロックデータクリーンアップ手順は、前記グローバルなオブジェクトロッキング手順を含む前記手順の前記サブセットを指すように前記指定のオブジェクトのメソドポインタを変更する命令を含む請求項１に記載のコンピュータシステム。
【請求項４】
前記メモリは、更に、１組のオブジェクトクラスを記憶し、各オブジェクトクラスは、そのオブジェクトクラスに関連した１組のメソドをレファレンスするポインタと、前記グローバルなオブジェクトロッキング手順をレファレンスするポインタとを含む一次仮想ファンクションテーブル（ＶＦＴ）を含み、最近ロックのロック状態をもたない前記記憶されたオブジェクトの各々は、前記オブジェクトクラスの対応する１つについて前記一次ＶＦＴをレファレンスするメソドポインタを含み、ロックのロック状態をもつ前記記憶されたオブジェクトの各々に対し、前記ローカルなオブジェクトロッキング手順をレファレンスするポインタを含むローカルな仮想ファンクションテーブル（ＶＦＴ）があり、前記グローバルなオブジェクトロッキング手順は、指定のオブジェクトに対し前記ローカルＶＦＴをレファレンスするように前記指定のオブジェクトのメソドポインタを更新する命令を含む請求項１に記載のコンピュータシステム。
【請求項５】
前記メモリは、更に、１組のオブジェクトクラスを記憶し、各オブジェクトクラスは、そのオブジェクトクラスに関連した１組のメソドをレファレンスするポインタと、前記グローバルなオブジェクトロッキング手順をレファレンスするポインタとを含む一次仮想ファンクションテーブル（ＶＦＴ）を含み、ロックのロック状態を決してもっていない前記記憶されたオブジェクトの各々は、前記オブジェクトクラスの対応する１つについて前記一次ＶＦＴをレファレンスするメソドポインタを含み、ロックのロック状態をもつ前記記憶されたオブジェクトの各々に対し、前記ローカルなオブジェクトロッキング手順をレファレンスするポインタを含むローカルな仮想ファンクションテーブル（ＶＦＴ）があり、前記グローバルなオブジェクトロッキング手順は、指定のオブジェクトに対し前記ローカルＶＦＴをレファレンスするように前記指定のオブジェクトのメソドポインタを更新する命令を含み、前記ロックデータクリーンアップ手順は、前記指定のオブジェクトに対応するオブジェクトクラスに対し前記一次ＶＦＴをレファレンスするように前記指定のオブジェクトのメソドポインタを変更する命令を含む請求項１に記載のコンピュータシステム。
【請求項６】
複数のオブジェクト及び複数の手順をコンピュータメモリに記憶し、各々の記憶されたオブジェクトは、ロック及び非ロックより成る組から選択されたロック状態を有し、各々の記憶されたオブジェクトは、データ構造に対するデータポインタを含み；決してロックされていない指定のオブジェクトに対するロック要求にサービスするときに、指定のオブジェクトのロック状態をロックへと切り換える命令を含むグローバルなオブジェクトロッキング手順を実行して、前記指定のオブジェクトに対するローカルなオブジェクトロッキング手順を形成し、各々のローカルなオブジェクトロッキング手順は、ロックデータを記憶するためのロックデータサブアレーと、前記指定のオブジェクトの記憶されたロックデータを更新するための命令とを含み；更に、予め定められた解除基準を満足するときに、ロックデータクリーンアップ手順を実行して、指定のオブジェクトのローカルオブジェクトロッキング手順を解除する、という段階を備えたことを特徴とするコンピュータシステムを操作する方法。
【請求項７】
ロックのロック状態を最近もたない各々の記憶されたオブジェクトに、前記グローバルなオブジェクトのロッキング手順を含む前記手順のサブセットに対するメソドポインタを組み合わせ、ロックのロック状態を最近もつ各々の記憶されたオブジェクトに、前記ローカルなオブジェクトのロッキング手順を含む前記手順のサブセットに対するメソドポインタを組み合わせ、グローバルなオブジェクトのロッキング手順を実行して、非ロックオブジェクトに対するロック要求にサービスするときに、前記ローカルなオブジェクトのロッキング手順を含む前記手順の前記サブセットを指すように前記指定のオブジェクトのメソドポインタを更新する請求項６に記載の方法。
【請求項８】
ロックのロック状態を決してもっていない各々の記憶されたオブジェクトに、前記グローバルなオブジェクトロッキング手順を含む前記手順のサブセットに対するメソドポインタを組み合わせ、ロックのロック状態をもつ各々の記憶されたオブジェクトに、前記ローカルなオブジェクトロッキング手順を含む前記手順のサブセットに対するメソドポインタを組み合わせ、グローバルなオブジェクトロッキング手順を実行して、非ロックオブジェクトに対するロック要求にサービスするときに、前記ローカルなオブジェクトロッキング手順を含む前記手順の前記サブセットを指すように前記指定のオブジェクトのメソドポインタを更新し、前記ロックデータクリーンアップ手順を実行するときに、前記グローバルなオブジェクトロッキング手順を含む前記手順の前記サブセットを指すように前記指定のオブジェクトのメソドポインタを変更する請求項６に記載の方法。
【請求項９】
前記コンピュータメモリに１組のオブジェクトクラスを記憶し、各々のオブジェクトクラスは、そのオブジェクトクラスに関連した１組のメソドをレファレンスするポインタと、前記グローバルなオブジェクトロッキング手順をレファレンスするポインタとを含む一次仮想ファンクションテーブル（ＶＦＴ）を含み、ロックのロック状態を最近もたない前記記憶されたオブジェクトの各々に、前記オブジェクトクラスの対応する１つについて前記一次ＶＦＴをレファレンスするメソドポインタを組み合わせ、ロックのロック状態をもつ前記記憶されたオブジェクトの各々に対して、前記ローカルなオブジェクトロッキング手順をレファレンスするポインタを含むローカルな仮想ファンクションテーブル（ＶＦＴ）を前記コンピュータメモリに記憶し、前記グローバルなオブジェクトロッキング手順を実行するときに、指定のオブジェクトに対し前記ローカルＶＦＴをレファレンスするように前記指定のオブジェクトのメソドポインタを更新する請求項６に記載の方法。
【請求項１０】
前記コンピュータメモリに１組のオブジェクトクラスを記憶し、各々のオブジェクトクラスは、そのオブジェクトクラスに関連した１組のメソドをレファレンスするポインタと、前記グローバルなオブジェクトロッキング手順をレファレンスするポインタとを含んだ一次仮想ファンクションテーブル（ＶＦＴ）を含み、ロックのロック状態を決してもっていない前記記憶されたオブジェクトの各々に、前記オブジェクトクラスの対応する１つについて前記一次ＶＦＴをレファレンスするメソドポインタを組み合わせ、ロックのロック状態をもつ前記記憶されたオブジェクトの各々に対して、前記ローカルなオブジェクトロッキング手順をレファレンスするポインタを含むローカルな仮想ファンクションテーブル（ＶＦＴ）を前記コンピュータメモリに記憶し、前記グローバルなオブジェクトロッキング手順を実行するときに、指定のオブジェクトに対し前記ローカルＶＦＴをレファレンスするように前記指定のオブジェクトのメソドポインタを更新し、前記ロックデータクリーンアップ手順を実行するときに、指定のオブジェクトに対応するオブジェクトクラスに対し前記一次ＶＦＴをレファレンスするように前記指定のオブジェクトのメソドポインタを変更する請求項６に記載の方法。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
本発明は、一般に、２つ以上の実行スレッドをオブジェクトに対して同期することのできるオブジェクト指向のコンピュータシステムに係り、より詳細には、ほとんど又は全てのオブジェクトがロック可能であるが、実際には比較的僅かなオブジェクトが常にロックされるシステムにおいてロックデータ構造を効率的に割り当てるためのシステム及び方法に係る。
【０００２】
【従来の技術】
マイクロプロセッサコンピュータシステムにおいては、そのマイクロプロセッサコンピュータシステムを形成するプロセッサ上で並列に実行されるスレッドによりソフトウェアプログラムを実行することができる。従って、同時に実行されるスレッドがプログラムを同時に実行できるので、異なるプロセッサ上でプログラムを並列に実行することができる。更に、プログラムを構成プロセスに分割できる場合には、このようなコンピュータシステムは、プログラムを非常に迅速に実行することができる。というのは、同時に実行されるスレッドが構成プロセスを並列に実行できるからである。単一プロセッサのマルチタスクコンピュータシステムも、マルチタスクオペレーティングシステム設計の当業者に良く知られた種々のリソーススケジュールメカニズムを使用することにより多数の実行スレッドを実質上同時に実行することができる。
【０００３】
このようなコンピュータシステムで実行されるプログラムは、オブジェクト指向のものであることが多い。換言すれば、プログラムを実行するスレッドは、特定のファンクションを実行するためのオブジェクトの方法を呼び出す。しかしながら、あるオブジェクトのある方法は、コンピュータシステムにおけるハードウェア又はソフトウェアの制約により一度に１つしか実行できない。例えば、あるオブジェクトは、一度に１つのスレッドによる１つのアクセスしか処理できないＩ／Ｏ装置のような共用コンピュータリソースへのアクセスを必要とする。従って、同時に実行されるスレッドがこのようなオブジェクトを同時にシークすることがあるので、オブジェクトを一度に１つのスレッドのみと同期させ、そのスレッドのみがオブジェクトを専用に使用する（即ち、一度に１つのスレッドのみがオブジェクトのロックを所有できる）ようにしなければならない。
【０００４】
【発明が解決しようとする課題】
これまで、オブジェクトをスレッドと同期するために種々の解決策が使用されている。これらは、ミューテックス、条件変数、及びモニタのような同期構造の使用を含む。モニタを使用するときには、各モニタは、現在オブジェクト所有するスレッドと、オブジェクトの所有を待機しているスレッドとを識別する。しかしながら、これらモニタを使用するコンピュータシステムでは、各同期可能なオブジェクトごとにモニタが存在することが多い。その結果、この解決策は、多量のメモリを必要とするという大きな欠点を有する。
これらモニタにより必要とされるメモリを減少するための簡単な解決策は、モニタのキャッシュを割り当てそして各モニタ動作の際にこのキャッシュにおいてハッシュテーブルルックアップを実行することである。このような解決策は、モニタ動作のオーバーヘッドを実質的に増加し、そしてこの解決策が低速度であることから、本発明をするに至った。
【０００５】
本発明の目的は、ロック可能であるが実際には決してロックされていないオブジェクトのロックデータ構造に対するメモリリソースの割当を回避するように必要時ベースでロックデータにスペースを割り当てるオブジェクトロッキングシステムを提供することである。
本発明の別の目的は、計算効率が良く、頻繁に使用されるオブジェクトに対し計算上のオーバーヘッドを本質的に課することがなく、且つロックされるオブジェクトの個数に比例する記憶リソースを使用するロックデータ割当システム及び方法を提供することである。
本発明の付加的な目的及び特徴は、添付図面を参照した以下の詳細な説明及び特許請求の範囲から容易に明らかとなろう。
【０００６】
【課題を解決するための手段】
本発明の上記目的は、複数のオブジェクト及び複数の手順を記憶するためのメモリを備え、各々の記憶されたオブジェクトは、ロック及び非ロックより成る組から選択されたロック状態を有し、各々の記憶されたオブジェクトは、データ構造に対するデータポインタを含み；更に、指定の非ロックオブジェクトのロック状態をロックへと切り換えるための命令を含み、指定の非ロックオブジェクトに対するローカルなオブジェクトロッキング手順を形成するためのグローバルなオブジェクトロッキング手順を備え、各々のローカルなオブジェクトロッキング手順は、ロックデータを記憶するためのロックデータサブアレーと、指定の非ロックオブジェクトの記憶されたロックデータを更新するための命令とを含み；更に、予め定められた解除基準を満足するときに、指定のオブジェクトのローカルオブジェクトロッキング手順を解除するためのロックデータクリーンアップ手順を備えたコンピュータシステムにおいて、システムは、グローバルなオブジェクトロッキング手順を使用して、ロックデータサブアレーをもたないオブジェクトに対するロック要求にサービスし、ローカルオブジェクトロッキング手順を使用して、ロックデータサブアレーをもつオブジェクトに対するロック要求にサービスし、かつロックデータクリーンアップ手順を使用して、指定のオブジェクトのローカルオブジェクトロッキング手順を解除するコンピュータシステムによって達成される。
【０００７】
本発明のコンピュータシステムでは、最近ロックのロック状態をもたない各々の記憶されたオブジェクトは、グローバルなオブジェクトロッキング手順を含む手順のサブセットに対するメソドポインタを含み、最近ロックのロック状態をもつ各々の記憶されたオブジェクトは、ローカルなオブジェクトロッキング手順を含む手順のサブセットに対するメソドポインタを含み、かつグローバルなオブジェクトロッキング手順は、ローカルなオブジェクトロッキング手順を含む手順のサブセットを指すように指定のオブジェクトのメソドポインタを更新する命令を含むように構成してもよい。
本発明のコンピュータシステムでは、ロックのロック状態を決してもっていない各々の記憶されたオブジェクトは、グローバルなオブジェクトロッキング手順を含む手順のサブセットに対するメソドポインタを含み、ロックのロック状態をもつ各々の記憶されたオブジェクトは、ローカルなオブジェクトロッキング手順を含む手順のサブセットに対するメソドポインタを含み、グローバルなオブジェクトロッキング手順は、ローカルなオブジェクトロッキング手順を含む手順のサブセットを指すように指定のオブジェクトのメソドポインタを更新する命令を含み、かつロックデータクリーンアップ手順は、グローバルなオブジェクトロッキング手順を含む手順のサブセットを指すように指定のオブジェクトのメソドポインタを変更する命令を含むように構成してもよい。
【０００８】
本発明のコンピュータシステムでは、メモリは、更に、１組のオブジェクトクラスを記憶し、各オブジェクトクラスは、そのオブジェクトクラスに関連した１組のメソドをレファレンスするポインタと、グローバルなオブジェクトロッキング手順をレファレンスするポインタとを含む一次仮想ファンクションテーブル（ＶＦＴ）を含み、最近ロックのロック状態をもたない記憶されたオブジェクトの各々は、オブジェクトクラスの対応する１つについて一次ＶＦＴをレファレンスするメソドポインタを含み、ロックのロック状態をもつ記憶されたオブジェクトの各々に対し、ローカルなオブジェクトロッキング手順をレファレンスするポインタを含むローカルな仮想ファンクションテーブル（ＶＦＴ）があり、グローバルなオブジェクトロッキング手順は、指定のオブジェクトに対しローカルＶＦＴをレファレンスするように指定のオブジェクトのメソドポインタを更新する命令を含むように構成してもよい。
【０００９】
本発明のコンピュータシステムでは、メモリは、更に、１組のオブジェクトクラスを記憶し、各オブジェクトクラスは、そのオブジェクトクラスに関連した１組のメソドをレファレンスするポインタと、グローバルなオブジェクトロッキング手順をレファレンスするポインタとを含む一次仮想ファンクションテーブル（ＶＦＴ）を含み、ロックのロック状態を決してもっていない記憶されたオブジェクトの各々は、オブジェクトクラスの対応する１つについて一次ＶＦＴをレファレンスするメソドポインタを含み、ロックのロック状態をもつ記憶されたオブジェクトの各々に対し、ローカルなオブジェクトロッキング手順をレファレンスするポインタを含むローカルな仮想ファンクションテーブル（ＶＦＴ）があり、グローバルなオブジェクトロッキング手順は、指定のオブジェクトに対しローカルＶＦＴをレファレンスするように指定のオブジェクトのメソドポインタを更新する命令を含み、かつロックデータクリーンアップ手順は、指定のオブジェクトに対応するオブジェクトクラスに対し一次ＶＦＴをレファレンスするように指定のオブジェクトのメソドポインタを変更する命令を含むように構成してもよい。
【００１０】
また本発明の上記目的は、複数のオブジェクト及び複数の手順をコンピュータメモリに記憶し、各々の記憶されたオブジェクトは、ロック及び非ロックより成る組から選択されたロック状態を有し、各々の記憶されたオブジェクトは、データ構造に対するデータポインタを含み；決してロックされていない指定のオブジェクトに対するロック要求にサービスするときに、指定のオブジェクトのロック状態をロックへと切り換える命令を含むグローバルなオブジェクトロッキング手順を実行して、指定のオブジェクトに対するローカルなオブジェクトロッキング手順を形成し、各々のローカルなオブジェクトロッキング手順は、ロックデータを記憶するためのロックデータサブアレーと、指定のオブジェクトの記憶されたロックデータを更新するための命令とを含み；更に、予め定められた解除基準を満足するときに、ロックデータクリーンアップ手順を実行して、指定のオブジェクトのローカルオブジェクトロッキング手順を解除する段階を具備するコンピュータシステムを操作する方法によって達成される。
【００１１】
本発明の方法では、ロックのロック状態を最近もたない各々の記憶されたオブジェクトに、グローバルなオブジェクトのロッキング手順を含む手順のサブセットに対するメソドポインタを組み合わせ、ロックのロック状態を最近もつ各々の記憶されたオブジェクトに、ローカルなオブジェクトのロッキング手順を含む手順のサブセットに対するメソドポインタを組み合わせ、グローバルなオブジェクトのロッキング手順を実行して、非ロックオブジェクトに対するロック要求にサービスするときに、ローカルなオブジェクトのロッキング手順を含む手順のサブセットを指すように指定のオブジェクトのメソドポインタを更新するようにしてもよい。
本発明の方法では、ロックのロック状態を決してもっていない各々の記憶されたオブジェクトに、グローバルなオブジェクトロッキング手順を含む手順のサブセットに対するメソドポインタを組み合わせ、ロックのロック状態をもつ各々の記憶されたオブジェクトに、ローカルなオブジェクトロッキング手順を含む手順のサブセットに対するメソドポインタを組み合わせ、グローバルなオブジェクトロッキング手順を実行して、非ロックオブジェクトに対するロック要求にサービスするときに、ローカルなオブジェクトロッキング手順を含む手順のサブセットを指すように指定のオブジェクトのメソドポインタを更新し、かつロックデータクリーンアップ手順を実行するときに、グローバルなオブジェクトロッキング手順を含む手順のサブセットを指すように指定のオブジェクトのメソドポインタを変更するようにしてもよい。
【００１２】
本発明の方法では、コンピュータメモリに１組のオブジェクトクラスを記憶し、各々のオブジェクトクラスは、そのオブジェクトクラスに関連した１組のメソドをレファレンスするポインタと、グローバルなオブジェクトロッキング手順をレファレンスするポインタとを含む一次仮想ファンクションテーブル（ＶＦＴ）を含み、ロックのロック状態を最近もたない記憶されたオブジェクトの各々に、オブジェクトクラスの対応する１つについて一次ＶＦＴをレファレンスするメソドポインタを組み合わせ、ロックのロック状態をもつ記憶されたオブジェクトの各々に対して、ローカルなオブジェクトロッキング手順をレファレンスするポインタを含むローカルな仮想ファンクションテーブル（ＶＦＴ）をコンピュータメモリに記憶し、グローバルなオブジェクトロッキング手順を実行するときに、指定のオブジェクトに対しローカルＶＦＴをレファレンスするように指定のオブジェクトのメソドポインタを更新するようにしてもよい。
【００１３】
本発明の方法では、コンピュータメモリに１組のオブジェクトクラスを記憶し、各々のオブジェクトクラスは、そのオブジェクトクラスに関連した１組のメソドをレファレンスするポインタと、グローバルなオブジェクトロッキング手順をレファレンスするポインタとを含んだ一次仮想ファンクションテーブル（ＶＦＴ）を含み、ロックのロック状態を決してもっていない記憶されたオブジェクトの各々に、オブジェクトクラスの対応する１つについて一次ＶＦＴをレファレンスするメソドポインタを組み合わせ、ロックのロック状態をもつ記憶されたオブジェクトの各々に対して、ローカルなオブジェクトロッキング手順をレファレンスするポインタを含むローカルな仮想ファンクションテーブル（ＶＦＴ）をコンピュータメモリに記憶し、グローバルなオブジェクトロッキング手順を実行するときに、指定のオブジェクトに対しローカルＶＦＴをレファレンスするように指定のオブジェクトのメソドポインタを更新し、かつロックデータクリーンアップ手順を実行するときに、指定のオブジェクトに対応するオブジェクトクラスに対し一次ＶＦＴをレファレンスするように指定のオブジェクトのメソドポインタを変更するようにしてもよい。
【００１４】
更に、本発明の上記目的は、データ処理システムで実行されるプログラムによりアクセスするためのデータを記憶するコンピュータ読み取り可能な記憶媒体において、メモリに記憶された複数のオブジェクト及び複数の手順を備え、各々の記憶されたオブジェクトは、ロック及び非ロックより成る組から選択されたロック状態を有し、各々の記憶されたオブジェクトは、媒体に記憶されたデータ構造に対するデータポインタを含み；更に、指定の非ロックオブジェクトのロック状態をロックへと切り換えるための命令を含み、指定の非ロックオブジェクトに対するローカルなオブジェクトロッキング手順を形成するためのグローバルなオブジェクトロッキング手順を備え、各々のローカルなオブジェクトロッキング手順は、ロックデータを記憶するためのロックデータサブアレーと、指定のオブジェクトの記憶されたロックデータを更新するための命令とを含み；更に、予め定められた解除基準を満足するときに、指定のオブジェクトのローカルオブジェクトロッキング手順を解除するためのロックデータクリーンアップ手順を備え、システムは、グローバルなオブジェクトロッキング手順を使用して、ロックデータサブアレーをもたないオブジェクトに対するロック要求にサービスし、ローカルなオブジェクトロッキング手順を使用して、ロックデータサブアレーをもつオブジェクトに対するロック要求にサービスし、かつロックデータクリーンアップ手順を使用して、指定のオブジェクトのローカルオブジェクトロッキング手順を解除するコンピュータ読み取り可能な記憶媒体によって達成される。
【００１５】
本発明の記憶媒体では、最近ロックのロック状態をもたない各々の記憶されたオブジェクトは、グローバルなオブジェクトロッキング手順を含む手順のサブセットに対するメソドポインタを含み、最近ロックのロック状態をもつ各々の記憶されたオブジェクトは、ローカルなオブジェクトロッキング手順を含む手順のサブセットに対するメソドポインタを含み、かつグローバルなオブジェクトロッキング手順は、ローカルなオブジェクトロッキング手順を含む手順のサブセットを指すように指定のオブジェクトのメソドポインタを更新する命令を含むように構成してもよい。
本発明の上記目的は、データ処理システムにおいて、通信リンクを経て他のデータ処理システムへ送信するのに適した１組のコンピュータ読み取り可能なモジュールを備え、各々の他のデータ処理システムは、複数のオブジェクト及び複数の手順を記憶し、各々の記憶されたオブジェクトは、ロック及び非ロックより成る組から選択されたロック状態を有し、各々の記憶されたオブジェクトは、データ構造に対するデータポインタを含み、１組のモジュールは、指定の非ロックオブジェクトのロック状態をロックへと切り換えるための命令を含み、指定の非ロックオブジェクトに対するローカルなオブジェクトロッキング手順を形成するためのグローバルなオブジェクトロッキング手順を備え、各々のローカルなオブジェクトロッキング手順は、ロックデータを記憶するためのロックデータサブアレーと、指定のオブジェクトの記憶されたロックデータを更新するための命令とを含み；更に、予め定められた解除基準を満足するときに、指定のオブジェクトのローカルオブジェクトロッキング手順を解除するためのロックデータクリーンアップ手順を備え、他のデータ処理システムの各々は、グローバルなオブジェクトロッキング手順を使用して、ロックデータサブアレーをもたないオブジェクトに対するロック要求にサービスし、ローカルなオブジェクトロッキング手順を使用して、ロックデータサブアレーをもつオブジェクトに対するロック要求にサービスし、かつロックデータクリーンアップ手順を使用して、指定のオブジェクトのローカルオブジェクトロッキング手順を解除する１組のコンピュータ読み取り可能なモジュールによって達成される。
【００１６】
本発明のモジュールでは、グローバルなオブジェクトロッキング手順は、ローカルなオブジェクトロッキング手順を含む手順のサブセットを指すように指定のオブジェクトのメソドポインタを更新する命令を含み、かつロックデータクリーンアップ手順は、グローバルなオブジェクトロッキング手順を含む手順のサブセットを指すように指定のオブジェクトのメソドポインタを更新する命令を含むように構成してもよい。
【００１７】
【作用】
要約すれば、本発明は、複数のオブジェクト及び複数の手順を記憶するメモリを有したマルチスレッド型コンピュータシステムを提供する。各々のオブジェクトは、ロック又は非ロック（アンロック）のロック状態を有する。オブジェクトを表す方法は２つあり、即ちデータ構造に対するデータポインタ及びメソドアレーに対するメソドポインタより成るハンドルとして表すか、或いはオブジェクトデータ構造に対する直接ポインタであって、その第１のエレメントがメソドアレーに対するメソドポインタである直接ポインタとして表すことである。本発明の目的についてはこのような表示の相違は重要ではない。
いずれにせよ、メソドアレーは、オブジェクトに対するロック及び非ロック手順を含む。各オブジェクトは、更に、あるクラスのインスタンスであり、そしてそのクラスに関連したクラスデータ構造に対しそのメソドアレーと共に記憶されるデータレファレンスを有している。従って、同じクラスのインスタンスである２つのオブジェクトは、このクラスデータ構造を共用し、それに対して同じレファレンスを有する。このクラスデータ構造は、そのクラスに関連した永久的に割り当てられたクラスロックデータ構造を含み、これは、関連するロックデータ構造をもたないオブジェクトに対する変更を同期するのに使用することができる。
【００１８】
このシステムは、ロックデータサブアレーが割り当てられていないオブジェクト（即ち、決してロックされていないオブジェクト及び最近ロックされないオブジェクト）に対するロック要求にサービスするためのロック手順として単一グローバルオブジェクトロッキング手順を使用し、そしてロックデータサブアレーが割り当てられたオブジェクト（即ち、ロックされたオブジェクト及び最近ロックされたオブジェクト）に対するロック要求にサービスするためのロック手順としてローカルなオブジェクト特有のロッキング手順を使用する。
グローバルなオブジェクトロッキング手順は、特にロックされるべきオブジェクトに対するローカルなオブジェクトロッキング手順を形成するための命令を有する。ローカルなオブジェクト特有のロッキング手順は、ロックデータを記憶するためのロックデータサブアレーをプライベートデータとして含んでいる。ローカルなオブジェクト特有のロッキング手順は、そのオブジェクトの記憶されたロックデータを更新するための命令を有する。システムのガーベージ整理手順が実行されるときに実行されるロックデータクリーンアップ手順は、オブジェクトが最近ロックされていない場合にローカルなオブジェクト特有のロッキング手順に使用されるメモリを解放する。
【００１９】
好ましい実施形態においては、ロックデータサブアレーが割り当てられていない各オブジェクトは、グローバルなオブジェクトロッキング手順を含む１組の手順をレファレンスするメソドポインタを有し、このようなオブジェクトは必ずしもロック状態にない。ローカルなオブジェクト特有のロッキング手順が割り当てられた各オブジェクトは、そのローカルなオブジェクト特有のロッキング手順を含む１組の手順をレファレンスするメソドポインタを有する。更に、グローバルなオブジェクトロッキング手順は、ローカルなオブジェクト特有のロッキング手順を含む１組の手順を指すように特定のオブジェクトのメソドポインタを更新するための命令を含む。
ロックデータクリーンアップ手順は、指定のオブジェクトが最近ロックされないことを指定のオブジェクトの更新されたロックデータが指示するときに作用されて、グローバルなオブジェクトのロッキング手順を含む１組の手順を指すように指定のオブジェクトのメソドポインタを変更するための命令を含む。
【００２０】
より詳細には、好ましい実施形態において、コンピュータシステムは、１組のオブジェクトクラスを含み、そして各オブジェクトクラスは、オブジェクトクラスに関連した１組のメソドをレファレンスするポインタと、グローバルなオブジェクトロッキング手順をレファレンスするポインタとを含む仮想ファンクションテーブル（ＶＦＴ）を備えている。最近ロックされない各オブジェクトは、対応するオブジェクトクラスに対しＶＦＴをレファレンスするメソドポインタを有する。
最近ロックされた各オブジェクトに対し、システムは、そのオブジェクトクラスに関連した１組のメソドをレファレンスするポインタと、オブジェクトのローカルオブジェクトロッキング手順をレファレンスするポインタとを含むオブジェクト特有の仮想ファンクションテーブル（ＶＦＴ）を記憶する。グローバルなオブジェクトロッキング手順は、オブジェクト特有のＶＦＴを形成しそしてそのオブジェクト特有のＶＦＴをレファレンスするように指定のオブジェクトメソドポインタを更新するための命令を含む。
【００２１】
【実施例】
図１には、多数のクライエントコンピュータ１０２及び多数のサーバコンピュータ１０４を有する分散型コンピュータシステム１００が示されている。好ましい実施形態において、各クライエントコンピュータ１０２は、インターネット１０３を経てサーバ１０４に接続されるが、他の形式の通信接続を使用することもできる。ほとんどのクライエントコンピュータは、サン・ワークステーション、ＩＢＭ対応のコンピュータ及びマッキントッシュコンピュータのようなデスクトップコンピュータであるが、実質上いかなる形式のコンピュータがクライエントコンピュータであってもよい。好ましい実施形態においては、各クライエントコンピュータは、ＣＰＵ１０５、通信インターフェイス１０６、ユーザインターフェイス１０７、及びメモリ１０８を備えている。メモリ１０８は、次のものを記憶する。
【００２２】
・オペレーティングシステム１０９；
・インターネット通信マネージャープログラム１１０；
・指定のプログラムがある予め定められた完全性基準を満足するか否かを照合するためのバイトコードプログラムベリファイヤ１１２；
・アプリケーションプログラムを実行するためのバイトコードプログラムインタープリター１１４；
・ユーザのアドレススペースにオブジェクトクラスをロードし、そしてバイトコードプログラムベリファイヤを用いて、各ロードされたオブジェクトクラスに関連したメソドの完全性を照合するためのクラスローダ１１６；
・使用中のオブジェクトクラス１２２をローカルに記憶し及び／又はコンピュータ１０２のユーザにより使用できるようにする少なくとも１つのクラス保存容器１２０；
・クラス保存容器１２０に記憶されるオブジェクトクラスのオブジェクトのインスタンスであるオブジェクト１２６を記憶するための少なくとも１つのオブジェクト保存容器１２４。
【００２３】
好ましい実施形態において、オペレーティングシステム１０９は、各定められたアドレススペース内で多数の実行スレッドをサポートするオブジェクト指向のマルチタスクオペレーティングシステムである。オペレーティングシステムは、更に、解放されたデータ構造に関連した記憶を回復するためのガーベージ整理手順を使用する。このガーベージ整理手順は、周期的なベースで自動的に実行されるのに加えて、割当に使用できるメモリの量がスレッシュホールドレベルより下がったときにも自動的に呼び出される。この説明の目的上、オペレーティングシステム１０９の全てのオブジェクトはロック可能なオブジェクトであるが、実際には比較的僅かなオブジェクトだけが常にロックされると仮定する。
クラスローダ１１６は、一般に、適当なオブジェクトクラスのオブジェクトを発生することを必要とする手順の実行をユーザが最初に開始するときに呼び出される。クラスローダ１１６は、適当なオブジェクトクラスをロードし、そしてそのロードされたオブジェクトクラスにおける全てのバイトコードプログラムの完全性を照合するためにバイトコードプログラムベリファイヤ１１２を呼び出す。全てのメソドが首尾良く照合された場合には、オブジェクトクラスのオブジェクトインスタンスが発生され、そしてバイトコードインタープリター１１４が呼び出されて、ユーザが要求した手順、一般にメソドと称する、を実行する。ユーザが要求した手順がバイトコードプログラムではなくそして非バイトコードプログラムの実行が許された（これは本発明の範囲外である）場合には、コンパイルされたプログラムエグズキュータ（図示せず）によりプログラムが実行される。
【００２４】
又、クラスローダは、実行中のバイトコードプログラムが、ユーザのアドレススペースへまだロードされていないオブジェクトクラスに対するクライエントメソドへの呼び出しに遭遇したときにも呼び出される。再び、クラスローダ１１６は、適当なオブジェクトクラスをロードし、そしてそのロードされたオブジェクトクラスにおける全てのバイトコードプログラムの完全性を照合するためにバイトコードプログラムベリファイヤ１１２を呼び出す。多くの状態において、オブジェクトクラスは、図１に示すサーバ１０４の１つのような遠隔配置されたコンピュータからロードされる。ロードされたオブジェクトクラスの全てのメソドが首尾良く照合された場合には、オブジェクトクラスのオブジェクトインスタンスが発生され、そして呼び出されたオブジェクトメソドを実行するためにバイトコードインタープリター１１４が呼び出される。
【００２５】
同期型のメソドは、ここでは、システムリソースを同時に使用することのできる実行スレッドの数（以下、「スレッド」）を制限するためにロッキング方法を使用することを含むメソドであると定義する。最も一般的な同期ツールは、ミューテックス(mutex) であり、これは、一度に１つのスレッドのみが特定のシステムリソースを使用できるようにし、そしてリソースの使用を待機する実行スレッドを追跡するメカニズムを含む。ここに述べる同期メカニズムは、ミューテックス形式のロッキングメカニズムであるが、本発明の方法は、セマフォや、時間ベースのロックエクスピレーション等を含む（これらに限定されないが）他の同期メカニズムを有するコンピュータシステムにも等しく適用することができる。
好ましい実施形態において、同期型メソドは、常に、１つの特定のオブジェクトに対して同期される。例えば、多数のスレッドが、特定のオブジェクトにより表されたシステムリソースの専用の使用を必要とする同期型メソドを実行することができる。いずれかのスレッドがオブジェクトに対するロックの「所有権」を有するときには、そのオブジェクトにロックの所有権を要求する他の全てのメソドは、全ての早期スレッドがオブジェクトに対するロックを得て解除するまで、強制的に待機させられる。
【００２６】
非ロック及びロックオブジェクトに対するデータ構造
図２は、最近ロックされていないオブジェクトに対する本発明の好ましい実施形態におけるデータ構造２００を示している。以下に述べるように、このようなオブジェクトは全て当然非ロックであり、そして更に、ロックデータサブアレーが割り当てられていない。１つの好ましい実施形態において、「オブジェクトＸは最近ロックされていない」という句は、オペレーティングシステムによる最後のガーベージ整理以来オブジェクトＸがロックされていないことを意味するものと定義される。他の好ましい実施形態において、「最近」という語は、予め定められた時間量、例えば、ある秒数、又はガーベージ整理手順の実行以外のコンピュータシステムにおける確実な周期的事象以来の時間周期として定義される。
【００２７】
オブジェクトクラスＡのオブジェクトは、オブジェクトのメソドに対するポインタ２０４と、オブジェクトのデータアレー２０８に対するポインタ２０６とを含むオブジェクトハンドル２０２を有している。
オブジェクトのメソドに対するポインタ２０４は、実際には、関連するオブジェクトクラスのメソドに対する間接的ポインタである。より詳細には、メソドポインタ２０４は、オブジェクトのオブジェクトクラスに対する仮想ファンクションテーブル（ＶＦＴ）２１０を指す。各オブジェクトクラスが有するＶＦＴ２１０は、（Ａ）オブジェクトクラスのメソド２１４の各々に対するポインタ２１２と、（Ｂ）オブジェクトをスレッドに同期するためのグローバルなロックメソド（グローバルロック１）２１６に対するポインタ２１５と、（Ｃ）特殊クラスオブジェクト２１８に対するポインタ２１７と、（Ｄ）ロックモニタを解放するための非ロックメソド２２１に対するポインタ２２０とを含んでいる。各定められたオブジェクトクラスごとに１つのクラスオブジェクト２１８があり、そしてクラスオブジェクトは、クラスのための永久的に割り当てられたロックデータサブアレー（ロックモニタとも称する）２１９を含む。好ましい実施形態において、クラスオブジェクト２１８は、対応するオブジェクトクラスのインスタンスである全てのオブジェクトのロックデータサブアレーにアクセスを同期するために用いられる。
【００２８】
図２に示すように、オブジェクトクラスＡのオブジェクトがいかに多く存在しても、全オブジェクトクラスＡに対しＶＦＴ２１０及びオブジェクトメソド２１４のコピーは１つだけである。更に、グローバルなロックメソド（グローバルロック１）２１６及び非ロックメソド２２１は、好ましい実施形態においてはオブジェクトクラスハイアラーキの最上部にあるオブジェクトクラスであるオブジェクトクラス「オブジェクト」のメソドである。
グローバルロック１のメソド２１０は、ロックデータサブアレーがまだ割り当てられていないオブジェクトと同期するようにスレッドによる要求を処理するのに用いられる。非ロックメソド２２１は、オブジェクトとの同期を解除するようにスレッドによる要求を処理するのに用いられる。非ロックメソド２２１は、従来通りに動作し、指定のオブジェクトのモニタの現在の所有者を除去し、指定のオブジェクトのモニタを待機しているスレッドがない場合にはロック状態を非ロックに設定し、そしてその他については、ロック状態をロックとしたまま、最上部の待機中スレッドを指定のオブジェクトのモニタの所有者とする。
【００２９】
又、図２に示されたように、オブジェクトクラス「オブジェクト」は、オブジェクトからロックデータサブアレーを矯正するための「ロックデータクリーンアップ」メソドと称する第２のロックメソド２２２も含んでいる。３つのロックメソド２１６、２２１及び２２２は、本発明の方法を用いる全てのシステムに使用できることが知られているオブジェクトクラスのメソドとして実施することができ、オブジェクトクラス「オブジェクト」の一部である必要はないことを指摘しておく。
図３は、本発明の好ましい実施形態におけるロックされたオブジェクトのデータ構造２４０を示している。これは、最近ロックされた、従って、ロックデータサブアレーが割り当てられたオブジェクトのデータ構造でもある。オブジェクトクラスＡのロックされたオブジェクトは、オブジェクトのメソドに対するポインタ２４４と、オブジェクトのデータアレー２０８に対するポインタ２４６とを含むオブジェクトハンドル２４２を有する。
【００３０】
最近ロックされたオブジェクトのメソドポインタ２４４は、仮想ファンクションテーブル２５０（ＶＦＴ、Ａ−０１）のオブジェクト特有のバージョンを指す。割り当てられたロックデータサブアレーを有する各オブジェクトは、特定のＶＦＴ（ＶＦＴ、Ａ−０１）２５０を有し、これは、（Ａ）オブジェクトクラスのメソド２１４の各々に対するポインタ２１２と、（Ｂ）オブジェクトをスレッドに同期するのに用いられるローカルのオブジェクト特有のロッキング手順（ローカルロック２）２６０に対するポインタ２５６と、（Ｃ）特殊クラスオブジェクト２１８に対するポインタ２１７と、（Ｄ）ロックモニタ解除するための非ロックメソドに対するポインタ２２０とを含む。各々の定められたオブジェクトクラスごとに１つのクラスオブジェクト２１８があり、クラスオブジェクトは、永久的に割り当てられたロックデータサブアレー（ロックモニタとも称する）２１９を含む。
【００３１】
ローカルなオブジェクト特有のロッキング手順２６０は、ロックされたオブジェクト及び最近ロックされたオブジェクトに対するロック要求にサービスするのに使用される。ローカルなオブジェクト特有のロッキング手順２６０は、ロックデータを記憶するためのロックデータサブアレー２４９をプライベートデータとして含んでいる。ローカルなオブジェクト特有のロッキング手順は、そのオブジェクトの記憶されたロックデータを更新する命令を有する。より詳細には、ローカルなオブジェクト特有のロッキング手順２６０は、対応するオブジェクトをスレッドに同期すると共に、対応するロック情報をオブジェクトのロックデータサブアレー２４９に記憶するためのオブジェクト特有のロッキングメソド（ローカルロック２）を有する。
【００３２】
ロックデータサブアレー２４９は、オブジェクトロック状態インジケータと、ロック所有者値と、待機者（即ち、オブジェクトとの同期を待機しているスレッド）のリストヘッダ及びリストテイルとを含む。好ましい実施形態において、ロック状態インジケータは、オブジェクトがロックされたか非ロックであるかを示す第１フラグ値（ロックフラグ）と、オブジェクトが最近ロックされたかどうかを示す第２フラグ値（「最近ロックされない(NotRecentlyLocked) 」フラグ）とを含む。「最近ロックされない」フラグは、オブジェクトが最近ロックされない場合にセットされる（真に）。好ましい実施形態において、「最近ロックされない」フラグは、「ロックデータクリーンアップ」メソドによりセットされ、グローバルロック１及びローカルロック２メソドによりクリアされる。
【００３３】
オブジェクトロッキング方法
クライエントコンピュータ１０２のような各コンピュータシステムは、関連するオブジェクトクラスを各々有する多数のオブジェクトを有している。各オブジェクトは、その関連するオブジェクトクラスのインスタンスであると言える。各オブジェクトクラスは、そのスーパークラスから特性を引き継ぎ、そして各オブジェクトクラスは、オブジェクトクラス「オブジェクト」と称するトップレベルのオブジェクトクラスのサブクラスである。
特定のアドレススペースに存在する各オブジェクトクラスに対し、そのオブジェクトクラスに関連した全てのメソド（即ち、実行可能な手順）のリストと、これらメソドの各々に対するポインタとを含む仮想ファンクションテーブル（ＶＦＴ）が存在する。図２に示すように、各オブジェクトクラスのＶＦＴは、グローバルロック１メソドに対するレファレンスも含み、これは、好ましい実施形態においては、オブジェクトクラス「オブジェクト」に関連したメソドである。オブジェクトにロックデータサブアレーが割り当てられないときは、そのメソドポインタがオブジェクトのオブジェクトクラスに対するデフォールトＶＦＴを指す。
【００３４】
本発明の第１の好ましい実施形態によれば、各オブジェクトクラスは、第１のＶＦＴとして上記されそしてここで「一次ＶＦＴ」とも称される関連仮想ファンクションテーブルを有する。更に、最近ロックされた各オブジェクトに対し、システムは、オブジェクト特有の仮想ファンクションテーブル（ＶＦＴ）を形成する。オブジェクト特有のＶＦＴは、一次ＶＦＴによりレファレンスされるグローバルなロックメソド「グローバルロック１」２１６とは異なるローカルなロックメソド「ローカルロック２」２６０をレファレンスする。
以下のテーブル１、２、３及び４は、本発明に関連したグローバルロック１、ローカルロック２、及びロックデータクリーンアップソフトウェアルーチンの擬似コード表示を含む。ここで使用する擬似コードは、普遍的なコンピュータ言語の規定を使用する。ここに使用される擬似コードは、説明の目的でのみ形成されたものであるが、コンピュータプログラムの当業者により容易に理解できるように構成されている。
【００３５】
図４及びテーブル１に示す「グローバルロック１」メソド２１６の擬似コードを参照すれば、ロックデータサブアレーが割り当てられていないオブジェクトが同期メソド呼び出しの主題であるときに、オブジェクトに関連したグローバルなロックメソド（グローバルロック１）が呼び出される。グローバルロック１メソドが始まると、ロックされるべきオブジェクトに関連したクラスオブジェクトに対するロックを要求しそしてそれを待機する（ステップ２７０）。グローバルロック１メソドの残りの部分は、グローバルロック１メソドの呼び出しを行うスレッドがクラスオブジェクトに対するロックを得るまで実行されない。
グローバルロック１及びロックデータクリーンアップメソドは、同時性による崩壊に対して保護するために、クラスオブジェクトに対するロックを得ることにより同期される必要がある。例えば、マルチプロセッサシステムにおいては、グローバルロック１手順は、同時に同じオブジェクトに対する２つのプロセッサにより同時に呼び出されることがある。これは、予防策を講じない限り、オブジェクト特有のＶＦＴと、２つのオブジェクト特有のローカルロック２手順とを生じてしまう。この問題を解消するために、グローバルロック１及びロックデータクリーンアップ手順においては、指定のオブジェクトの内部データ構造を再構成しながらも指定のオブジェクトの形式に対してクラスオブジェクトをロックすることが必要となる。
【００３６】
クラスオブジェクトに対するロックを得た後に、オブジェクトがロックされた（又は最近ロックされた）か或いは非ロックにされた（又は最近非ロックにされた）かのチェックが行われる。オブジェクトがロックされたか否かは、オブジェクト特有のロッキング手順及びオブジェクト特有のＶＦＴの存在をチェックすることにより確かめることができる（ステップ２７１）。オブジェクト特有のロッキング手順及びオブジェクト特有のＶＦＴが存在する状態では、メソドがステップ２７６へ進む。さもなくば、グローバルロック１メソドは、ローカルロックデータサブアレーをプライベートデータとして含むローカルなオブジェクト特有のロッキング手順を形成する（ステップ２７２）。又、グローバルロック１は、ローカル所有者スレッドの識別を表すデータをロックデータサブアレーに記憶しそして「最近ロックされない(NotRecentlyLocked) 」フラグをクリアすることによりローカルロックデータサブアレーを初期化する。更に、グローバルローカル１メソドは、このオブジェクトに対して、オブジェクト特有のロッキング手順をレファレンスするオブジェクト特有のＶＦＴを形成する（ステップ２７２）。次いで、オブジェクトに対するメソドポインタが、オブジェクト特有のＶＦＴを指すように変更される。更に、クラスオブジェクトに対するロックが解除される（ステップ２７６）。最後に、ローカルロッキングメソド「ローカルロック２」が呼び出される（ステップ２７８）。オブジェクトメソドポインタの変更及びオブジェクト特有のＶＦＴの形成により、ローカルロック２メソドは、このオブジェクトに対するその後の同期要求を取り扱うために自動的に呼び出される。
【００３７】
図５及びテーブル２に示されたローカルロック２メソド２６０の擬似コードを参照すれば、ローカルロック２メソドは、受け取った同期要求の通常のサービスを単に実行するもので、これは、ロックデータの通常の更新を含む（ステップ２９０）。更に、ローカルロック２メソドのいかなる呼び出しも、指定のオブジェクトの「最近ロックされない」フラグをクリアさせる（ステップ３００）。別の実施形態においては、指定のオブジェクトの「最近ロックされない」フラグは、同期要求が処理された後にオブジェクトのロック状態がロックである場合にのみクリアされる。ローカルロック２メソドは、このメソドが呼び出されたときに、指定のオブジェクト（即ち、ロック処理の主題）がロックデータサブアレーを既に有することが分かるので、簡単である。
【００３８】
通常のミューテックス動作については、ロック取扱要求（即ち、ローカルロック２メソドにより取り扱われる要求）がスレッドにより関連オブジェクトと同期することである場合に、オブジェクトが既にロックされていれば、スレッドは、そのオブジェクトに対する待機中スレッドリストに加えられる。さもなくば、オブジェクトが非ロックであれば、要求を発するスレッドがロック所有者となり、ロック状態は、ロックへと変更される。
非ロック（アンロック）メソド２２１は、スレッドにより保持されたロックを解除する要求を処理する。待機中スレッドリストの最も上の待機中スレッドは、ロック所有者とされ、実行を再開することが許される。待機中のスレッドがない場合には、ロック状態が「非ロック」へと更新され、これは、ある実施形態においては、ロック所有者のデータをナル値へ変更しそしてロック状態フラグを偽へリセットするだけで指示することができる。
【００３９】
ローカルロック２は、オブジェクトが非ロックになった後も、オブジェクトのロックデータサブアレーがロッククリーンアップ(LockCleanUp) 」メソドにより割当解除されるまで、オブジェクトに対する全ての同期要求を取り扱う。
図６は、オブジェクト特有のＶＦＴ及びオブジェクト特有のロッキング手順の記憶を解除するロックデータクリーンアップメソドの第１の好ましい実施形態を示す。この実施形態は、ロックデータクリーンアップメソドが他の同時スレッド動作との同期を必要としない環境において使用される。図６及びテーブル３に示すロックデータクリーンアップメソド２２２の擬似コードを参照すれば、好ましい実施形態において、ロックデータクリーンアップメソドは、ガーベージ整理手順の実行が開始されるたびにロックデータサブアレーが割り当てられた全てのオブジェクトをチェックするためにガーベージ整理手順により呼び出される。或いは又、ロックデータクリーンアップメソドは、ガーベージ整理手順の実行が開始されるたびに全てのオブジェクトをチェックするためにガーベージ整理手順により呼び出される。
【００４０】
本発明の好ましい実施形態において、オブジェクトのロックデータサブアレーが２つのガーベージ整理サイクル間の時間周期中に未使用のままである場合に、そのオブジェクトは、最近ロックされないとみなす。より詳細には、オブジェクトの「最近ロックされない」フラグが１つのガーベージ整理サイクル間にロックデータクリーンアップ手順によって真にセットされずそして次のガーベージ整理サイクルに真のままとされる場合には、そのオブジェクトに対するロックデータサブアレー（実際には、オブジェクト特有のＶＦＴ及びオブジェクト特有のローカルロック手順）が解除される。
ロックデータクリーンアップ手順が開始すると、呼び出し側の手順（例えば、ガーベージ整理手順）により指定されたオブジェクトがローカルのオブジェクト特有のロッキング手順を有するかどうか決定される（ステップ３０２）。ローカルのオブジェクト特有のロッキング手順の存在は、矯正される必要のある記憶が存在することを指示し、さもなくば、手順は復帰となる。次いで、手順は、指定のオブジェクトがロックされたかどうか、又はオブジェクトが少なくとも１つの待機中スレッドを有するかどうかを決定する（ステップ３０４）。これらの状態は、オブジェクト特有のロッキング手順に割り当てられた記憶及びＶＦＴがこのとき矯正されなくてよいことを指示する。というのは、それらを使用する必要がまだあるからである。この場合（ステップ３０４−Ｙ）、メソドは復帰となる。
【００４１】
さもなくば、オブジェクトが最近ロックされたかどうかを決定するための更に別のチェックが行われる（ステップ３０６）。好ましい実施形態においては、オブジェクトは、そのロックデータサブアレーの「最近ロックされない」フラグが真にセットされた場合は、最近ロックされないとみなす。オブジェクトは、ロックデータサブアレーを有し且つ「最近ロックされない」フラグが偽にセットされた（即ち、フラグがセットされない）場合は、最近ロックされたとみなす。
オブジェクトが最近ロックされた場合には、そのオブジェクトに対する「最近ロックされない」フラグが真にセットされ（ステップ３０８）、手順は復帰となる。ステップ３０８は、ロックデータサブアレーが次のガーベージ整理サイクル中に未使用のままである場合にはその時間中解除するようにオブジェクトのロックデータサブアレーを準備する。
【００４２】
オブジェクトが最近ロックされない場合には、ローカルなオブジェクト特有のロッキング手順及びオブジェクト特有のＶＦＴに割り当てられた記憶が解除される（ステップ３１０）。最後に、オブジェクトのメソドポインタがオブジェクトのクラスオブジェクトに対し一次ＶＦＴにセットされる（ステップ３１２）。
図７は、ロックデータクリーンアップ手順の別の実施形態を示す。この別の実施形態において、ロックデータクリーンアップ手順は、他のスレッドロッキング動作と同時に実行され、これにより、ロックデータクリーンアップ手順をこれらの同時プロセスと同期させることが必要となる。図７及びテーブル４に示すロックデータクリーンアップメソド２２２の擬似コードを参照すれば、ロックデータクリーンアップメソドは、ガーベージ整理手順の実行が開始されるたびにロックデータサブアレーが割り当てられた全てのオブジェクトをチェックするためにガーベージ整理手順により呼び出される。或いは又、ロックデータクリーンアップメソドは、ガーベージ整理手順の実行が開始されるたびに全てのオブジェクトをチェックするためにガーベージ整理手順により呼び出される。
【００４３】
ロックデータクリーンアップ手順が開始されると、呼び出し側手順（例えば、ガーベージ整理手順）により指定されたオブジェクトがローカルのオブジェクト特有のロッキング手順を有するかどうかが決定される（ステップ４０２）。ローカルのオブジェクト特有のロッキング手順の存在は、矯正を必要とする記憶が既に割り当てられていることを指示する。それが存在しない場合には（ステップ４０２−Ｎ）、この手順が復帰となる。次いで、この手順は、指定のオブジェクトがロックされたかどうか又はオブジェクトが少なくとも１つの待機中スレッドを有するかどうかを決定する（ステップ４０４）。これらの状態は、オブジェクト特有のロッキング手順及びＶＦＴに割り当てられた記憶がこのとき矯正される必要がないことを指示する。というのは、それらを使用する必要がまだあるからである。この状態において（ステップ４０４−Ｙ）、手順は復帰となる。オブジェクトが最近ロックされたかどうかを決定する更に別のチェックが行われる（ステップ４０６）。好ましい実施形態においては、オブジェクトは、そのロックデータサブアレーの「最近ロックされない」フラグが真にセットされた場合には、最近ロックされないとみなされる。オブジェクトは、ロックデータサブアレーを有し且つ「最近ロックされない」フラグが偽にセットされた（即ち、フラグがセットされない）場合には、最近ロックされたとみなされる。
【００４４】
オブジェクトが最近ロックされた場合には、そのオブジェクトに対する「最近ロックされない」フラグが真にセットされ（ステップ４０８）、そして手順が復帰となる。ステップ４０８は、次のガーベージ整理サイクル中にロックデータサブアレーが未使用のままである場合にはその時間中に解除するようにオブジェクトのロックデータサブアレーを準備する。
次いで、ロックデータクリーンアップメソドは、ロッキング動作を用いた他の同時実行スレッドとの同期を必要とする。この同期は、ロックされるべきオブジェクトに関連したクラスオブジェクトに対するロックを要求しそしてそれを待機しているメソドにより達成される（ステップ４１２）。ロックデータクリーンアップメソドの残りの部分は、このメソドの呼び出しを行うスレッドがクラスオブジェクトに対するロックを得るまで実行されない。
【００４５】
クラスオブジェクトに対するロックが得られると、ロックデータクリーンアップメソドは、「最近ロックされない」フラグがセットされたかどうかを検査することにより（ステップ４１４）オブジェクトが最近ロックされたかどうかを再びチェックする。呼び出し側のスレッドがクラスオブジェクトのロックを待機している間に別のスレッドが指定のオブジェクトをロックすることがある点に注意されたい。この場合には、指定のオブジェクトのロックデータサブアレーを割当解除することが不適当である。というのは、指定のオブジェクトの「最近ロックされない」フラグについての第２のチェック（４１４）が必要になるからである。「最近ロックされない」フラグがセットされない場合には（４１４−Ｎ）、ロックデータクリーンアップメソドは、クラスオブジェクトのロックを解除し（ステップ４２０）、そして復帰となる。「最近ロックされない」フラグがまだセットされている場合には（４１４−Ｙ）、ロックデータクリーンアップメソドは、オブジェクト特有のＶＦＴ及びオブジェクト特有のロッキング手順に既に割り当てられている記憶を解除する（ステップ４１６）。次いで、オブジェクトに対するメソドポインタが、オブジェクトのクラスオブジェクトに対し一次ＶＦＴにセットされる（ステップ４１８）。最後に、オブジェクトのクラスオブジェクトに対するロックが解除される（ステップ４２０）。
【００４６】
上記の方法を使用すると、非ロック状態のオブジェクトが、オブジェクトロッキングをサポートするためのメモリオーバーヘッドを招くことはない。ロックされたオブジェクトのみに、ロックデータを記憶するためのメモリスペースが割り当てられる。
本発明は、幾つかの特定の実施形態を参照して説明したが、これは、本発明を単に示すものに過ぎず、本発明をこれに限定するものではない。特許請求の範囲に規定された本発明の精神及び範囲から逸脱せずに種々の変更がなされ得ることが当業者に明らかであろう。
例えば、「最近ロックされない」フラグ以外の他のメカニズムを用いて、オブジェクトが最近ロックされたかどうかを決定することができる。例えば、オブジェクトが非ロックであるときにその非ロックのオブジェクトのロックデータサブアレーにタイムスタンプを記憶することができ、このタイムスタンプをロックデータクリーンアップ手順によりチェックすることができる。このタイムスタンプが過去のスレッシュホールド時間量より大きい時間を表す場合に、オブジェクトは、最近ロックされないと決定される。
【００４７】
上記のロックデータサブアレーは、ミューテックスを実施するのに適しているが、同じロックデータサブアレーの割当及び解除方法並びにメカニズムを使用して、更に複雑なロックデータ構造、例えば、セマフォや、通知事象に関する待機を取り扱うモニタに対する構造を割り当て及び解除することができる。
更に、上記の方法及びシステムは、ランダムアクセスメモリのようなメモリデバイス以外の種々の形式の実行可能な媒体において実行するように変更することができる。他の形式の実行可能な媒体、例えば、メモリデバイス、コンパクトディスク又はフロッピーディスクのようなコンピュータ読み取り可能な記憶媒体を使用することができるが、これに限定されるものではない。
【００４８】
【表１】
0003953130.tif 000002
【００４９】
【表２】
0003953130.tif 000003
【００５０】
【表３】
0003953130.tif 000004
【００５１】
【表４】
0003953130.tif 000005
0003953130.tif 000006
【００５２】
【発明の効果】
本発明のコンピュータシステムは、複数のオブジェクト及び複数の手順を記憶するためのメモリを備え、各々の記憶されたオブジェクトは、ロック及び非ロックより成る組から選択されたロック状態を有し、各々の記憶されたオブジェクトは、データ構造に対するデータポインタを含み；更に、指定の非ロックオブジェクトのロック状態をロックへと切り換えるための命令を含み、指定の非ロックオブジェクトに対するローカルなオブジェクトロッキング手順を形成するためのグローバルなオブジェクトロッキング手順を備え、各々のローカルなオブジェクトロッキング手順は、ロックデータを記憶するためのロックデータサブアレーと、指定の非ロックオブジェクトの記憶されたロックデータを更新するための命令とを含み；更に、予め定められた解除基準を満足するときに、指定のオブジェクトのローカルオブジェクトロッキング手順を解除するためのロックデータクリーンアップ手順を備えたコンピュータシステムにおいて、システムは、グローバルなオブジェクトロッキング手順を使用して、ロックデータサブアレーをもたないオブジェクトに対するロック要求にサービスし、ローカルオブジェクトロッキング手順を使用して、ロックデータサブアレーをもつオブジェクトに対するロック要求にサービスし、そしてロックデータクリーンアップ手順を使用して、指定のオブジェクトのローカルオブジェクトロッキング手順を解除するので、ロック可能であるが実際には決してロックされていないオブジェクトのロックデータ構造に対するメモリリソースの割当を回避するように必要時ベースでロックデータにスペースを割り当てることができ、かつ計算効率が良く、頻繁に使用されるオブジェクトに対し計算上のオーバーヘッドを本質的に課することがなく、且つロックされるオブジェクトの個数に比例する記憶リソースを使用することができる。
【００５３】
本発明のコンピュータシステムを操作する方法は、複数のオブジェクト及び複数の手順をコンピュータメモリに記憶し、各々の記憶されたオブジェクトは、ロック及び非ロックより成る組から選択されたロック状態を有し、各々の記憶されたオブジェクトは、データ構造に対するデータポインタを含み；決してロックされていない指定のオブジェクトに対するロック要求にサービスするときに、指定のオブジェクトのロック状態をロックへと切り換える命令を含むグローバルなオブジェクトロッキング手順を実行して、指定のオブジェクトに対するローカルなオブジェクトロッキング手順を形成し、各々のローカルなオブジェクトロッキング手順は、ロックデータを記憶するためのロックデータサブアレーと、指定のオブジェクトの記憶されたロックデータを更新するための命令とを含み；更に、予め定められた解除基準を満足するときに、ロックデータクリーンアップ手順を実行して、指定のオブジェクトのローカルオブジェクトロッキング手順を解除する段階を具備するので、ロック可能であるが実際には決してロックされていないオブジェクトのロックデータ構造に対するメモリリソースの割当を回避するように必要時ベースでロックデータにスペースを割り当てることができ、かつ計算効率が良く、頻繁に使用されるオブジェクトに対し計算上のオーバーヘッドを本質的に課することがなく、且つロックされるオブジェクトの個数に比例する記憶リソースを使用することができる。
【００５４】
本発明のコンピュータ読み取り可能な記憶媒体は、データ処理システムで実行されるプログラムによりアクセスするためのデータを記憶するコンピュータ読み取り可能な記憶媒体において、メモリに記憶された複数のオブジェクト及び複数の手順を備え、各々の記憶されたオブジェクトは、ロック及び非ロックより成る組から選択されたロック状態を有し、各々の記憶されたオブジェクトは、媒体に記憶されたデータ構造に対するデータポインタを含み；更に、指定の非ロックオブジェクトのロック状態をロックへと切り換えるための命令を含み、指定の非ロックオブジェクトに対するローカルなオブジェクトロッキング手順を形成するためのグローバルなオブジェクトロッキング手順を備え、各々のローカルなオブジェクトロッキング手順は、ロックデータを記憶するためのロックデータサブアレーと、指定のオブジェクトの記憶されたロックデータを更新するための命令とを含み；更に、予め定められた解除基準を満足するときに、指定のオブジェクトのローカルオブジェクトロッキング手順を解除するためのロックデータクリーンアップ手順を備え、システムは、グローバルなオブジェクトロッキング手順を使用して、ロックデータサブアレーをもたないオブジェクトに対するロック要求にサービスし、ローカルなオブジェクトロッキング手順を使用して、ロックデータサブアレーをもつオブジェクトに対するロック要求にサービスし、そしてロックデータクリーンアップ手順を使用して、指定のオブジェクトのローカルオブジェクトロッキング手順を解除するので、ロック可能であるが実際には決してロックされていないオブジェクトのロックデータ構造に対するメモリリソースの割当を回避するように必要時ベースでロックデータにスペースを割り当てることができ、かつ計算効率が良く、頻繁に使用されるオブジェクトに対し計算上のオーバーヘッドを本質的に課することがなく、且つロックされるオブジェクトの個数に比例する記憶リソースを使用することができる。
【００５５】
本発明のコンピュータ読み取り可能なモジュールは、データ処理システムにおいて、通信リンクを経て他のデータ処理システムへ送信するのに適した１組のコンピュータ読み取り可能なモジュールを備え、各々の他のデータ処理システムは、複数のオブジェクト及び複数の手順を記憶し、各々の記憶されたオブジェクトは、ロック及び非ロックより成る組から選択されたロック状態を有し、各々の記憶されたオブジェクトは、データ構造に対するデータポインタを含み、１組のモジュールは、指定の非ロックオブジェクトのロック状態をロックへと切り換えるための命令を含み、指定の非ロックオブジェクトに対するローカルなオブジェクトロッキング手順を形成するためのグローバルなオブジェクトロッキング手順を備え、各々のローカルなオブジェクトロッキング手順は、ロックデータを記憶するためのロックデータサブアレーと、指定のオブジェクトの記憶されたロックデータを更新するための命令とを含み；更に、予め定められた解除基準を満足するときに、指定のオブジェクトのローカルオブジェクトロッキング手順を解除するためのロックデータクリーンアップ手順を備え、他のデータ処理システムの各々は、グローバルなオブジェクトロッキング手順を使用して、ロックデータサブアレーをもたないオブジェクトに対するロック要求にサービスし、ローカルなオブジェクトロッキング手順を使用して、ロックデータサブアレーをもつオブジェクトに対するロック要求にサービスし、そしてロックデータクリーンアップ手順を使用して、指定のオブジェクトのローカルオブジェクトロッキング手順を解除するので、ロック可能であるが実際には決してロックされていないオブジェクトのロックデータ構造に対するメモリリソースの割当を回避するように必要時ベースでロックデータにスペースを割り当てることができ、かつ計算効率が良く、頻繁に使用されるオブジェクトに対し計算上のオーバーヘッドを本質的に課することがなく、且つロックされるオブジェクトの個数に比例する記憶リソースを使用することができる。
【図面の簡単な説明】
【図１】本発明の好ましい実施形態によるコンピュータシステムのブロック図である。
【図２】本発明の好ましい実施形態においてロックデータサブアレーがまだ割り当てられていないオブジェクトに対するデータ構造を示すブロック図である。
【図３】本発明の好ましい実施形態においてロックデータサブアレーが割り当てられたオブジェクトに対するデータ構造を示すブロック図である。
【図４】本発明の好ましい実施形態においてオブジェクトをロックするための手順のフローチャートである。
【図５】本発明の好ましい実施形態においてオブジェクトをロックするための手順のフローチャートである。
【図６】ロックデータクリーンアップメソドの好ましい実施形態を示すフローチャートである。
【図７】ロックデータクリーンアップメソドの別の実施形態を示すフローチャートである。
【符号の説明】
１００  分散型コンピュータシステム
１０２  クライエントコンピュータ
１０３  インターネット
１０４  サーバコンピュータ
１０５  ＣＰＵ
１０６  通信インターフェイス
１０７  ユーザインターフェイス
１０８  メモリ
１０９  オペレーティングシステム
１１０  インターネット通信マネージャープログラム
１１２  バイトコードプログラムベリファイヤ
１１４  バイトコードプログラムインタープリター
１１６  クラスローダ
１２０  クラス保存容器
１２２  オブジェクトクラス
１２４  オブジェクト保存容器
１２６  オブジェクト
【図１】
0003953130.tif 000007
【図２】
0003953130.tif 000008
【図３】
0003953130.tif 000009
【図４】
0003953130.tif 000010
【図５】
0003953130.tif 000011
【図６】
0003953130.tif 000012
【図７】
0003953130.tif 000013