static void ExecutionOutput(AssignmentPolicyType mapeamento, ReplacementAlgorithmType algoritmo) { string map = mapeamento.ToString().ToUpper(); string alg = algoritmo.ToString().ToUpper(); MemoryController controller; //----- // Execução: Mapeamento DIRETO || (Mapeamento X & Substituição Y). //----- if (map == "PORCONJUNTO") { map = "ASSOCIATIVO POR CONJUNTOS"; } // Passo 1: Crio um controlador de memória cache if (mapeamento == AssignmentPolicyType.Direto) { PrintHeader(map, "", 1); controller = BuildMemoryController(config.CacheSize, mapeamento); } else { PrintHeader(map, alg, 2); controller = BuildMemoryController(config.CacheSize, mapeamento, algoritmo); } // Passo 2: Realizo as operações de leitura/escrita sobre a cache. foreach (var page in ramPages) { controller.R_W(page); } // Passo 3: Mostro as estatísticas finais da simulação. if (mapeamento == AssignmentPolicyType.Direto) { PrintHeader(map, "", 1); } else { PrintHeader(map, alg, 2); } controller.GlobalStatistics(); }
//-----------------------------------------------------------------------------// // Constrói um controlador de memória segundo a configuração carregada desde // o arquivo <setting.ini> static MemoryController BuildMemoryController(int size, AssignmentPolicyType mapping, ReplacementAlgorithmType replacing = 0) { MemoryCache memory = new MemoryCache(size); AssignmentPolicy assignment = null; ReplacementAlgorithm replace = null; if (mapping == AssignmentPolicyType.Direto) { return(new MemoryController(memory, new AP_Directo(size))); } else { // Dependendo da configuração, crio a Política de Mapeamento necessária. switch (mapping) { case AssignmentPolicyType.Associativo: assignment = new AP_Associativa(size); break; case AssignmentPolicyType.PorConjunto: assignment = new AP_PorConjunto(size); break; } // Dependendo da configuração, crio o Algoritmo de Substituição necessário. switch (replacing) { case ReplacementAlgorithmType.Fifo: replace = new RA_FIFO(size); break; case ReplacementAlgorithmType.Lfu: replace = new RA_LFU(size); break; case ReplacementAlgorithmType.Lru: replace = new RA_LRU(size); break; case ReplacementAlgorithmType.Mru: replace = new RA_MRU(size); break; case ReplacementAlgorithmType.Random: replace = new RA_RANDOM(size); break; } } return(new MemoryController(memory, assignment, replace)); }