public boolean asignarCPU() {
        Proceso p = cpu.getRunqueue().obtenerMejorProceso();

        /**
         * Se coloca el mejor proceso en la cola de activos como el activo en
         * CPU
         */
        if (p != null) {
            cpu.getRunqueue().eliminarProcesoActivo(p);
            cpu.setProcesoActual(p);
            cpu.getRunqueue().setProcesoActual(p);
        } else {
            /**
             * Si ya no hay procesos en la cola de activos se intercambian las
             * colas de activos y expirados
             */
            cpu.getRunqueue().intercambioActivosExpirados();
            p = cpu.getRunqueue().obtenerMejorProceso();

            if (p != null) {
                cpu.getRunqueue().eliminarProcesoActivo(p);
                cpu.setProcesoActual(p);
                cpu.getRunqueue().setProcesoActual(p);
            }
        }
        /**
         * Si todos los procesos ya estan en la cola de finalizados se termina
         * la simulacion
         */
        if (p == null) {
            if (listaFinalizados.size() == cpu.getTotalProcesos()) {
                terminarSimulacion(cpu.getTiempoOcioso(), reloj.getNumTicks());
            }
            return false;
        } else {
            cpu.getRunqueue().aumentarNumProcesosCambiados();
            return true;
        }
    }