Linux 커널은 두 개의 독립적인 우선순위 범위를 구현합니다. 첫 번째는 적절한 값으로 -20에서 +19 사이의 숫자이며 기본값은 0입니다.
Nice 값은 모든 Unix 시스템에서 사용되는 표준 우선순위 범위이지만, 다양한 Unix 시스템에서는 이를 다른 방식으로 적용합니다.
제가 알고 싶은 것은 처리 후에 할당할 좋은 값을 계산하기 위해 어떤 매개변수가 사용되는지입니다.
시간 내 주셔서 감사합니다.
답변1
그 뒤에 있는 숫자를 정확하게 알려줄 수 있는 은 공식은 없습니다. 이는 모두 커널 스케줄러 측의 특정 구현에 따라 다릅니다.
세부 사항에 관심이 있다면 기본 Linux 커널 스케줄러(Completely Fair Scheduler)의 우선 순위 논리를 확인할 수 있습니다.여기.
향후 방문자를 위해 복사하여 붙여넣으세요(링크가 몇 년 안에 만료되는 경우).
우선순위
모든 프로세스에는 두 가지 우선순위가 연관되어 있습니다. 하나는 과정의 아름다운 가치이다. 범위는 -20부터 19까지이며 기본값은 0입니다. nice 값이 낮을수록 우선순위가 높아집니다. nice 값이 5(프로세스 1)와 10(프로세스 2)인 프로세스가 2개 있으면 프로세스 1의 우선순위가 높습니다.
쉘에서 ps -el 명령을 사용하여 프로세스의 좋은 값을 확인할 수 있습니다. 커널 공간에서는 MAX_RT_PRIORITY + 20 + OK 값으로 변환됩니다. task_struct의 static_prio 필드에 저장됩니다.
두 번째 우선순위는 실시간 우선순위입니다. 그들은 반대 개념을 가지고 있습니다. 즉, 값이 높을수록 프로세스의 우선 순위가 높아집니다. 범위는 0부터 100까지입니다.
task_struct에는 prio라는 필드도 있는데, 이 필드는 우선순위 반전과 같은 상황을 피하기 위해 스케줄러가 우선순위를 높이거나 차단하는 것을 고려 중인 프로세스의 유효 우선순위를 저장합니다.
초기 스케줄러에서는 우선 순위 값을 사용하여 다음 프로세스와 프로세서에서 얻을 수 있는 시간 조각을 결정했습니다. 이 접근 방식에는 많은 단점이 있으며 이는 Robet Love의 저서 "Linux Kernel Development"에 잘 설명되어 있습니다.
CFS에서는 프로세스가 프로세서에 걸리는 절대 시간을 결정하기 위해 우선순위를 사용하는 대신 시스템의 전체 로드를 기반으로 프로세스가 프로세서에 걸리는 프로세서 시간의 비율을 계산합니다. 프로세스가 필요한 것보다 적은 데이터를 얻으면 결국 RB 트리의 왼쪽으로 이동하여 프로세서 시간을 얻게 됩니다.