Linux에서 스핀록에 대한 "컨텍스트 전환 방지" 기능을 구현하는 방법에 대해 생각 중입니다. 나는 그 뒤에 있는 논리만 알고 있으므로 큰 그림/의사 코드는 허용됩니다.
답변1
Spinlock은 Linux 기능이 아니며, 적어도 대부분의 CPU에서는 매우 간단한 CPU 기능입니다.
스핀 잠금은 컨텍스트 전환을 방지하지 않습니다. 컨텍스트 전환을 비활성화하면 대부분의 경우 Linux에서는 필요하지 않은 멀티태스킹도 비활성화됩니다.
그러나 스핀록은 컨텍스트 스위치로 보호됩니다. 스핀락의 본질은 잠금 시도가 단일 CPU 명령에서 발생한다는 것입니다. 컨텍스트 전환은 프로세스를 파괴하지 않습니다CPU 명령 내부, 그 이후에만.
구현은 OS 특정이 아니라 CPU 특정입니다. 즉, 레지스터 내용과 메모리 주소를 원자적으로 교환할 수 있는 니모닉이 필요합니다. x86에서는 다음을 통해 이런 일이 발생할 수 있습니다.시그.