워치독 타이머

섬네일|워치독 타이머는 화성 탐사선 로버와 같은 원격 자동화 시스템에 있어 필수적이다.

**워치독 타이머**  (WDT, *COP*  (*computer operating properly* ) 타이머, 또는 단순히 *워치독* )는 컴퓨터의 오작동을 탐지하고 복구하기 위해 쓰이는 전자 타이머이다. 정상 작동 중의 컴퓨터는 시간이 경과하거나 "타임아웃"이 되는 것을 막기 위해, 정기적으로 워치독 타이머를 재가동 시킨다. 만약, 하드웨어의 결함 혹은 프로그램 오류로 인해 컴퓨터가 워치독을 재가동하는 데 실패하면, 타이머가 시간을 두고 타임 아웃 신호를 생성한다. 이 타임 아웃 신호는 여러 시정 조치를 취하는 데 쓰인다. 이 시정 조치란 일반적으로 컴퓨터 시스템을 안전한 상태로 유지하는 것과 정상적인 시스템 작동으로 원상복귀 시키는 것을 포함한다.

워치독 타이머는 인간이 쉽게 접근할 수 없거나 오류에 제때 반응 하기 힘든 컴퓨터 제어 장비에서 일반적으로 찾을 수 있다. 소프트웨어가 멈추는 경우, 많은 임베디드 시스템들은 사람이 재부팅해주는 것에만 의존할 수 없다. 따라서 그들은 반드시 자립적이어야 한다. 예를 들어, 우주 탐사기와 같은 원격 임베디드 시스템은 운영자가 물리적으로 접근할 수 없다. 만일 그들이 자동으로 오류들을 복구할 수 없다면, 이것들은 영구적으로 손상될 수 있다. 워치독 타이머는 보통 이와 같은 경우에 사용된다. 워치독 타이머는 샌드박스에서 신뢰할 수 없는 코드가 작동할 때, 코드에 사용할 CPU 시간을 제한하는데 쓰인다. 따라서 서비스 거부 공격의 일부 유형을 방지할 수 있다.

## 구조 및 작동

### 워치독 재시작

워치독 타이머를 재가동하는 행위는 일반적으로 "kicking the dog" 또는 기타 유사한 용어들로 표현된다; 보통 워치독 제어 포트에 입력을 가해 실행한다. 통합 워치독 타이머를 지닌 마이크로컨트롤러의 경우, 특정 기계어 명령을 실행함으로써 워치독이 작동된다. 일부 PIC 마이크로 컨트롤러의 명령어 세트에 포함된 CLRWDT(클리어 워치독 타이머) 명령어를 예로 들 수 있다.

운영 체제가 있는 컴퓨터에선 일반적으로 장치 드라이버를 통해 워치독 리셋이 작동된다. 예를 들어, Linux 운영 체제에서 사용자 공간 프로그램은 일반적으로 워치독 드라이버와 상호작용함으로써 워치독을 실행시킬 것이다. 이는 보통 /dev/watchdong에 0(zero character)을 씀으로서 이루어진다. 사용자 공간 프로그램에게 추상화된 워치독 하드웨어를 제공하는 장치 드라이버는 타임아웃 기간을 설정하고 타이머를 시작하고 정지하는 데에도 사용된다.

### 단단계 워치독
워치독 타이머는 많은 설정들에 관여하고, 다수의 워치독 타이머들은 그들의 설정이 변경되는 것을 허용한다. 마이크로 컨트롤러는 통합된 온칩 워치독을 포함하기도 한다. 다른 컴퓨터에서 워치독은 CPU에 직접 연결된 가까운 칩에 있을 수도 있고, 혹은 컴퓨터 섀시에 있는 외부 확장 카드에 위치 할 수도 있다. 아래의 블록 다이어그램과 같이, 워치독과 CPU는 일반적으로 클럭 신호를 공유 할 수 있고, 또는 독립적인 클럭 신호들을 가지고 있을 수도 있다.

center|300px|alt= 간단한 단단계 워치독 타이머의 블록 다이어그램공통 클럭은 기본 워치독 마이크로 컨트롤러의 특성이다.

### 다단계 워치독

가끔 *다단계 워치독 타이머*를 만들기 위해서 둘 또는 그 이상의 타이머들을 차례로 이어 붙일 수 있다. 이때 각 타이머는 *타이머 단계*  혹은 단순히 *단계* 로 불린다.예를 들어, 아래의 블록 다이어그램은 3 단계 워치독을 보여준다. 다단계 워치독 중에서, 오직 제 1단계만 프로세서에 의해 실행된다. 제 1단계가 타임아웃하면, 시정 조치가 취해지며 다단계의 다음 단계가 시작된다. 각 후속 단계가 타임아웃되면, 시정 조치가 수행되고 다음 단계가 시작한다. 마지막 단계가 타임아웃하면, 시정 조치가 취해지고, 마지막 단계에 도달했기 때문에 다른 단계는 시작되지 않는다. 보통 단단계 워치독 타이머가 단지 컴퓨터를 재시작하는데 쓰이는데 반해, 다단계 워치독 타이머는 차례로 시정 조치들을 작동시키고 마지막 단계에서 컴퓨터를 재시작하게 한다.

center|550px|alt= 3 단계 전자 워치독 타이머.

### 시간 간격

워치독 타이머는 고정된 시간 간격이나 프로그래밍할 수 있는 시간 간격을 가질 수 있다. 일부 워치독 타이머들은 몇 가지 선택 가능한 이산값들 중에서 시간 간격을 설정함으로써, 이를 프로그램 되도록 한다. 다른 경우에는, 시간 간격은 임의의 값으로 프로그램 될 수 있다. 일반적으로 워치독의 시간 간격은 10밀리초부터 1분 이상으로 다양하다. 다단계 워치독에서, 각 타이머는 자신만의 고유한 시간 간격이 있을 수 있다.

## 시정 조치

워치독 타이머는 프로세서 리셋, 차단 불가능 인터럽트, 차단 가능 인터럽트, 전원 껐다 켜기, 안전모드 상태 활성화 또는 이들의 조합을 포함하는 몇 가지 유형의 시정 조치를 취할 수 있다. 그 구조에 따라, 시정 조치의 유형이나 워치독이 작동시킬 수 있는 조치의 유형은 고정되거나 프로그램 가능한 것들이다. 일부 컴퓨터 (ex. PC 호환기종)는 프로세서 리셋을 작동하는 펄스 신호를 필요로 한다. 이러한 경우, 워치독은 내부 혹은 외부의 펄스 발생기를 활성화하여 프로세서 리셋을 작동시키며, 이것은 차례로 필요한 리셋 펄스들을 만들어낸다.

임베디드 시스템 및 제어 시스템에서, 워치독 타이머는 종종 안전모드 회로를 활성화하는 데 사용된다. 안전모드 회로가 활성화하면, 이는 오류가 지속하는 동안 장비의 손상과 피해를 방지하기 위해서 모든 제어 출력이 안전한 상태(예를 들어, 모터, 히터, 높은 전압을 끔)가 되도록 한다. 2단 워치독에서, 첫 번째 타이머는 안전모드 출력을 활성화하고 두 번째 타이머 단계를 시작하게 하는 데 쓰인다. 만일 타이머가 경과하기 전에 오류가 정정되지 않는다면, 제 2단계가 컴퓨터를 리셋시킬 것이다.

워치독 타이머는 종종 오류 복구시 유용할 수 있는 시스템 상태정보 혹은 디버그 정보(오류의 원인을 확인하는 데 유용할 수 있음)를 영구 저장매체에 기록하도록 하는데 사용된다. 이러한 경우, 첫 번째 타이머 시간이 경과된 후 시작되는 두 번째 타이머는 데이터 기록이 완성되는 데 충분한 시간을 주고 컴퓨터를 리셋하는데 사용된다. 이는 정보가 저장되는 데 필요한 시간을 주되, 그 저장 과정이 실패하더라도 컴퓨터는 반드시 리셋되도록 한다.

center|500px|alt = 2 단계 워치독 타이머

예를 들어, 위의 그림은 2단 워치독 타이머에 대한 구성을 잘 묘사하고 있다. 컴퓨터는 정상 작동 중에 타임아웃되는 것을 방지하기 위해 정기적으로 1단계 타이머를 작동시킨다. 만약 컴퓨터가 1단계 타이머 작동에 실패한다면 (예를 들어, 하드웨어 오류 또는 프로그래밍 오류로 인해), 1단계는 결국에는 타임아웃될 것이다. 이후 2단계 타이머를 작동 시키며, 동시에 컴퓨터에게 리셋이 임박했음을 알린다(차단 불가능 인터럽트를 통해서). 2단계가 타임아웃할 때까지 컴퓨터는 상태 정보나 디버그 정보, 혹은 두 가지 모두를 기록하려고 시도할 수 있다. 이 컴퓨터는 2단계가 타임아웃될 때 리셋된다.

## 오류 검출

컴퓨터 시스템은 일반적으로 컴퓨터가 시스템이 가동된다고 판단할 때만 워치독 타이머를 작동하도록 디자인 되어있다. 컴퓨터는 하나 또는 그 이상의 오류 검출 테스트를 실시하여 시스템이 가동하는지를 확인하고 모든 테스트를 통과한 경우에만 워치독을 가동시킨다. 그런데 운영체제와 여러 프로세스들이 수행되는 컴퓨터에서 하나의 간단한 테스트는 컴퓨터의 정상적인 작동을 보장하기엔 충분하지 않다. 왜냐하면 감지하기 힘든 오류상태를 탐지하는데 실패하여 오류상태에 있음에도 워치독을 실행시키지 않을 수도 있기 때문이다.

Linux 운영 체제를 예로 들면, 사용자 공간 워치독 데몬은 어떠한 테스트도 실행하지 않고 워치독을 주기적으로 작동시킬 수도 있다. 시스템은 데몬이 정상적으로 작동되는 한 커널 패닉과 같은 심각한 시스템 충돌들로부터 보호될 것이다. 덜 심각한 오류를 감지기 위해, 데몬이 리소스 가용성(예를 들면, 충분한 메모리 와 파일 핸들, 적당한 CPU 시간),예상 프로세스 활동의 증거(예를 들어, 시스템 데몬들 작동, 특정한 파일의 존재와 그것의 업데이트), 오버히팅 그리고 네트워크 활동을 다루는 테스트를 수행하도록 설정할 수 있다. 그리고 특정 계통의 테스트 스크립트 혹은 프로그램들도 이렇게 쓰일 수 있다.

실패한 테스트를 발견했을 때, 리눅스 워치독 데몬은 소프트웨어적인 재시작을 실행하려 할 수도 있다. 이것은 파일 시스템이 안전하게 언마운트되며 오류 정보들이 로그되므로, 하드웨어를 리셋하는데 있어 선호되는 방식일 수 있다. 그러나 소프트웨어 재시작은 많은 오류로 인해 실패할 수 있기 때문에, 하드웨어 타이머를 사용하는 예방책을 갖는 것은 필수적이다. 결과적으로, 이것은 소프트웨어 재시작이 첫 번째 단계를, 하드웨어 리셋이 두 번째 단계를 구성하는 2단계 워치독이라고 할 수 있다.

## 같이 보기
* Immunity Aware Programming
* 전원 분배 장치
* Dead man's switch
* Heartbeat (computing)
* 킵얼라이브

## 각주

## 외부 링크
* Building a great watchdog - Article by Jack Ganssle

분류:임베디드 시스템