Redundancia.java 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. /*
  2. * To change this license header, choose License Headers in Project Properties.
  3. * To change this template file, choose Tools | Templates
  4. * and open the template in the editor.
  5. */
  6. package cache;
  7. /**
  8. *
  9. * @author Juninho Carlos
  10. */
  11. public class Redundancia {
  12. private ConjuntoRedundancia[] conjuntos;
  13. public Redundancia(){
  14. this.conjuntos = new ConjuntoRedundancia[4];
  15. for(int i = 0; i < 4; i++){
  16. this.conjuntos[i] = new ConjuntoRedundancia();
  17. }
  18. }
  19. public void leituraEspecial(int tag, int conjunto, int bloco){
  20. this.conjuntos[conjunto].getBlocos()[bloco].leituraEspecialNoBloco(tag);
  21. }
  22. public void inserirErro(int conjunto, int bloco, int palavra){
  23. this.conjuntos[conjunto].getBlocos()[bloco].getPalavras()[palavra].inserirErro();
  24. }
  25. /**
  26. * QUANDO TEM MISS, É SABIDO QUE, SE TIVER PALAVRA VALIDA, ISSO RESULTARA EM UM WB-FORÇADO OU LE
  27. *
  28. * @param address endereço para escrever na redundancia
  29. * @param bloco número do bloco que a palavra está mapeada dentro do conjunto
  30. * @return retorna NULL se escreveu sem a necessidade de sobrescrita,
  31. * caso contrário, retorna o endereço para sofrer o write-back ou leitura especial
  32. */
  33. public Integer escreverPalavraNaRedMiss(Requisicao address,int bloco){
  34. int conjunto = address.conjunto%4;
  35. Integer enderecoToWB = null;
  36. if(this.conjuntos[conjunto].hasErroInPalavra(bloco, address.palavra)){
  37. return -1;
  38. }
  39. if(this.conjuntos[conjunto].isPalavraValida(bloco, address.palavra)){
  40. enderecoToWB = this.conjuntos[conjunto].getTagFromPalavra(bloco, address.palavra);
  41. }
  42. //Escreve a palavra na redundancia
  43. this.conjuntos[conjunto].writeAWord(address.conjunto, bloco, address.palavra);
  44. return enderecoToWB;
  45. }
  46. @Override
  47. public String toString() {
  48. String s = "";
  49. BlocoRedundancia[] b;
  50. int i = 0;
  51. for (ConjuntoRedundancia conjunto : conjuntos) {
  52. s += "Conjunto "+i+"\n";
  53. //s += conjunto;
  54. b = conjunto.getBlocos();
  55. int j = 0;
  56. for (BlocoRedundancia bloco : b) {
  57. s += "Bloco " + j + "\n";
  58. s += bloco + "\n";
  59. j++;
  60. }
  61. s += "\n\n\n";
  62. i++;
  63. }
  64. return s; //To change body of generated methods, choose Tools | Templates.
  65. }
  66. }