"비선점형", "선점형" 및 "선택적 선점형" 코어의 차이점은 무엇입니까?
누군가가 이것에 대해 밝힐 수 있기를 바랍니다.
답변1
선점형 커널에서는 커널 모드에서 실행 중인 프로세스가 커널 기능 실행 중에 다른 프로세스로 대체될 수 있습니다.
이는 커널 모드에서 실행되는 프로세스에만 적용되며 사용자 모드에서 프로세스를 실행하는 CPU는 "유휴"로 간주됩니다. 사용자 모드 프로세스가 커널로부터 서비스를 요청하려면 커널이 처리할 수 있는 예외를 발생시켜야 합니다.
예를 들어:
프로세스는 A
예외 처리기를 실행하고, B
IRQ 요청에 의해 프로세스가 깨어나고, 커널은 해당 프로세스를 (강제 프로세스 전환) A
로 대체합니다. B
프로세스가 A
아직 완료되지 않았습니다. 그런 다음 스케줄러는 프로세스에 A
CPU 시간이 있는지 여부를 결정합니다.
비선점형 코어에서 프로세스는 A
완료될 때까지 또는 다른 프로세스가 이를 중단하도록 자발적으로 결정할 때까지 모든 프로세서 시간을 사용합니다(예약된 프로세스 전환).
오늘날의 Linux 기반 운영 체제에는 일반적으로 완전히 선점 가능한 커널이 포함되어 있지 않으며 중단 없이 실행되어야 하는 몇 가지 중요한 기능이 여전히 있습니다. 그래서 나는 이것을 "선택적 커널 선점"이라고 부를 수 있다고 생각합니다.
그 외에도 Linux 커널을 (거의) 완전히 선점 가능하게 만드는 방법이 있습니다.
답변2
선점은 -> 우선순위가 더 높은 작업을 위해 현재 예약된 작업을 선점하거나 중지하는 운영 체제의 기능입니다. 스케줄링은 프로세스 또는 I/O 스케줄링 중 하나일 수 있지만 이에 국한되지는 않습니다.
Linux에서 사용자 공간 프로그램은 항상 선점 가능합니다. 커널은 일반 시계 틱을 사용하여 사용자 공간 프로그램을 중단하고 다른 스레드로 전환합니다. 따라서 커널은 사용자 공간 프로그램이 명시적으로 프로세서를 해제할 때까지 기다리지 않습니다(협력적 멀티태스킹의 경우처럼). 이는 사용자 공간 프로그램의 무한 루프가 시스템을 차단하지 않음을 의미합니다.
그러나 2.6 커널 이전에는 커널 자체가 선점 불가능했습니다. 스레드가 커널에 들어가면 다른 스레드를 실행하기 위해 선점할 수 없었습니다. 그러나 커널의 선점 부족으로 인해 대기 시간 및 확장성과 관련된 몇 가지 문제가 발생합니다. 따라서 커널 2.6부터 커널 선점 기능이 도입되었으며 CONFIG_PREEMPT 옵션을 사용하여 활성화 또는 비활성화할 수 있습니다. CONFIG_PREEMPT가 활성화되면 코드에 로컬 인터럽트가 비활성화되지 않는 한 커널 코드는 어디에서나 선점될 수 있습니다. 코드의 무한 루프는 더 이상 전체 시스템을 차단할 수 없습니다. CONFIG_PREEMPT가 비활성화된 경우 2.4 동작으로 되돌립니다.
다음에서 다시 인용하고 형식을 지정했습니다. http://www.linuxquestions.org/questions/linux-general-1/pre-emptive-vs-non-pre-emptive-kernel-582437/
답변3
선점형 커널을 사용하면 커널 모드에서 실행되는 동안 프로세스를 선점할 수 있습니다. 비선점형 커널은 커널 모드에서 실행 중인 프로세스가 선점되는 것을 허용하지 않습니다. 커널 모드 프로세스는 커널 모드를 종료하거나 차단하거나 자발적으로 CPU 제어를 포기할 때까지 실행됩니다. 비선점형 커널은 한 번에 하나의 프로세스만 커널에서 활성화되기 때문에 본질적으로 커널 데이터 구조의 경쟁 조건에 영향을 받지 않습니다. 선점형 커널에 대해서도 똑같이 말할 수 없으므로 공유 커널 데이터가 경쟁 조건의 영향을 받지 않도록 주의 깊게 설계해야 합니다. SMP 아키텍처용 선점형 커널을 설계하는 것은 이러한 환경에서 두 개의 커널 모드 프로세스가 서로 다른 프로세서에서 동시에 실행될 수 있기 때문에 특히 어렵습니다. 선점형 커널은 실시간 프로세스가 현재 커널에서 실행 중인 프로세스를 선점할 수 있게 해주기 때문에 실시간 프로그래밍에 더 적합합니다. 또한 선점형 커널은 프로세서를 대기 프로세스에 넘겨주기 전에 커널 모드 프로세스가 임의로 오랜 시간 동안 실행될 위험이 적기 때문에 응답성이 더 좋을 수 있습니다. 물론, 커널 코드가 이런 방식으로 동작하지 않도록 설계함으로써 이 효과를 최소화할 수 있다. 이 장의 뒷부분에서는 다양한 운영 체제가 커널에서 선점을 관리하는 방법을 살펴봅니다.