Exemplo n.º 1
0
        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();
        }
Exemplo n.º 2
0
        //-----------------------------------------------------------------------------//
        // 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));
        }