문제

vxWorks 임베디드 시스템에는 동일한 우선순위(110)를 갖는 두 개의 작업(T1 및 T2)이 있습니다.
두 작업이 모두 실행될 준비가 된 경우 일반 vxWorks 스케줄러는 이를 어떻게 처리합니까?
어떤 작업이 먼저 실행되나요?

도움이 되었습니까?

해결책

가장 먼저 실행될 작업은 VxWorks 스케줄러 작업에 의해 인식된 것처럼 가장 먼저 생성되는 작업입니다.VxWorks는 다음을 사용합니다. 우선순위 기반 스케줄링 기본적으로.따라서 귀하의 경우 T1과 T2의 우선 순위가 동일하므로 먼저 CPU를 얻는 쪽이 명시적으로 차단될 때까지 무기한으로 계속 실행됩니다(다음을 사용). 작업 일시 중지 또는 작업 지연), 이때 다른 READY 작업은 차단될 때까지 실행됩니다.이는 세마포어나 뮤텍스(뮤티스?)로 제어되어야 합니다.

우선순위 기반 스케줄링의 주요 문제점은 바로 이 문제로 드러납니다.이러한 작업을 실행하는 데 걸리는 시간을 어떻게 결정합니까?우선순위가 동일하다는 사실은 상황을 복잡하게 만듭니다.또 다른 우려 사항은 우선 순위가 높은 VxWorks 작업(숫자가 낮을수록 우선 순위가 높음)이 코드에서 준비해야 하는 애플리케이션을 선점할 수 있다는 것입니다.이러한 문제는 다음을 사용하여 해결할 수 있습니다. 라운드 로빈 스케줄링.라운드 로빈 스케줄링으로 인해 발생하는 추가 문제와 해결 방법이 모두 설명되어 있습니다. 여기.

다른 팁

VxWorks에는 256개의 우선순위 수준이 있습니다(0이 가장 높음, 255가 가장 낮음).언제든지 우선 순위가 가장 높은 작업이 CPU에서 실행됩니다.각 우선순위 수준에는 개념적으로 여러 작업이 실행을 위해 대기하는 대기열이 있습니다.

동일한 우선순위 A, B, C의 3가지 작업이 있습니다.A가 실행 중이라고 가정합니다.
A가 차단되면(taskDelay, SemTake, msgQReceive) B가 실행을 시작합니다.
A가 차단을 해제하면 대기열 끝에 배치됩니다.이제 B, C, A가 있습니다.
B가 차단하면 C가 대신하게 됩니다.

라운드 로빈 스케줄링(시간 분할)이 활성화된 경우 동일한 개념이 적용되지만 해당 작업은 시간 분할이 끝나면 대기열 끝에 배치됩니다.

우선순위가 더 높은 작업에 의해 선점되는 작업은 대기열 순서에 영향을 미치지 않습니다.A가 실행 중이었고 선점된 경우 우선 순위가 더 높은 작업이 완료되면 계속 실행됩니다.대기열 끝에 놓이지 않습니다.

기본적으로 먼저 생성된 항목이 실행되고 CPU를 포기하지 않는 한 다른 항목은 실행되지 않습니다.

타임슬라이스보다 라운드 로빈을 명시적으로 활성화할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top