왜 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.