타이머 정확도

일반적으로 시스템 타이머 루틴을 사용하면 호출자가 타이머에 대한 절대 또는 상대 만료 시간을 지정할 수 있습니다. 예를 들어 KeWaitForSingleObject, KeSetTimer 또는 KeDelayExecutionThread를 참조하세요. 운영 체제에서 만료 시간을 측정할 수 있는 정확도는 시스템 클록의 세분성에 의해 제한됩니다.

시스템 시간은 시스템 클록의 모든 틱에서 업데이트되며 최신 틱에만 정확합니다. 호출자가 절대 만료 시간을 지정하면 지정된 시간 이후에 발생하는 첫 번째 시스템 클록 틱을 처리하는 동안 타이머의 만료가 검색됩니다. 따라서 타이머는 지정된 절대 만료 시간보다 1시간 늦게 만료될 수 있습니다. 타이머 간격 또는 상대 만료 시간을 대신 지정하면 이 간격의 시작 및 종료 시간이 시스템 클록 틱 간에 정확히 어디에 속하는지에 따라 만료가 지정된 시간보다 이전 또는 지정된 시간보다 늦게 발생할 수 있습니다. 절대 또는 상대 시간을 지정했는지 여부에 관계없이 시스템 클록에 대한 인터럽트 처리가 다른 디바이스에 대한 인터럽트 처리로 지연되는 경우에도 타이머 만료가 나중에 검색되지 않을 수 있습니다.

호출자가 상대 만료 시간을 지정하면 타이머 루틴은 현재 시스템 클록 시간을 지정된 상대 만료 시간에 추가하여 타이머에 사용할 절대 만료 시간을 계산합니다. 시스템 시간은 시스템 클록의 최신 틱에만 정확하기 때문에 계산된 만료 시간은 호출자가 예상한 만료 시간보다 이전의 시스템 클록 기간까지일 수 있습니다. 지정된 상대 만료 시간이 시스템 클록 기간에 가깝거나 더 작은 경우 타이머는 지연 없이 즉시 만료될 수 있습니다.

만료 시간을 더 정확하게 지원하는 가능한 방법은 시스템 클록 틱 사이의 시간을 줄이는 것이지만 그렇게 하면 전력 소비가 증가할 수 있습니다. 또한 플랫폼의 다른 디바이스에 대한 인터럽트 처리가 시스템 클록 인터럽트 처리를 지연시키지 않도록 보장할 수 없다면 시스템 클록 기간을 줄이면 시스템 클록 세분성을 안정적으로 달성하지 못할 수 있습니다.

Windows 8 시작하여 KeDelayExecutionThread는 호출자가 지정한 상대 만료 시간의 절대 만료 시간을 계산하는 보다 정확한 기술을 사용합니다. 첫째, 현재 시스템 시간을 보다 정확하게 예측하기 위해 루틴은 시스템 성능 카운터를 사용하여 마지막 시스템 클록 틱 이후 경과된 시간을 측정합니다. 다음으로, 루틴은 시스템 시간을 보다 정확하게 예측하여 상대 만료 시간에 추가하여 절대 만료 시간을 계산합니다. 이 기술로 계산된 절대 만료 시간은 마이크로초 내에 정확합니다. 따라서 타이머는 지정된 상대 만료 시간이 경과하기 전에 만료되지 않습니다. 타이머는 지정된 시간보다 늦게 시스템 클록 기간까지 만료될 수 있으며 다른 디바이스에 대한 인터럽트 처리로 인해 시스템 클록 인터럽트 처리가 지연되는 경우에도 나중에 만료될 수 있습니다.

타이머가 만료되기 전에 시스템 시간이 변경되면 상대 타이머는 영향을 받지 않지만 시스템은 각 절대 타이머를 조정합니다. 상대 타이머는 절대 시스템 시간에 관계없이 지정된 시간 단위가 경과한 후에 항상 만료됩니다. 절대 타이머는 특정 시스템 시간에 만료되므로 시스템 시간이 변경되면 절대 타이머의 대기 기간이 변경됩니다.