//-----------------------------------------------------------------// // Construtor para um Controlador só com Política de Mapeamento // Direto. public MemoryController(MemoryCache cache, AP_Directo policy) { Cache = cache; nCounter = nHit = nMiss = 0; APolicy = policy; RAlgorithm = null; }
//-----------------------------------------------------------------// // Construtor para um Controlador que pode conter uma Política // de Mapeamentos (Associativo ou Por Conjunto) e algum Algoritmo de // Substituição. public MemoryController(MemoryCache cache, AssignmentPolicy policy, ReplacementAlgorithm replace) { Cache = cache; APolicy = policy; RAlgorithm = replace; nCounter = nHit = nMiss = 0; if (APolicy is AP_PorConjunto) { cache.setTabularRepresentation(true); RAlgorithm.setTabularRepresentation(true); } }
//-----------------------------------------------------------------------------// // 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)); }