CONFIG_PREEMPT가 없으면 커널이 선점할 수 없나요?

CONFIG_PREEMPT가 없으면 커널이 선점할 수 없나요?

CentOS 8/Redhat 8 및 Ubuntu 22.04를 확인했는데 둘 다 기본 커널 설정 CONFIG_PREEMPT가 설정되어 있지 않습니다.

CONFIG_PREEMPT is not set

제가 이해한 바에 따르면, 커널은 기본적으로 선점할 수 있어야 합니다. 아니요?

답변1

CONFIG_PREEMPT구성 항목에 대한 설명을 읽을 수 있습니다.여기, 내용은 다음과 같습니다.

이 옵션은 모든 커널 코드(중요 섹션에서 실행되지 않음)를 선점 가능하게 만들어 커널의 대기 시간을 줄입니다. 이를 통해 프로세스가 시스템 호출을 실행하는 커널 모드에 있고 자연적인 선점 지점에 도달하지 못하는 경우에도 우선 순위가 낮은 프로세스의 비자발적 선점을 허용하여 대화형 이벤트에 반응할 수 있습니다. 이를 통해 시스템에 로드가 있는 경우에도 응용 프로그램이 보다 "부드럽게" 실행될 수 있지만 처리량이 약간 낮아지고 커널 코드의 런타임 오버헤드가 최소화됩니다.

일반적으로 사용자 공간 코드만 선점 가능합니다. 활성화되면 CONFIG_PREEMPT커널 공간에서 실행되는 코드는 다음과 같습니다.반품미리 결정된.

관련 정보