2011-11-07 2 views
2

동적으로 프로세스 우선 순위를 변경하는 리눅스 커널 코드를 수정하고 싶습니다.우분투의 동적 프로세스 스케줄링

나는 우분투 10.10을 가지고 있으며, 리눅스 2.6.37을 다운로드했다. 내가 발견 한 것은 2.6.37 버전에서 프로세스의 우선 순위를 동적으로 변경한다는 개념이 없다는 것입니다. [CentOS에는 동적으로 프로세스 우선 순위를 변경하는 recalc_task_prio() 함수가 있습니다.]

다른 사람이 프로세스 우위를 동적으로 변경하는 기능을 지원하는 우분투 커널 버전을 알고 있는지 알고 싶었습니다. (CPU가 바운드되고 많은 CPU를 소비하는 경우 프로세스 우선 순위를 불이행 한 것에 따라)?

나는 대부분이 링크로 다스 려 - 사전에 http://www.ibm.com/developerworks/linux/library/l-scheduler/

감사합니다, 리눅스에서

답변

3

을 v2.6.23 새로운 CFS 스케줄러는 한 실행 시간의 나노초에 HZ에 점점 더 의존하는 통합.

모든 프로세스는 싼 O (1) 가장 왼쪽 (따라서 대부분의 가치가있는) 작업이 실행 찾을 수 있도록하는 red-black tree에 저장됩니다. 주기적으로 (task_tick()) 시스템은 다른 프로세스가 "더 가치가있을 수 있는지"검사하여 실행중인 작업을 선점합니다. (물론 작업은 자체적으로 (yield_task())을 생성 할 수 있고 새로 실행 가능한 작업은 실행중인 작업 ()을 우선 처리 할 수 ​​있습니다. 실행 된 프로세스 시간이 계산되어 트리에 다시 삽입됩니다. O (N)) RB 트리에서 새 배치를 찾습니다.

따라서 IO에서 대기하는 작업은 매우 적은 시간을 차지하며 트리에서 너무 멀리 이동하지 않습니다. 이는 우선 순위에 해당합니다 IO 이벤트에서 대기 상태가되지 않는 작업은 더 높은 우선 순위의 작업으로 우선 순위가 적용되기 전에 비교적 많은 CPU 시간이 사용됩니다. 파일.

(내가 옛날에 일반적이었던 것처럼) 스케줄러와 함께하는 숙제 프로젝트 인 경우, 나는 SCHED_FIFO 또는 SCHED_RR과 같은 새로운 실시간 스케줄링 클래스를 추가하는 것을 진지하게 고려할 것입니다. 스케줄러 디자인에 대해 논의하고 있습니다.) 그리고 그런 식으로 작업 우선 순위를 고려합니다. 소개를위한 OS 과정에서 조금 더 가파르다. 예전의 리눅스 나 구형 BSD 커널이 더 사용하기 쉽다.

+0

감사합니다 sarnoid ... 도움이 되니까 .... 2.6.23 이후에는 아무 것도 뜻하지 않으므로 더 복잡한 스케줄러를 가지고 놀아야합니다. 나는 오래된 버전을 고집하려고 노력할 것이다. – Student