1. 개요
워치독 타이머(WDT)는 일종의 데드맨 스위치로 장비가 제대로 된 동작을 취하는지를 주기적으로 확인하면서 만약 장비가 제대로 된 동작을 하지 않는다는 사실이 확인될 경우 이에 대해서 조치를 취할수 있는 전자, 소프트웨어식 타이머이다.워치독 타이머는 일반적으로 별도의 회로를 갖추고 있거나 시스템과 독립적으로 작동하게 되어있으며, 대부분의 경우 하드웨어를 물리적으로 재부팅시키거나 모드 전환, 종료 등의 시스템을 보호하기 위한 조치를 취할수 있다. 이 때문에 사람이 자주 관리하기 힘든 임베디드 시스템 등에서 주로 사용된다.
2. 구현
2.1. 컴퓨터
메인 CPU에서 주 프로그램이 운용중이고, 보조 CPU에서 타이머가 운용 중이라고 가정한다.1. 메인 CPU는 보조 CPU에 주기적으로 heartbeat 시그널[1]을 보낸다.
2. 보조 CPU에서는 heartbeat 시그널을 감시하며, 신호가 정상적으로 도착할 경우 리셋 타이머를 초기화 시킨다.
3. 예기치 못한 상황으로 메인 CPU가 멈춰 버리고. 시그널을 날리지 못한다.
4. 보조 CPU가 계속해서 신호를 받지 못할 경우, 리셋 타이머가 초기화되지 않으므로 타이머가 만료된다.
5. 타이머가 만료되면 메인 CPU를 하드웨어적으로 리셋시킨다.
6. 메인 CPU가 다시 부팅되어, 제일 처음의 1의 과정으로 되돌아 간다.
와치독을 사용하는 환경에 따라, heartbeat 시그널은 얼마나 자주 보낼지, 타이머는 얼마나 길게 세팅할지 천차만별이다. 예를 들어 느릿느릿 돌아가는 장비는 시그널을 30분에 1개씩만 날리고, 10회 연속 시그널을 못받으면 (즉, 5시간 경과) 장비를 리셋 시키도록 만들수도 있다. 이는 5시간동안 장비가 먹통되어도 별 상관 없는 장비일 경우는 이렇게 느슨하게 설정할 수도 있다. 하지만 어떤 장비는 수십~수백 msec 단위로 (즉, 초당 수십~수백개)씩 시그널을 던지고, 3회만 못받아도 리셋 절차에 들어갈 수도 있다.
장비의 안정성, 중요도, 대체 가능성, 복구 속도 등을 모두 고려해야 한다.
2.2. 마이크로컨트롤러
대부분의 마이크로 컨트롤러가 CPU의 인터럽트 라인과 직결된 워치독 타이머를 갖추고 있으며 이를 워치독 타이머 레지스터에 접근해서 제어할수 있고 워치독이 활성화 될 경우 클리어 플래그나 리셋함수를 통해서 클리어해줄수 있다.워치독 작동을 위한 클럭은 일반적인 경우 안전성을 위해서 내부 클럭을 사용하는데[2] 내부 클럭신호는 모든 마이크로컨트롤러마다 다르며 [3] 이때문에 사용자가 원하는 길이로 조정할수 있게 분주기를 같이 제공한다. 또한 마이크로컨트롤러의 워치독 타이머는 단순 소프트웨어적인 리셋 뿐만 아니라 각종 오작동 사고에 의해 일어나는 리셋 또한 감지할수 있는 능력이 있다.[4]
2.3. 다른 예시
수 많은 장비가 연결된 네트워크에서는 한두 장비만 뻗어 버려도 전체 네트워크가 망가져 버릴수 있다. 그렇기 때문에 주변 장비에 계속해서 자신이 멀쩡하게 돌아간다는 시그널을 계속해서 보내 주어야 한다. 만약 연결된 장치에서 더이상 시그널이 발송되지 않는다면, 해당 장비가 문제가 있다고 판명하고 빨리 대체 경로로 연결해 주어야 네트워크가 문제 없이 움직인다.즉, 장비를 리셋하는게 아니라 대체 경로로 바꾼다는 점을 제외하고는 기본적으로 와치독과 동작이 동일하다.
현대의 OS (윈도우즈, 리눅스, iOS 등 모두 동일하다)는 동시에 여러개의 프로세스가 동작하는 멀티프로세스 환경이다. 만약 특정 프로세스가 오동작하여 멈추게 될 경우, CPU 와 메모리를 점유하는 등 악영향을 끼치게 된다. 그러므로, 각 프로세스는 메인 커널에 자신이 멀쩡하게 잘 돌아간다는 시그널을 꾸준히 보내 주어야 한다. 만약 메인 커널에서 해당 프로세스가 보내는 시그널을 감지하지 못하면, 해당 프로세스가 이상 상태가 되었음을 판단하고 적절한 조치를 해야한다.
3. 쓰이는 곳
- 대부분의 임베디드 시스템장비들 - 특히 유지보수가 자주 하기 힘든 장비들은 워치독 타이머를 통한 리셋같은게 없으면 정지된 상태로 오랫동안 방치될 가능성이 높아서 최소한의 안전장치로 워치독 타이머를 갖출 필요가 있다.
4. 같이 보기
- 데드맨 스위치 - 사람에 의해 조작되는 기계 등의 오조작을 막기 위한 스위치로, 동작 방식이 워치독과 흡사하다.
[1] 또는 keepalive 시그널이라고도 부른다.[2] 내부 클럭 발진기가 외부 발진기보다 오차가 더 크지만 내부 발진기를 사용하는 이유는 간단한데 모종의 이유로 외부 클럭 발진기가 박살이나거나 동작하지 않아도 내부 발진기는 전원만 있으면 동작이 가능하기 때문이다.[3] 예를 들경우 ATmega128A의 경우 내부 발진기가 5V입력시에 1Mhz로 동작한다.[4] 위에서 예시로든 ATmega128A를 기준으로 총 5개의 리셋플래그가 있는데 워치독 타이머가 발생시키는 리셋플래그 말고도 JTAG등에서 인가하는 리셋신호를 감지하는 플래그,외부에서 리셋 핀에 의해 발생한 리셋을 감지하는 플래그, 전압부족으로 동작하는 리셋플래그(브라운 아웃), 그리고 전원 끄고 켜질때 작동하는 플래그등이 있다.