2009-05-27 9 views
8

Me acaba de golpear el otro día. ¿Qué sucede realmente cuando le digo a la computadora que entre en Stand-By o Hibernate?¿Qué sucede durante el modo de espera y la hibernación?

Más específicamente, ¿qué implicaciones, si las hay, tiene en el código que se está ejecutando? Por ejemplo, si una aplicación está comprimiendo algunos archivos, codificando archivos de video, revisando el correo electrónico, ejecutando una consulta en la base de datos, generando informes o simplemente procesando muchos datos o haciendo complicadas tareas de matemática. ¿Lo que pasa? ¿Puedes terminar con un error en tu video? ¿Puede la consulta de la base de datos fallar? ¿El procesamiento de datos puede contener errores?

Pregunto esto por curiosidad general, pero también porque comencé a preguntarme si esto es algo en lo que debería pensar cuando me programe.

Respuesta

6

Debe recordar que el sistema operativo (programador) congela su programa alrededor de un billón de veces por segundo. Esto significa que su programa ya puede funcionar bastante bien cuando el sistema operativo lo congele. No hay mucha diferencia, desde su punto de vista, entre el modo de espera, la hibernación y el cambio de contexto.

Lo que es diferente es que estarás congelado durante mucho tiempo. Y esto es lo único en lo que debes pensar. En la mayoría de los casos, esto no debería ser un problema.

Si tiene una conexión de red, es probable que necesite restablecerla y problemas similares. Pero esto solo significa buscar errores en todas las operaciones IO, que estoy seguro de que ya está haciendo ... :-)

+0

Ese es un muy buen punto. ¡Nunca pensé en eso! – Svish

+0

También tenga en cuenta que, si bien en prinicple standby/hibernate debería restaurar * todo * hardware a su estado anterior (RAM, CPU, gráficos, etc.), es posible que esto no funcione para todo el hardware. Por lo tanto, es posible que algunos dispositivos de hardware no se "activen" correctamente. Normalmente esto solo ocurre con controladores defectuosos, pero es algo a lo que hay que prestarle atención, especialmente con hardware inusual (por ejemplo, tarjetas de interfaz especiales). – sleske

2

Stand-By mantiene su "estado" vivo manteniéndolo en la memoria RAM. Como consecuencia, si pierde potencia, perderá su "estado" almacenado.

Pero lo hace más rápido de lograr.

Hibernación almacena su "estado" en la RAM virtual en el disco duro, por lo que si pierde potencia, puede volver tres días después. Pero es más lento.

Supongo que una limitación con Stand-By es la cantidad de memoria RAM que tiene, pero estoy seguro de que la memoria RAM virtual debe ser utilizada por Stand-By cuando se agota la memoria RAM estándar. ¡Lo buscaré y volveré!

+0

La computadora hiberna, simplemente escribe el contenido de la RAM en el disco. La próxima vez que inicie, restaurará el contenido de la RAM del disco. Cuando el sistema operativo se queda sin RAM estándar, escribe cosas en el disco, esto se llama paginación :) – Philippe

+0

Y, AFAIK, la paginación ocurre cuando la PC también funciona normalmente (si se queda sin memoria RAM) – Svish

+0

@Philippe - eso es lo que estoy diciendo; hibernate toma el contenido de tu RAM y lo coloca en la HDD – joshcomley

1

El artículo de Wikipedia en ACPI contiene los detalles sobre los diferentes modos de ahorro de energía que están presentes en PC modernas.

Ésta es la idea básica, de cómo entiendo cosas:

La idea básica es mantener el estado actual del sistema persistió, por lo que cuando la máquina se pone de nuevo en funcionamiento, se puede reanudar en el estado en que se fue antes de que la máquina entrara en modo de suspensión/suspensión/hibernación, etc. Piense en ello como serialización para su PC.

En modo de espera, la computadora seguirá alimentando la RAM, ya que la memoria principal es volatile memory que necesita constante refreshing para mantener su estado. Esto significa que los discos duros, la CPU y otros componentes se pueden apagar, siempre que haya suficiente energía para mantener actualizada la DRAM y evitar que su contenido desaparezca.

En hibernación, la memoria principal también se apagará, por lo que los contenidos se deben copiar a un almacenamiento permanente, como un disco duro, antes de apagar el sistema. Aparte de eso, la premisa básica de la hiberación no es diferente del modo de espera: almacenar el estado actual de la máquina para restaurar en un momento posterior.

Teniendo esto en cuenta, probablemente no sea muy probable que pasar al modo de espera o hibernar cause problemas con las tareas que se están ejecutando en este momento. Sin embargo, puede no ser una buena idea permitir que la actividad de la red se detenga en el medio de la ejecución, ya que dependiendo del protocolo, su conexión de red podría expirar y no podría reanudarse al regresar el sistema a su estado de ejecución.

Además, puede haber algunas máquinas que solo tienen controladores de ahorro de energía escamosos que pueden hacer que pase al modo de espera y nunca vuelvan, pero eso es completamente un problema diferente.

3

Mi idea inicial es que, siempre que su programa y su ecosistema estén contenidos dentro de la PC que está en modo de espera o hibernación, entonces, al reanudar su programa, no se verá afectado.

Sin embargo, si dices actualizar un registro en alguna base de datos alojada en una máquina separada, la hibernación/espera se tratará como un tiempo de espera.

Si su programa depende de un cambio tal en "estado de la alimentación" se puede escuchar WM_POWERBROADCAST mensaje como se ha mencionado en msdn

+0

¡Gracias por anotar el mensaje WM_POWERBROADCAST en msdn! Podría ser muy útil si una aplicación necesita restablecer una conexión de red o algo =) – Svish

0

Hay algunas implicaciones para su código. La hibernación es más que un cambio de contexto del planificador. Las conexiones de red se cerrarán, las unidades de red o los medios extraíbles se pueden desconectar durante la hibernación, ...

No creo que se pueda notificar la hibernación de su aplicación (pero podría estar equivocado). Lo que debe hacer es manejar situaciones de error (por ejemplo, pérdida de conectividad de red) de la forma más elegante posible. Y tenga en cuenta que esas situaciones de error también pueden ocurrir durante el funcionamiento normal, no solo al entrar en hibernación ...

Cuestiones relacionadas