(57)【要約】【課題】デュアル・モード・リーダ・ライタ・ロックのための方法、システムおよびコンピュータ使用可能プログラム製品を提供する。【解決手段】オリジナル・ロックの使用におけるコンテンション状態が定められる。オリジナル・ロックは、データ処理システムにおいて実行するいくつかのプロセスによるリソースへの読取りアクセスおよび書込みアクセスを管理する。実施形態は、オリジナル・ロックとともに用いるための拡張ロックの組を作成する。オリジナル・ロックと拡張ロックの組とがデュアル・モード・リーダ・ライタ・ロックを形成し、それがリソースへの読取りアクセスおよび書込みアクセスを管理するように動作する。オリジナル・ロック内の索引を用いて各拡張ロックに索引を付けることによって、索引を用いて各拡張ロックを位置付けできるようにする。オリジナル・ロックおよび拡張ロックの組にわたって、いくつかのプロセスによるリソースへの読取りアクセスおよび書込みアクセスを取得および解除するための要求を分散させることによって、コンテンション状態が解決される。【選択図】図５
2013522740.tif 000002
【特許請求の範囲】
【請求項１】
デュアル・モード・リーダ・ライタ・ロックのためのコンピュータ実装方法であって、前記コンピュータ実装方法は、
オリジナル・ロックの使用におけるコンテンション状態を定めるステップであって、前記オリジナル・ロックはデータ処理システムにおいて利用可能なリソースに対応し、前記オリジナル・ロックは前記データ処理システムにおいて実行する複数のプロセスによる前記リソースへの読取りアクセスおよび書込みアクセスを管理する、ステップと、
前記オリジナル・ロックとともに使用するための拡張ロックの組を作成するステップであって、前記オリジナル・ロックおよび前記拡張ロックの組は前記デュアル・モード・リーダ・ライタ・ロックを形成し、前記デュアル・モード・リーダ・ライタ・ロックは前記リソースへの前記読取りアクセスおよび書込みアクセスを管理するように動作する、ステップと、
前記オリジナル・ロック内の索引を用いて前記拡張ロックの組の各拡張ロックに索引を付けることによって、前記索引を用いて各拡張ロックを位置付けできるようにするステップと、
前記オリジナル・ロックおよび前記拡張ロックの組にわたって、前記複数のプロセスによる前記リソースへの前記読取りアクセスおよび書込みアクセスを取得および解除するための要求を分散させることによって、前記コンテンション状態を解決するステップと
を含む、コンピュータ実装方法。
【請求項２】
前記オリジナル・ロックは既存のリーダ・ライタ・ロックの変更形であることによって、前記既存のリーダ・ライタ・ロックは前記拡張ロックの組とともに動作において使用可能な識別子の組を保持でき、前記コンピュータ実装方法はさらに、
前記拡張ロックの組の中の拡張ロックをリーダ・ロックとして指定することによって、前記指定された拡張ロックが前記リソースに対する読取りロックのみを取得、保持および解除するために使用可能になるステップを含む、請求項１に記載のコンピュータ実施方法。
【請求項３】
前記リソースに対する読取りロックの（ｉ）取得および（ｉｉ）解除のうち一方のための要求をプロセスから受け取るステップと、
前記要求を前記デュアル・モード・リーダ・ライタ・ロック内の拡張ロックに割り当てるステップと
をさらに含む、請求項１または２に記載のコンピュータ実装方法。
【請求項４】
前記プロセスからの、前記リソースに対する書込みロックの（ｉ）取得および（ｉｉ）解除のうち一方のための第２の要求は前記オリジナル・ロックに割り当てられる、請求項３に記載のコンピュータ実装方法。
【請求項５】
前記拡張ロックは、前記プロセスに関連する識別子から索引値を算出することによって、前記拡張ロックの組から選択され、前記索引値は前記拡張ロックを決定する、請求項３または４に記載のコンピュータ実装方法。
【請求項６】
前記拡張ロックは、前記拡張ロックが前記データ処理システムのプロセッサとの親和性を有するように前記拡張ロックの組から選択される、請求項３、４または５に記載のコンピュータ実装方法。
【請求項７】
前記リソースに対する書込みロックの（ｉ）取得および（ｉｉ）解除のうち一方のための要求を受け取るステップと、
前記要求を前記デュアル・モード・リーダ・ライタ・ロック内の前記オリジナル・ロックに割り当てるステップと
をさらに含む、先行する請求項のいずれかに記載のコンピュータ実装方法。
【請求項８】
前記デュアル・モード・リーダ・ライタ・ロックは、前記コンテンション状態が存在しないときには前記オリジナル・ロックのみを用いる第１のモードで動作し、
前記デュアル・モード・リーダ・ライタ・ロックは、前記コンテンション状態が存在するときには前記オリジナル・ロックおよび前記拡張ロックの組を用いる第２のモードで動作し、
前記デュアル・モード・リーダ・ライタ・ロックは、前記コンテンション状態が生じたときに前記第１のモードから前記第２のモードに切り替わり、
前記デュアル・モード・リーダ・ライタ・ロックは、前記コンテンション状態が中止されたときに前記第２のモードから前記第１のモードに切り替わる、
先行する請求項のいずれかに記載のコンピュータ実装方法。
【請求項９】
前記第１のモードから前記第２のモードに前記切り替わるステップによって、前記リソースに対するロックに対する複数の原子動作を、（ｉ）前記オリジナル・ロックおよび前記拡張ロックの組の中の拡張ロック、ならびに（ｉｉ）前記拡張ロックの組の中の２つの拡張ロック、のうちの一方に対して同時に実行させることによって、前記コンテンション状態を取り除く、請求項８に記載のコンピュータ実装方法。
【請求項１０】
メモリ内の領域をロックとして用いるために割り当てるステップであって、前記拡張ロックの組を前記作成するステップは、前記領域における前記拡張ロックの組に対するスペースの組を指定する、ステップ
をさらに含む、先行する請求項のいずれかに記載のコンピュータ実装方法。
【請求項１１】
デュアル・モード・リーダ・ライタ・ロックのためのコンピュータ使用可能コードを含むコンピュータ使用可能記憶媒体を含むコンピュータ使用可能プログラム製品であって、前記コンピュータ使用可能コードは、
オリジナル・ロックの使用におけるコンテンション状態を定めるためのコンピュータ使用可能コードであって、前記オリジナル・ロックはデータ処理システムにおいて利用可能なリソースに対応し、前記オリジナル・ロックは前記データ処理システムにおいて実行する複数のプロセスによる前記リソースへの読取りアクセスおよび書込みアクセスを管理する、コンピュータ使用可能コードと、
前記オリジナル・ロックとともに使用するための拡張ロックの組を作成するためのコンピュータ使用可能コードであって、前記オリジナル・ロックおよび前記拡張ロックの組は前記デュアル・モード・リーダ・ライタ・ロックを形成し、前記デュアル・モード・リーダ・ライタ・ロックは前記リソースへの前記読取りアクセスおよび書込みアクセスを管理するように動作する、コンピュータ使用可能コードと、
前記オリジナル・ロック内の索引を用いて前記拡張ロックの組の各拡張ロックに索引を付けることによって、前記索引を用いて各拡張ロックを位置付けできるようにするためのコンピュータ使用可能コードと、
前記オリジナル・ロックおよび前記拡張ロックの組にわたって、前記複数のプロセスによる前記リソースへの前記読取りアクセスおよび書込みアクセスを取得および解除するための要求を分散させることによって、前記コンテンション状態を解決するためのコンピュータ使用可能コードと
を含む、コンピュータ使用可能プログラム製品。
【請求項１２】
前記オリジナル・ロックは既存のリーダ・ライタ・ロックの変更形であることによって、前記既存のリーダ・ライタ・ロックは前記拡張ロックの組とともに動作において使用可能な識別子の組を保持でき、前記コンピュータ使用可能プログラム製品はさらに、
前記拡張ロックの組の中の拡張ロックをリーダ・ロックとして指定することによって、前記指定された拡張ロックが前記リソースに対する読取りロックのみを取得、保持および解除するために使用可能になるためのコンピュータ使用可能コードを含む、請求項１１に記載のコンピュータ使用可能プログラム製品。
【請求項１３】
前記リソースに対する読取りロックの（ｉ）取得および（ｉｉ）解除のうち一方のための要求をプロセスから受け取るためのコンピュータ使用可能コードと、
前記要求を前記デュアル・モード・リーダ・ライタ・ロック内の拡張ロックに割り当てるためのコンピュータ使用可能コードと
をさらに含む、請求項１１または１２に記載のコンピュータ使用可能プログラム製品。
【請求項１４】
前記プロセスからの、前記リソースに対する書込みロックの（ｉ）取得および（ｉｉ）解除のうち一方のための第２の要求は前記オリジナル・ロックに割り当てられる、請求項１３に記載のコンピュータ使用可能プログラム製品。
【請求項１５】
前記拡張ロックは、前記プロセスに関連する識別子から索引値を算出することによって、前記拡張ロックの組から選択され、前記索引値は前記拡張ロックを決定する、請求項１３または１４に記載のコンピュータ使用可能プログラム製品。
【請求項１６】
前記拡張ロックは、前記拡張ロックが前記データ処理システムのプロセッサとの親和性を有するように前記拡張ロックの組から選択される、請求項１３、１４または１５に記載のコンピュータ使用可能プログラム製品。
【請求項１７】
前記リソースに対する書込みロックの（ｉ）取得および（ｉｉ）解除のうち一方のための要求を受け取るためのコンピュータ使用可能コードと、
前記要求を前記デュアル・モード・リーダ・ライタ・ロック内の前記オリジナル・ロックに割り当てるためのコンピュータ使用可能コードと
をさらに含む、請求項１１から１６のいずれか１項に記載のコンピュータ使用可能プログラム製品。
【請求項１８】
前記デュアル・モード・リーダ・ライタ・ロックは、前記コンテンション状態が存在しないときには前記オリジナル・ロックのみを用いる第１のモードで動作し、
前記デュアル・モード・リーダ・ライタ・ロックは、前記コンテンション状態が存在するときには前記オリジナル・ロックおよび前記拡張ロックの組を用いる第２のモードで動作し、
前記デュアル・モード・リーダ・ライタ・ロックは、前記コンテンション状態が生じたときに前記第１のモードから前記第２のモードに切り替わり、
前記デュアル・モード・リーダ・ライタ・ロックは、前記コンテンション状態が中止されたときに前記第２のモードから前記第１のモードに切り替わる、
請求項１１から１７のいずれか１項に記載のコンピュータ使用可能プログラム製品。
【請求項１９】
前記第１のモードから前記第２のモードに前記切り替わるステップによって、前記リソースに対するロックに対する複数の原子動作を、（ｉ）前記オリジナル・ロックおよび前記拡張ロックの組の中の拡張ロック、ならびに（ｉｉ）前記拡張ロックの組の中の２つの拡張ロック、のうちの一方に対して同時に実行させることによって、前記コンテンション状態を取り除く、請求項１８に記載のコンピュータ使用可能プログラム製品。
【請求項２０】
メモリ内の領域をロックとして用いるために割り当てるステップをさらに含み、前記拡張ロックの組を前記作成するステップは、前記領域における前記拡張ロックの組に対するスペースの組を指定する、
請求項１１から１９のいずれか１項に記載のコンピュータ使用可能プログラム製品。
【請求項２１】
前記コンピュータ使用可能コードはデータ処理システム内のコンピュータ可読記憶媒体に保存され、前記コンピュータ使用可能コードは遠隔データ処理システムからネットワーク上を送信される、請求項１１から２０のいずれか１項に記載のコンピュータ使用可能プログラム製品。
【請求項２２】
前記コンピュータ使用可能コードはサーバ・データ処理システム内のコンピュータ可読記憶媒体に保存され、前記コンピュータ使用可能コードはネットワーク上で遠隔データ処理システムにダウンロードされて、前記遠隔データ処理システムに関連するコンピュータ可読記憶媒体において使用される、請求項１１から２１のいずれか１項に記載のコンピュータ使用可能プログラム製品。
【請求項２３】
デュアル・モード・リーダ・ライタ・ロックのためのデータ処理システムであって、前記データ処理システムは、
記憶媒体を含む記憶装置であって、前記記憶装置はコンピュータ使用可能プログラム・コードを保存する、記憶装置と、
プロセッサであって、前記プロセッサは前記コンピュータ使用可能プログラム・コードを実行する、プロセッサと
を含み、前記コンピュータ使用可能プログラム・コードは、
オリジナル・ロックの使用におけるコンテンション状態を定めるためのコンピュータ使用可能コードであって、前記オリジナル・ロックはデータ処理システムにおいて利用可能なリソースに対応し、前記オリジナル・ロックは前記データ処理システムにおいて実行する複数のプロセスによる前記リソースへの読取りアクセスおよび書込みアクセスを管理する、コンピュータ使用可能コードと、
前記オリジナル・ロックとともに使用するための拡張ロックの組を作成するためのコンピュータ使用可能コードであって、前記オリジナル・ロックおよび前記拡張ロックの組は前記デュアル・モード・リーダ・ライタ・ロックを形成し、前記デュアル・モード・リーダ・ライタ・ロックは前記リソースへの前記読取りアクセスおよび書込みアクセスを管理するように動作する、コンピュータ使用可能コードと、
前記オリジナル・ロック内の索引を用いて前記拡張ロックの組の各拡張ロックに索引を付けることによって、前記索引を用いて各拡張ロックを位置付けできるようにするためのコンピュータ使用可能コードと、
前記オリジナル・ロックおよび前記拡張ロックの組にわたって、前記複数のプロセスによる前記リソースへの前記読取りアクセスおよび書込みアクセスを取得および解除するための要求を分散させることによって、前記コンテンション状態を解決するためのコンピュータ使用可能コードと
を含む、データ処理システム。
【請求項２４】
前記オリジナル・ロックは既存のリーダ・ライタ・ロックの変更形であることによって、前記既存のリーダ・ライタ・ロックは前記拡張ロックの組とともに動作において使用可能な識別子の組を保持でき、前記データ処理システムはさらに、
前記拡張ロックの組の中の拡張ロックをリーダ・ロックとして指定することによって、前記指定された拡張ロックが前記リソースに対する読取りロックのみを取得、保持および解除するために使用可能になるためのコンピュータ使用可能コードを含む、請求項２３に記載のデータ処理システム。
【請求項２５】
前記リソースに対する読取りロックの（ｉ）取得および（ｉｉ）解除のうち一方のための要求をプロセスから受け取るためのコンピュータ使用可能コードと、
前記要求を前記デュアル・モード・リーダ・ライタ・ロック内の拡張ロックに割り当てるためのコンピュータ使用可能コードと
をさらに含む、請求項２３または２４に記載のデータ処理システム。
【請求項２６】
前記プロセスからの、前記リソースに対する書込みロックの（ｉ）取得および（ｉｉ）解除のうち一方のための第２の要求は前記オリジナル・ロックに割り当てられる、請求項２５に記載のデータ処理システム。
【請求項２７】
前記拡張ロックは、前記プロセスに関連する識別子から索引値を算出することによって、前記拡張ロックの組から選択され、前記索引値は前記拡張ロックを決定する、請求項２５または２６に記載のデータ処理システム。
【請求項２８】
前記拡張ロックは、前記拡張ロックが前記データ処理システムのプロセッサとの親和性を有するように前記拡張ロックの組から選択される、請求項２５、２６または２７に記載のデータ処理システム。
【請求項２９】
前記リソースに対する書込みロックの（ｉ）取得および（ｉｉ）解除のうち一方のための要求を受け取るためのコンピュータ使用可能コードと、
前記要求を前記デュアル・モード・リーダ・ライタ・ロック内の前記オリジナル・ロックに割り当てるためのコンピュータ使用可能コードと
をさらに含む、請求項２３から２８のいずれか１項に記載のデータ処理システム。
【請求項３０】
前記デュアル・モード・リーダ・ライタ・ロックは、前記コンテンション状態が存在しないときには前記オリジナル・ロックのみを用いる第１のモードで動作し、
前記デュアル・モード・リーダ・ライタ・ロックは、前記コンテンション状態が存在するときには前記オリジナル・ロックおよび前記拡張ロックの組を用いる第２のモードで動作し、
前記デュアル・モード・リーダ・ライタ・ロックは、前記コンテンション状態が生じたときに前記第１のモードから前記第２のモードに切り替わり、
前記デュアル・モード・リーダ・ライタ・ロックは、前記コンテンション状態が中止されたときに前記第２のモードから前記第１のモードに切り替わる、
請求項２３から２９のいずれか１項に記載のデータ処理システム。
【請求項３１】
前記第１のモードから前記第２のモードに前記切り替わるステップによって、前記リソースに対するロックに対する複数の原子動作を、（ｉ）前記オリジナル・ロックおよび前記拡張ロックの組の中の拡張ロック、ならびに（ｉｉ）前記拡張ロックの組の中の２つの拡張ロック、のうちの一方に対して同時に実行させることによって、前記コンテンション状態を取り除く、請求項３０に記載のデータ処理システム。
【請求項３２】
メモリ内の領域をロックとして用いるために割り当てるステップをさらに含み、前記拡張ロックの組を前記作成するステップは、前記領域における前記拡張ロックの組に対するスペースの組を指定する、
請求項２３から３１のいずれか１項に記載のデータ処理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は一般的に改善されたデータ処理システムに関し、特にデュアル・モード・リーダ・ライタ・ロック（ｄｕａｌ  ｍｏｄｅ  ｒｅａｄｅｒ  ｗｒｉｔｅｒ  ｌｏｃｋ：ＤＭＬ）のためのコンピュータに実装される方法、システム、およびコンピュータ使用可能プログラム・コードに関する。
【背景技術】
【０００２】
データ処理システム内で実行するプロセスは、さまざまなリソースに関連するデータを読取ったり書込んだりする。データ・ファイル、メモリ場所およびディスク上のアドレスは、こうしたリソースのいくつかの例である。
【０００３】
データ処理システム内で実行するプロセスがリソースからデータを読取るか、またはリソースにデータを書込む必要があるとき、オペレーティング・システムはその読取り／書込み要求を順番付けて制御する必要がある。この制御は、複数のプロセスによる同じリソースに対する読取りおよび書込み要求がそのリソースのデータの保全性を損なわないことを確実にすることが重要である。たとえば、あるプロセスは、別のプロセスが同じデータを書込んでいるときにそのデータの読取りを許可されるべきではない。複数のプロセスが同じデータを同時に読取ることは許可されてもよいが、そのデータの書込みを試みている１つまたはそれ以上のプロセスと組み合わされてはならない。
【０００４】
データを読取ったり書込んだりするためのこれらの規則およびその他の規則を実装するために、オペレーティング・システムはロックを実装する。読取り書込みロックとは、あるプロセスが関連リソースのデータを読取りまたは書込みできるようになる前に、セットもしくはリセット、またはインクリメントもしくはデクリメントされる必要のあるデータを有するデータ構造のことである。こうしたロックは、リーダ・ライタ・ロック（ｒｅａｄｅｒ  ｗｒｉｔｅｒ  ｌｏｃｋ：ＲＷＬ）または複合（ｃｏｍｐｌｅｘ）ロックとしても公知である。
【０００５】
ＲＷＬをセットまたはインクリメントすることを、ロックを取得または獲得すると呼ぶ。ＲＷＬをリセットまたはデクリメントすることを、ロックを解除または解放すると呼ぶ。リーダ・ロックまたは読取りロックとは、プロセスまたはスレッドがＲＷＬに関連するリソースを読取ることを許可するようなＲＷＬの状態のことである。複数のプロセスまたはスレッドが、共通のリソースに対する読取りロックを同時に取得してもよい。ライタ・ロックまたは書込みロックとは、スレッドがＲＷＬに関連するリソースにデータを書込むことを許可するようなＲＷＬの状態のことである。あらゆる所与の時間に、単一のスレッドだけがリソースに対する単一の書込みロックを取得でき、別のスレッドがそのリソースに対する書込みロックを保持している間は、どのスレッドも読取りロックを保持したり取得したりできない。
【０００６】
典型的に、ＲＷＬは単一のデータ・ワードを用いて実装される。データ・ワードとは、オペレーティング・システムのアーキテクチャにおいて一緒に取扱われる特定のビット数のことである。１つの場合には、データ・ワードのサイズは、データ処理システムの特定のプロセッサ内の単一レジスタ中に保持できるビット数であってもよい。別の場合には、データ・ワードのサイズは、所与のメモリから所与のプロセッサに送信できる最小ビット数であってもよい。一般的に利用可能なオペレーティング・システムは、１６、３２、６４および１２８ビットのデータ・ワード・サイズを実装している。データ・ワードは、特定の実装に対して好適なあらゆるサイズであってもよい。
【０００７】
オペレーティング・システムがＲＷＬを操作するとき、ロックの保全性のためにその操作は中断されてはならない。言換えると、ＲＷＬをセットもしくはリセットするか、またはインクリメントもしくはデクリメントするためのすべての命令は、最初から最後まで別のプロセスに中断または阻止されることなく実行される必要がある。この態様で実行される必要のある命令の組を有する動作を原子動作（atomic operation:アトミック操作、不可分操作）と呼ぶ。ＲＷＬの操作は原子動作である。ロックの取得およびロックの解除は、原子動作として行なわれるロック操作の例である。
【０００８】
データ処理システムの動作中のあらゆる所与の時間に、いくつかのプロセスまたはスレッドが互いに時間的に非常に近接して共通のリソースに対するロックの取得を望むことがある。同時またはそれに近い時間に、ロックをすでに取得しているいくつかの他のプロセスまたはスレッドがロックの解除を望むことがある。ロックの取得または解除を望むいくつかのプロセスまたはスレッドはリソースに対する読取りロックを扱ってもよく、他のプロセスまたはスレッドは書込みロックを扱ってもよい。
【発明の概要】
【発明が解決しようとする課題】
【０００９】
例示的な実施形態は、デュアル・モード・リーダ・ライタ・ロックのための方法、システムおよびコンピュータ使用可能プログラム製品を提供する。
【課題を解決するための手段】
【００１０】
本発明のある実施形態は、オリジナル・ロックの使用におけるコンテンション状態を定める。オリジナル・ロックはデータ処理システムにおいて利用可能なリソースに対応する。オリジナル・ロックは、データ処理システムにおいて実行するいくつかのプロセスによるリソースへの読取りアクセスおよび書込みアクセスを管理する。この実施形態は、オリジナル・ロックとともに用いるための拡張ロックの組を作成する。オリジナル・ロックと拡張ロックの組とがデュアル・モード・リーダ・ライタ・ロックを形成する。デュアル・モード・リーダ・ライタ・ロックは、リソースへの読取りアクセスおよび書込みアクセスを管理するように動作する。この実施形態は、オリジナル・ロック内の索引を用いて拡張ロックの組の各拡張ロックに索引を付けることによって、各拡張ロックを索引によって位置付けできるようにする。この実施形態は、オリジナル・ロックおよび拡張ロックの組にわたって、いくつかのプロセスによるリソースへの読取りアクセスおよび書込みアクセスを取得および解除するための要求を分散させることによって、コンテンション状態を解決する。
【００１１】
別の実施形態において、オリジナル・ロックは既存のリーダ・ライタ・ロックの変更形であることによって、既存のリーダ・ライタ・ロックは拡張ロックの組とともに動作において使用可能な識別子の組を保持できる。この実施形態はさらに、拡張ロックの組の中の拡張ロックをリーダ・ロックとして指定する。このように指定することによって、指定された拡張ロックはリソースに対する読取りロックのみを取得、保持および解除するために使用可能になる。
【００１２】
別の実施形態はさらに、リソースに対する読取りロックを取得または解除するための要求をプロセスから受け取る。この実施形態は、その要求をデュアル・モード・リーダ・ライタ・ロック内の拡張ロックに割り当てる。
【００１３】
別の実施形態において、リソースに対する書込みロックを取得または解除するためのプロセスからの第２の要求は、オリジナル・ロックに割り当てられる。
【００１４】
別の実施形態において、拡張ロックは、プロセスに関連する識別子から索引値を算出することによって、拡張ロックの組から選択される。索引値は拡張ロックを決定する。
【００１５】
別の実施形態において、拡張ロックは、その拡張ロックがデータ処理システムのプロセッサとの親和性を有するように拡張ロックの組から選択される。
【００１６】
別の実施形態はさらに、リソースに対する書込みロックを取得または解除するための要求を受け取る。この実施形態は、その要求をデュアル・モード・リーダ・ライタ・ロック内のオリジナル・ロックに割り当てる。
【００１７】
別の実施形態において、デュアル・モード・リーダ・ライタ・ロックは、コンテンション状態が存在しないときにはオリジナル・ロックのみを用いる第１のモードで動作する。コンテンション状態が存在するときには、デュアル・モード・リーダ・ライタ・ロックはオリジナル・ロックおよび拡張ロックの組を用いる第２のモードで動作する。コンテンション状態が生じたときに、デュアル・モード・リーダ・ライタ・ロックは第１のモードから第２のモードに切り替わる。コンテンション状態が中止されたときに、デュアル・モード・リーダ・ライタ・ロックは第２のモードから第１のモードに切り替わる。
【００１８】
別の実施形態においては、第１のモードから第２のモードに切り替わることによって、リソースに対するロックに対するいくつかの原子動作を、オリジナル・ロックおよび拡張ロックの組の中の拡張ロック、または拡張ロックの組の中の２つの拡張ロックに対して同時に実行させることによって、コンテンション状態が取り除かれる。
【００１９】
別の実施形態はさらに、メモリ内の領域をロックとして用いるために割り当てる。拡張ロックの組の作成は、その領域における拡張ロックの組に対するスペースの組を指定する。
【００２０】
本発明の特徴と考えられる新規の特徴が添付の請求項に示される。しかしながら、本発明自体、ならびにその好ましい使用モード、さらなる目的および利点は、添付の図面とともに読まれるときの例示的実施形態の以下の詳細な説明を参照することによって最もよく理解されるであろう。
【図面の簡単な説明】
【００２１】
【図１】例示的実施形態を実装し得るデータ処理システムのネットワークを表す図である。
【図２】例示的実施形態を実装し得るデータ処理システムを示すブロック図である。
【図３】例示的実施形態を実装し得るデータ処理システムにおけるＲＷＬを用いた動作を示すブロック図である。
【図４】例示的実施形態に従うＤＭＬを示すブロック図である。
【図５】例示的実施形態に従って拡張ロックを使用するためのＤＭＬの構成を示すブロック図である。
【図６】図６Ａは、例示的実施形態に従うＤＭＬの代替的実施形態を示すブロック図である。図６Ｂは、例示的実施形態に従うＤＭＬの別の代替的実施形態を示すブロック図である。
【図７】例示的実施形態に従う拡張ロックまたはリーダ・ロック要素の構成の例を示すブロック図である。
【図８】例示的実施形態に従うＤＭＬ内の特定のオリジナル・ロックまたは拡張ロックにプロセスまたはスレッドを割り当てる方法の例を示すブロック図である。
【図９】例示的実施形態に従うＤＭＬを用いて読取りおよび書込みロックを管理することを示すブロック図である。
【図１０】例示的実施形態に従うＤＭＬを作成するプロセスの例を示す流れ図である。
【図１１】例示的実施形態に従って拡張ロックに対するメモリ・スペースを割り当てるプロセスを示す流れ図である。
【図１２】例示的実施形態に従って特定の拡張ロックを特殊化するプロセスを示す流れ図である。
【図１３】例示的実施形態に従ってＤＭＬ内の特定のオリジナル・ロックまたは拡張ロックにスレッドまたはプロセスを割り当てるプロセスを示す図である。
【発明を実施するための形態】
【００２２】
特定の状況下では、いくつかのプロセスまたはスレッドからのロックを取得または解除するための各要求に対するいくつかの原子動作がデータ処理システム内で保留中になることがある。本発明は、ＲＷＬに対するいくつかの原子動作がデータ処理システムに殺到することがデータ処理システムの性能に悪影響をもたらし得ることを認識している。
【００２３】
説明を明確にするために、「プロセス」はプロセスまたはプロセスのスレッドを意味するために用いられる。本発明の範囲内で、プロセスに関する動作はスレッドにも同様に適用可能であり、スレッドに関する動作はプロセスにも同様に適用可能である。
【００２４】
本発明はさらに、特定の他の状況下では、ロックのデータ構造が飽和してそれ以上のロック要求を収容できないことがあることを認識している。たとえば、２ビットの仮想サイズのデータ・ワードは、もし４つのスレッドが関連リソースに対する読取りロックをすでに保持していれば飽和する。なぜなら、２ビットは０から４だけをカウントするために用いられ得るからである。読取りロックを要求する第５のスレッドは、読取りロックを保持する他の４つのプロセスの１つがその読取りロックを解除するまで収容されることができない。本発明は、データ処理システム内のＲＷＬに対する実行を待っている原子動作のバックログもデータ処理システムの性能に悪影響をもたらし得ることを認識している。
【００２５】
これらの状況は、データ処理システムにおいてＲＷＬに対するコンテンションが生じるシナリオの例である。本発明は、ＲＷＬを争うプロセスまたはスレッドの数が閾値数よりも増えたときにデータ処理システム内でＲＷＬに対するコンテンションが起こるであろうことを認識している。本発明はさらに、たとえばマルチプロセッサ・データ処理システムまたは論理区画などのように、データ処理システム内のプロセッサの数が増えるにつれてプロセスおよびスレッドの数も増えてＲＷＬコンテンションにつながることを認識している。
【００２６】
本発明を説明するために用いられる例示的実施形態は、一般的にＲＷＬに関する上述の問題およびその他の問題に対処して解決するものである。例示的実施形態は、デュアル・モード・リーダ・ライタ・ロックのための方法、コンピュータ使用可能プログラム製品、およびデータ処理システムを提供する。
【００２７】
本発明の実施形態は、原子動作の数が閾値数に達したときに、データ処理システムが現在構成されるデータ処理システムよりもシステム性能に対する影響を低くしながらＲＷＬに対する原子動作を処理することを可能にしてもよい。たとえば、単一のＲＷＬに対して行なわれる同数の原子動作に対して、本発明の実施形態を実装するデータ処理システムは、この実施形態なしのデータ処理システムよりも良好なシステム性能を示し得る。
【００２８】
本発明の実施形態は、現在構成されるデータ処理システムよりもシステム性能に対する悪影響を減少させながら、より多くのプロセスおよびスレッドがロックを同時に取得および解除することも可能にしてもよい。たとえば、同じシステム性能に対して、本発明の実施形態を用いるデータ処理システムは、この実施形態なしのデータ処理システムよりも多くのプロセスがリソースに対する読取りロックを取得することを可能にしてもよい。
【００２９】
例示的実施形態は、単なる例としてのデータ、データ構造および識別子に関して説明される。こうした説明が本発明を限定することは意図されていない。たとえば、６４ビットのデータ・ワードに関して説明される例示的実施形態は、本発明の範囲内で１２８ビットのデータ・ワードを用いて類似の態様で実装されてもよい。
【００３０】
さらに、例示的実施形態はあらゆるタイプのデータ処理システムに関して実装されてもよい。たとえば、マルチプロセッサ・スタンドアロン・データ処理システムに関して説明される例示的実施形態は、本発明の範囲内でマルチプロセッサ論理区画システムにおいて実装されてもよい。
【００３１】
例示的実施形態はさらに、単なる例としての特定のパラメータ、属性および構成に関して説明される。こうした説明が本発明を限定することは意図されていない。本発明の実施形態は、たとえばあらゆるタイプのクライアント・システム、サーバ・システム、プラットフォーム、またはその組み合わせなど、あらゆるタイプのデータ処理システムに関して実装されてもよい。
【００３２】
実施形態を実装するアプリケーションは、データ・オブジェクト、コード・オブジェクト、カプセル化命令、アプリケーション・フラグメント、サービス、およびデータ処理環境において利用可能な他のタイプのソフトウェア実装の形を取ってもよい。たとえばＪａｖａ（Ｒ）仮想マシン（Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ）（ＪＶＭ（Ｒ））、Ｊａｖａ（Ｒ）オブジェクト、エンタープライズＪａｖａビーン（Ｅｎｔｅｒｐｒｉｓｅ  Ｊａｖａ  Ｂｅａｎ：ＥＪＢ（Ｒ））、サーブレット、またはアプレットなどは、それに関して、その中で、またはそれを用いて本発明を実装してもよいアプリケーションを表してもよい。（Ｊａｖａ、ＪＶＭ、ＥＪＢおよびその他のＪａｖａ関連の用語は、米国およびその他の国におけるサン・マイクロシステムズ社の登録商標である。）
【００３３】
例示的実施形態は、ハードウェア、ソフトウェアまたはその組み合わせにおいて実装されてもよい。本開示における例は説明を明確にするためにのみ用いられ、例示的実施形態を限定するものではない。本開示から、類似の目的のために付加的な、または異なる情報、データ、動作、アクション、タスク、アクティビティ、および操作が考えられ、それらは例示的実施形態の範囲内で予期される。
【００３４】
例示的実施形態は、単なる例としての特定のコード、データ構造、ファイル・システム、設計、アーキテクチャ、レイアウト、概略図、およびツールを用いて説明され、これらは例示的実施形態を限定するものではない。さらに、例示的実施形態はいくつかの場合に、説明を明確にするための単なる例としての特定のデータ処理環境を用いて説明される。例示的実施形態は、他の同等の、または類似の目的を有する構造、システム、アプリケーション、またはアーキテクチャとともに用いられてもよい。
【００３５】
本明細書において挙げられるあらゆる利点は単なる例であって、例示的実施形態を限定することは意図されていない。特定の例示的実施形態によって付加的な利点または異なる利点が実現されてもよい。さらに、特定の例示的実施形態は上に挙げられた利点のうちのいくつか、またはすべてを有していてもよいし、どれも有さなくてもよい。
【００３６】
図面を参照し、特に図１および図２を参照すると、これらの図面は例示的実施形態を実装し得るデータ処理環境の例を示す図である。図１および図２は単なる例であり、異なる実施形態を実装し得る環境に関するいかなる限定を主張または暗示することも意図されていない。以下の説明に基づいて、特定の実装がここに示される環境に多くの変更を加えてもよい。
【００３７】
図１は、例示的実施形態を実装し得るデータ処理システムのネットワークを表す図である。データ処理環境１００は、その中で例示的実施形態を実装し得るコンピュータのネットワークである。データ処理環境１００はネットワーク１０２を含む。ネットワーク１０２は、データ処理環境１００内でともに接続されているさまざまなデバイスおよびコンピュータ間の通信リンクを提供するために用いられる媒体である。ネットワーク１０２は、たとえばワイヤ、無線通信リンク、または光ファイバ・ケーブルなどの接続を含んでもよい。サーバ１０４およびサーバ１０６は、記憶装置１０８とともにネットワーク１０２に結合している。データ処理環境１００内のあらゆるコンピュータ上でソフトウェア・アプリケーションが実行されてもよい。
【００３８】
加えて、クライアント１１０、１１２および１１４がネットワーク１０２に結合している。データ処理システム、たとえばサーバ１０４もしくは１０６、またはクライアント１１０、１１２もしくは１１４などはデータを含んでもよく、さらにそこで実行されるソフトウェア・アプリケーションまたはソフトウェア・ツールを有してもよい。
【００３９】
サーバ１０４は複数のプロセッサ１０５を含んでもよい。図示される他のデータ処理システムも類似の態様で２つ以上のプロセッサを含んでもよい（図示せず）。サーバ１０４はさらにＤＭＬ１０７を含んでもよい。ＤＭＬ１０７は本発明の実施形態に従うＤＭＬであってもよい。ＤＭＬ１０７は、限定なしに他のＲＷＬとともにサーバ１０４内で実装されてもよい。さらに、ＤＭＬ１０７はサーバ１０４以外のデータ処理システム、たとえばサーバ１０６などにおいて構成されてもよく、ネットワーク１０２上でサーバ１０４に対してアクセス可能であってもよい。
【００４０】
サーバ１０４および１０６、記憶装置１０８、ならびにクライアント１１０、１１２および１１４は、有線接続、無線通信プロトコル、またはその他の好適なデータ接続性を用いてネットワーク１０２に結合してもよい。クライアント１１０、１１２および１１４は、たとえばパーソナル・コンピュータまたはネットワーク・コンピュータなどであってもよい。
【００４１】
図示される例において、サーバ１０４はたとえばブート・ファイル、オペレーティング・システム・イメージ、およびアプリケーションなどのデータをクライアント１１０、１１２および１１４に提供してもよい。この例において、クライアント１１０、１１２および１１４はサーバ１０４に対するクライアントであってもよい。クライアント１１０、１１２、１１４、またはその何らかの組み合わせは、それら自身のデータ、ブート・ファイル、オペレーティング・システム・イメージ、およびアプリケーションを含んでもよい。データ処理環境１００は、図示されない付加的なサーバ、クライアントおよびその他のデバイスを含んでもよい。
【００４２】
図示される例において、データ処理環境１００はインターネットであってもよい。ネットワーク１０２は、伝送制御プロトコル／インターネット・プロトコル（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ／Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ：ＴＣＰ／ＩＰ）およびその他のプロトコルを用いて互いに通信するネットワークおよびゲートウェイの集合体を表してもよい。インターネットの中心部は主要ノードまたはホスト・コンピュータの間のデータ通信リンクのバックボーンであり、そこにはデータおよびメッセージを送る何千もの商業用、政府用、教育用およびその他のコンピュータ・システムが含まれる。もちろんデータ処理環境１００は、たとえばイントラネット、ローカル・エリア・ネットワーク（ｌｏｃａｌ  ａｒｅａ  ｎｅｔｗｏｒｋ：ＬＡＮ）、または広域ネットワーク（ｗｉｄｅ  ａｒｅａ  ｎｅｔｗｏｒｋ：ＷＡＮ）などのいくつかの異なるタイプのネットワークとして実装されてもよい。図１は例として意図されるものであり、異なる例示的実施形態に対するアーキテクチャの限定として意図されるものではない。
【００４３】
他の使用の中でも特に、データ処理環境１００は、例示的実施形態を実装し得るクライアント・サーバ環境を実装するために用いられてもよい。クライアント・サーバ環境は、ソフトウェア・アプリケーションおよびデータがネットワーク全体に分散されることを可能にすることによって、クライアント・データ処理システムとサーバ・データ処理システムとの間の双方向性を用いることによってアプリケーションが機能する。さらにデータ処理環境１００はサービス指向アーキテクチャを用いてもよく、ここではネットワーク全体に分散された相互運用可能なソフトウェア構成要素がコヒーレント・ビジネス・アプリケーションとしてともにパッケージ化されてもよい。
【００４４】
図２を参照すると、この図面は例示的実施形態を実装し得るデータ処理システムのブロック図を示す。データ処理システム２００は、たとえば図１におけるサーバ１０４またはクライアント１１０などのコンピュータの例であり、ここには例示的実施形態のためにプロセスを実装するコンピュータ使用可能プログラム・コードまたは命令が位置付けられていてもよい。
【００４５】
図示される例において、データ処理システム２００は、ノース・ブリッジおよびメモリ・コントローラ・ハブ（Ｎｏｒｔｈ  Ｂｒｉｄｇｅ  ａｎｄ  ｍｅｍｏｒｙ  ｃｏｎｔｒｏｌｌｅｒ  ｈｕｂ：ＮＢ／ＭＣＨ）２０２と、サウス・ブリッジおよび入力／出力（Ｉ／Ｏ）コントローラ・ハブ（ｓｏｕｔｈ  ｂｒｉｄｇｅ  ａｎｄ  ｉｎｐｕｔ／ｏｕｔｐｕｔ（Ｉ／Ｏ）ｃｏｎｔｒｏｌｌｅｒ  ｈｕｂ：ＳＢ／ＩＣＨ）２０４とを含むハブ・アーキテクチャを用いる。処理装置２０６、メイン・メモリ２０８、およびグラフィックス・プロセッサ２１０は、ノース・ブリッジおよびメモリ・コントローラ・ハブ（ＮＢ／ＭＣＨ）２０２に結合される。処理装置２０６は１つまたはそれ以上のプロセッサを含んでもよく、１つまたはそれ以上の異種プロセッサ・システムを用いて実装されてもよい。特定の実装において、グラフィックス・プロセッサ２１０はアクセラレーテッド・グラフィックス・ポート（ａｃｃｅｌｅｒａｔｅｄ  ｇｒａｐｈｉｃｓ  ｐｏｒｔ：ＡＧＰ）を通じてＮＢ／ＭＣＨに結合されてもよい。
【００４６】
図示される例において、ローカル・エリア・ネットワーク（ＬＡＮ）アダプタ２１２はサウス・ブリッジおよびＩ／Ｏコントローラ・ハブ（ＳＢ／ＩＣＨ）２０４に結合される。オーディオ・アダプタ２１６、キーボードおよびマウス・アダプタ２２０、モデム２２２、読取り専用メモリ（ｒｅａｄ  ｏｎｌｙ  ｍｅｍｏｒｙ：ＲＯＭ）２２４、ユニバーサル・シリアル・バス（ｕｎｉｖｅｒｓａｌ  ｓｅｒｉａｌ  ｂｕｓ：ＵＳＢ）およびその他のポート２３２、ならびにＰＣＩ／ＰＣＩｅデバイス２３４は、バス２３８を通じてサウス・ブリッジおよびＩ／Ｏコントローラ・ハブ２０４に結合される。ハード・ディスク・ドライブ（Ｈａｒｄ  ｄｉｓｋ  ｄｒｉｖｅ：ＨＤＤ）２２６およびＣＤ−ＲＯＭ２３０は、バス２４０を通じてサウス・ブリッジおよびＩ／Ｏコントローラ・ハブ２０４に結合される。ＰＣＩ／ＰＣＩｅデバイスは、たとえばイーサネット・アダプタ、アドイン・カード、およびノート型コンピュータ用のＰＣカードなどを含んでもよい。ＰＣＩはカード・バス・コントローラを用いるのに対し、ＰＣＩｅは用いない。ＲＯＭ２２４は、たとえばフラッシュ・バイナリ入力／出力システム（ｂｉｎａｒｙ  ｉｎｐｕｔ／ｏｕｔｐｕｔ  ｓｙｓｔｅｍ：ＢＩＯＳ）などであってもよい。ハード・ディスク・ドライブ２２６およびＣＤ−ＲＯＭ２３０は、たとえば統合ドライブ・エレクトロニクス（ｉｎｔｅｇｒａｔｅｄ  ｄｒｉｖｅ  ｅｌｅｃｔｒｏｎｉｃｓ：ＩＤＥ）またはシリアル・アドバンスド・テクノロジ・アタッチメント（ｓｅｒｉａｌ  ａｄｖａｎｃｅｄ  ｔｅｃｈｎｏｌｏｇｙ  ａｔｔａｃｈｍｅｎｔ：ＳＡＴＡ）インタフェースなどを用いてもよい。スーパーＩ／Ｏ（ｓｕｐｅｒ  Ｉ／Ｏ：ＳＩＯ）デバイス２３６がサウス・ブリッジおよびＩ／Ｏコントローラ・ハブ（ＳＢ／ＩＣＨ）２０４に結合されてもよい。
【００４７】
オペレーティング・システムは処理装置２０６上で実行される。オペレーティング・システムは、図２のデータ処理システム２００内のさまざまな構成要素を調整してその制御を提供する。オペレーティング・システムは、たとえばマイクロソフト（Ｒ）ウィンドウズ（Ｒ）（マイクロソフトおよびウィンドウズは、米国およびその他の国におけるマイクロソフト社の登録商標である）、またはリナックス（Ｒ）（リナックスは、米国およびその他の国におけるリーナス・トーバルズの登録商標である）などの商業的に入手可能なオペレーティング・システムであってもよい。Ｊａｖａ（Ｒ）プログラミング・システムなどのオブジェクト指向プログラミング・システムがオペレーティング・システムとともに実行されてもよく、データ処理システム２００において実行中のＪａｖａ（Ｒ）プログラムまたはアプリケーションからオペレーティング・システムへの呼出しを提供する（Ｊａｖａは、米国およびその他の国におけるサン・マイクロシステムズ社の登録商標である）。
【００４８】
オペレーティング・システム、オブジェクト指向プログラミング・システム、およびアプリケーションまたはプログラムに対する命令は、ハード・ディスク・ドライブ２２６などの記憶装置に位置付けられており、処理装置２０６による実行のためにメイン・メモリ２０８にロードされてもよい。例示的実施形態のプロセスは、たとえばメイン・メモリ２０８、読取り専用メモリ２２４などのメモリ、または１つもしくはそれ以上の周辺デバイスなどに位置付けられてもよいコンピュータ実装命令を用いて、処理装置２０６によって行なわれてもよい。
【００４９】
図１〜２におけるハードウェアは、実装によって変動してもよい。図１〜２に示されるハードウェアに加えて、またはその代わりに、たとえばフラッシュ・メモリ、同等の不揮発性メモリ、または光ディスク・ドライブなど、他の内部ハードウェアまたは周辺デバイスが用いられてもよい。加えて、この例示的実施形態のプロセスがマルチプロセッサ・データ処理システムに適用されてもよい。
【００５０】
いくつかの実例において、データ処理システム２００はパーソナル・デジタル・アシスタント（ｐｅｒｓｏｎａｌ  ｄｉｇｉｔａｌ  ａｓｓｉｓｔａｎｔ：ＰＤＡ）であってもよく、これは一般的にフラッシュ・メモリによって構成されることによって、オペレーティング・システム・ファイルもしくはユーザ生成データまたはその両方を保存するための不揮発性メモリを提供する。バス・システムは、たとえばシステム・バス、Ｉ／Ｏバス、およびＰＣＩバスなどの１つまたはそれ以上のバスを含んでもよい。もちろんバス・システムは、ファブリックまたはアーキテクチャに取付けられた異なる構成要素またはデバイス間のデータ転送を提供するようなあらゆるタイプの通信ファブリックまたはアーキテクチャを用いて実装されてもよい。
【００５１】
通信装置は、データを送信および受信するために用いられる１つまたはそれ以上のデバイス、たとえばモデムまたはネットワーク・アダプタなどを含んでもよい。メモリは、たとえばメイン・メモリ２０８またはキャッシュ、たとえばノース・ブリッジおよびメモリ・コントローラ・ハブ２０２内にみられるキャッシュなどであってもよい。処理装置は１つまたはそれ以上のプロセッサまたはＣＰＵを含んでもよい。
【００５２】
図１〜２に示される例および上述の例は、アーキテクチャの限定を暗示することを意味するものではない。たとえばデータ処理システム２００は、ＰＤＡの形を取ることに加えて、タブレット・コンピュータ、ラップトップ・コンピュータ、または電話装置であってもよい。
【００５３】
図３を参照すると、この図面は例示的実施形態を実装し得るデータ処理システムにおけるＲＷＬを用いた動作のブロック図を示す。プロセス３０２、３０４および３０６は、データ処理システム内のプロセスまたはスレッド、たとえば図１におけるサーバ１０４などであってもよい。
【００５４】
プロセス３０２、３０４および３０６は、ロック・ワード３０８を用いて実装されるＲＷＬを取得または解除するために争っていてもよい。ロック・ワード３０８のＲＷＬは、プロセス３０２、３０４および３０６が読取りまたは書込みを争い得るリソース３１０に関連していてもよい。ロック・ワード３０８のＲＷＬは、現在利用可能なオペレーティング・システムにおいて用いられるようなＲＷＬであってもよい。たとえば、プロセス３０２はリソース３１０に対する読取りロックの取得を要求していてもよい。プロセス３０４はリソース３１０に対する書込みロックの取得を要求していてもよい。プロセス３０６はリソース３１０に対して前に取得した読取りロックの解除を要求していてもよい。
【００５５】
リソース３１０に対するロックを取得または解除するための各要求によって、ロック・ワード３０８で原子動作が実行されるか、または実行をスケジュールされる。原子更新（atomic update）３１２は、ロック・ワード３０８におけるこうした原子動作の１つまたはそれ以上を表す。
【００５６】
ロック・ワード３０８を実装して原子更新３１２を実行するオペレーティング・システムは、プロセス３０２、３０４および３０６と類似のもっと多くのプロセスまたはスレッドがロック・ワード３０８によって表されるＲＷＬの取得または解除を要求すると、性能が低下すると考えられる。
【００５７】
たとえば、図３に示されるとおりに動作するデータ処理システムの許容できる性能は、性能計量（ｍｅｔｒｉｃ）が閾値以上に残っていることによって定められてもよい。一実施形態において、プロセス３０２、３０４および３０６と類似のプロセスの総数がプロセスの閾値数を超えることは、データ処理システムの性能を許容できないものにすると解釈され得る。たとえば、構成例の１つにおいて、合計５０００のスレッドまたはプロセスがさまざまなＲＷＬに対する原子動作を実行するために争うことは、データ処理システムの性能を許容できないものにすると解釈され得る。
【００５８】
別の実施形態において、プロセス３０２、３０４および３０６と類似のプロセスの総数が特定のＲＷＬに対するプロセスの閾値数を超えることは、データ処理システムの性能を許容できないものにすると解釈され得る。たとえば、構成例の１つにおいて、１０００以上のスレッドがロック・ワード３０８を用いるロックを取得または解除するために争うことは、性能低下の原因と考えられ得る。
【００５９】
別の実施形態において、プロセス３０２、３０４および３０６と類似のプロセスの総数がプロセッサ数に対するプロセスの閾値比率を超えることは、データ処理システムの性能を許容できないものにすると解釈され得る。たとえば、構成例の１つにおいて、プロセッサ当り１０００以上のスレッドがＲＷＬを取得または解除するために争うことは、性能低下の原因と考えられ得る。
【００６０】
図４を参照すると、この図面は例示的実施形態に従うＤＭＬのブロック図を示す。実施形態に従うＤＭＬ４００は、オリジナル・ロック４０２を含む。オリジナル・ロック４０２は、たとえば図３におけるロック・ワード３０８など、現存するＲＷＬを表すために用いられるものなどのロック・ワードであってもよく、本発明の実施形態に従って修正されて、ＤＭＬ４００に拡張可能になっている。オリジナル・ロック４０２は「含有ロック（ｃｏｎｔａｉｎｉｎｇ  ｌｏｃｋ）」またはロックの「含有要素（ｃｏｎｔａｉｎｉｎｇ  ｅｌｅｍｅｎｔ）」とも呼ばれる。
【００６１】
ＤＭＬ４００はさらに、拡張ロック４０４、４０６、４０８および４１０を含む。オリジナル・ロック４０２ならびに拡張ロック４０４、４０６、４０８および４１０は、ＲＷＬがＤＭＬ４００に変換される前に現存するＲＷＬによって管理されていたリソースに対して単一のロックとして動作する。言換えると、オリジナル・ロック４０２と、拡張ロック４０４、４０６、４０８および４１０の各々とが単一ロックのロック要素を形成する。たとえばオペレーティング・システムの構成要素などのロック管理機構は、同じリソースに対するロックを管理するために、各ロック要素に対して別々に、個々に、かつ同じロックすなわちＤＭＬ４００における他のロック要素に対する動作とは独立に動作できる。
【００６２】
拡張ロック４０４〜４１０の各々は、ロック情報を保存するために使用可能なメモリ・スペースであってもよい。たとえば一実施形態においては、起動の際にオペレーティング・システムが、ロック・ワードを作成および保存するため、またはＲＷＬもしくはＤＭＬと組み合わせた他の使用のために確保される好適なサイズの好適なメモリ領域を指定してもよい。拡張ロックは「拡張要素」または「リーダ・ロック要素」とも呼ばれる。
【００６３】
拡張ロック４０４〜４１０は、こうして指定されたメモリ領域内の同サイズまたは異なるサイズのメモリ・スペースであってもよい。たとえば一実施形態において、拡張ロック４０４〜４１０の各々は単一ワードのサイズであってもよい。別の実施形態において、拡張ロック４０４〜４１０のいくつかは１ワードのサイズであってもよく、一方拡張ロック４０４〜４１０の他の拡張ロックは特定の実装に好適であるようにもっと大きいかまたは小さいサイズであってもよい。
【００６４】
別の実施形態において、拡張ロック４０４〜４１０を保存するためにあらゆるメモリ領域が使用可能であってもよい。たとえば、分散データ処理環境において、拡張ロック４０４〜４１０のいくつかの拡張ロックは１つのプロセッサに近いメモリ領域に位置付けられてもよく、他の拡張ロックは異なるプロセッサに近い異なるメモリ領域に位置付けられてもよい。言換えると、拡張ロック４０４〜４１０は、プロセッサとの親和性もしくはデバイスとの近さを考慮して、または他の考慮によって、メモリのあらゆる領域に分散されてもよい。
【００６５】
図４においては、説明を明確にするための単なる例として４つの拡張ロックが示される。本発明の範囲内で、あらゆる数の拡張ロックが作成されてもよく、異なるオリジナル・ロックが異なる態様で拡張されてもよい。たとえば１つのＲＷＬを拡張するために、ある実装が例示的実施形態の態様で４つの拡張ロックを作成してもよい。別のＲＷＬを拡張するために、その実装が８個、１６個、またはあらゆる他の数の拡張ロックを作成してもよい。
【００６６】
加えて、オリジナル・ロック４０２および拡張ロック４０４〜４１０は論理的ビューとしてのみ隣接して示されており、本発明を図示されるとおりに限定することは意図されていない。オリジナル・ロック４０２および拡張ロック４０４〜４１０の各々は、本発明の範囲内で特定の実装に好適であるように所与のメモリ内のどこに位置付けられてもよい。
【００６７】
例示的実施形態に従うと、オリジナル・ロック４０２は拡張ロック４０４〜４１０を用いて拡張される。オリジナル・ロック４０２をこの態様で拡張することによって、ロックのデータがメモリ・スペースの２つ以上のロック・ワードにわたって維持および操作されることが可能になる。ここではロックがオリジナル・ロック４０２および拡張ロック４０４〜４１０によって集合的に表される。このように表されたＤＭＬ４００に関する原子動作は、オリジナル・ロック４０２または拡張ロック４０４〜４１０のいずれかのメモリ・スペースに関して別々に進行できる。
【００６８】
たとえば、オリジナル・ロック４０２および拡張ロック４０４〜４１０の各々が１データ・ワードのサイズであると仮定する。特定のプロセスがオリジナル・ロック４０２のデータ・ワードを用いてＤＭＬ４００を取得または解除してもよい。こうしたロック動作に関連する原子動作は、オリジナル・ロック４０２を表すデータ・ワードに対して実行される。特定の他のプロセスが拡張ロック４０６のデータ・ワードを用いて同様にＤＭＬ４００を取得または解除してもよい。こうしたロック動作に関連する原子動作は、一般的に拡張ロック４０６を表すデータ・ワードに対して実行される。他のプロセスも同様にオリジナル・ロック４０２または拡張ロック４０４〜４１０の１つに割り当てられてもよい。
【００６９】
本開示の他の場所に説明されるとおり、特定の状態によって、１つの拡張ロックに割り当てられたプロセスがオリジナル・ロックまたは異なる拡張ロックに対して動作を実行することがある。さらに、すべての書込みロックはオリジナル・ロック４０２を用いるあらゆるプロセスによって取得され、保持され、解除される。さまざまなプロセスによって取得され、保持され、解除される読取りロックは、本発明の実施形態の態様でオリジナル・ロック４０２および拡張ロック４０４〜４１０のいずれかにわたって分散されてもよい。
【００７０】
現在、ＲＷＬを操作するための２つまたはそれ以上の原子動作が、現在使用されているＲＷＬのメモリ・スペースにおいて順次実行を待つ必要がある。この実施形態に従ってＲＷＬをＤＭＬ４００に拡張することによって、オペレーティング・システムが同じＤＭＬに関連する異なるメモリ・スペースにおいてこうした２つまたはそれ以上の原子動作を実行することが有利に可能になる。
【００７１】
ＤＭＬ４００は２つのモードで動作する。リソースに対するロックのコンテンションが閾値よりも低いとき、ＤＭＬ４００は拡張ロック４０４〜４１０を用いずにオリジナル・ロック４０２のみを用いて動作してもよい。こうした状況においては、リソースに対するすべての読取りおよび書込みロックがオリジナル・ロック４０２を用いて取得され、保持され、解除される。ロックに対するコンテンションが閾値に達するか、または閾値を超えるとき、ＤＭＬ４００は拡張してあらゆる数の拡張ロック４０４〜４１０を用い、実施形態の態様で動作する。
【００７２】
図５を参照すると、この図面は例示的実施形態に従って拡張ロックを使用するためのＤＭＬの構成のブロック図を示す。ＤＭＬ５００は図４のＤＭＬ４００と類似であってもよい。含有ロックまたはオリジナル・ロック５０２は、図４のオリジナル・ロック４０２と同様に用いられてもよい。拡張ロック５０４の部分は、図４の拡張ロック４０４〜４１０の対応部分と同様に用いられてもよい。
【００７３】
オリジナル・ロック５０２はロック・カウント５０６を含む。ロック・カウント５０６は、あらゆる所与の時間にオリジナル・ロック５０２に保持されているロックの数を保存するビットの組である。ビットの組は１ビットまたはそれ以上のビットである。
【００７４】
オリジナル・ロック５０２はインジケータの組をさらに含む。インジケータは特定の状態またはある状態の特定の値を示すビットの組である。インジケータの組は１つまたはそれ以上のインジケータである。ある規則が実行される必要があること、または実行されたことを定めるためにインジケータが用いられてもよい。
【００７５】
インジケータの例は１ビットだけの長さであってもよく、デバイスのオン／オフ状態、データまたはオプションの利用可能性／利用不可能性、およびその他の類似の状態を示すためにセットまたはリセットされてもよい。インジケータの別の例は数ビットの長さであってもよく、たとえば２ビットであることによって特定の状態の０から４のカウントを保存してもよい。ロック・カウント５０６は、こうしたマルチビット・インジケータの例であってもよい。
【００７６】
オリジナル・ロック５０２はさらに、「読取りモード」インジケータ５０８と、「インターロック」インジケータ５１０と、「アップグレード」インジケータ５１２と、「拡張」インジケータ５１４と、「拡張可能」インジケータ５１６と、拡張ロックの索引５１８とを含んでもよい。インジケータ５０８〜５１６はインジケータの組の例を形成し、本発明の範囲に対する限定なしに例示的実施形態を説明するために選択されたものである。
【００７７】
読取りモード・インジケータ５０８は、オリジナル・ロック５０２が読取りロックのみを保持するために用いられているのか、それとも読取りロックおよび書込みロックの両方を保持するために用いられているのかを示すために用いられてもよい。たとえば、読取りモード・インジケータ５０８が単一ビット・インジケータとして実装されるとき、ビット値０は、オリジナル・ロック５０２がロック・カウント５０６に書込みロック・カウントを保持している状態を示してもよい。さらにビット値０は、オリジナル・ロック５０２がロック・カウント５０６にまったくどのロックも保持しておらず、あらゆるタイプのロックを保持するために利用可能であることを示してもよい。反対にビット値１は、オリジナル・ロック５０２がロック・カウント５０６に少なくとも１つの読取りロック・カウントを保持している状態を示してもよい。
【００７８】
インターロック・インジケータ５１０は、本開示の他の場所に説明されるとおり、ＤＭＬ５００の使用中に起こる特定の状態に対処するために用いられてもよい。たとえば、オリジナル・ロック５０２の特定の状態をもたらすような原子動作によってオリジナル・ロック５０２が更新されるとき、その動作の前にインターロック・インジケータ５１０をセットする必要があることを規則が求めてもよい。
【００７９】
拡張インジケータ５１４は、ＤＭＬ５００が拡張ロック５０４を使用しているかどうかをプロセスに示してもよい。たとえば、拡張インジケータ５１４が単一ビット・インジケータとして実装されるとき、ビット値０は、ＤＭＬ５００が拡張ロック５０４を使用していない状態を示してもよい。反対にビット値１は、ＤＭＬ５００が拡張されて拡張ロック５０４の１つまたはそれ以上の拡張ロックを使用する状態を示してもよい。
【００８０】
アップグレード・インジケータ５１２は、過去にロックに対するコンテンション状態が起こったために単純なＲＷＬがＤＭＬ５００に変形し、ロックがＤＭＬ５００の形で存在することを示すために用いられてもよい。言換えると、アップグレード・インジケータ５１２は、ＤＭＬ５００が２つのモードのうちのどちらで動作しているかをプロセスに知らせるために用いられてもよい。たとえば、アップグレード・インジケータ５１２が単一ビット・インジケータとして実装されるとき、ビット値０は、ＤＭＬ５００がオリジナル・ロック５０２のみを用いて動作している状態を示してもよい。反対にビット値１は、ＤＭＬ５００がオリジナル・ロック５０２とともに拡張ロック５０４を使用している状態を示してもよい。
【００８１】
拡張可能インジケータ５１６は、ＤＭＬ５００が拡張可能か、または拡張ロック５０４を使用できるかどうかを示してもよい。たとえば、拡張可能インジケータ５１６が単一ビット・インジケータとして実装されるとき、ビット値０は、ＤＭＬ５００が拡張ロック５０４を使用できない状態を示してもよい。反対にビット値１は、ＤＭＬ５００が拡張されて拡張ロック５０４の１つまたはそれ以上の拡張ロックを使用し得る状態を示してもよい。たとえば、特定のＲＷＬは拡張された形よりも拡張されない形の方が好ましいことがあり、その選択を行なうために拡張可能インジケータ５１６が用いられてもよい。
【００８２】
一実施形態において、拡張可能インジケータ５１６は任意であってもよい。実施形態において用いられるとき、拡張可能インジケータ５１６は、実装が何らかの理由ですべてのロックを拡張しないことを選ぶ場合のスイッチとして用いられてもよい。拡張可能インジケータ５１６をこの態様で用いることによって、実施形態は特定のロックに対する拡張を選択的に禁じることが可能になる。拡張可能インジケータ５１６を伴わない実施形態において、その実施形態はすべてのロックが拡張可能であるとみなしてもよい。
【００８３】
拡張ロックの索引５１８は、拡張ロック５０４内のあらゆる数の拡張ロックの各々に対する参照を保持するように構成されてもよい。索引５１８を用いて、ロックの取得または解除を要求するプロセスはオリジナル・ロック５０２から拡張ロック５０４内のあらゆる拡張ロックを横断し、そこで要求に応じた動作を行なってもよい。
【００８４】
図６Ａを参照すると、この図面は例示的実施形態に従うＤＭＬの代替的実施形態のブロック図を示す。ＤＭＬ５５０は図５のＤＭＬ５００と類似であってもよい。ＤＭＬ５５０のオリジナル・ロック５５２は図５のオリジナル・ロック５０２と類似であってもよい。
【００８５】
この図面の実施形態は、オリジナル・ロック５５２が書込みロックを保存するために用いられているときに使用可能であってもよい。書込みロックを保存するためにＤＭＬ５５０を用い得るスレッドに関連する識別子を保持するために、図５のロック・カウント５０６が用いられてもよい。こうしたスレッドは書込みロックのオーナとなる。したがって、ロック・カウントまたは書込みロック・オーナ識別子５５４を保存するために、図５のロック・カウント５０６の一部またはすべてのビットが用いられてもよい。
【００８６】
図６Ｂを参照すると、この図面は例示的実施形態に従うＤＭＬの別の代替的実施形態のブロック図を示す。ＤＭＬ５７０は図５のＤＭＬ５００と類似であってもよい。ＤＭＬ５７０のオリジナル・ロック５７２は図５のオリジナル・ロック５０２と類似であってもよい。
【００８７】
この図面の実施形態は、オリジナル・ロック５７２が書込みロックを保存するために用いられているときに代替的に使用可能であってもよい。ロック・カウント５７４は図５のロック・カウント５０６と類似であってもよい。オリジナル・ロック５７２は書込みロック・オーナ識別子５７６をさらに含んでもよい。識別子５７６は、書込みロックを保存するためにＤＭＬ５７０を用い得るスレッドに関連する識別子を保持するために用いられてもよい。ロック・カウント５７４は、図５のロック・カウント５０６と類似の値を保持し続けてもよい。
【００８８】
図７を参照すると、この図面は例示的実施形態に従う拡張ロックまたはリーダ・ロック要素の構成の例のブロック図を示す。拡張ロック６０２は、図５の拡張ロック５０４内のいずれかの拡張ロックと同様に実装されてもよい。
【００８９】
拡張ロック６０２はロック・カウント６０４を含む。ロック・カウント６０４は、拡張ロック６０２内に保持されるロックの数を把握している。ロック・カウント６０４のビットは、図５のロック・カウント５０６のビットと類似の態様で動作して使用可能である。たとえば図７の拡張ロック６０２を用いる図５のＤＭＬ５００などのＤＭＬの実装において、あらゆる所与の時間にＤＭＬが保持するロックの総数は、オリジナル・ロックと、その時間に使用中である各拡張ロックとのロック・カウントの値の合計である。
【００９０】
拡張ロック６０２はインジケータの組をさらに含む。拡張ロック６０２のインジケータの組は、図５のオリジナル・ロック５０２におけるインジケータの組と同様に修正されるか、または伸長されてもよい。読取りモード・インジケータ６０６は、拡張ロック６０２内のインジケータであってもよい。一実施形態において、読取りモード・インジケータ６０６は、図５の読取りモード・インジケータ５０８と類似の態様で動作してもよい。別の実施形態において、読取りモード・インジケータ６０６は、拡張ロック６０２が読取りロックのみを保持するために使用されているのか、それとも異なるタイプのロックの組み合わせを保持するのかを示すために用いられてもよい。
【００９１】
拡張ロック６０２はさらにアップグレード・インジケータ６０８を含んでもよい。一実施形態において、アップグレード・インジケータ６０８は図５のオリジナル・ロック５０２のアップグレード・インジケータ５１２に対応していてもよく、拡張ロック６０２が図５のオリジナル・ロック５０２のアップグレードにおける拡張ロックであることを示してもよい。別の実施形態において、アップグレード・インジケータ６０８は拡張ロック６０２自体のアップグレードを示すために用いられてもよい。たとえば、拡張ロック６０２が拡張ロックの組とともに拡張されることによって、拡張ロック６０２の使用中に起こり得るあらゆるコンテンションに対処してもよい。拡張ロックの組は１つまたはそれ以上の拡張ロックである。
【００９２】
本開示から明らかになり得る他のインジケータの例として、拡張ロック６０２の実装はマルチビットのロック番号インジケータ６１０を任意に含んでもよい。ロック番号インジケータ６１０は、拡張ロック６０２を参照するために図５の拡張ロックの索引５１８の代わりに用いられても、またはそれに加えて用いられてもよい。
【００９３】
図５のオリジナル・ロック５０２および図７の拡張ロック６０２は、記載された情報をすべて保存するためにあらゆるビット数を含んでもよい。オリジナル・ロック５０２または拡張ロック６０２は、あらゆる特定の情報を保存するためにあらゆるビット数をさらに用いてもよい。たとえば、インジケータのいずれか、たとえば「読取りモード」インジケータまたは「拡張可能」インジケータなどが２ビット以上を用いて保存されてもよい。オリジナル・ロックおよび拡張ロックにおいて類似のインジケータが用いられるとき、類似のインジケータの値を保持するために異なるビット数が用いられてもよい。
【００９４】
さらに、例示的実施形態の範囲内で類似の機能を行なうためにこれらのインジケータが修正、補足、増補、増強されるか、または別様で変更されてもよい。これらのインジケータはインジケータの限定的な組となることは意図されておらず、本明細書において例示的実施形態を明確にするためにのみ選択されて記載されるものである。本開示から付加的なインジケータが明らかとなるだろうし、それらは本発明の範囲内で予期されるものである。
【００９５】
図５および図７に示されるインジケータの組は、本発明の範囲内であらゆる特定のインジケータが占有し得るビット位置を限定することなく例示的なやり方で配置されている。これらのインジケータおよびあらゆる他のインジケータは、本発明の範囲から逸脱することなくあらゆる順序で図５のオリジナル・ロック５０２または図７の拡張ロック６０２のメモリ・スペース内であらゆる好適なビットを占有してもよい。
【００９６】
図８を参照すると、この図面は例示的実施形態に従うＤＭＬ内の特定のオリジナル・ロックまたは拡張ロックにプロセスまたはスレッドを割り当てる方法の例のブロック図を示す。ロック番号７０２は、ＤＭＬ内のオリジナル・ロックまたは特定の拡張ロックに関連する番号または索引であってもよい。たとえばロック番号７０２は、図５に示されるＤＭＬ５００の拡張ロック５０４内の特定の拡張ロックを参照し得る、拡張ロックの索引５１８におけるエントリであってもよい。
【００９７】
スレッド７０４は、ＤＭＬを用いてロックの取得または解除を要求している実例プロセスのスレッドの例であってもよい。スレッド７０４は例示的実施形態の説明を明確にするためにのみ用いられるものであって、本発明を限定することは意図されていない。スレッド７０４はスレッド、プロセス、またはデータ処理環境においてロックを取得および解除できるあらゆるその他の機構であってもよい。
【００９８】
スレッド７０４は自身に関連付けられた識別子を有してもよく、その識別子はスレッド７０４が実行され得るデータ処理システムにおいてスレッド７０４を一意に識別するために使用されてもよい。スレッド識別子７０６はこうした識別子の１つであってもよい。
【００９９】
実施形態例の１つにおいては、スレッド識別子７０６からロック番号７０２が算出７０８されることによって、スレッド７０４と、ロック番号７０２に関連するオリジナル・ロックまたは拡張ロックとの間の結合、親和性、関係または割り当てが形成されてもよい。たとえば、ＤＭＬの例は所与の場合に１つのオリジナル・ロックと４つの拡張ロックとを使用していてもよい。スレッド識別子７０６がハッシュ化されて０から４の間の数が得られてもよい。ハッシュ値が０であれば、スレッド７０４はオリジナル・ロックに割り当てられてもよく、そのスレッド７０４が関連リソースとともに行なうロックの取得または解除のすべてがオリジナル・ロックを用いて追跡される。同様に、ハッシュ値が１、２、３または４であれば、スレッド７０４はそれぞれ拡張ロック１、２、３または４に割り当てられてもよい。
【０１００】
一実施形態において、ハッシュ値は読取りロックを保存するためにどの拡張ロックを用いるかを示してもよく、書込みロックはオリジナル・ロックに保存されていてもよい。言換えると、ロックがアップグレードされていて、読取りロックを保存すべき拡張ロックを識別するためにハッシュ値が用いられているときは、読取りロックはオリジナル・ロックに保存されていない。たとえばハッシュ値０は、拡張ロック０、１、２および３が存在し得るときに、読取りカウントを保存するためにリーダ・ロック０を用いることを示してもよい。
【０１０１】
ハッシュ化は計算７０８の例としてのみ説明される。計算７０８は、ＤＭＬ内のオリジナル・ロックまたは拡張ロックの索引、番号または識別子にスレッド７０４を一意に関連付けるために使用可能なあらゆる好適な計算であってもよい。
【０１０２】
図９を参照すると、この図面は例示的実施形態に従うＤＭＬを用いて読取りおよび書込みロックを管理することのブロック図を示す。スレッド８０２は図８のスレッド７０４と類似であってもよい。オリジナル・ロック８０４および拡張ロック８０６は、図８の説明において用いられたＤＭＬの対応する構成要素であってもよい。
【０１０３】
拡張ロック８０６は、図８のロック番号７０２によって参照、索引付けまたは番号付けされてもよい。図９に示される構成のときに、スレッド８０２はそのロック番号を用いて拡張ロック８０６にマップされるか、または別様で関連付けられている。
【０１０４】
実施形態に従うと、スレッド８０２が書込みロック８０８の取得を要求するとき、書込みロック８０８に対するその要求はオリジナル・ロック８０４に向けられる。書込みロック８０８の解除の要求もオリジナル・ロック８０４に向けられる。書込みロック８０８の取得または解除に関するすべての原子動作は、オリジナル・ロック８０４を用いて行なわれる。
【０１０５】
スレッド８０２が読取りロック８１０の取得を要求するとき、読取りロック８１０に対する要求はオリジナル・ロック８０４または拡張ロック８０６に向けられ得る。読取りロック８１０の解除の要求は、オリジナル・ロック８０４、拡張ロック８０６、または別の拡張ロック８１２に向けられ得る。読取りロック８１０の取得または解除に関するすべての原子動作は、好ましくは拡張ロック８０６を用いて行なわれる。本開示の別の場所に説明されるとおり、拡張ロック８０６に関する特定の状態が存在するときは、読取りロック８１０の取得または解除に関する原子動作がオリジナル・ロック８０４または別の拡張ロック８１２を用いて行なわれてもよい。
【０１０６】
図１０を参照すると、この図面は例示的実施形態に従うＤＭＬを作成するプロセスの例の流れ図を示す。プロセス９００は、たとえばオペレーティング・システムまたはその構成要素などのデータ処理システムにおいてロックを管理するアプリケーションにおいて実装されてもよい。
【０１０７】
プロセス９００は、オリジナル・ロックに対するコンテンション状態を検出することによって始まる（ステップ９０２）。ステップ９０２におけるオリジナル・ロックは現在使用されているＲＷＬであってもよいし、実施形態に従うＤＭＬにおいて使用可能であり得るオリジナル・ロックであってもよい。ステップ９０２のオリジナル・ロックが現在使用されているＲＷＬであれば、プロセス９００の付加的なステップ（図示せず）が、現在使用されているＲＷＬを例示的実施形態によって使用可能であり得るオリジナル・ロックに変換してもよい。
【０１０８】
プロセス９００は、オリジナル・ロックとともに用いるための拡張ロックの好適な数を定める（ステップ９０４）。プロセス９００は、拡張ロックとして使用するためのメモリの１つまたは部分を指定する（ステップ９０６）。
【０１０９】
プロセス９００は、オリジナル・ロック内に拡張ロックの索引を作成する（ステップ９０８）。その後プロセス９００は終了する。ステップ９０８の一実施形態において、プロセス９００はオリジナル・ロックの拡張ロックの索引の中に、拡張ロックが作成されたさまざまなメモリ場所のアドレスの順序付けされたリストを保存してもよい。別の実施形態において、プロセス９００はステップ９０８においてあらゆる別のタイプの索引を保存してもよい。たとえば、ステップ９０８は拡張ロックの１つもしくはそれ以上のこうしたアドレス、または拡張ロックの順序、またはその組み合わせを明らかにするために変換され得る値のリストを作成してもよい。
【０１１０】
図１１を参照すると、この図面は例示的実施形態に従って拡張ロックに対するメモリ・スペースを割り当てるプロセスの流れ図を示す。プロセス１０００は、図１０のプロセス９００とともに実装されてもよい。
【０１１１】
一実施形態において、ロックとして使用するためのメモリ・スペースは、図１０のプロセス９００の開始より前に、たとえば起動時にオペレーティング・システムによってすでに割り当てられていてもよい。こうした実施形態において、プロセス９００は図１０のプロセス９００のステップ９０６において、拡張ロックとして使用するための予め割り当てられたメモリの特定の部分を指定するだけでよい。
【０１１２】
別の実施形態において、図１０のプロセス９００はプロセス１０００に先行されてもよい。プロセス１０００は、ロックとして使用するためのメモリの領域を割り当てることによって始まる（ステップ１００２）。次いでプロセス１０００は、図１０のプロセス９００をステップ９０６で実行してもよく、図１０のプロセス９００の終了とともに終了してもよい。プロセス９００において、図１０のステップ９０６は、ステップ１００２において割り当てられたメモリの領域から、拡張ロックとして使用するためのメモリの１つまたはそれ以上の部分を指定するか、または割り当ててもよい。
【０１１３】
図１２を参照すると、この図面は例示的実施形態に従って特定の拡張ロックを特殊化するプロセスの流れ図を示す。プロセス１１００は、図１０のプロセス９００とともに実装されてもよい。
【０１１４】
図１０のステップ９０８の後に、プロセス９００はプロセス１１００を実行してもよい。プロセス１１００は、拡張ロックの１つまたはそれ以上をリーダ・ロックとして指定することによって始まる（ステップ１１０２）。その後プロセス１１００は終了する。たとえば、プロセス１１００は１つまたはそれ以上の拡張ロックの中に読取りモード・インジケータ・ビットをセットすることによって、それらの拡張ロックが関連リソースに対する読取りロックのみを保持するために用いられることを示してもよい。
【０１１５】
図１３を参照すると、この図面は例示的実施形態に従ってＤＭＬ内の特定のオリジナル・ロックまたは拡張ロックにスレッドまたはプロセスを割り当てるプロセスを示す。プロセス１２００は、たとえばオペレーティング・システムまたはその構成要素などのデータ処理システムにおいてロックを管理するアプリケーションにおいて実装されてもよい。
【０１１６】
プロセス１２００は、ＤＭＬを用いてリソースに対するロックを要求しているスレッドまたはプロセスに関連する識別子を検出することによって始まる（ステップ１２０２）。プロセス１２００は、その要求が読取りロックに関係するか、書込みロックに関係するかを定める（ステップ１２０４）。
【０１１７】
もしその要求が読取りロックを取得または解除することであれば（ステップ１２０４の「読取り」経路）、プロセス１２００はそのロック要求に対して用いるためのロック番号またはロック索引を算出する（ステップ１２０６）。たとえば、プロセス１２００はステップ１２０２からの識別子をハッシュ化して、そのリソースに対するオリジナル・ロックおよび拡張ロックの総数を最大とする番号を得てもよい。
【０１１８】
プロセス１２００はスレッドの要求を、算出されたロック番号または索引に対応するロックに割り当てる（ステップ１２０８）。その後プロセス１２００は終了する。ステップ１２０８において割り当てられたロックの特定の状態では、本開示の他の場所に説明されるとおり、プロセス１２００は付加的なステップを行なうか、または別のプロセスを実行してもよい。こうした付加的なステップまたは別のプロセスは、割り当てられたロック以外のオリジナル・ロックまたは拡張ロックを用いてロック動作を行なってもよい。
【０１１９】
ステップ１２０４に戻って、もしその要求が書込みロックに関係していれば（ステップ１２０４の「書込み」経路）、プロセス１２００はそのスレッドの要求をオリジナル・ロックに割り当てる（ステップ１２１０）。その後プロセス１２００は終了する。
【０１２０】
上述のブロック図の中の構成要素および流れ図の中のステップは、例としてのみ説明されるものである。これらの構成要素およびステップは、説明を明確にするために選択されたものであり、本発明の例示的実施形態を限定するものではない。たとえば、特定の実装は例示的実施形態の範囲から逸脱することなくこれらの構成要素またはステップのいずれかの組み合わせ、省略、さらなる細分、修正、増補、低減、または代替的な実装を行なってもよい。さらに、上述のプロセスのステップは、本発明の範囲内で異なる順序で行なわれてもよい。
【０１２１】
すなわち、例示的実施形態において、デュアル・モード・リーダ・ライタ・ロックのためのコンピュータに実装される方法、装置、およびコンピュータ・プログラム製品が提供される。本発明の実施形態を用いて、データ処理システムはロック・コンテンション状態において効率を改善させて動作できる。この実施形態を用いて、データ処理システムはＲＷＬが飽和してそれ以上のロックを保持できないときにも効率を改善させて動作できる。
【０１２２】
実施形態に従うＤＭＬは、ロックに対する要求が閾値よりも低いときには、現在使用されるＲＷＬと同様にオリジナル・ロック構成のみを用いて動作できる。ロックに対する要求が閾値に達するかまたは閾値を超えるとき、すなわちロックに対するコンテンション状態が存在するとき、ＤＭＬは変形して拡張ロックを用いて動作できる。言換えると、実施形態に従うＤＭＬは、ロックに対する要求によってアップグレードされて拡張モードで動作することも、ダウングレードされてオリジナル・モードで動作することもできる。
【０１２３】
一実施形態において、現存するＲＷＬは１データ・ワード未満のスペースを占有してもよい。こうした実施形態においては、例示的実施形態の範囲内でオリジナル・ロックと１つまたはそれ以上の拡張ロックとを１データ・ワード以内に収容できる。本発明の単なるいくつかの実施形態例として、拡張ロックがリーダ・ロックを保持すると説明した。好適な修正の際には、拡張ロックが書込みロックを含むロックのタイプの組み合わせを保持するために用いられ得る。
【０１２４】
本発明の実施形態は、現存するロック管理アプリケーションと協働し得る。この実施形態は、現存するアプリケーションおよびプロセスが現在使用されるＲＷＬを使用するためにのみ構成されているときに、それらがＤＭＬを透過的に用いることも可能にできる。さらにＤＭＬモードは使用中に、ＤＭＬを使用しているアプリケーションおよびプロセスにこうした遷移を気付かせることなく変化できる。
【０１２５】
本発明は、完全にソフトウェアの実施形態、またはハードウェアおよびソフトウェア要素の両方を含む実施形態の形を取り得る。好ましい実施形態において、本発明は、ファームウェア、常駐ソフトウェア、およびマイクロコードを含むがそれに限定されないソフトウェアまたはプログラム・コードにおいて実装される。
【０１２６】
さらに本発明は、コンピュータもしくはあらゆる命令実行システムによる使用、またはそれに関連する使用のためのプログラム・コードを提供するコンピュータ使用可能媒体またはコンピュータ可読媒体からのアクセスが可能なコンピュータ・プログラム製品の形を取り得る。この説明の目的のために、コンピュータ使用可能媒体またはコンピュータ可読媒体は、命令実行システム、装置またはデバイスによる使用、またはそれに関連する使用のためのプログラムを含有、保存、通信、伝播、または移送できるあらゆる実体的装置であってもよい。
【０１２７】
その媒体は電子、磁気、光学、電磁気、赤外、もしくは半導体のシステム（もしくは装置もしくはデバイス）または伝播媒体であってもよい。コンピュータ可読媒体の例は、半導体またはソリッド・ステート・メモリ、磁気テープ、取外し可能なコンピュータ・ディスケット、ランダム・アクセス・メモリ（ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ：ＲＡＭ）、読取り専用メモリ（ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｙ：ＲＯＭ）、剛性磁気ディスク、および光ディスクを含む。光ディスクの現行例は、コンパクト・ディスク−読取り専用メモリ（ｃｏｍｐａｃｔ  ｄｉｓｋ−ｒｅａｄ  ｏｎｌｙ  ｍｅｍｏｒｙ：ＣＤ−ＲＯＭ）、コンパクト・ディスク−読取り／書込み（ｃｏｍｐａｃｔ  ｄｉｓｋ−ｒｅａｄ／ｗｒｉｔｅ：ＣＤ−Ｒ／Ｗ）およびＤＶＤを含む。
【０１２８】
さらに、コンピュータ記憶媒体はコンピュータ可読プログラム・コードを含有または保存することによって、そのコンピュータ可読プログラム・コードがコンピュータ上で実行されるときに、このコンピュータ可読プログラム・コードの実行によってそのコンピュータが通信リンクを通じて別のコンピュータ可読プログラム・コードを送信するようにさせてもよい。この通信リンクは、限定的でなくたとえば物理的または無線などである媒体を用いてもよい。
【０１２９】
プログラム・コードを保存もしくは実行またはその両方を行うために好適なデータ処理システムは、システム・バスを通じてメモリ要素に直接的または間接的に結合された少なくとも１つのプロセッサを含むだろう。メモリ要素は、プログラム・コードの実際の実行の際に用いられるローカル・メモリ、大容量記憶媒体、および実行中に大容量記憶媒体からコードを検索しなければならない回数を減らすために少なくともいくつかのプログラム・コードの一時的記憶を提供するキャッシュ・メモリを含んでもよい。
【０１３０】
データ処理システムは、サーバ・データ処理システムまたはクライアント・データ処理システムとして動作してもよい。サーバおよびクライアント・データ処理システムは、たとえばコンピュータ可読であるなどコンピュータ使用可能であるデータ記憶媒体を含んでもよい。サーバ・データ処理システムに関連するデータ記憶媒体は、コンピュータ使用可能コードを含んでもよい。クライアント・データ処理システムはそのコンピュータ使用可能コードをダウンロードして、たとえばそのクライアント・データ処理システムに関連するデータ記憶媒体に保存したり、そのクライアント・データ処理システムにおいて使用したりしてもよい。同様にサーバ・データ処理システムは、クライアント・データ処理システムからコンピュータ使用可能コードをアップロードしてもよい。例示的実施形態のコンピュータ使用可能プログラム製品実施形態からもたらされるコンピュータ使用可能コードは、この態様でサーバおよびクライアント・データ処理システムを用いてアップロードまたはダウンロードされてもよい。
【０１３１】
入力／出力またはＩ／Ｏデバイス（キーボード、ディスプレイ、ポインティング・デバイスなどを含むがそれに限定されない）は、システムに直接結合されるか、または介在するＩ／Ｏコントローラを通じて結合されてもよい。
【０１３２】
加えて、データ処理システムが介在する私的または公的ネットワークを通じて他のデータ処理システムまたは遠隔のプリンタもしくは記憶装置に結合されることを可能にするために、システムにネットワーク・アダプタが結合されてもよい。モデム、ケーブル・モデムおよびイーサネット・カードは、現在利用可能なネットワーク・アダプタのタイプのうちのほんのいくつかである。
【０１３３】
本発明の説明は例示および説明の目的のために提供されたものであって、網羅的になったり、本発明を開示される形に限定したりすることは意図されていない。通常の当業者には多くの修正および変更が明らかになるだろう。実施形態は、本発明の原理および実際の適用を説明し、他の通常の当業者が予期される特定の使用に好適であるようなさまざまな修正を伴うさまざまな実施形態に対して本発明を理解できるようにするために選択されて説明されたものである。
【図１】
2013522740.tif 000003
【図２】
2013522740.tif 000004
【図３】
2013522740.tif 000005
【図４】
2013522740.tif 000006
【図５】
2013522740.tif 000007
【図６】
2013522740.tif 000008
【図７】
2013522740.tif 000009
【図８】
2013522740.tif 000010
【図９】
2013522740.tif 000011
【図１０】
2013522740.tif 000012
【図１１】
2013522740.tif 000013
【図１２】
2013522740.tif 000014
【図１３】
2013522740.tif 000015
2013522740.tif 000016
2013522740.tif 000017
2013522740.tif 000018
2013522740.tif 000019
2013522740.tif 000020
2013522740.tif 000021
2013522740.tif 000022
2013522740.tif 000023
2013522740.tif 000024
2013522740.tif 000025
2013522740.tif 000026
2013522740.tif 000027
2013522740.tif 000028
【手続補正書】
【提出日】平成24年9月18日(2012.9.18)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
デュアル・モード・リーダ・ライタ・ロックのためのコンピュータに実装される方法であって、前記方法は、
オリジナル・ロックの使用におけるコンテンション状態を定めるステップであって、前記オリジナル・ロックはデータ処理システムにおいて利用可能なリソースに対応し、前記オリジナル・ロックは前記データ処理システムにおいて実行する複数のプロセスによる前記リソースへの読取りアクセスおよび書込みアクセスを管理する、ステップと、
前記オリジナル・ロックとともに使用するための拡張ロックの組を作成するステップであって、前記オリジナル・ロックおよび前記拡張ロックの組は前記デュアル・モード・リーダ・ライタ・ロックを形成し、前記デュアル・モード・リーダ・ライタ・ロックは前記リソースへの前記読取りアクセスおよび書込みアクセスを管理するように動作する、ステップと、
前記オリジナル・ロック内の索引を用いて前記拡張ロックの組の各拡張ロックに索引を付けることによって、前記索引を用いて各拡張ロックを位置付けできるようにするステップと、
前記オリジナル・ロックおよび前記拡張ロックの組にわたって、前記複数のプロセスによる前記リソースへの前記読取りアクセスおよび書込みアクセスを取得および解除するための要求を分散させることによって、前記コンテンション状態を解決するステップと
を含む、方法。
【請求項２】
前記オリジナル・ロックは既存のリーダ・ライタ・ロックの変更形であることによって、前記既存のリーダ・ライタ・ロックは前記拡張ロックの組とともに動作において使用可能な識別子の組を保持でき、前記方法はさらに、
前記拡張ロックの組の中の拡張ロックをリーダ・ロックとして指定することによって、前記指定された拡張ロックが前記リソースに対する読取りロックのみを取得、保持および解除するために使用可能になるステップを含む、請求項１に記載の方法。
【請求項３】
前記リソースに対する読取りロックの（ｉ）取得および（ｉｉ）解除のうち一方のための要求をプロセスから受け取るステップと、
前記要求を前記デュアル・モード・リーダ・ライタ・ロック内の拡張ロックに割り当てるステップと
をさらに含む、請求項１または２に記載の方法。
【請求項４】
前記プロセスからの、前記リソースに対する書込みロックの（ｉ）取得および（ｉｉ）解除のうち一方のための第２の要求は前記オリジナル・ロックに割り当てられる、請求項３に記載の方法。
【請求項５】
前記拡張ロックは、前記プロセスに関連する識別子から索引値を算出することによって、前記拡張ロックの組から選択され、前記索引値は前記拡張ロックを決定する、請求項３または４に記載の方法。
【請求項６】
前記拡張ロックは、前記拡張ロックが前記データ処理システムのプロセッサとの親和性を有するように前記拡張ロックの組から選択される、請求項３、４または５に記載の方法。
【請求項７】
前記リソースに対する書込みロックの（ｉ）取得および（ｉｉ）解除のうち一方のための要求を受け取るステップと、
前記要求を前記デュアル・モード・リーダ・ライタ・ロック内の前記オリジナル・ロックに割り当てるステップと
をさらに含む、請求項１ないし６のいずれかに記載の方法。
【請求項８】
前記デュアル・モード・リーダ・ライタ・ロックは、前記コンテンション状態が存在しないときには前記オリジナル・ロックのみを用いる第１のモードで動作し、
前記デュアル・モード・リーダ・ライタ・ロックは、前記コンテンション状態が存在するときには前記オリジナル・ロックおよび前記拡張ロックの組を用いる第２のモードで動作し、
前記デュアル・モード・リーダ・ライタ・ロックは、前記コンテンション状態が生じたときに前記第１のモードから前記第２のモードに切り替わり、
前記デュアル・モード・リーダ・ライタ・ロックは、前記コンテンション状態が中止されたときに前記第２のモードから前記第１のモードに切り替わる、
請求項１ないし８のいずれかに記載の方法。
【請求項９】
前記第１のモードから前記第２のモードに前記切り替わるステップによって、前記リソースに対するロックに対する複数の原子動作を、（ｉ）前記オリジナル・ロックおよび前記拡張ロックの組の中の拡張ロック、ならびに（ｉｉ）前記拡張ロックの組の中の２つの拡張ロック、のうちの一方に対して同時に実行させることによって、前記コンテンション状態を取り除く、請求項８に記載の方法。
【請求項１０】
メモリ内の領域をロックとして用いるために割り当てるステップであって、前記拡張ロックの組を前記作成するステップは、前記領域における前記拡張ロックの組に対するスペースの組を指定する、ステップ
をさらに含む、請求項１ないし９のいずれかに記載の方法。
【請求項１１】
デュアル・モード・リーダ・ライタ・ロックのためのコンピュータ使用可能コードを含むコンピュータ・プログラムであって、前記コンピュータ使用可能コードは、
オリジナル・ロックの使用におけるコンテンション状態を定めるためのコンピュータ使用可能コードであって、前記オリジナル・ロックはデータ処理システムにおいて利用可能なリソースに対応し、前記オリジナル・ロックは前記データ処理システムにおいて実行する複数のプロセスによる前記リソースへの読取りアクセスおよび書込みアクセスを管理する、コンピュータ使用可能コードと、
前記オリジナル・ロックとともに使用するための拡張ロックの組を作成するためのコンピュータ使用可能コードであって、前記オリジナル・ロックおよび前記拡張ロックの組は前記デュアル・モード・リーダ・ライタ・ロックを形成し、前記デュアル・モード・リーダ・ライタ・ロックは前記リソースへの前記読取りアクセスおよび書込みアクセスを管理するように動作する、コンピュータ使用可能コードと、
前記オリジナル・ロック内の索引を用いて前記拡張ロックの組の各拡張ロックに索引を付けることによって、前記索引を用いて各拡張ロックを位置付けできるようにするためのコンピュータ使用可能コードと、
前記オリジナル・ロックおよび前記拡張ロックの組にわたって、前記複数のプロセスによる前記リソースへの前記読取りアクセスおよび書込みアクセスを取得および解除するための要求を分散させることによって、前記コンテンション状態を解決するためのコンピュータ使用可能コードと
を含む、コンピュータ・プログラム。
【請求項１２】
前記コンピュータ使用可能コードはデータ処理システム内のコンピュータ可読記憶媒体に保存され、前記コンピュータ使用可能コードは遠隔データ処理システムからネットワーク上を送信される、請求項１１に記載のコンピュータ・プログラム。
【請求項１３】
前記コンピュータ使用可能コードはサーバ・データ処理システム内のコンピュータ可読記憶媒体に保存され、前記コンピュータ使用可能コードはネットワーク上で遠隔データ処理システムにダウンロードされて、前記遠隔データ処理システムに関連するコンピュータ可読記憶媒体において使用される、請求項１１又は１２に記載のコンピュータ・プログラム。
【請求項１４】
デュアル・モード・リーダ・ライタ・ロックのためのデータ処理システムであって、前記データ処理システムは、
記憶媒体を含む記憶装置であって、前記記憶装置はコンピュータ使用可能プログラム・コードを保存する、記憶装置と、
プロセッサであって、前記プロセッサは前記コンピュータ使用可能プログラム・コードを実行する、プロセッサと
を含み、前記コンピュータ使用可能プログラム・コードは、
オリジナル・ロックの使用におけるコンテンション状態を定めるためのコンピュータ使用可能コードであって、前記オリジナル・ロックはデータ処理システムにおいて利用可能なリソースに対応し、前記オリジナル・ロックは前記データ処理システムにおいて実行する複数のプロセスによる前記リソースへの読取りアクセスおよび書込みアクセスを管理する、コンピュータ使用可能コードと、
前記オリジナル・ロックとともに使用するための拡張ロックの組を作成するためのコンピュータ使用可能コードであって、前記オリジナル・ロックおよび前記拡張ロックの組は前記デュアル・モード・リーダ・ライタ・ロックを形成し、前記デュアル・モード・リーダ・ライタ・ロックは前記リソースへの前記読取りアクセスおよび書込みアクセスを管理するように動作する、コンピュータ使用可能コードと、
前記オリジナル・ロック内の索引を用いて前記拡張ロックの組の各拡張ロックに索引を付けることによって、前記索引を用いて各拡張ロックを位置付けできるようにするためのコンピュータ使用可能コードと、
前記オリジナル・ロックおよび前記拡張ロックの組にわたって、前記複数のプロセスによる前記リソースへの前記読取りアクセスおよび書込みアクセスを取得および解除するための要求を分散させることによって、前記コンテンション状態を解決するためのコンピュータ使用可能コードと
を含む、データ処理システム。
【国際調査報告】
2013522740.tif 000029
2013522740.tif 000030
2013522740.tif 000031