이 nice
명령을 사용하면 프로그램의 예약 우선순위("niceness")를 조정할 수 있습니다. 내가 작업한 모든 유닉스 계열 시스템에서 niceness는 일련의 정수로 지정됩니다. 여기서 -20은 가장 유리한 스케줄링 우선순위이고, 0은 기본값, 19는 가장 불리한 우선순위입니다.
기본 친근감으로 0을 갖는 것은 충분히 직관적이지만 범위의 끝점으로 -20과 19를 선택하는 이유는 무엇입니까? 부호 있는 8비트 바이트에 정확히 맞는 -128과 127은 어떨까요? 아니면 소수점을 생각하는 인간에게 더 직관적인 -100에서 100, 또는 비슷하지만 더 인체공학적인 -99에서 99는 어떨까요? -20부터 19까지의 범위가 임의로 선택된 건가요, 아니면 처음에 인터페이스했던 스케줄러의 내부와 어떤 관계가 있는 건가요 nice
? (내가 아는 한, 이 관계는 현재 스케줄러가 0~139 범위의 우선순위를 사용하는 Linux의 경우에는 존재하지 않습니다. 그러나 나는 -20~19 범위의 역사적 이유에 관심이 있습니다.)
답변1
내부 친화도는 0~39이지만증가긍정적인가, 부정적인가. 원천. 따라서 대답은 명령이 허용하는 숫자(양수 및 음수)를 nice
통해 기본 수준인 20에서 0-39 범위의 숫자로 이동할 수 있다는 것입니다.
그렇다면 왜 0-39일까요? 특정 범위는 디자이너가 처음에 구현한 범위입니다. 양수 값이 클수록 좋은 이유는 우선 순위 지정 시 프로세스의 최근 CPU 사용량에 좋음 수준이 추가되기 때문입니다. 대략적인 라운드 로빈 스케줄링을 제공하기 위해 커널은 각 프로세스가 최근에 소비한 CPU 양을 추적하고 그렇게 많은 CPU를 소비하지 않는 프로세스로 전환합니다. 양호 수준이 높을수록 프로세스의 CPU 시간이 길어지고 스케줄러가 프로세스를 절전 모드로 설정하거나 계속 절전 모드로 유지하는 빈도가 높아집니다. 바라보다UNIX 운영 체제 설계Maurice J. Bach, Prentice-Hall, 1986, 섹션 2 8.1(특히 미학적 이유로 8.1.4). ISBN 0-13-201799-7.
답변2
당신이 틀렸습니다. UNIX를 사용하는 경우 nice() 인터페이스는 여전히 의미가 있으며 NZERO
기본 Nice 값과 NZERO is 20
.
더 명확하게 하기 위해 절대 수준을 언급하면서 명령에 대해 물었지만 nice
nice 명령은 절대 값을 관리하지 않고 현재 수준에 상대적인 증분을 관리합니다. 기본적으로 nice 레벨은 NZERO
20입니다.
좋은 값은 0..2*NZERO-1 또는 0..39입니다.
기본 UNIX 스케줄러는 여전히 좋은 값으로 몇 가지 유용한 작업을 수행할 수 있지만 특수 스케줄러(예: 실시간 스케줄러)를 사용하는 경우에는 의미가 없습니다.