2012-03-21 14 views
1

キャッシュシミュレータの作成では、通常、メインメモリからキャッシュにコピーされるデータブロックを保持する構造が必要であることがわかりました。この場合、8つの数字を保持しています。タグ、有効ビット、ダーティビット、そして最後にデータブロックを設定できるように、キャッシュをオブジェクトとしてセットアップしました。だから私は配列がここでは最高のものになると思っています。私のゲッターとセッターはちょうど:Javaのキャッシュシミュレータ、データブロックの実装

public int[] getDataBlock() { 
    return dataBlock; 
} 
public void setDataBlock(int[] dataBlock) { 
    this.dataBlock = dataBlock; 
} 

私はすべて0にキャッシュをどのように初期化するのですか? System.arraycopyを使用し、特定のスロットにメインMEMからコピーするには

public void clearData(){ 
    Arrays.fill(this.dataBlock,0); 
} 

//initialize cache slots to 0 
for (int i = 0; i<cache.length; i++) { 
    cache[i] = new SlotNode(); 
    cache[i].setValidBit(0); 
    cache[i].setTag(0); 
    for (int j = 0; j < cache.length; j++) { 
     cache[i].setDataBlock([0]); 
    } 
    //cache[i].setData(0); 
    cache[i].setDirty(0); 
} 

答えて

1

あなたは、このようにキャッシュスロットをクリアするヘルパー関数を書くことができます

public void copyToCacheSlot(int[] mainMem, int baseIndex, int length){ 
    if (length <= 8) 
     System.arraycopy(mainMem, baseIndex, this.dataBlock, 0, length); 
    else 
     //Copied too much 
} 

ループを通じてcache配列を呼び出し、各要素に対して上記の関数を呼び出してください。

+0

'cache [i] .setDataBlock([0]);'は、配列の値を0に初期化するために何をすべきか分からなかったはずです。 cacheNodeクラスの他の値を持つコンストラクタその背後にある私の考えは、各SLOTが別々の配列、つまりデータのブロックを必要とするということです。 – jackie

+0

'public class SlotNode { public int validBit; public int tag;public int [] dataBlock = new int [8]; public int dirty; public int [] getDataBlock(){ \t \t return dataBlock; \t} \t公共ボイドsetDataBlock(INT []データブロック){ \t \t this.dataBlock =データブロック。 \t} \t public int getDirty(){ return dirty; } パブリックvoid setDirty(int dirty){ this.dirty = dirty; } } – jackie

+0

つまり、キャッシュには複数のスロットがあり、各スロットは配列です。 –