Facebook
From Scanty Stork, 3 Years ago, written in Java 5.
Embed
Download Paste or View Raw
Hits: 78
  1. package bcc266TP2.toy;
  2.  
  3. import java.io.BufferedReader;
  4. import java.io.File;
  5. import java.io.FileReader;
  6. import java.util.Random;
  7.  
  8. public class TP2_sala_de_aula {
  9.         final int tamanhoRam=1000;
  10.         final int tamanhoCache1 = 8;
  11.         final int tamanhoCache2 = 16;
  12.         final int tamanhoPrograma = 1000;//qde de instru��es
  13.         final int qdePalavrasBloco = 4;
  14.        
  15.         Instrucao[] memoriaInstrucoes;
  16.         BlocoMemoria[] RAM = new BlocoMemoria[tamanhoRam];
  17.         BlocoMemoria[] cache1 = new BlocoMemoria[tamanhoCache1];
  18.         BlocoMemoria[] cache2 = new BlocoMemoria[tamanhoCache2];
  19.                        
  20.         public static void main(String[] args){
  21.                 new TP2_sala_de_aula();
  22.         }
  23.        
  24.         public TP2_sala_de_aula(){
  25.                 montarRam();
  26.                 montarCacheVazia(tamanhoCache1, cache1);
  27.                 montarCacheVazia(tamanhoCache2, cache2);
  28.                 montarInstrucoesProgramaAleatorio();
  29.                 maquina();
  30.                
  31.                 System.out.println("terminou");
  32.         }
  33.  
  34.         void maquina(){
  35.                 //registradores
  36.                 int PC =0;
  37.                 int opcode = Integer.MAX_VALUE;
  38.                 int custo=0;
  39.                 //caches 1 e 2 Hit e miss
  40.                 int missC1 = 0;
  41.                 int hitC1 = 0;
  42.                 int missC2 = 0;
  43.                 int hitC2 = 0;
  44.                
  45.                 while(opcode!=-1){
  46.                         Instrucao umaInstrucao = memoriaInstrucoes[PC];
  47.                         opcode = umaInstrucao.getOpcode();
  48.                                                        
  49.                         //TP2
  50.                         if(opcode!=-1){
  51.                                 BlocoMemoria dadoMemoriaAdd1 = MMU.buscarNasMemorias(umaInstrucao.getAdd1(), RAM, cache1, cache2);
  52.                                 BlocoMemoria dadoMemoriaAdd2 = MMU.buscarNasMemorias(umaInstrucao.getAdd2(), RAM, cache1, cache2);
  53.                                 BlocoMemoria dadoMemoriaAdd3 = MMU.buscarNasMemorias(umaInstrucao.getAdd3(), RAM, cache1, cache2);
  54.                                
  55.                                 //incrementando custos
  56.                                 custo += dadoMemoriaAdd1.getCusto();
  57.                                 custo += dadoMemoriaAdd2.getCusto();
  58.                                 custo += dadoMemoriaAdd3.getCusto();
  59.                                
  60.                                 //validando hits e misses
  61.                                 if(dadoMemoriaAdd1.getCacheHit()==1){
  62.                                         hitC1++;
  63.                                 }else if(dadoMemoriaAdd1.getCacheHit()==2){
  64.                                         missC1++;
  65.                                         hitC2++;
  66.                                 }else if(dadoMemoriaAdd1.getCacheHit()==3){
  67.                                         missC1++;
  68.                                         missC2++;                                      
  69.                                 }
  70.                                 if(dadoMemoriaAdd2.getCacheHit()==1){
  71.                                         hitC1++;
  72.                                 }else if(dadoMemoriaAdd2.getCacheHit()==2){
  73.                                         missC1++;
  74.                                         hitC2++;
  75.                                 }else if(dadoMemoriaAdd2.getCacheHit()==3){
  76.                                         missC1++;
  77.                                         missC2++;                                      
  78.                                 }
  79.                                 if(dadoMemoriaAdd3.getCacheHit()==1){
  80.                                         hitC1++;
  81.                                 }else if(dadoMemoriaAdd3.getCacheHit()==2){
  82.                                         missC1++;
  83.                                         hitC2++;
  84.                                 }else if(dadoMemoriaAdd3.getCacheHit()==3){
  85.                                         missC1++;
  86.                                         missC2++;                                      
  87.                                 }
  88.                                
  89.                                 System.out.println("Custo at� o momento do programa em execu��o: " + custo);
  90.                                 System.out.println("Hits e Misses at� o momento - C1 hit | C1 miss | C2 hit | C2 miss: " + hitC1+ " | "+ missC1 + " | "+hitC2 + " | "+ missC2);
  91.                                
  92.                                 switch (opcode){
  93.                                         //levar para cache1 dados externos
  94.                                         case 0:{
  95.                                                 System.out.println("N�o h� demanda por levar dados externos para as mem�rias. ");
  96.                                                 break;
  97.                                         }
  98.                                         case 1:{
  99.                                                 //somar
  100.                                                 int conteudo1 = dadoMemoriaAdd1.getPalavras()[umaInstrucao.getAdd1().getEndPalavra()];
  101.                                                 int conteudo2 = dadoMemoriaAdd2.getPalavras()[umaInstrucao.getAdd2().getEndPalavra()];
  102.                                                 int soma = conteudo1+conteudo2;
  103.                                                
  104.                                                 //salvando resultado na cache1
  105.                                                 dadoMemoriaAdd3.getPalavras()[umaInstrucao.getAdd3().getEndPalavra()] = soma;
  106.                                                
  107.                                                 System.out.println("somando "+ soma);
  108.                                                 break;
  109.                                         }
  110.                                         case 2:{
  111.                                                 //subtrair
  112.                                                 int conteudo1 = dadoMemoriaAdd1.getPalavras()[umaInstrucao.getAdd1().getEndPalavra()];
  113.                                                 int conteudo2 = dadoMemoriaAdd2.getPalavras()[umaInstrucao.getAdd2().getEndPalavra()];
  114.                                                 int sub = conteudo1-conteudo2;
  115.                                                
  116.                                                 //salvando resultado na cache1
  117.                                                 dadoMemoriaAdd3.getPalavras()[umaInstrucao.getAdd3().getEndPalavra()] = sub;
  118.                                                
  119.                                                 System.out.println("subtraindo "+ sub);
  120.                                                
  121.                                                 break;
  122.                                         }
  123.                                 }
  124.                                
  125.                                 PC++;
  126.                         }//end if
  127.                 }//end while
  128.                
  129.                 System.out.println("Custo total do programa: " + custo);
  130.                 System.out.println("Hits e Misses do programa - C1 hit | C1 miss | C2 hit | C2 miss: " + hitC1+ " | "+ missC1 + " | "+hitC2 + " | "+ missC2);
  131.                
  132.                
  133.         }
  134.        
  135.         private void montarCacheComDados(int tamanho, int tipoCache){
  136.                 Random r = new Random();
  137.                 for(int i=0; i<tamanho; i++){
  138.                         BlocoMemoria aux = new BlocoMemoria();
  139.                         //for�ando cache estar vazia
  140.                         aux.setEndBloco(Integer.MIN_VALUE);
  141.                         int[] palavras = new int[qdePalavrasBloco];
  142.                         for(int j=0;j<qdePalavrasBloco; j++){
  143.                                 palavras[j] = r.nextInt(1000000);
  144.                         }
  145.                         aux.setPalavras(palavras);
  146.                         if (tipoCache==1) cache1[i] = aux;
  147.                         else cache2[i] = aux;
  148.                 }
  149.                
  150.         }
  151.        
  152.         private void montarCacheVazia(int tamanho, BlocoMemoria[] qqCache){
  153.                 for(int i=0; i<tamanho; i++){
  154.                         BlocoMemoria aux = new BlocoMemoria();
  155.                         //for�ando cache estar vazia
  156.                         aux.setEndBloco(Integer.MIN_VALUE);
  157.                        
  158.                         qqCache[i] = aux;
  159.                        
  160.                 }
  161.                
  162.         }
  163.        
  164.         private void montarRam(){
  165.                 Random r = new Random();
  166.                 for(int i=0; i<tamanhoRam; i++){
  167.                         BlocoMemoria aux = new BlocoMemoria();
  168.                         aux.setEndBloco(i);
  169.                         int[] palavras = new int[qdePalavrasBloco];
  170.                         for(int j=0;j<qdePalavrasBloco; j++){
  171.                                 palavras[j] = r.nextInt(1000000);
  172.                         }
  173.                         aux.setPalavras(palavras);
  174.                         RAM[i] = aux;                          
  175.                 }                      
  176.         }
  177.        
  178.         private void montarInstrucaoGerador() {
  179.                 //ler do arquivo uma linha
  180.                 try{
  181.                         File f = new File ("c:/etc/gororoba.txt");
  182.                         FileReader fis = new FileReader(f);
  183.                         BufferedReader br = new BufferedReader(fis);
  184.                        
  185.                         String linha = null;
  186.                        
  187.                         while ((linha = br.readLine())!=null){
  188.                                 String [] linhaPicada = linha.split(":");
  189.                                 Instrucao i = new Instrucao();
  190.                                 i.setOpcode(Integer.parseInt(linhaPicada[0]));
  191.                                 Endereco e1 = new Endereco();
  192.                                 //e1.setEndBloco(endBloco);
  193.                                 //e1.setEndPalavra(endPalavra);
  194.                                
  195.                         }
  196.                        
  197.                 }catch (Exception e){
  198.                        
  199.                 }
  200.                
  201.         }
  202.        
  203.         private void montarInstrucoesProgramaAleatorio(){
  204.                 //0 => salvar na mem�ria
  205.                 //1 => opcode => somar
  206.                 //2 => opcode => subtrair
  207.                 //-1 => halt
  208.                
  209.                 memoriaInstrucoes= new Instrucao[tamanhoPrograma];
  210.                
  211.                 Instrucao umaInstrucao;
  212.                
  213.                 Random r = new Random();
  214.                 for (int i=0; i<tamanhoPrograma-1; i++){       
  215.                        
  216.                         umaInstrucao = new Instrucao();
  217.                         umaInstrucao.setOpcode(r.nextInt(3));
  218.                        
  219.                         Endereco add1 = new Endereco();
  220.                         add1.setEndBloco(r.nextInt(tamanhoRam));
  221.                         add1.setEndPalavra(r.nextInt(qdePalavrasBloco));
  222.                         umaInstrucao.setAdd1(add1);
  223.                        
  224.                         Endereco add2 = new Endereco();
  225.                         add2.setEndBloco(r.nextInt(tamanhoRam));
  226.                         add2.setEndPalavra(r.nextInt(qdePalavrasBloco));
  227.                         umaInstrucao.setAdd2(add2);
  228.                        
  229.                         Endereco add3 = new Endereco();
  230.                         add3.setEndBloco(r.nextInt(tamanhoRam));
  231.                         add3.setEndPalavra(r.nextInt(qdePalavrasBloco));
  232.                         umaInstrucao.setAdd3(add3);
  233.                        
  234.                         memoriaInstrucoes[i] = umaInstrucao;
  235.                 }
  236.                
  237.                 //inserindo a ultima instrucao do programa que faz o halt
  238.                 umaInstrucao = new Instrucao();
  239.                 umaInstrucao.setOpcode(-1);
  240.                                        
  241.                 memoriaInstrucoes[tamanhoPrograma-1] = umaInstrucao;
  242.                
  243.                
  244.         }
  245. }
  246.