질문 앞에 약간의 토론. Linux 2.4 커널은 우선 순위가 낮기 때문에 커널 모드에서 시스템 호출을 처리 할 때 컨텍스트 전환이 필요한 경우 set_need_resched를 수행하여 플래그를 발생시킨 다음 사용자 모드로 돌아갈 때 플래그를 지정하고 컨텍스트 전환을 수행하십시오.리눅스 2.6 스케줄링 및 선매 - 선취 계산 사용
선점 형 커널이있는 Linux 2.6과 비교해보십시오. 2.4의 커널을 가져 와서 set_need_resched (발생 플래그)를 schedule() (다시 스케줄의 지시 실행)로 변경할 수 없습니다. 따라서 Linux 커널 2.6에서는 spin_lock()에서 매번 증가하고 감소하는 카운터 preempt_count가 있습니다. on spin_unlock().
실제로이 필드 "preempt_count"는 커널을 선점 할 수 있는지 여부를 결정합니다.
(current->need_resched == 1) && (current->preempt_count == 0)
해당하는 다음 커널 콘텍스트 스위치를 실행한다 : 클록으로부터 복귀에 예를 들면 조건 경우 인터럽트.
질문은 Linux 2.6 커널이 스핀 록 유형 잠금이 유지 될 때 선매를 방지하는 이유입니다.
커널이 선점을 막지 못한 경우에 발생할 수있는 시나리오는 무엇입니까? 할 수있는 한 세부적인 예를 들어 줄 수 있습니까?
감사합니다.
커널 코드가 스핀 록을 보유한 후 linux가 커널 선점을 비활성화하는 이유는 무엇입니까? (https://stackoverflow.com/questions/18254713/why-linux-disables-kernel-preemption-after-the-kernel- code-hold-a-spinlock) – Tsyvarev