public SimulationResults startSimulation() throws InterruptedException {
		this.timeParameters = new TimerParameters(this.configuration);
		AutomatonTestRunner runner = new AutomatonTestRunner(loadScripts(timeParameters));
		this.timer.scheduleWithFixedDelay(runner, 0 , this.timeParameters.getDelay(), TimeUnit.MILLISECONDS);
		
		while(System.currentTimeMillis() < this.timeParameters.getEndTime()){
			Long simulationTime = System.currentTimeMillis() - this.timeParameters.getStartTime();
			if(this.monitor.isSlaComplient(simulationTime) && this.monitor.isAvailable()){
				Long timeUnit = System.currentTimeMillis() - this.timeParameters.getStartTime();
				SystemUnavailable unavailability = this.monitor.buildUnavailability(timeUnit, this.configuration.getTotalRunningTime());
				if(unavailability != null){
					new Thread(unavailability).start();
				}
			}
			Thread.sleep(1L);
		}
		
		this.timeParameters = null;
		return new SimulationResults(this.monitor,this.configuration);
	}