프로세스가 커널 모드에 있을 때 우선순위가 선점을 구성합니까?
우선순위가 각각 3과 5인 두 개의 프로세스가 있다고 가정합니다. 분명히 사용자 모드에서는 우선순위 5 프로세스가 우선순위 3 프로세스에 의해 선점될 수 있습니다. 둘 다 커널 모드에 있을 때 이런 일이 발생합니까?
IO 대기, 오랜 시간이 걸리는 시스템 호출, 동일한 CPU에서 발생하는 인터럽트 등 커널 선점을 위한 다른 기회는 무엇입니까?
답변1
모든 스케줄링 결정은 커널 모드에서 발생합니다. 프로세스가 사용자 모드에서 실행 중이면 커널이 다시 제어할 때까지 다음 스케줄링 지점이 발생하지 않습니다.
프로세스 우선순위는 여러 가지 방법으로 일정을 잡는 데 중요한 역할을 하지만 우선순위가 높은 프로세스가 일정에 영향을 미칠 수 있는 한 가지 명확한 방법이 있습니다. 작업이 실행 가능해지면check_preempt_curr
훅호출되면 후크는 새로 실행 중인 작업이 현재 실행 중인 작업보다 우선순위가 높은 경우 일정 변경을 요청합니다. 이것아니요일정 변경이 즉시 실행되지만, 다음번 일정 변경 가능성이 있을 때 이를 고려해야 한다는 신호입니다. 이는 일반적으로 사용자 공간을 종료할 때 발생합니다(예제 참조).exit_to_usermode_loop
x86), 곧. 다른 작업이 실행하기에 더 "가치 있는" 동안 스케줄러가 실행 중인 경우 일정을 변경해도 새로 실행되는 작업의 일정이 다시 조정되지 않을 수도 있습니다.
선점은 선점 지점에 도달할 때마다 또는 지연 시간이 짧은 코어에서 코어가 중요 섹션에 없는 코드를 실행할 때마다 발생합니다.
바라보다다양한 선점 구성 옵션,기능 __schedule
문서화, 그리고완전히 공정한 스케줄러에 대한 문서더 알아보기.