12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- /*
- * To change this license header, choose License Headers in Project Properties.
- * To change this template file, choose Tools | Templates
- * and open the template in the editor.
- */
- package cache;
- /**
- *
- * @author Juninho Carlos
- */
- public class Redundancia {
- private ConjuntoRedundancia[] conjuntos;
-
- public Redundancia(){
- this.conjuntos = new ConjuntoRedundancia[4];
- for(int i = 0; i < 4; i++){
- this.conjuntos[i] = new ConjuntoRedundancia();
- }
- }
-
- public void leituraEspecial(int tag, int conjunto, int bloco){
- this.conjuntos[conjunto].getBlocos()[bloco].leituraEspecialNoBloco(tag);
- }
-
- public void inserirErro(int conjunto, int bloco, int palavra){
- this.conjuntos[conjunto].getBlocos()[bloco].getPalavras()[palavra].inserirErro();
- }
-
- /**
- * QUANDO TEM MISS, É SABIDO QUE, SE TIVER PALAVRA VALIDA, ISSO RESULTARA EM UM WB-FORÇADO OU LE
- *
- * @param address endereço para escrever na redundancia
- * @param bloco número do bloco que a palavra está mapeada dentro do conjunto
- * @return retorna NULL se escreveu sem a necessidade de sobrescrita,
- * caso contrário, retorna o endereço para sofrer o write-back ou leitura especial
- */
- public Integer escreverPalavraNaRedMiss(Requisicao address,int bloco){
-
- int conjunto = address.conjunto%4;
- Integer enderecoToWB = null;
-
- if(this.conjuntos[conjunto].hasErroInPalavra(bloco, address.palavra)){
- return -1;
- }
-
- if(this.conjuntos[conjunto].isPalavraValida(bloco, address.palavra)){
- enderecoToWB = this.conjuntos[conjunto].getTagFromPalavra(bloco, address.palavra);
- }
-
- //Escreve a palavra na redundancia
- this.conjuntos[conjunto].writeAWord(address.conjunto, bloco, address.palavra);
-
- return enderecoToWB;
- }
- @Override
- public String toString() {
- String s = "";
- BlocoRedundancia[] b;
- int i = 0;
- for (ConjuntoRedundancia conjunto : conjuntos) {
- s += "Conjunto "+i+"\n";
- //s += conjunto;
- b = conjunto.getBlocos();
- int j = 0;
- for (BlocoRedundancia bloco : b) {
- s += "Bloco " + j + "\n";
- s += bloco + "\n";
- j++;
- }
- s += "\n\n\n";
- i++;
- }
- return s; //To change body of generated methods, choose Tools | Templates.
- }
-
-
- }
|