리눅스 스케줄링 예제

각 프로세스 설명자는 일정과 관련된 여러 필드를 포함합니다: 완전 공정 스케줄러(CFS)는 Linux의 SCHED_NORMAL(및 POSIX의 SCHED_OTHER)이라고 하는 일반 프로세스에 대해 등록된 스케줄러 클래스입니다. CFS는 커널/sched_fair.c에 정의되어 있습니다. 이 섹션의 나머지 부분에서는 CFS 알고리즘에 대해 설명합니다. 경우에 따라 너무 긴 양자 지속 시간이 시스템의 응답성을 저하시게 됩니다. 예를 들어 두 사용자가 동시에 각 셸 프롬프트에 두 개의 명령을 입력한다고 가정합니다. 한 명령은 CPU 바인딩된 반면 다른 명령은 대화형 응용 프로그램입니다. 두 셸 모두 새 프로세스를 포크하고 사용자 명령의 실행을 위임합니다. 또한, 이러한 새로운 프로세스가 처음에 동일한 우선 순위를 가지고 있다고 가정 (실행 된 프로그램이 배치 또는 대화 형 경우 리눅스는 사전에 모른다). 이제 스케줄러가 실행하도록 CPU 바인딩 프로세스를 선택하면 다른 프로세스가 실행을 시작하기 전에 전체 시간 퀀텀을 기다릴 수 있습니다. 따라서 이러한 기간이 길면 시스템을 시작한 사용자에게 응답하지 않는 것처럼 보일 수 있습니다. Linux의 실시간 스케줄링 정책은 부드러운 실시간 동작을 제공합니다.

Linux는 실시간 작업을 예약하는 기능을 보장하지 않습니다. 하드 실시간 동작을 보장하는 디자인이 없었음에도 불구하고 Linux의 실시간 스케줄링 성능은 매우 좋습니다. 2.6 Linux 커널은 엄격한 타이밍 요구 사항을 충족할 수 있습니다. : 좋은 () 시스템 호출을 통해 프로세스가 기본 우선 순위를 변경할 수 있습니다. 증분 매개변수에 포함된 정수 값은 프로세스 설명자의 우선 순위 필드를 수정하는 데 사용됩니다. 사용자가 수정된 일정 우선 순위로 프로그램을 실행할 수 있는 멋진 유닉스 명령은 이 시스템 호출을 기반으로 합니다. 1991년 리눅스의 첫 번째 버전부터 2.4 커널 시리즈까지, 리눅스 스케줄러는 디자인이 단순했습니다. 이해하기 쉬웠지만 실행 가능한 프로세스나 많은 프로세서에 비추어 제대로 확장되지 않았습니다.

어떤 리눅스 배포판을 사용 하 고 있습니까? CentOS인 경우 /etc/rc.local 파일에 아래 명령을 추가할 수 있으며 시스템이 부팅될 때 이 파일은 명령을 실행합니다. 2.6 커널 시리즈를 시작으로 개발자는 O(1) 스케줄러의 대화형 성능을 개선하기 위한 새로운 프로세스 스케줄러를 도입했습니다. 이들 중 가장 주목할 만한 회전 계단 마감 스케줄러, 공정 한 일정의 개념을 도입, 대기 이론에서 차용, 리눅스의 프로세스 스케줄러에. 이 개념은 커널 버전 2.6.23, 완전 공정 스케줄러 (CFS)에서 O(1) 스케줄러의 최종 교체에 대한 영감이었다. 우선 순위 기반 스케줄링은 Linux에서 정확히 구현되지 않은 일반적인 일정 유형의 스케줄링 알고리즘입니다. 우선 순위가 낮은 프로세스보다 우선 순위가 높은 프로세스가 실행되는 반면 우선 순위가 같은 프로세스는 라운드 로빈(다음 단계, 반복)으로 예약됩니다.