¿Cómo puede la computadora guardar cosas antes de que falle?


52

Tenía la impresión de que cuando una computadora fallaba, algo salía mal y ya no podía funcionar.

Me preguntaba cómo es que la computadora puede guardar cosas antes de que falle.

¿Es la computadora realmente capaz de saber cuándo va a fallar (y así informar a todos los procesos: " Guardar lo antes posible porque estoy a punto de fallar ")?

Si no es así, ¿cómo es posible que a los programas les guste Chromey Microsoft Wordpueda ofrecer servicios de "restauración" después de que la computadora se haya bloqueado?


13
Me gusta cómo está la respuesta a la pregunta en el título de la pregunta.
Chris

¿Cómo pueden encenderse las luces de emergencia cuando está apagada?
JoelFan

@JoelFan no lo hacen si su batería / generador está
agotado

Respuestas:


6

Cuando una computadora "falla", puede deberse, por ejemplo, a una falla de energía "abrupta" (en cuyo caso no se puede hacer nada), puede deberse a algún tipo de evento interno desagradable (por ejemplo, tablas de páginas corruptas) que de manera similar, impide hacer algo, o puede deberse a alguna condición que simplemente impide "operaciones adicionales" de alguna manera: tal vez no se puedan iniciar nuevos procesos, tal vez la pantalla no se pueda actualizar, tal vez el sistema simplemente se haya quedado sin almacenamiento.

En estas últimas situaciones, el sistema operativo todavía puede funcionar, dentro de los límites, y al menos puede completar las operaciones de disco que estaban en curso, cerrar archivos, etc. Además, si es posible un poco más de función, el sistema operativo puede decirle a las diversas aplicaciones procesos para cerrarse limpiamente.

Pero incluso si el sistema se cae "duro", el sistema en su conjunto y las aplicaciones individuales pueden haber mantenido un sistema de "diarios" y / o "puntos de control" para permitir que el estado del sistema en su conjunto y las aplicaciones individuales sean restauradas a un punto "atómico", donde todo es "internamente consistente", y donde se ha perdido un mínimo de datos importantes.

Todo esto no se logra con un solo mecanismo, sino con capas de funcionalidad a nivel de sistema y aplicación.

Con respecto a las fallas de energía específicamente, puede haber o no una notificación anticipada, y la advertencia de "avance" puede ser una fracción de segundo o (con UPS o una batería defectuosa de la computadora portátil) varios minutos. Lo que se puede hacer depende de la cantidad de advertencia.

En la mayoría de los casos, con un sistema de escritorio sin UPS, es el mejor momento para "detener" las operaciones de disco para que ningún disco esté en el medio de una escritura cuando la energía finalmente desaparezca. Esto evita generar sectores defectuosos en el disco. Solía ​​ser, cuando la RAM era mucho más pequeña, que podía haber suficiente tiempo (con condensadores grandes en la fuente de alimentación, o incluso, usando de forma extraña la energía almacenada en el rotor de la unidad de disco para generar electricidad) para escribir RAM en el disco antes de la alimentación cayó, pero esa posibilidad prácticamente desapareció cuando la RAM creció más de 100M más o menos.

[Y tenga en cuenta que, en los viejos tiempos, cuando los recuerdos se hacían con "núcleos" magnéticos, la RAM se conservaba inherentemente cuando se cortaba la energía (aunque una palabra en particular que se leía / escribía cuando fallaba la energía podía corromperse). Esto facilitó la recuperación de esos viejos sistemas de una falla de energía.]

Sin embargo, con algo parecido a un UPS (que puede dar desde unos minutos hasta varias horas de energía adicional) hay varias opciones más. Una es simplemente apagar el sistema, como si solicitara "apagar". Esto hace que cada aplicación finalice, y luego el sistema en su conjunto escribe tablas permanentes y se apaga. Esto puede llevar mucho tiempo (como estoy seguro de que muchos de ustedes lo han notado). Pero también es posible utilizar una estrategia de "hibernación", donde la RAM se escribe en el disco como un solo bloque, y luego el sistema se apaga. En el escenario de "hibernación", al restablecer la energía, la RAM se vuelve a leer exactamente donde se escribió, unos pocos bits aquí y allá se mezclan, y luego se reanuda la ejecución donde se quedó.

En algunos sistemas antiguos de "gran hierro", se utilizó una estrategia de semi-hibernación para hacer un apagado de emergencia: la memoria se escribiría como se indicó anteriormente, pero cuando se restableciera la alimentación y se leyera la memoria, se produciría un apagado estándar. Esto se hizo porque algunos bits del estado del sistema (particularmente en los controladores de E / S) no se pudieron guardar / restaurar de manera confiable para permitir la operación continua.


82

Chrome y Microsoft Word guardan periódicamente su estado actual mientras trabaja. Si la aplicación o la computadora falla, cuando las aplicaciones se reinician, buscan un estado guardado en el disco y lo restauran por usted. No necesitan predecir el choque; constantemente están salvando su estado en caso de que algo salga mal.


10
Esto sólo es parcialmente cierto. Los sistemas operativos ahora proporcionan marcos para ayudar a las aplicaciones a recuperarse de las excepciones.
surfasb

3
@surfasb: ¿Podría ser más específico? Siempre hemos podido captar señales en sistemas tipo Unix, pero depende del programador de la aplicación hacer algo al respecto.
Dietrich Epp

55
Esta respuesta es correcta. La mayoría de las aplicaciones con recuperación de errores guardan sus datos periódicamente. El sistema operativo no puede saber cuándo está a punto de fallar. Y cuando se entera, es demasiado tarde.
Bogdacutu

1
@surfasb, la pregunta que se hizo sobre la falla de la computadora (Kernel presumiblemente), no la aplicación obtiene una excepción, que generalmente se maneja y todo está bien, o en el mejor de los casos, el núcleo del proceso se descarga, no guarda sus documentos.
psusi

62

EDITAR: esto solo funciona cuando una aplicación falla, no Windows.

Desde Windows Vista, hay una nueva API que le permite a Windows llamar a una función especial en la aplicación cuando se bloquea para que pueda intentar recuperar cualquier información antes de que se cierre. Funciona así:

  • La aplicación se inicia
  • La aplicación llama a la función de Windows: cuando falle, ejecute RecoverData()
  • ...
  • La aplicación se bloquea
  • Windows se ejecuta RecoverData()en la aplicación
  • RecoverData() intenta recuperar datos sobre el documento abierto actualmente, mientras tanto, sigue haciendo ping a Windows para indicar que todavía está ocupado recuperándose.
  • Cuando RecoverData()finaliza / agota el tiempo de espera / deja de hacer ping, Windows finaliza la aplicación y la reinicia.

Más información: http://msdn.microsoft.com/en-us/library/windows/desktop/aa373351(v=VS.85).aspx


8
+1: Esta es una de las herramientas menos utilizadas por desgracia. Y también tristemente, ¿esta no es la respuesta más votada?
surfasb

2
Sin embargo, @ZippyV, ¿no es cierto que si no es la aplicación la que se bloquea sino la ventana que se bloquea, la computadora no tiene la capacidad de llamar RecoverData()?
Pacerier

12
El OP pregunta sobre el bloqueo de la computadora (SO), no el bloqueo de la aplicación, por lo tanto, esta respuesta es irrelevante.
vitaut

Es cierto que en el caso de un BSOD, esto no funcionará.
ZippyV

Qué API más tonta para MS agregar. Una vez que llega a ese punto, no puede confiar en la aplicación para guardar ningún dato, razón por la cual las aplicaciones se han diseñado durante décadas para guardar datos antes de que algo salga mal.
psusi

16

Bueno, solo guardan el estado actual antes de que se bloqueen. Como un guardado automático cada X segundos.

Creo que uno realmente tiene que diferenciar:

  • Bloqueo de hardware: solo se puede recuperar con puntos de control anteriores
  • Choque del sistema operativo: no hay forma de que la aplicación guarde datos, el sistema operativo puede descartar algo como un volcado de núcleo
  • Fallo de la aplicación: las características del sistema operativo para el bloqueo de la aplicación pueden guardar información

Sí, estaba hablando de los bloqueos más graves como el sistema operativo / hardware
Pacerier

10

Depende de la gravedad del accidente. Un choque muy severo (en el nivel más bajo de la computadora) hará que la computadora simplemente se detenga. El único trabajo que se guarda es que cada aplicación guarde automáticamente sus datos periódicamente.

Para bloqueos menos severos, la computadora advertirá a cada programa que necesita apagarse. SI el programa escucha este mensaje, aquí es donde el programa guardará los datos actuales. Sin embargo, no todos los programas prestan atención a este mensaje.


1
Sin embargo, no creo que la última parte sea realmente posible. Windows solo le da un BSoD si detecta una excepción en modo kernel u otro error fatal que significa que algunos datos en el espacio de direcciones del kernel están corruptos. Debido a que los programas en modo kernel (controladores, etc.) tienen acceso ilimitado a la memoria, el error no puede aislarse fácilmente a los componentes, por lo que todo el sistema debe apagarse en modo kernel. Señalar programas de espacio de usuario para guardar datos esencialmente significa reanudar gran parte de la funcionalidad del núcleo, lo cual es muy peligroso.
billc.cn

2
La última parte parece referirse a bloqueos del espacio del usuario, no a BSoD.
3Doubloons

8

Los programas guardan su estado periódicamente en un archivo en el disco. La computadora no es capaz de saberlo. De hecho, el volcado por caída ni siquiera se realiza utilizando el controlador de disco: el sistema simplemente pagina toda la memoria.


La paginación se realiza con el controlador de disco; sin él, el núcleo no sabría cómo escribir en el disco.
psusi

@psusi Cuando el sistema falla, el archivo de paginación es el único lugar donde el núcleo sabe que puede escribir de manera segura.
kinokijuf

Sí, y en realidad escribe a través del controlador de disco.
psusi

1
No. Lo hace a través de un controlador especial "dump_atapi.sys" (atapi sustituto para su controlador SCSI), NO el controlador de disco estándar. Creo que incluso usa Int 13h.
kinokijuf

6

Tenía la impresión de que cuando una computadora fallaba, algo salía mal y ya no podía funcionar.

Sí, esto es completamente cierto. Sin embargo, desde una perspectiva lógica, su programa no se ejecuta sin restricciones en la computadora. El programa se ejecuta bajo el sistema operativo!

Me preguntaba cómo es que la computadora puede guardar cosas antes de que falle. ¿Es la computadora realmente capaz de saber cuándo va a fallar (y así informar a todos los procesos: "Guardar lo antes posible porque estoy a punto de fallar")?

Bueno, en el caso de un BSOD o kernel panic, el sistema operativo determinó que algo realmente inseguro iba a suceder (puntero de memoria no válido, sobrescribir alguna memoria asignada al kernel del sistema operativo, acceso a hardware inexistente, etc. .). En ese caso, el sistema operativo exige que todos los procesos detengan la ejecución, guarda el contenido de la RAM en el disco (ya que el sistema operativo también es responsable de administrar la asignación de memoria) y apaga o reinicia la computadora de manera segura.

Las aplicaciones individuales se bloquean cuando el programa genera una excepción no controlada que se propaga al sistema operativo. En este caso, el sistema operativo detendrá la ejecución del programa y cerrará los identificadores de memoria / archivo abiertos.

En los dos casos anteriores, la ejecución del programa no suele finalizar correctamente. En estos casos, depende de las aplicaciones individuales recuperar sus propios datos, ya que de repente simplemente "detienen" la ejecución.

Si no, ¿cómo es posible que programas como Chrome y Microsoft Word puedan ofrecer servicios de "restauración" después de que la computadora se haya bloqueado?

IIRC, ambas aplicaciones guardan periódicamente los estados de la aplicación en el disco para evitar la pérdida de datos si se produce la condición mencionada anteriormente. Por ejemplo, Word guarda automáticamente una copia de seguridad de su documento de trabajo actual cada pocos minutos para que, en caso de un reinicio forzado repentino, pueda recuperar sus datos (dar o tomar unos minutos de trabajo) sin tener que hacerlo. He hecho cualquier cosa.

Sin embargo, una vez más, como desarrollador, es su responsabilidad asegurarse de que su aplicación pueda manejar estas situaciones.


"En ese caso, el sistema operativo exige todos los procesos para detener la ejecución, guarda el contenido de la RAM en el disco y apaga o reinicia la computadora de forma segura". - los contenidos de RAM que se guardan en el disco, ¿cuándo se "restauran"?
Pacerier

1
No lo hacen en el curso normal de los eventos. Sin embargo, si su computadora se bloquea regularmente, un programador experto puede usar este archivo para descubrir la causa.
poco el

@Pacerier como kindalldeclaró, ellos no se restauran (puesto que si lo hizo restaurar la memoria RAM, debería estar en el mismo estado de ejecución que causó el equipo se bloquee en el primer lugar!). Puede cambiar lo que está escrito en el disco en Windows en Propiedades del sistema -> Avanzado -> Inicio y recuperación. Y nuevamente, como se kindallindicó, esta información es principalmente útil para los desarrolladores que intentan determinar qué causó el error.
Avance el

3

sí, el proceso de restauración de datos no es solo por fallas en la computadora, es por cortes de energía, fallas en el programa, salir sin guardar y mucho más ...

Lo que usted dijo es cierto, la computadora no puede "saber" cuándo se va a bloquear, en el caso de Word, guarda automáticamente periódicamente para poder restaurar esos datos. En el caso de Chrome, probablemente almacena la información de cada pestaña en algún lugar y la elimina al salir con éxito, o cuando comienza una sesión nueva y diferente ... o probablemente de otras maneras también ... de todos modos, de esa manera, si no termina con un cierre exitoso, tiene esos datos para restaurar.

Yo (obviamente) no trabajo para Microsoft o Google, pero esa es probablemente la forma en que funciona.


2

Un programa puede escribir una marca en el disco que simplemente diga algo como "En el arranque, si esta marca está configurada, entonces algo salió mal". En el arranque, se marca esa bandera para ver si está configurada. Si es así, el programa sabe que algo salió mal.

El indicador siempre funciona, ya que se puede configurar tan pronto como se inicia el programa y apagarse cuando el programa sale normalmente. Si las salidas del programa se deben a un error inesperado, como una computadora que se apaga inesperadamente, la bandera aún se establecerá ya que no salió normalmente. Luego, el programa puede decir que no salió normalmente la última vez que se ejecutó.


2

Como dice @bamboom , hay varios tipos diferentes de "bloqueos" informáticos que deben manejarse de manera diferente. Efectivamente, un corte de energía es muy diferente de, digamos, una división entera por cero error.

Con muchos lenguajes de programación que también admiten excepciones (bifurcación controlada a un controlador de errores cuando algo sale completamente mal), existe la posibilidad de tener un controlador de errores de nivel superior para toda la aplicación que pueda guardar el estado de la aplicación (incluidos los documentos abiertos, los cambios realizados , etc.) cuando se produce un error de aplicación no controlada. La idea es intentar leerlo todo cuando se reinicie la aplicación. Dependiendo del tipo de error y exactamente cómo se implementa, no siempre funciona, y, por supuesto, depende de cada aplicación por separado hacer algo significativo ante un error y con los datos resultantes, pero puede ser un problema. estrategia sorprendentemente eficaz para ayudar al usuario a recuperarse de un accidente con una cantidad mínima de trabajo perdido.


2

Me gustaría un punto de bajo nivel aquí, ya que hay una etiqueta de sistema de archivos.

Podrías haber recordado el sistema operativo Windows que usaba el sistema de archivos FAT / FAT16 / FAT32. A veces hubo problemas cuando un usuario experimentó un corte de energía y todo el sistema se cayó. Después de intentar reiniciar, diría que faltaba un archivo y no es posible iniciarlo. Esto sucedió porque FAT32 no realizó un seguimiento de las operaciones que realizaba de manera transaccional.

En contraste, el sistema de archivos NTFS más nuevo recibió soporte diario de su infraestructura, lo que significa que en el bajo nivel de OS y la información de la capa de acceso al hardware se mantendría en una condición segura estable al registrar cualquier acción que se comprometiera.


1

En algunas aplicaciones en algunos sistemas operativos, es posible conectar señales como fallas de segmentación que indican infracciones de acceso a la memoria. En este caso, una rutina simple puede guardar tantos datos como sea posible. Si esos datos son utilizables o no es otra cuestión: el bloqueo puede haberlos corrompido. Si bien es posible que una aplicación continúe ejecutándose después de que interrumpe una señal, no se recomienda, ya que puede estar en un estado inestable con memoria corrupta que puede causar más problemas.

Otras aplicaciones usan el guardado automático, o una combinación de ambos: depende de las necesidades del programa y del soporte de la plataforma para captar estas señales.


Sugerencia: Windows no los tiene.
kinokijuf

1

Un bloqueo del sistema es solo otra rutina que ejecuta el sistema operativo. La razón por la que ocurre un "bloqueo" es porque un programa o biblioteca no se pudo cargar o no se cargó correctamente y tiene la capacidad de causar daños permanentes a los archivos del sistema. Por lo tanto, como medida de seguridad, Windows fuerza un apagado / reinicio y detiene toda escritura en los archivos del sistema antes de que el programa / biblioteca delincuente pueda editar estos archivos.

Antes de apagar / reiniciar, realiza las mismas funciones que un apagado / reinicio normal: es decir, guardar archivos del sistema, etc.

En cuanto a las aplicaciones individuales (Word / Chrome) que guardan su "Progreso", esa es una función interna de la aplicación, que guarda su progreso a intervalos específicos (que generalmente también puede cambiar en la configuración del programa). Si tiene un bloqueo de la aplicación / sistema, después de reiniciar, puede mirar ese archivo y preguntarle si desea restaurar la sesión.


1

Es posible que esté hablando sobre el cierre del sistema operativo debido a la pérdida de energía. Esto podría decirse que es una especie de accidente.

La fuente de alimentación informa a la placa base (supongo que a través de un cable de señalización) sobre cualquier interrupción prolongada de su entrada, la corriente de CA de la pared adecuada, mucho antes de que detenga su salida, que es la fuente de corriente de CC adecuada para la placa base. Puede hacer esto porque almacena su electricidad en condensadores grandes. El sistema operativo recibe esta señal en forma de interrupción de hardware.

Durante este largo intervalo, hay suficiente tiempo para que un sistema de archivos de almacenamiento en búfer de escritura transfiera todas las escrituras almacenadas en búfer al medio de almacenamiento físico permanente, así como para realizar otras rutinas de apagado.

Una gran ventaja de un sistema de archivos de búfer de escritura es que al ordenar las escrituras, puede reducir los movimientos del brazo en las unidades de disco duro, haciéndolas menos y menos distantes.

Esto es similar a lo que @oleksii dice en su respuesta, excepto que en un sistema de archivos de almacenamiento intermedio de escritura, las transacciones completadas normalmente no se transfieren inmediatamente, sino que simplemente se almacenan en el búfer. En caso de falla de energía, las transacciones completadas deben transferirse al disco.


0

Las aplicaciones pueden captar señales en C y guardar ciertos datos. Una señal que puede obtener accidentalmente es la Excepción aritmética de punto flotante SIGFPE (ANSI). Los errores incluyen división por cero y desbordamiento. Otra señal es SIGINT, que se eleva presionando ctrl + C en la consola o terminal que mata la aplicación.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.