/// <summary> /// El contructor del controlador. /// No inicializa ningún atributo para obligar al programador a llamar al método inicializar /// </summary> public Controlador() { this.barrier = null; this.procesadores = null; this.cachesDatos = null; this.cacheInstrucciones = null; this.memoriasPrincipales = null; this.ticksReloj = -1; }
/// <summary> /// /// *IMPORTANTE* /// /// Este metodo debe ejecutarse antes de iniciar la simulacion!! /// /// Este metodo inicializa todos los atributos necesarios para la simulacion /// /// </summary> /// <param name="procesadores">Procesadores de la simulacion</param> /// <param name="cachesDatos">CachesDatos de Datos de la simulacion</param> /// <param name="cacheInstrucciones">Cache de instrucciones para todos los procesadores</param> /// <param name="memoriasPrincipales">MemoriasPrincipales Principales de todos los procesadores</param> public void Inicializar(Procesador[] procesadores, CacheDatos[] cachesDatos, CacheInstrucciones cacheInstrucciones, Directorio[] directorios, MemoriaPrincipal[] memoriasPrincipales) { int numeroProcesadores = procesadores.Length; Debug.WriteLine("Controlador: Creando una barrera para " + numeroProcesadores + " procesadores"); this.barrier = new Barrier(numeroProcesadores, entreCiclosDeReloj); this.procesadores = procesadores; this.cachesDatos = cachesDatos; this.cacheInstrucciones = cacheInstrucciones; this.directorios = directorios; this.memoriasPrincipales = memoriasPrincipales; this.ticksReloj = 1; // Se asigna el programa inicial a cada procesador // Por defecto los procesadores deben empezar en finalizado = true para que // el siguiente metodo les asigne un programa AsignarProgramasAProcesadores(); Debug.WriteLine("\nControlador: Nuevo Tick de Reloj " + ticksReloj + "\n"); }