프로그래밍을 하다가 보면 절대적으로 순방향으로만 증가하는 시간자원이 필요할때가 많습니다.
특정 시간 구간의 소요시간을 측정한다던가 특정 주기마다 어떤 실행을 구현하려고 할때 일반적인 시계자원의 경우 시간동기가 중간에 일어나면 시간이 역방향 또는 많은 시간을 건너뛰는 상태가 발생할 수 있습니다. 이럴때 충분히 고려되지 않으면 프로그램은 의도되지 않은 동작을 일으키기 매우 쉽습니다.
여기서는 최대한 많은 Platform에서 동작가능한 절대적 순방향 시간자원에 대한 구현을 다루고자 합니다.
절대적 순방향 시간자원의 구현에 필수적인 요구사항은 다음과 같습니다.
- 시간이 역방향으로 흐르지 않는다. (어떠한 조건에도 과거시간으로 돌아가지 않아야 한다.)
- Overflow에 대한 고려가 되어 있지 않다면 충분히 큰 값으로 다룰수 있어야 한다.
- 특정 시간이 흐른 상태에서 정확히 그 흘러간 시간 간격을 측정할수 있어야 한다.
- 외부에서 이 시간자원을 임의로 조작할수 없거나 조작하여도 영향을 받지 않아야 한다.
- 적어도 msec 단위의 시간해상도를 지원할 수 있어야 한다. (만약 RTOS계열인 경우 usec 단위 지원에 대한 고려를 하는게 좋다.)
- 최대한 성능에 영향을 적게 받는 방법으로 구현되어야 한다.
- 시스템이 Suspend 상태일때 시간이 증가할지는 선택적일 수 있다. (일반적으로는 Suspend 상태에서는 count하지 않는게 좀더 유용할 수 있으나 모바일 환경등에서는 count하는 것이 필요할 수 있다.)