답변:
현재 Linux 작업 스케줄러를 CFS (Completely Fair Scheduler)라고합니다. 자세한 내용 은 http://people.redhat.com/mingo/cfs-scheduler/sched-design-CFS.txt 를 참조하십시오. 디자인은 상당히 복잡하며 RTOS에는 적합하지 않습니다.
실시간 시스템에서 일반적인 기법은 속도-모노 닉 스케줄링인데, 특정 가정 (예 : 정적 작업 우선 순위 및 고정 된 실행 시간 및 속도)이있을 경우 강력한 보장이 있기 때문입니다. 다른 많은 알고리즘이 있으며 많은 연구가있었습니다. 기본적으로 필요한 속성과 작업 및 수정 된 사항에 관한 것입니다.
커널의 I / O 일정에 대해 잘 모르겠습니다. 그렇지 않은 경우 :이 답변을 무시하십시오.
위키피디아에 따르면 커널 2.6.18부터 CFG (완전 페어 큐잉) 가 기본으로 설정되어 있습니다.
openSUSE (커널 2.6.37 실행)에서 CFG, NOOP 및 Deadline 사이를 전환 할 수 있습니다 .
Linux 스케줄러에서 사용하는 알고리즘은 선점 우선 순위와 바이어스 된 시간 슬라이싱을 조합 한 복잡한 체계입니다. 우선 순위가 높은 작업에 더 긴 시간 퀀텀을 할당하고 우선 순위가 낮은 작업에 더 짧은 시간 퀀텀을 할당합니다.
각 프로세스를 실시간 프로세스 또는 일반 (기타) 프로세스로 식별합니다. 실시간 작업에는 [0,99] 범위의 정적 우선 순위가 할당되며 숫자가 낮을수록 높은 우선 순위를 나타냅니다.
다른 모든 작업은 좋은 값을 더하거나 뺀 값을 기준으로하는 작업의 대화 형 작업을 기반으로 [100,139] 범위의 동적 우선 순위를 갖습니다.보다 대화 형인 작업은 일반적으로 더 긴 절전 시간을 가지므로 스케줄러가 대화식 작업을 선호하므로 조정이 -5에 더 가깝습니다. (작업의 상호 작용은 I / O를 기다리는 동안 얼마나 오래 잤는 지에 따라 결정됩니다.) 작업의 상호 작용은 값 5가 좋은 값에 더해질 지 또는 빼는지를 결정합니다. 이러한 조정의 결과는 이러한 작업에 우선 순위가 높습니다. 반대로, 휴면 시간이 짧은 작업은 종종 CPU에 더 묶여 있으므로 우선 순위가 낮아집니다.
커널은 실행 가능한 모든 작업 목록을 Runqueue 데이터 구조로 유지 관리합니다. Runqueue에는 활성 및 만료의 두 가지 우선 순위 배열이 포함됩니다. 활성 어레이에는 시간 조각에 남은 시간이있는 모든 작업이 포함되고 만료 된 어레이에는 만료 된 모든 작업이 포함됩니다. 이러한 각 우선 순위 배열에는 우선 순위에 따라 색인화 된 작업 목록이 포함됩니다. 스케줄러는 CPU에서 실행하기 위해 활성 어레이에서 우선 순위가 가장 높은 작업을 선택합니다. 모든 작업이 시간 조각을 모두 사용한 경우 (즉, 활성 배열이 비어 있음) 두 우선 순위 배열이 교환됩니다. 만료 된 배열이 활성 배열이되고 그 반대도 마찬가지입니다.
작업의 타임 퀀텀이 소진되고 만료 된 배열로 이동하면 작업의 동적 우선 순위가 다시 계산됩니다. 따라서 두 어레이가 교환 될 때 새 활성 어레이의 모든 작업에 새로운 우선 순위와 해당 시간 조각이 할당되었습니다. (참고 :이 문서는 Abraham Silberschatz 등의 운영 체제 개념 (제 9 판)에서 발췌 한 것입니다. 자세한 내용은이 책의 섹션 5.6.3을 참조하십시오)
>
특히 책에서 인용 할 때 외부 소스에서 가져온 답변 부분에 대해 "따옴표"형식 (예 :로 시작 )을 사용하십시오.