Un temporizador de vigilancia ( WDT , o simplemente un perro guardián ), a veces llamado temporizador de funcionamiento correcto de la computadora ( temporizador COP ), [1] es un temporizador electrónico o de software que se utiliza para detectar y recuperarse de fallas de la computadora . Los temporizadores de vigilancia se usan ampliamente en computadoras para facilitar la corrección automática de fallas temporales de hardware y para evitar que software erróneo o malicioso interrumpa el funcionamiento del sistema.
Durante el funcionamiento normal, el equipo reinicia periódicamente el temporizador de vigilancia para evitar que transcurra el tiempo de espera o que se "agote el tiempo de espera". Si, debido a una falla de hardware o un error de programa, el equipo no logra reiniciar el temporizador, el temporizador transcurrirá y generará una señal de tiempo de espera. La señal de tiempo de espera se utiliza para iniciar acciones correctivas. Las acciones correctivas generalmente incluyen colocar el equipo y el hardware asociado en un estado seguro e invocar un reinicio del equipo .
Los microcontroladores suelen incluir un sistema de vigilancia integrado en el chip. En otras computadoras, el sistema de vigilancia puede estar ubicado en un chip cercano que se conecta directamente a la CPU o en una tarjeta de expansión externa en el chasis de la computadora.
Los temporizadores de vigilancia se encuentran comúnmente en sistemas integrados y otros equipos controlados por computadora donde los humanos no pueden acceder fácilmente al equipo o no podrían reaccionar a fallas de manera oportuna. En tales sistemas, la computadora no puede depender de un humano para invocar un reinicio si se cuelga ; debe ser autosuficiente. Por ejemplo, los sistemas integrados remotos, como las sondas espaciales , no son accesibles físicamente para operadores humanos; estos podrían quedar deshabilitados permanentemente si no pudieran recuperarse de manera autónoma de las fallas. En robots y otras máquinas automatizadas, una falla en la computadora de control podría causar daños al equipo o lesiones antes de que un humano pudiera reaccionar, incluso si la computadora es de fácil acceso. Un temporizador de vigilancia generalmente se utiliza en casos como estos.
Los temporizadores de vigilancia también se utilizan para supervisar y limitar el tiempo de ejecución de software en una computadora que funciona normalmente. Por ejemplo, se puede utilizar un temporizador de vigilancia cuando se ejecuta código no confiable en un entorno aislado , para limitar el tiempo de CPU disponible para el código y así evitar algunos tipos de ataques de denegación de servicio . [2] En los sistemas operativos en tiempo real , se puede utilizar un temporizador de vigilancia para supervisar una tarea crítica en el tiempo para garantizar que se complete dentro de su tiempo máximo asignado y, si no lo hace, para finalizar la tarea e informar el error.
El acto de reiniciar un temporizador de vigilancia se conoce comúnmente como patear [a] el temporizador de vigilancia. [3] [4] La patada se realiza típicamente escribiendo en un puerto de control de vigilancia o configurando un bit particular en un registro . Alternativamente, algunos temporizadores de vigilancia estrechamente acoplados [b] se patean ejecutando una instrucción especial en lenguaje de máquina . Un ejemplo de esto es la instrucción CLRWDT (borrar temporizador de vigilancia) que se encuentra en el conjunto de instrucciones de algunos microcontroladores PIC .
En los equipos que ejecutan sistemas operativos , los reinicios del watchdog se invocan generalmente a través de un controlador de dispositivo . Por ejemplo, en el sistema operativo Linux , un programa de espacio de usuario iniciará el watchdog interactuando con el controlador del dispositivo watchdog, generalmente escribiendo un carácter cero en /dev/watchdog o llamando a un ioctl KEEPALIVE . [5] El controlador de dispositivo, que sirve para abstraer el hardware watchdog de los programas de espacio de usuario, también se puede utilizar para configurar el período de tiempo de espera e iniciar y detener el temporizador.
Algunos temporizadores de vigilancia solo permiten patadas durante una ventana de tiempo específica. La ventana de tiempo suele ser relativa a la patada anterior o, si el sistema de vigilancia aún no ha sido pateado, al momento en que se habilitó. La ventana comienza después de un retraso posterior a la patada anterior y finaliza después de otro retraso. Si la computadora intenta patear el sistema de vigilancia antes o después de la ventana, el sistema de vigilancia no se reiniciará y, en algunas implementaciones, esto se tratará como un error y activará una acción correctiva.
Se dice que un temporizador de vigilancia está habilitado cuando está en funcionamiento y deshabilitado cuando está inactivo. Al encenderse, un temporizador de vigilancia puede estar habilitado incondicionalmente o puede estar deshabilitado inicialmente y requerir una señal externa para habilitarlo. En este último caso, la señal de habilitación puede generarse automáticamente por hardware o puede generarse bajo control de software.
Cuando se genera automáticamente, la señal de habilitación generalmente se deriva de la señal de reinicio de la computadora. En algunos sistemas, la señal de reinicio se utiliza directamente para habilitar el mecanismo de vigilancia. En otros, la señal de reinicio se retrasa para que el mecanismo de vigilancia se habilite en algún momento posterior al reinicio. Este retraso le da tiempo al equipo para iniciarse antes de que se habilite el mecanismo de vigilancia. Sin este retraso, el mecanismo de vigilancia se quedaría sin tiempo y se ejecutaría un reinicio posterior antes de que el equipo pueda ejecutar su software de aplicación (el software que expulsa al mecanismo de vigilancia) y el sistema quedaría atascado en un ciclo interminable de reinicios incompletos.
Los temporizadores de vigilancia vienen en muchas configuraciones y muchas permiten modificarlas. Por ejemplo, el temporizador de vigilancia y la CPU pueden compartir una señal de reloj común , como se muestra en el diagrama de bloques a continuación, o pueden tener señales de reloj independientes. Un temporizador de vigilancia básico tiene una sola etapa de temporizador que, al expirar el tiempo de espera, normalmente reiniciará la CPU:
Dos o más temporizadores a veces se conectan en cascada para formar un temporizador de vigilancia de varias etapas , donde cada temporizador se denomina etapa del temporizador o simplemente etapa . Por ejemplo, el diagrama de bloques a continuación muestra un temporizador de vigilancia de tres etapas. En un temporizador de vigilancia de varias etapas, el procesador solo activa la primera etapa. Cuando se agota el tiempo de espera de la primera etapa, se inicia una acción correctiva y se inicia la siguiente etapa de la cascada. A medida que se agota el tiempo de espera de cada etapa posterior, se activa una acción correctiva y se inicia la siguiente etapa. Cuando se agota el tiempo de espera de la etapa final, se inicia una acción correctiva, pero no se inicia ninguna otra etapa porque se ha alcanzado el final de la cascada. Por lo general, los temporizadores de vigilancia de una sola etapa se utilizan simplemente para reiniciar la computadora, mientras que los temporizadores de vigilancia de varias etapas activarán secuencialmente una serie de acciones correctivas, y la etapa final activará el reinicio de la computadora. [4]
Los temporizadores de vigilancia pueden tener intervalos de tiempo fijos o programables. Algunos temporizadores de vigilancia permiten programar el intervalo de tiempo seleccionando entre unos pocos valores discretos seleccionables. En otros, el intervalo se puede programar con valores arbitrarios. Normalmente, los intervalos de tiempo de vigilancia varían de diez milisegundos a un minuto o más. En un temporizador de vigilancia de varias etapas, cada temporizador puede tener su propio intervalo de tiempo único.
Un temporizador de vigilancia puede iniciar cualquiera de varios tipos de acciones correctivas, incluyendo interrupción enmascarable , interrupción no enmascarable , reinicio de hardware , activación de estado a prueba de fallas , ciclo de energía o combinaciones de estos. Dependiendo de su arquitectura, el tipo de acción correctiva o acciones que un temporizador de vigilancia puede activar puede ser fijo o programable. Algunas computadoras (por ejemplo, compatibles con PC) requieren una señal pulsada para invocar un reinicio de hardware. En tales casos, el temporizador de vigilancia generalmente activa un reinicio de hardware activando un generador de pulso interno o externo, que a su vez crea los pulsos de reinicio requeridos. [4]
En los sistemas integrados y los sistemas de control, los temporizadores de vigilancia se utilizan a menudo para activar los circuitos de seguridad . Cuando se activan, los circuitos de seguridad fuerzan a todas las salidas de control a estados seguros (por ejemplo, apagan motores, calentadores y altos voltajes ) para evitar lesiones y daños al equipo mientras persista la falla. En un temporizador de vigilancia de dos etapas, el primer temporizador se utiliza a menudo para activar las salidas de seguridad e iniciar la segunda etapa del temporizador; la segunda etapa reiniciará la computadora si la falla no se puede corregir antes de que transcurra el tiempo del temporizador.
Los temporizadores de vigilancia se utilizan a veces para activar el registro de información sobre el estado del sistema (que puede resultar útil durante la recuperación de fallos [4] ) o información de depuración (que puede resultar útil para determinar la causa del fallo) en un medio persistente . En tales casos, normalmente se utiliza un segundo temporizador (que se inicia cuando transcurre el tiempo del primero) para reiniciar el equipo más tarde, después de permitir que transcurra el tiempo suficiente para que se complete el registro de datos. Esto permite que se guarde la información, pero garantiza que el equipo se reiniciará incluso si falla el proceso de registro.
Por ejemplo, el diagrama anterior muestra una configuración probable para un temporizador de vigilancia de dos etapas. Durante el funcionamiento normal, la computadora activa regularmente la Etapa 1 para evitar un tiempo de espera. Si la computadora no puede activar la Etapa 1 (por ejemplo, debido a una falla de hardware o un error de programación), la Etapa 1 eventualmente se agotará. Este evento iniciará el temporizador de la Etapa 2 y, simultáneamente, notificará a la computadora (por medio de una interrupción no enmascarable) que un reinicio es inminente. Hasta que se agote el tiempo de espera de la Etapa 2, la computadora puede intentar registrar información de estado, información de depuración o ambas. Como último recurso, la computadora se reiniciará cuando se agote el tiempo de espera de la Etapa 2.
Un temporizador de vigilancia permite la detección automática de averías catastróficas que impiden que el equipo lo expulse. Sin embargo, los equipos suelen tener otros tipos de fallos menos graves que no interfieren con el expulsivo, pero que igualmente requieren la supervisión del temporizador de vigilancia. Para ello, un sistema informático suele estar diseñado de forma que su temporizador de vigilancia se expulse solo si el equipo considera que el sistema funciona. El equipo determina si el sistema funciona realizando una o más pruebas de detección de fallos y expulsará al temporizador de vigilancia solo si se han superado todas las pruebas. [ cita requerida ]
En computadoras que ejecutan un sistema operativo y múltiples procesos , una sola prueba simple podría ser insuficiente para garantizar un funcionamiento normal, ya que podría no detectar una condición de falla sutil y, por lo tanto, permitir que el perro guardián se expulse incluso si existe una condición de falla. Por ejemplo, en el caso del sistema operativo Linux, un demonio de perro guardián del espacio de usuario puede simplemente expulsar al perro guardián periódicamente sin realizar ninguna prueba. Mientras el demonio se ejecute normalmente, el sistema estará protegido contra fallas graves del sistema, como un pánico del núcleo . Para detectar fallas menos graves, el demonio [6] se puede configurar para realizar pruebas que cubran la disponibilidad de recursos (por ejemplo, memoria suficiente y controladores de archivos , tiempo de CPU razonable), evidencia de la actividad esperada del proceso (por ejemplo, demonios del sistema en ejecución, archivos específicos presentes o actualizados), sobrecalentamiento y actividad de red, y también se pueden ejecutar scripts o programas de prueba específicos del sistema. [7]
Al descubrir que una prueba falló, el equipo puede intentar realizar una secuencia de acciones correctivas bajo el control del software, que culminará con un reinicio iniciado por el software. Si el software no logra invocar un reinicio, el temporizador de vigilancia se agotará y se invocará un reinicio del hardware. En efecto, se trata de un temporizador de vigilancia de varias etapas en el que el software comprende las etapas del temporizador primera e intermedia y el reinicio del hardware, la etapa final. En un sistema Linux, por ejemplo, el demonio de vigilancia podría intentar realizar un reinicio iniciado por software, que puede ser preferible a un reinicio del hardware, ya que los sistemas de archivos se desmontarán de forma segura y se registrará la información de fallas. Sin embargo, es esencial tener el seguro que proporciona un temporizador de hardware, ya que un reinicio de software puede fallar en varias condiciones de falla. [ cita requerida ]
Un temporizador de vigilancia (o temporizador de funcionamiento correcto del equipo (COP)) es un temporizador de hardware o software de equipo que activa un reinicio del sistema u otra acción correctiva si el programa principal, debido a alguna condición de falla, como un bloqueo, no realiza el mantenimiento regular del temporizador de vigilancia (escribiéndole un "pulso de servicio", también conocido como "patear al temporizador", "acariciar al temporizador", "alimentar al temporizador de vigilancia" o "activar el temporizador de vigilancia"). La intención es hacer que el sistema vuelva del estado de inactividad al funcionamiento normal.