JP2001519937A - コンピュータリソースのロック処理 - Google Patents

コンピュータリソースのロック処理

Info

Publication number
JP2001519937A
JP2001519937A JP53193298A JP53193298A JP2001519937A JP 2001519937 A JP2001519937 A JP 2001519937A JP 53193298 A JP53193298 A JP 53193298A JP 53193298 A JP53193298 A JP 53193298A JP 2001519937 A JP2001519937 A JP 2001519937A
Authority
JP
Japan
Prior art keywords
register
lock
value
computer
circuit
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP53193298A
Other languages
English (en)
Other versions
JP4196414B2 (ja
Inventor
ジョイ、ウィリアム・エヌ
オコナー、ジェイムズ・マイケル
トレンブレイ、マーク
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Sun Microsystems Inc
Original Assignee
Sun Microsystems Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Sun Microsystems Inc filed Critical Sun Microsystems Inc
Publication of JP2001519937A publication Critical patent/JP2001519937A/ja
Application granted granted Critical
Publication of JP4196414B2 publication Critical patent/JP4196414B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multi Processors (AREA)
  • Executing Machine-Instructions (AREA)
  • Storage Device Security (AREA)

Abstract

(57)【要約】 コンピュータプロセッサがいくつかのレジスタ対LOCKADDR/LOCKCOUNTを備える。各レジスタ対では、LOCKADDR/LOCKCOUNTレジスタが、コンピュータリソースに対するロックを識別する値を保持する。ロック命令が発行される際に、対応するLOCKCOUNTレジスタがインクリメントされる。アンロック命令が発行される際に、対応するLOCKCOUNTレジスタがデクリメントされる。そのロックは、LOCKCOUNTレジスタに関連するカウントが0までデクリメントされる際に解除される。この方式は、多くの頻繁に発生する状況において、高速ロック処理及びアンロック処理を実現する。いくつかの実施例では、LOCKCOUNTレジスタは省略され、ロックはそのロックに対応する任意のアンロック命令において解除される。いくつかの実施例では、コンピュータオブジェクトはクラス構造へのポインタを含むヘッダを備える。クラス構造は4バイト境界に位置合わせされ、それゆえそのクラス構造へのポインタの2つのLSBは0であり、ヘッダ内に格納されない。その代わりに2つのヘッダLSBは、(1)そのオブジェクトがロックされるか否かを示すLOCKビット及び(2)スレッドがそのオブジェクトに対するロックを捕捉するために待機しているか否かを示すWANTビットを格納する。

Description

【発明の詳細な説明】 コンピュータリソースのロック処理発明の背景 本発明はコンピュータリソースのロック処理に関連する。 コンピュータプロセス或いはスレッドのような種々のコンピュータエンティテ ィがコンピュータリソース(例えばデータ、コード或いはハードウエアの部品) を共有する際に、コンピュータエンティティの1つが暫くの間リソースをロック し、他のコンピュータエンティティによるある種類のリソースへのアクセスを防 ぐようにすることが好ましい。例えば、2つ或いはそれ以上のスレッドがコンピ ュータデータを共有し、1つのスレッドがデータを変更し始めているが終了して いない場合に、別のスレッドがデータにアクセスするなら、他のスレッドがその データから不正確な情報を取得するか、並びにまたそのデータが2つのスレッド により汚染されることもある。また1つのスレッドがクリティカルコード部分の 実行を開始しているが終了していない場合に、他のスレッドが同じコード部分を 実行し始めるなら、例えば、クリティカルコード部分がデータ領域、ハードウエ アコントローラ或いはいくつかの他のコンピュータリソースの状態を変更してい ない場合に実行エラーが生じることがある。それゆえロック処理技術により、コ ンピュータエンティティがコンピュータリソースをロックしている。 コンピュータリソースをロック処理するための高速化技術を実現することが望 ましい。概要 本発明は多くの頻繁に生じる状況において、コンピュータリソースの ロック処理及びアンロック処理を高速化する方法及び回路を実現する。詳細には 、ある実施例では典型的には、ロックに対する競合が生じない(すなわちそのロ ックが別のコンピュータエンティティにより保持されていない)場合にロック処 理が高速化される。また典型的には、同じコンピュータエンティティ、例えば同 じスレッドが、そのスレッドがロックを解除する前にその同じロックにおいて多 数のロック操作を実行する場合に、ロック処理操作は高速化される。スレッドが 再帰的コードを実行する場合、そのロックが解除される前に多数のロック操作が 生じるようになる。 いくつかの実施例では、以下のようにして上記利点が達成される。コンピュー タプロセッサはいくつかのレジスタ対(LOCKADDR、LOCKCOUNT)を備える。各LOC KADDRレジスタは、コンピュータリソースに対するロックを識別する値を保持す る。いくつかの実施例では、この値はロックされるオブジェクトへの参照値であ る。このように、いくつかの実施例ではその値はロックされるオブジェクトのア ドレスである。対応するLOCKCOUNTレジスタは、LOCKADDRレジスタにより識別さ れたロックに関連するロック命令のカウント値を保持する。スレッドが、LOCKAD DRレジスタにより識別されたロックに対するロック命令を発行する際に、コンピ ュータプロセッサは対応するLOCKCOUNTレジスタをインクリメントする。スレッ ドがアンロック命令を発行する際に、コンピュータプロセッサは対応するLOCKCO UNTレジスタをデクリメントする。 いくつかの実施例では、プロセッサは、Java仮想マシンのロック及びアンロッ ク命令を実行するのに適している。Java仮想マシンは、例えばT.Lindholm,F. Yellinによる「The JavaTM Virtual Machine Specification」に記載される。Ja va仮想マシンでは、各オブジェクトは そのオブジェクトに関連するモニタを備える。スレッドがロック命令「monitore nter」を実行する際に、対応するモニタに関連するカウンタがインクリメントさ れる。スレッドがアンロック命令「monitorexit」を実行する際に、カウンタは デクリメントされる。いくつかの実施例では、そのカウンタはLOCKCOUNTレジス タを用いて実装される。 いくつかの実施例では、LOCKCOUNTレジスタは省略され、あるリソースに対す るロックは、そのリソースに対して発行された任意のアンロック命令において解 除される。 いくつかの実施例では、各オブジェクトはクラス構造へのポインタであるヘッ ダを備える。クラス構造は4バイト境界上に位置合わせされ、それゆえそのポイ ンタの2つのLSBは0であり、ヘッダに格納される必要はない。代わりにヘッ ダの2つのLSBを用いて、(1)そのオブジェクトがロックされるか否かを示 す「LOCK」ビット及び(2)そのオブジェクトに対するロックを取得するために スレッドが待機しているか否かを示す「WANT」ビットを格納する。 本発明の他の特徴及び利点が以下に記載される。本発明は添付の請求の範囲に より画定される。図面の簡単な説明 第1図は、本発明によるプロセッサを備えるコンピュータシステムのブロック 図である。 第2図は、第1図のプロセッサにおいてロック処理操作を行うために用いられ るレジスタ及び第1図のシステムのメモリ内の関連するデータ構造を示すブロッ ク図である。 第3図は、第1図のメモリ内のデータ構造を示すブロック図である。 第4図は、本発明によるプロセッサにおけるロック処理操作に用いら れるレジスタを示すブロック図である。好適な実施例の説明 第1図は、ロック処理回路を備えるコンピュータシステムのブロック図である 。プロセッサ110はバス130によりメモリ120に接続される。プロセッサ 110は、メモリ120から呼び出された命令を実行する実行ユニット136を 備える。実行ユニット136は、LOCKADDR,LOCKCOUNTを付されたレジスタ14 4を備える。これらのレジスタは、以下に記載するようなオブジェクトロック処 理の場合に用いられる。 バス130は、I/Oバス及びプロセッサ110のメモリインターフェースユ ニット150に接続される。プロセッサ110がメモリ120から命令を読み出 す際に、インターフェースユニット150がその命令を読出し命令キャッシュ1 56に書き込む。その後その命令はデコードユニット160によりデコードされ る。デコードユニット160はコントロール信号を実行コントロール及びマイク ロコードユニット166に送出する。ユニット166はコントロール信号を実行 ユニット136と交換する。またデコードユニット160はコントロール信号を スタックキャッシュ及びスタックキャッシュコントロールユニット170(以下 では「スタックキャッシュ」と呼ばれる)にも送出する。スタックキャッシュ1 70はコントロール及びデータ信号を実行ユニット及びデータキャッシュユニッ ト180と交換する。キャッシュユニット170及び180は、インターフェー ス150及びバス130を介してメモリ120とデータを交換する。実行ユニッ ト136は命令キャッシュ156、スタックキャッシュ170及びデータキャッ シュ180をフラッシュすることができる。 第2図は、レジスタ144及びメモリ120内の対応するオブジェク トの1つを示す。レジスタ144は、LOCKADDRO/LOCKCOUNTOからLOCKADDR3/L OCKCOUNT3を付された4つのレジスタ対を備える。各LOCKADDRレジスタは、ロッ クされるオブジェクトのアドレスを保持する。この実施例では各アドレスは32 ビット長であるため、各LOCKADDRレジスタは32ビット長である。しかしながら いくつかの実施例では各オブジェクトは4バイト境界上で始まる。それゆえその 実施例ではオブジェクトのアドレスの2つの最下位ビットは0であり、レジスタ LOCKADDRから省略される。そのような実施例では、各レジスタLOCKADDRは30ビ ット長である。 LOCKADDRレジスタが0を含む場合、これはレジスタ対が未使用であることを意 味する。 各レジスタ対では、LOCKCOUNTレジスタが、そのオブジェクトに対するロック 命令のカウント値を保持し、そのオブジェクトのアドレスが対応するLOCKADDRレ ジスタに保持される。LOCKCOUNTレジスタは、対応するアンロック命令が発行さ れていないロック命令の数を保持する。LOCKCOUNTレジスタはそのオブジェクト に対する各ロック命令時にインクリメントされ、各アンロック命令時にデクリメ ントされる。そのロックは実際に、LOCKCOUNTレジスタが0までデクリメントさ れる場合にのみ解除される(しかしながらいくつかの実施例では、以下に記載す るように、LOCKCOUNTレジスタはロックカウントの一部のみを保持する。そのロ ックは、全ロックカウントが0までデクリメントされる場合に解除される)。い くつかの実施例では、各LOCKCOUNTレジスタは8ビット長であり、0〜255の 数を保持する。 多数のロック命令にアンロック命令が介在しないのは、再帰的コードによるも のである。LOCKCOUNTレジスタが、そのオブジェクトに対 するロック及びアンロック命令の正味のカウント(すなわち、そのオブジエクト に対するロック命令の数とアンロック命令の数との差)を保持するため、ソフト ウエアプログラムは、各アンロック命令前に検査を行い、そのロックに対する要 求が満了するまで、そのスレッドのいくつかの他の部分によりそのオブジェクト がロックされたか否かを、それゆえオブジェクトのロックが保持されるべきか否 かを判定する必要性を軽減される。 いくつかの実施例では、レジスタ144は1つのスレッド或いは1つのコンピ ュータプロセスのみに対するロックアドレス及びカウントを保持する。プロセッ サ110が異なるスロット或いはプロセスに切り替わる際に、レジスタ144は 、実行されるはずの新規のスレッド或いはプロセスに対するロックデータ(ロッ クアドレス及びカウント)をロードされる。 第2図は、アドレスがLOCKADDRレジスタ(第2図のレジスタLOCKADDR3)に格 納されるオブジェクトを示す。第2図では、そのオブジェクトはメモリ120に 格納される。しかしながらオブジェクトの全部或いは一部が、データキャッシュ 180内に格納されることもできる。この説明全体を通して、メモリ122にデ ータ或いは命令を格納することを説明する場合、他に説明がなければ、データ或 いは命令はデータキャッシュ180、スタックキャッシュ170或いは命令キャ ッシュ156に格納できることは理解されたい。 第2図に示されるように、レジスタLOCKADDR3のアドレスは、オブジェクト構 造220へのポインタである。オブジェクト構造220はへッダ220Hで開始 する。ヘッダ220Hに、他のデータ(図示せず)が後続する。へッダ220H は、そのオブジェクトを記載するクラス構造230へのポインタを備える。クラ ス構造230は4バイト境界に位 置合わせされる。その結果として、さらに全てのアドレスが、上記バイトより大 きいアドレスバイトを有する各連続バイトを備えるバイトアドレスであるため、 クラス構造アドレスの2つのLSBは0である。これら0のLSBはへッダ22 0Hに格納されない。それゆえへッダはアドレス記憶に用いられない2つのビッ トを有する。これらのビット(へッダLSBO及び1)は、オブジエクトロック 処理の場合に用いられる。ビット0は、Lビット或いはLOCKビットとも呼ばれ、 オブジェクトがロックされる際に1に設定される。ビット1は、W或いはWANTビ ットとも呼ばれ、スレッドが、オブジェクト220に対するロックを捕捉するた めの待機を阻止される際に1に設定される。 本説明の最後(請求の範囲の前)における付録A及びBは、プロセッサ110 の一実施例においてロック及びアンロック命令を実行する回路に対する疑似コー ドを含む。その回路は実行ユニット136並びにまた実行コントロール及びマイ クロコードユニット166の一部である。付録A及びBの疑似コード言語はハー ドウエア記述言語Verilog(登録商標)に類似であり、それは例えばD.E.Thomas,J. P.Moorbyによる「The おり、ここで参照して本明細書の一部としている。疑似コードは容易にVerilog に変換されることができ、対応する回路は当分野で周知の方法を用いて実装され ることができる。 付録Aはロック命令に対する疑似コードを示す。付録Aのステップ1−0から 1−3ではそれぞれ、対応するレジスタLOCKADDR0からLOCKADDR3までの内容が 、ロックされるのオブジェクトのアドレスと比較される。一致する場合、対応す るレジスタLOCKCOUNTがインクリメントされ(ステップ1−0a、1−1a、1 −2a、1−3a)、0と比較される(ステップ1−0b、1−1b、1−2b 、1−3b)。 インクリメント後にLOCKCOUNTレジスタが0になる場合、オーバーフローが発生 しており、トラップLockCountOverflowIncrementTrapが生成される。あるトラッ プの発生により、その命令の実行が終了される。そのトラップがイネーブルされ る場合には、プロセッサ110はそのトラップに対して規定されるトラップハン ドラの実行を開始する。トラップハンドラはコンピュータプログラムである。 いくつかの実施例では、LockCountOverflowIncrementTrapに対するトラップハ ンドラは、LOCKCOUNTレジスタより大きいロックカウンタmLOCKCOUNT(第3図) を保持する。より詳細にはいくつかの実施例では、オペレーティングシステムが 、メモリ120のテーブル310を用いて、ロックされたオブジェクトのトラッ クを保持する。個別のテーブル310は各スレッドに対して保持される。テーブ ル310は、あるスレッドが作成される際に、そのスレッドに対して作成され、 テーブル310は、対応するスレッドが消失する際に、割当て解除される。 各テーブル310はいくつかのエントリ(mLOCKADDR,mLOCKCOUNT)を備える 。各エントリの機能は、レジスタ値LOCKADDR/LOCKCOUNTの機能と類似である。 より詳細には、mLOCKADDRは、そのスレッドによりロックされるオブジェクトの アドレスを保持する。mLOCKCOUNTは、そのオブジェクトに対してスレッドにより 発行されたロック命令のカウント値を保持する。ロック命令のカウント値は、対 応するアンロック命令が実行されていないロック命令数である。mLOCKADDR=0 の場合、エントリが未使用であることを意味する。 テーブル310は4つ以上のエントリを有することがある。種々のテーブル3 10は異なる数のエントリを有することがある。 各メモリ位置mLOCKADDRは、ある実施例では32或いは30ビッ ト長である。各位置mLOCKCOUNTは8ビット長以上である。いくつかの実施例では 、各位置mLOCKCOUNTは32ビット長であり、各レジスタLOCKCOUNTは8ビット長 である。 オペレーティングシステムが実行に対するスレッドをスケジュールする際に、 オペレーティングシステムは、対応するテーブル310からレジスタ対LOCKADDR /LOCKCOUNTへの4つまでのエントリをロードすることがある。各エントリは1 つのレジスタ対LOCKADDR/LOCKCOUNTに書き込まれる。mLOCKCOUNTがLOCKCOUNTよ り大きい場合、オペレーティングシステムは、LOCKCOUNT(いくつかの実施例で は8LSB)に適合する同じ数のmLOCKCOUNTのLSBをLOCKCOUNTに書き込む。 あるレジスタ対がテーブル310からのエントリを受信しない場合、オペレーテ ィングシステムは対応するレジスタLOCKADDRを0に設定し、そのレジスタ対が未 使用(「空き」)であることを示す。 ある実施例では、テーブル310は各エントリに対するビット(図示せず)を 備え、そのスレッドが実行に対してスケジュールされる際にそのエントリがLOCK ADDR/LOCKCOUNTレジスタ対に書き込まれるべきか否かを示す。他の実施例では 各スレッドに対して、オペレーテイングシステムは、そのスレッドが実行に対し てスケジュールされる際にレジスタ144に書き込まれるべきエントリのリスト (図示せず)を保持する。いくつかの実施例では、オペレーティングシステムは 各エントリに対するビット或いはエントリのリストを備え、LOCKADDR/LOCKCOUN Tレジスタに書き込まれているエントリをマークする。 ある場合には、ロック及びアンロック命令によりトラップが生成されることは ない。それゆえmLOCKCOUNTのLSBは無効である、すなわちLOCKADDR/LOCKCOUN Tレジスタ対により識別されるロック に対するテーブル310にエントリが存在しない場合がある。 あるスレッドT1が割り込まれ、他のスレッドT2がプロセッサ110上で実 行に対してスケジュールされる際に、オペレーティングシステムは、スレッドT 2のテーブル310からレジスタをロードする前に、全ての非空きLOCKADDR/LO CKCOUNTレジスタ対をスレッドT1のテーブル310に書き込む。mLOCKCOUNTがL OCKCOUNTより大きい場合には、オペレーティングシステムは各LOCKCOUNTレジス タを対応する位置mLOCKCOUNTのLSBに書き込む。現在のスレッドのテーブル3 10がLOCKADDR/LOCKCOUNTレジスタ対により識別されるロックに対するエント リを持たない場合には、オペレーティングシステムによりエントリが作成される 。 いくつかの実施例では、LockCountOverflowTrapに対するトラップハンドラは 、ロックされるオブジェクトのアドレスを含むmLOCKADDRを有するエントリに対 する現在スレッドのテーブル310を探索する。そのようなエントリが存在しな い場合には、トラップハンドラは未使用エントリを探索し、mLOCKADDRをロック されるオブジェクトのアドレスに設定し、mLOCKCOUNTを0に設定する。いずれの 場合(エントリが存在したか或いはエントリがそこで作成されたかの何れの場合 )であっても、トラップハンドラは、LOCKCOUNTレジスタに格納されないmLOCKCO UNTのMSBをインクリメントし、LSBを0に設定する。 ここで命令ユニット136によるロック命令の実行に説明を戻す。いくつかの 実施例では、付録Aのステップ1−0から1−3におけるレジスタLOCKADDRとロ ックされるオブジェクトのアドレスとの比較が、4つのレジスタに対応する4つ のコンパレータにより並列に実行され、ステップ1−0a、1−1a、1−2a 、1−3aにおける LOCKCOUNTのインクリメントがインクリメンタを用いて実行される。そのような コンパレータ及びインクリメンタは当分野では周知である。 実行ユニット136は、ロックされるオブジェクトのヘッダ220からLOCKビ ット(第2図)を読み出し、LOCKビットを1に設定し、そのオブジェクトがロッ クされる(ステップ2a)ことを示す。この読出し及び設定(検査及び設定)動 作は最小単位動作(atomic operation)であり、すなわち(1)プロセッサが、 その動作が完了するまで割込みを行わない及び(2)マルチプロセッサ環境では 、その動作が完了するまで他のプロセッサがそのLOCKビットにアクセスすること ができないであろう。いくつかの実施例では、この検査及び設定動作は、ステッ プ1−0から1−3と並列に実行される。他の実施例では、この検査及び設定動 作は、ステップ1−0から1−3の後、いずれのLOCKADDRレジスタもロックされ るオブジェクトのアドレスを含まない場合にのみ実行される。 いずれのLOCKADDRレジスタもロックされるオブジェクトのアドレスを含まず( ステップ2)、検査及び設定動作前にLOCKビットが設定されなかった場合(ステ ップ2a)、プロセッサ110はトラップLockBusyTrapを生成する。 LockBusyTrapに対するトラップハンドラが、現在のスレッドのテーブル310 を探索し、現在のスレッドがオブジェクトに対するロックを保持するか否かを確 認する。オブジェクトアドレスが、テーブル310のエントリの1つのmLOCKADD Rに格納されるアドレスに等しい場合、対応するmLOCKCOUNTがトラップハンドラ によりインクリメントされる。さらにいくつかの実施例では、トラップハンドラ はそのエントリをレジスタ対LOCKADDR/LOCKCOUNT内に配置することがある。 これは、スレッドにより発行される次のロック或いはアンロック命令が、 そのスレッドが最も新しいロック命令を発行したオブジェクトに対するものであ る可能性がある場合に望ましい。トラップハンドラがエントリをレジスタ対に配 置することが望ましいが、全てのレジスタ対が他のロックにより占有されている 場合には、トラップハンドラはテーブル310に書き込むことにより、レジスタ 対の1つを空ける(上記のように、mLOCKCOUNTがLOCKCOUNTより大きい場合、LOC KCOUNTレジスタはmLOCKCOUNTのLSBに書き込まれる)。 現在のスレッドがロックを保持せず、そのオブジェクトアドレスが対応するテ ーブル310のメモリ位置mLOCKADDRと全く一致しない場合には、そのトラップ ハンドラはオブジェクトヘッダ(第2図)にWANTビットを設定し、このロッ クを捕捉するために待機しているスレッドの待ち行列にスレッドを配置する。 ここで実行ユニット136によるロック命令の実行に説明を戻す。オブジェク トのLOCKビットが、検査及び設定動作前に設定されていなかった場合には、ステ ップ2b−0から2b−3が実行される。ステップ2b−i(i=0〜3)では それぞれ、各コンパレータがレジスタLOCKADDRiと0とを比較する。この比較は 、ステップ1−0から1−3及び2の比較と並列に実行される。LOCKADDR0=0 (ステップ2b−0)の場合には、レジスタ対LOCKADDR0/LOCKCOUNT0は未使 用である。レジスタLOCKADDR0は、ロックされるオブジェクトのアドレスを書き 込まれる(ステップ2b−0a)。レジスタLOCKCOUNT0は1に設定される(ス テップ2b−0b)。 LOCKADDR0が0ではないが、LOCKADDR1=0の場合には、レジスタLOCKADDR1 はロックされるオブジェクトのアドレスを書き込まれ、レジスタLOCKCOUNT1は 1に設定される。(ステップ2b−1a、2b−1b)。LOCKADDR0及びLOCKAD DR1が0ではない が、LOCKADDR2=0の場合、LOCKADDR2はロックされるオブジエクトのアドレス を書き込まれ、レジスタLOCKCOUNT2は1に設定される(ステップ2b−2a、 2b−2b)。LOCKADDR0、LOCKADDR1及びLOCKADDR2が0ではないが、LOCKAD DR3=0の場合、レジスタLOCKADDR3はロックされるオブジエクトのアドレスを 書き込まれ、レジスタLOCKCOUNT3が1に設定される(ステップ2b−3a,2 b−3b)。 LOCKADDRレジスタのいずれも0ではない場合には、トラップNoLockAddrRegsTr apが生成される(ステップ2c)。いくつかの実施例では、このトラップに対す るトラップハンドラは、現在のスレッドのテーブル310の未使用エントリを探 索するか或いは作成する。そのトラップハンドラはロックされるオブジェクトの アドレスをそのエントリの位置mLOCKADDRに書き込み、対応するmLOCKCOUNTを1 に設定する。さらにトラップハンドラは、テーブルエントリをLOCKADDR/LOCKCO UNTレジスタ対に配置することもある。レジスタ対の古い内容は、そのレジスタ 対が書き込まれる前に、スレッドのテーブル310に格納される。 付録Bはアンロック命令に対する疑似コードを示す。ステップ1−0から1− 3では、LOCKADDRレジスタがアンロックされるオブジエクトのアドレスと並列に 比較される。一致する場合には、現在のスレッドがロックを保持することを示し ており、対応するLOCKCOUNTレジスタがデクリメンタによりデクリメントされ( ステップ1−0a、1−1a、1−2a、1−3a)、0と比較される(ステッ プ1−0b、1−1b、1−2b、1−3b)。デクリメント後にLOCKCOUNTレ ジスタが0になる場合には、トラツプLockCountZeroDecrementTrapが生成される 。上記のようにいくつかの実施例ではテーブル310の位置 mLOCKCOUNTは、LOCKCOUNTレジスタより大きい。そのようないくつかの実施例で は、LockCountZeroDecrementTrapに対するトラツプハンドラが、あるエントリに 対する対応するテーブル310を探索し、そのエントリのmLOCKADDRは、アンロ ックされるオブジェクトのアドレスを格納する。そのようなエントリが見いださ れる場合、トラップハンドラは、0までデクリメントされたLOCKCOUNTに対応す るmLOCKCOUNT位置をチェックする。そのmLOCKCOUNT位置が、LOCKCOUNTレジスタ に書き込まれていなかったMSBにおいて「1」に有する場合、そのオブジェクト はスレッドによりロック状態を保持する。mLOCKCOUNTメモリ位置では、MSBに より形成されるフィールドがデクリメントされ、LSBが11…1(全て1)に 設定され、LOCKCOUNTレジスタに書き込まれる。 mLOCKCOUNTのMSBが全て0、すなわちアンロックされるオブジェクトのアド レスを保持するmLOCKADDRを有するエントリが存在しない場合には、そのトラッ プハンドラはロックを解除し、他のスレッドが利用できるようにする。ロックの 解除処理は、以下により詳細に記載される。 mLOCKCOUNT位置がLOCKCOUNTレジスタより大きくない場合には、トラップハン ドラは、ロックが解除されるべきか否かを判定するためにmLOCKCOUNT位置をチェ ックする必要はない。 ロックの解除処理は以下の動作を含む。トラップハンドラがオブジェクトヘッ ダ220HのWANTビットを検査する。WANTビットが設定されている場合、他のス レッドがこのロックにおいて阻止している。トラップハンドラがそのようなスレ ッドの1つを選択し、その状態を実行可能に設定し、さらにこのスレッドにロッ クを与える。詳細には、トラップハンドラはLOCKCOUNTレジスタに1のカウント 値を書き込む。 1つの対応するレジスタ対mLOCKADDR/mLOCKCOUNTが存在した場合には、そのト ラップハンドラはmLOCKCOUNT位置に1を書き込む。別法ではいくつかの実施例で は、トラップハンドラはLOCKADDR位置に0を書き込み、mLOCKADDR/mLOCKCOUNT 対を割当て解除する。さらに、ロックを受け取るスレッドがそのロックにおいて 阻止しているスレッドのみである場合には、そのトラップハンドラはWANTビット をリセットする。 そのロックにおいて阻止するスレッドが存在しない場合には、そのトラップハ ンドラは0を(a)対応するLOCKADDRレジスタに、及び(b)存在するなら、対応す るmLOCKADDR位置に書き込む。さらにトラップハンドラはヘッダ220HのLOCK ビットをリセットする。またそのレジスタが利用できなかったため、現在のスレ ッドのテーブル310がLOCKADDR/LOCKCOUNTレジスタに書き込まれることがで きなかった非空きエントリを含む場合、トラップハンドラは、そのエントリの1 つを、ロック解除動作により空き状態にされるLOCKADDR/LOCKCOUNTレジスタ対 に配置する。 いかなるLOCKADDRレジスタもアンロックされるオブジェクトのアドレスを保持 しない場合には(ステップ2)、LockReleaseTrapが生成される。その関連する トラップハンドラは、アンロックされるオブジエクトのアドレスに対する現在の スレッドのテーブル310のmLOCKADDR位置を探索する。一致する場合には、対 応する位置mLOCKCOUNTはトラップハンドラによりデクリメントされる。mLOCKCOU NTが0になる場合ロックは解除される。ロックを解除するためにトラツプハンド ラは、トラツプLockCountZeroDecrementTrapに対して上記の動作と類似の動作を 実行する。より詳細には、WANTビットが設定される場合、トラップハンドラはそ のロックにおいて阻止す る別のスレッドを探索し、そのスレッドの状態を実行可能に設定する。トラップ ハンドラは対応する位置mLOCKCOUNTを1に設定する。いくつかの実施例では、そ のトラップハンドラはmLOCKADDR/mLOCKCOUNTエントリをLOCKADDR/LOCKCOUNTレ ジスタ対に配置する。ロックを受け取るスレッドが、そのロックにおいて阻止さ れている唯一のスレッドである場合には、トラップハンドラはWANTビットをリセ ットする。そのロックにおいて阻止するスレッドが存在しない(WANTビットが0 であった)場合には、そのトラップハンドラはmLOCKADDR位置に0を書き込み、 オブジェクトヘッダ220HのLOCKビットをリセットする。 現在スレッドのテーブル310においていかなるメモリ位置mLOCKADDRもアン ロックされるオブジェクトのアドレスを保持しない場合、そのトラップハンドラ は例外IllegalMonitorStateExceptionを生成する。いくつかの実施例では、この 例外はJAVA(登録商標)動作である。より詳細には幾つかの実施例では、プロセ ッサ110はJAVA(登録商標)仮想マシン言語命令(JAVAバイトコードとしても 知られる)を実行する。JAVA仮想マシン言語は、例えばLindholm and F.Yellin による「The JAVATM Virtual Machine Specification」(1997)に記載され ており、ここで参照して本明細書の一部としている。 プロセッサ110は以下に示す多くの通常状態において、高速ロック処理及び アンロック処理を実現する。ロックに対する競合が存在しない場合、さらにオブ ジェクトロックが解除される前に、同じオブジェクトにおいてスレッドが多数の ロック動作を実行する場合であるがそれに相当する。より詳細には、オブジェク トが別のスレッドによりロックされていない(すなわち競合が生じない)多くの 場合において、ロック命令が発行される場合である。そのオブジェクトが、現在 のロック命令を発 行した同じスレッドにより既にロックされている場合、多くの場合、スレッドが 同時に5つ以上のロックを保持せず、さらにそのスレッドに対する全てのロック されたオブジェクトアドレスがLOCKADDRレジスタ内に存在するため、多くの場合 にそのオブジェクトのアドレスは既にLOCKADDRレジスタ内に存在する。ロックさ れたオブジェクトアドレスがLOCKADDRレジスタ内に全く存在しない場合でも、ロ ック命令により識別されるオブジェクトのアドレスがLOCKADDRレジスタ内に存在 する可能性がある。そのような多くの場合において、ロック処理動作は対応する LOCKCOUNTレジスタをインクリメントする必要があり(付録A、ステップ1−i a、ただしi=0、1、2、3)、多くの実施例においてそれは高速動作である 。そのインクリメントによりオーバーフローが生じない場合には、いかなるトラ ップも生成されないであろう。 またレジスタ対LOCKADDR/LOCKCOUNTの1つが未使用である場合には、そのオ ブジェクトがいかなるスレッド(ロック命令を発行するスレッドを含む)によっ てもロックされていない際に、ロック処理は高速化される。そのような場合には 、オブジェクトはステップ2b−0から2b−3の1つにおいてロックされる( 付録A)。再びいかなるトラップも生成されない。 同様に、アンロック命令では多くの場合に、ロックされるオブジェクトのアド レスがLOCKADDRレジスタの1つに存在するであろう。対応するLOCKCOUNTレジス タが0ではない値にデクリメントされる場合には、いかなるトラップも生成され ない。 いくつかの実施例では、プロセッサ110は、Sun Microsystems(Mountain Vi ew,California)によりその仕様が作成された「picoJAVA I」タイプのマイクロ プロセッサである。このマイクロプロセッサは JAVA仮想マシン命令を実行する。ロック命令は、JAVA仮想マシン命令セットの「 monitorenter」命令か、或いはプロセツサ「picoJAVA I」の「enter_sync_metho d」命令である。「enter_sync_method」命令は「monitorexit」に類似であるが 、「enter_sync_method」命令は、オブジェクト以外のメソッドへの参照値をパ ラメータとして取得する。 「enter_sync_method」はそのメソッドに対する受信オブジェクトをロックし、 そのメソッドを呼び出す。アンロック命令はJAVA仮想マシン命令セットの「monit orexit」命令か、或いは上記「enter_sync_method」命令において参照されるメソッ ドからのリターン命令である。 プロセッサ110のいくつかの実施例は、4つ以上或いは4つ以下のLOCKADDR /LOCKCOUNTレジスタ対を含む。 いくつかの実施例では、レジスタ144は、図4に示されるように3組のレジ スタ「THREAD_ID,LOCKADDR,LOCKCOUNT」を備える。 その3組のレジスタでは、レジスタTHREAD_IDが、レジスタ対LOCKADDR/LOCKCOU NTに記録されるロックを保持するスレッドを識別する。ロック或いはアンロック 命令が発行される際に、実行ユニット136は、レジスタTHREAD_IDが現在のス レッドのIDを保持するそのLOCKADDR/LOCKCOUNT対のみを検査する。他の点で は、ロック及びアンロック命令の実行は第2図の場合と同様である。第4図の構 造は、異なるスレッドに対して同時にロックされたオブジェクトのアドレス及び ロックカウントをレジスタ144に保持するのを容易にする。第4図の構造を用 いるいくつかの実施例では、オペレーティングシステムは、異なるスレッドが実 行をスケジュールされる際に、レジスタ144をリロードしない。オペレーティ ングシステムは、第3図に示されるように各スレッドに対するテーブル310を 保持する。3組のレジスタが空状態にされる必要がある際に、対応するLOCKADDR / LOCKCOUNT値が対応するテーブル310に書き込まれる。テーブルエントリがレ ジスタ対LOCKADDR/LOCKCOUNTに配置される際に、対応するレジスタTHREAD_IDが 、対応するスレッドのIDを書き込まれる。 第1図−第4図のプロセッサは、JAVA仮想マシンロック及びアンロック命令「 monitorenter」及び「monitorexit」を効率よく実行するのに適している。JAVA のオブジェクトモニタに関連するカウンタは、レジスタLOCKCOUNTを用いて実装 されることができる。 ある実施例ではレジスタLOCKCOUNT及び位置mLOCKCOUNTは省略される。プロセ ッサはLOCKCOUNTのトラックを保持せず、プロセッサがそのロックに対応するあ らゆるアンロック命令においてロックを解除する。プロセッサ動作は、付録A及 びBに関連して上記した動作と同様である。しかしながら付録Aでは、ステップ 1−0から1−3bまでが省略される。またステップ2b−0b、2b−1b、 2b−2b及び2b−3b(LOCKCOUNT動作)も省略される。付録Bでは、ステ ップ1−0aが省略され、ステップ1−0bでは、無条件にトラップLockCountZ eroDecrementTraptが生成される。同じことがステップ1−1a及び1−1b、 1−2a及び1−2b、1−3a及び1−3bにも当てはまる。 いくつかの実施例では、各LOCKCOUNTレジスタは1ビット長であり、プロセッ サはそのロックに対応するあらゆるアンロック命令においてロックを解除する。 上記実施例は例示であって、本発明を限定するものではない。本発明は、任意 の特定のプロセッサアーキテクチャ、キャッシュ或いはメモリの存在または構造 、或いは任意のレジスタまたはメモリ位置におけるビット数により制限されない 。本発明は、ロック或いはアンロックされる ようになる任意の特定のタイプのオブジェクトに制限されない。オブジェクトは 、データ、クリティカルコード部分、ハードウエア或いは上記の任意の組み合わ せのようなリソースを含む任意のコンピュータリソースを表すことができる。い くつかの実施例は、ロック処理及びアンロック処理動作のためのコンピュータリ ソースを表す専用のオブジェクトを形成する。上記実施例では、未使用のレジス タ対LOCKADDR/LOCKCOUNTはLOCKADDRレジスタにおいて0により識別されるが、 いくつかの実施例では未使用レジスタ対は、LOCKADDRレジスタにおける0ではな い値、すなわちLOCKCOUNTレジスタのある値によって、または第4図の実施例の 場合、THREAD_IDレジスタのある値、或いはLOCKADDR/LOCKCOUNTレジスタ対並び にまた任意の2つ或いは3つのLOCKADDR/LOCKCOUNT/THREAD_IDレジスタの値の 組み合わせにより、または個別のビットにより識別される。同様のことが未使用 のmLOCKADDR/mLOCKCOUNT位置の場合に当てはまる。いくつかの実施例では、ト ラップハンドラにより実行されるような上記の動作のいくつか或いは全てがソフ トウエアではなくハードウエアにより実行される。いくつかの実施例では、ハー ドウエアにより実行されるように上記されたいくつかの動作がハードウエアでは なくソフトウエアにより実行される。本発明はバイトアドレスであるアドレスに 限定されない。他の実施例及び変形例も本発明の範囲内にあり、添付の請求項に より規定される。
【手続補正書】特許法第184条の8第1項 【提出日】平成11年1月14日(1999.1.14) 【補正内容】 れるレジスタを示すブロック図である。好適な実施例の説明 第1図は、ロック処理回路を備えるコンピュータシステムのブロック図である 。プロセッサ110はバス130によりメモリ120に接続される。プロセッサ 110は、メモリ120から呼び出された命令を実行する実行ユニット136を 備える。実行ユニット136は、LOCKADDR,LOCKCOUNTを付されたレジスタ14 4を備える。これらのレジスタは、以下に記載するようなオブジェクトロック処 理の場台に用いられる。 バス130は、I/Oバス及びプロセッサ110のメモリインターフエースユ ニット150に接続される。プロセッサ110がメモリ120から命令を読み出 す際に、インターフェースユニット150がその命令を命令キャッシュ156に 書き込む。その後その命令はデコードユニット160によりデコードされる。デ コードユニット160はコントロール信号を実行コントロール及びマイクロコー ドユニット166に送出する。ユニット166はコントロール信号を実行ユニッ ト136と交換する。またデコードユニット160はコントロール信号をスタッ クキャッシュ及びスタックキャッシュコントロールユニット170(以下では「ス タックキャッシュ」と呼ばれる)にも送出する。スタックキャッシュ170はコン トロール及びデータ信号を実行ユニット及びデータキャッシュユニット180と 交換する。キャッシュユニット170及び180は、インターフェース150及 びバス130を介してメモリ120とデータを交換する。実行ユニット136は 命令キャッシュ156、スタックキャッシュ170及びデータキャッシュ180 をフラッシュすることができる。 第2図は、レジスタ144及びメモリ120内の対応するオブジェク トの1つを示す。レジスタ144は、LOCKADDRO/LOCKCOUNTOからLOCKADDR3/L OCKCOUNT3を付された4つのレジスタ対を備える。各LOCKADDRレジスタは、ロッ クされるオブジェクトのアドレスを保持する。この実施例では各アドレスは32 ビット長であるため、各LOCKADDRレジスタは32ビット長である。しかしながら いくつかの実施例では各オブジェクトは4バイト境界上で始まる。それゆえその 実施例ではオブジェクトのアドレスの2つの最下位ビットは0であり、レジスタ LOCKADDRから省略される。そのような実施例では、各レジスタLOCKADDRは30ビ ット長である。 LOCKADDRレジスタが0を含む場合、これはレジスタ対が未使用であることを意 味する。 各レジスタ対では、LOCKCOUNTレジスタが、そのオブジェクトに対するロック 命令のカウント値を保持し、そのオブジェクトのアドレスが対応するLOCKADDRレ ジスタに保持される。LOCKCOUNTレジスタは、対応するアンロック命令が発行さ れていないロック命令の数を保持する。LOCKCOUNTレジスタはそのオブジェクト に対する各ロック命令時にインクリメントされ、各アンロック命令時にデクリメ ントされる。そのロックは実際に、LOCKCOUNTレジスタが0までデクリメントさ れる場合にのみ解除される(しかしながらいくつかの実施例では、以下に記載す るように、LOCKCOUNTレジスタはロックカウントの一部のみを保持する。そのロ ックは、全ロックカウントが0までデクリメントされる場合に解除される)。い くつかの実施例では、各LOCKCOUNTレジスタは8ビット長であり、0〜255の 数を保持する。 多数のロック命令にアンロック命令が介在しないのは、再帰的コードによるも のである。LOCKCOUNTレジスタが、そのオブジェクトに対 行した同じスレッドにより既にロックされている場合、多くの場合、スレッドが 同時に5つ以上のロックを保持せず、さらにそのスレッドに対する全てのロック されたオブジェクトアドレスがLOCKADDRレジスタ内に存在するため、多くの場合 にそのオブジェクトのアドレスは既にLOCKADDRレジスタ内に存在する。ロックさ れたオブジェクトアドレスがLOCKADDRレジスタ内に全く存在しない場合でも、ロ ック命令により識別されるオブジェクトのアドレスがLOCKADDRレジスタ内に存在 する可能性がある。そのような多くの場合において、ロック処理動作は対応する LOCKCOUNTレジスタをインクリメントする必要があり(付録A、ステップ1−i a、ただしi=0、1、2、3)、多くの実施例においてそれは高速動作である 。そのインクリメントによりオーバーフローが生じない場合には、いかなるトラ ップも生成されないであろう。 またレジスタ対LOCKADDR/LOCKCOUNTの1つが未使用である場合には、そのオ ブジェクトがいかなるスレッド(ロック命令を発行するスレッドを含む)によっ てもロックされていない際に、ロック処理は高速化される。そのような場合には 、オブジェクトはステップ2b−0から2b−3の1つにおいてロックされる( 付録A)。再びいかなるトラップも生成されない。 同様に、アンロック命令では多くの場合に、ロックされるオブジェクトのアド レスがLOCKADDRレジスタの1つに存在するであろう。対応するLOCKCOUNTレジス タが0ではない値にデクリメントされる場合には、いかなるトラップも生成され ない。 いくつかの実施例では、プロセッサ110は、Sun Microsystems(Mountain Vi ew,California)によりその仕様が作成された「picoJAVA I」タイプのマイクロ プロセッサである。このマイクロプロセッサは JAVA仮想マシン命令を実行する。ロック命令は、JAVA仮想マシン命令セツトの「 monitorenter」命令か、或いはプロセツサ「picoJAVA I」の「enter_sync_metho d」命令である。「enter_sync_method」命令は「monitorenter」に類似であるが 、「enter_sync_method」命令は、オブジェクト以外のメソッドへの参照値をパ ラメータとして取得する。「enter_sync_method」はそのメソッドに対する受信 オブジェクトをロックし、そのメソッドを呼び出す。アンロック命令はJAVA仮想 マシン命令セットの「monitorexit」命令か、或いは上記「enter_sync_method」命令 において参照されるメソッドからのリターン命令である。 プロセッサ110のいくつかの実施例は、4つ以上或いは4つ以下のLOCKADDR /LOCKCOUNTレジスタ対を含む。 いくつかの実施例では、レジスタ144は、図4に示されるように3組のレジ スタ「THREAD_ID,LOCKADDR,LOCKCOUNT」を備える。 その3組のレジスタでは、レジスタTHREAD_IDが、レジスタ対LOCKADDR/LOCKCOU NTに記録されるロックを保持するスレッドを識別する。ロック或いはアンロック 命令が発行される際に、実行ユニット136は、レジスタTHREAD_IDが現在のス レッドのIDを保持するそのLOCKADDR/LOCKCOUNT対のみを検査する。他の点で は、ロック及びアンロック命令の実行は第2図の場台と同様である。第4図の構 造は、異なるスレッドに対して同時にロックされたオブジェクトのアドレス及び ロックカウントをレジスタ144に保持するのを容易にする。第4図の構造を用 いるいくつかの実施例では、オペレーティングシステムは、異なるスレッドが実 行をスケジュールされる際に、レジスタ144をリロードしない。オペレーティ ングシステムは、第3図に示されるように各スレッドに対するテーブル310を 保持する。3組のレジスタが空状態にされる必要がある際に、対応するLOCKADDR /請求の範囲 1.コンピュータプロセッサ(110)であって、 ロック状態のコンピュータリソースを識別する値を保持するための1つ或いは それ以上のレジスタR1(LOCKADDR)であって、前記コンピュータプロセッサに より実行されており、かつコンピュータリソースに対するロックを保持すること ができるコンピュータエンティティによりロック処理動作が実行される場合にの み、前記各レジスタR1が前記ロック処理動作により変更可能である、該レジス タR1と、 コンピュータリソースをロックするためのロック処理動作、コンピュータリソ ースをアンロックするためのアンロック処理動作或いはロック処理及びアンロッ ク処理動作の両方を実行するための回路部品であって、前記回路部品がコンピュ ータリソースを識別する値V1を受け取るための回路部分であり、また前記レジ スタR1が、前記プロセッサにより実行されている前記コンピュータエンティテ ィにより前記リソースがロックされていることを指示する前記値V1を保持する か否かを判定するための回路部分である、該回路部品とを備えることを特徴とす るコンピュータプロセッサ。 2.前記レジスタR1が、前記コンピュータプロセッサの命令実行ユニット(1 36)の一部であることを特徴とする請求項1に記載のコンピュータプロセッサ 。 3.前記レジスタR1により識別されるロック状態のコンピュータリソースに関 連するカウント数を表す値を保持するための1つ或いはそれ以上のレジスタR2 (LOCKCOUNT)をさらに備え、前記各カウント数が、リソースに対して発行され たが、対応するアンロック命令が発行されなかったロック命令のカウント数であ り、前記ロック処理或いはアンロック処理動作の少なくとも1つにおいて、前記 回路部品が、前記レジ スタR1が前記リソースがロックされることを指示する前記値V1を保持する場 合にレジスタR2を変更することを特徴とする請求項1或いは2に記載のコンピ ュータプロセッサ。 4.前記レジスタR2が前記コンピュータプロセッサの命令実行ユニット(13 6)の一部であることを特徴とする請求項3に記載のコンピュータプロセッサ。 5.前記各レジスタR2が対応する所定のレジスタR1と関連するカウント値を 保持することを特徴とする請求項3或いは4に記載のコンピュータプロセッサ。 6.前記各レジスタR1のために、前記対応するレジスタR1の値により識別さ れるリソースに対するロックを保持する実行可能コンピュータ工ンティティを識 別するためのレジスタR3(THREAD_ID)をさらに備え、 前記レジスタR1が前記値V1を保持するか否かを判定する前記回路部品が、 前記コンピュータプロセッサにより実行されている前記コンピュータエンティテ ィを識別する任意のレジスタR3のために、前記対応するレジスタR1が前記値 V1を保持するか否かを判定する回路部品を備えることを特徴とする請求項1乃 至5のいずれか一項に記載のコンピュータプロセッサ。 7.プロセッサにより実行されているコンピュータエンティティによりロックさ れるリソースを識別する値を格納するための1つ或いはそれ以上のロック処理レ ジスタR1を備えるコンピュータプロセッサを動作するためのプロセスであって 、 1つのコンピュータエンティティから異なるコンピュータエンティティに切り 替わる前記コンピュータプロセッサを備え、 前記プロセッサが1つのコンピュータエンティティから異なるコンピ ュータエンティティに切り替わる際に、前記プロセッサが切り替える前記コンピ ュータエンティティによりロックされるリソースを識別する値を有する前記1つ 或いはそれ以上のレジスタR1をロードすることを特徴とするプロセス。 8.前記プロセッサがさらに、前記各レジスタR1に対して、前記対応するレジ スタR1により識別されるリソースに関連するカウント数を保持するための対応 するレジスタR2を備え、前記カウントが、対応するアンロック命令が発行され ていないロック命令のカウント数であり、 前記プロセッサが1つのコンピュータエンティティから異なるコンピュータエ ンティティに切り替わる際に、各レジスタR2が、前記対応するレジスタR1に ロードされている値に対応するカウント数をロードされ、前記カウント数が、前 記プロセッサが切り替えている前記コンピュータエンティティに関連しているこ とを特徴とする請求項7に記載のプロセス。 9.コンピュータオブジェクトデータ(220)を格納するコンピュータ読出し 可能記憶媒体であって、前記オブジェクトデータが、前記オブジェクトデータの 一部(230)のアドレスを識別する情報を格納するフィールド(220H)を 備え、また前記オブジェクトデータの前記部分が2バイト境界に格納されている 部分であり、さらに前記フィールドがある大きさのコンピュータアドレスを有す るが、前記フィールドが前記オブジェクトデータの前記部分の前記アドレスの全 ビットより少ないビットを格納し、前記フィールドの全ビットより少ないビット が、前記オブジェクトの前記部分の前記アドレスを格納するために用いられ、 前記コンピュータ読出し可能記憶媒体が前記オブジェクトデータにアクセスす るための1つ或いはそれ以上のコンピュータ命令を備え、前記オブジェクトデー タの前記部分の前記アドレスを格納するためには用い られない前記アドレスの1つ或いはそれ以上のビット(L)が、前記オブジェク トがロックされるか否かを示すためのコンピュータ命令により用いられることを 特徴とするコンピュータ読出し可能記憶媒体。 10.前記オブジェクトデータの前記部分が4バイト境界に格納されるための部 分であり、また前記フィールドが、前記オブジェクトの前記部分の前記アドレス を格納するためには用いられない2つのビット(W、L)を有し、さらに前記オ ブジェクトデータの前記部分の前記アドレスを格納するためには用いられない前 記フィールドの前記1つ或いはそれ以上のビットが、コンピュータエンティティ が前記オブジェクトに対するロックを捕捉することを要求するか否かを示すため の前記コンピュータ命令により用いられるビット(W)を含むことを特徴とする 請求項9に記載のコンピュータ読出し可能記憶媒体。 11.前記コンピュータ読出し可能記憶媒体にアクセスし、前記コンピュータ命 令を実行するために動作可能なコンピュータプロセッサと組み合わせられること を特徴とする請求項9或いは10に記載のコンピュータ読出し可能記憶媒体。
───────────────────────────────────────────────────── フロントページの続き (72)発明者 オコナー、ジェイムズ・マイケル アメリカ合衆国カリフォルニア州94043・ マウンテンビュー・ルースアベニュー 345 (72)発明者 トレンブレイ、マーク アメリカ合衆国カリフォルニア州94301・ パロアルト・ウエイバリーストリート 801・アパートメント #3

Claims (1)

  1. 【特許請求の範囲】 1.回路であって、 コンピュータリソースに対するロックを識別する値を保持するための1つ或い はそれ以上のレジスターR1と、 コンピュータリソースをロックするためのロック処理動作、コンピュータリソ ースをアンロックするためのアンロック処理動作或いはロック処理及びアンロッ ク処理動作両方を実行するための回路部品とを備え、前記回路部品が、コンピュ ータリソースに対するロックを識別する値V1を受け取り、かつ任意のレジスタ R1が前記値V1を保持するか否かを判定するための回路部品であることを特徴 とする回路。 2.前記レジスタR1により識別されるロックに関連するカウント数を表す値を 保持するための1つ或いはそれ以上のレジスタR2をさらに備え、 少なくとも1つのロック処理或いはアンロック処理動作において、前記回路部 品が、任意のレジスタR1が前記値V1を保持する場合にレジスタR2を変更す ることを特徴とする請求項1に記載の回路。 3.前記レジスタR2を変更する処理が、ロック処理動作において前記レジスタ R2をインクリメントする処理を含むことを特徴とする請求項2に記載の回路。 4.前記回路部品が、 前記1つ或いはそれ以上のレジスタR1に保持される各値を前記値V1と比較 するためのコンパレータと、 前記レジスタR2の前記値をインクリメントするためのインクリメンタとを備 えることを特徴とする請求項2に記載の回路。 5.前記レジスタR2を変更する処理が、アンロック処理動作において前記レジ スタR2をデクリメントする処理を含むことを特徴とする請求 項2に記載の回路。 6.前記回路部品が、 前記1つ或いはそれ以上のレジスタR1に保持される1つ或いはそれ以上の各 値を前記値V1と比較するためのコンパレータと、 前記レジスタR2における前記値をデクリメントするためのデクリメンタとを 備えることを特徴とする請求項2に記載の回路。 7.前記回路部品が前記値V1を保持するいかなるレジスタR1も備えてない場 合のロック処理において、前記回路部品がいかなるコンピュータリソースに対す るロックを識別するためにも用いられない未使用のレジスタR1を備え、また前 記回路部品が前記未使用のレジスタR1における前記値V1を格納することを特 徴とする請求項1に記載の回路。 8.前記回路部品が前記値V1を保持するいかなるレジスタR1も備えていない 場合に、前記回路部品が、コンピュータリソースがロックされるか否かを判定し 、また前記回路が、前記コンピュータリソースがアンロックされる場合にのみ未 使用レジスタR1に前記値V1を格納することを特徴とする請求項7に記載の回 路。 9.前記回路部品が前記値V1を保持するいかなるレジスタR1も備えていない 場合のロック処理動作において、前記回路部品がいかなるコンピュータリソース に対するロックを識別するためにも用いられないR1を備え、また前記回路部品 が、前記未使用レジスタR1に前記値V1を格納し、またレジスタR2に所定の 値を格納することを特徴とする請求項2に記載の回路。 10.前記回路部品が前記値V1を保持するいかなるレジスタR1も備えていな い場合に、前記回路部品が前記コンピュータリソースがロックされるか否かを判 定し、また前記回路が、前記コンピュータリソースがアンロックされる場合にの み未使用レジスタR1に前記値V1を格納す ることを特徴とする請求項9に記載の回路。 11.前記回路がコンピュータプロセッサを備えることを特徴とする請求項1に 記載の回路。 12.コンピュータリソースにおいてロック処理或いはアンロック処理動作を実 行するためのプロセスであって、前記プロセスが、 コンピュータリソースに対するロックを識別する値V1を受け取る回路部品を 備え、 前記回路部品が、1つ或いはそれ以上の所定のレジスタR1の1つが前記値V 1を保持するか否かを判定することを特徴とするプロセス。 13.前記レジスタR1が前記値V1を保持する場合に、前記値V1により識別 される前記ロックと関連するカウント値を更新するためにレジスタR2を変更す る過程をさらに有することを特徴とする請求項12に記載のプロセス。 14.前記プロセスがロック処理動作を実行するためのプロセスであり、またい かなる前記レジスタR1も前記値V1を保持しない場合に、前記プロセスが、前 記1つ或いはそれ以上のレジスタR1の1つが未使用であるか否かを判定する過 程を有し、また未使用である場合に、前記値V1を未使用レジスタR1に格納す ることを特徴とする請求項12に記載のプロセス。 15.コンピュータオブジェクトデータを格納するコンピュータ読出し可能記憶 媒体であって、前記オブジェクトデータが前記オブジェクトデータの一部のアド レスを識別する情報を格納するフィールドを備え、前記オブジェクトデータの前 記部分が2バイト境界に格納されている部分であり、また前記フィールドがある 大きさのコンピュータアドレスを有するが、前記フィールドは前記オブジェクト データの前記部分の前記アドレスの全ビットより少ないビットを格納し、前記フ ィールドの全ビッ トより少ないビットが前記オブジェクトデータの前記部分の前記アドレスを格納 するために用いられ、また前記オブジェクトデータの前記部分の前記アドレスを 格納するためには用いられない前記フィールドの1つ或いはそれ以上のビットが 、前記オブジェクトがロックされるか否かを示す情報を格納するビットであるこ とを特徴とするコンピュータ読出し可能記憶媒体。 16.前記オブジェクトデータの前記部分が4バイト境界に格納されるための部 分であり、また前記フィールドが前記オブジェクトデータの前記部分の前記アド レスを格納するために用いられない少なくとも2つのビットを有し、前記オブジ ェクトデータの前記部分の前記アドレスを格納するために用いられない前記フィ ールドの前記1つ或いはそれ以上のビットが、コンピュータエンティティが前記 オブジェクトに対するロックを捕捉することを要求するか否かを示すためのビッ トを含むことを特徴とする請求項15に記載のコンピュータ読出し可能記憶媒体 。
JP53193298A 1997-01-23 1997-01-23 コンピュータリソースのロック処理 Expired - Lifetime JP4196414B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/US1997/001217 WO1998033119A1 (en) 1997-01-23 1997-01-23 Locking of computer resources

Publications (2)

Publication Number Publication Date
JP2001519937A true JP2001519937A (ja) 2001-10-23
JP4196414B2 JP4196414B2 (ja) 2008-12-17

Family

ID=22260287

Family Applications (1)

Application Number Title Priority Date Filing Date
JP53193298A Expired - Lifetime JP4196414B2 (ja) 1997-01-23 1997-01-23 コンピュータリソースのロック処理

Country Status (5)

Country Link
EP (1) EP0954780B1 (ja)
JP (1) JP4196414B2 (ja)
KR (1) KR100470555B1 (ja)
DE (1) DE69711927D1 (ja)
WO (1) WO1998033119A1 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008546086A (ja) * 2005-06-06 2008-12-18 トランジティブ リミテッド 共有リソースのためのアクセス協調を伴うプログラムコードを変換する方法および装置

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
FR2784478B1 (fr) * 1998-10-09 2000-11-17 Bull Sa Architecture de verrou pour grand systeme
DE19903599A1 (de) * 1999-01-29 2000-08-03 Siemens Ag Verfahren zum gesicherten Zugriff auf zumindest eine Variable in einem präemptiv Multitasking-gesteuerten Prozessorsystem
US6792601B1 (en) 2000-05-18 2004-09-14 International Business Machines Corporation Multiple mode object locking method and system
US6684398B2 (en) * 2000-05-31 2004-01-27 Sun Microsystems, Inc. Monitor entry and exit for a speculative thread during space and time dimensional execution
US6735760B1 (en) * 2000-11-08 2004-05-11 Sun Microsystems, Inc. Relaxed lock protocol
FR2829848A1 (fr) * 2001-09-20 2003-03-21 Cp8 Procede de gestion d'acces a des ressources partagees dans un systeme embarque et systeme embarque pour la mise en oeuvre d'un tel procede

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4435766A (en) * 1981-06-16 1984-03-06 International Business Machines Corporation Nested resource control using locking and unlocking routines with use counter for plural processes
US5261108A (en) * 1988-10-08 1993-11-09 Nec Corporation Multiprocessor communications register providing complete access in a full access mode, and mapped access in a partial access mode

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008546086A (ja) * 2005-06-06 2008-12-18 トランジティブ リミテッド 共有リソースのためのアクセス協調を伴うプログラムコードを変換する方法および装置

Also Published As

Publication number Publication date
JP4196414B2 (ja) 2008-12-17
WO1998033119A1 (en) 1998-07-30
DE69711927D1 (de) 2002-05-16
EP0954780B1 (en) 2002-04-10
KR100470555B1 (ko) 2005-03-07
KR20000070374A (ko) 2000-11-25
EP0954780A1 (en) 1999-11-10

Similar Documents

Publication Publication Date Title
US5968157A (en) Locking of computer resources
EP0768608B1 (en) Maximal concurrent lookup cache for computing systems having a multi-threaded environment
JP4550894B2 (ja) マネージドランタイム環境におけるロック大型化方法およびロック大型化装置に基づくスレッド同期
US8136112B2 (en) Thread synchronization via selective modification of stored states of pending optimistically balanced lock releases having previous lock owner and validity flag
Greenwald et al. The synergy between non-blocking synchronization and operating system structure
US7571288B2 (en) Scalable rundown protection for object lifetime management
US5265245A (en) High concurrency in use manager
US6411983B1 (en) Mechanism for managing the locking and unlocking of objects in Java
US6658490B1 (en) Method and system for multi-threaded processing
US7747996B1 (en) Method of mixed lock-free and locking synchronization
US6230230B1 (en) Elimination of traps and atomics in thread synchronization
US20110167231A1 (en) Value Recycling Facility for Multithreaded Computations
US6842809B2 (en) Apparatus, method and computer program product for converting simple locks in a multiprocessor system
US7991967B2 (en) Using type stability to facilitate contention management
JP4620871B2 (ja) マルチスレッドコンピュータシステムにおけるモニタ変換
Dice Implementing Fast {Java™} Monitors with {Relaxed-Locks}
JP4196414B2 (ja) コンピュータリソースのロック処理
US6874059B1 (en) System and method for using anonymous tokens for efficient memory management
JPH0650471B2 (ja) 使用中テーブルの管理方法

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20040330

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20040622

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20040809

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20040930

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20050517

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20050913

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20051020

A911 Transfer of reconsideration by examiner before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20051104

A912 Removal of reconsideration by examiner before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A912

Effective date: 20060126

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20080707

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20080707

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20080922

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20111010

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20121010

Year of fee payment: 4

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313111

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20121010

Year of fee payment: 4

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20131010

Year of fee payment: 5

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

EXPY Cancellation because of completion of term