2014-05-13 5 views
0

내 응용 프로그램에 대한 MV 리눅스에서 실행되는 스레드가 10 ms마다 활성화해야합니다. ulseep/nanosleep/select를 사용하면 스레드가 매 20ms마다 돌아옵니다. 이 동작을 변경하려면 어떤 커널 매개 변수를 사용해야합니까? 감사합니다. Rafi리눅스 스케줄러 스레드 실제 절전 시간

답변

-1

Linux는 실시간 운영체제가 아닙니다. 수면의 정확성에 대한 보장은 없습니다. sleep에 전화하면 스레드가 일시 중단되고 요청한 시간이 경과 할 때까지 실행 가능하지 않습니다. 다시 실행 가능할 때 일부 실행 시간이있을 때 스레드를 다시 실행하는 것은 스케줄러의 몫입니다.

일정을 예약하는 간격은 커널 컴파일 매개 변수 CONFIG_HZ에 의해 결정됩니다. 예를 들어, CONFIG_HZ=250 (기본값) 일 경우 스케줄링 이벤트는 1s/250Hz = 4ms마다 트리거됩니다. 따라서 스레드가 다시 실행될 때 실제로 다시 시작하기 전에 최대 4ms가 경과 할 수 있으며 그때 스레드가 가장 높은 우선 순위를 가지지 않은 경우 4ms가 더 걸릴 수 있습니다.

+0

Linux 커널의 rt 버전이 있습니다 예를 들어 Ubuntu Studio가 rt 커널을 제공하는데 사용되었다는 것을 알 수있는 유일한 대중적인 GNU/Linux 데스크탑 배포판입니다. 하지만 문제는 Linux 커널이 rt가 될 수 있다는 것입니다. – user2485710

+0

@ user2485710 RT가 활성화 된 Linux는 절전 시스템 호출을보다 정확하게하지 않습니다. 당신이 무슨 말을하고 있는지 알고 있다면 코드와 함께 답을 게시하십시오. – Grapsus

+0

첫 번째 진술은 "Linux는 실시간 운영체제가 아닙니다."는 사실이 아닙니다. – user2485710