【手続補正書】
【提出日】平成18年6月22日(2006.6.22)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】特許請求の範囲
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】  マルチスレッド・コンピューティング・システム内の複数のスレッドが共有しているメモリをアロケートする方法であって、
前記共有メモリを複数のブロックへ分割する工程と、
前記複数のスレッドを少なくとも第１グループのスレッド及び第２グループのスレッドへグループ分けする工程と、
前記複数のブロックから選択した第１ブロックを、前記複数のスレッドから選択したスレッドへアロケートする工程と
を含み、前記選択したスレッドは、オブジェクトを前記選択した第１ブロック内でアロケートすることを試みるために設けられ、前記選択したスレッドへの前記選択した第１ブロックのアロケーションは、前記選択したスレッドが前記第１グループ及び第２グループのうちのいずれの一部であるかということに少なくとも部分的に基づいて実施される方法。
【請求項２】  請求項１に記載の複数のスレッドが共有しているメモリをアロケートする方法において、前記複数のスレッドを第１グループ及び第２グループへグループ分けする工程は、
前記複数のスレッドから選択した特定のスレッドを識別する工程と、
前記特定のスレッドが高速アロケーティング・スレッドであるか否かを決定する工程と
を含み、前記特定のスレッドが高速アロケーティング・スレッドであることが確定した際、前記特定のスレッドを前記第１グループへグループ分けする方法。
【請求項３】  請求項２に記載の複数のスレッドが共有しているメモリをアロケートする方法において、前記特定のスレッドが高速アロケーティング・スレッドであることが確定した際、前記特定のスレッドはオブジェクトを比較的頻繁にアロケートすることを試み、前記特定のスレッドが高速アロケーティング・スレッドでないことが確定した際、前記特定のスレッドはオブジェクトを比較的頻繁にアロケートすることを試みることはなく、かつ前記第２グループへグループ分けされる方法。
【請求項４】  請求項２に記載の複数のスレッドが共有しているメモリをアロケートする方法において、前記特定のスレッドが高速アロケーティング・スレッドであることが確定した際、前記特定のスレッドは所定数を越す数のバイトを所定時間内でアロケートし、前記特定のスレッドが高速アロケーティング・スレッドでないことが確定した際、前記特定のスレッドは所定数未満の数のバイトを所定時間内でアロケートし、かつ前記第２グループへグループ分けされる方法。
【請求項５】  請求項２ないし請求項４のいずれか一項に記載の複数のスレッドが共有しているメモリをアロケートする方法において、前記特定のスレッドが高速アロケーティング・スレッドであるか否かを決定する工程は、前記複数のブロックに含まれる選択されたブロックのオーバーフローを、前記特定のスレッドが引き起こした回数を決定する工程を含む方法。
【請求項６】  請求項１ないし請求項５のいずれか一項に記載の複数のスレッドが共有しているメモリをアロケートする方法において、前記共有メモリを複数のブロックへ分割する工程は、前記共有メモリを少なくとも２つのサイズの複数のブロックへ分割する工程を含む方法。
【請求項７】  マルチスレッド・コンピューティング・システム内の共有メモリをアロケートする方法であって、前記マルチスレッド・コンピューティング・システムが第１スレッド及び第２スレッドを少なくとも有する方法において、
前記共有メモリを複数のブロックへ分割する工程と、
前記複数のブロックから選択した第１ブロックを前記第１スレッド及び第２スレッドの両方がアクセスできるブロックとして割り当てる工程と、第１オブジェクトを前記第１ブロック内でアロケートすることを試みるべく前記第１スレッドは設けられ、第２オブジェクトを前記第１ブロック内でアロケートすることを試みるべく前記第２スレッドは設けられていることと、
前記第１ブロックがオーバーフローした時を決定する工程と、
前記第１ブロックがオーバーフローしたことが確定した際、前記第１オブジェクトを第１ブロック内でアロケートする前記第１スレッドの試みが、前記第１ブロックのオーバーフローを引き起こしたか否かを決定する工程と、
前記第１オブジェクトを第１ブロック内でアロケートする前記第１スレッドの試みが、前記第１ブロックのオーバーフローを引き起こしたことが確定した際、前記複数のブロックから選択した第２ブロックを、前記第１スレッドへ割り当てる工程と、前記第２ブロックを第１スレッドへ割り当てる工程は、前記第１スレッドがオブジェクトを前記第１ブロック内でアロケートすることをそれ以降試みないようにすべく設けられていること
を含む方法。
【請求項８】  請求項７に記載の方法において、オブジェクトを前記第２ブロック内でアロケートすることを試みるべく前記第２スレッドは設けられていない方法。
【請求項９】  請求項７または請求項８に記載の方法において、前記第１ブロック及び第２ブロックの一方がオーバーフローした時を決定する工程と、
前記第２ブロックがオーバーフローしたことが確定した際、前記複数のブロックから選択した第３ブロックを前記第１スレッドへ割り当てる工程と、
前記第１ブロックがオーバーフローしたことが確定した際、前記第３ブロックを第２スレッドへ割り当てる工程とをさらに含む方法。
【請求項１０】  請求項９に記載の方法において、前記第１ブロックがオーバーフローしたことが確定した際、前記第１ブロックと置換するために、前記複数のブロックから選択した第４ブロックを割り当てる工程をさらに含む方法。
【請求項１１】  請求項１０に記載の方法において、前記複数のブロックが第４ブロックを含むか否かを決定する工程を含む方法。
【請求項１２】  請求項７ないし請求項１１のいずれか一項に記載の方法において、前記複数のブロックが第２ブロックを含むか否かを決定する工程を含む方法。
【請求項１３】  請求項１２に記載の方法において、前記複数のブロックが前記第２ブロックを含まないことが確定した際、
前記第１ブロックに関連するメモリ・スペースを解放するために、ガーベッジ・コレクションを前記共有メモリ領域で実施する工程と、
前記複数のブロックから選択した新たな第１ブロックを、前記第１スレッド及び第２スレッドの両方からアクセスできるように割り当てる工程と
を含む方法。
【請求項１４】  請求項１２に記載の方法において、前記複数のブロックが前記第２ブロックを含まないことが確定した際、
前記複数のブロックに関連するメモリ・スペースを解放するために、ガーベッジ・コレクションを前記共有メモリ領域で実施する工程と、
前記第１スレッドが高速アロケーティング・スレッドであるか否かを決定する工程と、
前記第１スレッドが高速アロケーティング・スレッドであることが確定した際、前記複数のブロックから選択した第３ブロックを前記第１スレッドへ割り当てる工程と
を含む方法。
【請求項１５】  請求項１２ないし請求項１４のいずれか一項に記載の方法において、前記複数のブロックから選択した新たな第１ブロックを前記第２スレッドがアクセスできるように割り当てる工程をさらに含む方法。
【請求項１６】  請求項１４または請求項１５に記載の方法において、前記第１スレッドが高速アロケーティング・スレッドであるか否かを決定する工程は、
オブジェクトを前記第１ブロック内でアロケートすることを試みるべく前記第１スレッドが設けられているか否かを決定する工程と、
オブジェクトを前記第１ブロック内でアロケートすることを試みるべく前記第１スレッドが設けられていることが確定した際、前記第１スレッドのアロケーション・ルーチンをロッキングへ設定する工程と、
オブジェクトを前記第１ブロック内でアロケートすることを試みるべく前記第１スレッドが設けられていないことが確定した際、前記第１スレッドがアロケートしたメモリが閾値を越えたか否かを決定する工程と、
オブジェクトを前記第１ブロック内でアロケートすることを試みるべく前記第１スレッドが設けられていないことが確定した際、前記第１スレッドのアロケーション・ルーチンをノンロッキングへ設定する工程と
を含む方法。
【請求項１７】  請求項７または請求項８に記載の方法において、前記第１ブロックがオーバーフローしたことが確定した際、前記第１ブロックを置換するために、前記複数のブロックから選択した第３ブロックを割り当てる工程をさらに含む方法。
【請求項１８】  請求項７ないし請求項１７のいずれか一項に記載の方法において、前記第１スレッドが前記第１ブロックのオーバーフローを引き起こしたことが確定した際、前記第１スレッドに関連するカウンタをインクリメントする工程をさらに含み、前記カウンタは前記第２ブロックを前記第１スレッドへ割り当てる時を示すために設けられている方法。
【請求項１９】  請求項１８に記載の方法において、前記カウンタが閾値を越えた時を決定する工程をさらに含み、前記カウンタが閾値を越えていることが確定するまで、前記第２ブロックを第１スレッドへ割り当てない方法。
【請求項２０】  請求項７ないし請求項１９のいずれか一項に記載の方法において、前記複数のブロックに含まれる各ブロックは実質的に全て同じサイズである方法。
【請求項２１】  請求項２０に記載の方法において、前記複数のブロックに含まれる各ブロックのサイズは約２キロバイトから約３２キロバイトの範囲内である方法。
【請求項２２】  マルチスレッド・コンピューティング・システム内の共有メモリをアロケートする方法であって、前記マルチスレッド・コンピューティング・システムが第１スレッド及び第２スレッドを少なくとも有する方法において、
前記共有メモリを、第１サイズの複数のブロックと、第２サイズの少なくとも１つのブロックとを含む複数のブロックへ分割する工程と、
前記第１サイズの複数のブロックから選択した第１ブロックを、第１オブジェクトを前記第１ブロック内でアロケートすることを試みるべく設けられた第１スレッドへ割り当てる工程と、
前記第１サイズの複数のブロックから選択した第２ブロックを、第２オブジェクトを前記第２ブロック内でアロケートすることを試みるべく設けられた第２スレッドへ割り当てる工程と、
前記第１ブロック及び第２ブロックの一方がオーバーフローした時を決定する工程と、
前記第２サイズの第３ブロックが利用可能であるか否かを決定する工程と、
前記第３ブロックが利用可能であることが確定し、かつ前記第１ブロックがオーバーフローしたことが確定した際、前記第３ブロックを第１スレッドへ割り当てる工程と、
前記第３ブロックが利用可能であることが確定し、かつ前記第２ブロックがオーバーフローしたことが確定した際、前記第３ブロックを第２スレッドへ割り当てる工程と
を含む方法。
【請求項２３】  請求項２２に記載の方法において、オブジェクトを前記第２ブロック内でアロケートすることを試みるべく前記第１スレッドは設けられておらず、オブジェクトを前記第１ブロック内でアロケートすることを試みるべく前記第２スレッドは設けられておらず、前記第３ブロックが前記第１スレッドへ割り当てられた際、オブジェクトを前記第３ブロック内でアロケートすることを試みるべく前記第２スレッドは設けられておらず、前記第３ブロックが前記第２スレッドへ割り当てられた際、オブジェクトを前記第３ブロック内でアロケートすることを試みるべく前記第１スレッドは設けられていない方法。
【請求項２４】  請求項２２または請求項２３に記載の方法において、前記第１サイズの複数のブロックは、前記第２サイズの少なくとも１つのブロックより大きいサイズを有する方法。
【請求項２５】  請求項２２ないし請求項２４のいずれか一項に記載の方法において、前記第３ブロックが利用可能でないことが確定した際、前記複数のブロックをクリアすべくガーベッジ・コレクションを実施する工程をさらに含む方法。
【請求項２６】  メモリ、第１スレッド及び第２スレッドを有し、かつメモリをアロケートすべく設けられているマルチスレッド・コンピュータ・システムであって、前記メモリは前記第１スレッド及び第２スレッドの両方からのアクセスが可能なマルチスレッド・コンピュータ・システムにおいて、
前記第１スレッドに関連する第１プロセッサと、
前記第２スレッドに関連する第２プロセッサと、
前記メモリを複数のブロックへ分割すべく設けられたメモリ・パーティショナと、
前記複数のブロックから選択した第１ブロックを、前記第１スレッド及び第２スレッドの両方からアクセスできるブロックとして割り当てるべく設けられたブロック・アサイナと、第１オブジェクトを前記第１ブロック内でアロケートすることを試みるべく前記第１スレッドは設けられ、第２オブジェクトを前記第１ブロック内でアロケートすることを試みるべく前記第２スレッドは設けられていることと、
前記第１ブロックがオーバーフローした時を決定するために設けられた第１決定機構と、
前記第１ブロックがオーバーフローしたことが確定した際、前記第１オブジェクトを第１ブロック内でアロケートする前記第１スレッドの試みが、前記第１ブロックのオーバーフローを引き起こしたか否かを決定するために設けられた第２決定機構と、
前記第１オブジェクトを前記第１ブロック内でアロケートする前記第１スレッドの試みが、前記第１ブロックのオーバーフローを引き起こしたことが確定した際、前記複数のブロックから選択した第２ブロックを前記第１スレッドへ割り当てるべく設けられた第２ブロック・アサイナと、前記第２ブロックを前記第１スレッドへ割り当てることは、前記第１スレッドがオブジェクトを前記第１ブロック内でアロケートすることをそれ以降試みないようにすべく行われること
を含むマルチスレッド・コンピュータ・システム。
【請求項２７】  請求項２６に記載のマルチスレッド・コンピュータ・システムにおいて、
前記第１ブロック及び第２ブロックの一方がオーバーフローした時を決定すべく設けられた第３決定機構と、
前記第２ブロックがオーバーフローしたことが確定した際、前記複数のブロックから選択した第３ブロックを前記第１スレッドへ割り当てるために設けられ、かつ前記第１ブロックがオーバーフローしたことが確定した際、前記第３ブロックを前記第２スレッドへ割り当てるためにも設けられている第３ブロック・アサイナと
をさらに含むマルチスレッド・コンピュータ・システム。
【請求項２８】  自身に関連する共有メモリをアロケートすべく設けられたマルチスレッド・コンピュータ・システムであって、第１スレッド及び第２スレッドを少なくとも有するマルチスレッド・コンピュータ・システムにおいて、
前記第１スレッドに関連する第１プロセッサと、
前記第２スレッドに関連する第２プロセッサと、
前記共有メモリを、第１サイズの複数のブロックと、第２サイズの少なくとも１つのブロックとを含む複数のブロックへ分割すべく設けられたメモリ・アロケータと、
前記第１サイズの複数のブロックから選択した第１ブロックを、第１オブジェクトを前記第１ブロック内でアロケートすることを試みるべく設けられた第１スレッドへ割り当てるために設けられた第１割り当て機構と、
前記第１サイズの複数のブロックから選択した第２ブロックを、第２オブジェクトを前記第２ブロック内でアロケートすることを試みるべく設けられた第２スレッドへ割り当てるために設けられた第２割り当て機構と、
前記第１ブロック及び第２ブロックの一方がオーバーフローした時を決定するために設けられた第１決定機構と、
前記第２サイズの第３ブロックが利用可能であるか否かを決定するために設けられた第２決定機構と、
前記第３ブロックが利用可能であることが確定し、かつ前記第１ブロックがオーバーフローしたことが確定した際、前記第３ブロックを第１スレッドへ割り当てるために設けられるとともに、前記第３ブロックが利用可能であることが確定し、かつ前記第２ブロックがオーバーフローしたことが確定した際、前記第３ブロックを第２スレッドへ割り当てるためにも設けられている第３割り当て機構と
を有するマルチスレッド・コンピュータ・システム。
【請求項２９】  請求項２８に記載のマルチスレッド・コンピュータ・システムにおいて、前記第１サイズの複数のブロックは前記第２サイズの少なくとも１つのブロックより大きいサイズを有するマルチスレッド・コンピュータ・システム。
【請求項３０】  マルチスレッド・コンピューティング・システム内の共有メモリをアロケートするためのコンピュータ・プログラムであって、前記マルチスレッド・コンピューティング・システムが第１スレッド及び第２スレッドを少なくとも有するコンピュータ・プログラムを格納するコンピュータ読み取り可能媒体であって、前記コンピュータ・プログラムは、
前記共有メモリを複数のブロックへ分割する機能と、
前記複数のブロックから選択した第１ブロックを前記第１スレッド及び第２スレッドの両方がアクセスできるブロックとして割り当てる機能と、第１オブジェクトを前記第１ブロック内でアロケートすることを試みるべく前記第１スレッドは設けられ、第２オブジェクトを前記第１ブロック内でアロケートすることを試みるべく前記第２スレッドは設けられていることと、
前記第１ブロックがオーバーフローした時を決定する機能と、
前記第１ブロックがオーバーフローしたことが確定した際、前記第１オブジェクトを第１ブロック内でアロケートする前記第１スレッドの試みが、第１ブロックのオーバーフローを引き起こしたか否かを決定する機能と、
前記第１オブジェクトを第１ブロック内でアロケートする前記第１スレッドの試みが、前記第１ブロックのオーバーフローを引き起こしたことが確定した際、前記複数のブロックから選択した第２ブロックを前記第１スレッドへ割り当てる機能と、前記第２ブロックを前記第１スレッドへ割り当てることは、前記第１スレッドがオブジェクトを前記第１ブロック内でアロケートすることをそれ以降試みないようにすべく行われることと、
をコンピュータによって実現させる、コンピュータ読み取り可能媒体。
【請求項３１】  請求項３０に記載のコンピュータ読み取り可能媒体において、前記コンピュータ読み取り可能媒体は、搬送波に組み込まれたデータ信号、ＣＤ−ＲＯＭ、コンピュータ・ディスク、コンピュータ・テープ及びコンピュータ・ディスク・ドライブのうちのいずれか１つであるコンピュータ読み取り可能媒体。
【請求項３２】  マルチスレッド・コンピューティング・システム内の共有メモリをアロケートするためのコンピュータ・プログラムであって、前記マルチスレッド・コンピューティング・システムが第１スレッド及び第２スレッドを少なくとも有するコンピュータ・プログラムを格納するコンピュータ読み取り可能媒体であって、前記コンピュータ・プログラムは、
前記共有メモリを、第１サイズの複数のブロックと、第２サイズの少なくとも１つのブロックとを含む複数のブロックへ分割する機能と、
前記第１サイズの複数のブロックから選択した第１ブロックを、第１オブジェクトを前記第１ブロック内でアロケートすることを試みるべく設けられた第１スレッドへ割り当てる機能と、
前記第１サイズの複数のブロックから選択した第２ブロックを、第２オブジェクトを前記第２ブロック内でアロケートすることを試みるべく設けられた第２スレッドへ割り当てる機能と、
前記第１ブロック及び第２ブロックの一方がオーバーフローした時を決定する機能と、
前記第２サイズの第３ブロックが利用可能であるか否かを決定する機能と、
前記第３ブロックが利用可能であることが確定し、かつ前記第１ブロックがオーバーフローしたことが確定した際、前記第３ブロックを第１スレッドへ割り当てる機能と、
前記第３ブロックが利用可能であることが確定し、かつ前記第２ブロックがオーバーフローしたことが確定した際、前記第３ブロックを第２スレッドへ割り当てる機能と
をコンピュータによって実現させる、コンピュータ読み取り可能媒体。
【請求項３３】  請求項３２に記載のコンピュータ読み取り可能媒体において、前記コンピュータ読み取り可能媒体は、搬送波に組み込まれたデータ信号、ＣＤ−ＲＯＭ、コンピュータ・ディスク、コンピュータ・テープ及びコンピュータ・ディスク・ドライブからなるグループから選択した１つであるコンピュータ読み取り可能媒体。
【請求項３４】  マルチスレッド・コンピューティング・システム内の共有メモリをアロケートすべくコンピュータに実装する方法であって、前記マルチスレッド・コンピューティング・システムが第１スレッド及び第２スレッドを少なくとも有する方法において、
前記メモリを複数のブロックへ分割する工程と、前記複数のブロックは第１ブロック及び第２ブロックを含み、前記第１ブロックは前記第２ブロックよりサイズが実質的に小さいことと、
前記第１ブロックを前記第１スレッドがアクセスできるように割り当てる工程と、前記第１スレッドは第１オブジェクトを前記第１ブロック内でアロケートすることを試みるべく設けられていることと、
前記第２ブロックを前記第２スレッドがアクセスできるように割り当てる工程と、第２オブジェクトを前記第２ブロック内でアロケートすることを試みるべく前記第２スレッドは設けられ、前記第１オブジェクトを前記第２ブロック内でアロケートすることを試みるべく前記第１スレッドは設けられておらず、前記第２オブジェクトを前記第１ブロック内でアロケートすることを試みるべく前記第２スレッドは設けられていないこと
を含む方法。