WATCHDOG

1 개요

WATCHDOG은 말 그대로 집을 지키는 개란 뜻으로, 임베디드 시스템 등 특수 상황에서 CPU가 올바르게 작동하지 않을 시 강제로 리셋시키는 기능을 의미한다. 친구로 LogCat이 있다. 추가바람

일반적으로 WATCHDOG은 CPU가 작동하지 않을 경우 이를 강제로 리셋시키는 기능을 수행하기 때문에 메인 프로그램이 운용중인 CPU와는 별개의 회로에서 작동한다.

2 구현 예

메인 CPU에서 주 프로그램이 운용중이고, 보조 CPU에서 WATCHDOG이 운용 중이라고 가정한다.

1. 메인 CPU는 보조 CPU에 주기적으로 heartbeat 시그널[1]을 보낸다.
2. 보조 CPU에서는 heatbeat 시그널을 감시하며, 신호가 정상적으로 도착할 경우 리셋 타이머를 초기화 시킨다.
3. 예기치 못한 상황으로 메인 CPU가 멈춰 버리고. 시그널을 날리지 못한다.
4. 보조 CPU가 계속해서 신호를 받지 못할 경우, 리셋 타이머가 초기화되지 않으므로 타이머가 만료된다.
5. 타이머가 만료되면 메인 CPU를 하드웨어적으로 리셋시킨다.
6. 메인 CPU가 다시 부팅되어, 제일 처음의 1의 과정으로 되돌아 간다.

와치독을 사용하는 환경에 따라, heartbeat 시그널은 얼마나 자주 보낼지, 타이머는 얼마나 길게 세팅할지 천차만별이다. 예를 들어 느릿느릿 돌아가는 장비는 시그널을 30분에 1개씩만 날리고, 10회 연속 시그널을 못받으면 (즉, 5시간 경과) 장비를 리셋 시키도록 만들수도 있다. 이는 5시간동안 장비가 먹통되어도 별 상관 없는 장비일 경우는 이렇게 느슨하게 설정할 수도 있다. 하지만 어떤 장비는 수십~수백 msec 단위로 (즉, 초당 수십~수백개)씩 시그널을 던지고, 3회만 못받아도 리셋 절차에 들어갈 수도 있다.

장비의 안정성, 중요도, 대체 가능성, 복구 속도 등을 모두 고려해야 한다.

2.1 다른 예시

수 많은 장비가 연결된 네트워크에서는 한두 장비만 뻗어 버려도 전체 네트워크가 망가져 버릴수 있다. 그렇기 때문에 주변 장비에 계속해서 자신이 멀쩡하게 돌아간다는 시그널을 계속해서 보내 주어야 한다. 만약 연결된 장치에서 더이상 시그널이 발송되지 않는다면, 해당 장비가 문제가 있다고 판명하고 빨리 대체 경로로 연결해 주어야 네트워크가 문제 없이 움직인다.

즉, 잘비를 리셋하는게 아니라 대체 경로로 바꾼다는 점을 제외하고는 기본적으로 와치독과 동작이 동일하다.

2.2 또 다른 예시

현대의 OS (윈도우즈, 리눅스, iOS 등 모두 동일하다)는 동시에 여러개의 프로세스가 동작하는 멀티프로세스 환경이다. 만약 특정 프로세스가 오동작하여 멈추어 버릴 경우, CPU 와 메모리를 점유하는 등 악영향을 끼치게 된다. 그러므로, 각 프로세스는 메인 커널에 자신이 멀쩡하게 잘 돌아간다는 시그널을 꾸준히 보내 주어야 한다. 만약 메인 커널에서 해당 프로세스가 보내는 시그널을 감지하지 못하면, 해당 프로세스가 이상 상태가 되었다고 판단하고 적절한 조치를 취해주어야 한다.

3 쓰이는 곳

  • 인공위성 같이 사람이 접근하기가 용이하지 않은 장치.
  1. 또는 keepalive 시그널이라고도 부른다.