왜 niceness는 -20에서 19까지입니까?


22

nice명령을 사용하면 프로그램의 스케줄링 우선 순위 ( "niceness")를 조정할 수 있습니다. 내가 사용한 모든 유닉스 계열 시스템에서 niceness는 정수 범위로 지정됩니다. 여기서 -20이 가장 선호되는 예약 우선 순위이고 0이 기본값이며 19가 가장 선호되지 않습니다.

기본 niceness로 0을 갖는 것은 충분히 직관적이지만 왜 범위의 끝점으로 -20과 19가 선택 되었습니까? 부호있는 8 비트 바이트에 정확히 맞는 -128 및 127이 아닌 이유는 무엇입니까? 아니면 -100에서 100까지, 왜 소수의 인간에게는 더 직관적이거나 비슷하지만 약간 더 인체 공학적으로 -99에서 99입니까? -20 ~ 19 범위가 임의로 선택 되었습니까, 아니면 nice원래 인터페이스 했던 스케줄러의 내부 와 관련이 있습니까? (현재 스케줄러가 0에서 139 사이의 우선 순위를 사용하는 Linux의 경우 그러한 관계가 없다는 것을 알고 있습니다. 그러나 나는 -20에서 19 범위의 역사적인 이유에 관심이 있습니다.)


4
특정 범위가 선택된 이유를 설명하는 참조를 찾을 수 없지만 V7에서는 우선 순위가 부호있는 바이트에 맞습니다 ( proc.h 참조 및 setpri 함수가 우선 순위를 min(127, (recent CPU usage on a scale of 0 to 15) + 50 + pp->p_nice - 20)로 설정하고 우선 순위 <25는 예약되었습니다 중단없는 일을하는 프로세스. 따라서 niceness는 제한된 범위 여야했습니다.
Mark Plotnick

답변:


7

내부 니스 수준은 0-39이지만 증분 은 양수 또는 음수입니다. 소스 . 따라서 nice명령에 의해 허용 된 숫자 (양수와 음수) 는 기본 수준 인 20에서 0-39 범위의 어느 곳으로나 이동하는 것입니다.

왜 0-39입니까? 구체적인 범위는 디자이너의 원래 구현에서 효과가있었습니다. 양수 값이 더 좋은 이유는 우선 순위를 결정할 때 프로세스의 최근 CPU 사용량에 nice 수준이 추가되기 때문입니다. 대략적인 라운드 로빈 스케줄링을 제공하기 위해 커널은 각 프로세스가 최근에 소모 한 CPU 양을 추적하고 그다지 많지 않은 프로세스로 전환합니다. 수준이 높을수록 프로세스의 CPU 시간이 길어지고 스케줄러가 해당 프로세스를 휴면 상태 또는 휴면 상태로 두는 빈도가 높아집니다. Maurice J. Bach, Prentice-Hall 1986, sec. 의 UNIX 운영 체제 설계 참조 . 8.1 (특히 친절 함을 위해 8.1.4). ISBN 0-13-201799-7.


1
스케줄러가 좋은 값이 좋지 않은 경우 프로세스를 휴면 상태로 전환한다고 가정하면 실수입니다. 대신, 실행할 준비가 된 다른 프로세스가 있고이 프로세스의 수준이 더 좋으면 스케줄러가 휴면 프로세스를 깨우지 않습니다. 프로세스는 자원에 대한 휴면을 강제하는 syscall을 호출하거나 프로세스가 CPU 퀀텀을 사용하고 CPU를 기다리는 더 많은 특권 프로세스가있을 때 휴면 상태가됩니다.
schily

-4

실수 한 경우 : nice () 인터페이스가 여전히 의미 NZERO가 있는 UNIX에있는 경우 기본값은 nice NZERO is 20입니다.

더 명확하게하기 위해 : 명령에 대해 물었고 nice동시에 절대 수준을 언급했지만 nice 명령은 절대 값을 관리하는 것이 아니라 현재 수준에 비해 상대적으로 증가합니다. 기본 상태 인 경우 nice 수준 NZERO은 20입니다.

좋은 값은 0..2 * NZERO-1 또는 0..39입니다.

기본 UNIX 스케줄러가 여전히 유용한 값으로 유용한 작업을 수행 할 수 있지만 실시간 스케줄러와 같은 특수 스케줄러를 사용하는 경우에는 의미가 없습니다.


2
쉘 인터페이스와 C 인터페이스를 혼동하는 것 같습니다. 이 질문은 nice쉘 명령 에 관한 것 입니다.
Gilles 'SO- 악마 그만'

좋은 명령은 델타에 대해서만 알고 있지만 질문에는 좋은 값이 언급되어 있습니다. 좋은 가치에 관한 질문이었고 이것에 대답했습니다.
schily
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.