Linux CFS 스케줄러: 작업은 어떻게 중지됩니까?

Linux CFS 스케줄러: 작업은 어떻게 중지됩니까?

일부 SO 질문과 커널 문서를 읽어서 제가 아는 한, Linux에서는 작업(스레드, 프로세스 또는 작업 그룹)이 가장 짧은 시간 동안(내 노트북의 경우 3밀리초에 따라) 중단 없이 실행되도록 허용됩니다. )을 /proc/sys/kernel/sched_min_capsularity_ns)로 변경하고 로드가 높으면 언제든지 중지할 수 있습니다. 그렇지 않고 CPU 시간이 초과된 경우 다른 작업을 계속하려면 해당 작업을 중지해야 합니다.

그러나 제가 이해한 바에 따르면, 일단 CPU가 작업을 실행하면 아무것도 이를 막을 수 없습니다. 이는 자연스럽게 매우 관련된 두 가지 질문을 생성합니다.

  • 작업을 중지하는 방법은 무엇입니까? 내가 생각할 수 있는 유일한 것은 OS가 일종의 간단한 CPU 인터럽트를 보내는 것입니다. 아니면 여기에 더 복잡한 것이 관련되어 있습니까?
  • CPU가 단일 스레드이고 한 번에 하나의 작업만 실행할 수 있는 경우 작업을 중지할 수 있습니까? CPU가 현재 작업을 실행 중인 경우 Linux는 작업을 중지해야 하는지 확인하기 위해 자체 관리 루틴을 어떻게 실행할 수 있습니까?

답변1

커널이 제어권을 얻을 때마다 스케줄링이 발생할 수 있습니다. 이를 달성하는 방법에는 두 가지가 있으며, 둘 다 단일 CPU에서도 발생할 수 있습니다.

  • 하드웨어 이벤트로 인해 CPU가 해당 인터럽트 핸들러(커널 내)로 전환되는 인터럽트입니다.
  • 시스템 호출, 실행 중인 작업은 커널을 호출하여 일부 작업을 수행합니다.

두 경우 모두 커널이 사용자 공간에 제어권을 반환하기 전에 어떤 실행 가능한 작업이 제어권을 받아야 하는지 결정합니다. 이는 원래 중단된 작업일 수 있지만 반드시 그런 것은 아닙니다.

하드웨어 활동이 많지 않더라도 타이머 인터럽트는 커널이 주기적으로 제어권을 얻도록 보장합니다.

관련 정보