2010-06-08 35 views
9

작업을 전환 할 수 있도록 스케줄러가 어떻게 호출되는지 알고 싶습니다. 선제 스케줄링이나 라운드 로빈 (round robin) 스케줄링이라 할지라도 스케줄러는 어떤 종류의 태스크 스위칭을 수행하기 위해 그림에 와야합니다. 우선 순위가 낮은 작업의 루프가 무한하다고 가정 할 때 - 언제 스케줄러가 개입하여 우선 순위가 높은 작업으로 전환합니까?VxWorks 스케줄러는 어떻게 실행됩니까?

쿼리 : 1. 누가 스케줄러를 호출합니까? [in VxWorks] 2. 일정한 간격으로 호출되는 경우 - 해당 메커니즘은 어떻게 구현됩니까?

미리 감사드립니다.

+0

다른 OS에서는 스케줄러가 일반적으로 타이머 인터럽트로 호출되므로 VxWorks를 알지 못하지만 하나의 태스크가 현재 사용 중이더라도 태스크를 전환 할 수 있습니다. – Rudi

답변

12

간단한 대답은 vxWorks가 시스템이 실행되는 동안 고정 간격으로 지속적으로 발생하는 시스템 타이머의 하드웨어 인터럽트를 제어한다는 것입니다. Vx 웍스가 시작되면

, 그것은 타이머를 N 종종 10 만 완전히 하드웨어에 따라 달라 interrupt 모든 N (밀리 초)을 생성하는 하드웨어를 구성합니다

여기에 자세한 내용입니다. 타이머 간격은 일반적으로 시작시 Board Support Package (BSP)에서 vxWorks에 의해 설정됩니다.

타이머가 인터럽트를 트리거 할 때마다 시스템은 타이머 interrupt handler을 실행하기 시작합니다. 타이머 인터럽트 처리기는 vxWorks의 일부이므로 vxWorks에 제어 기능이 있습니다. 우선 현재 실행중인 작업의 Task Control Block (TCB)에 CPU 상태 (예 : 레지스터)를 저장합니다.

그러면 결국 vxWorks가 스케줄러를 실행하여 누가 다음에 실행하는지 결정합니다. 작업을 실행하기 위해 vxWorks는 작업 상태를 TCB에서 시스템 레지스터로 복사 한 후 작업이 CPU를 제어합니다.

보너스 정보 : 당신이 당신의 작업이 선점됩니다 때마다 함수가 호출받을 수 있도록

Vx 웍스는 논리를 전환 작업에 hooks을 제공합니다.

+0

자세한 대답을 보내 주셔서 감사합니다 ... – Ashwin

+0

라운드 로빈 스케줄링 (kernelTimeSlice() 호출)을 사용하는 경우에만 해당되며 기본값은 우선 순위 기반 선점 예약입니다. – nos

+0

@nos : 타이머 인터럽트는 스케줄 정책에 상관없이 틱 수, 워치 독 타이머 및 세마포어 시간 초과를 추적하기 위해 항상 실행됩니다. 우선 순위 기반 선점 형 스케줄링의 경우, vxWorks 스케줄러는 일부 타이머 조작이 우선 순위가 높은 태스크를 준비 대기열로 이동시키지 않으면 실행될 새 태스크를 선택하지 않습니다. 그러나 공정한 점. 필자는 항상이 대답을 업데이트하여보다 정확하고 시스템 호출을 포함시키고 싶었습니다. 당시에는 완전히 언급하지 않았습니다. – indiv

0

당신이 majorily 맞춤형 타겟 빌드가 없다면 --Ashwin, 스케줄러는 타이머 인터럽트에 의해 호출됩니다. 그러나 세부 사항은 플랫폼에 따라 다릅니다.

0

현재 작업이 완료되거나 차단되면 스케줄러도 호출됩니다.

5

인디브는 매우 좋은 답변을 제공하지만 부분적으로 만 정확합니다.
시스템의 실제 작업은 약간 더 복잡합니다.

스케줄러는 동기 또는 비동기 조작의 결과로 실행될 수 있습니다.

동기는 현재 실행중인 작업의 코드 결과로 발생하는 작업을 나타냅니다. 이에 대한 가장 좋은 예는 세마포어 (semTake)를 가져 오는 것입니다.
세마포를 사용할 수없는 경우 현재 실행중인 작업이 보류 상태가되어 더 이상 실행할 수 없게됩니다. 이 시점에서 스케줄러가 호출되어 실행해야하는 다음 작업을 결정하고 컨텍스트 전환을 수행합니다.

비동기 작업은 기본적으로 인터럽트를 나타냅니다.타이머 인터럽트는 indiv에 의해 잘 설명되었다. 그러나 네트워크 트래픽, 센서, 직렬 데이터 등 여러 가지 요소가 인터럽트를 유발할 수 있습니다.

타이머 인터럽트가 반드시 컨텍스트 전환을 일으키는 것은 아닙니다. 예, 인터럽트가 발생하고 지연된 작업과 타임 슬라이스 카운터가 감소합니다. 그러나 시간 조각이 만료되지 않았거나 높은 우선 순위의 작업 우선 순위 작업이 보류 상태에서 준비 됨 상태로 전환되면 실제로는 스케줄러가 호출되지 않고 원래 작업으로 돌아갑니다. 실행이 중단되었습니다.

스케줄러에는 자체 컨텍스트가 없습니다. 그것은 일이 아닙니다. 이것은 호출되는 모든 컨텍스트에서 실행되는 단순한 코드입니다. 인터럽트 컨텍스트 (비동기) 또는 호출 타스크 컨텍스트 (동기식) 중 하나입니다.