//-----------------------------------------------------------------------------// // Carrega os dados de configuração do Simulador. static bool LoadSetting(ref SettingApp s) { bool flag; string line, param, value; string[] tokens; param = ""; flag = true; try { StreamReader file = new StreamReader("setting.ini"); while ((line = file.ReadLine()) != null) { if (line.StartsWith("#")) { continue; } tokens = line.Split(':'); if (tokens != null && tokens.Length == 2) { param = tokens[0].Trim(' ', '\t'); switch (param) { case "CACHE_SIZE": s.CacheSize = Convert.ToInt32(tokens[1]); break; case "RAM_PAGES_FILE": s.RamPagesFile = tokens[1].Trim(' ', '\t'); break; case "ASSIGNMENT_POLICY": value = tokens[1].Trim(' ', '\t'); switch (value) { case "DIRETO": s.Mapping = AssignmentPolicyType.Direto; break; case "ASSOCIATIVO": s.Mapping = AssignmentPolicyType.Associativo; break; case "POR-CONJUNTO": s.Mapping = AssignmentPolicyType.PorConjunto; break; default: PrintValidValues("ASSIGNMENT_POLICY", value, 1); flag = false; break; } break; case "REPLACEMENT_ALGORITHM": value = tokens[1].Trim(' ', '\t'); switch (value) { case "FIFO": s.Replace = ReplacementAlgorithmType.Fifo; break; case "LRU": s.Replace = ReplacementAlgorithmType.Lru; break; case "LFU": s.Replace = ReplacementAlgorithmType.Lfu; break; case "MRU": s.Replace = ReplacementAlgorithmType.Mru; break; case "RANDOM": s.Replace = ReplacementAlgorithmType.Random; break; default: PrintValidValues("REPLACEMENT_ALGORITHM", value, 1); flag = false; break; } break; default: PrintValidValues(param, "", 2); flag = false; break; } } } } catch (FileNotFoundException) { Console.ForegroundColor = ConsoleColor.Red; Console.Write("[!] "); Console.ForegroundColor = ConsoleColor.Gray; Console.Write("Não foi possível carregar o arquivo '"); Console.ForegroundColor = ConsoleColor.Red; Console.Write("setting.ini"); Console.ForegroundColor = ConsoleColor.Gray; Console.Write("'. Verifique e tente novamente!!!\n\n"); flag = false; } catch (FormatException) { Console.ForegroundColor = ConsoleColor.Red; Console.Write("[!] "); Console.ForegroundColor = ConsoleColor.Gray; Console.Write("Não foi possível obter o valor do parâmetro '"); Console.ForegroundColor = ConsoleColor.Red; Console.Write("{0}", param); Console.ForegroundColor = ConsoleColor.Gray; Console.Write("'. Verifique e tente novamente!!!\n\n"); flag = false; } return(flag); }
//-----------------------------------------------------------------------------// // Função principal. //-----------------------------------------------------------------------------// static void Main(string[] args) { // Se carrega desde arquivo a configuração do simulador. config = new SettingApp(); if (!LoadSetting(ref config)) { Console.Read(); return; } // Garanto que o tamanho da memória cache sempre seja base 2. config.CacheSize = FixMemoryTo2Potency(); try { // Se carrega desde arquivo os endereços de memória principal. ramPages = readFile_PagesRAM(config.RamPagesFile); } catch (FileNotFoundException) { Console.ForegroundColor = ConsoleColor.Red; Console.Write("[!] "); Console.ForegroundColor = ConsoleColor.Gray; Console.Write("Não foi possível carregar o arquivo '"); Console.ForegroundColor = ConsoleColor.Red; Console.Write(config.RamPagesFile); Console.ForegroundColor = ConsoleColor.Gray; Console.Write("'. Verifique e tente novamente!!!\n\n"); return; } // Loop principal da aplicação. char option; do { Console.Clear(); PrintWelcome(); PrintConfiguration(); Console.ForegroundColor = ConsoleColor.Cyan; Console.WriteLine("\n» Selecione o tipo de simulação:"); Console.WriteLine(" (1) Execução simples: 1 mapeamento com 1 substituição (exceto se mapeamento é Direto)"); Console.WriteLine(" (2) Execução por grupo: 1 mapeamento com M substituições (exceto se mapeamento é Direto)"); Console.WriteLine(" (3) Execução múltiple: N mapeamentos com M substituições"); Console.WriteLine(" (0) Sair."); Console.ForegroundColor = ConsoleColor.Gray; Console.Write("Opção: "); option = Convert.ToChar(Console.Read()); switch (option) { case '1': SingleSimulation(); break; case '2': GroupSimulation(); break; case '3': MultipleSimulation(); break; default: continue; } Console.WriteLine("\nDigite qualquer tecla para ir ao menu de seleção..."); Console.ReadKey(); FlushKeyboard(); } while (option != '0'); }