아래 인터벌 타이머에 대한 이야기가 나와서 하는 말인데,

인터벌 타이머는 시스템 프로그래밍 영역이야, 적절한 시스템 콜로 구현되어있어,

이건 사용자 영역에서 해결할 수 있는 사항이 아냐,


예를 들어 2초마다 콜백으로 aaa 라는 기능을 실행한다고 치자

초보들은 이렇게 구현하는 경우가 있어(의사코드로 적으면)


while (true) {

callback_aaa();

sleep(2초);

}


제대로 작동하는거 같지만 이렇게 하면 내가 교수면 0점 준다,

왜냐하면 callback_aaa를 실행하는동안 block이 발생하거나 컨텍스트스위칭이 발생하거나 혹은 preemption가 발생하거나, 혹은 정상처리하는데 1ms가 발생한다면?


루프가 1천번만 돌아도 결국에는 오차가 상당한 수준으로 벌어진다,


그래서 저렇게 프로그래밍을 하면 안돼


그래서 운영체제는 항상 일정 시간마다 작동시킬 수 있는 인터벌 타이머 기능을 제공하지


만일 callback_aaa에서 재수가 없어서 0.5초가 걸렸다고 해도 인터벌 타이머는 상관없이 무조건 2초마다 실행될 수 있도록 보장해주는거야

물론 정밀도란 개념이 등장하는데, 정밀도가 10us라면, 인터벌 타이머의 간격에 10us이상의 오차가 발생하지 않도록 보장해줘


결론은 인터벌 기능을 사용하고 싶으면 사용자가 구현할 생각은 버려, 인터럽트 발생은 유저 레벨에서는 구현할 수도 없을뿐더러

아무리 쌩쑈를 해도 정밀도를 보장받지 못해