내가 이해한 바로는 Linux 프로세스에는 스케줄링 목적으로 "좋은" 값과 실시간 우선순위 값이 있으며 이는 nice
및 명령을 사용하여 chrt
명시적으로 변경할 수 있습니다 . 사용자가 프로세스의 실시간 우선순위를 명시적으로 설정하지 않은 경우 어떻게 설정됩니까?
답변1
로버트 러브(Robert Love)의 말을 인용하자면:
스케줄러는 프로세스가 대화형인지 여부를 마법처럼 알 수 없습니다. 작업이 I/O 중심인지 프로세서 중심인지를 정확하게 반영하는 몇 가지 경험적 방법이 필요합니다. 가장 대표적인 지표는 작업 기간입니다.잠. 작업이 대부분의 시간을 자면서 보낸다면,I/O 제한. 작업이 절전 모드에 들어가는 시간보다 실행하는 데 더 많은 시간이 걸리는 경우 해당 작업은 실패합니다.인터렉티브. 이것은 극단적으로 확장되어 거의 항상 잠을 자는 것입니다. 완전히 I/O에 묶여 있음, 거의 항상 실행될 수 있는 작업은 다음과 같습니다.프로세서가 완전히 제한됨.
이러한 경험적 방법을 구현하기 위해 Linux는 프로세스가 절전 상태에서 소비한 시간과 프로세스가 실행 가능 상태에서 소비한 시간을 기록하는 실행 탭을 유지 관리합니다. 값은
sleep_avg member
에 저장됩니다task_struct
.MAX_SLEEP_AVG
기본적으로 범위는 0~10밀리초입니다 . 작업이 절전 모드 후에 실행 가능해지면sleep_avg
이 값에 도달할 때까지 절전 기간만큼 증가합니다MAX_SLEEP_AVG
. 작업이 실행되는 각 타이머 틱마다 작업은sleep_avg
0에 도달할 때까지 감소합니다.
그러므로 나는 커널이 위의 휴리스틱을 기반으로 스케줄링 정책을 결정한다고 믿습니다. 내가 아는 한, 실시간 프로세스의 경우 스케줄링 정책은 SCHED_FIFO
또는 중 하나 일 수 있습니다 SCHED_RR
. 두 전략은 SCHED_RR
시간 조각 대신 시간 조각이 있다는 점을 제외하면 유사합니다 SCHED_FIFO
.
그러나 실시간 프로세스 일정을 변경할 수도 있습니다. 당신은 참조 할 수 있습니다이것실시간 프로세스 스케줄링 변경 방법에 대한 질문입니다.
인용하다
http://www.informit.com/articles/article.aspx?p=101760&seqNum=2
답변2
커널의 구성 요소인 프로세스 스케줄러는 우선순위 기반 스케줄링 알고리즘을 사용하여 주어진 시스템의 프로세스 간에 프로세서 시간을 할당하는 방법을 결정합니다. 초기 기본 우선순위 또는 기본 우선순위 0(내 생각에는)부터 시작하여 스케줄러는 스케줄링 목표를 달성하기 위해 프로세스가 I/O 또는 CPU 집약적인지 여부에 따라 우선순위를 동적으로 늘리거나 줄일 수 있습니다. I/O 작업을 기다리는 데 시간을 소비하는 I/O 프로세스는 우선 순위가 동적으로 증가하는 반면, 타임 슬라이스(작업이 선점되기 전까지 실행될 수 있는 시간)를 지속적으로 사용하는 CPU 집약적 프로세스는 우선 순위가 동적으로 감소합니다.
애플리케이션 유형(예: 브라우저/IDE 등의 대화형)에 따라 스케줄러는 정책을 사용하여 우선 순위를 설정하고 이에 따라 설정합니다. 최종 사용자는 이들로부터의 응답을 기대하기 때문에 대화형이 더 높은 우선순위를 갖습니다.