POSIX Times
Epoch : 컴퓨터 시스템의 시간이 시작된 점 (1970년 1월 1일 00시부터 정의)
tm구조체는 gm이나 locailtime함수의 리턴타입으로 현재시간에대한 요소값을 할당해서 반환해 주는 타입이다.
위의 함수는 구식이라 다른함수를 쓴다
Timer : 우리가 알고있는 타이머와 동일(계속 값이 감소하는 것)
Clock : 계속값이 증가하는것
Timer drift : 타이머의 완료시점이 딜레이가 생겨서 실제보다 뒤에 타이머가 완료되는 문제
생기는 이유 : 타이머가 만료가 됐다가 다시 시작을 하는 지점에서 딜레이가 발생하기 때문이다. 또한 타이머의 세밀도가 10ms라고 가정하자 그럼 타이머는 10, 20, 30 씩 증가한다. 그런데 타이머의 간격을 22라고 설정을 한다면 이 타이머는 22를 표현을 못해서 30에서 만료가 된다. 그래서 내가 원했던 시점보다 8ms가 밀려서 설정이 된다.
해결책 : 타이머의 인터벌이 22일때 22 지점에서 다시 시작하지 말고 그다음 타이머가 만료되는 시점에서 지금 타이머의 시간값을 빼자. 기존에 타이머는 22를 표현할 수 없어서 30에서 만료가 되고 그다음 44는 60에서 만료가 되었다. 그래서 다음 타이머의 인터벌 값은 22가 아니고 44에서 30을 뺀 14로 하자. 그럼 44는 실제로 60이 아니고 50에서 만료가 될 것이다. 타이머 drift값은 6이 되지만 누적되어서 늘어나지는 않을 것이다. 그다음 값은 66인데 이전에 만료된 50을 빼면 인터벌값이 16이 된다.
POSIX:TMR을 이용하면 timer drift문제를 해결할 수 있다. 왜냐하면 TMR타이머에서는 타이머의 인터벌값을 absolute값으로 설정할 수 있기 때문이다. timersettime의 flags파라미터에 absolute time으로 설정할 수 있어서 사용가능하다.
'Computer Science > 시스템 프로그래밍' 카테고리의 다른 글
[시스템 프로그래밍] Chapter 13 (0) | 2024.06.10 |
---|---|
[시스템 프로그래밍] Chapter 12 (0) | 2024.06.10 |
[시스템 프로그래밍] Chapter 8 (0) | 2024.05.09 |
[시스템 프로그래밍] Chapter 6 (0) | 2024.05.09 |
[시스템 프로그래밍] Chapter 5 (0) | 2024.05.08 |