저는 Linux 프로세스 스케줄러에 대해 배우고 있으며 pthread_setsched 함수에 대해 읽었습니다.https://man7.org/linux/man-pages/man3/pthread_setschedparam.3.html
나를 놀라게 한 한 가지는 스레드가 자체 우선순위/범주를 수정할 수 있다는 것입니다. 생산자 및 소비자와 같은 특정 다중 스레드 응용 프로그램을 구성하는 데 이것이 어떻게 타당할 수 있는지 알 수 있지만 모든 프로세스가 자체 우선 순위 설정을 요청할 수 있으므로 시스템 안정성 위험이 있는 것 같습니다. 내 helloworld.out이 가장 높은 우선순위로 SCHED_FIFO를 요청하지 못하게 하는 이유는 무엇입니까? 이로 인해 시스템이 완전히 잠길 수 있습니다.
그렇다면 프로세스가 스케줄러를 완전히 제어하는 것을 방지하는 메커니즘은 무엇입니까? 시스템 오류 EPERM을 설정할 수 있는 것 같은데, 이는 어디에 구성되어 있나요?
답변1
커널은 이 작업을 시행합니다. 규칙은 다음에 자세히 설명되어 있습니다."권한 및 리소스 제한" 섹션man 7 sched
;간단히 말하면:
SCHED_DEADLINE
정책은 권한이 있는 스레드에 의해서만 수정(사용)될 수 있습니다CAP_SYS_NICE
.- 0으로 설정된 실시간 스레드는
RLIMIT_RTPRIO
우선 순위를 낮추거나 비실시간 정책으로 전환할 수만 있습니다. - 0이 아닌 값을 가진 스레드는
RLIMIT_RTPRIO
우선 순위가 더 높게 설정되지 않는 한(권한 있는 스레드에 의해) 이 제한의 적용을 받습니다.
스레드는 CAP_SYS_NICE
원하는 것은 무엇이든 할 수 있지만 그 밖의 모든 것은 엄격하게 제어됩니다.