2013-08-14 5 views
4

리눅스 커널의 드라이버 컨텍스트에서 실행 중입니다.이 드라이버는 값을 레지스터에 씁니다. 작업에는 약간의 시간 (~ 5msec)이 소요됩니다. 나는 그 시간 동안 다른 스레드에 CPU를 제공하기 위해 잠자고 싶습니다. 그러나 깨어 난 후에 즉각적으로 CPU를 되돌려 놓는 것이 매우 중요합니다 (초과하지 않아야하는 짧은 시간 제한이 있습니다). 같은 질문이 뮤텍스를 가져 가기위한 것입니다 - 뮤텍스를 차단하고 있다고 말하면 (다시 스케줄을 트리거합니다) - 뮤텍스가 해제 될 때 어떻게 즉시 CPU를 다시 가져올 수 있습니까?깨어 난 후 CPU 시간 보장 - 리눅스 스케줄러

이 방법이 있습니까? 그것이 무엇을 포함합니까? (프로세스에 우선 순위를 설정 특별한 스케줄링 모드를 커널 설정을 변경???)

편집 : 나는 중요한 스레드가 사용하는 뮤텍스가 : 그것은 조금 더 복잡하기 때문에 내가 뮤텍스에 대한 질문을 바꿔거야 (중요한 제한 시간 때문에). 이 뮤텍스를 사용하고 싶습니다. 차단하고 재방송하면 잠금이 신속하게 해제 될 것입니다. (이 스레드는 우선 순위가 높기 때문에) 즉시 차단 된 스레드는 다음 작업을 수행 할 수 있습니다. 실행 (다른 관련이없는 프로그램이 아닙니다). 이렇게하면 시간 초과 위반을 방지하지 않으면 서 CPU 시간을 절약 할 수 있습니다. 현재 재 스케줄을 피하기 위해 대기 중을 사용하고 있습니다 (커널이 선점 적이 지 않음).하지만이 솔루션이 마음에 들지 않습니다.

도움이 될 것입니다!

감사

답변

1

당신이 쓰는 동안 당신이 지연을 관찰 말했다. 이 상황에서는 schedule_timeout 기능을 사용할 수 있다고 생각합니다. 장치 드라이버는이 기술을 사용하여 등록 할 때 시스템을 잠그지 않습니다. 최근에 저는 등록을 위해 글쓰기가 지연되는 문제를 보았습니다. 내 경우에도 schedule_timeout 할 계획입니다.

우선 순위를 설정하면 스케줄링 모드가 도움이되지 않습니다.

+0

고맙습니다. 나는 그것을 확실히 체크 할 것이다. 뮤텍스 사건에 대한 제안이 있으십니까? (잠금이 풀리는 즉시 CPU를 다시 얻는가?) – kernelony

관련 문제