라운드 로빈 스케줄링을 사용하여 커널은 다양한 프로세스/작업에 시간 조각을 제공합니다.
타이머가 시간 초과되면 커널이 타이머를 초기화하고 현재 작업이 중단된 다음 커널이 제어권을 갖게 되는 것 같습니다.
커널은 새로운 작업을 예약하기 위해 타이머 시간 초과 인터럽트를 사용해야 한다는 것을 어떻게 알 수 있습니까? 스케줄러뿐만 아니라 다양한 목적으로 서로 다른 타이머를 사용한다면 어떻게 될까요? 다양한 인터럽트 서비스 루틴은 모두 어디로 가나요? 미리 감사드립니다.
답변1
>= 2.6.23 linux CFS에서 실행되는 스레드와 관련된 답변SCHED_RR 스케줄링 전략.
커널은 다양한 프로세스/작업에 대한 시간 조각을 제공합니다.
이것은 완전히 정확하지 않습니다. 귀하의 설명을 다음과 같이 바꾸면 더 잘 이해할 수 있습니다. 각 스레드에 대해 스케줄러는 일정량의 시간을 계산합니다.
타이머가 시간 초과되면 커널이 타이머를 초기화하고 현재 작업이 중단된 다음 커널이 제어권을 갖게 되는 것 같습니다.
이것은 잘못된 것입니다. 앞서 언급했듯이 스케줄러는 일부 시간 값만 계산합니다. 직접 연결된 타이머는 없으며 해당 시간에 도달해도 타이머 인터럽트가 트리거되지 않습니다.
괜찮아요! 스케줄러는 IRQ가 트리거될 때마다 실행되며, 이는 대기 시간과 관련된 최악의 경우 적어도 CPU_HZ 주파수에서 발생해야 합니다. 스케줄러가 실행될 때마다 실행 대기열을 고려하고 해당 대기열을 다시 계산합니다.레드 블랙 트리.
스케줄러가 실행되는 동안 SCHED_RR 작업이 실행 중이고 다른 모든 SCHED_RR 작업이 차단되고(이벤트를 기다리는 중) 우선순위가 더 높은 다른 실시간 예약 작업을 실행할 수 없는 경우... 작업이 디스패치되지 않습니다. ,관련 시간보다 오래 실행될 수 있음.
다른 SCHED_RR 작업을 실행할 수 있는 경우, 실행 중인 작업이 해당 시간보다 크거나 같은 CPU 시간을 얻으면 해당 작업은 예약되어 대기열 뒤로 던져지며(우선 순위가 가장 낮음) 실행 가능한 작업은 에 준비하세요.
IMHO 귀하의 마지막 질문은 이 질문의 요점과 관련이 없으며 다른 스레드의 일부로 남겨두는 것이 좋습니다.