(57)【要約】【課題】ロックの獲得及び解放に際してプロセッサローカルバスに負荷がかからないマルチプロセッサシステムを提供する。【解決手段】ロックを管理するロックレジスタ２２をプロセッサローカルバス１８側ではなくサイドバンドバス２３側に設ける。ＣＰＵ１１〜１３はロックの獲得及び解放に際してサイドバンドバス２３経由でロックレジスタ２２にアクセスする。また、ＣＰＵ１１〜１３がロックを獲得するために読出信号を出力すると、ロックレジスタ２２からロックビットが読み出されるとともに、直ちにロックレジスタ２２にロック状態「１」のロックビットが書き込まれる。したがって、ロックビットのリードモディファイライトをアトミックに実行することができる。【選択図】図１
2007058493.tif 000002
【特許請求の範囲】
【請求項１】
クリティカルセクションを有するシステムメモリと、
各々が、前記クリティカルセクションにアクセスする前にロックを獲得し、かつ前記クリティカルセクションにアクセスした後にロックを解放する複数のプロセッサと、
前記システムメモリと前記複数のプロセッサとに共通に接続されたプロセッサローカルバスと、
前記複数のプロセッサに共通に接続されたサイドバンドバスと、
前記サイドバンドバスに接続され、前記ロックを管理するロックレジスタとを備えたことを特徴とするマルチプロセッサシステム。
【請求項２】
請求項１に記載のマルチプロセッサシステムであって、
前記ロックレジスタは、
ロック状態又は非ロック状態を示すロック情報を保持する保持手段と、
前記プロセッサから出力された読出信号に応じて前記保持手段のロック情報をロック状態に設定するロック手段とを含むことを特徴とするマルチプロセッサシステム。
【請求項３】
請求項２に記載のマルチプロセッサシステムであって、
前記ロックレジスタはさらに、
前記プロセッサから出力された書込信号に応じて前記保持手段のロック情報を非ロック状態に設定する非ロック手段と、
ロックを獲得しているプロセッサを識別する識別手段と、
前記識別手段により識別されているプロセッサからの書込信号を選択し、当該他のプロセッサからの書込信号を選択しないスイッチ手段とを含むことを特徴とするマルチプロセッサシステム。
【請求項４】
クリティカルセクションを有するシステムメモリと、複数のプロセッサと、前記システムメモリと前記複数のプロセッサとに共通に接続されたプロセッサローカルバスと、前記複数のプロセッサに共通に接続されたサイドバンドバスと、前記サイドバンドバスに接続され、ロック状態又は非ロック状態を示すロック情報を保持するロックレジスタとを備えたマルチプロセッサシステムにおける排他制御方法であって、
前記複数のプロセッサのうち１つのプロセッサから出力された読出信号に応じて、前記１つのプロセッサが前記ロックレジスタからロック情報を読み出し、かつ、ロック状態を示すロック情報を前記ロックレジスタに書き込むステップと、
前記ロックレジスタから読み出したロック情報が非ロック状態を示す場合、前記１つのプロセッサが前記クリティカルセクションにアクセスするステップと、
前記１つのプロセッサが前記クリティカルセクションにアクセスした後、前記１つのプロセッサから出力された書込信号に応じて、前記１つのプロセッサが非ロック状態を示すロック情報を前記ロックレジスタに書き込むステップとを含むことを特徴とするマルチプロセッサシステムにおける排他制御方法。
【請求項５】
請求項４に記載の排他制御方法であって、
前記ロックレジスタから読み出したロック情報がロック状態を示す場合、前記ロック情報の読み出しを繰り返すことを特徴とする排他制御方法。
【請求項６】
請求項５に記載の排他制御方法であってさらに、
前記ロックレジスタから非ロック状態を示すロック情報を読み出したプロセッサを記憶するステップを含むことを特徴とする排他制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチプロセッサシステム及びそれにおける排他制御方法に関し、さらに詳しくは、クリティカルセクションにアクセスする前にロックを獲得し、クリティカルセクションにアクセスした後にロックを解放するマルチプロセッサシステム及びそれにおける排他制御方法に関する。
【背景技術】
【０００２】
対称型マルチプロセッサ（ＳＭＰ; Symmetric Multiple Processor）システムでは、複数のＣＰＵ（Central Processing Unit）がメモリを共有し、対等な立場で処理を分担している。そのため、データのコヒーレンシを維持するために排他制御を行う必要がある。排他制御は、マルチプロセッサシステムにおいて、同時にアクセスしてはならない資源（クリティカルセクション）に複数のＣＰＵが同時にアクセスしないように制御するものである。
【０００３】
ＣＰＵは一般に、メモリ上のデータを読み出し、そのデータに基づいて演算を行い、その演算結果に基づいてメモリ上のデータを書き換えるという一連の処理を行うが、もしも複数のＣＰＵがメモリ上の同じデータに対してこのような処理を同時に行ってしまうと、データを正しく書き換えることができない。そこで、１つのＣＰＵがメモリ上のあるデータにアクセスしている間は、そのデータをロック（施錠）し、他のＣＰＵがその同じデータにアクセスできないようにする必要がある。１つのＣＰＵが処理を終え、そのデータをアンロック（解錠）すると、他のＣＰＵが処理を開始することができる。一般に、このようなデータやファイル等の資源を「クリティカルセクション」と呼び、クリティカルセクションにアクセスする権限を「ロック」と呼んでいる。
【０００４】
このような排他制御によれば、ＣＰＵがクリティカルセクションにアクセスするためにはその前に必ずロックを獲得しなければならない。すなわち、ある１つのＣＰＵがロックを獲得してクリティカルセクションにアクセスしている間、他のＣＰＵはロックを獲得することができないので、クリティカルセクションにアクセスすることができない。
【０００５】
ＣＰＵはロックを獲得するために、ロックされていないことを示すロックビット「０」を読み出した後、ロックされていることを示すロックビット「１」に書き換える、いわゆるリードモディファイライトを実行する。しかしながら、あるＣＰＵがロックビット「０」を読み出してからロックビット「１」に書き換えるまでの間に、他のＣＰＵがロックビット「０」を読み出すと、ロックを獲得できると誤認してしまう可能性がある。これを防止するためには、上述したリードモディファイライトをアトミック（不可分）に実行しなければならない。
【０００６】
ＳＭＰ対応のプロセッサは、リードモディファイライトのアトミック性を保証するためのロック機能をハードウエアで実装しているのに対し、ＳＭＰ非対応のプロセッサはそのようなハードウエアを実装していない。
【０００７】
ＳＭＰシステムを実現する際に、ＳＭＰ対応のプロセッサ及びアーキテクチャを採用すれば、ソフトウエアの開発は安価で済むが、ハードウエアは高価になる。逆に、ＳＭＰ非対応のプロセッサ及びアーキテクチャを採用すれば、ソフトウエアの開発は高価になるが、ハードウエアは安価で済む。そこで、安価なハードウエアを採用し、かつソフトウエアの開発費用を最小限に抑えることの可能なＳＭＰシステムの実現が望まれている。
【０００８】
米国特許第５１７５８２９号明細書（下記の特許文献１）は、アトミック転送をＣＰＵ及びローカルバスに実装した装置を開示している。この種のマルチプロセッサシステムは、バスバンド幅を削減するために共有バス方式を採用し、ＭＥＳＩプロトコルを用いることによってロックを獲得できないＣＰＵが無駄なリードアクセスを繰り返さないようにする。
【０００９】
米国特許第５１７５８２９号明細書（下記の特許文献２）は、ロックを管理するためのスワップレジスタをＣＰＵに内蔵した装置を開示している。この装置は、スワップレジスタに格納したロックビットをメモリに格納したロックビットで時々スワップして更新し、ロックを獲得するためのリードアクセスはこのスワップレジスタに対して行われる。この装置も、高価でかつ複雑なアトミックリードモディファイライト機能の存在を前提としている。
【００１０】
米国特許第５６６６５１５号明細書（下記の特許文献３）は、リトライ信号を送ることによってロックをかけ、バスバンド幅の飽和を軽減した装置を開示している。この装置も、高価でかつ複雑なアトミックリードモディファイライト機能の存在を前提としている。
【特許文献１】米国特許第５１７５８２９号明細書
【特許文献２】米国特許第５５３５３６５号明細書
【特許文献３】米国特許第５６６６５１５号明細書
【００１１】
[関連出願１]特願２００４−３４１４６６号
【発明の開示】
【発明が解決しようとする課題】
【００１２】
本発明の目的は、ロックの獲得及び解放に際してプロセッサローカルバスに負荷がかからないマルチプロセッサシステム及びそれにおける排他制御方法を提供することである。
【００１３】
本発明のもう１つの目的は、ロックの獲得に際してリードモディファイライトをアトミックに実行可能なマルチプロセッサシステム及びそれにおける排他制御方法を提供することである。
【課題を解決するための手段及び発明の効果】
【００１４】
本発明によるマルチプロセッサシステムは、システムメモリと、複数のプロセッサと、プロセッサローカルバスと、サイドバンドバスと、ロックレジスタとを備える。システムメモリは、クリティカルセクションを有する。プロセッサの各々は、クリティカルセクションにアクセスする前にロックを獲得し、かつクリティカルセクションにアクセスした後にロックを解放する。プロセッサローカルバスは、システムメモリと複数のプロセッサとに共通に接続される。サイドバンドバスは、複数のプロセッサに共通に接続される。ロックレジスタは、サイドバンドバスに接続され、ロックを管理する。
【００１５】
このマルチプロセッサシステムでは、ロックレジスタがプロセッサローカルバスではなくサイドバンドバスに接続されているので、プロセッサはロックの獲得及び解放に際してサイドバンドバス経由でロックレジスタにアクセスする。その結果、プロセッサローカルバスに負荷がかからない。
【００１６】
好ましくは、ロックレジスタは、保持手段と、ロック手段とを含む。保持手段は、ロック状態又は非ロック状態を示すロック情報を保持する。ロック手段は、プロセッサから出力された読出信号に応じて保持手段のロック情報をロック状態に設定する。
【００１７】
この場合、あるプロセッサがロックを獲得するために読出信号を出力すると、ロックレジスタからロック情報が読み出されるとともに、直ちにロックレジスタにロック状態のロック情報が書き込まれる。したがって、このマルチプロセッサシステムは、ロックの獲得に際してリードモディファイライトをアトミックに実行することができる。
【００１８】
好ましくは、ロックレジスタはさらに、非ロック手段と、識別手段と、スイッチ手段とを含む。非ロック手段は、プロセッサから出力された書込信号に応じて保持手段のロック情報を非ロック状態に設定する。識別手段は、ロックを獲得しているプロセッサを識別する。スイッチ手段は、識別手段により識別されているプロセッサからの書込信号を選択し、当該他のプロセッサからの書込信号を選択しない。
【００１９】
この場合、ロックを獲得しているプロセッサからの書込信号が選択され、ロックを獲得していないプロセッサからの書込信号が選択されないので、ロックを獲得しているプロセッサしかロックを解除することができない。
【００２０】
また、本発明による排他制御方法は、クリティカルセクションを有するシステムメモリと、複数のプロセッサと、システムメモリと複数のプロセッサとに共通に接続されたプロセッサローカルバスと、複数のプロセッサに共通に接続されたサイドバンドバスと、サイドバンドバスに接続され、ロック状態又は非ロック状態を示すロック情報を保持するロックレジスタとを備えたマルチプロセッサシステムにおける排他制御方法であって、複数のプロセッサのうち１つのプロセッサから出力された読出信号に応じて、その１つのプロセッサがロックレジスタからロック情報を読み出し、かつ、ロック状態を示すロック情報をロックレジスタに書き込むステップと、ロックレジスタから読み出したロック情報が非ロック状態を示す場合、その１つのプロセッサがクリティカルセクションにアクセスするステップと、その１つのプロセッサがクリティカルセクションにアクセスした後、その１つのプロセッサから出力された書込信号に応じて、その１つのプロセッサが非ロック状態を示すロック情報をロックレジスタに書き込むステップとを含む。
【００２１】
この排他制御方法では、ロックレジスタがプロセッサローカルバスではなくサイドバンドバスに接続されているので、プロセッサはサイドバンドバス経由でロックレジスタにアクセスする。あるプロセッサがロックを獲得するために読出信号を出力すると、ロックレジスタからロック情報が読み出されるとともに、直ちにロックレジスタにロック状態のロック情報が書き込まれる。その結果、この排他制御方法は、ロックの獲得及び解放に際してプロセッサローカルバスに負荷がかからず、しかもロックの獲得に際してリードモディファイライトをアトミックに実行することができる。
【発明を実施するための最良の形態】
【００２２】
以下、図面を参照し、本発明の実施の形態を詳しく説明する。図中同一又は相当部分には同一符号を付してその説明は繰り返さない。
【００２３】
図１を参照して、本発明の実施の形態によるマルチプロセッサシステム１０は、ＣＰＵ１１〜１３と、ＲＯＭ、ＲＡＭ等のシステムメモリ１４と、入出力回路（Ｉ／Ｏ）１５及び１６と、バスブリッジ１７と、プロセッサローカルバス１８と、コモンバス１９とを備える。ＣＰＵ１１〜１３とシステムメモリ１４と入出力回路１５とバスブリッジ１７とは、プロセッサローカルバス１８に共通に接続される。入出力回路１６とバスブリッジ１７とは、コモンバス１９に共通に接続される。
【００２４】
ＣＰＵ１１〜１３は、プロセッサローカルバス１８を経由してシステムメモリ１４及び入出力回路１５にアクセス可能である。ＣＰＵ１１〜１３はまた、プロセッサローカルバス１８、バスブリッジ１７及びコモンバス１９を経由して入出力回路１６にアクセス可能である。システムメモリ１４は通常通りアドレス空間を形成しており、ＣＰＵ１１〜１３はこのアドレス空間にアクセスする。すなわち、ＣＰＵ１１〜１３は読出命令に従って指定アドレスからデータを読み出したり、書込命令に従って指定アドレスにデータを書き込んだりする。システムメモリ１４の中には、ＣＰＵ１１〜１３が同時にアクセスしてはならないクリティカルセクションがある。クリティカルセクションにアクセスするためには、排他制御を行わなければならない。
【００２５】
マルチプロセッサシステム１０はさらに、メモリ２０と、レジスタ２１と、ロックレジスタ２２と、サイドバンドバス２３とを備える。ＣＰＵ１１〜１３とメモリ２０とレジスタ２１とロックレジスタ２２とは、サイドバンドバス２３に共通に接続される。ＣＰＵ１１〜１３はまた、ロックレジスタ２２に直接接続される。
【００２６】
メモリ２０、レジスタ２１及びロックレジスタ２２は、システムメモリ１４上の通常のアドレス空間とは異なる拡張アドレス空間を形成し、ＣＰＵ１１〜１３がこの拡張アドレス空間にもアクセスできるよに特別な命令が用意されている。ＣＰＵ１１〜１３は、サイドバンドバス２３を経由してメモリ２０、レジスタ２１及びロックレジスタ２２にアクセス可能である。サイドバンドバス２３は、プロセッサローカルバス１８以外のバスであって、ＣＰＵ１１〜１３に直接接続されるバスであり、たとえばＤＣＲ(Device Control Register)バスを含む。なお、メモリ２０及びレジスタ２１は例示に過ぎず、一方だけあっても、両方ともなくてもよい。
【００２７】
ロックレジスタ２２は、排他制御に必要なロックを管理する。ＣＰＵ１１〜１３の各々は、システムメモリ１４のクリティカルセクションにアクセスする前に読出信号を出力してロックレジスタ２２からロックを獲得し、システムメモリ１４のクリティカルセクションにアクセスした後に書込信号を出力してそのロックを解放する。
【００２８】
次に図２を参照し、ロックレジスタ２２の具体的な構成を説明する。ただし以下では、説明を簡単にするために、２つのＣＰＵ１１，１２に対応する構成のみを説明する。なお、信号の前に付された／（スラッシュ）は、その信号が論理ロウ（以下「Ｌ」と略す）レベルで活性であることを示す。
【００２９】
ロックレジスタ２２は、アドレス検知回路３０と、ＡＮＤ回路３１〜３５と、ＯＲ回路３６と、遅延回路３７と、ＲＳフリップフロップ回路３８と、読出検知回路３９と、バス識別レジスタ４０と、スイッチ回路４１とを備える。
【００３０】
アドレス検知回路３０は、ＣＰＵ１１，１２から与えられたアドレスＡｄｄｒが所定のアドレスであることを検知したとき、ロックレジスタ２２を選択的に活性化する。具体的には、アドレス検知回路３０は所定のアドレスＡｄｄｒに応じてレジスタヒット信号／ｒｅｇ＿ｈｉｔをＬレベルにする。これにより、ロックレジスタ２２は、ＣＰＵ１１，１２からの読出信号／ＣＰＵ１＿Ｒｅａｄ，／ＣＰＵ２＿Ｒｅａｄ及び書込信号／ＣＰＵ１＿Ｗｒｉｔｅ，／ＣＰＵ２＿Ｗｒｉｔｅの入力を受け付ける。ＣＰＵ１１は、ロックを獲得するために読出信号／ＣＰＵ１＿Ｒｅａｄを出力し、このとき読み出された読出データビットＲｅａｄＤａｔａｂｉｔが「０」の場合はロックを獲得することができ、「１」の場合はロックを獲得することができない。ＣＰＵ１２は、ロックを獲得するために読出信号／ＣＰＵ２＿Ｒｅａｄを出力し、このとき読み出された読出データビットＲｅａｄＤａｔａｂｉｔが「０」の場合はロックを獲得することができ、「１」の場合はロックを獲得することができない。ＣＰＵ１１は、ロックを解放するために書込信号／ＣＰＵ１＿Ｗｒｉｔｅを出力する。ＣＰＵ１２は、ロックを解放するために書込信号／ＣＰＵ２＿Ｗｒｉｔｅを出力する。
【００３１】
ＡＮＤ回路３１は、レジスタヒット信号／ｒｅｇ＿ｈｉｔがＬレベルの場合において、ＣＰＵ１１からの読出信号／ＣＰＵ１＿ＲｅａｄがＬレベルになると、読出信号／ＣＰＵ１＿ＲＤをＬレベルにする。すなわち、ＣＰＵ１１がロックを獲得しようとしてきたとき、読出信号／ＣＰＵ１＿ＲＤは活性化される。
【００３２】
ＡＮＤ回路３２は、レジスタヒット信号／ｒｅｇ＿ｈｉｔがＬレベルの場合において、ＣＰＵ１２からの読出信号／ＣＰＵ２＿ＲｅａｄがＬレベルになると、読出信号／ＣＰＵ２＿ＲＤをＬレベルにする。すなわち、ＣＰＵ１２がロックを獲得しようとしてきたとき、読出信号／ＣＰＵ２＿ＲＤは活性化される。
【００３３】
ＡＮＤ回路３３は、レジスタヒット信号／ｒｅｇ＿ｈｉｔがＬレベルの場合において、ＣＰＵ１１からの書込信号／ＣＰＵ１＿ＷｒｉｔｅがＬレベルになり、かつ、書込データビットＷｒｉｔｅＤａｔａｂｉｔが「０」（Ｌレベルに相当）になると、書込信号／ＣＰＵ１＿ＷＤをＬレベルにする。すなわち、ＣＰＵ１１がロックを解放しようとしてきたとき、書込信号／ＣＰＵ１＿ＷＤは活性化される。
【００３４】
ＡＮＤ回路３４は、レジスタヒット信号／ｒｅｇ＿ｈｉｔがＬレベルの場合において、ＣＰＵ１２からの書込信号／ＣＰＵ２＿ＷｒｉｔｅがＬレベルになり、かつ、書込データビットＷｒｉｔｅＤａｔａｂｉｔが「０」になると、書込信号／ＣＰＵ２＿ＷＤをＬレベルにする。すなわち、ＣＰＵ１２がロックを解放しようとしてきたとき、書込信号／ＣＰＵ２＿ＷＤは活性化される。
【００３５】
ＯＲ回路３６は、読出信号／ＣＰＵ１＿ＲＤ又は／ＣＰＵ２＿ＲＤがＬレベルになると、読出信号／ＲｅａｄをＬレベルにする。遅延回路３７は、読出信号／Ｒｅａｄを所定時間遅延させ、遅延読出信号／Ｒｅａｄ＿ｄｌｙを生成する。すなわち、いずれかのＣＰＵがロックを獲得しようとしてきてから所定時間経過後に、遅延読出信号／Ｒｅａｄ＿ｄｌｙはＬレベルに活性化される。
【００３６】
ＲＳフリップフロップ回路３８はロックビットＬｏｃｋｂｉｔを保持し、読出データビットＲｅａｄＤａｔａｂｉｔとして出力する。ロックビットＬｏｃｋｂｉｔは、「１」のときロック状態を示し、「０」のとき非ロック状態を示す。ＲＳフリップフロップ回路３８は、遅延読出信号／Ｒｅａｄ＿ｄｌｙがＬレベルになると、ロックビットＬｏｃｋｂｉｔを「１」にセットする。
【００３７】
読出検知回路３９は、読出信号／ＣＰＵ１＿ＲＤがＬレベルの場合は書込識別データＷｒｉｔｅ＿ＩＤを「１」に設定し、読出信号／ＣＰＵ２＿ＲＤがＬレベルの場合は書込識別データＷｒｉｔｅ＿ＩＤを「２」に設定し、それ以外の場合は書込識別データＷｒｉｔｅ＿ＩＤを「０」に設定する。すなわち、ＣＰＵ１１がロックを獲得しようとしてきたとき、書込識別データＷｒｉｔｅ＿ＩＤは「１」に設定され、ＣＰＵ１２がロックを獲得しようとしてきたとき、書込識別データＷｒｉｔｅ＿ＩＤは「２」に設定される。
【００３８】
ＡＮＤ回路３５は、ロックビットＬｏｃｋｂｉｔが「０」の場合において、読出信号／ＲｅａｄがＬレベルになると、書込信号／ＷｒｉｔｅをＬレベルにする。すなわち、いずれのＣＰＵもロックを獲得していない場合において、いずれかのＣＰＵがロックを獲得しようとしてきたとき、書込信号／Ｗｒｉｔｅは活性化される。
【００３９】
バス識別レジスタ４０は、いずれのＣＰＵがロックを獲得しているのか記憶しておくためのもので、書込信号／ＷｒｉｔｅがＬレベルのとき、書込識別データＷｒｉｔｅ＿ＩＤに応じてバス識別データＢｕｓ＿ＩＤを書き換える。具体的には、書込識別データＷｒｉｔｅ＿ＩＤが「０」の場合、バス識別データＢｕｓ＿ＩＤは「０」に設定され、書込識別データＷｒｉｔｅ＿ＩＤが「１」の場合、バス識別データＢｕｓ＿ＩＤは「１」に設定され、書込識別データＷｒｉｔｅ＿ＩＤが「２」の場合、バス識別データＢｕｓ＿ＩＤは「２」に設定される。したがって、いずれのＣＰＵもロックを獲得していない場合において、ＣＰＵ１１がロックを獲得しようとしてきたとき、バス識別レジスタ４０はＣＰＵ１１がロックを獲得したことを記憶する。また、いずれのＣＰＵもロックを獲得していない場合において、ＣＰＵ１２がロックを獲得しようとしてきたとき、バス識別レジスタ４０はＣＰＵ１２がロックを獲得したことを記憶する。
【００４０】
スイッチ回路４１は、バス識別データＢｕｓ＿ＩＤに応じて、論理ハイ（以下「Ｈ」と略す）レベルの信号、書込信号／ＣＰＵ１＿ＷＤ又は／ＣＰＵ２＿ＷＤを選択し、ロックリセット信号／ＲＳＴ＿Ｌｏｃｋとして出力する。具体的には、バス識別データＢｕｓ＿ＩＤが「０」の場合、ロックリセット信号／ＲＳＴ＿ＬｏｃｋはＨレベルになり、バス識別データＢｕｓ＿ＩＤが「１」の場合、書込信号／ＣＰＵ１＿ＷＤがロックリセット信号／ＲＳＴ＿Ｌｏｃｋとして出力され、バス識別データＢｕｓ＿ＩＤが「２」の場合、書込信号／ＣＰＵ２＿ＷＤがロックリセット信号／ＲＳＴ＿Ｌｏｃｋとして出力される。
【００４１】
ＲＳフリップフロップ回路３８は、ロックリセット信号／ＲＳＴ＿ＬｏｃｋがＬレベルになると、ロックビットＬｏｃｋｂｉｔを「０」にリセットする。したがって、ロックを獲得しているＣＰＵがロックを解放しようとしてきたときだけ、ロックビットＬｏｃｋｂｉｔは「０」になる。
【００４２】
バス識別レジスタ４０は、ロックリセット信号／ＲＳＴ＿ＬｏｃｋがＬレベルになると、バス識別データＢｕｓ＿ＩＤを「０」にリセットする。したがって、ロックが解放されたとき、バス識別レジスタ４０はいずれのＣＰＵもロックを獲得していないことを記憶する。
【００４３】
次に図３を参照し、ロックレジスタ２２の動作を説明する。
【００４４】
最初にリセット信号／ＲｅｓｅｔはＬレベルに活性化されるので、バス識別レジスタ４０はリセットされ、バス識別データＢｕｓ＿ＩＤは「０」に設定されている。ＲＳフリップフロップ回路３８もまたリセットされ、ロックビットＬｏｃｋｂｉｔは「０」に設定されている。すなわち、最初はいずれのＣＰＵもロックを獲得していない状態にある。
【００４５】
（１）ＣＰＵ１１によるロックの獲得（成功）
まず、いずれのＣＰＵもロックを獲得していない状態で、ＣＰＵ１１がロックを獲得しようとしてきた場合を説明する。
【００４６】
リセット信号／ＲｅｓｅｔがＨレベルになった後に、所定のアドレスＡｄｄｒが与えられると、アドレス検知回路３０はレジスタヒット信号／ｒｅｇ＿ｈｉｔをＬレベルにする。レジスタヒット信号／ｒｅｇ＿ｈｉｔがＬレベルになっている間に、ＣＰＵ１１が読出信号／ＣＰＵ１＿ＲｅａｄをＬレベルにしたとき、ロックビットＬｏｃｋｂｉｔは「０」に設定され、読出データビットＲｅａｄＤａｔａｂｉｔは「０」になっているので、ＣＰＵ１１はロックを獲得したものと認識する。また、ＣＰＵ１１からの読出信号／ＣＰＵ１＿ＲｅａｄがＬレベルになると、ＡＮＤ回路３１により読出信号／ＣＰＵ１＿ＲＤがＬレベルになるので、ＯＲ回路３６により読出信号／ＲｅａｄもＬレベルになる。また、読出信号／ＣＰＵ１＿ＲＤがＬレベルになるので、読出検知回路３９は書込識別データＷｒｉｔｅ＿ＩＤを「１」に設定する。これは、ＣＰＵ１１がロックを獲得しようとしてきたことを意味する。
【００４７】
このとき、ロックビットＬｏｃｋｂｉｔは「０」に設定され、読出データビットＲｅａｄＤａｔａｂｉｔは「０」になっているので、読出信号／ＲｅａｄがＬレベルになると、ＡＮＤ回路３５により書込信号／ＷｒｉｔｅもＬレベルになる。これにより、バス識別レジスタ４０は書き換え可能になる。書込識別データＷｒｉｔｅ＿ＩＤは「１」に設定されているので、バス識別データＢｕｓ＿ＩＤは「１」に書き換えられる。これにより、バス識別レジスタ４０はＣＰＵ１１がロックを獲得したことを記憶する。
【００４８】
読出信号／ＲｅａｄがＬレベルになってから所定時間が経過すると、遅延読出信号／Ｒｅａｄ＿ｄｌｙもＬレベルになるので、ＲＳフリップフロップ回路３８はセットされ、ロックビットＬｏｃｋｂｉｔは「１」に設定され、読出データビットＲｅａｄＤａｔａｂｉｔとして出力される。
【００４９】
（２）ＣＰＵ１２によるロックの獲得（失敗）
次に、ＣＰＵ１１がロックを獲得している間に、他のＣＰＵ１２がロックを獲得しようとしてきた場合を説明する。
【００５０】
所定のアドレスＡｄｄｒが与えられ、レジスタヒット信号／ｒｅｇ＿ｈｉｔがＬレベルになっている間に、ＣＰＵ１２が読出信号／ＣＰＵ２＿ＲｅａｄをＬレベルにしたとき、ロックビットＬｏｃｋｂｉｔは「１」に設定され、読出データビットＲｅａｄＤａｔａｂｉｔは「１」になっているので、ＣＰＵ１２はロックを獲得できないものと認識する。また、ＣＰＵ１２からの読出信号／ＣＰＵ２＿ＲｅａｄがＬレベルになると、ＡＮＤ回路３２により読出信号／ＣＰＵ２＿ＲＤがＬレベルになるので、ＯＲ回路３６により読出信号／ＲｅａｄもＬレベルになる。また、読出信号／ＣＰＵ２＿ＲＤがＬレベルになるので、読出検知回路３９は書込識別データＷｒｉｔｅ＿ＩＤを「２」に設定する。これは、ＣＰＵ１２がロックを獲得しようとしてきたことを意味する。
【００５１】
しかしながら、このとき、ロックビットＬｏｃｋｂｉｔは「１」に設定され、読出データビットＲｅａｄＤａｔａｂｉｔは「１」になっているので、読出信号／ＲｅａｄがＬレベルになっても、書込信号／ＷｒｉｔｅはＬレベルにならず、Ｈレベルを維持する。したがって、バス識別レジスタ４０は書き換え可能にならない。書込識別データＷｒｉｔｅ＿ＩＤは「２」に設定されているが、バス識別データＢｕｓ＿ＩＤは「１」のまま書き換えられない。よって、バス識別レジスタ４０はＣＰＵ１１がロックを獲得していることを記憶し続ける。
【００５２】
読出信号／ＲｅａｄがＬレベルになってから所定時間が経過すると、遅延読出信号／Ｒｅａｄ＿ｄｌｙもＬレベルになるが、ロックビットＬｏｃｋｂｉｔは既に「１」に設定されているので、読出データビットＲｅａｄＤａｔａｂｉｔは「１」を維持する。
【００５３】
（３）ＣＰＵ１２によるロックの解放（失敗）
次に、ＣＰＵ１１がロックを獲得している間に、他のＣＰＵ１２がロックを解放しようとしてきた場合を説明する。
【００５４】
所定のアドレスＡｄｄｒが与えられ、レジスタヒット信号／ｒｅｇ＿ｈｉｔがＬレベルになっている間に、ＣＰＵ１２からの書込信号／ＣＰＵ２＿ＷｒｉｔｅがＬレベルになり、かつ、書込データビットＷｒｉｔｅＤａｔａｂｉｔが「０」になると、ＡＮＤ回路３４により書込信号／ＣＰＵ２＿ＷＤがＬレベルになる。しかしながら、バス識別データＢｕｓ＿ＩＤは「１」で、スイッチ回路４１は書込信号／ＣＰＵ１＿ＷＤを選択し続けているので、ロックリセット信号／ＲＳＴ＿ＬｏｃｋはＨレベルを維持する。よって、ＣＰＵ１２はロックを解放することができない。
【００５５】
（４）ＣＰＵ１１によるロックの解放（成功）
次に、ＣＰＵ１１がロックを獲得している間に、ＣＰＵ１１自身がロックを解放しようとしてきた場合を説明する。
【００５６】
所定のアドレスＡｄｄｒが与えられ、レジスタヒット信号／ｒｅｇ＿ｈｉｔがＬレベルになっている間に、ＣＰＵ１１からの書込信号／ＣＰＵ１＿ＷｒｉｔｅがＬレベルになり、かつ、書込データビットＷｒｉｔｅＤａｔａｂｉｔが「０」になると、ＡＮＤ回路３３により書込信号／ＣＰＵ１＿ＷＤがＬレベルになる。このとき、スイッチ回路４１は書込信号／ＣＰＵ１＿ＷＤを選択し続けているので、ロックリセット信号／ＲＳＴ＿ＬｏｃｋもＬレベルになる。これにより、ＲＳフリップフロップ回路３８はリセットされ、ロックビットＬｏｃｋｂｉｔは「０」に設定され、読出データビットＲｅａｄＤａｔａｂｉｔとして出力される。よって、ＣＰＵ１１はロックを解放することができる。
【００５７】
なお、ロックリセット信号／ＲＳＴ＿ＬｏｃｋがＬレベルになるので、バス識別レジスタ４０もリセットされ、書込識別データＷｒｉｔｅ＿ＩＤは「０」に設定される。スイッチ回路４１は「０」の書込識別データＷｒｉｔｅ＿ＩＤに応じてＨレベルの信号を選択するので、ロックリセット信号／ＲＳＴ＿ＬｏｃｋはＨレベルに固定される。
【００５８】
（５）ＣＰＵ１２によるロックの獲得（成功）
次に、ＣＰＵ１１がロックを解放した後に、ＣＰＵ１２がロックを獲得しようとしてきた場合を説明する。
【００５９】
所定のアドレスＡｄｄｒが与えられ、レジスタヒット信号／ｒｅｇ＿ｈｉｔがＬレベルになっている間に、ＣＰＵ１２が読出信号／ＣＰＵ２＿ＲｅａｄをＬレベルにしたとき、ロックビットＬｏｃｋｂｉｔは「０」に設定され、読出データビットＲｅａｄＤａｔａｂｉｔは「０」になっているので、ＣＰＵ１２はロックを獲得できるものと認識する。また、ＣＰＵ１２からの読出信号／ＣＰＵ２＿ＲｅａｄがＬレベルになると、ＡＮＤ回路３２により読出信号／ＣＰＵ２＿ＲＤがＬレベルになるので、ＯＲ回路３６により読出信号／ＲｅａｄもＬレベルになる。また、読出信号／ＣＰＵ２＿ＲＤがＬレベルになるので、読出検知回路３９は書込識別データＷｒｉｔｅ＿ＩＤを「２」に設定する。これは、ＣＰＵ１２がロックを獲得しようとしてきたことを意味する。
【００６０】
このとき、ロックビットＬｏｃｋｂｉｔは「０」に設定され、読出データビットＲｅａｄＤａｔａｂｉｔは「０」になっているので、読出信号／ＲｅａｄがＬレベルになると、ＡＮＤ回路３５により書込信号／ＷｒｉｔｅもＬレベルになる。これにより、バス識別レジスタ４０は書き換え可能になる。書込識別データＷｒｉｔｅ＿ＩＤは「２」に設定されているので、バス識別データＢｕｓ＿ＩＤは「２」に書き換えられる。これにより、バス識別レジスタ４０はＣＰＵ１２がロックを獲得したことを記憶する。
【００６１】
読出信号／ＲｅａｄがＬレベルになってから所定時間が経過すると、遅延読出信号／Ｒｅａｄ＿ｄｌｙもＬレベルになるので、ＲＳフリップフロップ回路３８はセットされ、ロックビットＬｏｃｋｂｉｔは「１」に設定され、読出データビットＲｅａｄＤａｔａｂｉｔとして出力される。
【００６２】
次に図４を参照し、ロックレジスタ２２を用いたマルチプロセッサシステム１０全体の動作を説明する。
【００６３】
ＣＰＵ１１又は１２は、所定のアドレスＡｄｄｒを出力し、かつ、読出信号／ＣＰＵ１＿Ｒｅａｄ又は／ＣＰＵ２＿ＲｅａｄをＬレベルに活性化することにより、ロックレジスタ２２からロックビットＬｏｃｋｂｉｔ（読出データビットＲｅａｄＤａｔａｂｉｔ）を読み出す（Ｓ１）。
【００６４】
ＣＰＵ１１又は１２は、読み出したロックビットＬｏｃｋｂｉｔが「０」か否か、つまりロックされているか否かを判断する（Ｓ２）。Ｌｏｃｋｂｉｔ＝１で、ロックされている場合（Ｓ２でＮＯ）、ＣＰＵ１１又は１２は、ロックが解放されるまで（Ｌｏｃｋｂｉｔ＝０になるまで）ロックビットＬｏｃｋｂｉｔの読出を繰り返す（Ｓ１）。この動作をロックビットのポーリングという。
【００６５】
一方、Ｌｏｃｋｂｉｔ＝０で、ロックされていない場合（Ｓ２でＹＥＳ）、ＣＰＵ１１又は１２はロックを獲得し、クリティカルセクションにアクセスして所定の処理を実行する（Ｓ３）。ここで、所定の処理とは、クリティカルセクションからデータを読み出し、そのデータに基づいて所定の演算を行い、その演算結果に基づいてデータを書き換える処理で、その内容は特に限定されない。
【００６６】
クリティカルセクションへのアクセス終了後、ＣＰＵ１１又は１２はロックビットＬｏｃｋｂｉｔを「０」に書き換え、これによりロックを解放する（Ｓ４）。
【００６７】
以上のように本発明の実施の形態によれば、ロックレジスタ２２がプロセッサローカルバス１８ではなくサイドバンドバス２３に接続されているので、ＣＰＵ１１〜１３はロックを獲得したり解放したりする際に、プロセッサローカルバス１８ではなくサイドバンドバス２３経由でロックレジスタ２２にアクセスする。そのため、ＣＰＵ１１〜１３は通常通りプロセッサローカルバス１８経由でシステムメモリ１４や入出力回路１５，１６にアクセスすることができる。したがって、ＣＰＵ１１，１２がロックを獲得できるまで繰り返し読出信号／ＣＰＵ１＿Ｒｅａｄ，／ＣＰＵ２＿Ｒｅａｄを出力したとしても、プロセッサローカルバス１８には全く負荷がかからない。
【００６８】
一般に、プロセッサローカルバス１８はバンド幅を最優先にするので複雑なプロトコルを採用する必要がある。そのため、ロック機能をプロセッサローカルバス１８上に実装したとすると、大規模でかつ高価な回路を必要とする。これに対し、サイドバンドバス２３はプロセッサローカルバス１８に比べて簡単なプロトコルを採用すれば足りるので、サイドバンドバス２３上に実現したハードウエア構成の方がプロセッサローカルバス１８上に実現したハードウエア構成よりも簡単になる。
【００６９】
また、ＣＰＵ１１又は１２がロックを獲得するために読出信号／ＣＰＵ１＿Ｒｅａｄ，／ＣＰＵ２＿Ｒｅａｄを出力すると、ロックレジスタ２２からロックビットＬｏｃｋｂｉｔが読み出されるとともに、直ちにロックレジスタ２２にロック状態「１」のロックビットＬｏｃｋｂｉｔが書き込まれる。そのため、その直後に、別のＣＰＵ１２又は１１が読出信号／ＣＰＵ１＿Ｒｅａｄ，／ＣＰＵ２＿Ｒｅａｄを出力しても、ロックレジスタ２２からロック状態「１」のロックビットＬｏｃｋｂｉｔが読み出される。そのため、別のＣＰＵ１２又は１１はロックを獲得することができない。したがって、ロックビットＬｏｃｋｂｉｔのアトミックリードモディファイライト機能を有する高価なマルチプロセッサシステムと同等の機能をロックレジスタ２２を設けるだけで実現することができる。その結果、安価なハードウエアを採用し、かつソフトウエアの開発費用を最小限に抑えることができる。
【００７０】
以上、本発明の実施の形態を説明したが、上述した実施の形態は本発明を実施するための例示に過ぎない。よって、本発明は上述した実施の形態に限定されることなく、その趣旨を逸脱しない範囲内で上述した実施の形態を適宜変形して実施することが可能である。
【図面の簡単な説明】
【００７１】
【図１】本発明の実施の形態によるマルチプロセッサシステムの全体構成を示す機能ブロック図である。
【図２】図１中のロックレジスタの構成を示す回路図である。
【図３】図２に示したロックレジスタの動作を示すタイミング図である。
【図４】図１に示したマルチプロセッサシステムの動作を示すフロー図である。
【符号の説明】
【００７２】
１０  マルチプロセッサシステム
１１〜１３  ＣＰＵ
１４  システムメモリ
１５，１６  入出力回路
１８  プロセッサローカルバス
２２  ロックレジスタ
２３  サイドバンドバス
３８  フリップフロップ回路
４０  バス識別レジスタ
４１  スイッチ回路
【図１】
2007058493.tif 000003
【図２】
2007058493.tif 000004
【図３】
2007058493.tif 000005
【図４】
2007058493.tif 000006