워치독 타이머 (Watchdog Timer)
쉽게 풀면
임베디드 프로그램이 무한 루프에 빠지거나 멈추면 스스로는 그 사실을 알아차릴 수 없습니다. 워치독 타이머는 별도의 하드웨어 카운터로, 정상 동작 중인 소프트웨어가 주기적으로 값을 초기화해 주지 않으면 시간이 다 차면서 시스템을 리셋합니다. 즉 프로그램이 살아 있다는 신호를 계속 보내야만 리셋을 면하는 구조입니다.
왜 중요한가
무인으로 장시간 동작해야 하는 제어기기에서 소프트웨어 멈춤은 곧 기능 상실이므로, 워치독은 가장 기본적이면서 효과적인 최후의 안전장치로 쓰입니다. 기능안전 관련 규격에서도 고장 검출 수단으로 인정되어, 산업용 제어기 설계에서 사실상 필수 요소입니다.
논문에서는 이렇게 쓰입니다
살아 있다는 신호를 아무 데서나 보내지 않고 반드시 정상 동작 경로에서만 보내게 해, 진짜 이상 상황을 놓치지 않도록 설계한 것입니다.
조금 더 깊게 보면
단순한 형태는 일정 시간 안에 한 번만 갱신하면 되지만, 윈도 워치독은 너무 일찍 갱신하는 것도 이상으로 간주해 허용 구간을 앞뒤로 제한합니다. 여러 태스크가 도는 시스템에서는 각 태스크가 체크인한 사실을 소프트웨어가 취합한 뒤 하드웨어 워치독을 한 번 갱신하는 계층 구조를 쓰기도 합니다. 리셋 원인을 기록해 두면 현장에서 재발한 고장의 원인을 추적할 수 있어, 리셋 플래그를 비휘발성 영역에 남기는 것이 실무의 정석입니다.
주의할 점
워치독을 주기 인터럽트 안에서 무조건 갱신하도록 만들면 본래 감시하려던 메인 루프가 멈춰도 리셋되지 않아 장치가 무력화됩니다. 또한 워치독은 고장을 예방하는 장치가 아니라 고장 후 복구를 돕는 장치이므로, 잦은 리셋을 정상 동작으로 여겨서는 안 됩니다.