인디브는 매우 좋은 답변을 제공하지만 부분적으로 만 정확합니다.
시스템의 실제 작업은 약간 더 복잡합니다.
스케줄러는 동기 또는 비동기 조작의 결과로 실행될 수 있습니다.
동기는 현재 실행중인 작업의 코드 결과로 발생하는 작업을 나타냅니다. 이에 대한 가장 좋은 예는 세마포어 (semTake)를 가져 오는 것입니다.
세마포를 사용할 수없는 경우 현재 실행중인 작업이 보류 상태가되어 더 이상 실행할 수 없게됩니다. 이 시점에서 스케줄러가 호출되어 실행해야하는 다음 작업을 결정하고 컨텍스트 전환을 수행합니다.
비동기 작업은 기본적으로 인터럽트를 나타냅니다.타이머 인터럽트는 indiv에 의해 잘 설명되었다. 그러나 네트워크 트래픽, 센서, 직렬 데이터 등 여러 가지 요소가 인터럽트를 유발할 수 있습니다.
타이머 인터럽트가 반드시 컨텍스트 전환을 일으키는 것은 아닙니다. 예, 인터럽트가 발생하고 지연된 작업과 타임 슬라이스 카운터가 감소합니다. 그러나 시간 조각이 만료되지 않았거나 높은 우선 순위의 작업 우선 순위 작업이 보류 상태에서 준비 됨 상태로 전환되면 실제로는 스케줄러가 호출되지 않고 원래 작업으로 돌아갑니다. 실행이 중단되었습니다.
스케줄러에는 자체 컨텍스트가 없습니다. 그것은 일이 아닙니다. 이것은 호출되는 모든 컨텍스트에서 실행되는 단순한 코드입니다. 인터럽트 컨텍스트 (비동기) 또는 호출 타스크 컨텍스트 (동기식) 중 하나입니다.
다른 OS에서는 스케줄러가 일반적으로 타이머 인터럽트로 호출되므로 VxWorks를 알지 못하지만 하나의 태스크가 현재 사용 중이더라도 태스크를 전환 할 수 있습니다. – Rudi