(57)【要約】【課題】  メモリアクセス速度を向上させる。【解決手段】  キャッシュユニット１１７は、１６バイト幅のライン単位で主記憶装置１３１に対してデータの読み書きを行い、各ラインに含まれる４バイト幅の小領域の単位でＭＰＵ１１３に対してデータの読み書きを行う。ＭＰＵ１１３がｐｕｓｈ命令を実行するときに、ＭＰＵ１１３へ読み出すべきデータを保持する小領域を含むラインにキャッシュミスが発生すると（Ｓ１でＮｏ）、キャッシュユニット１１７は、当該ラインを開放する（Ｓ３０１）。ＭＰＵ１１３から送られるデータを書き込むべき小領域が、アドレスの大きい側、すなわち書き込みの早い側のライン境界に隣接するとき（Ｓ５６でＹｅｓ）には、キャッシュユニット１１７はリフィルを行わず、この小領域がライン境界に隣接しないとき（Ｓ５６でＮｏ）にはリフィルを行う（Ｓ２１）。【選択図】      図２０
2004303232.tif 000002
【特許請求の範囲】
【請求項１】
演算ユニットと当該演算ユニットがアクセスする主記憶装置とに介在させて使用するためのデータメモリキャッシュ装置であって、
データを保持するための複数のデータ領域を有し、前記複数のデータ領域の各々が保持するデータは前記主記憶装置に対して一時に読み書きされ、前記複数のデータ領域の各々は複数の小領域に分割されており、前記複数の小領域の各々が保持するデータは前記演算ユニットに対して一時に読み書きされるデータ保持部と、
前記演算ユニットから、前記主記憶装置の連続したアドレスへのデータの書き込みである連続書き込みの要求があり、且つ前記演算ユニットが出力するアドレスに対応するデータ領域である対象データ領域にキャッシュミスが発生した場合に前記対象データ領域を開放した後に、前記対象データ領域中の前記演算ユニットが出力する前記アドレスに対応する小領域である対象小領域が、アドレスの順序に関して前記連続書き込みの早い方向に位置する前記対象データ領域の境界であるデータ領域境界に隣接する場合には、前記主記憶装置から前記対象データ領域へのデータの読み込みを行わずに前記演算ユニットが出力するデータを前記対象小領域へ書き込み、前記対象小領域が前記データ領域境界に隣接しない場合には、前記主記憶装置から前記対象データ領域へのデータの読み込みを行った上で前記演算ユニットが出力するデータを前記対象小領域へ書き込む制御部とを備えるデータメモリキャッシュ装置。
【請求項２】
前記制御部は、
前記演算ユニットからの前記連続書き込みの要求を検出するプッシュアクセス検出部と、
前記プッシュアクセス検出部が前記連続書き込みの要求を検出した場合に、前記対象データ領域についてキャッシュミスの有無を判定するキャッシュミス判定部と、
前記プッシュアクセス検出部が前記連続書き込みの要求を検出した場合に、前記対象小領域が前記データ領域境界に隣接するか否かを判定する境界判定部と、
前記キャッシュミス判定部が前記キャッシュミスの発生を判定した場合に、前記対象データ領域を開放するデータ領域開放部と、
前記データ領域開放部が前記対象データ領域を開放した場合に、前記境界判定部の判定が否定的であるときには、前記データ領域開放部が開放した前記対象データ領域へ前記主記憶装置からデータを読み込み、前記境界判定部の判定が肯定的であるときには、前記データ領域開放部が開放した前記対象データ領域へ前記主記憶装置からデータを読み込まないリフィル部と、
前記プッシュアクセス検出部が前記連続書き込みの要求を検出した場合に、前記演算ユニットが出力するデータを前記対象小領域に書き込むデータ書き込み部とを備える請求項１記載のデータメモリキャッシュ装置。
【請求項３】
前記データ保持部は、
前記複数のデータ領域の開放又は未開放をそれぞれ示す複数の適正フラグを保持する複数の適正フラグ保持部を更に備え、
前記リフィル部は、前記対象データ領域に対応する適正フラグが開放を示す側に設定されている場合にも、前記境界判定部の判定が否定的であるときには、前記対象データ領域へ前記主記憶装置からデータを読み込み、前記境界判定部の判定が肯定的であるときには、前記対象データ領域へ前記主記憶装置からデータを読み込まない請求項２記載のデータメモリキャッシュ装置。
【請求項４】
前記データ保持部は、
前記複数のデータ領域が連続書き込み又は連続読み出しの何れかに使用されたか否かをそれぞれ示す複数のスタックフラグを保持する複数のスタックフラグ保持部を更に備え、
前記制御部は、
前記境界判定部の判定が肯定的である場合には、前記データ書き込み部が前記データの書き込みを終了した後に、前記対象データ領域に対応するスタックフラグを肯定側に設定し、前記境界判定部の判定が否定的である場合には、前記データ書き込み部が前記データの書き込みを終了した後に、前記対象データ領域に対応するスタックフラグを変更しないスタックフラグ設定部を更に備える請求項２又は３記載のデータメモリキャッシュ装置。
【請求項５】
前記複数のデータ領域は前記主記憶装置のアドレスの中位部分に対応づけられており、前記複数の小領域の各々が前記主記憶装置のアドレスの下位部分に対応づけられており、前記主記憶装置のアドレスの前記中位部分の同一の値に１以上のデータ領域が対応しており、
前記データ保持部は、
前記複数のデータ領域が保持するデータのアドレスの上位部分をそれぞれ示す複数のタグを保持する複数のタグ保持部を更に備え、
前記制御部は、
前記演算ユニットが出力するアドレスから前記上位部分と前記中位部分と前記下位側部分とを抽出するアドレス抽出部を更に備え、
前記キャッシュミス判定部は、前記アドレス抽出部が抽出した前記中位部分に対応する前記１以上のデータ領域の各々に対応づけられたタグが示す値と前記アドレス抽出部が抽出した前記上位部分とを比較し、何れも一致しない場合に前記キャッシュミスが発生したと判定し、
前記境界判定部は、前記複数の小領域のうち前記アドレス抽出部が抽出した前記下位部分に対応する小領域が、アドレスの順序に関して当該小領域が属するデータ領域の前記連続書き込みの早い方向に位置する境界に隣接するか否かを判定することにより、前記対象小領域が前記データ領域境界に隣接するか否かを判定し、
前記データ領域開放部は、前記プッシュアクセス検出部が前記連続書き込みの要求を検出し、且つ前記キャッシュミス判定部が前記キャッシュミスの発生を判定した場合に、前記アドレス抽出部が抽出した前記中位部分に対応する前記１以上のデータ領域の何れかを開放することにより前記対象データ領域を開放し、
前記制御部は、
前記データ領域開放部が開放した前記データ領域に対応づけられたタグを、前記アドレス抽出部が抽出した前記上位部分に更新するタグ更新部を更に備え、
前記データ書き込み部は、前記アドレス抽出部が抽出した前記中位部分に対応し且つ前記アドレス抽出部が抽出した前記上位部分を保持するタグに対応づけられたデータ領域中の前記アドレス抽出部が抽出した前記下位部分に対応する小領域を前記対象小領域として、当該対象小領域へ前記演算ユニットが出力するデータを書き込む請求項２乃至４の何れかに記載のデータメモリキャッシュ装置。
【請求項６】
演算ユニットと当該演算ユニットがアクセスする主記憶装置とに介在させて使用するためのデータメモリキャッシュ装置であって、
前記主記憶装置のアドレスと対応づけられ、対応するアドレスのデータを保持するための複数のデータ領域を備えるデータ保持部と、
前記主記憶装置の連続したアドレスから前記演算ユニットへのデータの読み出しである連続読み出しを行う場合に、前記データ保持部のうち前記連続読み出しが終了しているデータ領域を、前記連続読み出しが終了しているデータ領域が保持するデータを前記主記憶装置へ書き戻すことなく開放する制御部とを備えるデータメモリキャッシュ装置。
【請求項７】
前記複数のデータ領域の各々が保持するデータは前記主記憶装置に対して一時に読み書きされ、前記複数のデータ領域の各々は複数の小領域に分割されており、前記複数の小領域の各々が保持するデータは前記演算ユニットに対して一時に読み書きされ、
前記制御部は、前記演算ユニットから、前記主記憶装置の連続したアドレスからのデータの読み出しである連続読み出しの要求があった場合に、前記演算ユニットが出力するアドレスに対応するデータ領域である対象データ領域中の前記演算ユニットが出力する前記アドレスに対応する小領域である対象小領域から前記演算ユニットへのデータの読み出しを行うとともに、前記対象小領域が、アドレスの順序に関して前記連続読み出しの遅い方向に位置する前記対象データ領域の境界であるデータ領域境界に隣接する場合には、前記対象データ領域から前記主記憶装置へのデータの書き戻しを行うことなく前記対象データ領域を開放し、前記対象小領域が前記データ領域境界に隣接しない場合には、前記対象データ領域を開放しない請求項６記載のデータメモリキャッシュ装置。
【請求項８】
前記データ保持部は、
前記複数のデータ領域の開放又は未開放をそれぞれ示す複数の適正フラグを保持する複数の適正フラグ保持部を更に備え、
前記制御部は、前記対象データ領域に対応づけられた適正フラグを、開放を示す側に設定することにより、前記対象データ領域を開放する請求項７記載のデータメモリキャッシュ装置。
【請求項９】
前記制御部は、
前記演算ユニットからの前記連続読み出しの要求を検出するポップアクセス検出部と、
前記ポップアクセス検出部が前記連続読み出しの要求を検出した場合に、前記対象小領域が前記データ領域境界に隣接するか否かを判定する境界判定部と、
前記ポップアクセス検出部が前記連続読み出しの要求を検出した場合に、前記対象小領域のデータを前記演算ユニットへ読み出すデータ読み出し部と、
前記境界判定部の判定が肯定的であるときには、前記データ読み出し部による前記データの読み出し後に、前記対象データ領域から前記主記憶装置へのデータの書き戻しを行うことなく前記対象データ領域に対応づけられた前記適正フラグを、開放を示す側に設定し、前記対象小領域が前記データ領域境界に隣接しない場合には、前記対象データ領域に対応づけられた前記適正フラグを変更しない適正フラグ設定部とを備える請求項８記載のデータメモリキャッシュ装置。
【請求項１０】
演算ユニットと当該演算ユニットがアクセスする主記憶装置とに介在させて使用するためのデータメモリキャッシュ装置であって、
データを保持するための複数のデータ領域を有し、前記複数のデータ領域の各々が保持するデータは前記主記憶装置に対して一時に読み書きされ、前記複数のデータ領域の各々は複数の小領域に分割されており、前記複数の小領域の各々が保持するデータは前記演算ユニットに対して一時に読み書きされるデータ保持部と、
前記演算ユニットから、前記主記憶装置の連続したアドレスからのデータの読み出しである連続読み出しの要求があった場合に、前記演算ユニットが出力するアドレスに対応するデータ領域である対象データ領域中の前記演算ユニットが出力する前記アドレスに対応する小領域である対象小領域から前記演算ユニットへのデータの読み出しを行うとともに、前記対象小領域が、アドレスの順序に関して前記連続読み出しの遅い方向に位置する前記対象データ領域の境界であるデータ領域境界に隣接する場合には、その後前記対象データ領域を開放する時に前記対象データ領域から前記主記憶装置へのデータの書き戻しを禁止するための設定を行い、前記対象小領域が前記データ領域境界に隣接しない場合には、前記設定を行わない制御部とを備えるデータメモリキャッシュ装置。
【請求項１１】
前記データ保持部は、
前記複数のデータ領域が保持するデータと前記主記憶装置が対応するアドレスに保持するデータとの間の一致及び不一致をそれぞれ示す複数のダーティフラグを保持する複数のダーティフラグ保持部を更に備え、
前記制御部は、前記対象データ領域に対応するダーティフラグを前記一致を示す側に設定することにより前記設定を行う請求項１０記載のデータメモリキャッシュ装置。
【請求項１２】
前記制御部は、
前記演算ユニットからの前記連続読み出しの要求を検出するポップアクセス検出部と、
前記ポップアクセス検出部が前記連続読み出しの要求を検出した場合に、前記対象小領域が前記データ領域境界に隣接するか否かを判定する境界判定部と、
前記ポップアクセス検出部が前記連続読み出しの要求を検出した場合に、前記対象小領域のデータを前記演算ユニットへ読み出すデータ読み出し部と、
前記境界判定部の判定が肯定的であるときには、前記データ読み出し部による前記データの読み出し後に、前記対象データ領域に対応する前記ダーティフラグを前記一致を示す側に設定し、前記データ領域境界判定部の判定が否定的であるときには、前記対象データ領域に対応する前記ダーティフラグを変更しないダーティフラグ設定部とを備える請求項１１記載のデータメモリキャッシュ装置。
【請求項１３】
前記データ保持部は、
前記複数のデータ領域が連続書き込み又は連続読み出しの何れかに使用されたか否かをそれぞれ示す複数のスタックフラグを保持する複数のスタックフラグ保持部を更に備え、
前記制御部は、
前記境界判定部の判定が肯定的である場合には、前記データ読み出し部が前記データの読み出しを終了した後に、前記対象データ領域に対応するスタックフラグを肯定側に設定し、前記境界判定部の判定が否定的である場合には、前記データ読み出し部が前記データの読み出しを終了した後に、前記対象データ領域に対応するスタックフラグを変更しないスタックフラグ設定部を更に備える請求項９又は１２記載のデータメモリキャッシュ装置。
【請求項１４】
前記複数のデータ領域は前記主記憶装置のアドレスの中位部分に対応づけられており、前記複数の小領域の各々が前記主記憶装置のアドレスの下位部分に対応づけられており、前記主記憶装置のアドレスの前記中位部分の同一の値に１以上のデータ領域が対応しており、
前記データ保持部は、
前記複数のデータ領域が保持するデータのアドレスの上位部分をそれぞれ示す複数のタグを保持する複数のタグ保持部を更に備え、
前記制御部は、
前記演算ユニットが出力するアドレスから前記上位部分と前記中位部分と前記下位部分とを抽出するアドレス抽出部を更に備え、
前記境界判定部は、前記複数の小領域のうち前記アドレス抽出部が抽出した前記下位部分に対応する小領域が、アドレスの順序に関して当該小領域が属するデータ領域の前記連続読み出しの遅い方向に位置する境界に隣接するか否かを判定することにより、前記対象小領域が前記データ領域境界に隣接するか否かを判定し、
前記データ読み出し部は、前記アドレス抽出部が抽出した前記中位部分に対応し且つ前記アドレス抽出部が抽出した前記上位部分を示すタグに対応づけられたデータ領域中の前記アドレス抽出部が抽出した前記下位部分に対応する小領域を前記対象小領域として、当該対象小領域のデータを前記演算ユニットへ読み出す請求項９、１２又は１３記載のデータメモリキャッシュ装置。
【請求項１５】
演算ユニットと当該演算ユニットがアクセスする主記憶装置とに介在させて使用するためのデータメモリキャッシュ装置であって、
前記主記憶装置のアドレスと対応づけられ、対応するアドレスのデータを保持するための複数のデータ領域を備えるデータ保持部と、
前記演算ユニットから、前記主記憶装置の連続したアドレスへのデータの書き込みである連続書き込みを実行する期間であって、且つ前記データ保持部と前記主記憶装置との間でデータを転送するためのデータバスが不使用である期間に、アドレスの順序に関して現在行っている連続書き込みよりも連続書き込みの早い方向に位置する前記データ保持部中のデータ領域から前記主記憶装置へのデータの書き戻しを行う制御部とを備えるデータメモリキャッシュ装置。
【請求項１６】
前記制御部は、
前記演算ユニットからの前記連続書き込みの要求を検出するプッシュアクセス検出部と、
前記プッシュアクセス検出部が前記連続書き込みの要求を検出した場合に、前記演算ユニットが出力するアドレスから前記連続書き込みの早い方向へ所定間隔をもってずれたアドレスであるオフセットアドレスを算出するオフセット算出部と、
前記オフセットアドレスについてキャッシュミスの有無を判定するキャッシュミス判定部と、
前記データバスが使用中であるか否かを判定する転送ビジー判定部と、
前記キャッシュミス判定部が前記キャッシュミス無しと判定し、且つ前記転送ビジー判定部が前記データバスの不使用を判定した場合に、前記オフセットアドレスに対応するデータ領域から前記主記憶装置へのデータの書き戻しを行うライトバック部とを備える請求項１５記載のデータメモリキャッシュ装置。
【請求項１７】
前記複数のデータ領域は、前記主記憶装置のアドレスの中位部分に対応づけられており、且つ前記中位部分の同一の値に１以上のデータ領域が対応しており、
前記複数のデータ領域の各々は、前記アドレスの下位部分に対応づけられた複数の小領域に分割されており、
前記複数のデータ領域の各々が保持するデータは前記主記憶装置に対して一時に読み書きされ、前記複数の小領域の各々が保持するデータは前記演算ユニットに対して一時に読み書きされ、
前記データ保持部は、
前記複数のデータ領域が保持するデータのアドレスの上位部分をそれぞれ示す複数のタグを保持する複数のタグ保持部を更に備え、
前記制御部は、
前記演算ユニットが出力するアドレスから前記上位部分と前記中位部分と前記下位部分とを抽出するアドレス抽出部を更に備え、
前記オフセット算出部は、前記プッシュアクセス検出部が前記連続書き込みの要求を検出した場合に、前記アドレス抽出部が抽出した前記中位部分と前記上位部分とで表されるアドレスから前記連続書き込みの早い方向へ定められた間隔をもってずれたアドレスを、前記オフセットアドレスとして算出し、
前記キャッシュミス判定部は、前記オフセットアドレスの前記中位部分に対応する前記１以上のデータ領域の各々に対応づけられたタグが示す値と前記オフセットアドレスの前記上位部分とを比較し、何れも一致しない場合にキャッシュミスが発生したと判定する請求項１６記載のデータメモリキャッシュ装置。
【請求項１８】
演算ユニットと当該演算ユニットがアクセスする主記憶装置とに介在させて使用するためのデータメモリキャッシュ装置であって、
前記主記憶装置のアドレスと対応づけられ、対応するアドレスのデータを保持するための複数のデータ領域を備えるデータ保持部と、
前記主記憶装置の連続したアドレスから前記演算ユニットへのデータの読み出しである連続読み出しを実行する期間であって、且つ前記データ保持部と前記主記憶装置との間でデータを転送するためのデータバスが不使用である期間に、アドレスの順序に関して現在行っている連続読み出しよりも連続読み出しの早い方向に位置する前記データ保持部中のデータ領域から前記主記憶装置へデータの書き戻しを行う制御部とを備えるデータメモリキャッシュ装置。
【請求項１９】
前記制御部は、
前記演算ユニットからの前記連続読み出しの要求を検出するポップアクセス検出部と、
前記ポップアクセス検出部が前記連続読み出しの要求を検出した場合に、前記演算ユニットが出力するアドレスから前記連続読み出しの早い方向へ所定間隔をもってずれたアドレスであるオフセットアドレスを算出するオフセット算出部と、
前記オフセットアドレスについてキャッシュミスの有無を判定するキャッシュミス判定部と、
前記データバスが使用中であるか否かを判定する転送ビジー判定部と、
前記キャッシュミス判定部が前記キャッシュミス無しと判定し、且つ前記転送ビジー判定部が前記データバスの不使用を判定した場合に、前記オフセットアドレスに対応するデータ領域から前記主記憶装置へのデータの書き戻しを行うライトバック部とを備える請求項１８記載のデータメモリキャッシュ装置。
【請求項２０】
前記複数のデータ領域は、前記主記憶装置のアドレスの中位部分に対応づけられており、且つ前記中位部分の同一の値に１以上のデータ領域が対応しており、
前記複数のデータ領域の各々は、前記アドレスの下位部分に対応づけられた複数の小領域に分割されており、
前記複数のデータ領域の各々が保持するデータは前記主記憶装置に対して一時に読み書きされ、前記複数の小領域の各々が保持するデータは前記演算ユニットに対して一時に読み書きされ、
前記データ保持部は、
前記複数のデータ領域が保持するデータのアドレスの上位部分をそれぞれ示す複数のタグを保持する複数のタグ保持部を更に備え、
前記制御部は、
前記演算ユニットが出力するアドレスから前記上位部分と前記中位部分と前記下位部分とを抽出するアドレス抽出部を更に備え、
前記オフセット算出部は、前記ポップアクセス検出部が前記連続読み出しの要求を検出した場合に、前記アドレス抽出部が抽出した前記中位部分と前記上位部分とで表されるアドレスから前記連続読み出しの早い方向へ定められた間隔をもってずれたアドレスを、前記オフセットアドレスとして算出し、
前記キャッシュミス判定部は、前記オフセットアドレスの前記中位部分に対応する前記１以上のデータ領域の各々に対応づけられたタグが示す値と前記オフセットアドレスの前記上位部分とを比較し、何れも一致しない場合にキャッシュミスが発生したと判定する請求項１９記載のデータメモリキャッシュ装置。
【請求項２１】
前記データ保持部は、
前記複数のデータ領域が連続書き込み又は連続読み出しの何れかに使用されたか否かをそれぞれ示す複数のスタックフラグを保持する複数のスタックフラグ保持部を更に備え、
前記ライトバック部は、前記キャッシュミス判定部が前記キャッシュミス無しと判定し、且つ前記転送ビジー判定部が前記データバスの不使用を判定した場合に、更に前記オフセットアドレスに対応するデータ領域に対応する前記スタックフラグが肯定側に設定されているときに限り、前記オフセットアドレスに対応するデータ領域から前記主記憶装置へのデータの書き戻しを行う請求項１６、１７、１９又は２０記載のデータメモリキャッシュ装置。
【請求項２２】
前記データ保持部は、
前記複数のデータ領域の開放又は未開放をそれぞれ示す複数の適正フラグを保持する複数の適正フラグ保持部を更に備え、
前記ライトバック部は、前記キャッシュミス判定部が前記キャッシュミス無しと判定し、且つ前記転送ビジー判定部が前記データバスの不使用を判定した場合に、更に前記オフセットアドレスに対応するデータ領域に対応する前記適正フラグが未開放を示す側に設定されているときに限り、前記オフセットアドレスに対応するデータ領域から前記主記憶装置へのデータの書き戻しを行う請求項１６、１７、１９、２０又は２１記載のデータメモリキャッシュ装置。
【請求項２３】
演算ユニットと当該演算ユニットがアクセスする主記憶装置とに介在させて使用するためのデータメモリキャッシュ装置であって、
前記主記憶装置のアドレスと対応づけられ、対応するアドレスのデータを保持するための複数のデータ領域を備えるデータ保持部と、
前記主記憶装置の連続したアドレスから前記演算ユニットへのデータの読み出しである連続読み出しを実行する期間であって、且つ前記データ保持部と前記主記憶装置との間でデータを転送するためのデータバスが不使用である期間に、アドレスの順序に関して現在行っている連続読み出しよりも連続読み出しの遅い方向に位置する前記データ保持部中のデータ領域へ前記主記憶装置からデータの読み込みを行う制御部とを備えるデータメモリキャッシュ装置。
【請求項２４】
前記制御部は、
前記演算ユニットからの前記連続読み出しの要求を検出するポップアクセス検出部と、
前記ポップアクセス検出部が前記連続読み出しの要求を検出した場合に、前記演算ユニットが出力するアドレスから前記連続読み出しの遅い方向へ所定間隔をもってずれたアドレスであるオフセットアドレスを算出するオフセット算出部と、
前記データバスが使用中であるか否かを判定する転送ビジー判定部と、
前記転送ビジー判定部が前記データバスの不使用を判定した場合に、前記オフセットアドレスに対応するデータ領域へ前記主記憶装置からデータの読み込みを行うリフィル部とを備える請求項２３記載のデータメモリキャッシュ装置。
【請求項２５】
前記データ保持部は、
前記複数のデータ領域が連続書き込み又は連続読み出しの何れかに使用されたか否かをそれぞれ示す複数のスタックフラグを保持する複数のスタックフラグ保持部を更に備え、
前記リフィル部は、前記転送ビジー判定部が前記データバスの不使用を判定した場合に、前記オフセットアドレスに対応するデータ領域に対応する前記スタックフラグが肯定的に設定されているときに限り、前記オフセットアドレスに対応するデータ領域へ前記主記憶装置からデータの読み込みを行う請求項２４記載のデータメモリキャッシュ装置。
【請求項２６】
前記データ保持部は、
前記複数のデータ領域の開放又は未開放をそれぞれ示す複数の適正フラグを保持する複数の適正フラグ保持部を更に備え、
前記リフィル部は、前記転送ビジー判定部が前記データバスの不使用を判定した場合に、前記オフセットアドレスに対応するデータ領域に対応する前記適正フラグが開放を示す側に設定されているときに限り、前記オフセットアドレスに対応するデータ領域へ前記主記憶装置からデータの読み込みを行う請求項２４又は２５記載のデータメモリキャッシュ装置。
【請求項２７】
前記複数のデータ領域は、前記主記憶装置のアドレスの中位部分に対応づけられており、且つ前記中位部分の同一の値に１以上のデータ領域が対応しており、
前記複数のデータ領域の各々は、前記アドレスの下位部分に対応づけられた複数の小領域に分割されており、
前記複数のデータ領域の各々が保持するデータは前記主記憶装置に対して一時に読み書きされ、前記複数の小領域の各々が保持するデータは前記演算ユニットに対して一時に読み書きされ、
前記データ保持部は、
前記複数のデータ領域が保持するデータのアドレスの上位部分をそれぞれ示す複数のタグを保持する複数のタグ保持部を更に備え、
前記制御部は、
前記演算ユニットが出力するアドレスから前記上位部分と前記中位部分と前記下位部分とを抽出するアドレス抽出部を更に備え、
前記オフセット算出部は、前記ポップアクセス検出部が前記連続読み出しの要求を検出した場合に、前記アドレス抽出部が抽出した前記中位部分と前記上位部分とで表されるアドレスから前記連続読み出しの遅い方向へ定められた間隔をもってずれたアドレスを、前記オフセットアドレスとして算出する請求項２４乃至２６の何れかに記載のデータメモリキャッシュ装置。
【請求項２８】
前記制御部は、
前記オフセットアドレスの前記中位部分に対応する前記１以上のデータ領域の各々に対応づけられたタグが示す値と前記オフセットアドレスの前記上位部分とを比較し、何れも一致しない場合に、前記オフセットアドレスについてキャッシュミスが発生したと判定するキャッシュミス判定部と、
前記キャッシュミス検出部が前記キャッシュミスの発生を判定した場合に、前記オフセットアドレスの前記中位部分に対応する前記１以上のデータ領域の何れかを開放するデータ領域開放部と、
前記データ領域開放部が開放した前記データ領域に対応づけられたタグを、前記オフセットアドレスの前記上位部分に更新するタグ更新部とを更に備える請求項２７記載のデータメモリキャッシュ装置。
【請求項２９】
請求項１乃至２８の何れかに記載のデータメモリキャッシュ装置と、
前記データメモリキャッシュ装置に接続された演算ユニットと、
前記データメモリキャッシュ装置に接続され前記演算ユニットによってアクセスされる主記憶装置とを備えるデータメモリキャッシュシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本特許出願に係る発明（以後単に「本発明」とも言う）は、ＣＰＵが主記憶装置をアクセスする時、主記憶装置のアクセス速度が遅いことによるオーバーヘッドを回避し、パフォーマンスを向上させることを目的とするメモリキャッシュ（キャッシュメモリとも言う）装置及びシステムに関するものである。
【０００２】
本発明は、特に、データを記憶するデータメモリのキャッシュに関するものであり、更にいわゆるスタックメモリ、即ち、プッシュ・ポップ（ｐｕｓｈ・ｐｏｐ）命令によってアドレスが連続的にアクセス（データの読み込みや書き込み）されるデータメモリのキャッシュに関するものである。
【背景技術】
【０００３】
従来の、プッシュ・ポップ命令に必要な時間を減少させ、キャッシュ内にプッシュ・ポップ後の不要なデータを保持しないようにするための、スタックキャッシュの制御方式及びスタックキャッシュには、例えば、主記憶装置上のデータ構造として最後に入力したデータが最初に出力されるスタック構造をサポートし、スタックへのデータ入力をプッシュ、前記スタックからのデータ出力をポップとして、他のデータ書込み／読出しと区別してデータ処理を行うマイクロコンピュータを備えたマイクロコンピュータシステムにおいて、前記マイクロコンピュータがプッシュするとき前記主記憶装置に代わって該当アドレスとデータの組を保持し、前記主記憶装置にプッシュされていない保持データを前記マイクロコンピュータが外部にアクセスしていない時を見計らって上記主記憶装置にプッシュし、前記マイクロコンピュータがポップするとき該当データを保持していれば前記主記憶装置に代わって該当データを前記マイクロコンピュータに出力し、前記マイクロコンピュータのポップで不要になったデータを後にポップされる可能性のあるスタック底部のデータに置き換えるため、前記マイクロコンピュータが外部にアクセスしていない時を見計らって前記主記憶装置からポップすることを特徴とするスタックキャッシュの制御方式があった（例えば、特許文献１参照。）。
【特許文献１】特開平５−１４３３３０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかしながら前記従来のスタックキャッシュシステム及びスタックキャッシュ制御方法では、通常のデータメモリに対するランダムアクセスを前提としたメモリアクセス高速化手法と何等変わることなく、スタックメモリと言う規則性のあるアクセスの特徴を生かすことができず、高速化を図る上で問題があった。
【０００５】
このことは特に近年ユビキタスコンピューティング等のためにニーズが増大しているＪａｖａ（登録商標）システム等、スタックアクセスの比重が大きいメモリシステムでは特に大きな問題となる。具体的な問題点を次に説明する。
【０００６】
（第１の問題点）
例えばスタックに対するデータプッシュが、主記憶装置上のメモリアドレスの増加方向に行われたと仮定し、更にこのスタックがキャッシュメモリにキャッシュされていたと仮定する。そしてあるデータＡのプッシュによってキャッシュミスが発生したと仮定する。この条件下では、キャッシュミスが発生したメモリアドレスから１キャッシュ単位分の新しいデータメモリの内容が、主記憶装置からキャッシュメモリに読み込まれる。
【０００７】
この状態を図３５に示す。図３５はアドレス９０のメモリ領域にスタックポインタ９１３があり、このアドレス９０のメモリ領域にデータＡがプッシュされた状態を示している。この時、図３５に示すようにデータＡのプッシュによってスタックポインタ９１３がアドレス８９のメモリ領域からアドレス９０のメモリ領域に移動する。
【０００８】
そして更に同じ図３５に示すようにアドレス９０、９１、９２、９３のメモリ領域が１つのキャッシュ単位であり、この１つのキャッシュ単位のアドレス９０のメモリ領域が始めてアクセスされたので、このアドレス９０、９１、９２、９３のメモリ領域からなる１キャッシュ単位が、主記憶装置からキャッシュメモリに読み込まれる。
【０００９】
しかしながらこのキャッシュメモリに読み込まれた１キャッシュ単位分の新しいデータメモリの内容は、スタックアクセスの規則性に従う限り、続けて行われるデータプッシュによって上書きされる内容であり、決して読み出されることのないデータである。そしてこのように決して読み出されることのないデータを、主記憶装置からキャッシュメモリに読み込むことは、高速化を図る上での弊害となっていた。
【００１０】
（第２の問題点）
上記とは逆に、スタックに対するデータポップが、主記憶装置上のメモリアドレスの減少方向に行われたと仮定し、更にこのスタックがキャッシュメモリにキャッシュされていたと仮定する。そしてあるデータＢのポップによってキャッシュミスが発生したと仮定する。この条件下では、キャッシュミスが発生したメモリアドレスよりも大きなメモリアドレスから１キャッシュ単位分のデータメモリの内容が、キャッシュメモリから主記憶装置にライトバックされる。
【００１１】
この状態を図３６に示す。図３６に示すようにデータＢのポップによってスタックポインタ９２３がアドレス９０のメモリ領域からアドレス８９のメモリ領域に移動する。そして更に同じ図３６に示すようにアドレス９０、９１、９２、９３のメモリ領域が１つのキャッシュ単位であり、この１つのキャッシュ単位以外のアドレス８９のメモリ領域にスタックポインタが移動したので、このアドレス９０、９１、９２、９３のメモリ領域からなる１キャッシュ単位が、キャッシュメモリから主記憶装置にライトバックされ、キャッシュメモリが開放される。
【００１２】
しかしながらこの主記憶装置にライトバックされた１キャッシュ単位分のデータメモリの内容は、スタックアクセスの規則性に従う限り、既に行われたデータポップによって読み出された内容であり、決して再び読み出されることは有り得ない。そしてこのように決して読み出されることないデータを、キャッシュメモリから主記憶装置にライトバックすることは、高速化を図る上での弊害となっていた。
【００１３】
（第３の問題点）
また、スタックに対するデータプッシュが、主記憶装置上のメモリアドレスの増加方向に行われたと仮定し、更にこのスタックがキャッシュメモリにキャッシュされていたと仮定する。そしてあるデータＣ、Ｄ、・・、Ｅのプッシュが連続して実行されたと仮定する。この条件下では、現在スタックに対してプッシュ・ポップを行う領域であるスタックポインタの示すアドレスよりも低いアドレスのメモリ領域に多くのスタックプッシュされたデータ、今の例ではＣやＤが記憶されており、この低いアドレスのメモリ領域に記憶されたデータは、暫くの間、ポップによって読み出される可能性は非常に低い。
【００１４】
この状態を図３７に示す。図３７はアドレス１９４のメモリ領域にスタックポインタ９３３があり、遥か下の例えばアドレス８０のメモリ領域からこのアドレス１９４のメモリ領域まで、連続してＣ、Ｄ、・・、Ｅのデータがプッシュされた状態を示している。この時図３７に示すように、通常ならばアドレス８０からアドレス８３までの１つのキャッシュ単位はキャッシュメモリがフルにならない限りキャッシュメモリ領域を占めたままであり、主記憶装置にライトバックされることはない。そしてキャッシュメモリがフルになった時に始めて、主記憶装置にライトバックされ、キャッシュメモリを他のメモリ領域のために明け渡すことになる。
【００１５】
このようにキャッシュメモリがゼロになり、新しいキャッシュメモリ領域に対する要求が発生してからライトバックを行うことは、高速化を図る上での弊害となっていた。
【００１６】
例えば図３７に示すように、現在のスタックポインタ９３３の位置であるアドレス１９４のメモリ領域よりも遥かに下のメモリ領域、例えばアドレス８０〜８３のメモリ領域は当分の間、ポップによって読み出される可能性は非常に低い。そこで、特許文献１に開示される従来技術とは異なり、例えばアドレス８０〜８３のメモリ領域である１つのキャッシュ単位のキャッシュメモリの内容を、予め主記憶装置にライトバックしておくことを、解決手段として想定することができる。それにより、キャッシュメモリの余裕がなくなった段階で慌ててキャッシュメモリの内容を主記憶装置に書き込み、キャッシュメモリに空き領域を作るよりも、メモリアクセス速度が向上することが期待される。
【００１７】
（第４の問題点）
更にまた、スタックに対するデータポップが、主記憶装置上のメモリアドレスの減少方向に行われたと仮定し、更にこのスタックがキャッシュメモリにキャッシュされていたと仮定する。そしてあるデータＦ、Ｇ、・・、Ｈのポップが連続して実行されたと仮定する。この条件下では、現在スタックに対してプッシュ・ポップを行う領域であるスタックポインタの示すアドレスよりも低い値のアドレス領域、例えば今の例ではアドレス８４〜８７のメモリ領域にスタックプッシュされているデータは、すぐに続けてポップによって読み出される可能性が非常に高い。
【００１８】
この状態を図３８に示す。図３８はアドレス９１のメモリ領域にスタックポインタ９４３があり、遥か上の例えばアドレス１９６のメモリ領域からこのアドレス９１のメモリ領域まで、連続してＦ、Ｇ、・・、Ｈのデータがポップされた状態を示している。この時図３８に示すように、通常ならばアドレス８４からアドレス８７までの１つのキャッシュ単位はこの領域に属する１つのメモリ、例えばアドレス８７のメモリ領域がポップの実行によってアクセスされない限り主記憶装置からキャッシュメモリ領域に読み込まれることはない。そして例えばこのアドレス８７のメモリ領域がポップの実行によってアクセスされた時に始めて、主記憶装置からキャッシュメモリ上に読み出されることになる。
【００１９】
このように新しい１つのキャッシュメモリ単位に属する領域が始めてアクセスされ、新しい１つのキャッシュメモリ領域に対するデータの要求が発生した後に、主記憶装置からキャッシュメモリ領域にデータの読み込みを行うことは、高速化を図る上での弊害となっていた。
【００２０】
例えば図３８に示すように、現在のスタックポインタ９４３の位置であるアドレス９１のメモリ領域のすぐ下のメモリ領域、例えばアドレス８４〜８７のメモリ領域を占める１つのキャッシュ単位は、すぐに続けてポップによって読み出される可能性が非常に高い。そこで、特許文献１に開示される従来技術とは異なり、例えばこのようなアドレス８４〜８７のメモリ領域である１つのキャッシュ単位のデータを、予め主記憶装置からキャッシュメモリに読み込んでおくことを、解決手段として想定することができる。それにより、キャッシュメモリ上にないメモリ領域に対するアクセスが行われた段階で慌てて主記憶装置の内容をキャッシュメモリに読み込むよりも、メモリアクセス速度が向上することが期待される。
【００２１】
本発明は上記の問題点に鑑みてなされたもので、メモリアクセス速度を向上させるデータメモリキャッシュ装置及びデータメモリキャッシュシステムを提供することを目的とする。
【課題を解決するための手段】
【００２２】
前記課題を解決するため、請求項１に記載の発明は、演算ユニットと当該演算ユニットがアクセスする主記憶装置とに介在させて使用するためのデータメモリキャッシュ装置であって、データを保持するための複数のデータ領域を有し、前記複数のデータ領域の各々が保持するデータは前記主記憶装置に対して一時に読み書きされ、前記複数のデータ領域の各々は複数の小領域に分割されており、前記複数の小領域の各々が保持するデータは前記演算ユニットに対して一時に読み書きされるデータ保持部と、前記演算ユニットから、前記主記憶装置の連続したアドレスへのデータの書き込みである連続書き込みの要求があり、且つ前記演算ユニットが出力するアドレスに対応するデータ領域である対象データ領域にキャッシュミスが発生した場合に前記対象データ領域を開放した後に、前記対象データ領域中の前記演算ユニットが出力する前記アドレスに対応する小領域である対象小領域が、アドレスの順序に関して前記連続書き込みの早い方向に位置する前記対象データ領域の境界であるデータ領域境界に隣接する場合には、前記主記憶装置から前記対象データ領域へのデータの読み込みを行わずに前記演算ユニットが出力するデータを前記対象小領域へ書き込み、前記対象小領域が前記データ領域境界に隣接しない場合には、前記主記憶装置から前記対象データ領域へのデータの読み込みを行った上で前記演算ユニットが出力するデータを前記対象小領域へ書き込む制御部とを備えるものである。
【００２３】
請求項１に記載の発明によれば、制御部は、演算ユニットからの連続したアドレスへの連続書き込み時にキャッシュミスが発生した時、書き込みを行うべきデータ領域に対して、当該データ領域の開放後に主記憶装置からの無用なデータの読み込みを行わないので、メモリアクセス速度が向上する。更に、制御部は、書き込みを行うべき小領域がデータ領域境界に隣接するか否かに応じて、開放後のデータ領域にデータの読み込みを略するか否かを選択している。すなわち、制御部は、書き込みを行うべき小領域がデータ領域境界にない場合にキャッシュミスが生じたときには、開放後のデータ領域に主記憶装置からのデータの読み込みを行う。このため、演算ユニットは連続書き込みを、データ領域境界に隣接する小領域に対応するアドレスだけでなく、データ領域境界に隣接しない小領域に対応するアドレスからも開始することができる。
【００２４】
請求項２に記載の発明は、請求項１記載のデータメモリキャッシュ装置であって、前記制御部は、前記演算ユニットからの前記連続書き込みの要求を検出するプッシュアクセス検出部と、前記プッシュアクセス検出部が前記連続書き込みの要求を検出した場合に、前記対象データ領域についてキャッシュミスの有無を判定するキャッシュミス判定部と、前記プッシュアクセス検出部が前記連続書き込みの要求を検出した場合に、前記対象小領域が前記データ領域境界に隣接するか否かを判定する境界判定部と、前記キャッシュミス判定部が前記キャッシュミスの発生を判定した場合に、前記対象データ領域を開放するデータ領域開放部と、前記データ領域開放部が前記対象データ領域を開放した場合に、前記境界判定部の判定が否定的であるときには、前記データ領域開放部が開放した前記対象データ領域へ前記主記憶装置からデータを読み込み、前記境界判定部の判定が肯定的であるときには、前記データ領域開放部が開放した前記対象データ領域へ前記主記憶装置からデータを読み込まないリフィル部と、前記プッシュアクセス検出部が前記連続書き込みの要求を検出した場合に、前記演算ユニットが出力するデータを前記対象小領域に書き込むデータ書き込み部とを備えるものである。
【００２５】
請求項２に記載の発明によれば、プッシュアクセス検出部が連続書き込みの要求を検出し、キャッシュミス判定部が対象データ領域についてキャッシュミスの有無を判定し、境界判定部が、対象小領域がデータ領域境界に隣接するか否かを判定し、データ領域開放部が、キャッシュミス判定部の判定に応じて対象データ領域を開放し、リフィル部が、境界判定部の判定に応じて、開放された対象データ領域へのデータの読み込みを行い、データ書き込み部が対象小領域に演算ユニットからのデータを書き込む。このため、制御部は、データの書き込みを行うべき小領域がデータ領域境界に隣接するか否かに応じて開放後のデータ領域にデータの読み込みを略する処理を、容易に実現し得る。
【００２６】
請求項３に記載の発明は、請求項２記載のデータメモリキャッシュ装置であって、前記データ保持部は、前記複数のデータ領域の開放又は未開放をそれぞれ示す複数の適正フラグを保持する複数の適正フラグ保持部を更に備え、前記リフィル部は、前記対象データ領域に対応する適正フラグが開放を示す側に設定されている場合にも、前記境界判定部の判定が否定的であるときには、前記対象データ領域へ前記主記憶装置からデータを読み込み、前記境界判定部の判定が肯定的であるときには、前記対象データ領域へ前記主記憶装置からデータを読み込まないものである。
【００２７】
請求項３に記載の発明によれば、データ保持部が適正フラグ保持部を備え、リフィル部が、対象データ領域が開放された場合だけでなく、対象データ領域に対応する適正フラグが対象データ領域の開放を示す場合にも、対象小領域の位置に応じて、主記憶装置から対象データ領域へのデータの読み込みを行うか否かを選択する。このため、対象データ領域が開放されている場合にも、無用な読み込みが回避され、それによってメモリアクセス速度が更に向上する。またリフィル部は、対象小領域がデータ領域境界に隣接しないときには、主記憶装置から対象データ領域へのデータの読み込みを行うので、演算ユニットは連続書き込みを、データ領域境界に隣接する小領域に対応するアドレスだけでなく、データ領域境界に隣接しない小領域に対応するアドレスからも開始することができる。
【００２８】
請求項４に記載の発明は、請求項２又は３記載のデータメモリキャッシュ装置であって、前記データ保持部は、前記複数のデータ領域が連続書き込み又は連続読み出しの何れかに使用されたか否かをそれぞれ示す複数のスタックフラグを保持する複数のスタックフラグ保持部を更に備え、前記制御部は、前記境界判定部の判定が肯定的である場合には、前記データ書き込み部が前記データの書き込みを終了した後に、前記対象データ領域に対応するスタックフラグを肯定側に設定し、前記境界判定部の判定が否定的である場合には、前記データ書き込み部が前記データの書き込みを終了した後に、前記対象データ領域に対応するスタックフラグを変更しないスタックフラグ設定部を更に備えるものである。
【００２９】
請求項４に記載の発明によれば、データ保持部がスタックフラグ保持部を備え、制御部が、データの書き込み後に対象小領域の位置に応じてスタックフラグを操作するスタックフラグ設定部を備える。このため制御部が、連続書き込みの過程で、書き込みが終了したデータ領域のデータを、キャッシュミスの発生により当該データ領域を開放するのに先だって、データバスの不使用期間を利用して主記憶装置へ予め書き戻す構成を採る場合に、スタックフラグを利用することにより、スタックに割り付けられていないデータ領域のデータについて無用な書き戻しを行うこと回避することができる。更に、制御部が、連続読み出しの過程で読み出し前のデータ領域へ主記憶装置からデータを予め読み込む構成を採る場合においても、スタックフラグを利用することにより、スタックに割り付けられていないデータ領域のデータについて無用な読み込みを行うことを回避することができる。
【００３０】
請求項５に記載の発明は、請求項２乃至４の何れかに記載のデータメモリキャッシュ装置であって、前記複数のデータ領域は前記主記憶装置のアドレスの中位部分に対応づけられており、前記複数の小領域の各々が前記主記憶装置のアドレスの下位部分に対応づけられており、前記主記憶装置のアドレスの前記中位部分の同一の値に１以上のデータ領域が対応しており、前記データ保持部は、前記複数のデータ領域が保持するデータのアドレスの上位部分をそれぞれ示す複数のタグを保持する複数のタグ保持部を更に備え、前記制御部は、前記演算ユニットが出力するアドレスから前記上位部分と前記中位部分と前記下位側部分とを抽出するアドレス抽出部を更に備え、前記キャッシュミス判定部は、前記アドレス抽出部が抽出した前記中位部分に対応する前記１以上のデータ領域の各々に対応づけられたタグが示す値と前記アドレス抽出部が抽出した前記上位部分とを比較し、何れも一致しない場合に前記キャッシュミスが発生したと判定し、前記境界判定部は、前記複数の小領域のうち前記アドレス抽出部が抽出した前記下位部分に対応する小領域が、アドレスの順序に関して当該小領域が属するデータ領域の前記連続書き込みの早い方向に位置する境界に隣接するか否かを判定することにより、前記対象小領域が前記データ領域境界に隣接するか否かを判定し、前記データ領域開放部は、前記プッシュアクセス検出部が前記連続書き込みの要求を検出し、且つ前記キャッシュミス判定部が前記キャッシュミスの発生を判定した場合に、前記アドレス抽出部が抽出した前記中位部分に対応する前記１以上のデータ領域の何れかを開放することにより前記対象データ領域を開放し、前記制御部は、前記データ領域開放部が開放した前記データ領域に対応づけられたタグを、前記アドレス抽出部が抽出した前記上位部分に更新するタグ更新部を更に備え、前記データ書き込み部は、前記アドレス抽出部が抽出した前記中位部分に対応し且つ前記アドレス抽出部が抽出した前記上位部分を保持するタグに対応づけられたデータ領域中の前記アドレス抽出部が抽出した前記下位部分に対応する小領域を前記対象小領域として、当該対象小領域へ前記演算ユニットが出力するデータを書き込むものである。
【００３１】
請求項５に記載の発明によれば、データ保持部が複数のタグ保持部を備え、アドレス抽出部が演算ユニットが出力したアドレスから各アドレス部分を抽出し、キャッシュミス判定部が、アドレス抽出部が抽出したアドレス部分とデータ領域に対応づけられたタグとに基づいてキャッシュミスの判定を行い、境界判定部が、抽出されたアドレス部分に基づいて対象小領域がデータ領域境界に隣接するか否かを判定し、データ領域開放部はアドレス抽出部が抽出したアドレス部分に基づいてデータ領域の開放を行い、タグ更新部が開放後のデータ領域に対応付けられたタグを更新し、データ書き込み部が、アドレス抽出部が抽出したアドレス部分とタグとに基づいて、演算ユニットが出力するデータの書き込みを行う。このため制御部は、書き込みを行うべき小領域がデータ領域境界に隣接するか否かに応じて開放後のデータ領域にデータの読み込みを略する処理、及びデータの書き込み処理を、更に容易且つ適切に実現し得る。
【００３２】
なお、本発明において主記憶装置のアドレスの下位部分とは、実施の形態において各小領域がアドレスの最下位桁から第１及び第２桁を除いた第３及び第４桁に対応する例を示すように、中位部分の下位側に隣接する部分であって、必ずしも最下位までを含まなくてもよい。
【００３３】
請求項６に記載の発明は、演算ユニットと当該演算ユニットがアクセスする主記憶装置とに介在させて使用するためのデータメモリキャッシュ装置であって、前記主記憶装置のアドレスと対応づけられ、対応するアドレスのデータを保持するための複数のデータ領域を備えるデータ保持部と、前記主記憶装置の連続したアドレスから前記演算ユニットへのデータの読み出しである連続読み出しを行う場合に、前記データ保持部のうち前記連続読み出しが終了しているデータ領域を、前記連続読み出しが終了しているデータ領域が保持するデータを前記主記憶装置へ書き戻すことなく開放する制御部とを備えるものである。
【００３４】
請求項６に記載の発明によれば、制御部は、演算ユニットによる連続したアドレスからの連続読み出し時に、読み出しが行われたデータ領域を、当該データ領域が保持するデータを主記憶装置へ書き戻すことなく開放する。連続読み出しによってもはや再度読み出すことのないデータを保持するデータ領域は、開放しても支障のないものであり、且つ当該データ領域が保持するデータは無用なデータである以上、主記憶装置へ書き戻す必要もないものである。このように制御部は、無用なデータを保持するデータ領域をデータの書き戻しなしで開放するので、演算ユニットの動作に支障をもたらすことなく、メモリアクセス速度を向上させる。
【００３５】
請求項７に記載の発明は、請求項６記載のデータメモリキャッシュ装置であって、前記複数のデータ領域の各々が保持するデータは前記主記憶装置に対して一時に読み書きされ、前記複数のデータ領域の各々は複数の小領域に分割されており、前記複数の小領域の各々が保持するデータは前記演算ユニットに対して一時に読み書きされ、前記制御部は、前記演算ユニットから、前記主記憶装置の連続したアドレスからのデータの読み出しである連続読み出しの要求があった場合に、前記演算ユニットが出力するアドレスに対応するデータ領域である対象データ領域中の前記演算ユニットが出力する前記アドレスに対応する小領域である対象小領域から前記演算ユニットへのデータの読み出しを行うとともに、前記対象小領域が、アドレスの順序に関して前記連続読み出しの遅い方向に位置する前記対象データ領域の境界であるデータ領域境界に隣接する場合には、前記対象データ領域から前記主記憶装置へのデータの書き戻しを行うことなく前記対象データ領域を開放し、前記対象小領域が前記データ領域境界に隣接しない場合には、前記対象データ領域を開放しないものである。
【００３６】
請求項７に記載の発明によれば、制御部は、読み出しの対象である小領域がデータ領域境界に隣接するか否かに応じて、対象データ領域の開放を行うか否かを選択する。すなわち、制御部は、読み出しの対象である小領域がデータ領域境界にある場合には、対象データ領域の開放を行い、データ領域境界にない場合には開放を行わない。このため、演算ユニットは連続読み出しを、データ領域境界に隣接する小領域に対応するアドレスだけでなく、データ領域境界に隣接しない小領域に対応するアドレスで終了させることができる。
【００３７】
請求項８に記載の発明は、請求項７記載のデータメモリキャッシュ装置であって、前記データ保持部は、前記複数のデータ領域の開放又は未開放をそれぞれ示す複数の適正フラグを保持する複数の適正フラグ保持部を更に備え、前記制御部は、前記対象データ領域に対応づけられた適正フラグを、開放を示す側に設定することにより、前記対象データ領域を開放するものである。
【００３８】
請求項８に記載の発明によれば、制御部は適正フラグを所定側に設定することにより、対象データ領域の開放を行うので、対象データ領域の開放を容易に行うことができる。
【００３９】
請求項９に記載の発明は、請求項８記載のデータメモリキャッシュ装置であって、前記制御部は、前記演算ユニットからの前記連続読み出しの要求を検出するポップアクセス検出部と、前記ポップアクセス検出部が前記連続読み出しの要求を検出した場合に、前記対象小領域が前記データ領域境界に隣接するか否かを判定する境界判定部と、前記ポップアクセス検出部が前記連続読み出しの要求を検出した場合に、前記対象小領域のデータを前記演算ユニットへ読み出すデータ読み出し部と、前記境界判定部の判定が肯定的であるときには、前記データ読み出し部による前記データの読み出し後に、前記対象データ領域から前記主記憶装置へのデータの書き戻しを行うことなく前記対象データ領域に対応づけられた前記適正フラグを、開放を示す側に設定し、前記対象小領域が前記データ領域境界に隣接しない場合には、前記対象データ領域に対応づけられた前記適正フラグを変更しない適正フラグ設定部とを備えるものである。
【００４０】
請求項９に記載の発明によれば、ポップアクセス検出部が連続読み出しの要求を検出し、境界判定部が、対象小領域がデータ領域境界に隣接するか否かを判定し、データ読み出し部が対象小領域のデータを演算ユニットへ読み出し、適正フラグ設定部が、境界判定部の判定に応じて適正フラグの設定を行う。このため制御部は、読み出しの対象である小領域がデータ領域境界に隣接するか否かに応じて、対象データ領域を開放する処理を、容易に実現し得る。
【００４１】
請求項１０に記載の発明は、演算ユニットと当該演算ユニットがアクセスする主記憶装置とに介在させて使用するためのデータメモリキャッシュ装置であって、データを保持するための複数のデータ領域を有し、前記複数のデータ領域の各々が保持するデータは前記主記憶装置に対して一時に読み書きされ、前記複数のデータ領域の各々は複数の小領域に分割されており、前記複数の小領域の各々が保持するデータは前記演算ユニットに対して一時に読み書きされるデータ保持部と、前記演算ユニットから、前記主記憶装置の連続したアドレスからのデータの読み出しである連続読み出しの要求があった場合に、前記演算ユニットが出力するアドレスに対応するデータ領域である対象データ領域中の前記演算ユニットが出力する前記アドレスに対応する小領域である対象小領域から前記演算ユニットへのデータの読み出しを行うとともに、前記対象小領域が、アドレスの順序に関して前記連続読み出しの遅い方向に位置する前記対象データ領域の境界であるデータ領域境界に隣接する場合には、その後前記対象データ領域を開放する時に前記対象データ領域から前記主記憶装置へのデータの書き戻しを禁止するための設定を行い、前記対象小領域が前記データ領域境界に隣接しない場合には、前記設定を行わない制御部とを備えるものである。
【００４２】
請求項１０に記載の発明によれば、制御部は、演算ユニットによる連続したアドレスからの連続読み出し時に、読み出しが行われたデータ領域に対して、当該データ領域の開放に伴う主記憶装置へのデータの書き戻しを禁止するための設定を行うので、メモリアクセス速度が向上する。更に、制御部は、読み出しの対象である小領域がデータ領域境界に隣接するか否かに応じて、書き戻しを禁止する設定を行うか否かを選択している。すなわち、制御部は、読み出しの対象である小領域がデータ領域境界にある場合には、書き戻しを禁止する設定を行い、データ領域境界にない場合には設定を行わない。このため、演算ユニットは連続読み出しを、データ領域境界に隣接する小領域に対応するアドレスだけでなく、データ領域境界に隣接しない小領域に対応するアドレスで終了させることができる。
【００４３】
請求項１１に記載の発明は、請求項１０記載のデータメモリキャッシュ装置であって、前記データ保持部は、前記複数のデータ領域が保持するデータと前記主記憶装置が対応するアドレスに保持するデータとの間の一致及び不一致をそれぞれ示す複数のダーティフラグを保持する複数のダーティフラグ保持部を更に備え、前記制御部は、前記対象データ領域に対応するダーティフラグを前記一致を示す側に設定することにより前記設定を行うものである。
【００４４】
請求項１１に記載の発明によれば、データ保持部がダーティフラグ保持部を備え、制御部が、ダーティフラグを所定側に設定することにより、書き戻しを禁止するための設定を行う。このため制御部は、書き戻しを禁止するための設定を容易に行うことができる。
【００４５】
請求項１２に記載の発明は、請求項１１記載のデータメモリキャッシュ装置であって、前記制御部は、前記演算ユニットからの前記連続読み出しの要求を検出するポップアクセス検出部と、前記ポップアクセス検出部が前記連続読み出しの要求を検出した場合に、前記対象小領域が前記データ領域境界に隣接するか否かを判定する境界判定部と、前記ポップアクセス検出部が前記連続読み出しの要求を検出した場合に、前記対象小領域のデータを前記演算ユニットへ読み出すデータ読み出し部と、前記境界判定部の判定が肯定的であるときには、前記データ読み出し部による前記データの読み出し後に、前記対象データ領域に対応する前記ダーティフラグを前記一致を示す側に設定し、前記データ領域境界判定部の判定が否定的であるときには、前記対象データ領域に対応する前記ダーティフラグを変更しないダーティフラグ設定部とを備えるものである。
【００４６】
請求項１２に記載の発明によれば、ポップアクセス検出部が連続読み出しの要求を検出し、境界判定部が、対象小領域がデータ領域境界に隣接するか否かを判定し、データ読み出し部が対象小領域のデータを演算ユニットへ読み出し、ダーティフラグ設定部が、境界判定部の判定に応じてダーティフラグの設定を行う。このため制御部は、読み出しの対象である小領域がデータ領域境界に隣接するか否かに応じて書き戻しの禁止を設定する処理を、容易に実現し得る。
【００４７】
請求項１３に記載の発明は、請求項９又は１２記載のデータメモリキャッシュ装置であって、前記データ保持部は、前記複数のデータ領域が連続書き込み又は連続読み出しの何れかに使用されたか否かをそれぞれ示す複数のスタックフラグを保持する複数のスタックフラグ保持部を更に備え、前記制御部は、前記境界判定部の判定が肯定的である場合には、前記データ読み出し部が前記データの読み出しを終了した後に、前記対象データ領域に対応するスタックフラグを肯定側に設定し、前記境界判定部の判定が否定的である場合には、前記データ読み出し部が前記データの読み出しを終了した後に、前記対象データ領域に対応するスタックフラグを変更しないスタックフラグ設定部を更に備えるものである。
【００４８】
請求項１３に記載の発明によれば、データ保持部がスタックフラグ保持部を備え、制御部が、データの読み出し後に対象小領域の位置に応じてスタックフラグを操作するスタックフラグ設定部を備える。このため制御部が、連続読み出しの過程で、読み出しが終了したデータ領域のデータを、キャッシュミスの発生により当該データ領域を開放するのに先立って、データバスの不使用期間を利用して主記憶装置へ予め書き戻す構成を採る場合に、スタックフラグを利用することにより、スタックに割り付けられていないデータ領域のデータについて無用な書き戻しを行うこと回避することができる。
【００４９】
請求項１４に記載の発明は、請求項９、１２又は１３記載のデータメモリキャッシュ装置であって、前記複数のデータ領域は前記主記憶装置のアドレスの中位部分に対応づけられており、前記複数の小領域の各々が前記主記憶装置のアドレスの下位部分に対応づけられており、前記主記憶装置のアドレスの前記中位部分の同一の値に１以上のデータ領域が対応しており、前記データ保持部は、前記複数のデータ領域が保持するデータのアドレスの上位部分をそれぞれ示す複数のタグを保持する複数のタグ保持部を更に備え、前記制御部は、前記演算ユニットが出力するアドレスから前記上位部分と前記中位部分と前記下位部分とを抽出するアドレス抽出部を更に備え、前記境界判定部は、前記複数の小領域のうち前記アドレス抽出部が抽出した前記下位部分に対応する小領域が、アドレスの順序に関して当該小領域が属するデータ領域の前記連続読み出しの遅い方向に位置する境界に隣接するか否かを判定することにより、前記対象小領域が前記データ領域境界に隣接するか否かを判定し、前記データ読み出し部は、前記アドレス抽出部が抽出した前記中位部分に対応し且つ前記アドレス抽出部が抽出した前記上位部分を示すタグに対応づけられたデータ領域中の前記アドレス抽出部が抽出した前記下位部分に対応する小領域を前記対象小領域として、当該対象小領域のデータを前記演算ユニットへ読み出すものである。
【００５０】
請求項１４に記載の発明によれば、データ保持部が複数のタグ保持部を備え、アドレス抽出部が演算ユニットが出力したアドレスから各アドレス部分を抽出し、境界判定部が、抽出されたアドレス部分に基づいて対象小領域がデータ領域境界に隣接するか否かを判定し、データ読み出し部が、アドレス抽出部が抽出したアドレス部分とタグとに基づいて、演算ユニットへのデータの読み出しを行う。このため制御部は、連続読み出しが終了した無用なデータ領域の書き戻しなしでの開放、又は当該無用なデータ領域の開放に伴う書き戻しの禁止の設定を、更に容易に実現し得る。
【００５１】
請求項１５に記載の発明は、演算ユニットと当該演算ユニットがアクセスする主記憶装置とに介在させて使用するためのデータメモリキャッシュ装置であって、前記主記憶装置のアドレスと対応づけられ、対応するアドレスのデータを保持するための複数のデータ領域を備えるデータ保持部と、前記演算ユニットから、前記主記憶装置の連続したアドレスへのデータの書き込みである連続書き込みを実行する期間であって、且つ前記データ保持部と前記主記憶装置との間でデータを転送するためのデータバスが不使用である期間に、アドレスの順序に関して現在行っている連続書き込みよりも連続書き込みの早い方向に位置する前記データ保持部中のデータ領域から前記主記憶装置へのデータの書き戻しを行う制御部とを備えるものである。
【００５２】
請求項１５に記載の発明によれば、制御部が、連続書き込みを実行する期間に、アドレスの順序に関して現在行っている連続書き込みよりも連続書き込みの早い方向に位置するデータ領域のデータを、当該データ領域が開放される前にデータバスの不使用期間（すなわち空き時間）を利用して主記憶装置へ予め書き戻す。それにより制御部は、連続書き込みを終了している可能性が高く、従って直ちに読み出しが行われる可能性の低いデータ領域を後に開放する時に、書き戻しを行う必要がないので、メモリアクセス速度が向上する。
【００５３】
請求項１６に記載の発明は、請求項１５記載のデータメモリキャッシュ装置であって、前記制御部は、前記演算ユニットからの前記連続書き込みの要求を検出するプッシュアクセス検出部と、前記プッシュアクセス検出部が前記連続書き込みの要求を検出した場合に、前記演算ユニットが出力するアドレスから前記連続書き込みの早い方向へ所定間隔をもってずれたアドレスであるオフセットアドレスを算出するオフセット算出部と、前記オフセットアドレスについてキャッシュミスの有無を判定するキャッシュミス判定部と、前記データバスが使用中であるか否かを判定する転送ビジー判定部と、前記キャッシュミス判定部が前記キャッシュミス無しと判定し、且つ前記転送ビジー判定部が前記データバスの不使用を判定した場合に、前記オフセットアドレスに対応するデータ領域から前記主記憶装置へのデータの書き戻しを行うライトバック部とを備えるものである。
【００５４】
請求項１６に記載の発明によれば、プッシュアクセス検出部が連続書き込みの要求を検出し、オフセット算出部がオフセットアドレスを算出し、キャッシュミス判定部がオフセットアドレスについてキャッシュミスの有無を判定し、転送ビジー判定部が、データバスが使用中であるか否かを判定し、ライトバック部が、キャッシュミス判定部の判定と転送ビジー判定部の判定とに応じて、オフセットアドレスに対応するデータ領域から主記憶装置へのデータの書き戻しを行う。このため制御部は、連続書き込みが終了したデータ領域である可能性の高いデータ領域のデータを、当該データ領域が開放される前にデータバスの不使用期間を利用して主記憶装置へ予め書き戻す処理を、容易にかつ適切に実現し得る。
【００５５】
請求項１７に記載の発明は、請求項１６記載のデータメモリキャッシュ装置であって、前記複数のデータ領域は、前記主記憶装置のアドレスの中位部分に対応づけられており、且つ前記中位部分の同一の値に１以上のデータ領域が対応しており、前記複数のデータ領域の各々は、前記アドレスの下位部分に対応づけられた複数の小領域に分割されており、前記複数のデータ領域の各々が保持するデータは前記主記憶装置に対して一時に読み書きされ、前記複数の小領域の各々が保持するデータは前記演算ユニットに対して一時に読み書きされ、前記データ保持部は、前記複数のデータ領域が保持するデータのアドレスの上位部分をそれぞれ示す複数のタグを保持する複数のタグ保持部を更に備え、前記制御部は、前記演算ユニットが出力するアドレスから前記上位部分と前記中位部分と前記下位部分とを抽出するアドレス抽出部を更に備え、前記オフセット算出部は、前記プッシュアクセス検出部が前記連続書き込みの要求を検出した場合に、前記アドレス抽出部が抽出した前記中位部分と前記上位部分とで表されるアドレスから前記連続書き込みの早い方向へ定められた間隔をもってずれたアドレスを、前記オフセットアドレスとして算出し、前記キャッシュミス判定部は、前記オフセットアドレスの前記中位部分に対応する前記１以上のデータ領域の各々に対応づけられたタグが示す値と前記オフセットアドレスの前記上位部分とを比較し、何れも一致しない場合にキャッシュミスが発生したと判定するものである。
【００５６】
請求項１７に記載の発明によれば、データ保持部が複数のタグ保持部を備え、アドレス抽出部が演算ユニットが出力したアドレスから各アドレス部分を抽出し、オフセット算出部が、アドレス抽出部が抽出したアドレス部分に基づいてオフセットアドレスを算出し、キャッシュミス判定部が、アドレス抽出部が抽出したアドレス部分とデータ領域に対応づけられたタグとに基づいてキャッシュミスの判定を行う。このため制御部は、オフセットアドレスの算出及びキャッシュミスの判定を容易に行うことができる。
【００５７】
請求項１８に記載の発明は、演算ユニットと当該演算ユニットがアクセスする主記憶装置とに介在させて使用するためのデータメモリキャッシュ装置であって、前記主記憶装置のアドレスと対応づけられ、対応するアドレスのデータを保持するための複数のデータ領域を備えるデータ保持部と、前記主記憶装置の連続したアドレスから前記演算ユニットへのデータの読み出しである連続読み出しを実行する期間であって、且つ前記データ保持部と前記主記憶装置との間でデータを転送するためのデータバスが不使用である期間に、アドレスの順序に関して現在行っている連続読み出しよりも連続読み出しの早い方向に位置する前記データ保持部中のデータ領域から前記主記憶装置へデータの書き戻しを行う制御部とを備えるものである。
【００５８】
請求項１８に記載の発明によれば、制御部が、連続読み出しを実行する期間に、アドレスの順序に関して現在行っている連続読み出しよりも連続読み出しの早い方向に位置するデータ領域のデータを、当該データ領域が開放される前にデータバスの不使用期間（すなわち空き時間）を利用して主記憶装置へ予め書き戻す。それにより制御部は、連続読み出しを終了している可能性が高く、従って再び読み出しが行われる可能性の低いデータ領域を後に開放する時に、書き戻しを行う必要がないので、メモリアクセス速度が向上する。
【００５９】
請求項１９に記載の発明は、請求項１８記載のデータメモリキャッシュ装置であって、前記制御部は、前記演算ユニットからの前記連続読み出しの要求を検出するポップアクセス検出部と、前記ポップアクセス検出部が前記連続読み出しの要求を検出した場合に、前記演算ユニットが出力するアドレスから前記連続読み出しの早い方向へ所定間隔をもってずれたアドレスであるオフセットアドレスを算出するオフセット算出部と、前記オフセットアドレスについてキャッシュミスの有無を判定するキャッシュミス判定部と、前記データバスが使用中であるか否かを判定する転送ビジー判定部と、前記キャッシュミス判定部が前記キャッシュミス無しと判定し、且つ前記転送ビジー判定部が前記データバスの不使用を判定した場合に、前記オフセットアドレスに対応するデータ領域から前記主記憶装置へのデータの書き戻しを行うライトバック部とを備えるものである。
【００６０】
請求項１９に記載の発明によれば、ポップアクセス検出部が連続読み出しの要求を検出し、オフセット算出部がオフセットアドレスを算出し、キャッシュミス判定部がオフセットアドレスについてキャッシュミスの有無を判定し、転送ビジー判定部が、データバスが使用中であるか否かを判定し、ライトバック部が、キャッシュミス判定部の判定と転送ビジー判定部の判定とに応じて、オフセットアドレスに対応するデータ領域から主記憶装置へのデータの書き戻しを行う。このため制御部は、連続読み出しが終了したデータ領域である可能性の高いデータ領域のデータを、当該データ領域が開放される前にデータバスの不使用期間を利用して主記憶装置へ予め書き戻す処理を、容易にかつ適切に実現し得る。
【００６１】
請求項２０に記載の発明は、請求項１９記載のデータメモリキャッシュ装置であって、前記複数のデータ領域は、前記主記憶装置のアドレスの中位部分に対応づけられており、且つ前記中位部分の同一の値に１以上のデータ領域が対応しており、前記複数のデータ領域の各々は、前記アドレスの下位部分に対応づけられた複数の小領域に分割されており、前記複数のデータ領域の各々が保持するデータは前記主記憶装置に対して一時に読み書きされ、前記複数の小領域の各々が保持するデータは前記演算ユニットに対して一時に読み書きされ、前記データ保持部は、前記複数のデータ領域が保持するデータのアドレスの上位部分をそれぞれ示す複数のタグを保持する複数のタグ保持部を更に備え、前記制御部は、前記演算ユニットが出力するアドレスから前記上位部分と前記中位部分と前記下位部分とを抽出するアドレス抽出部を更に備え、前記オフセット算出部は、前記ポップアクセス検出部が前記連続読み出しの要求を検出した場合に、前記アドレス抽出部が抽出した前記中位部分と前記上位部分とで表されるアドレスから前記連続読み出しの早い方向へ定められた間隔をもってずれたアドレスを、前記オフセットアドレスとして算出し、前記キャッシュミス判定部は、前記オフセットアドレスの前記中位部分に対応する前記１以上のデータ領域の各々に対応づけられたタグが示す値と前記オフセットアドレスの前記上位部分とを比較し、何れも一致しない場合にキャッシュミスが発生したと判定するものである。
【００６２】
請求項２０に記載の発明によれば、データ保持部が複数のタグ保持部を備え、アドレス抽出部が演算ユニットが出力したアドレスから各アドレス部分を抽出し、オフセット算出部が、アドレス抽出部が抽出したアドレス部分に基づいてオフセットアドレスを算出し、キャッシュミス判定部が、アドレス抽出部が抽出したアドレス部分とデータ領域に対応づけられたタグとに基づいてキャッシュミスの判定を行う。このため制御部は、オフセットアドレスの算出及びキャッシュミスの判定を容易に行うことができる。
【００６３】
請求項２１に記載の発明は、請求項１６、１７、１９又は２０記載のデータメモリキャッシュ装置であって、前記データ保持部は、前記複数のデータ領域が連続書き込み又は連続読み出しの何れかに使用されたか否かをそれぞれ示す複数のスタックフラグを保持する複数のスタックフラグ保持部を更に備え、前記ライトバック部は、前記キャッシュミス判定部が前記キャッシュミス無しと判定し、且つ前記転送ビジー判定部が前記データバスの不使用を判定した場合に、更に前記オフセットアドレスに対応するデータ領域に対応する前記スタックフラグが肯定側に設定されているときに限り、前記オフセットアドレスに対応するデータ領域から前記主記憶装置へのデータの書き戻しを行うものである。
【００６４】
請求項２１に記載の発明によれば、データ保持部がスタックフラグ保持部を備え、ライトバック部は、スタックフラグをも参照して、データの書き戻しを行うか否かを選択する。それにより、ライトバック部は、連続書き込み以外の書き込みのあったデータ領域、或いは連続読み出し以外の読み出しのあったデータ領域について、無用な書き戻しを行うことを回避することができる。
【００６５】
請求項２２に記載の発明は、請求項１６、１７、１９、２０又は２１記載のデータメモリキャッシュ装置であって、前記データ保持部は、前記複数のデータ領域の開放又は未開放をそれぞれ示す複数の適正フラグを保持する複数の適正フラグ保持部を更に備え、前記ライトバック部は、前記キャッシュミス判定部が前記キャッシュミス無しと判定し、且つ前記転送ビジー判定部が前記データバスの不使用を判定した場合に、更に前記オフセットアドレスに対応するデータ領域に対応する前記適正フラグが未開放を示す側に設定されているときに限り、前記オフセットアドレスに対応するデータ領域から前記主記憶装置へのデータの書き戻しを行うものである。
【００６６】
請求項２２に記載の発明によれば、データ保持部が適正フラグ保持部を備え、ライトバック部は、適正フラグをも参照して、データの書き戻しを行うか否かを選択する。それにより、ライトバック部は、既に開放されているデータ領域について無用な書き戻しを行うことを回避することができる。
【００６７】
請求項２３に記載の発明は、演算ユニットと当該演算ユニットがアクセスする主記憶装置とに介在させて使用するためのデータメモリキャッシュ装置であって、前記主記憶装置のアドレスと対応づけられ、対応するアドレスのデータを保持するための複数のデータ領域を備えるデータ保持部と、前記主記憶装置の連続したアドレスから前記演算ユニットへのデータの読み出しである連続読み出しを実行する期間であって、且つ前記データ保持部と前記主記憶装置との間でデータを転送するためのデータバスが不使用である期間に、アドレスの順序に関して現在行っている連続読み出しよりも連続読み出しの遅い方向に位置する前記データ保持部中のデータ領域へ前記主記憶装置からデータの読み込みを行う制御部とを備えるものである。
【００６８】
請求項２３に記載の発明によれば、制御部が、連続読み出しを実行する期間に、以後において読み出しが行われることが期待されるデータ領域へ、データバスの不使用期間（すなわち空き時間）を利用して、予め主記憶装置からデータの読み込みを行う。それにより制御部は、データを読み出すべきデータ領域へ主記憶装置からデータを読み込むための時間を節減することができる。その結果、メモリアクセス速度が向上する。
【００６９】
請求項２４に記載の発明は、請求項２３記載のデータメモリキャッシュ装置であって、前記制御部は、前記演算ユニットからの前記連続読み出しの要求を検出するポップアクセス検出部と、前記ポップアクセス検出部が前記連続読み出しの要求を検出した場合に、前記演算ユニットが出力するアドレスから前記連続読み出しの遅い方向へ所定間隔をもってずれたアドレスであるオフセットアドレスを算出するオフセット算出部と、前記データバスが使用中であるか否かを判定する転送ビジー判定部と、前記転送ビジー判定部が前記データバスの不使用を判定した場合に、前記オフセットアドレスに対応するデータ領域へ前記主記憶装置からデータの読み込みを行うリフィル部とを備えるものである。
【００７０】
請求項２４に記載の発明によれば、ポップアクセス検出部が連続読み込みの要求を検出し、オフセット算出部がオフセットアドレスを算出し、転送ビジー判定部が、データバスが使用中であるか否かを判定し、リフィル部が、転送ビジー判定部の判定に応じて、オフセットアドレスに対応するデータ領域へ主記憶装置からデータを読み込む。このため制御部は、読み出しが行われることが期待されるデータ領域へ、データバスの不使用期間を利用して、予め主記憶装置からデータを読み込む処理を、容易に実現し得る。
【００７１】
請求項２５に記載の発明は、請求項２４記載のデータメモリキャッシュ装置であって、前記データ保持部は、前記複数のデータ領域が連続書き込み又は連続読み出しの何れかに使用されたか否かをそれぞれ示す複数のスタックフラグを保持する複数のスタックフラグ保持部を更に備え、前記リフィル部は、前記転送ビジー判定部が前記データバスの不使用を判定した場合に、前記オフセットアドレスに対応するデータ領域に対応する前記スタックフラグが肯定的に設定されているときに限り、前記オフセットアドレスに対応するデータ領域へ前記主記憶装置からデータの読み込みを行うものである。
【００７２】
請求項２５に記載の発明によれば、データ保持部がスタックフラグ保持部を備え、リフィル部は、スタックフラグをも参照して、データの読み込みを行うか否かを選択する。それにより、リフィル部は、連続書き込みの対象とされなかったデータ領域、すなわち連続読み出しの対象とされることのないデータ領域について、無用な読み込みを行うことを回避することができる。
【００７３】
請求項２６に記載の発明は、請求項２４又は２５記載のデータメモリキャッシュ装置であって、前記データ保持部は、前記複数のデータ領域の開放又は未開放をそれぞれ示す複数の適正フラグを保持する複数の適正フラグ保持部を更に備え、前記リフィル部は、前記転送ビジー判定部が前記データバスの不使用を判定した場合に、前記オフセットアドレスに対応するデータ領域に対応する前記適正フラグが開放を示す側に設定されているときに限り、前記オフセットアドレスに対応するデータ領域へ前記主記憶装置からデータの読み込みを行うものである。
【００７４】
請求項２６に記載の発明によれば、データ保持部が適正フラグ保持部を備え、リフィル部は、適正フラグをも参照して、データの読み込みを行うか否かを選択する。それにより、リフィル部は、未開放のデータ領域について無用な読み込みを行うことを回避することができる。
【００７５】
請求項２７に記載の発明は、請求項２４乃至２６の何れかに記載のデータメモリキャッシュ装置であって、前記複数のデータ領域は、前記主記憶装置のアドレスの中位部分に対応づけられており、且つ前記中位部分の同一の値に１以上のデータ領域が対応しており、前記複数のデータ領域の各々は、前記アドレスの下位部分に対応づけられた複数の小領域に分割されており、前記複数のデータ領域の各々が保持するデータは前記主記憶装置に対して一時に読み書きされ、前記複数の小領域の各々が保持するデータは前記演算ユニットに対して一時に読み書きされ、前記データ保持部は、前記複数のデータ領域が保持するデータのアドレスの上位部分をそれぞれ示す複数のタグを保持する複数のタグ保持部を更に備え、前記制御部は、前記演算ユニットが出力するアドレスから前記上位部分と前記中位部分と前記下位部分とを抽出するアドレス抽出部を更に備え、前記オフセット算出部は、前記ポップアクセス検出部が前記連続読み出しの要求を検出した場合に、前記アドレス抽出部が抽出した前記中位部分と前記上位部分とで表されるアドレスから前記連続読み出しの遅い方向へ定められた間隔をもってずれたアドレスを、前記オフセットアドレスとして算出するものである。
【００７６】
請求項２７に記載の発明によれば、データ保持部が複数のタグ保持部を備え、アドレス抽出部が演算ユニットが出力したアドレスから各アドレス部分を抽出し、オフセット算出部が、アドレス抽出部が抽出したアドレス部分に基づいてオフセットアドレスを算出する。このため制御部は、オフセットアドレスの算出を容易に行うことができる。
【００７７】
請求項２８に記載の発明は、請求項２７記載のデータメモリキャッシュ装置であって、前記制御部は、前記オフセットアドレスの前記中位部分に対応する前記１以上のデータ領域の各々に対応づけられたタグが示す値と前記オフセットアドレスの前記上位部分とを比較し、何れも一致しない場合に、前記オフセットアドレスについてキャッシュミスが発生したと判定するキャッシュミス判定部と、前記キャッシュミス検出部が前記キャッシュミスの発生を判定した場合に、前記オフセットアドレスの前記中位部分に対応する前記１以上のデータ領域の何れかを開放するデータ領域開放部と、前記データ領域開放部が開放した前記データ領域に対応づけられたタグを、前記オフセットアドレスの前記上位部分に更新するタグ更新部とを更に備えるものである。
【００７８】
請求項２８に記載の発明によれば、キャッシュミス判定部が、オフセットアドレス算出部が算出したオフセットアドレスと当該オフセットアドレスに対応するデータ領域に対応づけられたタグとに基づいて、オフセットアドレスについてキャッシュミスの判定を行い、データ領域開放部はオフセットアドレス算出部が算出したオフセットアドレスに基づいてデータ領域の開放を行い、タグ更新部が開放後のデータ領域に対応付けられたタグを更新する。このため制御部は、オフセットアドレスにキャッシュミスがあっても、オフセットアドレスに対応するデータ領域への主記憶装置からのデータの読み込みを行うことができる。
【００７９】
請求項２９に記載の発明は、データメモリキャッシュシステムであって、請求項１乃至２８の何れかに記載のデータメモリキャッシュ装置と、前記データメモリキャッシュ装置に接続された演算ユニットと、前記データメモリキャッシュ装置に接続され前記演算ユニットによってアクセスされる主記憶装置とを備えるものである。
【００８０】
請求項２９に記載の発明によれば、データメモリキャッシュシステムが、本発明のデータメモリキャッシュ装置、当該装置に接続された演算ユニット、及び当該装置に接続されて演算ユニットによってアクセスされる主記憶装置とを備えるので、メモリアクセス速度が高められる。
【発明の効果】
【００８１】
以上に述べたように、本発明のデータメモリキャッシュ装置及びデータメモリキャッシュシステムによれば、メモリアクセス速度を高めることができる。
【発明を実施するための最良の形態】
【００８２】
本特許出願に係る発明（以後、「本発明」と適宜称する）の実施の形態について図を参照して説明する。
【００８３】
（１．システムの構成）
本発明の第１の実施の形態によるデータメモリキャッシュ装置、及び当該装置を含むデータメモリキャッシュシステム（以後、特に区別するべき場合を除いて、各々を単に「キャッシュ装置」及び「キャッシュシステム」と称する）のブロック構成を図１に示す。命令メモリキャッシュ装置及び命令メモリキャッシュシステムについては本発明と直接関係しないので説明を省略する。
【００８４】
本実施の形態によるキャッシュシステム１００は、主要には、演算ユニット１１３、メモリマネジメントユニット１１５（以後、「ＭＭＵ１１５」と適宜称する）、スタック対応データキャッシュユニット１１７（以後特に区別するべき場合を除いて単に「キャッシュユニット１１７」と適宜称する）、転送制御ユニット１１９、主記憶装置１３１を備えている。キャッシュユニット１１７は、本発明のデータメモリキャッシュ装置の一実施形態に該当する。
【００８５】
演算ユニット１１３は、通常ＭＰＵまたは（狭義の）ＣＰＵまたはプロセッサと呼ばれるもので、各種の演算命令、データ移動命令、制御命令その他の命令を命令メモリから取り出して実行する。以後、演算ユニット１１３の一例としてＭＰＵを取り上げ、「ＭＰＵ１１３」と適宜記載する。このことは当然ながら、本発明の演算ユニットをＭＰＵに限定する趣旨ではない。
【００８６】
ＭＰＵ１１３は特にメモリアドレスを記憶する専用レジスタＳＰ（スタックポインタ）を有している。このスタックポインタが示すメモリ番地（メモリアドレス）をスタックトップと呼ぶ。またこのスタックポインタとして、専用のＳＰ以外に、汎用のレジスタＲｍ（レジスタｍ）を使うこともできる。このような実装は汎用ＣＰＵをＪａｖａ（登録商標）仮想マシンとして使用する場合等で、特に有効である。
【００８７】
以後特に混同を生じない限り、「スタックポインタ（ＳＰ）」または「スタックポインタ（ＳＰ）アクセス」等の用語を、専用のＳＰレジスタを使う場合と、汎用のレジスタ（例えばＲｍやＲｎと表記する）を使用する場合とを特に区別せず、両方を含む意味で用いる。
【００８８】
ＭＰＵ１１３は、データ移動命令の一部として、ｐｕｓｈ命令（プッシュ命令）、ｐｏｐ命令（ポップ命令）、ｌｏａｄ命令（ロード命令）、ｓｔｏｒｅ命令（ストア命令）、及びその他の命令を準備している。ｐｕｓｈ命令は、ＳＰの内容をマイナス４（すなわち、４だけデクリメント）して、そのスタックトップにデータを４バイトライト（ＭＰＵ１１３からメモリへ書き込み）する命令である。ｐｏｐ命令は、スタックトップからデータを例えば４バイトリード（メモリからＭＰＵ１１３へ読み出し）してＳＰの内容をプラス４する命令である。ｌｏａｄ命令は、スタックトップからの相対アドレスでメモリ読み出しを行う命令である。ｓｔｏｒｅ命令は、スタックトップからの相対アドレスでメモリ書き込みを行う命令である。ＭＰＵ１１３は、その他のデータ移動命令として、例えば、直接アドレス、レジスタ間接アドレス、レジスタ相対アドレス等、各種の方法で指定する任意のアドレスに直接ランダムにメモリアクセスする命令を準備している。
【００８９】
図２（ａ）、（ｂ）、（ｃ）、（ｄ）の左側「命令」欄に、これらのデータ移動命令のうち、代表的なｐｕｓｈ、ｐｏｐ、ｌｏａｄ、ｓｔｏｒｅ命令の各命令形式を示す。ｐｕｓｈ命令は、主記憶装置１３１の連続するアドレスへデータを書き込む命令の具体例である。またｐｏｐ命令は、主記憶装置１３１の連続するアドレスからデータを読み出す命令の具体例である。図２に例示する命令形式は、汎用レジスタＲｍまたは汎用レジスタＲｎをスタックポインタとして使用している。また、この説明では、これらの命令によるメモリアクセスの単位を４バイトとし、ｐｕｓｈ／ｐｏｐ命令でデータ移動の前後でスタックポインタの増減を行う単位値を４としたが、これは一例であって、どのような値であっても構わない。
【００９０】
図２（ａ）左側の「命令」欄はｐｕｓｈ命令の命令形式を表している。この形式ではＭＰＵ１１３は、Ｒｍレジスタをスタックポインタとして使用している。図２（ａ）右側の「動作」欄は、この命令の実行によって行われる動作を示している。
【００９１】
このｐｕｓｈ命令が実行されるとまず、Ｒｍの内容がマイナス４される。次にＲｎレジスタの内容がＲｍ間接アドレス指定でメモリに書き込まれる。即ち、Ｒｎレジスタの内容がＲｍレジスタの内容が示すアドレスのメモリに書き込まれる。そしてｐｕｓｈ／ｐｏｐ修飾ビットがオンされる。このｐｕｓｈ／ｐｏｐ修飾ビットの内容は、図１に示すように、制御ラインを通じて、ＭＰＵ１１３からキャッシュユニット１１７にｐｕｓｈ／ｐｏｐ命令が実行されたことを知らせるために使われる。
【００９２】
図２（ｂ）左側の「命令」欄はｐｏｐ命令の命令形式を表している。この形式ではＭＰＵ１１３は、Ｒｎレジスタをスタックポインタとして使用している。図２（ｂ）右側の「動作」欄は、この命令の実行によって行われる動作を示している。
【００９３】
このｐｏｐ命令が実行されるとまず、ｐｕｓｈ／ｐｏｐ修飾ビットがオンされる。ｐｕｓｈ／ｐｏｐ修飾ビットの内容が、制御ラインを通じて、ＭＰＵ１１３からキャッシュユニット１１７にｐｕｓｈ／ｐｏｐ命令が実行されたことを知らせるために使われることは前記と同様である。次に、Ｒｎ間接アドレス指定でメモリの内容がＲｍレジスタに読み込まれる。即ち、Ｒｎレジスタの内容が示すアドレスのメモリの内容がＲｍレジスタに読み込まれる。そして、Ｒｎの内容がプラス４される（すなわち、４だけインクリメントされる）。
【００９４】
図２（ｃ）左側の「命令」欄はｌｏａｄ命令の命令形式を表している。この形式ではＭＰＵ１１３は、Ｒｎレジスタをスタックポインタとして使用している。図２（ｃ）右側の「動作」欄は、この命令の実行によって行われる動作を示している。
【００９５】
このｌｏａｄ命令が実行されると、まずＳＰ相対修飾ビットがオンされる。このＳＰ相対修飾ビットの内容は、図１に示すように、制御ラインを通じて、ＭＰＵ１１３からキャッシュユニット１１７にＳＰ相対アドレス指定でｌｏａｄ／ｓｔｏｒｅ命令が実行されたことを知らせるために使われる。次に、Ｒｎレジスタの内容にオフセット値を加えた間接アドレス指定でメモリの内容がＲｍレジスタに読み込まれる。即ち、Ｒｎレジスタの内容にオフセット値を加えた値が示すアドレスのメモリの内容がＲｍレジスタに読み込まれる。ＳＰとして使用されているＲｎの内容がプラスマイナスされることはない。
【００９６】
図２（ｄ）左側の「命令」欄はｓｔｏｒｅ命令の命令形式を表している。この形式ではＭＰＵ１１３は、Ｒｍレジスタをスタックポインタとして使用している。図２（ｄ）右側の「動作」欄は、この命令の実行によって行われる動作を示している。
【００９７】
このｓｔｏｒｅ命令が実行されると、Ｒｎレジスタの内容がＲｍレジスタの内容にオフセット値を加えた間接アドレス指定でメモリに書き込まれる。即ち、Ｒｎレジスタの内容がＲｍレジスタの内容にオフセット値を加えた値が示すアドレスのメモリに書き込まれる。そしてＳＰ相対修飾ビットがオンされる。ＳＰ相対修飾ビットの内容が、制御ラインを通じて、ＭＰＵ１１３からキャッシュユニット１１７にＳＰ相対アドレス指定でｌｏａｄ／ｓｔｏｒｅ命令が実行されたことを知らせるために使われることは前記と同様である。ＳＰとして使用されているＲｍの内容がプラスマイナスされることはないことも前記と同様である。
【００９８】
これらの命令を含むデータ移動命令がＭＰＵ１１３によって実行されると、そのデータ移動命令が外部メモリにアクセスするものであるならば、ＭＰＵ１１３はアクセス対象である外部メモリの論理アドレスを仮想アドレスバスに出力し、データアクセスがメモリからのデータの読み出しであるか書き込みであるかに応じてキャッシュリード要求またはキャッシュライト要求ビット信号線をそれぞれオンにする。データアクセスがメモリへのデータの書き込みであるならば、ＭＰＵ１１３は、同時に書き込み対象となるデータをも３２ビット幅のデータバスに出力する。仮想データバスに出力された論理アドレスはＭＭＵ１１５によって物理アドレスに変換され、実アドレスバスに出力される。これらのデータを受け取ったキャッシュユニット１１７は、データアクセスの対象であるメモリがキャッシュ上に存在するか否かを判定する。
【００９９】
以上説明したように本実施の形態で使用するＭＰＵからメモリアクセスするために使用する制御信号線は、ｐｕｓｈ／ｐｏｐ修飾、ＳＰ相対修飾、キャッシュリード要求、及びキャッシュライト要求を伝える４本（４ビット）である。ＭＰＵ１１３によって実行される命令とその動作と各制御線の状態との取り得る組み合わせを図３に示す。
【０１００】
図３（ａ）は、キャッシュリード要求とキャッシュライト要求がどちらもがオフ（０）である場合を示している。この場合には、ｐｕｓｈ／ｐｏｐ修飾、ＳＰ相対修飾の如何に関わらず、キャッシュメモリのリードライトに関わる何等の動作も行われない。
【０１０１】
図３（ｂ）は、キャッシュリード要求がオフ（０）、キャッシュライト要求がオン（１）、ｐｕｓｈ／ｐｏｐ修飾とＳＰ相対修飾のどちらもがオフ（０）である場合を示している。すなわち図３（ｂ）は、メモリに対するランダムライトの命令が実行された時の動作とその時の制御信号線の状態を示している。
【０１０２】
図３（ｃ）は、キャッシュリード要求がオフ（０）、キャッシュライト要求がオン（１）、ｐｕｓｈ／ｐｏｐ修飾がオフ（０）、ＳＰ相対修飾がオン（１）である場合を示している。すなわち図３（ｃ）は、メモリに対するＳＰ相対ライト（ｓｔｏｒｅ）命令が実行された時の動作とその時の制御信号線の状態を示している。
【０１０３】
図３（ｄ）は、キャッシュリード要求がオフ（０）、キャッシュライト要求がオン（１）、ｐｕｓｈ／ｐｏｐ修飾がオン（１）、ＳＰ相対修飾がオフ（０）である場合を示している。すなわち図３（ｄ）は、メモリに対するｐｕｓｈ命令が実行された時の動作とその時の制御信号線の状態を示している。
【０１０４】
図３（ｅ）は、キャッシュリード要求がオフ（０）、キャッシュライト要求がオン（１）、ｐｕｓｈ／ｐｏｐ修飾とＳＰ相対修飾のどちらもがオン（１）である場合を示している。通常このような状態は想定されていない。すなわち、通常においてはこのような状態は起らない。
【０１０５】
図３（ｆ）は、キャッシュリード要求がオン（１）、キャッシュライト要求がオフ（０）、ｐｕｓｈ／ｐｏｐ修飾とＳＰ相対修飾のどちらもがオフ（０）である場合を示している。すなわち図３（ｆ）は、メモリに対するランダムリードの命令が実行された時の動作とその時の制御信号線の状態を示している。
【０１０６】
図３（ｇ）は、キャッシュリード要求がオン（１）、キャッシュライト要求がオフ（０）、ｐｕｓｈ／ｐｏｐ修飾がオフ（０）、ＳＰ相対修飾がオン（１）である場合を示している。すなわち図３（ｇ）は、メモリに対するＳＰ相対リード（ｌｏａｄ）命令が実行された時の動作とその時の制御信号線の状態を示している。
【０１０７】
図３（ｈ）は、キャッシュリード要求がオン（１）、キャッシュライト要求がオフ（０）、ｐｕｓｈ／ｐｏｐ修飾がオン（１）、ＳＰ相対修飾がオフ（０）である場合を示している。すなわち図３（ｈ）は、メモリに対するｐｏｐ命令が実行された時の動作とその時の制御信号線の状態を示している。
【０１０８】
図３（ｉ）は、キャッシュリード要求がオン（１）、キャッシュライト要求がオフ（０）、ｐｕｓｈ／ｐｏｐ修飾とＳＰ相対修飾のどちらもがオン（１）である場合を示している。通常このような状態は想定されていない。すなわち、通常においてはこのような状態は起らない。
【０１０９】
図３（ｊ）は、キャッシュリード要求とキャッシュライト要求のどちらもがオン（１）である場合を示している。ｐｕｓｈ／ｐｏｐ修飾とＳＰ相対修飾の如何に関わらず、通常このような状態は想定されておない。すなわち、通常においてはこのような状態は起こらない。
【０１１０】
図４は、キャッシュユニット１１７の構成を示すブロック図である。キャッシュユニット１１７は、データ保持部３００及び制御部２００を備えている。データ保持部３００の構成は図５に描かれる。本実施の形態によるキャッシュユニット１１７のデータ保持部３００は、２５６セット、４ウエイの構成を有している。しかしながら、本発明のデータメモリキャッシュ装置は、この構成に限るものではなく、その他の任意の構成を採り得る。
【０１１１】
図６は、図５に示したデータ保持部３００に含まれるラインの構成を示す構成図である。図６に示すように、各ラインは、データを保持するためのデータ領域と、制御に使われる３種の制御ビット（フラグ）を保持するフラグ保持部と、とタグを保持するためのタグ保持部とを有している。
【０１１２】
各データ領域は、主記憶装置１３１に対して一時に読み書きする１６バイト（４ワード、１２８ビット）単位のデータを保持するためのもので、１６バイトの記憶容量を有している。また、各データ領域は、ＭＰＵ１１３に対して同時に読み書きする１ワード（４バイト）単位のデータを保持するための４つの小領域に分割されている。各タグ保持部は、２０ビット幅のタグを保持する。各フラグ保持部は、各１ビットのｖａｌｉｄフラグ（適正フラグ）を保持する適正フラグ保持部、ｄｉｒｔｙフラグ（ダーティフラグ）を保持するダーティフラグ保持部、及びｓｔａｃｋフラグ（スタックフラグ）を保持するスタックフラグ保持部を有している。図７は、これら３種のフラグの取り得る組み合わせと、それらの組み合わせが示す意味とを示している。図７は、後述するキャッシュシステム１００の動作説明の中で参照する。
【０１１３】
図４に戻って、制御部２００はデータ保持部３００を制御するためのものである。制御部２００は、ランダムライト検出部５、ランダムリード検出部６、ＳＰ相対ライト検出部７、ＳＰ相対リード検出部８、プッシュアクセス検出部１１、ポップアクセス検出部１２、アドレス抽出部１３、オフセット算出部１４、転送ビジー判定部１５、データ書き込み部２１、データ読み出し部２２、境界判定部２３、キャッシュミス判定部２４、ライン開放部２５、タグ更新部２６、フラグ設定部２７、リフィル部２８及びライトバック部２９を、主要な要素として備えている。
【０１１４】
ランダムライト検出部５は、ＭＰＵ１１３からのランダムライト命令の実行に伴うデータ書き込みの要求を検出する。より特定的には、ランダムライト検出部５は、ｐｕｓｈ／ｐｏｐ修飾とＳＰ相対修飾とがネゲートされ、キャッシュライト要求がアサートされているときに、ランダムライト命令の実行に伴うデータ書き込みの要求が有ると判断する。
【０１１５】
ランダムリード検出部６は、ＭＰＵ１１３からのランダムリード命令の実行に伴うデータ読み出しの要求を検出する。より特定的には、ランダムリード検出部６は、ｐｕｓｈ／ｐｏｐ修飾とＳＰ相対修飾とがネゲートされ、キャッシュリード要求がアサートされているときに、ランダムリード命令の実行に伴うデータ読み出しの要求が有ると判断する。
【０１１６】
ＳＰ相対ライト検出部７は、ＭＰＵ１１３からのＳＰ相対ライト命令の実行に伴うデータ書き込みの要求を検出する。より特定的には、プッシュアクセス検出部１１は、ＳＰ相対修飾とキャッシュライト要求との双方がアサートされているときに、ＳＰ相対ライト命令の実行に伴うデータ書き込みの要求が有ると判断する。ＳＰ相対リード検出部８は、ＭＰＵ１１３からのＳＰ相対リード命令の実行に伴うデータ読み出しの要求を検出する。より特定的には、ＳＰ相対リード検出部８は、ＳＰ相対修飾とキャッシュリード要求との双方がアサートされているときに、ＳＰ相対リード命令の実行に伴うデータ読み込みの要求が有ると判断する。
【０１１７】
プッシュアクセス検出部１１は、ＭＰＵ１１３からのｐｕｓｈ命令の実行に伴うデータ書き込みの要求を検出する。より特定的には、プッシュアクセス検出部１１は、ｐｕｓｈ／ｐｏｐ修飾とキャッシュライト要求との双方がアサートされているときに、ｐｕｓｈ命令の実行に伴うデータ書き込みの要求が有ると判断する。ポップアクセス検出部１２は、ＭＰＵ１１３からのｐｏｐ命令の実行に伴うデータ読み出しの要求を検出する。より特定的には、ポップアクセス検出部１２は、ｐｕｓｈ／ｐｏｐ修飾とキャッシュリード要求との双方がアサートされているときに、ｐｏｐ命令の実行に伴うデータ読み込みの要求が有ると判断する。
【０１１８】
制御部２００内の以下の各要素は、上述したランダムライト検出部５、ランダムリード検出部６、ＳＰ相対ライト検出部７、ＳＰ相対リード検出部８、プッシュアクセス検出部１１及びポップアクセス検出部１２による検出結果に基づいて、各命令に応じた動作を行う。
【０１１９】
アドレス抽出部１３は、ＭＰＵ１１３が出力する３２ビットのアドレスから、各セット（図５）に対応付けられているアドレスの中位８ビット、タグと対比すべきアドレスの上位２０ビット、各小領域（図６）に対応付けられている下位２ビットを抽出する。ここで下位２ビットは、アドレスの中位８ビットの下位側に隣接する２ビットであり、言い換えると最下位から３及び４ビット目に相当する部分である。
【０１２０】
オフセット算出部１４は、ＭＰＵ１１３がｐｕｓｈ命令又はｐｏｐ命令を実行するときに、ＭＰＵ１１３が出力するアドレスから、予め定められた間隔をもってずれたアドレスであるオフセットアドレスを算出するものである。オフセットアドレスについては後述する。
【０１２１】
転送ビジー判定部１５は、キャッシュユニット１１７と主記憶装置１３１との間でデータを転送するためのデータバスが使用中であるか否かを判定する。より特定的には、転送ビジー判定部１５は、転送制御ユニット１１９が出力する転送ビジー応答がアサートされているときに、データバスが使用中であると判断する。ここでデータバスは、転送制御ユニット１１９が介在する図１の例では転送データバスに相当する。
【０１２２】
データ書き込み部２１は、ＭＰＵ１１３からデータ書き込みの要求があったときに、ＭＰＵ１１３が出力するアドレスに対応する小領域に、ＭＰＵ１１３が出力するデータを書き込む。データ読み出し部２２は、ＭＰＵ１１３からデータ読み出しの要求があったときに、ＭＰＵ１１３が出力するアドレスに対応する小領域からＭＰＵ１１３へ、データを読み出す。
【０１２３】
境界判定部２３は、ＭＰＵ１１３がｐｕｓｈ命令を実行するときに、ＭＰＵ１１３が出力するアドレスに対応する小領域が、当該小領域が属するデータ領域の境界のうち、アドレスが進む方向の反対側の境界（以下において、「ライン境界」と適宜称する）に隣接するか否かを判定する。境界判定部２３は、更に、ＭＰＵ１１３がｐｏｐ命令を実行するときに、ＭＰＵ１１３が出力するアドレスに対応する小領域が、当該小領域が属するデータ領域の境界のうち、アドレスが進む方向の境界（以下において、「ライン境界」と適宜称する）に隣接するか否かを判定する。
【０１２４】
図６において、下方へ至るほどアドレスが上昇するものとすれば、ｐｕｓｈ命令の実行に伴ってＭＰＵ１１３が出力するアドレスが下降する場合、すなわち図６においてアドレスが上方に移動する場合には、ライン境界はデータ領域のアドレスの高い方（図６において下方）に位置する。この場合、図６の右端にハッチングを付して示すように、データ領域に属する４つの小領域のうち、ライン境界に隣接する小領域は、最もアドレスの高い小領域（図６において最も下方に位置する小領域）に該当する。ｐｏｐ命令の実行に伴ってＭＰＵ１１３が出力するアドレスが上昇する場合、すなわち図６においてアドレスが下方に移動する場合には、ライン境界はデータ領域のアドレスの高い方（図６において下方）に位置する。この場合、図６の右端にハッチングを付して示すように、データ領域に属する４つの小領域のうち、ライン境界に隣接する小領域は、最もアドレスの高い小領域（図６において最も下方に位置する小領域）に該当する。すなわち、ライン境界及びライン境界に隣接する小領域は、ｐｕｓｈ命令とｐｏｐ命令との間で共通する。
【０１２５】
キャッシュミス判定部２４は、ＭＰＵ１１３が出力するアドレスに対応するデータ領域について、キャッシュミスが発生しているか否かを判定する。ＭＰＵ１１３は、オフセット算出部１４がオフセットアドレスを算出する場合には、算出されたオフセットアドレスに対応するデータ領域についても、キャッシュミスが発生しているか否かを判定する。ライン開放部２５は、キャッシュミスが判定されたデータ領域を開放する。以下において、データ領域の開放を、当分野の慣例に従って「ラインの開放」と適宜称する。また、データ領域はライン毎に１個ずつ設けられるので、データ領域を適宜「ライン」と称する。なお、ライン開放部２５は、本発明のデータ領域開放部の具体例に該当する。
【０１２６】
フラグ設定部２７は、３種のフラグを肯定側又は否定側に設定する。フラグ設定部２７は、図４に符号ｖ、ｄ、ｓで示すように、３種のフラグに対応した３種のフラグ設定部、すなわち適正フラグ設定部、ダーティフラグ設定部及びスタックフラグ設定部を有している。また、フラグ設定部２７は、対応するライン毎に設けられても良い。
【０１２７】
ライトバック部２９は、ＭＰＵ１１３が出力するアドレスに対応するデータ領域についてキャッシュミスが発生し、その結果当該データ領域が開放される時などにおいて、データ領域から主記憶装置１３１へデータの書き戻し（ライトバック）を行うものである。リフィル部２８は、ＭＰＵ１１３が出力するアドレスに対応するデータ領域についてキャッシュミスが発生し、その結果当該データ領域が開放された後などにおいて、主記憶装置１３１からデータ領域へのデータの読み込み（リフィル）を行うものである。タグ更新部２６は、開放されたデータ領域に対応づけられたタグを、新たなアドレスで更新するものである。
【０１２８】
（２．システムの動作）
以下に、既に引用した図１〜図７をも参照しつつ、本実施の形態によるキャッシュシステム１００が行うキャッシュ制御について説明する。
【０１２９】
（２−１．ランダムリード）
図８は、ＭＰＵ１１３がランダムリード命令を実行するときのキャッシュシステム１００の動作を示すシーケンス図である。図８以下のシーケンス図は、キャッシュユニット１１７の動作の詳細をも同時に示すために、フローチャートを組み込んでいる。以下のシーケンス図において、矢印付きの破線は、ＭＰＵ１１３、キャッシュユニット１１７及び主記憶装置１３１の間でやり取りされる信号を表している。
【０１３０】
ＭＰＵ１１３がランダムリード命令の実行を開始すると、図１に示すＭＰＵ１１３はキャッシュリード要求をオンにし（すなわちアサートし）、同時にリードしたいメモリ領域を示す論理アドレスを仮想アドレスバスに出力する。また、ＭＰＵ１１３は、ＳＰ相対修飾及びｐｕｓｈ／ｐｏｐ修飾をオフにしたまま（すなわちネゲートしたまま）にする。キャッシュユニット１１７のランダムリード検出部６は、これらの信号を受信することにより、ＭＰＵ１１３がランダムリード命令の実行にともなうデータ読み出し要求を行っていることを検出する。それにともない、キャッシュユニット１１７の制御部２００は、キャッシュビジー応答をオンにする。ＭＰＵ１１３はキャッシュビジー応答がオンになったことを確認してキャッシュリード要求をオフにする（すなわちネゲートする）。なお、本明細書では、制御信号をアサートすることを、「オンする」と適宜表現し、ネゲートすることを、「オフする」と適宜表現する。
【０１３１】
ＭＭＵ１１５は仮想アドレスバスの上位２０ビットを物理アドレスの上位２０ビットに変換し、実アドレスバスに出力する。仮想アドレスバスの下位１２ビットはそのまま実アドレスバスに出力される。
【０１３２】
上述したように、制御部２００は、キャッシュリード要求信号を受け取るとまず、キャッシュビジー応答信号をオンにする。次に、ステップＳ１において、キャッシュユニット１１７のキャッシュミス判定部２４は、アドレス抽出部１３が抽出した実アドレスの中位８ビットをキーとして各ウエイ中の１つのセットを選択し、選択されたセットのタグの値を読み出す。
【０１３３】
図５に例示したように、本実施の形態によるキャッシュユニット１１７は、２５６セット、４ウエイの構成を有するものと仮定している。従って、例えばアドレスバスの上位２０ビットが２進数表現で「０００１  １００１  １１００  ００００  １１１１（１６進数表現で０ｘ１９Ｃ０Ｆ）」であり、例えばアドレスバスの中位８ビットが２進数表現で「００１０  １０００（１６進数表現で０ｘ２８、１０進数表現で『４０』）」であったとする。この場合には、キャッシュミス判定部２４は、『セット４０』に含まれる４つのラインのいずれかのラインを、キャッシュに使用する可能性のあるラインとして選択する。
【０１３４】
次にキャッシュミス判定部２４は、実アドレスバスの上位２０ビットと読み出したタグの値（２０ビット）を比較し、一致したものがあればキャッシュはヒットした、すなわちキャッシュミスは発生していないと判断する（Ｓ１でＹｅｓ）。上記の例では、アドレスバスの上位２０ビットが「０ｘ１９Ｃ０Ｆ」であるので、セット４０に含まれるラインに含まれるタグのいずれかの値がこれと同じ「０ｘ１９Ｃ０Ｆ」であるならば、キャッシュミス判定部２４は、キャッシュがヒットしたと判定する。
【０１３５】
このキャッシュがヒットしたと判断された時（Ｓ１でＹｅｓ）の動作（Ｓ２〜Ｓ４、Ｓ２１、Ｓ２４）を、図９（ｂ）〜（ｇ）「動作」の左欄「ランダムリード」に示す。また、キャッシュがヒットし（Ｓ１でＹｅｓ）、且つこのラインのｖａｌｉｄフラグが１の時（Ｓ２でＹｅｓ）の動作（Ｓ２１、Ｓ２４）を図９（ｂ）〜（ｅ）に示す。この時の状態は図７（ｅ）〜（ｈ）に相当する。この時のラインの内容は主記憶装置１３１の内容と一致しているか主記憶装置１３１の内容よりも新しいので、データ読み出し部２２は、このラインに含まれる全１６バイトから実アドレスバスの下位４ビットに該当するデータを読み出し、３２ビット幅のデータバスに出力する（Ｓ３）。その後、制御部２００は、キャッシュビジー応答信号をオフにする。
【０１３６】
またこの時、ｓｔａｃｋフラグが１ならば、動作状態は図７（ｆ）、（ｈ）の状態に相当し、図９（ｃ）、（ｅ）に示す通り、フラグ設定部２７はｓｔａｃｋフラグを０にする（Ｓ３）。ＭＰＵ１１３はキャッシュビジー応答信号がオフになったことを検出して、データバスに送り出されるデータを読み込む（Ｓ１０）。
【０１３７】
キャッシュはヒットしたがｖａｌｉｄフラグが０の時（Ｓ２でＮｏ）の動作（Ｓ２１、Ｓ２４）を図９（ｆ）、（ｇ）に示す。この時の状態は図７（ａ）、（ｂ）に相当する。この状態は、たまたまアドレスバスの上位２０ビットの値とタグの内容は一致したが、既にラインは開放されており、実際にはキャッシュされていなかったことに相当する。即ちこの状態では、主記憶装置１３１の内容の方がラインの内容よりも新しいので、制御部２００は、対応する主記憶装置１３１の内容をキャッシュメモリに読み込むリフィルを行うこと（Ｓ２１）が必要になる。リフィル部２８がリフィルを行った（Ｓ２１）後、フラグ設定部２７は、ｖａｌｉｄフラグを１にセットし（Ｓ２４）、もしもｓｔａｃｋフラグが１になっていれば０にセットする（Ｓ３）。
【０１３８】
以上の動作によって、図９（ｂ）と同じ状態になるので、以後図９（ｂ）と同様に、データ読み出し部２２は、このラインに含まれる全１６バイトから実アドレスバスの下位４ビットに該当するデータを読み出し（Ｓ４）、３２ビット幅のデータバスに出力する。その後、制御部２００は、キャッシュビジー応答信号をオフにする。なお、リフィル（Ｓ２１）の詳細については、次のキャッシュミスについての説明の中で説明する。
【０１３９】
一方、キャッシュミス判定部２４は、実アドレスバスの上位２０ビットと読み出したタグの値（２０ビット）を比較した結果、選択したセットに含まれるいずれのウエイにも一致したものがなければ、キャッシュはヒットしなかった、すなわちキャッシュミスが生じていると判断する（Ｓ１）。この時の動作（Ｓ３００、Ｓ２１〜Ｓ２３、Ｓ２、Ｓ３）を図９（ａ）「動作」の左欄「ランダムリード」に示す。
【０１４０】
キャッシュミスの発生が判定されると、まず最初に、ライン開放部２５は同一セット内にある４つのラインから１つを選択し、ラインの開放を行う（Ｓ３００）。開放するラインの選択（Ｓ３１）には例えば、ＬＲＵアルゴリズム（Ｌｅａｓｔ  Ｒｅｃｅｎｔｌｙ  Ｕｓｅｄ）」が使用される。これを実行するのが図５の各セットに含まれる「ＬＲＵ式リプレーサ」である。すなわち、ライン開放部２５は、ＬＲＵ式リプレーサを用いてラインの選択を行う。このアルゴリズムは名前の通り、最近、最も使われていないもの、すなわち使われる頻度が少なかったものを開放する方法である。その内容は本発明の本質的部分と直接関係しないので説明を省略する。また必ずしもこのアルゴリズムに限るものではなく、他のアルゴリズムで開放するラインを決定しても勿論構わない。
【０１４１】
次にこのようにして選択したラインの開放を行う。ラインを開放する動作は各ラインの状態、即ちその時そのラインの各フラグの値によって示される状態によって異なり、この内容は図１０「動作」の右欄に示している。
【０１４２】
図１０（ａ）の状態はそのラインが主記憶装置１３１のキャッシュとして割り付けられていない、即ち開放されていることを意味する。このため、ライン開放部２５は、このラインを改めで開放する必要はない（Ｓ３１でＮｏ）。この状態は通常ｖａｌｉｄフラグが０であることで示される。
【０１４３】
図１０（ｂ）、（ｃ）の状態では、図７（ｅ）、（ｆ）に示すように、ラインの内容と主記憶装置１３１の内容は一致している（Ｓ３２でＹｅｓ、Ｓ３３でＮｏ）。このため、ライン開放部２５は、ライトバックする必要はなく、只そのラインが開放されたことを示すためにｖａｌｉｄフラグを０にセットするだけで良い（Ｓ３６）。ライン開放部２５は、例えばフラグ設定部２７を用いて各種フラグの設定を行うことができる。また図１０（ｃ）のようにｓｔａｃｋフラグが１になっており、ｓｔａｃｋ（スタック）に割り付けられていたことが示されているならば、ライン開放部２５は、そのラインの開放に際し、ｓｔａｃｋフラグも０にセットする（Ｓ３６）。
【０１４４】
図１０（ｄ）、（ｅ）の状態では、ｄｉｒｔｙフラグが１になっており（Ｓ３３でＹｅｓ）、図７（ｇ）、（ｈ）に示すようにそのラインの内容は主記憶装置１３１の内容よりも新しく更新されている。このため、ライン開放部２５は、ラインの内容を主記憶装置１３１にライトバックすることが必要になる。ライン開放部２５は、例えばライトバック部２９を起動して、ライトバックを実行することができる。このライトバックは、図１に示す転送制御ユニット１１９を使いることにより、転送データバスと外部データバスを介して高速且つ自動的に行われる。しかしながら、この方法についても本発明の本質と直接関係しないので説明を省略する。ライン開放部２５は、ライトバックを行った後、一旦このラインが開放されたことを示すために、ｖａｌｉｄフラグとｄｉｒｔｙフラグを０にセットする（Ｓ３６）。
【０１４５】
図１０（ｅ）に示すｖａｌｉｄフラグが１（Ｓ３２でＹｅｓ）、ｄｉｒｔｙフラグが１で（Ｓ３３でＹｅｓ）、ｓｔａｃｋフラグも１である状態は、図７（ｈ）の状態に相当する。この状態は、このラインがスタックに割り付けられていたことを意味する。したがって、この場合は前記と同様、ライン開放部２５は、ラインを開放するに際しスタックへの割り付けを解除すると共にｓｔａｃｋフラグも０にセットする（Ｓ３６）。
【０１４６】
図１０（ｆ）、（ｇ）に示すｖａｌｉｄフラグが０である状態は、図７（ａ）〜（ｆ）の状態に相当する。この状態では、たまたまタグの値は一致したが、既にこのラインはキャッシュとして使われていない、すなわち開放されているので、ライン開放部２５はライトバックを行う必要はない。もしもｓｔａｃｋフラグが１になっておれば、ライン開放部２５は、ラインの開放に際しｓｔａｃｋフラグを０にセットすることだけを実行する（Ｓ３６）。
【０１４７】
以上で１つのラインの開放が終り、次に、この開放したラインをキャッシュとして利用するために、リフィル部２８は、要求されたアドレスを含む１６バイトの主記憶装置１３１の内容をこのラインにリフィルする。このリフィルも、図１に示す転送制御ユニット１１９を使い、転送データバスと外部データバスを介して高速且つ自動的に行われるが、この方法についても本発明の本質と直接関係しないので説明を省略する。
【０１４８】
タグ更新部２６は、リフィルが行われたラインに対応付けられたタグに、実アドレスの上位２０ビットを書き込む（Ｓ２２）。続いて、フラグ設定部２７は、ｖａｌｉｄフラグを１、ｄｉｒｔｙフラグを０、ｓｔａｃｋフラグを０、即ち図７（ｅ）の状態にセットする（Ｓ２３）。
【０１４９】
ステップＳ２３が終了した状態は、図９（ｂ）の状態と同じであるので、制御部２００は、それ以後図９（ｂ）と同じ動作を行う（Ｓ２〜Ｓ４）。即ち、データ読み出し部２２は、タグの更新が行われたラインに含まれる全１６バイトから実アドレスバスの下位４ビットに該当する小領域のデータを読み出し、３２ビット幅のデータバスに出力する（Ｓ３）。その後、制御部２００は、キャッシュビジー応答信号をオフにする。ＭＰＵ１１３はキャッシュビジー応答信号がオフになったことを検知して、データバスを通じて送られるデータの内容を読み込む（Ｓ１０）。
【０１５０】
（２−２．ランダムライト）
図１１は、ＭＰＵ１１３がランダムライト命令を実行するときのキャッシュシステム１００の動作を示すシーケンス図である。ＭＰＵ１１３がランダムライト命令の実行を開始すると、図１に示すＭＰＵ１１３はキャッシュライト要求をオンにし、同時にライトしたいメモリ領域を示す論理アドレスを仮想アドレスバスに出力し、更にライトしたいデータを３２ビット幅のデータバスに出力する。また、ＭＰＵ１１３は、ＳＰ相対修飾及びｐｕｓｈ／ｐｏｐ修飾をオフにしたままにする。キャッシュユニット１１７のランダムライト検出部５は、これらの信号を受信することにより、ＭＰＵ１１３がランダムライト命令の実行にともなうデータ書き込み要求を行っていることを検出する。それにともない、制御部２００は、キャッシュビジー応答をオンにする。ＭＰＵ１１３はキャッシュビジー応答がオンになったことを確認してキャッシュライト要求をオフにする。
【０１５１】
続いてランダムリードと同様に、キャッシュミス判定部２４は、セットとウエイの選択と、キャッシュヒットまたはキャッシュミスの判断とを行う（Ｓ１）。これについては既に説明したのでここでは説明を省略する。
【０１５２】
キャッシュがヒットしたと判断された時（Ｓ１でＹｅｓ）の動作（Ｓ２、Ｓ１１、Ｓ１２）を、図９（ｂ）〜（ｇ）「動作」の右欄「ランダムライト」に示す。また、キャッシュがヒットし（Ｓ１でＹｅｓ）、且つこのラインのｖａｌｉｄフラグが１の時（Ｓ２でＹｅｓ）の動作（Ｓ１１、Ｓ１２）を図９（ｂ）〜（ｅ）に示す。この時の状態は図７（ｅ）〜（ｈ）に相当する。この時のラインの内容は主記憶装置１３１の内容と一致しているか主記憶装置１３１の内容よりも新しいので、データ書き込み部２１は、このラインの実アドレスバス下位４ビットに相当する領域に、データバスの内容、すなわちデータバスを通じて送られてきたデータを書き込む（Ｓ１１）。続いて、フラグ設定部２７は、まだｄｉｒｔｙフラグが１になっていなければ図９（ｂ）、（ｃ）に示すように、ｄｉｒｔｙフラグを１にセットする（Ｓ１２）。その後、制御部２００は、キャッシュビジー応答信号をオフにする。
【０１５３】
またこの時、ｓｔａｃｋフラグが１ならば、動作状態は図７（ｆ）、（ｈ）の状態に相当する。この場合、図９（ｃ）、（ｅ）に示す通り、フラグ設定部２７は、ｓｔａｃｋフラグを０にする。ＭＰＵ１１３はキャッシュビジー応答信号がオフになったことを検出し、ランダムライトが終了したことを知る。
【０１５４】
キャッシュはヒットしたがｖａｌｉｄフラグが０の時（Ｓ２でＮｏ）の動作（Ｓ２１、Ｓ２４）を図９（ｆ）、（ｇ）に示す。この時の状態は図７（ａ）、（ｂ）に相当する。この状態は、たまたまアドレスバスの上位２０ビットの値とタグの内容は一致したが、既にラインは開放されており、実際にはキャッシュされていなかったことに相当する。即ち、この状態では、主記憶装置１３１の内容の方がラインの内容よりも新しいので、対応する主記憶装置１３１の内容をキャッシュメモリに読み込むリフィルを行うこと（Ｓ２１）が必要になる。リフィル部２８がリフィルを行った（Ｓ２１）後、フラグ設定部２７は、ｖａｌｉｄフラグを１にセットする（Ｓ２４）。次に、データ書き込み部２１は、このラインの実アドレスバス下位４ビットに該当する領域にデータバスの内容を書き込む（Ｓ１１）。その後、フラグ設定部２７は、ｄｉｒｔｙフラグを１にセットする（Ｓ１２）。
【０１５５】
もしも動作状態が、図７（ｂ）の状態に相当し、ｓｔａｃｋフラグが１になっておれば、図９（ｇ）に示す通り、制御部２００は、ラインのスタックへの割り付けを解除する。すなわち、フラグ設定部２７はｓｔａｃｋフラグを０にセットする（Ｓ１２）。
【０１５６】
一方、ステップＳ１においてキャッシュミスと判断された時（Ｓ１でＮｏ）の動作を図９（ａ）「動作」の右欄「ランダムライト」に示す。ライン開放部２５は、新しくキャッシュに使用するラインを確保するためにアドレスバスの中位８ビットで選択したセットから、ＬＲＵ式リプレーサが開放するラインを決定して、決定したラインを開放し（Ｓ３００）、開放したラインを新たにキャッシュとして使用するために、リフィルを行う（Ｓ２１）。この動作は既に説明したランダムリードにおけるライン開放と同じであるから、ここでは説明を省略する。
【０１５７】
これらの動作によってラインのデータ領域の内容は主記憶装置１３１の内容と一致し、動作状態は図９（ｂ）の状態になるので、制御部２００は、以後図９（ｂ）と同じ動作を行う。即ち、データ書き込み部２１は、リフィルされたラインの実アドレスバス下位４ビットに該当する小領域にデータバスの内容を書き込む。続いて、制御部２００はキャッシュビジー応答信号をオフにする。ＭＰＵ１１３はキャッシュビジー応答信号がオフになったことを検出して、ランダムライトが終了したことを知る。
【０１５８】
（２−３．ＳＰ相対リード）
図１２は、ＭＰＵ１１３がＳＰ相対リード命令を実行するときのキャッシュシステム１００の動作を示すシーケンス図である。ＭＰＵ１１３がＳＰ相対リード命令の実行を開始すると、ＭＰＵ１１３はキャッシュリード要求をオンにし、同時にリードしたいメモリ領域を示す論理アドレスを仮想アドレスバスに出力する。同時にＭＰＵ１１３はＳＰ相対修飾信号をオンにする。キャッシュユニット１１７のＳＰ相対リード検出部８は、これらの信号を受信することにより、ＭＰＵ１１３がＳＰ相対リード命令の実行にともなうデータ読み出し要求を行っていることを検出する。この点において、ＳＰ相対リードは、前記ランダムリードとはその動作が異なる。それにともない、キャッシュユニット１１７の制御部２００は、キャッシュビジー応答をオンにする。ＭＰＵ１１３はキャッシュビジー応答がオンになったことを確認してキャッシュリード要求をオフにする。
【０１５９】
ＭＭＵ１１５は仮想アドレスバスの上位２０ビットを物理アドレスの上位２０ビットに変換し、実アドレスバスに出力する。仮想アドレスバスの下位１２ビットはそのまま実アドレスバスに出力される。
【０１６０】
上述したように、制御部２００は、キャッシュリード要求信号を受け取るとまず、キャッシュビジー応答信号をオンにする。次にステップＳ１において、キャッシュミス判定部２４は、アドレス抽出部１３が抽出した実アドレスの中位８ビットをキーとして各ウエイ中の１つのセットを選択し、選択されたセットのタグの値を読み出す。キャッシュミス判定部２４は、更に、キャッシュのヒット又はミスを判断する。これらの動作はランダムリードでの動作と同様である。
【０１６１】
キャッシュがヒットし（Ｓ１でＹｅｓ）、且つこのラインのｖａｌｉｄフラグが１（Ｓ２でＹｅｓ）ならば、データ読み出し部２２は、このラインから実アドレスバスの下位４ビットに該当するデータを読み出し、３２ビット幅のデータバスに出力する（Ｓ４）。その後、制御部２００は、キャッシュビジー応答信号をオフにする。以上の動作を、図１３（ｂ）〜（ｅ）「動作」の左欄「ＳＰ相対リード」に示す。ＭＰＵ１１３は、キャッシュビジー応答信号がオフになったことを検出して、データバスの内容を読み込む（Ｓ１０）。
【０１６２】
キャッシュはヒットした（Ｓ１でＹｅｓ）が、ｖａｌｉｄフラグが０（Ｓ２でＮｏ）ならば、そのことは、前記の通り、たまたまアドレスバスの上位２０ビットの値とあるラインのタグの内容が一致はしたが、既にそのラインは開放されており、キャッシュされていなかったことを意味する。従ってこの場合には、リフィル部２８がリフィルを行った（Ｓ２１）後、フラグ設定部２７がｖａｌｉｄフラグを１にセットする（Ｓ２４）。その後、制御部２００は、図１３（ｂ）と同じ動作を行う。この時の動作を図１３（ｆ）、（ｇ）の左欄「ＳＰ相対リード」に示す。
【０１６３】
一方、キャッシュミス判定部２４は、実アドレスバスの上位２０ビットと読み出したタグの値（２０ビット）を比較した結果、アドレスバスの中位８ビットの値によって選択したセット中のいずれのウエイにも一致したものがなければ、キャッシュはヒットしなかった（キャッシュミス）と判断し、同一セット内にある４つのラインから１つを選択してラインの開放を行う（Ｓ３０１）。ステップＳ３０１では、ステップＳ３００（図８）とは異なり、フラグ設定部２７はｓｔａｃｋフラグを０にセットする（Ｓ３６）ことなく、ｖａｌｉｄフラグのみを０に設定する（Ｓ３７）。その他においては、ステップＳ３０１の処理はステップＳ３００と同様である。
【０１６４】
その後、リフィル部２８は、開放されたラインに対して該当する主記憶装置１３１のメモリ領域からその内容をリフィルする（Ｓ２１）。続いて、タグ更新部２６は、リフィルされたラインに対応づけられたタグを更新する（Ｓ２２）。その後、フラグ設定部２７は、ｖａｌｉｄフラグを１にセットする（Ｓ２４）。その後、制御部２００は図１３（ｂ）と同じ動作を行う。この時の動作を図１３（ａ）の左欄「ＳＰ相対リード」に示す。
【０１６５】
図１３（ａ）〜（ｇ）に示すいずれの状態でもｓｔａｃｋフラグの設定は行われないので、ｓｔａｃｋフラグの状態は元の状態のまま維持される。この点においてもＳＰ相対リードは、ランダムリードとはその動作を異にしている。
【０１６６】
（２−４．ＳＰ相対ライト）
図１４は、ＭＰＵ１１３がＳＰ相対ライト命令を実行するときのキャッシュシステム１００の動作を示すシーケンス図である。ＭＰＵ１１３がＳＰ相対ライト命令の実行を開始すると、ＭＰＵ１１３はキャッシュライト要求をオンにし、同時にリードしたいメモリ領域を示す論理アドレスを仮想アドレスバスに出力し、更にライトしたいデータを３２ビット幅のデータバスに出力する。同時にＭＰＵ１１３はＳＰ相対修飾信号をオンにする。キャッシュユニット１１７のＳＰ相対ライト検出部７は、これらの信号を受信することにより、ＭＰＵ１１３がＳＰ相対ライト命令の実行にともなうデータ書き込み要求を行っていることを検出する。この点において、前記ランダムライト実行時の動作とは異なる。それにともない、キャッシュユニット１１７の制御部２００は、キャッシュビジー応答をオンにする。ＭＰＵ１１３はキャッシュビジー応答がオンになったことを確認してキャッシュリード要求をオフにする。
【０１６７】
続けてキャッシュミス判定部２４は、ＳＰ相対リードにおけるステップＳ１と同様の動作によって、セットとウエイの選択と、キャッシュヒットまたはキャッシュミスを判断する（Ｓ１）。キャッシュがヒットしたと判断された時（Ｓ１でＮｏ）の動作を、図１３（ｂ）〜（ｇ）「動作」の右欄「ＳＰ相対ライト」に示す。
【０１６８】
キャッシュがヒットし（Ｓ１でＹｅｓ）且つこのラインのｖａｌｉｄフラグが１（Ｓ２でＹｅｓ）ならば、データ書き込み部２１は、このラインの実アドレスバス下位４ビットに相当する領域にデータバスの内容を書き込む（Ｓ１１）。その後、フラグ設定部２７は、まだｄｉｒｔｙフラグが１になっていなければ図１３（ｂ）、（ｃ）に示すように、ｄｉｒｔｙフラグを１にセットする（Ｓ１３）。その後、制御部２００はキャッシュビジー応答信号をオフにする。この時の動作を図１３（ｂ）〜（ｅ）「動作」の右欄「ＳＰ相対ライト」に示す。ＭＰＵ１１３はキャッシュビジー応答信号がオフになったことを検出して、ＳＰ相対ライトの終了したことを知る。
【０１６９】
キャッシュはヒットした（Ｓ１でＹｅｓ）がｖａｌｉｄフラグが０（Ｓ２でＮｏ）ならば、そのことは、前記の通り、たまたまアドレスバスの上位２０ビットの値とあるラインのタグの内容が一致はしたが、既にそのラインは開放されており、キャッシュされていなかったことを意味する。従ってこの場合には、リフィル部２８がリフィルを行った（Ｓ２１）後、フラグ設定部２７がｖａｌｉｄフラグを１にセットする（Ｓ２４）。その後、制御部２００は、図１３（ｂ）と同じ動作を行う。この時の動作を図１３（ｆ）、（ｇ）の右欄「ＳＰ相対ライト」に示す。
【０１７０】
一方、キャッシュミス判定部２４は、実アドレスバスの上位２０ビットと読み出したタグの値（２０ビット）を比較した結果、アドレスバスの中位８ビットの値によって選択したセット中のいずれのウエイにも一致したものがなければ、キャッシュはヒットしなかった（キャッシュミス）と判断し、同一セット内にある４つのラインから１つを選択してラインの開放を行う（Ｓ３０１）。
【０１７１】
その後、リフィル部２８は、開放されたラインに対して該当する主記憶装置１３１のメモリ領域からその内容をリフィルする（Ｓ２１）。続いて、タグ更新部２６は、リフィルされたラインに対応づけられたタグを更新する（Ｓ２２）。その後、フラグ設定部２７は、ｖａｌｉｄフラグを１にセットする（Ｓ２４）。その後、制御部２００は図１３（ｂ）と同じ動作を行う。この時の動作を図１３（ａ）の右欄「ＳＰ相対ライト」に示す。
【０１７２】
図１３（ａ）〜（ｇ）に示すいずれの状態でもｓｔａｃｋフラグの設定は行われないので、ｓｔａｃｋフラグの状態は元の状態のまま維持される。この点においてもＳＰ相対ライトは、前記ランダムライトとはその動作を異にし、前記ＳＰ相対リードとは同じくしている。
【０１７３】
（２−５．ｐｏｐ）
図１５は、ＭＰＵ１１３がｐｏｐ命令を実行するときのキャッシュシステム１００の動作を示すシーケンス図である。ＭＰＵ１１３がｐｏｐ命令を実行すると、ＭＰＵ１１３はキャッシュリード要求をオンにし、同時にｐｏｐしたいメモリ領域を示す論理アドレスを仮想アドレスバスに出力する。同時にＭＰＵ１１３はｐｕｓｈ／ｐｏｐ修飾信号をオンにする。キャッシュユニット１１７のポップアクセス検出部１２は、これらの信号を受信することにより、ＭＰＵ１１３がｐｏｐ命令の実行にともなうデータ読み出し要求を行っていることを検出する。この点において、ｐｏｐは、前記ランダムリード及びＳＰ相対リードとは、その動作が異なる。それにともない、キャッシュユニット１１７の制御部２００は、キャッシュビジー応答をオンにする。ＭＰＵ１１３はキャッシュビジー応答がオンになったことを確認してキャッシュリード要求とｐｕｓｈ／ｐｏｐ修飾信号をオフにする。
【０１７４】
ＭＭＵ１１５は仮想アドレスバスの上位２０ビットを物理アドレスの上位２０ビットに変換し、実アドレスバスに出力する。仮想アドレスバスの下位１２ビットはそのまま実アドレスバスに出力される。
【０１７５】
上述したように、制御部２００は、キャッシュリード要求信号を受け取るとまず、キャッシュビジー応答信号をオンにする。次にステップＳ１において、キャッシュミス判定部２４は、アドレス抽出部１３が抽出した実アドレスの中位８ビットをキーとして各ウエイ中の１つのセットを選択し、選択されたセットのタグの値を読み出し、キャッシュのヒット又はミスを判定する。これらの動作はランダムリードやＳＰ相対リードでの動作と同様であるから説明を省略する。
【０１７６】
実アドレスバスの上位２０ビットの値と選択したセット中の或るラインのタグの内容とが一致し（Ｓ１でＹｅｓ；すなわちキャッシュがヒットし）、且つこのラインのｖａｌｉｄフラグが１（Ｓ２でＹｅｓ）ならば、制御部２００は図１６（ｂ）〜（ｅ）の動作を行う。このとき、境界判定部２３の判定（Ｓ５１）により、実アドレスバスの第３ビット（下の桁から第４番目のビット、即ち２の３乗の桁を表すビット、以後同様）と第２ビット（下の桁から第３番目のビット、即ち２の２乗の桁を表すビット、以後同様）の両方が１（Ｓ５１でＹｅｓ）ならば、制御部２００は図１６（ｂ）〜（ｅ）の動作左欄「最上位アドレスからｐｏｐ」の動作を行う。即ち、データ読み出し部２２は、このラインから実アドレスバスの下位４ビットに該当するデータを読み出し、３２ビット幅のデータバスに出力する（Ｓ４）。その後、制御部２００はキャッシュビジー応答信号をオフにする。
【０１７７】
次に、フラグ設定部２７はこのラインのｖａｌｉｄフラグを０にし（Ｓ５２）、このラインを開放する。最上位アドレスからデータがｐｏｐされたことによって、このスタックが空になったためである。フラグ設定部２７はｖａｌｉｄフラグを０にセットして、ラインを開放するが、この時にライトバック部２９はライトバックを行わない。このラインの内容は再度参照されることはなく、ライトバックして主記憶に保存する必要がないからである。
【０１７８】
また図１６（ｂ）、（ｄ）の動作左欄「最上位アドレスからｐｏｐ」に示す通り、このラインのｓｔａｃｋフラグがオフになっていれば、フラグ設定部２７はｓｔａｃｋフラグをオンにする（Ｓ５２）。このラインがスタックとして使用されていたことを記憶しておくためである。
【０１７９】
また図１６（ｄ）、（ｅ）の動作左欄「最上位アドレスからｐｏｐ」に示す通り、このラインのｄｉｒｔｙフラグがオンになっていれば、フラグ設定部２７はｄｉｒｔｙフラグをオフにする（Ｓ５２）。このラインは開放されるので、ｄｉｒｔｙフラグは意味を持たないからである。また、フラグ設定部２７は、ステップＳ５２において、ｖａｌｉｄフラグをオフすることなく、すなわちラインの開放を行うことなく、ｄｉｒｔｙフラグのみをオフしてもよい。それにより、ステップＳ３００又はＳ３０１により、対応するラインを開放する必要が後に生じたときに、ライトバック（Ｓ３４）を禁止することができる（Ｓ３３でＮｏ）。
【０１８０】
実アドレスバスの第３ビットと第２ビットのいずれか少なくとも一方が０（Ｓ５１でＮｏ）ならば、制御部２００は、図１６（ｂ）〜（ｅ）の動作右欄「最上位アドレス以外からｐｏｐ」の動作を行う。即ち、データ読み出し部２２は、このラインから実アドレスバスの下位４ビットに該当するデータを読み出し、３２ビット幅のデータバスに出力する（Ｓ４）。その後、制御部２００はキャッシュビジー応答信号をオフにする。ＭＰＵ１１３は、キャッシュビジー応答信号がオフになったことを検知して、３２ビット幅データバスの内容であるデータを読み込む（Ｓ１０）。この時、フラグ設定部２７はフラグの操作等を行わない。
【０１８１】
実アドレスバスの上位２０ビットの値と選択したセット中の或るラインのタグの内容とが一致した（Ｓ１でＹｅｓ）が、このラインのｖａｌｉｄフラグが０（Ｓ２でＮｏ）ならば、制御部２００は図１６（ｆ）（ｇ）の動作を行う。この場合は、たまたま選択したセット中の或るラインのタグの内容と実アドレスバスの上位２０ビットの値が一致したが、既にこのラインは開放されていたことに該当するので、リフィル部２８はリフィルを行う（Ｓ２１）。境界判定部２３の判定（Ｓ５５）により、実アドレスバスの第３ビットと第２ビットの両方が１（Ｓ５５でＹｅｓ）ならば、制御部２００は図１６（ｆ）（ｇ）の動作左欄「最上位アドレスからｐｏｐ」の動作を行う。
【０１８２】
即ち、リフィル部２８は、このラインに対して主記憶装置から該当するアドレスに記憶される情報のリフィルを行い、フラグ設定部２７はｖａｌｉｄフラグを１にする（Ｓ２５）。そしてデータ読み出し部２２は、このラインから実アドレスバスの下位４ビットに該当するデータを読み出し、３２ビット幅のデータバスに出力する（Ｓ４）。その後、制御部２００はキャッシュビジー応答信号をオフにする。
【０１８３】
もしもこの時ｓｔａｃｋフラグが０ならば、フラグ設定部２７はｓｔａｃｋフラグを１にする（図１６（ｆ）動作左欄「最上位アドレスからｐｏｐ」；Ｓ５３）。更に、フラグ設定部２７はｖａｌｉｄフラグを０に戻す（図１６（ｆ）（ｇ）動作左欄「最上位アドレスからｐｏｐ」；Ｓ５３）。最上位アドレスからのｐｏｐによって、このラインを開放するためである。
【０１８４】
実アドレスバスの第３ビットと第２ビットの何れか少なくとも一方が０（Ｓ５５でＮｏ）ならば、制御部２００は図１６（ｆ）（ｇ）の動作右欄「最上位アドレス以外からｐｏｐ」の動作を行う。即ち、この場合においてもフラグ設定部２７は、このラインに対して主記憶装置から該当するアドレスに記憶している情報のリフィルを実行し（Ｓ２１）、フラグ設定部２７はｖａｌｉｄフラグを１にする（Ｓ２５）。そしてデータ読み出し部２２は、このラインから実アドレスバスの下位４ビットに該当するデータを読み出し、３２ビット幅のデータバスに出力する（Ｓ４）。その後、制御部２００はキャッシュビジー応答信号をオフにする。その後にフラグ設定部２７はフラグの操作等を行わない。なお、図１５では、ステップＳ２１及びＳ２５の処理がステップＳ５５の判定より前に実行される例を描いているが、ステップＳ５５の後に、この判定の如何に拘わらず、ステップＳ２１及びＳ２５の処理を行っても良い。
【０１８５】
実アドレスバスの上位２０ビットの値と選択したセット中のラインのタグの内容とが一致するものがなければ（Ｓ１でＮｏ）、キャッシュミス判定部２４はキャッシュはミスしたと判断し、それに基づき制御部２００は図１６（ａ）の動作を行う。即ち、ライン開放部２５は、このセットからＬＲＵアルゴリズムによって１つのラインを開放し（Ｓ３０１）、リフィル部２８は、そのラインに対して主記憶装置から該当するアドレスに記憶している情報のリフィルを実行する。その後、タグ更新部２６はリフィルされたラインに対応づけられたタグを更新する。続いて、フラグ設定部２７は、当該ラインに対応するｖａｌｉｄフラグを１に、ｄｉｒｔｙフラグを０にセットする（Ｓ２５）。次に、データ読み出し部２２は、このラインから実アドレスバスの下位４ビットに該当するデータを読み出し、３２ビット幅のデータバスに出力する（Ｓ４）。その後、制御部２００はキャッシュビジー応答信号をオフにする（以上、図１６（ａ））。
【０１８６】
更に、境界判定部２３の判定（Ｓ５６）により、実アドレスバスの第３ビットと第２ビットの両方が１（Ｓ５６でＹｅｓ）ならば、フラグ設定部２７はｓｔａｃｋフラグを１にする（図１６（ａ）動作左欄「最上位アドレスからｐｏｐ」；Ｓ５４）。更にまたこの時は、フラグ設定部２７はｖａｌｉｄフラグを０に戻す（図１６（ａ）動作左欄「最上位アドレスからｐｏｐ」；Ｓ５４）。最上位アドレスからのｐｏｐによって、このラインを開放するためである。
【０１８７】
以上のように、ＭＰＵ１１３がｐｏｐ命令を実行する場合に、データの読み出しの対象である小領域がライン境界にある（Ｓ５１、Ｓ５５、Ｓ５６でＹｅｓ）ときには、制御部２００は、このラインが保持するデータを主記憶装置１３１へライトバックすることなく、このラインを開放する（すなわち、Ｓ５２、Ｓ５３、Ｓ５４でｖ＝０に設定する）。ｐｏｐ命令による読み出しによってもはや再度読み出すことのないデータを保持するラインは、開放しても支障のないものであり、且つこのラインが保持するデータは無用なデータである以上、主記憶装置１３１へライトバックする必要もないものである。このように制御部２００は、無用なデータを保持するラインをデータのライトバックなしで開放するので、ＭＰＵ１１３の動作に支障をもたらすことなく、メモリアクセス速度を向上させる。
【０１８８】
また、制御部２００は、読み出しの対象である小領域がライン境界にない場合（Ｓ５１、Ｓ５５、Ｓ５６でＮｏ）にはライン開放を行わない。このため、ＭＰＵ１１３はｐｏｐ命令によるデータの読み出しを、ライン境界に隣接する小領域に対応するアドレスだけでなく、ライン境界に隣接しない小領域に対応するアドレスで終了させることができる。
【０１８９】
また、既に述べたように、ステップＳ５２において、ｖａｌｉｄフラグを０に設定することなく、ｄｉｒｔｙフラグを０に設定することも可能である。それにより、ＭＰＵ１１３が他の命令を実行する際などにおいて、制御部２００は、キャッシュミスに伴うライン開放（Ｓ３００、Ｓ３０１）を行うときに、当該ラインのデータの主記憶装置１３１へのライトバック（Ｓ３４）をスキップする。その結果、メモリアクセス速度が向上する。
【０１９０】
図１７に示すように、以上の動作の後或いは途中において、もしも転送ビジー応答信号がオフならば、転送データバスが空いているので、制御部２００はもうすぐ必要となる可能性のあるメモリについて予めリフィルを実行する。それにより、メモリアクセス速度を更に高めることができる。具体的には、転送ビジー判定部１５が転送ビジー応答信号がオフであることを検出すると（Ｓ６１でＹｅｓ）、制御部２００は、ラインに含まれるタグの値とそのラインを含むセットによって示される実アドレスの上位２８ビットが、現在のＳＰの実アドレスの上位２８ビットよりも１または２大きなアドレスであるオフセットアドレスに対応するラインを１つ見付け、図１８の動作右欄「ＳＰが下方から近付いた」に示す動作を行う。すなわち、オフセット算出部１４は、上記のオフセットアドレスを算出し、キャッシュミス判定部２４はオフセットアドレスに対応するラインについてキャッシュミスが生じているか否かを判定する（Ｓ６５）。
【０１９１】
キャッシュミス判定部２４がこのようなラインを見付けることができ（Ｓ６５でＹｅｓ）、且つそのラインのｖａｌｉｄフラグが１（Ｓ６７でＹｅｓ）ならば、制御部２００は何も行わない（図１８動作右欄（ｂ）〜（ｅ））。
【０１９２】
キャッシュミス判定部２４がこのようなラインを見付けることはできたが（Ｓ６５でＹｅｓ）、そのラインのｖａｌｉｄフラグが０であり（Ｓ６７でＮｏ）、且つそのラインがスタックに割り当てられていれば（Ｓ６９でＹｅｓ）、リフィル部２８はそのラインのリフィルを行う（Ｓ２１）。その後、フラグ設定部２７は、ｖａｌｉｄフラグを１にする（Ｓ７０）（以上、図１８動作右欄（ｇ））。
【０１９３】
キャッシュミス判定部２４がこのようなラインを見付けることはできたが（Ｓ６５でＹｅｓ）、そのラインのｖａｌｉｄフラグが０であり（Ｓ６７でＮｏ）、且つそのラインがスタックに割り当てられていなければ（Ｓ６９でＮｏ）、制御部２００は何も行わない（図１８動作右欄（ｆ））。
【０１９４】
また、キャッシュミス判定部２４がこのようなラインを見付けることができなければ（Ｓ６５でＮｏ）、アドレスの順序に関して現在のスタックポインタＳＰのすぐ上にあり、すぐにｐｏｐによって読み出される可能性の高い主記憶装置のメモリ領域がキャッシュされていないことになる。このため、制御部２００は、実アドレスの上位２８ビットが現在のＳＰの実アドレスの上位２８ビットよりも１大きく、下位４ビットは０である主記憶装置の領域についてキャッシュ上にリフィルを実行する（図１８動作右欄（ａ）；Ｓ２１）。
【０１９５】
具体的には、ライン開放部２５は、現在のスタックポインタＳＰの実アドレスの上位２８ビットよりも１大きいアドレスに対応するセットで、ＬＲＵによって開放するラインを決定し、決定したラインの開放を行う（Ｓ３０１）。その後、タグ更新部２６がタグ更新を行い（Ｓ２２）、フラグ設定部２７がｓｔａｃｋフラグを１へ設定する（Ｓ２６）。次に、リフィル部２８は、そのラインに実アドレスの上位２８ビットが現在のＳＰの実アドレスの上位２８ビットよりも１大きく、下位４ビットは０である主記憶装置のメモリ領域のリフィルを実行する（Ｓ２１）。次に、フラグ設定部２７はそのラインのｖａｌｉｄフラグを１に設定する（Ｓ７０）。
【０１９６】
また同時に、図１９に示すように、転送ビジー応答がオフであるときに（Ｓ６１でＹｅｓ）、オフセット算出部１４はラインに含まれるタグの値とそのラインを含むセットによって示される実アドレスの上位２８ビットが、現在のＳＰの実アドレスの上位２８ビットよりも小さなアドレスである別のオフセットアドレスを算出する。キャッシュミス判定部２４は、このオフセットアドレスに対応するラインを捜す（以上、Ｓ７１）。キャッシュミス判定部２４が、もしもそのようなラインを見付けることができたら（Ｓ７１でＹｅｓ）、制御部２００は図１０の動作左欄「ＳＰが上方に移動」に示す動作を行う。
【０１９７】
即ち、キャッシュミス判定部２４がこのようなラインを見付けることができ（Ｓ７１でＹｅｓ）、更にそのラインのｖａｌｉｄフラグ、ｄｉｒｔｙフラグ、ｓｔａｃｋフラグがいずれも１であったならば（Ｓ７３でＹｅｓ）、ライトバック部２９はそのラインのライトバックを行い（Ｓ７５）、フラグ設定部２７はｄｉｒｔｙフラグを０にする（Ｓ７７）（以上、図１０動作左欄（ｅ））。
【０１９８】
キャッシュミス判定部２４がこのようなラインを見付けることができなかったか（Ｓ７１でＮｏ）、或いは見付けることができてもｖａｌｉｄフラグ、ｄｉｒｔｙフラグ、ｓｔａｃｋフラグがいずれかが０であったならば（Ｓ７３でＮｏ）、制御部２００は何も実行しない（図１０動作左欄（ａ）〜（ｄ）（ｆ）（ｇ））。
【０１９９】
以上のように、制御部２００は、ｐｏｐ命令に従って読み出しを終了しているラインのデータ、即ち再び読み出されることのないデータをライトバックする（Ｓ７５）ので、当該ラインを後に開放する時（Ｓ３００、Ｓ３０１）に、ライトバック（Ｓ３４）を行う必要がない。それにより、メモリアクセス速度が向上する。
【０２００】
（２−６．ｐｕｓｈ）
図２０は、ＭＰＵ１１３がｐｕｓｈ命令を実行するときのキャッシュシステム１００の動作を示すシーケンス図である。ＭＰＵ１１３がｐｕｓｈ命令を実行すると、ＭＰＵ１１３はキャッシュライト要求信号をオンにし、同時にリードしたいメモリ領域を示す論理アドレスを仮想アドレスバスに出力し、更にライトしたいワードデータを３２ビット幅のデータバスに出力する。同時にＭＰＵ１１３はｐｕｓｈ／ｐｏｐ修飾信号をオンにする。キャッシュユニット１１７のプッシュアクセス検出部１１は、これらの信号を受信することにより、ＭＰＵ１１３がｐｕｓｈ命令の実行にともなうデータ書き込み要求を行っていることを検出する。この点において、ｐｕｓｈは、前記ランダムライト及びＳＰ相対ライトとは、その動作が異なる。それにともない、キャッシュユニット１１７の制御部２００は、キャッシュビジー応答をオンにする。ＭＰＵ１１３はキャッシュビジー応答がオンになったことを確認してキャッシュライト要求とｐｕｓｈ／ｐｏｐ修飾信号をオフにする。
【０２０１】
続けてキャッシュミス判定部２４は、ｐｏｐにおけるステップＳ１と同様の動作によって、セットとウエイの選択と、キャッシュヒットまたはキャッシュミスを判断する（Ｓ１）。これらの動作はランダムライトやＳＰ相対ライトでの対応する動作と同様であるから説明を省略する。
【０２０２】
実アドレスバスの上位２０ビットの値と選択したセット中の或るラインのタグの内容とが一致し（Ｓ１でＹｅｓ；すなわちキャッシュがヒットし）、且つこのラインのｖａｌｉｄフラグが１（Ｓ２でＹｅｓ）ならば、制御部２００は該当するラインにおいて、図２１（ｂ）〜（ｅ）の動作左欄「最上位アドレスにｐｕｓｈ」または動作右欄「最上位アドレス以外にｐｕｓｈ」の動作を行う。このとき、境界判定部２３の判定（Ｓ５１）により、実アドレスバスの第３ビットと第２ビットの両方が１（Ｓ５１でＹｅｓ）ならば、制御部２００は、図２１（ｂ）〜（ｅ）の動作左欄「最上位アドレスにｐｕｓｈ」の動作を行う。即ち、データ書き込み部２１は３２ビット幅のデータバスからライトすべきワードデータを読み込み、このラインの実アドレスバスの下位４ビットに該当する領域にライトする（Ｓ１１）。その後、制御部２００はキャッシュビジー応答信号をオフにする（以上、図２１（ｂ）〜（ｅ）動作左欄「最上位アドレスにｐｕｓｈ」）。
【０２０３】
次に、もしもこのラインのｄｉｒｔｙフラグが０ならば、フラグ設定部２７はｄｉｒｔｙフラグを１にセットする（図２１（ｂ）（ｃ）動作左欄「最上位アドレスにｐｕｓｈ」；Ｓ１５）。また、もしもこのラインのｓｔａｃｋフラグが０ならば、フラグ設定部２７は、ｓｔａｃｋフラグを１にセットする（図２１（ｂ）（ｄ）動作左欄「最上位アドレスにｐｕｓｈ」；Ｓ１５）。その後、ＭＰＵ１１３はキャッシュビジー応答信号がオフになったことを検出して、ｐｕｓｈ命令による処理が完了したことを知る。
【０２０４】
実アドレスバスの第３ビットと第２ビットの何れか少なくとも一方が０ならば（Ｓ５１でＮｏ）、制御部２００は、図２１（ｂ）〜（ｅ）の動作右欄「最上位アドレス以外にｐｕｓｈ」の動作を行う。即ち、データ書き込み部２１は３２ビット幅のデータバスからライトしたいワードデータを読み込み、このラインの実アドレスバスの下位４ビットに該当する領域にライトする（Ｓ１１）。その後、制御部２００はキャッシュビジー応答信号をオフにする（以上、図２１（ｂ）〜（ｅ）動作右欄「最上位アドレス以外にｐｕｓｈ」）。次に、もしもこのラインのｄｉｒｔｙフラグが０ならば、フラグ設定部２７はｄｉｒｔｙフラグを１にセットする（図２１（ｂ）（ｃ）動作右欄「最上位アドレス以外にｐｕｓｈ」；Ｓ１３）。フラグ設定部２７は、その他のフラグ操作を行わない。ＭＰＵ１１３は、キャッシュビジー応答信号がオフになったことを検出して、ｐｕｓｈ命令による処理が完了したことを知る。
【０２０５】
実アドレスバスの上位２０ビットの値と選択したセット中の或るラインのタグの内容とが一致した（Ｓ１でＹｅｓ）が、このラインのｖａｌｉｄフラグが０（Ｓ２でＮｏ）ならば、制御部２００は図２１（ｆ）（ｇ）の動作を行う。この場合は、たまたま選択したセット中の或るラインのタグの内容と実アドレスバスの上位２０ビットの値が一致したが、既にこのラインは開放されていたことに該当する。
【０２０６】
境界判定部２３の判定（Ｓ５５）により、実アドレスバスの第３ビットと第２ビットの両方が１（Ｓ５５でＹｅｓ）ならば、図２１（ｆ）（ｇ）の動作左欄「最上位アドレスにｐｕｓｈ」の動作を行う。即ち、リフィル部２８は、このラインに対して主記憶装置から該当するアドレスに記憶している情報のリフィルを行わず、フラグ設定部２７はｖａｌｉｄフラグを１にする（Ｓ２４）。
【０２０７】
次に、データ書き込み部２１は３２ビット幅のデータバスからライトしたいワードデータを読み込み、このラインの実アドレスバスの下位４ビットに該当する領域にライトする（Ｓ１１）。続いて、制御部２００はキャッシュビジー応答信号をオフにする（以上、図２１（ｆ）（ｇ）の動作左欄「最上位アドレスにｐｕｓｈ」）。ＭＰＵ１１３はキャッシュビジー応答信号がオフになったことを検出して、ｐｕｓｈ命令による処理が完了したことを知る。フラグ設定部２７は、ｄｉｒｔｙフラグを１にセットする（図２１（ｆ）（ｇ）の動作左欄「最上位アドレスにｐｕｓｈ」；Ｓ１５）。もしもこの時ｓｔａｃｋフラグが０ならば、フラグ設定部２７はｓｔａｃｋフラグを１にする（図２１（ｆ）動作左欄「最上位アドレスへｐｕｓｈ」；Ｓ１５）。
【０２０８】
ステップＳ５５の判定において、実アドレスバスの第３ビットと第２ビットの何れか少なくとも一方が０（Ｓ５５でＮｏ）ならば、制御部２００は図２１（ｆ）（ｇ）の動作右欄「最上位アドレス以外へｐｕｓｈ」の動作を行う。即ち、リフィル部２８は、このラインに対して主記憶装置から該当するアドレスに記憶している情報のリフィルを実行する（Ｓ２１）。次に、フラグ設定部２７はｖａｌｉｄフラグを１にする（Ｓ２４）。続いて、データ書き込み部２１は３２ビット幅のデータバスからライトしたいワードデータを読み込み、このラインの実アドレスバスの下位４ビットに該当する領域にライトする（Ｓ１１）。その後、制御部２００はキャッシュビジー応答信号をオフにする。それに伴い、フラグ設定部２７はｄｉｒｔｙフラグを１にセットする。
【０２０９】
ステップＳ１の判定において、実アドレスバスの上位２０ビットの値と選択したセット中のラインのタグの内容とが一致するものがなければ（Ｓ１においてＮｏ）、キャッシュミス判定部２４はキャッシュがミスしたと判断する。それに伴って、制御部２００は図２１（ａ）の動作を行う。即ち、ライン開放部２５は、このセットからＬＲＵアルゴリズムによって１つのラインを開放する（Ｓ３０１）。境界判定部２３の判定（Ｓ５６）により、実アドレスバスの第３ビットと第２ビットの両方が１（Ｓ５６でＹｅｓ）ならば、リフィル部２８は、このラインに対して主記憶装置から該当するアドレスに記憶している情報のリフィルを行わない。続いてタグ更新部２６は、開放されたラインに対応づけられたタグを変更する（Ｓ２２）。次に、フラグ設定部２７は、ｖａｌｉｄフラグを１に、ｄｉｒｔｙフラグを０に、ｓｔａｃｋフラグを０にセットする（Ｓ２７）。これによって図２１（ｂ）と同じ状態になるので、以後制御部２００は図２１（ｂ）の動作を実行する。
【０２１０】
ステップＳ５６の判定において、実アドレスバスの第３ビットと第２ビットの何れか少なくとも一方が０（Ｓ５６でＮｏ）ならば、リフィル部２８は、このラインに対して主記憶装置から該当するアドレスに記憶している情報のリフィルを実行する（Ｓ２１）。その後は、制御部２００は、ステップＳ５６の判定がＹｅｓの場合と同様に、ステップＳ２２以下の処理を実行する。
【０２１１】
以上のように、ＭＰＵ１１３がｐｕｓｈ命令を実行する場合に、データを書き込むべき小領域がライン境界にあるとき（Ｓ５６でＹｅｓ）には、制御部２００はキャッシュミスに伴うライン開放（Ｓ３０１）の後に、無用なリフィル（Ｓ２１）を行わない。このため、メモリアクセス速度が向上する。更に、データを書き込みを行うべき小領域がライン境界にない場合（Ｓ５６でＮｏ）にキャッシュミスが生じたときには、制御部２００は、リフィル（Ｓ２１）を行う。このため、ＭＰＵ１１３はｐｕｓｈ命令に伴うデータの連続書き込みを、ライン境界に隣接する小領域に対応するアドレスだけでなく、ライン境界に隣接しない小領域に対応するアドレスからも開始することができる。
【０２１２】
また、ラインが開放された場合（Ｓ３０１）だけでなく、ｖａｌｉｄフラグがラインの開放を示す０である場合（Ｓ２でＮｏ）にも、制御部２００は、データを書き込むべき小領域の位置に応じて（Ｓ５５）、リフィル（Ｓ２１）を行うか否かを選択する。このため、ラインが既に開放されている場合にも、無用なリフィルが回避され、それによってメモリアクセス速度が更に向上する。
【０２１３】
図２２に示すように、以上の動作の後或いは途中、もしも転送ビジー応答信号がオフならば、転送データバスが空いているので、制御部２００は当分の間必要となる可能性の低いメモリについて予めライトバックを実行する。具体的には、転送ビジー判定部１５が転送ビジー応答信号がオフであることを検出すると（Ｓ６１でＹｅｓ）、制御部２００は、ＭＭＵ１１５のアドレス変換の単位である、ラインに含まれるタグの値の方が現在のＳＰの実アドレスの上位２０ビットよりも大きいアドレスであるオフセットアドレスに対応するラインか、またはラインに含まれるタグの値とそのラインを含むセットによって示される実アドレスの上位２８ビットが、現在のＳＰの実アドレスの上位２８ビットよりも３以上大きなアドレス（同じく、オフセットアドレスと称する）に対応するラインを、１つ見付け図１８の動作左欄「ＳＰが下方に遠ざかった」に示す動作を行う。すなわち、オフセット算出部１４は、上記のオフセットアドレスを算出し、キャッシュミス判定部２４はオフセットアドレスに対応するラインについてキャッシュミスが生じているか否かを判定する（Ｓ８１）。
【０２１４】
キャッシュミス判定部２４がこのようなラインを見付けることはできた場合（Ｓ８１でＹｅｓ）であっても、そのラインのｖａｌｉｄフラグとｄｉｒｔｙフラグとｓｔａｃｋフラグの何れか少なくとも１つが０（Ｓ７３でＮｏ）ならば、制御部２００は何も行わない（図１８動作左欄（ｂ）〜（ｄ）（ｆ）（ｇ））。キャッシュミス判定部２４がこのようなラインを見付けることができ（Ｓ８１でＹｅｓ）、且つそのラインのｖａｌｉｄフラグとｄｉｒｔｙフラグとｓｔａｃｋフラグの全てが１（Ｓ７３でＹｅｓ）ならば、ライトバック部２９は、そのラインのライトバックを行う（Ｓ７５）。続いて、フラグ設定部２７は、ｄｉｒｔｙフラグを０にする（Ｓ７７）（以上、図１８動作左欄（ｅ））。これによって、その後にこのラインがＬＲＵアルゴリズムによって開放されることになった時、改めてライトバックを行う必要がなく、処理を高速化することができる。
【０２１５】
キャッシュミス判定部２４がこのようなラインを見付けることができなければ（Ｓ８１でＮｏ）、制御部２００は何も行わない（図１８動作左欄（ａ））。
【０２１６】
（３．動作例１）
本発明の実施の形態によるデータメモリキャッシュシステムの動作例について、ＭＰＵ１１３としてＣ言語で記述されたプログラムを実行する汎用ＣＰＵが用いられた場合を例に、図２３〜図２９を使って詳細に説明する。
【０２１７】
Ｃ言語で記述されたプログラムは、例えば上位アドレスから下位アドレス方向に向けて成長するスタック構造を使用する。当該プログラムは、汎用ＣＰＵ内に存在する専用スタックポインタ（ＳＰ）を使用し、同汎用ＣＰＵ内に存在する汎用レジスタをフレームポインタ（ＦＰ）として使用し、このスタック構造にアクセスを実行する。この時のスタック構造の一例を図２３に示す。この例には１つの関数の実行に関わるスタック構造だけを示している。実際には、既に実行された関数コール（呼び出し）の数に対応するスタック構造が、下方に積み重ねられた構造をしている。
【０２１８】
次に、この構造がＣ言語による新しい関数呼び出しでどのように生成（変化）されるかを説明する。Ｃ言語の関数が呼び出される時にはまず、関数を呼び出す側がスタックトップにｐｕｓｈ命令を使い、関数側での処理に必要な引き数を生成する。この引き数を関数に引き渡すためである。この引き数を生成した直後のスタック構造を図２４に示す。
【０２１９】
次に、関数呼び出しを実行する。この時、ｐｕｓｈ命令を実行して関数からの戻りアドレスをスタックに退避する。この関数呼び出し実行直後のスタック構造を図２５に示す。
【０２２０】
次にプログラムの実行は、呼び出された関数側に移行する。呼び出された関数側では最初に、ｐｕｓｈ命令を実行し、フレームポインタをも含めた関数内部で使用するレジスタをスタックに退避する。このレジスタ退避直後のスタック構造を図２６に示す。
【０２２１】
次に呼び出された関数では、スタックポインタの値をフレームポインタに設定し、スタックフレームを生成するために、スタックポインタからスタックフレームのサイズを減算する。これによってスタックポインタはより下位アドレス側に移動し、このスタックポインタとフレームポインタの間にスタックフレームが生成される。スタックフレームが生成された直後のスタック構造を図２７に示す。
【０２２２】
呼び出された関数側では、次に、フレームポインタ相対リード・ライト命令、スタックポインタ相対リード・ライト命令、ランダムリード・ライト命令等を実行して、引き数にアクセスしたり、スタックフレームにアクセスし、必要な情報にアクセスして関数の処理を実行する。また必要なら、他の関数呼び出しを実行することもある。
【０２２３】
呼び出された関数側では、関数の処理を終了すると、使用していたスタックフレームを破棄するため、スタックポインタにスタックフレームのサイズを加算する。そしてｐｏｐ命令を実行し、退避していたレジスタを復元する。この時のスタック構造は、関数呼び出し直後のスタック構造と完全に同じ状態に復元され、図２５に示される。
【０２２４】
次にｐｏｐ命令を実行して、呼び出し側の関数へ戻るためのアドレスを取り出し、リタン命令によって、呼び出された関数から呼び出した関数にプログラム実行を復帰させる。この時のスタック構造は、関数に引き渡すための引き数を生成した直後のスタック構造と完全に同一となり、図２４に示す。復帰した呼び出し関数側では、引き数列を廃棄するため、スタックポインタに引き数列の大きさを加算する。例えば図２４の例では２掛けるワードサイズに相当する値である。
【０２２５】
以上の処理によって、スタック構造は、関数呼び出し処理を開始する前の構造に復帰する。この時のスタック構造は図２３に示す通りである。
【０２２６】
以上の関数呼び出しに関わる一連の処理における、スタックフレーム生成直後のキャッシュラインの状態を図２８に示す。図２８に示す通り、スタックフレーム以外の部分はスタックとして使用され、そのためにラインのｓｔａｃｋフラグは１が設定される。キャッシュラインの単位は１６バイトであり、スタック構造の単位は４バイトであるので、スタックフレームとレジスタ退避スタックとの境界がキャッシュラインの境界と一致するとは限らない。
【０２２７】
本発明によると、レジスタ退避スタックとスタックフレームとが同居しているラインでは、ｓｔａｃｋフラグが１に設定される。またスタックフレームと引き数列が同居しているラインではｓｔａｃｋフラグが０に設定される。関数処理実行中に、引き数列やスタックフレームに対するアクセスを実行すると、通常これらのアクセスはランダムリード・ライト命令によって行われるため、１に設定されていたｓｔａｃｋフラグも０に変化することが起ってくる。従って、レジスタ退避スタックとスタックフレームとが同居したラインや、引き数列と戻りアドレスが同居しているラインも、ｓｔａｃｋフラグは０に変化する。この時の各ラインのフラグの状態を図２９に示す。
【０２２８】
（４．動作例２）
本発明の実施の形態によるデータメモリキャッシュシステムの別の動作例について、ＭＰＵ１１３としてＪａｖａ（登録商標）言語で記述されたプログラムを実行する汎用ＣＰＵが用いられた場合を例に、図３０〜図３４を使って詳細に説明する。
【０２２９】
Ｃ言語で記述されたプログラムは、例えばＣ言語で記述されたインタープリタによって実行される。このインタープリタは、Ｃ言語で記述されたプログラムを実行するためのプログラムカウンタの他に、Ｊａｖａ（登録商標）仮想マシンを実装するために必要なＪａｖａ（登録商標）プログラムカウンタを有している。またスタック構造においても、Ｃ言語で記述されたプログラムを実行するためのスタック構造以外に、Ｊａｖａ（登録商標）仮想マシンを実装するために必要なＪａｖａ（登録商標）スタック構造を有している。
【０２３０】
Ｊａｖａ（登録商標）スタック構造も例えば、上位アドレスから下位アドレス方向に向けて成長するスタック構造を使用することができる。このＪａｖａ（登録商標）スタック構造では例えば、汎用ＣＰＵ内に存在する汎用レジスタをスタックポインタ（ＳＰ）として使用し、このＪａｖａ（登録商標）スタック構造にアクセスを実行する。
【０２３１】
Ｊａｖａ（登録商標）スタック構造の一例を図３０に示す。図３０には、１つのメソッド（Ｃ言語における関数に相当する）の処理に対応するＪａｖａ（登録商標）スタック構造が示されている。実際には、これまでに発生したメソッド呼び出し（コール：ｃａｌｌ）に相当する数のスタック構造が、下方に積み重ねられた構造をなしている。
【０２３２】
次に、このスタック構造が、Ｊａｖａ（登録商標）言語による新しいメソッド呼び出しによってどのように生成（変化）されるかを説明する。最初に、新しいメソッドを呼び出すメソッド呼び出し側が、スタックトップにｐｕｓｈ命令を実行することによってメソッド内での処理に使用するための引き数を設定する。この引き数列生成直後のＪａｖａ（登録商標）スタック構造を図３１に示す。この引き数列は、呼び出されるメソッド側での処理で必要となる値を、メソッド呼び出し側から呼び出されるメソッド側に引き渡すために使用される。
【０２３３】
次にメソッド呼び出しが実行される。メソッドからの戻りＪａｖａ（登録商標）アドレスは、Ｃ言語スタックに退避される。このアドレスの退避はＪａｖａ（登録商標）スタック構造とは直接関係しないので説明を省略する。このメソッド呼び出しによって、Ｊａｖａ（登録商標）プログラムの制御は、呼び出されたメソッド側に移行する。呼び出されたＪａｖａ（登録商標）メソッド側では、使用するレジスタの退避が必要であったならばこれらのレジスタの値をＣ言語スタックに退避する。このレジスタの退避もＪａｖａ（登録商標）スタック構造とは直接関係しないので説明を省略する。
【０２３４】
次に、呼び出されたメソッドでは、自分自身が実行する処理で必要となるローカル変数のための領域を生成するために、Ｊａｖａ（登録商標）スタックポインタの値からローカル変数の領域のサイズに相当する値を減算する。このローカル変数領域生成直後のＪａｖａ（登録商標）スタック構造を図３２に示す。
【０２３５】
呼び出されたメソッドでは、その後、Ｊａｖａ（登録商標）スタックポインタ相対アドレス指定である、ＳＰ相対リード・ライト命令によって引き数やローカル変数にアクセスし、メソッドの処理を実行する。
【０２３６】
Ｊａｖａ（登録商標）言語はスタック指向言語であるためＪａｖａ（登録商標）命令でのオペランドは、必ずＪａｖａ（登録商標）スタックポインタ相対として指定される。例えば加算（ａｄｄ）命令ではオペランドが明示的に指定されることはなく、Ｊａｖａ（登録商標）スタックのトップとセカンドに自動的に設定される。従って、Ｊａｖａ（登録商標）インタープリタはａｄｄ命令を実行するには、ｐｏｐ命令を２回実行することによってＪａｖａ（登録商標）スタック中のオペランドスタックから２つの値を読み出し、加算を実行し、その結果をｐｕｓｈ命令を実行することによってＪａｖａ（登録商標）スタック中のオペランドスタックのトップに格納する。この処理を実行中のＪａｖａ（登録商標）スタック構造を図３３に示す。
【０２３７】
呼び出されたメソッドでは必要に応じて、更に他のメソッドを呼び出すこともある。呼び出されたメソッドでの処理が終了した時点で、Ｊａｖａ（登録商標）スタック中のオペランドスタックは空になる。そしてローカル変数領域と引き数列を破棄するため、Ｊａｖａ（登録商標）スタックポインタにこれの合計サイズに相当する値を加算する。この時のＪａｖａ（登録商標）スタック構造は、Ｊａｖａ（登録商標）メソッド呼び出し処理を開始する前のＪａｖａ（登録商標）スタック構造に復帰する。この時のＪａｖａ（登録商標）スタック構造は図３０に示される。
【０２３８】
以上のＪａｖａ（登録商標）メソッド呼び出し処理の実行における、処理実行中のキャッシュラインの状態を、図３４に示す。図３４に示す通り、このメソッド呼び出し処理のために生成したラインのｓｔａｃｋフラグは１に設定される。また、Ｊａｖａ（登録商標）スタックポインタがスタックボトムから遠ざかることによって、スタックポインタから離れたラインで転送ビジー応答信号がオフの時間中にライトバックが実行され、そのラインのｄｉｒｔｙフラグが０に設定された状態をも図３４に示す。
【産業上の利用可能性】
【０２３９】
本発明のデータメモリキャッシュ装置及びデータメモリキャッシュシステムは、メモリアクセス速度を向上させるので、産業上有用である。
【図面の簡単な説明】
【０２４０】
【図１】本発明の実施の形態によるデータメモリキャッシュシステムの構成を示すブロック図である。
【図２】ｐｕｓｈ、ｐｏｐ、ｌｏａｄ、ｓｔｏｒｅ命令の各命令形式と動作とを示す説明図である。
【図３】ＭＰＵによって実行される命令と各制御線の状態との関係を示す説明図である。
【図４】本発明の実施の形態によるデータメモリキャッシュ装置に該当する図１のキャッシュユニットの構成を示すブロック図である。
【図５】図４のキャッシュユニットのデータ保持部の構成を示すブロック図である。
【図６】図５のデータ保持部のラインの構成を示す説明図である。
【図７】ｖａｌｉｄフラグ、ｄｉｒｔｙフラグ、ｓｔａｃｋフラグの取り得る組み合わせとそれが意味するラインの状態とを示す図である。
【図８】ＭＰＵがランダムリード命令を実行するときの図１のキャッシュシステムの動作シーケンス図である。
【図９】ランダムリード・ランダムライト命令実行時の各ラインの状態に対応した動作の内容を示す説明図である。
【図１０】ラインの開放・ＳＰが上方に移動を実行時の各ラインの状態に対応した動作の内容を示す説明図である。
【図１１】ＭＰＵがランダムライト命令を実行するときの図１のキャッシュシステムの動作シーケンス図である。
【図１２】ＭＰＵがＳＰ相対リード命令を実行するときの図１のキャッシュシステムの動作シーケンス図である。
【図１３】ＳＰ相対リード・ＳＰ相対ライト命令実行時の各ラインの状態に対応した動作の内容を示す説明図である。
【図１４】ＭＰＵがＳＰ相対ライト命令を実行するときの図１のキャッシュシステムの動作シーケンス図である。
【図１５】ＭＰＵがｐｏｐ命令を実行するときの図１のキャッシュシステムの動作シーケンス図である。
【図１６】ｐｏｐ命令実行時の各ラインの状態に対応した動作の内容を示す説明図である。
【図１７】ＭＰＵがｐｏｐ命令を実行しているときに、図１５の処理と並行して進行する別の処理を示す動作シーケンス図である。
【図１８】ＳＰが下方に遠ざかった・ＳＰが下方から近付いた実行時の各ラインの状態に対応した動作の内容を示す図である。
【図１９】ＭＰＵがｐｏｐ命令を実行しているときに、図１５の処理と並行して進行する更に別の処理を示す動作シーケンス図である。
【図２０】ＭＰＵがｐｕｓｈ命令を実行するときの図１のキャッシュシステムの動作シーケンス図である。
【図２１】ｐｕｓｈ命令実行時の各ラインの状態に対応した動作の内容を示す図である。
【図２２】ＭＰＵがｐｕｓｈ命令を実行しているときに、図２１の処理と並行して進行する別の処理を示す動作シーケンス図である。
【図２３】Ｃ言語のスタック構造を示す図である。
【図２４】引き数生成直後のスタック構造を示す図である。
【図２５】関数呼び出し直後のスタック構造を示す図である。
【図２６】レジスタ退避直後のスタック構造を示す図である。
【図２７】スタックフレーム生成直後のスタック構造を示す図である。
【図２８】スタックフレーム生成直後のキャッシュラインの状態を示す図である。
【図２９】ランダムアクセス後のキャッシュラインの状態を示す図である。
【図３０】Ｊａｖａ（登録商標）スタック構造を示す図である。
【図３１】引き数生成直後のＪａｖａ（登録商標）スタック構造を示す図である。
【図３２】ローカル変数領域生成直後のＪａｖａ（登録商標）スタック構造を示す図である。
【図３３】関数処理中のＪａｖａ（登録商標）スタック構造を示す図である。
【図３４】関数処理中のキャッシュラインの状態を示す図である。
【図３５】従来のスタックキャッシュシステムにおいてｐｕｓｈでキャッシュミスが発生した時に１単位の内容が主記憶装置からキャッシュメモリに読み込まれる状態を示す図である。
【図３６】従来のスタックキャッシュシステムにおいてｐｏｐでキャッシュミスが発生した時に１単位の内容がキャッシュメモリから主記憶装置にライトバックされる状態を示す図である。
【図３７】低いアドレスのメモリ領域に記憶されたデータが当分の間はポップによって読み出される可能性が非常に低い状態を示す図である。
【図３８】スタックポインタの示すアドレスよりも低い値のアドレス領域はすぐに続けてポップによって読み出される可能性が非常に高い状態を示す図である。
【符号の説明】
【０２４１】
５  ランダムライト検出部                    ６  ランダムリード検出部
７  ＳＰ相対ライト検出部                    ８  ＳＰ相対リード検出部
１１  プッシュアクセス検出部              １２  ポップアクセス検出部
２１  データ書き込み部                    ２２  データ読み出し部
２３  境界判定部                          ２４  キャッシュミス判定部
２５  ライン開放部（データ領域開放部）    ２６  タグ更新部
２７  フラグ検出部                        ２８  リフィル部
２９  ライトバック部              １００  データメモリキャッシュシステム
１１３  演算ユニット（ＭＰＵ）    １１５  メモリマネジメントユニット（ＭＭＵ）
１１７  スタック対応データキャッシュユニット（データメモリキャッシュ装置）
１１９  転送制御ユニット          １３１  主記憶装置
２００  制御部                    ３００  データ保持部
９１０，９２０，９３０，９４０  スタックメモリ
９１３，９２３，９３３，９４３  スタックポインタ
【図１】
2004303232.tif 000003
【図２】
2004303232.tif 000004
【図３】
2004303232.tif 000005
【図４】
2004303232.tif 000006
【図５】
2004303232.tif 000007
【図６】
2004303232.tif 000008
【図７】
2004303232.tif 000009
【図８】
2004303232.tif 000010
【図９】
2004303232.tif 000011
【図１０】
2004303232.tif 000012
【図１１】
2004303232.tif 000013
【図１２】
2004303232.tif 000014
【図１３】
2004303232.tif 000015
【図１４】
2004303232.tif 000016
【図１５】
2004303232.tif 000017
【図１６】
2004303232.tif 000018
【図１７】
2004303232.tif 000019
【図１８】
2004303232.tif 000020
【図１９】
2004303232.tif 000021
【図２０】
2004303232.tif 000022
【図２１】
2004303232.tif 000023
【図２２】
2004303232.tif 000024
【図２３】
2004303232.tif 000025
【図２４】
2004303232.tif 000026
【図２５】
2004303232.tif 000027
【図２６】
2004303232.tif 000028
【図２７】
2004303232.tif 000029
【図２８】
2004303232.tif 000030
【図２９】
2004303232.tif 000031
【図３０】
2004303232.tif 000032
【図３１】
2004303232.tif 000033
【図３２】
2004303232.tif 000034
【図３３】
2004303232.tif 000035
【図３４】
2004303232.tif 000036
【図３５】
2004303232.tif 000037
【図３６】
2004303232.tif 000038
【図３７】
2004303232.tif 000039
【図３８】
2004303232.tif 000040