티스토리 뷰

계속해서 과제를 진행하고 있다. 지금 주목하고 있는 것은 Xenomai에 내장되어 있는 periodic function을 linux system call인 sleep() 으로 대체할 수 있느냐는 것이다. 방법은 간단하다. Iteration을 줄때 job 시작전이나 종료후에 강제로 sleep()을 주면 되는 것이다. 그럼 과연 이렇게 바꿨을 때 expected release time과 actual Release time의 차이는 어떻게 될까? 또는 Expected Finish time과 Actual Finish time간의 차이는 어떻게 될까? 이 값이 얼마 차이가 나지 않는다면 이 Task들은 Periodic이라고 할 수 있을까? 

 그럼 이걸 개선해서 Sleep만 사용해서 조금더 periodic 하게 바꿀 수 있느냐가 이번 과제의 목적이다. 일단 expected value는 다음과 같이 구했다.

expected Value = TASK_1st_Value + PERIOD_TASK * i

(i = # of Iterations)

Difference Value = abs(expected Value - Actual Value)


자 그럼 첫번째로 실행되는 Task인 Task2에 대한 결과를 잠깐 보겠다.


근데 조금 이상한 결과가 나왔다. 애초에 Task 2의 Period는 0.1s , 즉 100ms 인데 Expected와 Actual의 차이가 이 Period를 넘어선다.왜일까... 코딩의 실수일 수도 있고, 아님 아직 이 숙제에서 무엇을 요구하는 건지 이해를 못하는 건지도 모르겠다. 아무튼 Execution Time과 Period를 훌쩍 뛰어넘는 difference가 나왔다. 대략 유추해보건데, Release Time의 difference와 Finsish Time의 차이가 거의 비슷한 걸로 보아서 어떤 연유에서든 전체적인 Execution이 밀린거 같다... 아무튼 이부분은 조금더 고쳐봐야겠다.

Task 3과 Task 4는 저번에도 소개했다시피 1부터 1000 또는 2000까지의 summation을 구하는 과정이다. 이때문에 Execution Time이 매우 짧고 연산결과도 바로바로 나온다.



여기서도 앞에서 언급했던 문제가 똑같이 나타난다. 아무래도 코딩 문제가 아닐까 하는 생각을 해보고 있다. Task 1도 마찬가지이다. 



그런데 재미있는 것은 Release Time의 Finish Time의 Difference가 얼마 차이나지 않는다는 것이다. 발생해도 대략 ns 단위에서 나타난다는 것이다. 

참 알다가도 모를 결과가 계속 나오고 있다...

댓글