답변:
선점 형 커널에서 커널 모드에서 실행중인 프로세스는 커널 기능 중에 다른 프로세스로 대체 될 수 있습니다.
이것은 커널 모드에서 실행되는 프로세스에만 적용되며 사용자 모드에서 프로세스를 실행하는 CPU는 "유휴"로 간주됩니다. 사용자 모드 프로세스가 커널에서 서비스를 요청하려면 커널이 처리 할 수있는 예외를 발행해야합니다.
예로서:
프로세스 A
는 예외 처리기를 실행하고 B
IRQ 요청으로 프로세스 를 깨우고 커널은 프로세스 A
를 B
(강제 프로세스 스위치)로 바꿉니다 . 프로세스 A
가 완료되지 않은 상태로 남아 있습니다. 스케줄러는 이후에 프로세스를 결정합니다.A
에 CPU 시간이 합니다.
비 선점 커널에서 프로세스 A
가 완료되거나 다른 프로세스가 자신을 방해하도록 계획 할 때까지 (프로세스 된 프로세스 전환) 프로세서의 모든 시간을 사용했을 것입니다.
오늘날의 Linux 기반 운영 체제에는 일반적으로 완전 선점 형 커널이 포함되어 있지 않지만 중단없이 실행해야하는 중요한 기능이 여전히 있습니다. 그래서 나는 이것을 "선택적 선점 커널"이라고 부를 수 있다고 생각합니다.
그 외에도, 리눅스 커널을 (거의) 완전히 선점 적으로 만드는 접근법이 있습니다.
선점은-> 우선 순위가 높은 작업을 위해 현재 예약 된 작업을 선점하거나 중지 할 수있는 운영 체제의 기능입니다. 스케줄링은 프로세스 또는 I / O 스케줄링 등 중 하나 일 수 있지만, 이에 제한되지는 않는다.
Linux에서는 사용자 공간 프로그램이 항상 선점 가능합니다. 커널은 일반 클록 틱을 사용하여 사용자 공간 프로그램이 다른 스레드로 전환하도록 인터럽트합니다. 따라서 커널은 사용자 공간 프로그램이 프로세서를 명시 적으로 해제 할 때까지 기다리지 않습니다 (협력 멀티 태스킹의 경우). 이는 사용자 공간 프로그램의 무한 루프가 시스템을 차단할 수 없음을 의미합니다.
그러나 2.6 커널까지는 커널 자체를 예측할 수 없었습니다. 하나의 스레드가 커널에 들어가 자마자 다른 스레드를 실행할 수 없습니다. 그러나 커널에 이러한 선점이 없으면 대기 시간 및 확장 성과 관련하여 몇 가지 문제가 발생했습니다. 따라서 커널 선점은 2.6 커널에 도입되었으며 CONFIG_PREEMPT 옵션을 사용하여 커널 선점을 활성화 또는 비활성화 할 수 있습니다. CONFIG_PREEMPT가 활성화되면 코드가 로컬 인터럽트를 비활성화 한 경우를 제외하고 모든 위치에서 커널 코드를 선점 할 수 있습니다. 코드의 무한 루프는 더 이상 전체 시스템을 차단할 수 없습니다. CONFIG_PREEMPT가 비활성화되면 2.4 동작이 복원됩니다.
선점 커널을 사용하면 프로세스가 커널 모드에서 실행되는 동안 선점 할 수 있습니다. 비선 점형 커널은 커널 모드에서 실행중인 프로세스를 선점 할 수 없습니다. 커널 모드 프로세스는 커널 모드를 종료하거나 CPU를 자발적으로 제어하거나 차단할 때까지 실행됩니다. 분명히, 비선 점형 커널은 커널에서 한 번에 하나의 프로세스 만 활성화되므로 커널 데이터 구조에 대한 경쟁 조건이 없습니다. 우리는 선점 커널에 대해 똑같이 말할 수 없으므로 공유 커널 데이터에 경쟁 조건이 없도록 신중하게 설계해야합니다. 선점 커널은 SMP 아키텍처를 위해 설계하기가 특히 어렵습니다. 이러한 환경에서는 두 개의 커널 모드 프로세스가 서로 다른 프로세서에서 동시에 실행될 수 있기 때문입니다. 선제 커널은 실시간 프로그래밍에 더 적합합니다. 실시간 프로세스가 현재 커널에서 실행중인 프로세스를 선점 할 수 있기 때문입니다. 또한 프로세서가 대기중인 프로세스를 포기하기 전에 커널 모드 프로세스가 임의로 오랜 시간 동안 실행될 위험이 적기 때문에 선점 형 커널의 응답 성이 향상 될 수 있습니다. 물론 이런 식으로 동작하지 않는 커널 코드를 설계하면이 효과를 최소화 할 수 있습니다. 이 장의 뒷부분에서 다양한 운영 체제가 어떻게 커널 내에서 선점을 관리하는지 살펴 봅니다. 이런 방식으로 작동하지 않는 커널 코드를 설계하면이 효과를 최소화 할 수 있습니다. 이 장의 뒷부분에서 다양한 운영 체제가 어떻게 커널 내에서 선점을 관리하는지 살펴 봅니다. 이런 방식으로 작동하지 않는 커널 코드를 설계하면이 효과를 최소화 할 수 있습니다. 이 장의 뒷부분에서 다양한 운영 체제가 어떻게 커널 내에서 선점을 관리하는지 살펴 봅니다.