(57)【要約】  複数のスレッドで共有されるキャッシュに対してのアクセス要求を制御するために、各スレッドに対応付けて設けられるフラグを記憶する記憶手段を備えるようにして、スレッドがアトミック命令の実行に入る場合に、記憶手段に記憶されるフラグに規定の値を書き込み、さらに、そのアトミック命令を完了する場合に、その値とは異なる規定の値を書き込むようにすることで、スレッドがアトミック命令を実行中であるのか否かを表示するようにする。そして、あるスレッドからアクセス要求が発行される場合に、記憶手段のフラグ値を参照することで、そのスレッドとは別のスレッドがアトミック命令を実行中であるのか否かを判断して、別のスレッドがアトミック命令を実行中であることを判断する場合には、アクセス要求を待機させるようにする。これにより、アトミック命令を処理する際に必要となる排他制御処理を簡略な構成に従って実現できるようになる。
2008155827.tif 000002
【特許請求の範囲】
【請求項１】
同時に実行される複数のスレッドで共有されるキャッシュに対してのアクセス要求を制御するキャッシュ制御装置であって、
各スレッドに対応付けて設けられて、そのスレッドが複数の処理を不可分に実行するアトミック命令の実行に入る場合に第一の規定値を表示し、そのアトミック命令を完了する場合に前記第一の規定値とは異なる第二の規定値を表示するフラグを記憶する記憶手段と、
あるスレッドからアクセス要求が発行される場合に、前記記憶手段の記憶するフラグ値を参照することで、アクセス要求を発行したスレッドとは別のスレッドがアトミック命令を実行中であるのか否かを判断する判断手段と、
前記判断手段が、前記別のスレッドがアトミック命令を実行中であると判断した場合に、前記発行されたアクセス要求を待機させる処理を実行する実行手段とを備えることを、
特徴とするキャッシュ制御装置。
【請求項２】
請求項１に記載のキャッシュ制御装置において、
キャッシュからのデータの吐き出し要求がある場合に、前記記憶手段の記憶するフラグ値を参照することで、全てのスレッドがアトミック命令を実行中でないのかを判断して、全てのスレッドがその命令を実行中でないことを判断する場合に、キャッシュからのデータの吐き出し処理の実行を指示する指示手段を備えることを、
特徴とするキャッシュ制御装置。
【請求項３】
請求項１又は２に記載のキャッシュ制御装置において、
前記記憶手段の記憶するフラグ値を参照することで、スレッド内におけるアトミック命令についての排他制御を実行するスレッド内排他制御手段を備えることを、
特徴とするキャッシュ制御装置。
【請求項４】
同時に実行される複数のスレッドで共有されるキャッシュに対してのアクセス要求を制御するキャッシュ制御装置であって、
各スレッドに対応付けて設けられて、そのスレッドが複数の処理を不可分に実行するアトミック命令の実行に入る場合に第一の規定値を表示し、前記実行されるアトミック命令を完了する場合に前記第一の規定値とは異なる第二の規定値を表示するフラグを記憶し、さらに、そのスレッドがアトミック命令の実行に入る場合には、実行されるアトミック命令のアクセス先のアドレス情報を記憶する記憶手段と、
あるスレッドからアクセス要求が発行される場合に、前記記憶手段の記憶するフラグ値を参照することで、前記アクセス要求を発行したスレッドとは別のスレッドがアトミック命令を実行中であるのか否かを判断し、さらに、前記別のスレッドがアトミック命令を実行中であることを判断する場合には、前記記憶手段の記憶するアドレス情報を参照することで、前記別のスレッドが実行中のアトミック命令のアクセス先のアドレス情報と、前記発行されたアクセス要求の指定するアドレス情報とが一致するのか否かを判断する判断手段と、
前記判断手段が、前記別のスレッドがアトミック命令を実行中であることを判断し、かつ、前記別のスレッドが実行中のアトミック命令のアクセス先のアドレス情報と前記発行されたアクセス要求の指定するアドレス情報とが一致することを判断する場合に、前記発行されたアクセス要求を待機させる処理を実行する実行手段とを備えることを、
特徴とするキャッシュ制御装置。
【請求項５】
請求項４に記載のキャッシュ制御装置において、
キャッシュからのデータの吐き出し要求がある場合に、前記記憶手段の記憶するフラグ値およびアドレス情報を参照することで、全てのスレッドが吐き出し要求の指定するアドレス情報と一致するアドレス情報をアクセス先とするアトミック命令を実行中でないのかを判断して、全てのスレッドがその命令を実行中でないことを判断する場合に、キャッシュからのデータの吐き出し処理の実行を指示する指示手段を備えることを、
特徴とするキャッシュ制御装置。
【請求項６】
請求項４又は５に記載のキャッシュ制御装置において、
前記記憶手段の記憶するフラグ値およびアドレス情報を参照することで、スレッド内におけるアトミック命令についての排他制御を実行するスレッド内排他制御手段を備えることを、
特徴とするキャッシュ制御装置。
【請求項７】
請求項１ないし６のいずれか１項に記載のキャッシュ制御装置において、
最後にアクセス要求の処理を行ったスレッドがどのスレッドであるのかについて示す情報を記憶する第２の記憶手段と、
あるスレッドからアトミック命令に係るアクセス要求が発行される場合に、そのスレッド以外のスレッドについて、前記待機処理により待機させられているアクセス要求が存在するのか否かを判断する第２の判断手段と、
前記第２の判断手段が前記待機処理により待機させられているアクセス要求の存在を判断する場合に、前記第２の記憶手段の記憶する情報を参照することで最後にアクセス要求の処理を行ったスレッドを特定して、その特定したスレッド以外のスレッドの発行したアクセス要求を優先する形で、前記あるスレッドから発行されたアトミック命令に係るアクセス要求を選択するのか、その待機させられているアクセス要求を選択するのかを決定する決定手段とを備えることを、
特徴とするキャッシュ制御装置。
【請求項８】
請求項７に記載のキャッシュ制御装置において、
あるスレッドからアトミックでない命令に係るアクセス要求が発行される場合に、そのスレッド以外のスレッドについて、アトミック命令に係るアクセス要求の発行要求があるのか否かを判断する第３の判断手段と、
前記第３の判断手段がアトミック命令に係るアクセス要求の発行要求があることを判断する場合に、前記第２の記憶手段の記憶する情報を参照することで最後にアクセス要求の処理を行ったスレッドを特定して、その特定したスレッド以外のスレッドの発行したアクセス要求を優先する形で、前記あるスレッドから発行されたアトミックでない命令に係るアクセス要求を選択するのか、その発行要求のあるアトミック命令に係るアクセス要求を選択するのかを決定する第２の決定手段とを備えることを、
特徴とするキャッシュ制御装置。
【請求項９】
同時に実行される複数のスレッドで共有されるキャッシュに対してのアクセス要求を制御するキャッシュ制御装置が実行するキャッシュ制御方法であって、
前記キャッシュ制御装置が、
各スレッドに対応付けて設けられて、そのスレッドが複数の処理を不可分に実行するアトミック命令の実行に入る場合に第一の規定値を表示し、そのアトミック命令を完了する場合に前記第一の規定値とは異なる第二の規定値を表示するフラグを記憶する記憶手段を備える構成を採って、スレッドがアトミック命令の実行に入る場合に、その記憶手段に記憶される該当するフラグに前記第一の規定値を書き込み、さらに、そのアトミック命令を完了する場合に、前記第二の規定値を書き込むようにし、
あるスレッドからアクセス要求が発行される場合に、前記記憶手段の記憶するフラグ値を参照することで、アクセス要求を発行したスレッドとは別のスレッドがアトミック命令を実行中であるのか否かを判断し、
前記判断処理に従って、前記別のスレッドがアトミック命令を実行中であると判断した場合に、前記発行されたアクセス要求を待機させる処理を実行することを、
特徴とするキャッシュ制御方法。
【請求項１０】
請求項９に記載のキャッシュ制御方法において、
前記キャッシュ制御装置が、
キャッシュからのデータの吐き出し要求がある場合に、前記記憶手段の記憶するフラグ値を参照することで、全てのスレッドがアトミック命令を実行中でないのかを判断して、全てのスレッドがその命令を実行中でないことを判断する場合に、キャッシュからのデータの吐き出し処理の実行を指示することを、
特徴とするキャッシュ制御方法。
【請求項１１】
同時に実行される複数のスレッドで共有されるキャッシュに対してのアクセス要求を制御するキャッシュ制御装置が実行するキャッシュ制御方法であって、
前記キャッシュ制御装置が、
各スレッドに対応付けて設けられて、そのスレッドが複数の処理を不可分に実行するアトミック命令の実行に入る場合に第一の規定値を表示し、前記実行されるアトミック命令を完了する場合に前記第一の規定値とは異なる第二の規定値を表示するフラグを記憶し、さらに、そのスレッドがアトミック命令の実行に入る場合には、実行されるアトミック命令のアクセス先のアドレス情報を記憶する記憶手段を備える構成を採って、スレッドがアトミック命令の実行に入る場合に、その記憶手段に記憶される該当するフラグに前記第一の規定値を書き込むとともに、そのアトミック命令のアクセス先のアドレス情報を前記記憶手段に書き込むようにし、さらに、そのアトミック命令を完了する場合に、そのフラグに前記第二の規定値を書き込むようにし、
あるスレッドからアクセス要求が発行される場合に、前記記憶手段の記憶するフラグ値を参照することで、前記アクセス要求を発行したスレッドとは別のスレッドがアトミック命令を実行中であるのか否かを判断し、さらに、前記別のスレッドがアトミック命令を実行中であることを判断する場合には、前記記憶手段の記憶するアドレス情報を参照することで、前記別のスレッドが実行中のアトミック命令のアクセス先のアドレス情報と、前記発行されたアクセス要求の指定するアドレス情報とが一致するのか否かを判断し、
前記判断処理に従って、前記別のスレッドがアトミック命令を実行中であることを判断し、かつ、前記別のスレッドが実行中のアトミック命令のアクセス先のアドレス情報と前記発行されたアクセス要求の指定するアドレス情報とが一致することを判断する場合に、前記発行されたアクセス要求を待機させる処理を実行することを、
特徴とするキャッシュ制御方法。
【請求項１２】
請求項１１に記載のキャッシュ制御方法において、
前記キャッシュ制御装置が、
キャッシュからのデータの吐き出し要求がある場合に、前記記憶手段の記憶するフラグ値およびアドレス情報を参照することで、全てのスレッドが吐き出し要求の指定するアドレス情報と一致するアドレス情報をアクセス先とするアトミック命令を実行中でないのかを判断して、全てのスレッドがその命令を実行中でないことを判断する場合に、キャッシュからのデータの吐き出し処理の実行を指示することを、
特徴とするキャッシュ制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＳＭＴ（Simultaneous Multi Thread)方式のプロセッサで用いられるキャッシュ制御装置及び制御方法に関し、特に、ＳＭＴ方式のプロセッサにおいて、ＣＡＳ（Compare And Swap）命令などのアトミック命令を処理する際に必要となる排他制御処理を簡略な構成に従って実現するキャッシュ制御装置及び制御方法に関する。【０００２】
ＳＭＴ方式のプロセッサは複数のスレッドを同時に実行するプロセッサである。このＳＭＴ方式のプロセッサでは、複数のスレッドでキャッシュが共有されることになるので、シングル・スレッド方式のプロセッサで用いられているキャッシュ制御とは異なる構成のキャッシュ制御を構築する必要がある。
【背景技術】
【０００３】
図１７に、シングル・スレッド方式のプロセッサで用いられているキャッシュ制御の構成を図示する。【０００４】
ここで、図中に示す１０００は命令制御部、２０００はキャッシュ制御部、２００１はキャッシュＲＡＭ、２００２はフェッチ・ポート（Fetch Port）、２００３はストア・ポート（Store Port）、２００４はフェッチ・ポート２００２に対応付けて備えられる選択回路、２００５はストア・ポート２００３に対応付けて備えられる選択回路、２００６はフェッチ・ポート２００２に対応付けて備えられるチェック回路、２００７はストア・ポート２００３に対応付けて備えられるチェック回路、２００８はフェッチ・ポート２００２およびストア・ポート２００３に対応付けて備えられるチェック回路、２００９は吐き出し要求のためのチェック回路、２０１０は論理積回路、２０１１は優先制御回路である。【０００５】
図１７に示すように、命令制御部１０００からのメモリアクセス要求は、一旦、キャッシュ制御部２０００にある複数のエントリを持つフェッチ・ポート２００２に保持される。【０００６】
フェッチ・ポート２００２の各エントリには命令順に従ってアクセス要求が割り当てられるが、メモリアクセスをアウト・オブ・オーダーで処理するプロセッサにおいては、順不同で読み出されてキャッシュアクセス処理を行い、キャッシュアクセス処理が完了するとそのフェッチ・ポート２００２のエントリは開放される。【０００７】
有効なフェッチ・ポート２００２のエントリの中で最も古いエントリは、図示しない制御回路の生成するＦＰ−ＴＯＱ（Fetch-Port-Top-Of-Queue)が指し示す。【０００８】
また、命令制御部１０００からのメモリアクセス要求がストア要求である場合には、その要求はフェッチ・ポート２００２に保持されると同時に、ストア・ポート２００３にも保持される。【０００９】
ストア要求を処理するときには、アドレス変換処理やアクセス要求の順序性保証などに問題がなければ、その時点でフェッチ・ポート２００２のエントリは開放され、後はストア・ポート２００３がキャッシュＲＡＭ２００１へのストア処理を管理し、ストア処理が完了するとそのストア・ポート２００３のエントリは開放される。【００１０】
有効なストア・ポート２００３のエントリの中で最も古いエントリは、図示しない制御回路の生成するＳＰ−ＴＯＱ（Store-Port-Top-Of-Queue)が指し示す。【００１１】
命令制御部１０００からのメモリアクセス要求の一つに、ＣＡＳ命令などによるアトミックなロード・ストア要求（以下、フェッチ・アンド・ストア要求と称する）がある。【００１２】
このフェッチ・アンド・ストア要求のロードからストア実行までの間は、他命令による該当データの参照・更新が禁止されなければならない。【００１３】
そのため、フェッチ・アンド・ストア要求がデータＡにアクセスするときには、
（ａ−１）フェッチ・アンド・ストア要求の処理は、それに先行するデータＡをアクセ            スする要求の処理が全て完了するまで抑止する
（ａ−２）フェッチ・アンド・ストア要求より後にデータＡをアクセスする要求の処理            は、フェッチ・アンド・ストア要求の処理が完了するまで抑止する
（ｂ）    フェッチ・アンド・ストア要求の処理開始から完了までの間は、キャッシュ            ＲＡＭ２００１からデータＡを吐き出すことを抑止する
という条件を設けることで、条件（ａ−１),（ａ−２）によりフェッチ・アンド・ストア対象データに対するプロセッサ内の排他制御を保証し、条件（ｂ）によりマルチプロセッサ構成におけるプロセッサ間の排他制御を保証する必要がある。【００１４】
そこで、条件（ａ−１）については、チェック回路２００６，２００７を使って、図１８および図１９のフローチャートに示すように、フェッチ・アンド・ストア要求の処理開始を、それが保持されているフェッチ・ポート２００２とストア・ポート２００３のエントリがＦＰ−ＴＯＱかつＳＰ−ＴＯＱであれば許すことで保証している。【００１５】
ここで、図１８のフローチャートでは、選択回路２００４，２００５の選択処理に従って、フェッチ・ポート２００２のＦＰ＃ｍというエントリ（ｍ番目のエントリ）およびストア・ポート２００３のＳＰ＃ｎというエントリ（ｎ番目のエントリ）に保持されているアクセス要求（request#ｍ＝request#ｎ）を処理することを想定している。【００１６】
次に、条件（ａ−２）については、チェック回路２００８を使って、図１８および図２０のフローチャートに示すように、フェッチ・アンド・ストア要求以外のアクセス要求の処理開始を、ＦＰ−ＴＯＱのエントリからそのアクセス要求が保持されているフェッチ・ポート２００２のエントリまでの間にフェッチ・アンド・ストア要求のエントリが存在する場合には抑止し、そのようなエントリが存在しないものの、ストア・ポート２００３に保持されている先行ストア要求の対象データと一致する場合には抑止することで保証している。【００１７】
そして、条件（ｂ）については、チェック回路２００９を使って、図２１のフローチャートに示すように、キャッシュＲＡＭ２００１からのデータの吐き出し処理開始を、ＳＰ−ＴＯＱのエントリがフェッチ・アンド・ストア要求である場合には抑止することで保証している。【００１８】
このような構成に従って、シングル・スレッド方式のプロセッサでは、フェッチ・アンド・ストア命令の実行にあたって要求されることになる排他制御処理を実現するようにしている。【００１９】
一方、ＳＭＴ方式のプロセッサでは、スレッド間の排他制御が必要になることから、このように構成されるシングル・スレッド方式のプロセッサで用いられているキャッシュ制御をそのまま利用する訳にはいかない。【００２０】
しかるに、ＳＭＴ方式のプロセッサを実装する場合に、フェッチ・アンド・ストア命令の実行にあたって要求されることになる排他制御処理を、どのような構成に従って実現するのかということについては、現在までのところ開示されていないというのが実情である。【００２１】
これから、メーカとしては、ＳＭＴ方式のプロセッサを実装する場合に、ＣＡＳ命令などのフェッチ・アンド・ストア命令を処理する際に必要となる排他制御処理を実現する新たな構成のキャッシュ制御技術を構築する必要がある。【００２２】
ここで、本発明に関連する技術として、下記の特許文献１には、ＳＭＴ方式のプロセッサにおいて、スレッド間での共有データの読み出し及び書き込みの実行順序の一貫性を保証することを実現する発明が記載されている。
【特許文献１】ＷＯ２００４／０６８３６１号公報
【発明の開示】
【発明が解決しようとする課題】
【００２３】
前述したように、ＳＭＴ方式のプロセッサでは、スレッド間の排他制御が必要になることから、このように構成されるシングル・スレッド方式のプロセッサで用いられているキャッシュ制御をそのまま利用する訳にはいかない。【００２４】
しかるに、ＳＭＴ方式のプロセッサを実装する場合に、フェッチ・アンド・ストア命令の実行にあたって要求されることになる排他制御処理を、どのような構成に従って実現するのかということについては、現在までのところ開示されていないというのが実情である。【００２５】
これから、メーカとしては、ＳＭＴ方式のプロセッサを実装する場合に、ＣＡＳ命令などのフェッチ・アンド・ストア命令を処理する際に必要となる排他制御処理を実現する新たな構成のキャッシュ制御技術を構築する必要がある。【００２６】
本発明はかかる事情に鑑みてなされたものであって、ＳＭＴ方式のプロセッサにおいて、ＣＡＳ命令（Compare And Swap命令）などの複数の処理を不可分に実行するアトミック命令を処理する際に必要となる排他制御処理を簡略な構成に従って実現できるようにする新たなキャッシュ制御技術の提供を目的とする。
【課題を解決するための手段】
【００２７】
〔ｉ〕第１の構成
前記の目的を達成するために、本発明のキャッシュ制御装置は、同時に実行される複数のスレッドで共有されるキャッシュに対してのアクセス要求を制御するために、（１）各スレッドに対応付けて設けられて、そのスレッドがアトミック命令（例えば、アトミックロードストア命令などのアトミック命令）の実行に入る場合に規定の値を表示し、そのアトミック命令を完了する場合にその値とは異なる規定の値を表示するフラグを記憶する記憶手段と、（２）あるスレッドからアクセス要求が発行される場合に、記憶手段の記憶するフラグ値を参照することで、そのスレッドとは別のスレッドがアトミック命令を実行中であるのか否かを判断する判断手段と、（３）判断手段が別のスレッドがアトミック命令を実行中であることを判断する場合に、アクセス要求を待機させる処理を実行する実行手段と、（４）キャッシュからのデータの吐き出し要求がある場合に、記憶手段の記憶するフラグ値を参照することで、全てのスレッドがアトミック命令を実行中でないのかを判断して、全てのスレッドがその命令を実行中でないことを判断する場合に、キャッシュからのデータの吐き出し処理の実行を指示する指示手段と、（５）記憶手段の記憶するフラグ値を参照することで、スレッド内におけるアトミック命令についての排他制御を実行するスレッド内排他制御手段とを備えるように構成する。【００２８】
このように構成されるときに、さらに、（６）最後にアクセス要求の処理を行ったスレッドがどのスレッドであるのかについて示す情報を記憶する第２の記憶手段と、（７）あるスレッドからアトミック命令に係るアクセス要求が発行される場合に、そのスレッド以外のスレッドについて、待機処理により待機させられているアクセス要求が存在するのか否かを判断する第２の判断手段と、（８）第２の判断手段が待機処理により待機させられているアクセス要求の存在を判断する場合に、第２の記憶手段の記憶する情報を参照することで最後にアクセス要求の処理を行ったスレッドを特定して、その特定したスレッド以外のスレッドの発行したアクセス要求を優先する形で、あるスレッドから発行されたアトミック命令に係るアクセス要求を選択するのか、その待機させられているアクセス要求を選択するのかを決定する決定手段と、（９）あるスレッドからアトミックでない命令（例えば、アトミックロードストア命令でない命令）に係るアクセス要求が発行される場合に、そのスレッド以外のスレッドについて、アトミック命令に係るアクセス要求の発行要求があるのか否かを判断する第３の判断手段と、（１０）第３の判断手段がアトミック命令に係るアクセス要求の発行要求があることを判断する場合に、第２の記憶手段の記憶する情報を参照することで最後にアクセス要求の処理を行ったスレッドを特定して、その特定したスレッド以外のスレッドの発行したアクセス要求を優先する形で、あるスレッドから発行されたアトミックでない命令に係るアクセス要求を選択するのか、その発行要求のあるアトミック命令に係るアクセス要求を選択するのかを決定する第２の決定手段とを備えるように構成する。【００２９】
このように構成される本発明のキャッシュ制御装置では、スレッドがアトミック命令の実行に入る場合に、記憶手段に記憶される該当するフラグに規定の値を書き込み、さらに、そのアトミック命令を完了する場合に、その値とは異なる規定の値を書き込むようにすることで、各フラグがそれに対応付けられるスレッドがアトミック命令を実行中であるのか否かを表示するようにする。【００３０】
このフラグ値の表示を受けて、あるスレッドからアクセス要求が発行される場合に、記憶手段の記憶するフラグ値を参照することで、そのスレッドとは別のスレッドがアトミック命令を実行中であるのか否かを判断して、別のスレッドがアトミック命令を実行中であることを判断する場合には、アクセス要求を待機させるようにする。【００３１】
そして、キャッシュからのデータの吐き出し要求がある場合に、記憶手段の記憶するフラグ値を参照することで、全てのスレッドがアトミック命令を実行中でないのかを判断して、全てのスレッドがその命令を実行中でないことを判断する場合には、キャッシュからのデータの吐き出し処理の実行を指示するようにする。すなわち、いずれかのスレッドでアトミック命令を実行中である場合には、キャッシュからのデータの吐き出し処理を待機させるようにするのである。【００３２】
そして、スレッド内におけるアトミック命令についての排他制御を実行する必要がある場合には、記憶手段の記憶するフラグ値を参照することで、その排他制御を実行するようにする。【００３３】
この構成を採るときに、特定の１つのスレッドがアトミック命令を実行し続けると、そのスレッド以外のスレッドのアクセス要求が待機され続けることになるという不都合が発生する。【００３４】
そこで、最後にアクセス要求の処理を行ったスレッドがどのスレッドであるのかについて示す情報を記憶する第２の記憶手段を備えるようにする。【００３５】
そして、あるスレッドからアトミック命令に係るアクセス要求が発行される場合に、そのスレッド以外のスレッドについて、待機処理により待機させられているアクセス要求が存在する場合には、第２の記憶手段の記憶する情報を参照することで最後にアクセス要求の処理を行ったスレッドを特定して、その特定したスレッド以外のスレッドの発行したアクセス要求を優先する形で、あるスレッドから発行されたアトミック命令に係るアクセス要求を選択するのか、その待機させられているアクセス要求を選択するのかを決定するようにする。【００３６】
この構成を採るときに、あるスレッドからアトミックでない命令に係るアクセス要求が発行される場合に、そのスレッド以外のスレッドについて、アトミック命令に係るアクセス要求の発行要求がある場合には、第２の記憶手段の記憶する情報を参照することで最後にアクセス要求の処理を行ったスレッドを特定して、その特定したスレッド以外のスレッドの発行したアクセス要求を優先する形で、あるスレッドから発行されたアトミックでない命令に係るアクセス要求を選択するのか、その発行要求のあるアトミック命令に係るアクセス要求を選択するのかを決定するようにする。【００３７】
〔ii〕第２の構成
前記の目的を達成するために、本発明のキャッシュ制御装置は、同時に実行される複数のスレッドで共有されるキャッシュに対してのアクセス要求を制御するために、（１）各スレッドに対応付けて設けられて、そのスレッドがアトミック命令（例えば、アトミックロードストア命令などのアトミック命令）の実行に入る場合に規定の値を表示し、そのアトミック命令を完了する場合にその値とは異なる規定の値を表示するフラグを記憶し、さらに、そのスレッドがアトミック命令の実行に入る場合には、そのアトミック命令のアクセス先のアドレス情報を記憶する記憶手段と、（２）あるスレッドからアクセス要求が発行される場合に、記憶手段の記憶するフラグ値を参照することで、そのスレッドとは別のスレッドがアトミック命令を実行中であるのか否かを判断し、さらに、アトミック命令を実行中であることを判断する場合には、記憶手段の記憶するアドレス情報を参照することで、その実行中のアトミック命令のアクセス先のアドレス情報とそのアクセス要求の指定するアドレス情報とが一致するのか否かを判断する判断手段と、（３）判断手段が別のスレッドがアトミック命令を実行中であることを判断し、かつ、その実行中のアトミック命令のアクセス先のアドレス情報とアクセス要求の指定するアドレス情報とが一致することを判断する場合に、アクセス要求を待機させる処理を実行する実行手段と、（４）キャッシュからのデータの吐き出し要求がある場合に、記憶手段の記憶するフラグ値およびアドレス情報を参照することで、全てのスレッドが吐き出し要求の指定するアドレス情報と一致するアドレス情報をアクセス先とするアトミック命令を実行中でないのかを判断して、全てのスレッドがその命令を実行中でないことを判断する場合に、キャッシュからのデータの吐き出し処理の実行を指示する指示手段と、（５）記憶手段の記憶するフラグ値およびアドレス情報を参照することで、スレッド内におけるアトミック命令についての排他制御を実行するスレッド内排他制御手段とを備えるように構成する。【００３８】
このように構成されるときに、さらに、（６）最後にアクセス要求の処理を行ったスレッドがどのスレッドであるのかについて示す情報を記憶する第２の記憶手段と、（７）あるスレッドからアトミック命令に係るアクセス要求が発行される場合に、そのスレッド以外のスレッドについて、待機処理により待機させられているアクセス要求が存在するのか否かを判断する第２の判断手段と、（８）第２の判断手段が待機処理により待機させられているアクセス要求の存在を判断する場合に、第２の記憶手段の記憶する情報を参照することで最後にアクセス要求の処理を行ったスレッドを特定して、その特定したスレッド以外のスレッドの発行したアクセス要求を優先する形で、あるスレッドから発行されたアトミック命令に係るアクセス要求を選択するのか、その待機させられているアクセス要求を選択するのかを決定する決定手段と、（９）あるスレッドからアトミックでない命令（例えば、アトミックロードストア命令でない命令）に係るアクセス要求が発行される場合に、そのスレッド以外のスレッドについて、アトミック命令に係るアクセス要求の発行要求があるのか否かを判断する第３の判断手段と、（１０）第３の判断手段がアトミック命令に係るアクセス要求の発行要求があることを判断する場合に、第２の記憶手段の記憶する情報を参照することで最後にアクセス要求の処理を行ったスレッドを特定して、その特定したスレッド以外のスレッドの発行したアクセス要求を優先する形で、あるスレッドから発行されたアトミックでない命令に係るアクセス要求を選択するのか、その発行要求のあるアトミック命令に係るアクセス要求を選択するのかを決定する第２の決定手段とを備えるように構成する。【００３９】
このように構成される本発明のキャッシュ制御装置では、スレッドがアトミック命令の実行に入る場合に、記憶手段に記憶される該当するフラグに規定の値を書き込むとともに、そのアトミック命令のアクセス先のアドレス情報を記憶手段に書き込むようにし、さらに、そのアトミック命令を完了する場合に、そのフラグにアトミック命令の実行に入る場合に書き込んだ値とは異なる規定の値を書き込むようにすることで、各フラグがそれに対応付けられるスレッドがアトミック命令を実行中であるのか否かを表示するとともに、アトミック命令を実行中の場合には、アクセス先のアドレス情報を記憶するようにする。【００４０】
このフラグ値の表示とアドレス情報の記憶とを受けて、あるスレッドからアクセス要求が発行される場合に、記憶手段の記憶するフラグ値を参照することで、そのスレッドとは別のスレッドがアトミック命令を実行中であるのか否かを判断し、さらに、アトミック命令を実行中であることを判断する場合には、記憶手段の記憶するアドレス情報を参照することで、その実行中のアトミック命令のアクセス先のアドレス情報とそのアクセス要求の指定するアドレス情報とが一致するのか否かを判断して、その判断結果に基づいて、別のスレッドがアトミック命令を実行中であることを判断し、かつ、その実行中のアトミック命令のアクセス先のアドレス情報とアクセス要求の指定するアドレス情報とが一致することを判断する場合には、アクセス要求を待機させるようにする。【００４１】
そして、キャッシュからのデータの吐き出し要求がある場合に、記憶手段の記憶するフラグ値およびアドレス情報を参照することで、全てのスレッドが吐き出し要求の指定するアドレス情報と一致するアドレス情報をアクセス先とするアトミック命令を実行中でないのかを判断して、全てのスレッドがその命令を実行中でないことを判断する場合には、キャッシュからのデータの吐き出し処理の実行を指示するようにする。すなわち、いずれかのスレッドでそのようなアトミック命令を実行中である場合には、キャッシュからのデータの吐き出し処理を待機させるようにするのである。【００４２】
そして、スレッド内におけるアトミック命令についての排他制御を実行する必要がある場合には、記憶手段の記憶するフラグ値およびアドレス情報を参照することで、その排他制御を実行するようにする。【００４３】
この構成を採るときに、特定の１つのスレッドがアトミック命令を実行し続けると、そのスレッド以外のスレッドのアクセス要求が待機され続けることになるという不都合が発生する。【００４４】
そこで、最後にアクセス要求の処理を行ったスレッドがどのスレッドであるのかについて示す情報を記憶する第２の記憶手段を備えるようにする。【００４５】
そして、あるスレッドからアトミック命令に係るアクセス要求が発行される場合に、そのスレッド以外のスレッドについて、待機処理により待機させられているアクセス要求が存在する場合には、第２の記憶手段の記憶する情報を参照することで最後にアクセス要求の処理を行ったスレッドを特定して、その特定したスレッド以外のスレッドの発行したアクセス要求を優先する形で、あるスレッドから発行されたアトミック命令に係るアクセス要求を選択するのか、その待機させられているアクセス要求を選択するのかを決定するようにする。【００４６】
この構成を採るときに、あるスレッドからアトミックでない命令に係るアクセス要求が発行される場合に、そのスレッド以外のスレッドについて、アトミック命令に係るアクセス要求の発行要求がある場合には、第２の記憶手段の記憶する情報を参照することで最後にアクセス要求の処理を行ったスレッドを特定して、その特定したスレッド以外のスレッドの発行したアクセス要求を優先する形で、あるスレッドから発行されたアトミックでない命令に係るアクセス要求を選択するのか、その発行要求のあるアトミック命令に係るアクセス要求を選択するのかを決定するようにする。
【発明の効果】
【００４７】
以上説明したように、本発明によれば、ＳＭＴ方式のプロセッサにおいて、ＣＡＳ命令などのアトミック命令を処理する際に必要となる排他制御処理を簡略な構成に従って実現することができるようになる。
【図面の簡単な説明】
【００４８】
【図１】本実施例の適用されるＣＰＵの構成図である。
【図２】本実施例を具備する一次キャッシュ制御部の一実施例である。
【図３】優先制御回路の実行するフローチャートである。
【図４】優先制御回路の実行するフローチャートである。
【図５】優先制御回路の実行するフローチャートである。
【図６】優先制御回路の実行するフローチャートである。
【図７】優先制御回路の実行するフローチャートである。
【図８】最後処理スレッド表示信号制御回路の説明図である。
【図９】優先制御回路の実行するフローチャートである。
【図１０】本実施例を具備する一次キャッシュ制御部の他の実施例である。
【図１１】優先制御回路の実行するフローチャートである。
【図１２】優先制御回路の実行するフローチャートである。
【図１３】優先制御回路の実行するフローチャートである。
【図１４】優先制御回路の実行するフローチャートである。
【図１５】優先制御回路の実行するフローチャートである。
【図１６】優先制御回路の実行するフローチャートである。
【図１７】シングル・スレッド方式のプロセッサで用いられているキャッシュ制御の構成図である。
【図１８】シングル・スレッド方式のプロセッサで用いられているキャッシュ制御処理のフローチャートである。
【図１９】シングル・スレッド方式のプロセッサで用いられているキャッシュ制御処理のフローチャートである。
【図２０】シングル・スレッド方式のプロセッサで用いられているキャッシュ制御処理のフローチャートである。
【図２１】シングル・スレッド方式のプロセッサで用いられているキャッシュ制御処理のフローチャートである。
【符号の説明】
【００４９】
１０    ＣＰＵ
２０    システム制御バス
１００  命令・演算制御部
２００  一次キャッシュ制御部
２０１  キャッシュＲＡＭ
２０２  フェッチ・ポート
２０３  ストア・ポート
２０４  選択回路
２０５  選択回路
２０６  選択回路
２０７  選択回路
２０８  優先制御回路
２０９  ＦＳ命令ステータス情報記憶部
２１０  最終処理スレッド表示信号制御回路
３００  二次キャッシュ制御部
３０１  キャッシュＲＡＭ
【発明を実施するための最良の形態】
【００５０】
以下、実施の形態に従って本実施例を詳細に説明する。【００５１】
図１に、本実施例の適用されるＣＰＵ１０の構成を図示する。【００５２】
本実施例の適用されるＣＰＵ１０は、命令の取り出し要求や演算データの反映要求を発行する命令・演算制御部１００と、高速・小容量のキャッシュＲＡＭ２０１を有して、命令・演算制御部１００の発行するアクセス要求を受け取り、そのアクセス要求のデータがキャッシュＲＡＭ２０１に格納されている場合には、そのデータを命令・演算制御部１００に返すという処理を実行する一次キャッシュ制御部２００と、低速・大容量のキャッシュＲＡＭ３０１を有して、命令・演算制御部１００の発行するアクセス要求のデータがキャッシュＲＡＭ３０１に格納されている場合には、そのデータを命令・演算制御部１００に返すとともにキャッシュＲＡＭ２０１に登録し、キャッシュＲＡＭ３０１に格納されていない場合には、システム制御バス２０を介して図示しないメモリにデータの転送を要求するという処理を実行する二次キャッシュ制御部３００とを備える。【００５３】
図２に、本実施例を具備する一次キャッシュ制御部２００の一実施例を図示する。【００５４】
ここで、本実施例の一次キャッシュ制御部２００では、スレッド０とスレッド１という２つのスレッドが動作するＳＭＴ方式のプロセッサに実装されることを想定しているとともに、１６個のエントリを持つフェッチ・ポートと１６個のエントリを持つストア・ポートとを備えることを想定している。【００５５】
本実施例の一次キャッシュ制御部２００は、図２に示すように、キャッシュＲＡＭ２０１と、スレッド０用のフェッチ・ポート２０２-0（図中に示すＦＰ−ＴＨ０）と、スレッド１用のフェッチ・ポート２０２-1（図中に示すＦＰ−ＴＨ１）と、スレッド０用のストア・ポート２０３-0（図中に示すＳＰ−ＴＨ０）と、スレッド１用のストア・ポート２０３-1（図中に示すＳＰ−ＴＨ１）と、フェッチ・ポート２０２-0に対応付けて備えられる選択回路２０４-0と、フェッチ・ポート２０２-1に対応付けて備えられる選択回路２０４-1と、選択回路２０４-0,1に対応付けて備えられる選択回路２０５と、ストア・ポート２０３-0に対応付けて備えられる選択回路２０６-0と、ストア・ポート２０３-1に対応付けて備えられる選択回路２０６-1と、選択回路２０６-0,1に対応付けて備えられる選択回路２０７と、優先制御回路２０８と、ＦＳ命令ステータス情報記憶部２０９とを備える。【００５６】
ここで、命令・演算制御部１００からのメモリアクセス要求は、一旦、一次キャッシュ制御部２００のフェッチ・ポート２０２-0,1にスレッド毎に保持される。そして、フェッチ・ポート２０２-0,1の各エントリは、要求されたキャッシュアクセス処理が完了するまでアクセス要求を保持し、要求されたキャッシュアクセス処理が完了した時点でアクセス要求を開放する。【００５７】
また、命令・演算制御部１００からのメモリアクセス要求がストア要求であれば、そのメモリアクセス要求はフェッチ・ポート２０２-0,1に保持されると同時に、ストア・ポート２０３-0,1にもスレッド毎に保持される。そして、ストア・ポート２０３-0,1の各エントリは、要求されたキャッシュアクセス処理が完了するまでアクセス要求を保持し、要求されたキャッシュアクセス処理が完了した時点でアクセス要求を開放する。【００５８】
フェッチ・ポート２０２-0は、循環的に使用される１６個のエントリを有し、スレッド０の発行したアクセス要求を保持する。そして、ＦＰ−ＴＯＱ−ＴＨ０（Fetch-Port-Top-Of-Queue-Thread0)で、スレッド０の発行したアクセス要求の内の処理が完了していない最も古いアクセス要求を保持するエントリ番号を指し示す。【００５９】
フェッチ・ポート２０２-1は、循環的に使用される１６個のエントリを有し、スレッド１の発行したアクセス要求を保持する。そして、ＦＰ−ＴＯＱ−ＴＨ１（Fetch-Port-Top-Of-Queue-Thread1)で、スレッド１の発行したアクセス要求の内の処理が完了していない最も古いアクセス要求を保持するエントリ番号を指し示す。【００６０】
ストア・ポート２０３-0は、循環的に使用される１６個のエントリを有し、スレッド０の発行したストア要求を保持する。そして、ＳＰ−ＴＯＱ−ＴＨ０（Store-Port-Top-Of-Queue-Thread0)で、スレッド０の発行したストア要求の内の処理が完了していない最も古いストア要求を保持するエントリ番号を指し示す。【００６１】
ストア・ポート２０３-1は、循環的に使用される１６個のエントリを有し、スレッド１の発行したストア要求を保持する。そして、ＳＰ−ＴＯＱ−ＴＨ１（Store-Port-Top-Of-Queue-Thread1)で、スレッド１の発行したストア要求の内の処理が完了していない最も古いストア要求を保持するエントリ番号を指し示す。【００６２】
選択回路２０４-0は、フェッチ・ポート２０２-0に対応付けて備えられて、ＦＰ−ＴＯＱ−ＴＨ０の指すエントリを優先するという規定の選択論理に従って、スレッド０の要求するキャッシュアクセス処理のためにフェッチ・ポート２０２-0のエントリを選択して、そのエントリからアクセス要求を取り出す。【００６３】
選択回路２０４-1は、フェッチ・ポート２０２-1に対応付けて備えられて、ＦＰ−ＴＯＱ−ＴＨ１の指すエントリを優先するという規定の選択論理に従って、スレッド１の要求するキャッシュアクセス処理のためにフェッチ・ポート２０２-1のエントリを選択して、そのエントリからアクセス要求を取り出す。【００６４】
選択回路２０５は、図示しないスレッド選択信号などの指示に従って、選択回路２０４-0の出力するアクセス要求（スレッド０のアクセス要求）を選択するか、選択回路２０４-1の出力するアクセス要求（スレッド１のアクセス要求）を選択する。【００６５】
選択回路２０６-0は、ストア・ポート２０３-0に対応付けて備えられて、ＳＰ−ＴＯＱ−ＴＨ０の指すエントリを優先するという規定の選択論理に従って、スレッド０の要求するキャッシュアクセス処理のためにストア・ポート２０３-0のエントリを選択して、そのエントリからアクセス要求（ストア要求）を取り出す。【００６６】
選択回路２０６-1は、ストア・ポート２０３-1に対応付けて備えられて、ＳＰ−ＴＯＱ−ＴＨ１の指すエントリを優先するという規定の選択論理に従って、スレッド１の要求するキャッシュアクセス処理のためにストア・ポート２０３-1のエントリを選択して、そのエントリからアクセス要求（ストア要求）を取り出す。【００６７】
選択回路２０７は、図示しないスレッド選択信号などの指示に従って、選択回路２０６-0の出力するアクセス要求（スレッド０のアクセス要求）を選択するか、選択回路２０６-1の出力するアクセス要求（スレッド１のアクセス要求）を選択する。【００６８】
優先制御回路２０８は、選択回路２０５の選択したアクセス要求と、そのアクセス要求を発行したスレッドに対応付けて備えられるフェッチ・ポート２０２-0or1 の持つＦＰ−ＴＯＱ−ＴＨ１or２と、そのアクセス要求を発行したスレッドに対応付けて備えられるストア・ポート２０３-0or1 の持つＳＰ−ＴＯＱ−ＴＨ１or２と、選択回路２０５の選択したアクセス要求がフェッチ・ポート２０２-0or1 の何番目のエントリのものであるのかという情報（図中ではｍ番目を想定）と、選択回路２０７の選択したアクセス要求がストア・ポート２０３-0or1 の何番目のエントリのものであるのかという情報（図中ではｎ番目を想定）とを入力して、ＦＳ命令ステータス情報記憶部２０９にＦＳ命令ステータス情報を書き込むとともに、その書き込んだＦＳ命令ステータス情報を参照しながら、選択回路２０５の選択したアクセス要求の処理を実行するのか、その処理の実行を待機させるのかを決定する。【００６９】
ＦＳ命令ステータス情報記憶部２０９は、スレッド０に対応付けて記憶されて、スレッド０がフェッチ・アンド・ストア要求を実行中であるときには“１”を表示し、実行中でないときには“０”を表示するＦＳ命令ステータス情報（ＦＳ−ＰＥＮＤ−ＳＴＡＴＵＳ−ＴＨ０）を記憶するとともに、スレッド１に対応付けて記憶されて、スレッド１がフェッチ・アンド・ストア要求を実行中であるときには“１”を表示し、実行中でないときには“０”を表示するＦＳ命令ステータス情報（ＦＳ−ＰＥＮＤ−ＳＴＡＴＵＳ−ＴＨ１）を記憶する。【００７０】
このＦＳ−ＰＥＮＤ−ＳＴＡＴＵＳ−ＴＨ０，１という信号は、後述するように、フェッチ・アンド・ストア要求の処理を開始した時点で１にセットされ、フェッチ・アンド・ストア要求の処理を完了した時点で０にリセットされる。【００７１】
ここで、図２では、選択回路２０４-0,1および選択回路２０５の選択処理に従って、スレッドｐ（ｐ＝１or０）に対応付けて設けられるフェッチ・ポート２０２-pのｍ番目のエントリに保持されるアクセス要求（request#ｍ）が選択されたことを想定しているとともに、選択回路２０６-0,1および選択回路２０７の選択処理に従って、スレッドｐに対応付けて設けられるストア・ポート２０３-pのｎ番目のエントリに保持されるアクセス要求（request#n=request#ｎ）が選択されたことを想定している。【００７２】
以下では、選択回路２０５の選択したアクセス要求を発行したスレッドをスレッドｐ（ｐ＝１or０）と記載し、もう一方のスレッドをスレッドｑ（ｑ＝０or１）と記載することにする。【００７３】
命令・演算制御部１００からのフェッチ・アンド・ストア要求のロードからストア実行までの間は、フェッチ・アンド・ストア要求を発行したスレッド以外のスレッドも含めた他命令による該当データの参照・更新が禁止されなければならない。【００７４】
そのため、スレッドｘのフェッチ・アンド・ストア要求がデータＸにアクセスするときには、
（ａ−１）フェッチ・アンド・ストア要求の処理は、それに先行するデータＸをアクセ            スするスレッドｘの要求の処理が全て完了するまで抑止する
（ａ−２）フェッチ・アンド・ストア要求より後にデータＸをアクセスするスレッドｘ            の要求の処理は、フェッチ・アンド・ストア要求の処理が完了するまで抑止            する
（ｂ）    フェッチ・アンド・ストア要求の処理開始から完了までの間は、キャッシュ            ＲＡＭ２０１からデータＸを吐き出すことを抑止する
（ｃ）    フェッチ・アンド・ストア要求の処理開始から完了までの間は、データＸを            アクセスするスレッドｘ以外のスレッドの要求の処理は、フェッチ・アンド            ・ストア要求の処理が完了するまで抑止する
という条件を設けることで、条件（ａ−１),（ａ−２）によりフェッチ・アンド・ストア対象データに対するスレッド内の排他制御を保証し、条件（ｂ）によりマルチプロセッサ構成におけるプロセッサ間の排他制御を保証し、条件（ｃ）によりプロセッサ内のスレッド間の排他制御を保証する必要がある。【００７５】
これらの排他制御を実現する一方式として、フェッチ・アンド・ストア要求の処理数をプロセッサ内の全スレッドあたり一要求にし、フェッチ・アンド・ストア要求の処理中は無条件に他のアクセス要求の処理を全て抑止する、という方式が挙げられる。【００７６】
図３ないし８に、この方式に従って排他制御を実現する優先制御回路２０８の実行するフローチャートの一例を図示する。ここで、これらのフローチャートでは、２つのスレッドの内のスレッドｐから発行されたフェッチ・アンド・ストア要求に注目して説明しており、もう一方のスレッドをスレッドｑで表している。【００７７】
優先制御回路２０８は、図３のフローチャートに示すように、先ず最初に、ステップＳ１００で、選択回路２０５の選択したアクセス要求（request#ｍ）と、選択回路２０７の選択したアクセス要求（request#ｎ＝request#ｍ）とを入力することで、スレッドｐについて、フェッチ・ポート２０２-pのｍ番目のエントリに保持されるアクセス要求（request#ｍ）を入力するとともに、そのアクセス要求がフェッチ・ポート２０２-pのｍ番目のエントリに保持されているということと、そのアクセス要求がストア・ポート２０３-pのｎ番目のエントリに保持されているということとを入力する。【００７８】
続いて、ステップＳ１０１で、図４のフローチャートに従って、前述の条件（ｃ）についてチェックを行う。【００７９】
すなわち、図４のフローチャートに示すように、ＦＳ命令ステータス情報記憶部２０９に記憶される相手方のスレッドｑについてのＦＳ−ＰＥＮＤ−ＳＴＡＴＵＳ−ＴＨｑの値が０であるのか否かを判断して、その値が０である場合（スレッドｑがフェッチ・アンド・ストア要求を実行していない場合）には、変数“チェック”に０を設定し、その値が１である場合（スレッドｑがフェッチ・アンド・ストア要求を実行している場合）には、変数“チェック”に１を設定する。【００８０】
後述するように、変数“チェック”に０が設定されている場合にはアクセス要求の処理を開始し、変数“チェック”に１が設定されている場合にはアクセス要求の処理を待機させるようにしていることから、この図４のフローチャートに従って、前述の条件（ｃ）についてチェックを行うのである。【００８１】
続いて、図３のフローチャートのステップＳ１０２で、変数“チェック”の値が０であるのか否かを判断して、変数“チェック”の値が０ではなくて１であることを判断するときには、ステップＳ１０８に進んで、選択回路２０５の選択したスレッドｐのアクセス要求の処理を待機させて、先行要求の処理完了を待つべく処理を終了する。【００８２】
すなわち、相手方のスレッドｑがフェッチ・アンド・ストア要求を実行しているので、選択回路２０５の選択したスレッドｐのアクセス要求の処理を待機させるのである。【００８３】
一方、ステップＳ１０２の判断処理で、変数“チェック”の値が０であることを判断するときには、ステップＳ１０３に進んで、選択回路２０５の選択したアクセス要求がフェッチ・アンド・ストア要求であるのか否かを判断する。【００８４】
このステップＳ１０３の判断処理で、選択回路２０５の選択したアクセス要求がフェッチ・アンド・ストア要求であることを判断するときには、ステップＳ１０４に進んで、図５のフローチャートに従って、前述の条件（ａ−１）についてチェックを行う。【００８５】
すなわち、図５のフローチャートに示すように、ＦＰ−ＴＯＱ−ＴＨｐがｍ番目のエントリを指し、かつ、ＳＰ−ＴＯＱ−ＴＨｐがｎ番目のエントリを指している場合には、選択回路２０５の選択したフェッチ・アンド・ストア要求が最も古いアクセス要求であることで実行に入ってもよいことを示しているので、変数“チェック”に０を設定するとともに、スレッドｐがフェッチ・アンド・ストア要求の処理に入ったことを表示すべく、ＦＳ−ＰＥＮＤ−ＳＴＡＴＵＳ−ＴＨｐに１をセットし、それ以外のときには、変数“チェック”に１を設定することで、前述の条件（ａ−１）についてチェックを行うのである。【００８６】
一方、図３のフローチャートのステップＳ１０３の判断処理で、選択回路２０５の選択したアクセス要求がフェッチ・アンド・ストア要求でないことを判断するときには、ステップＳ１０５に進んで、図６のフローチャートに従って、前述の条件（ａ−２）についてチェックを行う。【００８７】
すなわち、図６のフローチャートに示すように、ＦＳ命令ステータス情報記憶部２０９に記憶されるスレッドｐについてのＦＳ−ＰＥＮＤ−ＳＴＡＴＵＳ−ＴＨｐの値が０であるのか否かを判断して、その値が０である場合（スレッドｐがフェッチ・アンド・ストア要求を実行していない場合）には、変数“チェック”に０を設定し、その値が１である場合（スレッドｐがフェッチ・アンド・ストア要求を実行している場合）には、フェッチ・アンド・ストア要求を先行して実行中であることで選択回路２０５の選択したアクセス要求を実行してはいけないことに合わせて、変数“チェック”に１を設定することで、前述の条件（ａ−２）についてチェックを行うのである。【００８８】
続いて、図３のフローチャートのステップＳ１０６で、変数“チェック”の値が０であるのか否かを判断して、変数“チェック”の値が０であることを判断するときには、ステップＳ１０７に進んで、選択回路２０５の選択したスレッドｐのアクセス要求の処理を開始し、一方、変数“チェック”の値が１であることを判断するときには、ステップＳ１０８に進んで、選択回路２０５の選択したスレッドｐのアクセス要求の処理を待機させて、先行要求の処理完了を待つべく処理を終了する。【００８９】
その後、優先制御回路２０８は、フェッチ・アンド・ストア要求のロード・ストア処理が完了した時点で、ＦＳ−ＰＥＮＤ−ＳＴＡＴＵＳ−ＴＨｐを０にリセットし、待機させていた他要求の処理を再開させる。【００９０】
一方、優先制御回路２０８は、前述の条件（ｂ）については、図７のフローチャートに従って、そのチェックを行う。【００９１】
すなわち、図７のフローチャートに示すように、ＦＳ命令ステータス情報記憶部２０９に記憶されるスレッドｐについてのＦＳ−ＰＥＮＤ−ＳＴＡＴＵＳ−ＴＨｐの値が０であることで、スレッドｐがフェッチ・アンド・ストア要求を実行していないことを判断するとともに、ＦＳ命令ステータス情報記憶部２０９に記憶されるスレッドｑについてのＦＳ−ＰＥＮＤ−ＳＴＡＴＵＳ−ＴＨｑの値が０であることで、スレッドｑがフェッチ・アンド・ストア要求を実行していないことを判断するときには、キャッシュＲＡＭ２０１からの該当データの吐き出しを開始し、それ以外のときには、キャッシュＲＡＭ２０１からの該当データの吐き出しを待機させるのである。【００９２】
このようにして、本実施例によれば、ＳＭＴ方式のプロセッサにおいて、フェッチ・アンド・ストア要求を処理する際に必要となる排他制御処理を簡略な構成に従って実現することができるようになる。【００９３】
以上に説明したことから分かるように、いずれかのスレッドがフェッチ・アンド・ストア要求の処理を開始すると、その処理完了までの間、全ての他スレッドのアクセス要求の処理が抑止されることになる。これから、あるスレッドで複数のフェッチ・アンド・ストア要求が発行され続け、そのスレッドのアクセス要求のみが処理され続けると、他スレッドでの処理が全く進まなくなってしまうことが起こる。【００９４】
そこで、フェッチ・アンド・ストア要求の処理を完了した後、そのスレッドのフェッチ・ポートで再度フェッチ・アンド・ストア要求のエントリが選択されたときに、他スレッドのフェッチ・ポートになんらかのアクセス要求が滞留していれば、その他スレッドのアクセス要求を少なくとも一つは完了させるようにし、それまではフェッチ・アンド・ストア要求の処理を行わないようにすることで、その他スレッドの要求の処理停滞を回避するようにする。【００９５】
これを実現するために、図８に示すように、最後に処理を完了したアクセス要求のスレッドを示す最後処理スレッド表示信号（ＲＥＱ−ＴＡＫＥＮ−ＴＨＲＥＡＤ）を生成する最後処理スレッド表示信号制御回路２１０を備えるようにする。【００９６】
この最後処理スレッド表示信号制御回路２１０は、なんらかのアクセス要求の処理完了時にそのアクセス要求を完了したスレッドのスレッド番号をセットすることで、ＲＥＱ−ＴＡＫＥＮ−ＴＨＲＥＡＤを生成する。これから、例えば、スレッドが２つである場合に、ＲＥＱ−ＴＡＫＥＮ−ＴＨＲＥＡＤが０を示しているときに、最後にアクセス要求の処理を完了したスレッドがスレッド０であることを意味し、ＲＥＱ−ＴＡＫＥＮ−ＴＨＲＥＡＤが１を示しているときに、最後にアクセス要求の処理を完了したスレッドがスレッド１であることを意味する。【００９７】
図９に、最後処理スレッド表示信号制御回路２１０を備える場合に、優先制御回路２０８の実行するフローチャートを図示する。【００９８】
次に、このフローチャートに従って、ＲＥＱ−ＴＡＫＥＮ−ＴＨＲＥＡＤを使って、特定のスレッドのアクセス要求のみが処理され続けることの発生を防止するために優先制御回路２０８が実行する処理について詳細に説明する。【００９９】
優先制御回路２０８は、図９のフローチャートに示すように、先ず最初に、ステップＳ６００で、スレッドｐのフェッチ・ポート２０２-pのエントリを選択することで実行要求のアクセス要求を選択すると、続いて、ステップＳ６０１で、そのアクセス要求がフェッチ・アンド・ストア要求であるのか否かを判断する。【０１００】
この判断処理に従って、実行要求のアクセス要求がフェッチ・アンド・ストア要求であることを判断するときには、ステップＳ６０２に進んで、相手方であるスレッドｑのフェッチ・ポート２０２-qの全エントリを参照する。【０１０１】
続いて、ステップＳ６０３で、参照したフェッチ・ポート２０２-qのエントリの中に有効なエントリが存在するのか否かを判断して、有効なエントリが存在することを判断するとき、すなわち、フェッチ・アンド・ストア要求により待たされているスレッドｑのアクセス要求が存在することを判断するときには、ステップＳ６０４に進んで、ＲＥＱ−ＴＡＫＥＮ−ＴＨＲＥＡＤが最後に処理を完了したスレッドがスレッドｐであることを表示しているのか否かを判断する。【０１０２】
この判断処理に従って、ＲＥＱ−ＴＡＫＥＮ−ＴＨＲＥＡＤがスレッドｐであることを表示していることを判断するときには、ステップＳ６０５に進んで、スレッドｐのアクセス要求については選択せずに、スレッドｑのアクセス要求を選択するようにする。【０１０３】
すなわち、最後に処理を完了したスレッドがスレッドｐであるので、今回もスレッドｐのフェッチ・アンド・ストア要求を選択してしまうと、スレッドｑのアクセス要求の処理が停滞してしまうことになるので、スレッドｐのアクセス要求については選択せずに、スレッドｑのアクセス要求を選択するようにするのである。【０１０４】
一方、ステップＳ６０３で、フェッチ・ポート２０２-qのエントリの中に有効なエントリが存在しない場合には、スレッドｑのアクセス要求を選択することはできないので、ステップＳ６０６に進んで、スレッドｐのアクセス要求（この場合にはフェッチ・アンド・ストア要求）を選択するようにする。【０１０５】
そして、ステップＳ６０４で、ＲＥＱ−ＴＡＫＥＮ−ＴＨＲＥＡＤがスレッドｐではなくてスレッドｑを表示しているときには、スレッドｑのアクセス要求の処理が停滞してしまうことは起こらないので、ステップＳ６０６に進んで、スレッドｐのアクセス要求（この場合にはフェッチ・アンド・ストア要求）を選択するようにする。【０１０６】
一方、ステップＳ６０１の判断処理で、実行要求のあるスレッドｐのアクセス要求がフェッチ・アンド・ストア要求でないことを判断するときには、ステップＳ６０７に進んで、ＦＰ−ＴＯＱ−ＴＨｑの指すエントリを参照する。【０１０７】
続いて、ステップＳ６０８で、その参照したエントリに保持されるスレッドｑのアクセス要求がフェッチ・アンド・ストア要求であるのか否かを判断して、フェッチ・アンド・ストア要求であることを判断するときには、ステップＳ６０９に進んで、ＲＥＱ−ＴＡＫＥＮ−ＴＨＲＥＡＤが最後に処理を完了したスレッドがスレッドｐであることを表示しているのか否かを判断する。【０１０８】
この判断処理に従って、ＲＥＱ−ＴＡＫＥＮ−ＴＨＲＥＡＤがスレッドｐであることを表示していることを判断するときには、ステップＳ６０５に進んで、スレッドｐのアクセス要求については選択せずに、スレッドｑのアクセス要求を選択するようにする。【０１０９】
すなわち、最後に処理を完了したスレッドがスレッドｐであるので、今回もスレッドｐのアクセス要求を選択してしまうと、スレッドｑのアクセス要求（この場合にはフェッチ・アンド・ストア要求）の処理が停滞してしまうことになるので、スレッドｐのアクセス要求については選択せずに、スレッドｑのアクセス要求（この場合にはフェッチ・アンド・ストア要求）を選択するようにするのである。【０１１０】
一方、ステップＳ６０８で、ＦＰ−ＴＯＱ−ＴＨｑの指すエントリに保持されるスレッドｑのアクセス要求がフェッチ・アンド・ストア要求でないことを判断するときには、アクセス要求が排除されることはないので、ステップＳ６０６に進んで、スレッドｐのアクセス要求（この場合にはフェッチ・アンド・ストア要求ではないアクセス要求）を選択するようにする。【０１１１】
そして、ステップＳ６０９で、ＲＥＱ−ＴＡＫＥＮ−ＴＨＲＥＡＤがスレッドｐではなくてスレッドｑを表示しているときには、スレッドｑのアクセス要求の処理が停滞してしまうことは起こらないので、ステップＳ６０６に進んで、スレッドｐのアクセス要求（この場合にはフェッチ・アンド・ストア要求ではないアクセス要求）を選択するようにする。【０１１２】
このようにして、優先制御回路２０８は、図９のフローチャートに従って、ＲＥＱ−ＴＡＫＥＮ−ＴＨＲＥＡＤを使って、特定のスレッドのアクセス要求のみが処理され続けることの発生を防止するように処理するのである。【０１１３】
次に、図９のフローチャートにより実現される処理について具体的に説明する。【０１１４】
フェッチ・ポート２０２-0に複数のフェッチ・アンド・ストア要求が保持されている場合、一つ目のフェッチ・アンド・ストア要求の処理が完了したときに、ＲＥＱ−ＴＡＫＥＮ−ＴＨＲＥＡＤを０にセットする。【０１１５】
続けて、フェッチ・ポート２０２-0内で、後続のフェッチ・アンド・ストア要求のエントリが選択されたとき、他方のフェッチ・ポート２０２-1にアクセス要求が保持されているかを参照し、なんらかのアクセス要求が一つ以上保持されていて、かつ、ＲＥＱ−ＴＡＫＥＮ−ＴＨＲＥＡＤが０であれば、フェッチ・ポート２０２-0のアクセス要求を選択せず、フェッチ・ポート２０２-1から読み出したスレッド１のアクセス要求を選択し処理する。【０１１６】
このスレッド１のアクセス要求の処理が完了した時点で、ＲＥＱ−ＴＡＫＥＮ−ＴＨＲＥＡＤを１にセットする。この後、フェッチ・ポート２０２-0で滞留していたスレッド０のフェッチ・アンド・ストア要求のエントリが選択されたとき、他方のフェッチ・ポート２０２-1にアクセス要求が保持されているかを参照し、なんらかのアクセス要求が保持されていたとしても、ＲＥＱ−ＴＡＫＥＮ−ＴＨＲＥＡＤが１であるため、スレッド０のフェッチ・アンド・ストア要求の処理を開始する。【０１１７】
そして、このスレッド０のアクセス要求の処理が完了した時点で、ＲＥＱ−ＴＡＫＥＮ−ＴＨＲＥＡＤを０にセットする。これにより、フェッチ・アンド・ストア要求の処理によりその他のスレッドのアクセス要求の処理が停滞することを防ぐことが可能となる。【０１１８】
以上に説明した実施例では、フェッチ・アンド・ストア要求の処理数をプロセッサ内の全スレッドあたり一要求にし、フェッチ・アンド・ストア要求の処理中は無条件に他のアクセス要求の処理を全て抑止するという方式を用いたが、別の方式として、フェッチ・アンド・ストア要求の処理数をプロセッサ内のスレッド毎に一要求ずつにし、フェッチ・アンド・ストア要求の対象データを参照・更新する他のアクセス要求の処理のみを抑止する、という方式が挙げられる。【０１１９】
この方式を用いる場合には、前述の条件（ａ−１),（ａ−２),（ｂ),（ｃ）について、対象データが一致するということを条件にして抑止するということが加わることになる。【０１２０】
図１０に、この方式に従って排他制御を実現する一次キャッシュ制御部２００の他の実施例を図示する。【０１２１】
この実施例に従う場合には、ＦＳ命令ステータス情報記憶部２０９は、ＦＳ命令ステータス情報として、前述したＦＳ−ＰＥＮＤ−ＳＴＡＴＵＳ−ＴＨ０，１を記憶することに加えて、スレッド０に対応付けて記憶されて、スレッド０のフェッチ・アンド・ストア要求の対象データのアドレスを示すＦＳ−ＰＥＮＤ−ＡＤＲＳ−ＴＨ０をレジスタを使って記憶するとともに、スレッド１に対応付けて記憶されて、スレッド１のフェッチ・アンド・ストア要求の対象データのアドレスを示すＦＳ−ＰＥＮＤ−ＡＤＲＳ−ＴＨ１をレジスタを使って記憶するという構成を採る。【０１２２】
これらのレジスタには、フェッチ・アンド・ストア要求の処理を開始した時点で、その対象データのアドレスがセットされ、ＦＳ−ＰＥＮＤ−ＳＴＡＴＵＳ−ＴＨ０、ＦＳ−ＰＥＮＤ−ＳＴＡＴＵＳ−ＴＨ１の値が１の間はそれぞれのスレッドに対応して有効な値を示す。【０１２３】
図１１ないし１６に、この方式に従って排他制御を実現する優先制御回路２０８の実行するフローチャートの一例を図示する。ここで、これらのフローチャートでは、２つのスレッドの内のスレッドｐから発行されたフェッチ・アンド・ストア要求に注目して説明しており、もう一方のスレッドをスレッドｑで表している。【０１２４】
優先制御回路２０８は、図１１のフローチャートに示すように、先ず最初に、ステップＳ７００で、選択回路２０５の選択したアクセス要求（request#ｍ）と、選択回路２０７の選択したアクセス要求（request#ｎ＝request#ｍ）とを入力することで、スレッドｐについて、フェッチ・ポート２０２-pのｍ番目のエントリに保持されるアクセス要求（request#ｍ）を入力するとともに、そのアクセス要求がフェッチ・ポート２０２-pのｍ番目のエントリに保持されているということと、そのアクセス要求がストア・ポート２０３-pのｎ番目のエントリに保持されているということとを入力する。【０１２５】
続いて、ステップＳ７０１で、図１２のフローチャートに従って、前述の条件（ｃ）についてチェックを行う。【０１２６】
すなわち、図１２のフローチャートに示すように、ＦＳ命令ステータス情報記憶部２０９に記憶される相手方のスレッドｑについてのＦＳ−ＰＥＮＤ−ＳＴＡＴＵＳ−ＴＨｑの値が０であるのか否かを判断して、その値が１である場合（スレッドｑがフェッチ・アンド・ストア要求を実行している場合）には、さらに、選択回路２０５の選択したアクセス要求の指定するアドレスが、ＦＳ命令ステータス情報記憶部２０９に記憶される相手方のスレッドｑについてのＦＳ−ＰＥＮＤ−ＡＤＲＳ−ＴＨｑのアドレスに一致するのか否かを判断する。そして、これらの判断処理に従って、同一データをアクセス先とするフェッチ・アンド・ストア要求がスレッドｑで実行されていることを判断する場合には、変数“チェック”に１を設定し、それ以外の場合には、変数“チェック”に０を設定する。【０１２７】
後述するように、変数“チェック”に０が設定されている場合にはアクセス要求の処理を開始し、変数“チェック”に１が設定されている場合にはアクセス要求の処理を待機させるようにしていることから、この図１２のフローチャートに従って、前述の条件（ｃ）についてチェックを行うのである。【０１２８】
続いて、図１１のフローチャートのステップＳ７０２で、変数“チェック”の値が０であるのか否かを判断して、変数“チェック”の値が０ではなくて１であることを判断するときには、ステップＳ７０８に進んで、選択回路２０５の選択したスレッドｐのアクセス要求の処理を待機させて、先行要求の処理完了を待つべく処理を終了する。【０１２９】
すなわち、相手方のスレッドｑが同一データに対してのフェッチ・アンド・ストア要求を実行しているので、選択回路２０５の選択したスレッドｐのアクセス要求の処理を待機させるのである。【０１３０】
一方、ステップＳ７０２の判断処理で、変数“チェック”の値が０であることを判断するときには、ステップＳ７０３に進んで、選択回路２０５の選択したアクセス要求がフェッチ・アンド・ストア要求であるのか否かを判断する。【０１３１】
このステップＳ７０３の判断処理で、選択回路２０５の選択したアクセス要求がフェッチ・アンド・ストア要求であることを判断するときには、ステップＳ７０４に進んで、図１３のフローチャートに従って、前述の条件（ａ−１）についてチェックを行う。【０１３２】
すなわち、図１３のフローチャートに示すように、ＦＰ−ＴＯＱ−ＴＨｐがｍ番目のエントリを指し、かつ、ＳＰ−ＴＯＱ−ＴＨｐがｎ番目のエントリを指している場合には、選択回路２０５の選択したフェッチ・アンド・ストア要求が最も古いアクセス要求であることで実行に入ってもよいことを示しているので、変数“チェック”に０を設定し、これに加えて、スレッドｐがフェッチ・アンド・ストア要求の処理に入ったことを表示すべく、ＦＳ−ＰＥＮＤ−ＳＴＡＴＵＳ−ＴＨｐに１をセットするとともに、ＦＳ−ＰＥＮＤ−ＡＤＲＳ−ＴＨｐにアドレスを登録し、それ以外の場合には、変数“チェック”に１を設定することで、前述の条件（ａ−１）についてチェックを行うのである。【０１３３】
一方、図１１のフローチャートのステップＳ７０３の判断処理で、選択回路２０５の選択したアクセス要求がフェッチ・アンド・ストア要求でないことを判断するときには、ステップＳ７０５に進んで、図１４のフローチャートに従って、前述の条件（ａ−２）についてチェックを行う。【０１３４】
すなわち、図１４のフローチャートに示すように、ＦＳ命令ステータス情報記憶部２０９に記憶されるスレッドｐについてのＦＳ−ＰＥＮＤ−ＳＴＡＴＵＳ−ＴＨｐの値が０であるのか否かを判断して、その値が１である場合（スレッドｐがフェッチ・アンド・ストア要求を実行している場合）には、さらに、選択回路２０５の選択したアクセス要求の指定するアドレスが、ＦＳ命令ステータス情報記憶部２０９に記憶されるスレッドｐについてのＦＳ−ＰＥＮＤ−ＡＤＲＳ−ＴＨｐのアドレスに一致するのか否かを判断する。【０１３５】
これらの判断処理で、スレッドｐが同一データのフェッチ・アンド・ストア要求を先行して実行中であるということを判断する場合には、選択回路２０５の選択したアクセス要求を実行してはいけないことを示しているので、変数“チェック”に１を設定し、それ以外の場合には、変数“チェック”に０を設定することで、前述の条件（ａ−２）についてチェックを行うのである。【０１３６】
続いて、図１１のフローチャートのステップＳ７０６で、変数“チェック”の値が０であるのか否かを判断して、変数“チェック”の値が０であることを判断するときには、ステップＳ７０７に進んで、選択回路２０５の選択したスレッドｐのアクセス要求の処理を開始し、一方、変数“チェック”の値が１であることを判断するときには、ステップＳ７０８に進んで、選択回路２０５の選択したスレッドｐのアクセス要求の処理を待機させて、先行要求の処理完了を待つべく処理を終了する。【０１３７】
その後、優先制御回路２０８は、フェッチ・アンド・ストア要求のロード・ストア処理が完了した時点で、ＦＳ−ＰＥＮＤ−ＳＴＡＴＵＳ−ＴＨｐを０にリセットし、待機させていた他要求の処理を再開させる。【０１３８】
一方、優先制御回路２０８は、前述の条件（ｂ）については、図１５のフローチャートに従って、そのチェックを行う。【０１３９】
すなわち、図１５のフローチャートに示すように、ＦＳ命令ステータス情報記憶部２０９に記憶されるスレッドｐについてのＦＳ−ＰＥＮＤ−ＳＴＡＴＵＳ−ＴＨｐの値が０であるのか否かということを判断するととにも、ＦＳ−ＰＥＮＤ−ＳＴＡＴＵＳ−ＴＨｐの値が１である場合には、選択回路２０５の選択したアクセス要求の指定するアドレスが、ＦＳ命令ステータス情報記憶部２０９に記憶されるスレッドｐについてのＦＳ−ＰＥＮＤ−ＡＤＲＳ−ＴＨｐのアドレスに一致するのか否かを判断する。【０１４０】
そして、ＦＳ命令ステータス情報記憶部２０９に記憶されるスレッドｑについてのＦＳ−ＰＥＮＤ−ＳＴＡＴＵＳ−ＴＨｑの値が０であるのか否かということを判断するととにも、ＦＳ−ＰＥＮＤ−ＳＴＡＴＵＳ−ＴＨｑの値が１である場合には、選択回路２０５の選択したアクセス要求の指定するアドレスが、ＦＳ命令ステータス情報記憶部２０９に記憶されるスレッドｑについてのＦＳ−ＰＥＮＤ−ＡＤＲＳ−ＴＨｑのアドレスに一致するのか否かを判断する。【０１４１】
これらの判断処理に従って、スレッドｐとスレッドｑが共にフェッチ・アンド・ストア要求を実行していないことを判断するときと、そのいずれか一方又は双方がフェッチ・アンド・ストア要求を実行しているものの、選択回路２０５の選択したアクセス要求の対象データとは異なるデータを対象としている場合には、キャッシュＲＡＭ２０１からのその対象データの吐き出しを開始し、それ以外の場合には、キャッシュＲＡＭ２０１からのその対象データの吐き出しを待機させることで、前述の条件（ｂ）についてチェックを行うのである。【０１４２】
このようにして、図１０のように構成される一次キャッシュ制御部２００では、フェッチ・アンド・ストア要求の対象データが異なれば、スレッド毎に一つずつフェッチ・アンド・ストア要求の処理を実行することが可能になる。【０１４３】
図１０のように構成される一次キャッシュ制御部２００でも、図８に示した最後処理スレッド表示信号制御回路２１０の発生するＲＥＱ−ＴＡＫＥＮ−ＴＨＲＥＡＤを使って、特定のスレッドのアクセス要求のみが処理され続けることの発生を防止することが可能である。【０１４４】
図１６に、最後処理スレッド表示信号制御回路２１０を備える場合に、図１０のように構成される一次キャッシュ制御部２００の備える優先制御回路２０８の実行するフローチャートを図示する。【０１４５】
優先制御回路２０８は、図９のフローチャートを実行する場合には、ステップＳ６０２で、相手方であるスレッドｑのフェッチ・ポート２０２-qの全エントリを参照すると、続くステップＳ６０３で、参照したフェッチ・ポート２０２-qのエントリの中に有効なエントリが存在するのか否かを判断して、有効なエントリが存在することを判断するとき、すなわち、フェッチ・アンド・ストア要求により待たされているアクセス要求が存在することを判断するときには、直ちに、ステップＳ６０４に進んで、ＲＥＱ−ＴＡＫＥＮ−ＴＨＲＥＡＤが最後に処理を完了したスレッドがスレッドｐであることを表示しているのか否かを判断するようにしている。【０１４６】
これに対して、優先制御回路２０８は、図１６のフローチャートを実行する場合には、フェッチ・アンド・ストア要求の対象データと同一のデータをアクセス先とするアクセス要求のみが待機させられることになるので、これを考慮して、ステップＳ６０３に続くステップＳ６０４αで、スレッドｑにフェッチ・アンド・ストア要求の完了待ちのアクセス要求（アドレス一致により待機させられているアクセス要求）が存在するのか否かを判断して、そのようなアクセス要求がある場合には、ステップＳ６０４の処理に進み、そのようなアクセス要求がない場合には、ステップＳ６０６の処理に進むようにしている。【０１４７】
このようにして、優先制御回路２０８は、図１０のように構成される一次キャッシュ制御部２００においても、図１６のフローチャートに従って、ＲＥＱ−ＴＡＫＥＮ−ＴＨＲＥＡＤを使って、特定のスレッドのアクセス要求のみが処理され続けることの発生を防止するように処理するのである。【０１４８】
図示実施例に従って本キャッシュ制御装置及び制御方法を説明したが、本キャッシュ制御装置及び制御方法はこれに限定されるものではない。例えば、実施例では、２つのスレッドが動作するＳＭＴ方式のプロセッサに実装されることを想定したが、３つ以上のスレッドが動作する場合にもそのまま適用できるものである。
【産業上の利用可能性】
【０１４９】
本発明は、ＳＭＴ方式のプロセッサにおけるキャッシュ制御に適用できるものであり、本発明を適用することで、ＳＭＴ方式のプロセッサにおいて、ＣＡＳ命令などのアトミック命令を処理する際に必要となる排他制御処理を簡略な構成に従って実現することができるようになる。
【図１】
2008155827.tif 000003
【図２】
2008155827.tif 000004
【図３】
2008155827.tif 000005
【図４】
2008155827.tif 000006
【図５】
2008155827.tif 000007
【図６】
2008155827.tif 000008
【図７】
2008155827.tif 000009
【図８】
2008155827.tif 000010
【図９】
2008155827.tif 000011
【図１０】
2008155827.tif 000012
【図１１】
2008155827.tif 000013
【図１２】
2008155827.tif 000014
【図１３】
2008155827.tif 000015
【図１４】
2008155827.tif 000016
【図１５】
2008155827.tif 000017
【図１６】
2008155827.tif 000018
【図１７】
2008155827.tif 000019
【図１８】
2008155827.tif 000020
【図１９】
2008155827.tif 000021
【図２０】
2008155827.tif 000022
【図２１】
2008155827.tif 000023
【手続補正書】
【提出日】平成21年12月10日(2009.12.10)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
同時に実行される複数のスレッドで共有されるキャッシュに対してのアクセス要求を制御するキャッシュ制御装置であって、
各スレッドに対応付けて設けられて、そのスレッドが複数の処理を不可分に実行するアトミック命令の実行に入る場合に第一の規定値を表示し、そのアトミック命令を完了する場合に前記第一の規定値とは異なる第二の規定値を表示するフラグを記憶する記憶手段と、
あるスレッドからアクセス要求が発行される場合に、前記記憶手段の記憶するフラグ値を参照することで、アクセス要求を発行したスレッドとは別のスレッドがアトミック命令を実行中であるのか否かを判断する判断手段と、
前記判断手段が、前記別のスレッドがアトミック命令を実行中であると判断した場合に、前記発行されたアクセス要求を待機させる処理を実行する実行手段とを備えることを、
特徴とするキャッシュ制御装置。
【請求項２】
請求項１に記載のキャッシュ制御装置において、
キャッシュからのデータの吐き出し要求がある場合に、前記記憶手段の記憶するフラグ値を参照することで、全てのスレッドがアトミック命令を実行中でないのかを判断して、全てのスレッドがその命令を実行中でないことを判断する場合に、キャッシュからのデータの吐き出し処理の実行を指示する指示手段を備えることを、
特徴とするキャッシュ制御装置。
【請求項３】
請求項１又は２に記載のキャッシュ制御装置において、
前記記憶手段の記憶するフラグ値を参照することで、スレッド内におけるアトミック命令についての排他制御を実行するスレッド内排他制御手段を備えることを、
特徴とするキャッシュ制御装置。
【請求項４】
同時に実行される複数のスレッドで共有されるキャッシュに対してのアクセス要求を制御するキャッシュ制御装置であって、
各スレッドに対応付けて設けられて、そのスレッドが複数の処理を不可分に実行するアトミック命令の実行に入る場合に第一の規定値を表示し、前記実行されるアトミック命令を完了する場合に前記第一の規定値とは異なる第二の規定値を表示するフラグを記憶し、さらに、そのスレッドがアトミック命令の実行に入る場合には、実行されるアトミック命令のアクセス先のアドレス情報を記憶する記憶手段と、
あるスレッドからアクセス要求が発行される場合に、前記記憶手段の記憶するフラグ値を参照することで、前記アクセス要求を発行したスレッドとは別のスレッドがアトミック命令を実行中であるのか否かを判断し、さらに、前記別のスレッドがアトミック命令を実行中であることを判断する場合には、前記記憶手段の記憶するアドレス情報を参照することで、前記別のスレッドが実行中のアトミック命令のアクセス先のアドレス情報と、前記発行されたアクセス要求の指定するアドレス情報とが一致するのか否かを判断する判断手段と、
前記判断手段が、前記別のスレッドがアトミック命令を実行中であることを判断し、かつ、前記別のスレッドが実行中のアトミック命令のアクセス先のアドレス情報と前記発行されたアクセス要求の指定するアドレス情報とが一致することを判断する場合に、前記発行されたアクセス要求を待機させる処理を実行する実行手段とを備えることを、
特徴とするキャッシュ制御装置。
【請求項５】
請求項４に記載のキャッシュ制御装置において、
キャッシュからのデータの吐き出し要求がある場合に、前記記憶手段の記憶するフラグ値およびアドレス情報を参照することで、全てのスレッドが吐き出し要求の指定するアドレス情報と一致するアドレス情報をアクセス先とするアトミック命令を実行中でないのかを判断して、全てのスレッドがその命令を実行中でないことを判断する場合に、キャッシュからのデータの吐き出し処理の実行を指示する指示手段を備えることを、
特徴とするキャッシュ制御装置。
【請求項６】
請求項４又は５に記載のキャッシュ制御装置において、
前記記憶手段の記憶するフラグ値およびアドレス情報を参照することで、スレッド内におけるアトミック命令についての排他制御を実行するスレッド内排他制御手段を備えることを、
特徴とするキャッシュ制御装置。
【請求項７】
請求項１ないし６のいずれか１項に記載のキャッシュ制御装置において、
最後にアクセス要求の処理を行ったスレッドがどのスレッドであるのかについて示す情報を記憶する第２の記憶手段と、
あるスレッドからアトミック命令に係るアクセス要求が発行される場合に、そのスレッド以外のスレッドについて、前記待機処理により待機させられているアクセス要求が存在するのか否かを判断する第２の判断手段と、
前記第２の判断手段が前記待機処理により待機させられているアクセス要求の存在を判断する場合に、前記第２の記憶手段の記憶する情報を参照することで最後にアクセス要求の処理を行ったスレッドを特定して、その特定したスレッド以外のスレッドの発行したアクセス要求を優先する形で、前記あるスレッドから発行されたアトミック命令に係るアクセス要求を選択するのか、その待機させられているアクセス要求を選択するのかを決定する決定手段とを備えることを、
特徴とするキャッシュ制御装置。
【請求項８】
請求項７に記載のキャッシュ制御装置において、
あるスレッドからアトミックでない命令に係るアクセス要求が発行される場合に、そのスレッド以外のスレッドについて、アトミック命令に係るアクセス要求の発行要求があるのか否かを判断する第３の判断手段と、
前記第３の判断手段がアトミック命令に係るアクセス要求の発行要求があることを判断する場合に、前記第２の記憶手段の記憶する情報を参照することで最後にアクセス要求の処理を行ったスレッドを特定して、その特定したスレッド以外のスレッドの発行したアクセス要求を優先する形で、前記あるスレッドから発行されたアトミックでない命令に係るアクセス要求を選択するのか、その発行要求のあるアトミック命令に係るアクセス要求を選択するのかを決定する第２の決定手段とを備えることを、
特徴とするキャッシュ制御装置。
【請求項９】
同時に実行される複数のスレッドで共有されるキャッシュに対してのアクセス要求を制御するキャッシュ制御装置が実行するキャッシュ制御方法であって、
前記キャッシュ制御装置が、
各スレッドに対応付けて設けられて、そのスレッドが複数の処理を不可分に実行するアトミック命令の実行に入る場合に第一の規定値を表示し、そのアトミック命令を完了する場合に前記第一の規定値とは異なる第二の規定値を表示するフラグを記憶する記憶手段を備える構成を採って、スレッドがアトミック命令の実行に入る場合に、その記憶手段に記憶される該当するフラグに前記第一の規定値を書き込み、さらに、そのアトミック命令を完了する場合に、前記第二の規定値を書き込むようにし、
あるスレッドからアクセス要求が発行される場合に、前記記憶手段の記憶するフラグ値を参照することで、アクセス要求を発行したスレッドとは別のスレッドがアトミック命令を実行中であるのか否かを判断し、
前記判断処理に従って、前記別のスレッドがアトミック命令を実行中であると判断した場合に、前記発行されたアクセス要求を待機させる処理を実行することを、
特徴とするキャッシュ制御方法。
【請求項１０】
同時に実行される複数のスレッドで共有されるキャッシュに対してのアクセス要求を制御するキャッシュ制御装置が実行するキャッシュ制御方法であって、
前記キャッシュ制御装置が、
各スレッドに対応付けて設けられて、そのスレッドが複数の処理を不可分に実行するアトミック命令の実行に入る場合に第一の規定値を表示し、前記実行されるアトミック命令を完了する場合に前記第一の規定値とは異なる第二の規定値を表示するフラグを記憶し、さらに、そのスレッドがアトミック命令の実行に入る場合には、実行されるアトミック命令のアクセス先のアドレス情報を記憶する記憶手段を備える構成を採って、スレッドがアトミック命令の実行に入る場合に、その記憶手段に記憶される該当するフラグに前記第一の規定値を書き込むとともに、そのアトミック命令のアクセス先のアドレス情報を前記記憶手段に書き込むようにし、さらに、そのアトミック命令を完了する場合に、そのフラグに前記第二の規定値を書き込むようにし、
あるスレッドからアクセス要求が発行される場合に、前記記憶手段の記憶するフラグ値を参照することで、前記アクセス要求を発行したスレッドとは別のスレッドがアトミック命令を実行中であるのか否かを判断し、さらに、前記別のスレッドがアトミック命令を実行中であることを判断する場合には、前記記憶手段の記憶するアドレス情報を参照することで、前記別のスレッドが実行中のアトミック命令のアクセス先のアドレス情報と、前記発行されたアクセス要求の指定するアドレス情報とが一致するのか否かを判断し、
前記判断処理に従って、前記別のスレッドがアトミック命令を実行中であることを判断し、かつ、前記別のスレッドが実行中のアトミック命令のアクセス先のアドレス情報と前記発行されたアクセス要求の指定するアドレス情報とが一致することを判断する場合に、前記発行されたアクセス要求を待機させる処理を実行することを、
特徴とするキャッシュ制御方法。
【国際調査報告】
2008155827.tif 000024
2008155827.tif 000025
2008155827.tif 000026
2008155827.tif 000027