2012-03-12 5 views
2

일부 실시간 스레드 사용 경험이 있습니다. 방금 ​​usleep (TIME)을 호출하여 잠자기 모드로 전환되었습니다. 적어도 TIME 동안 스레드가 잠자기 상태로 유지됩니다. 이제 TIME = 10ms로 측정하고 μ = 10,1ms의 예상 값을 갖는 가우스 함수를 얻었습니다 TIME = 1us 인 두 번째 측정 : 4us에서 큰 피크를 얻습니다.기다리는 중 busy busy

왜 두 번째 측정 값이 가우스가 아닌가? 내 첫 번째 아이디어는 스레드가 실제로 잠을 자지 못했지만 대신 바쁜 대기를 만듭니다. 명시된 바와 같이 here (old beahavior) 바쁜 대기가 없습니다. 어떻게 두 곡선을 설명 할 수 있습니까?

+0

시스템 타이머에서 그런 종류의 해상도를 얻으려면 어떤 OS를 실행하고 있습니까? 내가 가장 많이 본 usleep은 4ms가 아니라 4ms입니다. :) –

+0

실시간 스레드에 어떤 기본 시스템을 사용하고 있습니까? [RTAI] (https://www.rtai.org/)를 보셨습니까? – Shahbaz

+0

linux 3.0 커널 – user1264182

답변

4

타이밍 기능이 인 이므로. 자네가 말하길, 그 시간에 최소한에자는 것이 보장됩니다. 그만큼 시간을 잘 수 있다고 보장 할 수없는 이유는 4 마이크로 초 간격으로 작동하기 때문입니다.

슬립 모든 시스템 작업에 의해 또는 시스템의 타이머의 입도 (granularity)에 의해 호출 또는 처리 소요 시간이 다소 길게 될 수

man page은이 현상을 언급한다.

+0

이있는 자일링스 fpga (PPC440)이므로 자고있을 때 (1us를 위해 자고있을 때) 자고있는 것보다 다른 활동이 없다는 것을 의미합니다. 왜냐하면 길지 않아서입니다. – user1264182

+0

@ user1264182 : 구현 세부 사항 일 수도 있습니다. 지연을 상환하여 때때로 4 마이크로 초 (예 : 25 %) 동안 잠자기 가끔 잠자기가되지 않는 경우가 있습니다 (예 : 75 %). 개인적으로, 나는 의심 스럽지만, 짧은 기간 동안 부정확 한 것으로 이미 표기된 콜에 대해 불필요한 복잡성을 초래할 것이다. 어떤 하한선에서, 당신이 요청한 것과 관계없이'X' 마이크로 초를 기다릴 것이라고 말하기에 충분합니다. – paxdiablo

+0

나는 X가 최소가 될 것으로 예상했다. 혼란 스러울 것은 내 스레드가 잠자기 상태에있을 때 다른 스레드가 시작되지 않으며 최소 휴면 시간 X가 누락된다는 것입니다. – user1264182

1

이것은 함수 호출의 오버 헤드와 작은 간격을 기다리는 다른 방법으로 설명 할 수 있습니다. 피할 수없는 일정한 지연을 고려할 수 있지만 더 큰 대기 시간에서는 뺄 수 있습니다.

관련 문제