public boolean despiertaProceso(Proceso p) {
        boolean despertado = false;
        int prioridadDinamica;
        int quantum = (140 - p.getPrioridadEstatica()) * (p.getPrioridadEstatica() < 120 ? 20 : 5);
        /**
         * Si el proceso aun no tiene tiempo de ejecucion para el CPU se
         * despacha a la cola de finalizados
         */
        if (p.getTiemposCPU() == 0) {
            insertarListaFinalizados(p);
            /**
             * Si ya todos los procesos estan en la cola de finalizados se
             * termina la simulacion
             */
            if (listaFinalizados.size() == cpu.getTotalProcesos()) {
                terminarSimulacion(cpu.getTiempoOcioso(), reloj.getNumTicks());
            }
        } else {
            p.setQuantum(java.lang.Math.min(quantum, p.getTiemposCPU()));

            if (p.getEstado() == Constantes.TASK_INTERRUPTIBLE) {
                prioridadDinamica = this.reCalcularPrioridadDinamica(p, reloj.getNumTicks());
                p.setEstado(Constantes.TASK_RUNNING);
                /**
                 * Si el CPU no tiene proceso actual se selecciona a p como el
                 * actual
                 */
                if (cpu.getProcesoActual() == null) {
                    cpu.setProcesoActual(p);
                    cpu.getRunqueue().setProcesoActual(p);
                } else {
                    /**
                     * En caso contrario se verifica si se puede expropiar el
                     * proceso activo en CPU
                     */
                    cpu.getRunqueue().insertarProcesoActivo(p);
                    // Se verifica si tiene mayor o menor prioridad que el que esta en CPU
                    if (cpu.getProcesoActual().getPrioridadDinamica() > prioridadDinamica) {
                        cpu.getRunqueue().insertarProcesoActivo(cpu.getProcesoActual());
                        cpu.setProcesoActual(null);
                        cpu.getRunqueue().setProcesoActual(null);
                        this.asignarCPU();
                    }
                }
                despertado = true;
            }
        }
        return despertado;
    }